示例#1
0
	public static function Set_Adv()
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		stat_session_register("SESS_ADV_ID"); // ID рекламной кампании
		$DB = CDatabase::GetModuleConnection('statistic');

		// если это начало сессии
		if (intval($_SESSION["SESS_SESSION_ID"])<=0 && intval($_SESSION["SESS_ADV_ID"])<=0)
		{
			$arrADV = array(); // массив рекламных кампаний

			// проверяем страницу на которую пришел посетитель
			$page_to = __GetFullRequestUri();
			CAdv::SetByPage($page_to, $arrADV, $ref1, $ref2, "TO");

			// если посетитель пришел с ссылающегося сайта то
			if (__GetReferringSite($PROT, $SN, $SN_WithoutPort, $PAGE_FROM))
			{
				$site_name = $PROT.$SN;
				// проверяем поисковики
				$strSql = "
					SELECT
						A.REFERER1,
						A.REFERER2,
						S.ADV_ID
					FROM
						b_stat_adv A,
						b_stat_adv_searcher S,
						b_stat_searcher_params P
					WHERE
						S.ADV_ID = A.ID
					and P.SEARCHER_ID = S.SEARCHER_ID
					and upper('".$DB->ForSql(trim($site_name),2000)."')
					like ".$DB->Concat("'%'", "upper(P.DOMAIN)", "'%'")."
					";
				$w = $DB->Query($strSql, false, $err_mess.__LINE__);
				while ($wr=$w->Fetch())
				{
					$ref1 = $wr["REFERER1"];
					$ref2 = $wr["REFERER2"];
					$arrADV[] = intval($wr["ADV_ID"]);
				}

				// проверяем ссылающиеся страницы
				$site_name = $PROT.$SN.$PAGE_FROM;
				CAdv::SetByPage($site_name, $arrADV, $ref1, $ref2, "FROM");
			}

			// если гость пришел с referer1, либо referer2 то
			if (strlen($_SESSION["referer1"])>0 || strlen($_SESSION["referer2"])>0)
			{
				CAdv::SetByReferer(trim($_SESSION["referer1"]), trim($_SESSION["referer2"]), $arrADV, $ref1, $ref2);
			}
			//Handle Openstat if enabled
			if(COption::GetOptionString("statistic", "OPENSTAT_ACTIVE") === "Y" && strlen($_REQUEST["_openstat"])>0)
			{
				$openstat = $_REQUEST["_openstat"];
				if(strpos($openstat, ";")===false)
					$openstat = base64_decode($openstat);
				$openstat = explode(";", $openstat);
				CAdv::SetByReferer(
					trim(str_replace(
						array("#service-name#", "#campaign-id#", "#ad-id#", "#source-id#"),
						$openstat,
						COption::GetOptionString("statistic", "OPENSTAT_R1_TEMPLATE")
					)),
					trim(str_replace(
						array("#service-name#", "#campaign-id#", "#ad-id#", "#source-id#"),
						$openstat,
						COption::GetOptionString("statistic", "OPENSTAT_R2_TEMPLATE")
					)),
					$arrADV, $ref1, $ref2
				);
			}
			$arrADV = array_unique($arrADV);

			// если было выявлено более одной рекламной кампании подходящей под условия то
			if (count($arrADV)>1)
			{
				// выберем рекламную кампанию по наивысшему приоритету (либо по наивысшему ID)
				$str = implode(",",$arrADV);
				$strSql = "SELECT ID, REFERER1, REFERER2 FROM b_stat_adv WHERE ID in ($str) ORDER BY PRIORITY desc, ID desc";
				$z = $DB->Query($strSql, false, $err_mess.__LINE__);
				$zr = $z->Fetch();
				$_SESSION["SESS_ADV_ID"] = intval($zr["ID"]);
				$_SESSION["referer1"] = $zr["REFERER1"];
				$_SESSION["referer2"] = $zr["REFERER2"];
			}
			else
			{
				list(,$value) = each($arrADV);
				$_SESSION["SESS_ADV_ID"] = intval($value);
				$_SESSION["referer1"] = $ref1;
				$_SESSION["referer2"] = $ref2;
			}
		}
		if (intval($_SESSION["SESS_ADV_ID"])>0) $_SESSION["SESS_LAST_ADV_ID"] = $_SESSION["SESS_ADV_ID"];
		$_SESSION["SESS_LAST_ADV_ID"] = intval($_SESSION["SESS_LAST_ADV_ID"]);
	}