static function GetUsersPropertiesArray($arUserIDs = array(), $arGuestIDs = array()) { $arGuestUserIDs = array(); $arResUsers = array(); $arResGuests = array(); $siteNameFormat = CSite::GetNameFormat(); $isActive = CModule::IncludeModule("statistic"); $arUserIDs = array_map(intval, $arUserIDs); if (count($arGuestIDs) > 0) { $arGuestIDsU = array_unique($arGuestIDs); $arGuestIDsU = array_map(intval, $arGuestIDsU); $arGuestIDs = array(); if ($isActive) { $strGuests = implode("|", $arGuestIDsU); $f = "ID"; $o = "asc"; $isf = null; $rs = CGuest::GetList($f, $o, array("ID" => $strGuests), $isf); while ($ar = $rs->Fetch()) { $arGuestUserIDs[] = intval($ar["LAST_USER_ID"]); $arGuestIDs[intval($ar["ID"])] = intval($ar["LAST_USER_ID"]); } } else { foreach ($arGuestIDs as $k => $v) { $arGuestIDs[$v] = 0; } } } if (count($arUserIDs) > 0) { $arRespUserIDs = array_unique(array_merge($arUserIDs, $arGuestUserIDs)); $strUsers = implode("|", $arRespUserIDs); $f = "ID"; $o = "asc"; $rs = CUser::GetList($f, $o, array("ID" => $strUsers), array("FIELDS" => array("NAME", "SECOND_NAME", "LAST_NAME", "LOGIN", "ID", "EMAIL"))); while ($ar = $rs->Fetch()) { $arResUsers[intval($ar["ID"])] = $ar; } } foreach ($arUserIDs as $k => $v) { if (!isset($arResUsers[$v])) { $arResUsers[$v] = array("NAME" => GetMessage("SUP_UNKNOWN_USER"), "SECOND_NAME" => "", "LAST_NAME" => "", "LOGIN" => GetMessage("SUP_UNKNOWN_USER"), "ID" => $v, "EMAIL" => ""); } $name = CUser::FormatName($siteNameFormat, $arResUsers[$v], true, true); $arResUsers[$v]["HTML_NAME"] = "[<a title=\"" . GetMessage("SUP_USER_PROFILE") . "\" href=\"/bitrix/admin/user_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $v . "\">" . $v . "</a>] (" . htmlspecialcharsbx($arResUsers[$v]['LOGIN']) . ") " . $name; //" (".$str_OWNER_LOGIN.") ".$str_OWNER_NAME; $arResUsers[$v]["HTML_NAME_S"] = "[" . $v . "] " . $name; } foreach ($arGuestIDs as $k => $v) { if (isset($arResUsers[$v])) { $arResGuests[$k] = $arResUsers[$v]; $arResGuests[$k]["UNKNOWN"] = false; } else { $arResGuests[$k] = array("NAME" => GetMessage("SUP_UNKNOWN_GUEST"), "SECOND_NAME" => "", "LAST_NAME" => "", "LOGIN" => GetMessage("SUP_UNKNOWN_GUEST"), "ID" => $v, "UNKNOWN" => true, "EMAIL" => ""); } $name = CUser::FormatName($siteNameFormat, $arResGuests[$k], true, true); $arResGuests[$k]["HTML_NAME"] = "[<a title=\"" . GetMessage("SUP_USER_PROFILE") . "\" href=\"/bitrix/admin/user_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $v . "\">" . $v . "</a>] " . $name . " [<a title='" . GetMessage("SUP_GUEST_ID") . "' href='/bitrix/admin/guest_list.php?lang=" . LANG . "&find_id=" . $k . "&find_id_exact_match=Y&set_filter=Y'>" . $k . "</a>]"; $arResUsers[$v]["HTML_NAME_S"] = "[" . $v . "] " . $name . " [" . $k . "]"; } return array("arUsers" => $arResUsers, "arGuests" => $arResGuests); }
<?php require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/prolog.php"; $STAT_RIGHT = $APPLICATION->GetGroupRight("statistic"); if ($STAT_RIGHT == "D") { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } IncludeModuleLangFile(__FILE__); $ID = intval($ID); $guest = CGuest::GetByID($ID); ClearVars("f_"); $APPLICATION->SetTitle(GetMessage("STAT_TITLE")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_popup_admin.php"; ?> <table class="edit-table" cellspacing="0" cellpadding="0" border="0"><tr><td> <table cellspacing="0" cellpadding="0" border="0" class="internal"> <?php if ($arGuest = $guest->ExtractFields("f_")) { ?> <tr> <td valign="top" nowrap>ID:</td> <td valign="top" width="100%"> <span title="<?php echo $f_ID == $_SESSION["SESS_GUEST_ID"] ? GetMessage("STAT_CURRENT_GUEST") : ""; ?> "><span class="<?php echo $f_ID == $_SESSION["SESS_GUEST_ID"] ? "stat_attention" : ""; ?> "><?php echo $f_ID; ?>
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, ); }
InitBVar($find_referer12_exact_match); InitBVar($find_referer3_exact_match); InitBVar($find_ip_exact_match); InitBVar($find_lang_exact_match); InitBVar($find_country_exact_match); InitBVar($find_region_exact_match); InitBVar($find_city_exact_match); InitBVar($find_user_exact_match); if (CheckFilter()) { $arFilter = array("ID" => $find_id, "REGISTERED" => $find_registered, "USER" => $find_user, "FIRST_DATE1" => $find_first_date1, "FIRST_DATE2" => $find_first_date2, "LAST_DATE1" => $find_last_date1, "LAST_DATE2" => $find_last_date2, "PERIOD_DATE1" => $find_period_date1, "PERIOD_DATE2" => $find_period_date2, "SITE_ID" => $find_site_id, "URL" => $find_url, "URL_404" => $find_url_404, "USER_AGENT" => $find_user_agent, "ADV" => $find_adv, "ADV_ID" => $find_adv_id, "REFERER1" => $find_referer1, "REFERER2" => $find_referer2, "REFERER3" => $find_referer3, "EVENTS1" => $find_events1, "EVENTS2" => $find_events2, "SESS1" => $find_sess1, "SESS2" => $find_sess2, "HITS1" => $find_hits1, "HITS2" => $find_hits2, "IP" => $find_ip, "COUNTRY" => $find_country, "COUNTRY_ID" => $find_country_id, "REGION" => $find_region, "CITY" => $find_city, "CITY_ID" => $find_city_id, "LANG" => $find_lang, "ID_EXACT_MATCH" => $find_id_exact_match, "URL_EXACT_MATCH" => $find_url_exact_match, "USER_AGENT_EXACT_MATCH" => $find_user_agent_exact_match, "ADV_ID_EXACT_MATCH" => $find_adv_id_exact_match, "REFERER1_EXACT_MATCH" => $find_referer12_exact_match, "REFERER2_EXACT_MATCH" => $find_referer12_exact_match, "REFERER3_EXACT_MATCH" => $find_referer3_exact_match, "IP_EXACT_MATCH" => $find_ip_exact_match, "LANG_EXACT_MATCH" => $find_lang_exact_match, "COUNTRY_EXACT_MATCH" => $find_country_exact_match, "COUNTRY_ID_EXACT_MATCH" => $find_country_exact_match, "REGION_EXACT_MATCH" => $find_region_exact_match, "CITY_EXACT_MATCH" => $find_city_exact_match, "CITY_ID_EXACT_MATCH" => $find_city_exact_match, "USER_EXACT_MATCH" => $find_user_exact_match); } else { if ($e = $APPLICATION->GetException()) { $GLOBALS["lAdmin"]->AddFilterError(GetMessage("STAT_FILTER_ERROR") . ": " . $e->GetString()); } } $rsData = CGuest::GetList($by, $order, $arFilter, $is_filtered); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("STAT_GUEST_PAGES"))); $arHeaders = array(); $arHeaders[] = array("id" => "ID", "content" => "ID", "sort" => "s_id", "default" => true); $arHeaders[] = array("id" => "LAST_USER_ID", "content" => GetMessage("STAT_USER_S"), "sort" => "s_last_user_id", "default" => true); $arHeaders[] = array("id" => "SESSIONS", "content" => GetMessage("STAT_SESSIONS_S"), "sort" => "s_sessions", "default" => true, "align" => "right"); $arHeaders[] = array("id" => "C_EVENTS", "content" => GetMessage("STAT_EVENTS_S"), "sort" => "s_events", "default" => true, "align" => "right"); $arHeaders[] = array("id" => "HITS", "content" => GetMessage("STAT_HITS_S"), "sort" => "s_hits", "default" => true, "align" => "right"); $arHeaders[] = array("id" => "FIRST_DATE", "content" => GetMessage("STAT_FIRST_ENTER"), "sort" => "s_first_date", "default" => true); $arHeaders[] = array("id" => "LAST_DATE", "content" => GetMessage("STAT_LAST_ENTER"), "sort" => "s_last_date", "default" => true); $arHeaders[] = array("id" => "FIRST_URL_FROM", "content" => GetMessage("STAT_URL_FROM"), "sort" => "s_first_url_from", "default" => false); $arHeaders[] = array("id" => "FIRST_URL_TO", "content" => GetMessage("STAT_URL_TO"), "sort" => "", "default" => false); $arHeaders[] = array("id" => "LAST_URL_LAST", "content" => GetMessage("STAT_LASTPAGE_XLS"), "sort" => "s_last_url_last", "default" => false); $arHeaders[] = array("id" => "FIRST_ADV_ID", "content" => GetMessage("STAT_FIRST_ADV"), "sort" => "s_first_adv_id", "default" => false);