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));
}