%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/referer.php

<?php
class CReferer
{
	public static function GetList(&$by, &$order, $arFilter=Array(), &$is_filtered, &$total, &$grby, &$max)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";

		$DB = CDatabase::GetModuleConnection('statistic');
		$group = false;
		$strSqlGroup =  "GROUP BY L.PROTOCOL, L.SITE_NAME, L.URL_FROM, R.HITS, R.SESSIONS";
		$url_from = $DB->Concat("L.PROTOCOL", "L.SITE_NAME", "L.URL_FROM");
		$arSqlSearch = Array();
		$find_group = "";

		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 "ID":
					case "SESSION_ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("L.".$key,$val,$match);
						break;
					case "DATE1":
						if (CheckDateTime($val))
							$arSqlSearch[] = "L.DATE_HIT >= ".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "DATE2":
						if (CheckDateTime($val))
							$arSqlSearch[] = "L.DATE_HIT < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
						break;
					case "FROM_PROTOCOL":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("L.PROTOCOL",$val,$match,array("/","\\",":"));
						break;
					case "FROM_DOMAIN":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("L.SITE_NAME",$val,$match,array("."));
						break;
					case "FROM_PAGE":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("L.URL_FROM",$val,$match,array("/","\\",".","?","#",":",":"));
						break;
					case "FROM":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery($url_from,$val, $match, array("/","\\",".","?","#",":"), "N", "N");
						break;
					case "TO":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("L.URL_TO",$val,$match,array("/","\\",".","?","#",":"));
						break;
					case "TO_404":
						$arSqlSearch[] = ($val=="Y") ? "L.URL_TO_404='Y'" : "L.URL_TO_404='N'";
						break;
					case "GROUP":
						$group = true;
						if ($val=="S")
						{
							$find_group="S";
							$strSqlGroup = "GROUP BY L.SITE_NAME, R.HITS, R.SESSIONS";
							$url_from = "L.SITE_NAME";
						}
						else $find_group="U";
						break;
					case "SITE_ID":
						if (is_array($val)) $val = implode(" | ", $val);
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("L.SITE_ID", $val, $match);
						break;
				}
			}
		}

		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		$grby = ($find_group=="U" || $find_group=="S") ? $find_group : "";

		if (strlen($grby)<=0)
		{
			if ($by == "s_id")					$strSqlOrder = " ORDER BY L.ID ";
			elseif ($by == "s_site_id")			$strSqlOrder = " ORDER BY L.SITE_ID ";
			elseif ($by == "s_url_from")		$strSqlOrder = " ORDER BY URL_FROM ";
			elseif ($by == "s_url_to")			$strSqlOrder = " ORDER BY L.URL_TO ";
			elseif ($by == "s_date_hit")		$strSqlOrder = " ORDER BY L.DATE_HIT ";
			elseif ($by == "s_session_id")		$strSqlOrder = " ORDER BY L.SESSION_ID ";
			else
			{
				$by = "s_id";
				$strSqlOrder = "ORDER BY L.ID";
			}
			if ($order!="asc")
			{
				$strSqlOrder .= " desc ";
				$order="desc";
			}

			$strSql = "
				SELECT /*TOP*/
					".$url_from." as URL_FROM,
					L.ID,
					L.SESSION_ID,
					L.SITE_ID,
					".$DB->DateToCharFunction("L.DATE_HIT")." DATE_HIT,
					L.URL_TO,
					L.URL_TO_404
				FROM
					b_stat_referer_list L
				WHERE
				".$strSqlSearch."
				".$strSqlOrder."
			";
		}
		elseif (IsFiltered($strSqlSearch) || $grby=="U")
		{
			if ($by == "s_url_from")			$strSqlOrder = "ORDER BY URL_FROM";
			elseif ($by == "s_quantity")		$strSqlOrder = "ORDER BY QUANTITY";
			elseif ($by == "s_average_hits")	$strSqlOrder = "ORDER BY AVERAGE_HITS";
			else
			{
				$by = "s_quantity";
				$strSqlOrder = "ORDER BY QUANTITY";
			}
			if ($order!="asc")
			{
				$strSqlOrder .= " desc ";
				$order="desc";
			}
			$strSql = "
				SELECT
					count(L.ID) as COUNTER
				FROM
					b_stat_referer_list L
					LEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)
				WHERE
				".$strSqlSearch."
				".$strSqlGroup."
			";
			$c = $DB->Query($strSql, false, $err_mess.__LINE__);
			$total = 0;
			$arrCount = array();
			while ($cr = $c->Fetch())
			{
				$total += intval($cr["COUNTER"]);
				$arrCount[] = intval($cr["COUNTER"]);
			}
			if (count($arrCount)>0)
				$max = max($arrCount);
			$strSql = "
				SELECT /*TOP*/
					".$url_from." URL_FROM,
					count(L.ID) QUANTITY,
					(count(L.ID)*100)/$total C_PERCENT,
					R.HITS/R.SESSIONS AVERAGE_HITS
				FROM
					b_stat_referer_list L
					LEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)
				WHERE
				".$strSqlSearch."
				".$strSqlGroup."
				".$strSqlOrder."
			";
		}
		else//if($grby=="S")
		{
			if ($by == "s_url_from")			$strSqlOrder = "ORDER BY URL_FROM";
			elseif ($by == "s_quantity")		$strSqlOrder = "ORDER BY QUANTITY";
			elseif ($by == "s_average_hits")	$strSqlOrder = "ORDER BY AVERAGE_HITS";
			else
			{
				$by = "s_quantity";
				$strSqlOrder = "ORDER BY QUANTITY";
			}
			if ($order!="asc")
			{
				$strSqlOrder .= " desc ";
				$order="desc";
			}
			$strSql = "SELECT sum(R.SESSIONS) TOTAL, max(R.SESSIONS) MAX FROM b_stat_referer R";
			$c = $DB->Query($strSql, false, $err_mess.__LINE__);
			$cr = $c->Fetch();
			$total = intval($cr["TOTAL"]);
			$max = intval($cr["MAX"]);
			$strSql = "
				SELECT /*TOP*/
					R.SITE_NAME URL_FROM,
					sum(R.SESSIONS) QUANTITY,
					(sum(R.SESSIONS)*100)/$total C_PERCENT,
					sum(R.HITS)/sum(R.SESSIONS) AVERAGE_HITS
				FROM
					b_stat_referer R
				GROUP BY R.SITE_NAME
				".$strSqlOrder."
			";
		}

		$res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess.__LINE__);
		$is_filtered = (IsFiltered($strSqlSearch) || $group);
		return $res;
	}
}

Zerion Mini Shell 1.0