%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/statistic/classes/general/
Upload File :
Create Path :
Current File : /home/bitrix/www/bitrix/modules/statistic/classes/general/adv.php

<?php

class CAllAdv
{
	public static function SetByReferer($referer1, $referer2, &$arrADV, &$ref1, &$ref2)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');

		// lookup campaign with referer1 and referer2
		$referer1 = trim($referer1);
		$referer1_sql = strlen($referer1)>0? "REFERER1='".$DB->ForSql($referer1, 255)."'": "(REFERER1 is null or ".$DB->Length("REFERER1")."=0)";
		$referer2 = trim($referer2);
		$referer2_sql = strlen($referer2)>0? "REFERER2='".$DB->ForSql($referer2, 255)."'": "(REFERER2 is null or ".$DB->Length("REFERER2")."=0)";

		$strSql = "
			SELECT
				ID,
				REFERER1,
				REFERER2
			FROM
				b_stat_adv
			WHERE
				".$referer1_sql."
				and ".$referer2_sql."
		";
		$w = $DB->Query($strSql, false, $err_mess.__LINE__);

		$found = false;
		while ($wr = $w->Fetch())
		{
			$found = true;
			// return with parameters
			$arrADV[] = intval($wr["ID"]);
			$ref1 = $wr["REFERER1"];
			$ref2 = $wr["REFERER2"];
		}

