public static function Set_Guest() { $err_mess = "File: ".__FILE__."<br>Line: "; stat_session_register("SESS_GUEST_ID"); // ID гостя stat_session_register("SESS_GUEST_NEW"); // флаг "новый гость" stat_session_register("SESS_LAST_USER_ID"); // под кем гость был авторизован в последний раз stat_session_register("SESS_LAST_ADV_ID"); // по какой рекламной кампании был в последний раз stat_session_register("SESS_GUEST_FAVORITES"); // флаг добавлял ли гость сайт в фавориты stat_session_register("SESS_LAST"); // Y - гость сегодня уже заходил; N - еще не заходил global $USER, $APPLICATION; $DB = CDatabase::GetModuleConnection('statistic'); $last_referer1 = ""; $last_referer2 = ""; if (defined("ADMIN_SECTION") && ADMIN_SECTION===true) $sql_site = "null"; elseif (defined("SITE_ID")) $sql_site = "'".$DB->ForSql(SITE_ID,2)."'"; else $sql_site = "null"; $ERROR_404 = (defined("ERROR_404") && ERROR_404=="Y") ? "Y" : "N"; $REPAIR_COOKIE_GUEST = "N"; if (!isset($_SESSION["SESS_GUEST_NEW"])) $_SESSION["SESS_GUEST_NEW"] = "N"; $_SESSION["SESS_GUEST_ID"] = intval($_SESSION["SESS_GUEST_ID"]); $COOKIE_GUEST_ID = intval($APPLICATION->get_cookie("GUEST_ID")); if($COOKIE_GUEST_ID==0) $COOKIE_GUEST_ID = intval($_SESSION["SESS_GUEST_ID"]); // если сессия только открылась if (intval($_SESSION["SESS_SESSION_ID"])<=0) { // выбираем из базы параметры гостя $q = CGuest::GetLastByID($COOKIE_GUEST_ID); // если ничего не выбрали то if (!($qr=$q->Fetch())) { // считаем гостя новым $_SESSION["SESS_GUEST_ID"] = 0; $_SESSION["SESS_GUEST_NEW"] = "Y"; $_SESSION["SESS_GUEST_FAVORITES"] = "N"; // если у него в cookie хранится GUEST_ID то if ($COOKIE_GUEST_ID>0) { $_SESSION["SESS_GUEST_NEW"] = "N"; // получаем дату последнего посещения сайта данным гостем // если формат корректный то if ($LAST_VISIT = MkDateTime($GLOBALS["APPLICATION"]->get_cookie("LAST_VISIT"),"d.m.Y H:i:s")) { // получаем дату последней инсталляции таблиц модуля $DATE_INSTALL = COption::GetOptionString("main", "INSTALL_STATISTIC_TABLES", "NOT_FOUND"); if ($DATE_INSTALL=="NOT_FOUND") { $DATE_INSTALL = date("d.m.Y H:i:s",time()); COption::SetOptionString("main", "INSTALL_STATISTIC_TABLES", $DATE_INSTALL, "Installation date of Statistics module tables"); } if ($DATE_INSTALL = MkDateTime($DATE_INSTALL,"d.m.Y H:i:s")) { // если таблицы были инсталлированы после последнего посещения сайта то if ($DATE_INSTALL>$LAST_VISIT) { // посетитель считается новым т.к. он нигде не был учтен $_SESSION["SESS_GUEST_NEW"] = "Y"; } } } // устанавливаем флаг того что мы восстанавливаем гостя $REPAIR_COOKIE_GUEST = "Y"; // получаем идентификатор его последней рекламной кампании $COOKIE_ADV = $GLOBALS["APPLICATION"]->get_cookie("LAST_ADV"); } } else // иначе если выбрали параметры гостя то { // то запоминаем их в сессии $_SESSION["SESS_GUEST_FAVORITES"] = $qr["FAVORITES"]; $_SESSION["SESS_GUEST_FAVORITES"] = ($_SESSION["SESS_GUEST_FAVORITES"]=="Y") ? "Y" : "N"; if (!isset($_SESSION["SESS_GUEST_NEW"])) $_SESSION["SESS_GUEST_NEW"] = "N"; $_SESSION["SESS_GUEST_ID"] = intval($qr["ID"]); $_SESSION["SESS_LAST_ADV_ID"]=intval($qr["LAST_ADV_ID"]); $_SESSION["SESS_LAST_USER_ID"] = intval($qr["LAST_USER_ID"]); $_SESSION["SESS_LAST"] = $qr["LAST"]; if ($_SESSION["SESS_LAST_ADV_ID"]>0) { $strSql = "SELECT REFERER1, REFERER2 FROM b_stat_adv WHERE ID=".$_SESSION["SESS_LAST_ADV_ID"]; $w = $DB->Query($strSql, false, $err_mess.__LINE__); if ($wr = $w->Fetch()) { $last_referer1 = $wr["REFERER1"]; $last_referer2 = $wr["REFERER2"]; } } } } // если есть необходимость то if ($_SESSION["SESS_GUEST_ID"]<=0) { // вставляем гостя в базу $arFields = Array( "FIRST_DATE" => $DB->GetNowFunction(), "FIRST_URL_FROM" => "'".$DB->ForSql($_SERVER["HTTP_REFERER"],2000)."'", "FIRST_URL_TO" => "'".$DB->ForSql(__GetFullRequestUri(),2000)."'", "FIRST_URL_TO_404" => "'".$DB->ForSql($ERROR_404)."'", "FIRST_SITE_ID" => $sql_site, "FIRST_ADV_ID" => intval($_SESSION["SESS_ADV_ID"]) , "FIRST_REFERER1" => "'".$DB->ForSql($_SESSION["referer1"],255)."'", "FIRST_REFERER2" => "'".$DB->ForSql($_SESSION["referer2"],255)."'", "FIRST_REFERER3" => "'".$DB->ForSql($_SESSION["referer3"],255)."'" ); // если мы восстанавливаем гостя по данным записаным в его cookie то if ($REPAIR_COOKIE_GUEST=="Y") { // если гость не считается новым то добавим ему одну сессию if ($_SESSION["SESS_GUEST_NEW"]=="N") $arFields["SESSIONS"] = 1; // если у него в cookie была рекламная кампания то $COOKIE_ADV = intval($COOKIE_ADV); if ($COOKIE_ADV>0) { // проверяем есть ли такая кампания в базе $strSql = "SELECT REFERER1, REFERER2 FROM b_stat_adv WHERE ID='".$COOKIE_ADV."'"; $w = $DB->Query($strSql, false, $err_mess.__LINE__); // если в базе есть такая рекламная кампания то if ($wr = $w->Fetch()) { // считаем что гость вернулся по данной рекламной кампании $_SESSION["SESS_LAST_ADV_ID"] = $COOKIE_ADV; // если последний вход записанный в cookie // не был прямым входом по рекламной кампании то $arFields["FIRST_ADV_ID"] = $COOKIE_ADV; $arFields["FIRST_REFERER1"] = "'".$DB->ForSql($wr["REFERER1"],255)."'"; $arFields["FIRST_REFERER2"] = "'".$DB->ForSql($wr["REFERER2"],255)."'"; $arFields["LAST_ADV_ID"] = $COOKIE_ADV; $arFields["LAST_ADV_BACK"] = "'Y'"; $arFields["LAST_REFERER1"] = "'".$DB->ForSql($wr["REFERER1"],255)."'"; $arFields["LAST_REFERER2"] = "'".$DB->ForSql($wr["REFERER2"],255)."'"; $last_referer1 = $wr["REFERER1"]; $last_referer2 = $wr["REFERER2"]; } } } $_SESSION["SESS_GUEST_ID"] = $DB->Insert("b_stat_guest",$arFields, $err_mess.__LINE__); if ($ERROR_404=="N") { CStatistics::Set404("b_stat_guest", "ID = ".intval($_SESSION["SESS_GUEST_ID"]), array("FIRST_URL_TO_404" => "Y")); } } // если гость авторизовался то if (is_object($USER) && intval($USER->GetID())>0) { // запоминаем кто он $_SESSION["SESS_LAST_USER_ID"] = intval($USER->GetID()); } if (intval($_SESSION["SESS_LAST_USER_ID"])<=0) $_SESSION["SESS_LAST_USER_ID"] = ""; if ($_SESSION["SESS_GUEST_ID"]>0) { // сохраним ID посетителя в куках $GLOBALS["APPLICATION"]->set_cookie("GUEST_ID", $_SESSION["SESS_GUEST_ID"]); } // сохраним в cookie дату последнего посещения данным гостем сайта $GLOBALS["APPLICATION"]->set_cookie("LAST_VISIT", date("d.m.Y H:i:s",time())); return array( "last_referer1" => $last_referer1, "last_referer2" => $last_referer2, ); }
function GetRefererListID($PROT, $SN, $PAGE_FROM, $CURRENT_URI, $ERROR_404, $sql_site) { $DB = CDatabase::GetModuleConnection('statistic'); $DB_now = $DB->GetNowFunction(); // ID of the referer $rsReferer = $DB->Query("\n\t\t\tSELECT ID\n\t\t\tFROM b_stat_referer\n\t\t\tWHERE SITE_NAME = '" . $DB->ForSql($SN, 255) . "'\n\t\t", false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $arReferer = $rsReferer->Fetch(); if ($arReferer) { // update session counter $DB->Update("b_stat_referer", array("SESSIONS" => "SESSIONS + 1"), "WHERE ID=" . $arReferer["ID"], "File: " . __FILE__ . "<br>Line: " . __LINE__, false, false, false); $_SESSION["SESS_REFERER_ID"] = intval($arReferer["ID"]); } else { // add new one $arFields = array("DATE_FIRST" => $DB_now, "DATE_LAST" => $DB_now, "SITE_NAME" => "'" . $DB->ForSql($SN, 255) . "'", "SESSIONS" => 1); $_SESSION["SESS_REFERER_ID"] = intval($DB->Insert("b_stat_referer", $arFields, "File: " . __FILE__ . "<br>Line: " . __LINE__)); } // save referring fact to database $arFields = array("DATE_HIT" => $DB_now, "REFERER_ID" => $_SESSION["SESS_REFERER_ID"], "PROTOCOL" => "'" . $DB->ForSql($PROT, 10) . "'", "SITE_NAME" => "'" . $DB->ForSql($SN, 255) . "'", "URL_FROM" => "'" . $DB->ForSql($PAGE_FROM, 2000) . "'", "URL_TO" => "'" . $DB->ForSql($CURRENT_URI, 2000) . "'", "URL_TO_404" => "'" . $ERROR_404 . "'", "SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]), "ADV_ID" => intval($_SESSION["SESS_ADV_ID"]), "SITE_ID" => $sql_site); $REFERER_LIST_ID = intval($DB->Insert("b_stat_referer_list", $arFields, "File: " . __FILE__ . "<br>Line: " . __LINE__)); if ($ERROR_404 == "N") { CStatistics::Set404("b_stat_referer_list", "ID = " . $REFERER_LIST_ID, array("URL_TO_404" => "Y")); } return $REFERER_LIST_ID; }