• Модуль: statistic
  • Путь к файлу: ~/bitrix/modules/statistic/classes/general/statevent.php
  • Класс: CAllStatEvent
  • Вызов: CAllStatEvent::AddCurrent
static function AddCurrent($event1, $event2="", $event3="", $money="", $currency="", $goto="", $chargeback="N", $site_id=false)
{
	$err_mess = "File: ".__FILE__."
Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $event1 = trim($event1); $event2 = trim($event2); $event3 = trim($event3); if($event1 == '' && $event2 == '') return array("EVENT_ID"=>0, "TYPE_ID"=>0, "EID"=>0); //Check if register event for searcher if(intval($_SESSION["SESS_SEARCHER_ID"]) > 0 && COption::GetOptionString("statistic", "SEARCHER_EVENTS")!="Y") return array("EVENT_ID"=>0, "TYPE_ID"=>0, "EID"=>0); // lookup event type ID $EVENT_ID = CStatEvent::SetEventType($event1, $event2, $arEventType); // return if it's unknown if($EVENT_ID <= 0) return array("EVENT_ID"=>0, "TYPE_ID"=>0, "EID"=>0); if ($site_id===false) { if (defined("ADMIN_SECTION") && ADMIN_SECTION===true) { $sql_site = "null"; $site_id = false; } elseif (defined("SITE_ID")) { $sql_site = "'".$DB->ForSql(SITE_ID,2)."'"; $site_id = SITE_ID; } else { $sql_site = "null"; $site_id = false; } } else { if (trim($site_id) <> '') { $sql_site = "'".$DB->ForSql($site_id,2)."'"; } else { $sql_site = "null"; $site_id = false; } } $money = doubleval($money); // convert when currency specified if (trim($currency) <> '') { $base_currency = GetStatisticBaseCurrency(); if ($base_currency <> '') { if ($currency!=$base_currency) { if (CModule::IncludeModule("currency")) { $rate = CCurrencyRates::GetConvertFactor($currency, $base_currency); if ($rate>0 && $rate!=1) $money = $money * $rate; } } } } $money = round($money,2); $chargeback = ($chargeback=="Y") ? "Y" : "N"; $goto = preg_replace("/#EVENT_GID#/i", CStatEvent::GetGID($site_id), $goto); $sql_KEEP_DAYS = (intval($arEventType["KEEP_DAYS"])>0) ? intval($arEventType["KEEP_DAYS"]) : "null"; $arr = false; $referer_url = $_SERVER["HTTP_REFERER"] == '' ? $_SESSION["SESS_HTTP_REFERER"] : $_SERVER["HTTP_REFERER"]; if ($referer_url <> '') { if($url = @parse_url($referer_url)) { $rs = CSite::GetList("LENDIR", "DESC", Array("ACTIVE"=>"Y", "DOMAIN"=>"%".$url["host"], "IN_DIR"=>$url["path"])); $arr = $rs->Fetch(); } } $sql_referer_site_id = is_array($arr) && ($arr["ID"] <> '')? "'".$DB->ForSql($arr["ID"],2)."'": "null"; $HIT_ID = CKeepStatistics::GetCuurentHitID(); $arFields = Array( "EVENT_ID" => "'".$EVENT_ID."'", "EVENT3" => "'".$DB->ForSql($event3,255)."'", "MONEY" => $money, "DATE_ENTER" => $DB->GetNowFunction(), "REFERER_URL" => "'".$DB->ForSql($referer_url,2000)."'", "URL" => "'".$DB->ForSql(__GetFullRequestUri(),2000)."'", "REDIRECT_URL" => "'".$DB->ForSql($goto,2000)."'", "SESSION_ID" => (intval($_SESSION["SESS_SESSION_ID"])>0) ? intval($_SESSION["SESS_SESSION_ID"]) : "null", "GUEST_ID" => (intval($_SESSION["SESS_GUEST_ID"])>0) ? intval($_SESSION["SESS_GUEST_ID"]) : "null", "ADV_ID" => ($_SESSION["SESS_LAST_ADV_ID"]>0) ? $_SESSION["SESS_LAST_ADV_ID"] : "null", "HIT_ID" => ($HIT_ID > 0 ? $HIT_ID : "NULL"), "COUNTRY_ID" => "'".$DB->ForSql($_SESSION["SESS_COUNTRY_ID"],2)."'", "KEEP_DAYS" => $sql_KEEP_DAYS, "CHARGEBACK" => "'".$chargeback."'", "SITE_ID" => $sql_site, "REFERER_SITE_ID" => $sql_referer_site_id, ); if (intval($_SESSION["SESS_LAST_ADV_ID"])>0 && intval($_SESSION["SESS_ADV_ID"])<=0) $arFields["ADV_BACK"]="'Y'"; $eid = $DB->Insert("b_stat_event_list", $arFields, $err_mess.__LINE__); // in case of first occurence if ($arEventType["DATE_ENTER"] == '') { // set date of the first event $arFields = Array("DATE_ENTER"=>$DB->GetNowFunction()); $DB->Update("b_stat_event",$arFields,"WHERE ID='".$EVENT_ID."'",$err_mess.__LINE__); } // day counter update $arFields = Array( "DATE_LAST" => $DB->GetNowFunction(), "COUNTER" => "COUNTER + 1", "MONEY" => "MONEY + ".$money ); $rows = $DB->Update("b_stat_event_day",$arFields,"WHERE EVENT_ID='".$EVENT_ID."' and ".CStatistics::DBDateCompare("DATE_STAT"),$err_mess.__LINE__); // there was no records updated if (intval($rows)<=0) { // so add one $arFields_i = Array( "DATE_STAT" => $DB->GetNowDate(), "DATE_LAST" => $DB->GetNowFunction(), "EVENT_ID" => $EVENT_ID, "COUNTER" => 1, "MONEY" => $money ); $DB->Insert("b_stat_event_day",$arFields_i, $err_mess.__LINE__); } elseif (intval($rows)>1) // more than one record for event { // delete $strSql = "SELECT ID FROM b_stat_event_day WHERE EVENT_ID='".$EVENT_ID."' and ".CStatistics::DBDateCompare("DATE_STAT")." ORDER BY ID"; $i = 0; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); while ($ar = $rs->Fetch()) { $i++; if ($i > 1) { $strSql = "DELETE FROM b_stat_event_day WHERE ID = ".$ar["ID"]; $DB->Query($strSql, false, $err_mess.__LINE__); } } } // guest counter $arFields = Array("C_EVENTS" => "C_EVENTS+1"); $DB->Update("b_stat_guest", $arFields, "WHERE ID=".intval($_SESSION["SESS_GUEST_ID"]), $err_mess.__LINE__,false,false,false); // session counter $arFields = Array("C_EVENTS" => "C_EVENTS+1"); $DB->Update("b_stat_session", $arFields, "WHERE ID=".intval($_SESSION["SESS_SESSION_ID"]), $err_mess.__LINE__,false,false,false); // events counter $arFields = Array("C_EVENTS" => "C_EVENTS+1"); $DB->Update("b_stat_day", $arFields, "WHERE ".CStatistics::DBDateCompare("DATE_STAT"), $err_mess.__LINE__,false,false,false); // when site defined if ($site_id <> '') { // update site $arFields = Array("C_EVENTS" => "C_EVENTS+1"); $DB->Update("b_stat_day_site", $arFields, "WHERE SITE_ID='".$DB->ForSql($site_id,2)."' and ".CStatistics::DBDateCompare("DATE_STAT"), $err_mess.__LINE__); } // there is advertising compaign defined if (intval($_SESSION["SESS_ADV_ID"])>0 || intval($_SESSION["SESS_LAST_ADV_ID"])>0) { // increase revenue if ($money!=0) { $sign = ($chargeback=="Y") ? "-" : "+"; $arFields = array( "REVENUE" => "REVENUE ".$sign." ".$money, ); $DB->Update("b_stat_adv", $arFields, "WHERE ID='".intval($_SESSION["SESS_LAST_ADV_ID"])."'",$err_mess.__LINE__,false,false,false); } if (intval($_SESSION["SESS_ADV_ID"])>0) { $arFields = Array( "COUNTER" => "COUNTER + 1", "MONEY" => "MONEY + ".$money ); } else { $arFields = Array( "COUNTER_BACK" => "COUNTER_BACK + 1", "MONEY_BACK" => "MONEY_BACK + ".$money ); } $rows = $DB->Update("b_stat_adv_event",$arFields,"WHERE ADV_ID='".intval($_SESSION["SESS_LAST_ADV_ID"])."' and EVENT_ID='".$EVENT_ID."'",$err_mess.__LINE__); if(intval($rows) <= 0) { $arFields = Array( "ADV_ID" => "'".$_SESSION["SESS_LAST_ADV_ID"]."'", "EVENT_ID" => "'".$EVENT_ID."'", ); if(intval($_SESSION["SESS_ADV_ID"]) > 0) { $arFields["COUNTER"] = "1"; $arFields["MONEY"] = $money; } else { $arFields["COUNTER_BACK"] = "1"; $arFields["MONEY_BACK"] = $money; } $DB->Insert("b_stat_adv_event", $arFields, $err_mess.__LINE__); } if (intval($_SESSION["SESS_ADV_ID"])>0) { $arFields = Array( "COUNTER" => "COUNTER + 1", "MONEY" => "MONEY + ".$money, ); } else { $arFields = Array( "COUNTER_BACK" => "COUNTER_BACK + 1", "MONEY_BACK" => "MONEY_BACK + ".$money, ); } $rows = $DB->Update("b_stat_adv_event_day",$arFields,"WHERE ADV_ID='".intval($_SESSION["SESS_LAST_ADV_ID"])."' and EVENT_ID='".$EVENT_ID."' and ".CStatistics::DBDateCompare("DATE_STAT"),$err_mess.__LINE__,false,false,false); if(intval($rows) <= 0) { $arFields = Array( "ADV_ID" => ($_SESSION["SESS_LAST_ADV_ID"]>0) ? $_SESSION["SESS_LAST_ADV_ID"] : "null", "EVENT_ID" => "'".$EVENT_ID."'", "DATE_STAT" => $DB->GetNowDate(), ); if(intval($_SESSION["SESS_ADV_ID"]) > 0) { $arFields["COUNTER"] = "1"; $arFields["MONEY"] = $money; } else { $arFields["COUNTER_BACK"] = "1"; $arFields["MONEY_BACK"] = $money; } $DB->Insert("b_stat_adv_event_day", $arFields, $err_mess.__LINE__); } elseif(intval($rows) > 1) { $strSql = "SELECT ID FROM b_stat_adv_event_day WHERE ADV_ID='".intval($_SESSION["SESS_LAST_ADV_ID"])."' and EVENT_ID='".$EVENT_ID."' and ".CStatistics::DBDateCompare("DATE_STAT")." ORDER BY ID"; $i = 0; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); while ($ar = $rs->Fetch()) { $i++; if ($i>1) { $strSql = "DELETE FROM b_stat_adv_event_day WHERE ID = ".$ar["ID"]; $DB->Query($strSql, false, $err_mess.__LINE__); } } } } // todays traffic counters CTraffic::IncParam(array("EVENT" => 1), array("EVENT" => 1)); if ($_SESSION["SESS_COUNTRY_ID"] <> '') CStatistics::UpdateCountry($_SESSION["SESS_COUNTRY_ID"], Array("C_EVENTS" => 1)); if ($_SESSION["SESS_CITY_ID"] > 0) CStatistics::UpdateCity($_SESSION["SESS_CITY_ID"], Array("C_EVENTS" => 1)); return array("EVENT_ID"=>intval($EVENT_ID), "TYPE_ID"=>intval($EVENT_ID), "EID"=>intval($eid)); }