		if(!$found)
		{
			$NA = "";
			if(COption::GetOptionString("statistic", "ADV_NA") == "Y")
			{
				$NA_1 = COption::GetOptionString("statistic", "AVD_NA_REFERER1");
				$NA_2 = COption::GetOptionString("statistic", "AVD_NA_REFERER2");
				if ((strlen($NA_1)>0 || strlen($NA_2)>0) && $referer1==$NA_1 && $referer2==$NA_2)
					$NA = "Y";
			}

			if((COption::GetOptionString("statistic", "ADV_AUTO_CREATE") == "Y") || ($NA == "Y"))
			{
				if(COption::GetOptionString("statistic", "REFERER_CHECK") == "Y")
				{
					$bGoodR = preg_match("/^([0-9A-Za-z_:;.,-])*$/", $referer1);
					if($bGoodR)
						$bGoodR = preg_match("/^([0-9A-Za-z_:;.,-])*$/", $referer2);
				}
				else
				{
					$bGoodR = true;
				}

				if($bGoodR)
				{
					// add new advertising campaign
					$arFields = Array(
						"REFERER1" => strlen($referer1)>0 ? "'".$DB->ForSql($referer1, 255)."'" : "null",
						"REFERER2" => strlen($referer2)>0 ? "'".$DB->ForSql($referer2, 255)."'" : "null",
						"DATE_FIRST" => $DB->GetNowFunction(),
						"DATE_LAST" => $DB->GetNowFunction(),
					);
					$arrADV[] = $DB->Insert("b_stat_adv", $arFields, $err_mess.__LINE__);
					$ref1 = $referer1;
					$ref2 = $referer2;
				}
			}
		}
	}

	public static function SetByPage($page, &$arrADV, &$ref1, &$ref2, $type="TO")
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');

		$strSql = "
			SELECT
				A.ID,
				A.REFERER1,
				A.REFERER2
			FROM
				b_stat_adv A
			INNER JOIN b_stat_adv_page AP ON (AP.ADV_ID = A.ID and AP.C_TYPE='".$DB->ForSQL($type)."')
			WHERE
				AP.PAGE is not null
				and ".$DB->Length("AP.PAGE")." > 0
				and '".$DB->ForSQL($page)."' like ".$DB->Concat("'%'", "AP.PAGE", "'%'")."
			";

		$w = $DB->Query($strSql, false, $err_mess.__LINE__);
		while ($wr=$w->Fetch())
		{
			$arrADV[] = intval($wr["ID"]);
			$ref1 = $wr["REFERER1"];
			$ref2 = $wr["REFERER2"];
		}
	}

	// returns arrays for graphics plot
	public static function GetAnalysisGraphArray($arFilter, &$is_filtered, $DATA_TYPE="SESSION_SUMMA", &$arrLegend, &$summa, &$max)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');

		$arSqlSearch = Array();
		switch ($DATA_TYPE)
		{
			case "SESSION_SUMMA":
			case "SESSION":
			case "SESSION_BACK":
			case "VISITOR_SUMMA":
			case "VISITOR":
			case "VISITOR_BACK":
			case "NEW_VISITOR":
			case "FAV_SUMMA":
			case "FAV":
			case "FAV_BACK":
			case "HOST_SUMMA":
			case "HOST":
			case "HOST_BACK":
			case "HIT_SUMMA":
			case "HIT":
			case "HIT_BACK":
				unset($arFilter["EVENT_TYPE_ID"]);
				unset($arFilter["EVENT_TYPE"]);
				unset($arFilter["EVENT1"]);
				unset($arFilter["EVENT2"]);
				break;
		}
		if (is_array($arFilter))
		{
			foreach ($arFilter as $key => $val)
			{
				if(is_array($val))
				{
					if(count($val) <= 0)
						continue;
				}
				else
				{
					if( (strlen($val) <= 0) || ($val === "NOT_REF") )
						continue;
				}
				$match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
				$key = strtoupper($key);
				switch($key)
				{
					case "DATE1":
						if (CheckDateTime($val))
							$arSqlSearch[] = "D.DATE_STAT>=".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "DATE2":
						if (CheckDateTime($val))
							$arSqlSearch[] = "D.DATE_STAT<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
						break;
					case "EVENT_TYPE_ID":
					case "EVENT_TYPE":
						if (is_array($val)) $val = implode(" | ", $val);
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("D.EVENT_ID",$val,$match);
						break;
					case "ADV_ID":
					case "ADV":
						if (is_array($val)) $val = implode(" | ", $val);
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("D.ADV_ID",$val,$match);
						break;
					case "REFERER1":
					case "REFERER2":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
						break;
					case "EVENT1":
					case "EVENT2":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("E.".$key, $val, $match);
						break;
				}
			}
		}
		$arrDays = array();
		$arrLegend = array();
		$arrSum = array();
		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		$strSql = CAdv::GetAnalysisGraphArray_SQL($strSqlSearch, $DATA_TYPE);

		$rsD = $DB->Query($strSql, false, $err_mess.__LINE__);
		while ($arD = $rsD->Fetch())
		{
			switch($DATA_TYPE)
			{
				default:				$cnt = intval($arD["SESSIONS"])+intval($arD["SESSIONS_BACK"]);			break;
				case "SESSION":			$cnt = intval($arD["SESSIONS"]);										break;
				case "SESSION_BACK":	$cnt = intval($arD["SESSIONS_BACK"]);									break;
				case "VISITOR_SUMMA":	$cnt = intval($arD["GUESTS"])+intval($arD["GUESTS_BACK"]);				break;
				case "VISITOR":			$cnt = intval($arD["GUESTS"]);											break;
				case "VISITOR_BACK":	$cnt = intval($arD["GUESTS_BACK"]);										break;
				case "NEW_VISITOR":		$cnt = intval($arD["NEW_GUESTS"]);										break;
				case "FAV_SUMMA":		$cnt = intval($arD["FAVORITES"])+intval($arD["FAVORITES_BACK"]);		break;
				case "FAV":				$cnt = intval($arD["FAVORITES"]);										break;
				case "FAV_BACK":		$cnt = intval($arD["FAVORITES_BACK"]);									break;
				case "HOST_SUMMA":		$cnt = intval($arD["C_HOSTS"])+intval($arD["HOSTS_BACK"]);				break;
				case "HOST":			$cnt = intval($arD["C_HOSTS"]);											break;
				case "HOST_BACK":		$cnt = intval($arD["HOSTS_BACK"]);										break;
				case "HIT_SUMMA":		$cnt = intval($arD["HITS"])+intval($arD["HITS_BACK"]);					break;
				case "HIT":				$cnt = intval($arD["HITS"]);											break;
				case "HIT_BACK":		$cnt = intval($arD["HITS_BACK"]);										break;
				case "EVENT_SUMMA":		$cnt = intval($arD["EVENTS"])+intval($arD["EVENTS_BACK"]);				break;
				case "EVENT":			$cnt = intval($arD["EVENTS"]);											break;
				case "EVENT_BACK":		$cnt = intval($arD["EVENTS_BACK"]);										break;
				case "MONEY_SUMMA":		$cnt = doubleval($arD["MONEY"])+doubleval($arD["MONEY_BACK"]);			break;
				case "MONEY":			$cnt = doubleval($arD["MONEY"]);										break;
				case "MONEY_BACK":		$cnt = doubleval($arD["MONEY_BACK"]);									break;
			}
			if ($cnt>0)
			{
				$arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"];
				$arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"];
				$arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"];
				$arrDays[$arD["DATE_STAT"]][$arD["ADV_ID"]] = $cnt;
				$arrLegend[$arD["ADV_ID"]]["ID"] = $arD["ADV_ID"];
				$arrLegend[$arD["ADV_ID"]]["R1"] = $arD["REFERER1"];
				$arrLegend[$arD["ADV_ID"]]["R2"] = $arD["REFERER2"];
				$arrSum[$arD["ADV_ID"]] += $cnt;
			}
		}

		$color = "";
		reset($arrLegend);
		$summa = 0;
		$max = 0;
		$total = sizeof($arrLegend);
		while (list($key, $arr) = each($arrLegend))
		{
			$color = GetNextRGB($color, $total);
			$arr["CLR"] = $color;
			$arrLegend[$key] = $arr;
			$arrLegend[$key]["SM"] = $arrSum[$key];
			$summa += $arrSum[$key];
			if ($arrSum[$key]>$max) $max = $arrSum[$key];
		}

		reset($arrDays);
		reset($arrLegend);
		$is_filtered = (IsFiltered($strSqlSearch));
		return $arrDays;
	}

	public static function Delete($ID)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$ID = intval($ID);
		if ($ID>0)
		{
			CAdv::Reset($ID);
			$strSql = "DELETE FROM b_stat_adv_page WHERE ADV_ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			$strSql = "DELETE FROM b_stat_adv WHERE ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			return true;
		}
		return false;
	}

	public static function Reset($ID)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$ID = intval($ID);
		if ($ID>0)
		{
			$DB->StartTransaction();
			$strSql = "DELETE FROM b_stat_adv_guest WHERE ADV_ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			$strSql = "DELETE FROM b_stat_adv_event WHERE ADV_ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			$strSql = "DELETE FROM b_stat_adv_searcher WHERE ADV_ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			$strSql = "DELETE FROM b_stat_adv_day WHERE ADV_ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			$strSql = "DELETE FROM b_stat_adv_event_day WHERE ADV_ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			$strSql = "DELETE FROM b_stat_path_adv WHERE ADV_ID=$ID";
			$DB->Query($strSql, false, $err_mess.__LINE__);
			$arFields = array(
				"GUESTS" => 0,
				"NEW_GUESTS" => 0,
				"FAVORITES" => 0,
				"C_HOSTS" => 0,
				"SESSIONS" => 0,
				"HITS" => 0,
				"DATE_FIRST" => "null",
				"DATE_LAST" => "null",
				"GUESTS_BACK" => 0,
				"FAVORITES_BACK" => 0,
				"HOSTS_BACK" => 0,
				"SESSIONS_BACK" => 0,
				"HITS_BACK" => 0
			);
			$DB->Update("b_stat_adv",$arFields,"WHERE ID=$ID",$err_mess.__LINE__,false,false,false);
			$DB->Commit();
			return true;
		}
		return false;
	}

	public static function DynamicDays($ADV_ID, $date1="", $date2="")
	{
		$arFilter = array("DATE1"=>$date1, "DATE2"=>$date2);
		$d=0;
		$by="";
		$order="";
		$arMaxMin=array();
		$z = CAdv::GetDynamicList($ADV_ID, $by, $order, $arMaxMin, $arFilter);
		while ($zr=$z->Fetch()) $d++;
		return $d;
	}
}

Zerion Mini Shell 1.0