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

<?php
class CPhrase
{
	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;
		$s = "S.NAME as SEARCHER_NAME, S.ID as SEARCHER_ID";
		$strSqlGroup =  "GROUP BY S.ID, S.NAME, S.PHRASES_HITS, S.PHRASES";
		$arSqlSearch = Array("PH.SEARCHER_ID <> 1");
		$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":
					case "SEARCHER_ID":
					case "REFERER_ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("PH.".$key,$val,$match);
						break;
					case "SEARCHER_ID_STR":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("S.ID",$val,$match);
						break;
					case "SEARCHER":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("S.NAME", $val, $match);
						break;
					case "DATE1":
						if (CheckDateTime($val))
							$arSqlSearch[] = "PH.DATE_HIT >= ".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "DATE2":
						if (CheckDateTime($val))
							$arSqlSearch[] = "PH.DATE_HIT < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
						break;
					case "PHRASE":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						if($match == "N")
							$val = '"'.trim($val, '"').'"';
						$arSqlSearch[] = GetFilterQuery("PH.PHRASE", $val, $match);
						break;
					case "TO":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("PH.URL_TO",$val,$match,array("/","\\",".","?","#",":"));
						break;
					case "TO_404":
						$arSqlSearch[] = ($val=="Y") ? "PH.URL_TO_404='Y'" : "PH.URL_TO_404='N'";
						break;
					case "GROUP":
						$group = true;
						if ($val=="P")
						{
							$find_group="P";
							$strSqlGroup =  " GROUP BY PH.PHRASE ";
							$s = " PH.PHRASE ";
						}
						else $find_group="S";
						break;
					case "SITE_ID":
						if (is_array($val)) $val = implode(" | ", $val);
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("PH.SITE_ID", $val, $match);
						break;
				}
			}
		}

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

		if (strlen($grby)<=0)
		{
			if ($by == "s_id")					$strSqlOrder = "ORDER BY PH.ID";
			elseif ($by == "s_site_id")			$strSqlOrder = "ORDER BY PH.SITE_ID";
			elseif ($by == "s_phrase")			$strSqlOrder = "ORDER BY PH.PHRASE";
			elseif ($by == "s_searcher_id")		$strSqlOrder = "ORDER BY PH.SEARCHER_ID";
			elseif ($by == "s_referer_id")		$strSqlOrder = "ORDER BY PH.REFERER_ID";
			elseif ($by == "s_date_hit")		$strSqlOrder = "ORDER BY PH.DATE_HIT";
			elseif ($by == "s_url_to")			$strSqlOrder = "ORDER BY PH.URL_TO";
			elseif ($by == "s_session_id")		$strSqlOrder = "ORDER BY PH.SESSION_ID";
			else
			{
				$by = "s_id";
				$strSqlOrder = "ORDER BY PH.ID";
			}
			if ($order!="asc")
			{
				$strSqlOrder .= " desc ";
				$order="desc";
			}
			$strSql = "
				SELECT /*TOP*/
					PH.ID,
					PH.PHRASE,
					PH.SESSION_ID,
					PH.SEARCHER_ID,
					PH.URL_TO,
					PH.URL_TO_404,
					PH.REFERER_ID,
					PH.SITE_ID,
					".$DB->DateToCharFunction("PH.DATE_HIT")." DATE_HIT,
					S.NAME SEARCHER_NAME
				FROM
					b_stat_phrase_list PH
				INNER JOIN b_stat_searcher S ON (S.ID = PH.SEARCHER_ID)
				WHERE
				".$strSqlSearch."
				".$strSqlOrder."
			";
		}
		elseif (IsFiltered($strSqlSearch) || $grby=="P")
		{
			if ($by == "s_phrase" && $grby=="P")			$strSqlOrder = "ORDER BY PH.PHRASE";
			elseif ($by == "s_searcher_id" && $grby=="S")	$strSqlOrder = "ORDER BY PH.SEARCHER_ID";
			elseif ($by == "s_quantity")					$strSqlOrder = "ORDER BY QUANTITY";
			else
			{
				$by = "s_quantity";
				$strSqlOrder = "ORDER BY QUANTITY";
			}
			if ($order!="asc")
			{
				$strSqlOrder .= " desc ";
				$order="desc";
			}
			$strSql = "
				SELECT
					count(PH.ID) as COUNTER
				FROM
					b_stat_phrase_list PH,
					b_stat_searcher S
				WHERE
				".$strSqlSearch."
				and S.ID = PH.SEARCHER_ID
				".$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"]);
			}
			$max = (is_array($arrCount) && count($arrCount)>0) ? max($arrCount) : 0;
			if ($grby=="P")
			{
				$strSql = "
					SELECT /*TOP*/
						$s,
						count(PH.ID) QUANTITY,
						(count(PH.ID)*100)/$total C_PERCENT
					FROM
						b_stat_phrase_list PH,
						b_stat_searcher S
					WHERE
					".$strSqlSearch."
					and S.ID = PH.SEARCHER_ID
					".$strSqlGroup."
					".$strSqlOrder."
				";
			}
			else
			{
				$strSql = "
					SELECT /*TOP*/
						$s,
						count(PH.ID) QUANTITY,
						(count(PH.ID)*100)/$total C_PERCENT,
						S.PHRASES_HITS/S.PHRASES AVERAGE_HITS
					FROM
						b_stat_phrase_list PH,
						b_stat_searcher S
					WHERE
					".$strSqlSearch."
					and S.ID = PH.SEARCHER_ID
					".$strSqlGroup."
					".$strSqlOrder."
				";
			}
		}
		else//if ($grby=="S")
		{
			if ($by == "s_name")				$strSqlOrder = "ORDER BY S.ID";
			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(S.PHRASES) TOTAL, max(S.PHRASES) MAX FROM b_stat_searcher S";
			$c = $DB->Query($strSql, false, $err_mess.__LINE__);
			$cr = $c->Fetch();
			$total = intval($cr["TOTAL"]);
			$max = intval($cr["MAX"]);
			$strSql = "
				SELECT /*TOP*/
					S.ID SEARCHER_ID,
					S.NAME SEARCHER_NAME,
					S.PHRASES QUANTITY,
					S.PHRASES*100/$total C_PERCENT,
					S.PHRASES_HITS/S.PHRASES AVERAGE_HITS
				FROM
					b_stat_searcher S
				WHERE
					".$DB->IsNull("S.PHRASES","0")." > 0
				".$strSqlOrder."
			";
		}

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

Zerion Mini Shell 1.0