Example #1
0
	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,
		);
	}
Example #2
0
 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;
 }