%PDF- %PDF-
Mini Shell

Mini Shell

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

<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/classes/general/adv.php");

class CAdv extends CAllAdv
{
	public static function GetAnalysisGraphArray_SQL($strSqlSearch, $DATA_TYPE)
	{
		$DB = CDatabase::GetModuleConnection('statistic');
		switch ($DATA_TYPE)
		{
			case "EVENT_SUMMA":
			case "EVENT":
			case "EVENT_BACK":
			case "EVENT_MONEY_SUMMA":
			case "EVENT_MONEY":
			case "EVENT_MONEY_BACK":
				$strSql = "
					SELECT
						".$DB->DateToCharFunction("D.DATE_STAT","SHORT")." DATE_STAT,
						DAYOFMONTH(D.DATE_STAT) DAY,
						MONTH(D.DATE_STAT) MONTH,
						YEAR(D.DATE_STAT) YEAR,
						sum(D.COUNTER) EVENTS,
						sum(D.COUNTER_BACK) EVENTS_BACK,
						sum(D.MONEY) MONEY,
						sum(D.MONEY_BACK) MONEY_BACK,
						D.ADV_ID,
						A.REFERER1,
						A.REFERER2
					FROM
						b_stat_adv_event_day D
					INNER JOIN b_stat_event E ON (E.ID = D.EVENT_ID)
					INNER JOIN b_stat_adv A ON (A.ID = D.ADV_ID)
					WHERE
						$strSqlSearch
					GROUP BY
						D.DATE_STAT, D.ADV_ID, A.REFERER1, A.REFERER2
					ORDER BY
						D.DATE_STAT
					";
				break;
			default:
				$strSql = "
					SELECT
						".$DB->DateToCharFunction("D.DATE_STAT","SHORT")."	DATE_STAT,
						DAYOFMONTH(D.DATE_STAT)					DAY,
						MONTH(D.DATE_STAT)					MONTH,
						YEAR(D.DATE_STAT)					YEAR,
						max(D.GUESTS_DAY)					GUESTS,
						max(D.NEW_GUESTS)					NEW_GUESTS,
						max(D.FAVORITES)					FAVORITES,
						max(D.C_HOSTS_DAY)					C_HOSTS,
						max(D.SESSIONS)						SESSIONS,
						max(D.HITS)						HITS,
						max(D.GUESTS_DAY_BACK)					GUESTS_BACK,
						max(D.FAVORITES_BACK)					FAVORITES_BACK,
						max(D.HOSTS_DAY_BACK)					HOSTS_BACK,
						max(D.SESSIONS_BACK)					SESSIONS_BACK,
						max(D.HITS_BACK)					HITS_BACK,
						D.ADV_ID,
						A.REFERER1,
						A.REFERER2
					FROM
						b_stat_adv_day D
					INNER JOIN b_stat_adv A ON (A.ID = D.ADV_ID)
					WHERE
						$strSqlSearch
					GROUP BY
						D.DATE_STAT, D.ADV_ID, A.REFERER1, A.REFERER2
					ORDER BY
						D.DATE_STAT
					";
				break;
		}
		return $strSql;
	}

	public static function GetList(&$by, &$order, $arFilter=Array(), &$is_filtered, $limit="", &$arrGROUP_DAYS, &$strSql_res)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$find_group = $arFilter["GROUP"];
		$arSqlSearch = Array();
		$arSqlSearch_h = Array();
		$strSqlSearch_h = "";
		$filter_period = false;
		$strSqlPeriod = "";
		$strT = "";
		$CURRENCY = "";

		if (is_array($arFilter))
		{
			$date1 = $arFilter["DATE1_PERIOD"];
			$date2 = $arFilter["DATE2_PERIOD"];
			$date_from = MkDateTime(ConvertDateTime($date1,"D.M.Y"),"d.m.Y");
			$date_to = MkDateTime(ConvertDateTime($date2,"D.M.Y")." 23:59","d.m.Y H:i");
			if (strlen($date1)>0)
			{
				$filter_period = true;
				if (strlen($date2)>0)
				{
					$strSqlPeriod = "sum(if(D.DATE_STAT<FROM_UNIXTIME('$date_from'),0, if(D.DATE_STAT>FROM_UNIXTIME('$date_to'),0,";
					$strT = ")))";
				}
				else
				{
					$strSqlPeriod = "sum(if(D.DATE_STAT<FROM_UNIXTIME('$date_from'),0,";
					$strT = "))";
				}
			}
			elseif (strlen($date2)>0)
			{
				$filter_period = true;
				$strSqlPeriod = "sum(if(D.DATE_STAT>FROM_UNIXTIME('$date_to'),0,";
				$strT = "))";
			}

			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":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("A.".$key,$val,$match);
						break;
					case "DATE1_FIRST":
						if (CheckDateTime($val))
							$arSqlSearch_h[] = "C_TIME_FIRST >= ".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "DATE2_FIRST":
						if (CheckDateTime($val))
							$arSqlSearch_h[] = "C_TIME_FIRST < ".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
						break;
					case "DATE1_LAST":
						if (CheckDateTime($val))
							$arSqlSearch_h[] = "C_TIME_LAST >= ".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "DATE2_LAST":
						if (CheckDateTime($val))
							$arSqlSearch_h[] = "C_TIME_LAST < ".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
						break;
					case "REFERER1":
					case "REFERER2":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
						break;
					case "PRIORITY1":
						$arSqlSearch[] = "A.PRIORITY>='".intval($val)."'";
						break;
					case "PRIORITY2":
						$arSqlSearch[] = "A.PRIORITY<='".intval($val)."'";
						break;
					case "NEW_GUESTS1":
						$arSqlSearch_h[] = "NEW_GUESTS>='".intval($val)."'";
						break;
					case "NEW_GUESTS2":
						$arSqlSearch_h[] = "NEW_GUESTS<='".intval($val)."'";
						break;
					case "GUESTS1":
						if ($arFilter["GUESTS_BACK"]=="Y")
							$arSqlSearch_h[] = "GUESTS_BACK>='".intval($val)."'";
						else
							$arSqlSearch_h[] = "GUESTS>='".intval($val)."'";
						break;
					case "GUESTS2":
						if ($arFilter["GUESTS_BACK"]=="Y")
							$arSqlSearch_h[] = "GUESTS_BACK<='".intval($val)."'";
						else
							$arSqlSearch_h[] = "GUESTS<='".intval($val)."'";
						break;
					case "FAVORITES1":
						if ($arFilter["FAVORITES_BACK"]=="Y")
							$arSqlSearch_h[] = "FAVORITES_BACK>='".intval($val)."'";
						else
							$arSqlSearch_h[] = "FAVORITES>='".intval($val)."'";
						break;
					case "FAVORITES2":
						if ($arFilter["FAVORITES_BACK"]=="Y")
							$arSqlSearch_h[] = "FAVORITES_BACK<='".intval($val)."'";
						else
							$arSqlSearch_h[] = "FAVORITES<='".intval($val)."'";
						break;
					case "HOSTS1":
						if ($arFilter["HOSTS_BACK"]=="Y")
							$arSqlSearch_h[] = "HOSTS_BACK>='".intval($val)."'";
						else
							$arSqlSearch_h[] = "C_HOSTS>='".intval($val)."'";
						break;
					case "HOSTS2":
						if ($arFilter["HOSTS_BACK"]=="Y")
							$arSqlSearch_h[] = "HOSTS_BACK<='".intval($val)."'";
						else
							$arSqlSearch_h[] = "C_HOSTS<='".intval($val)."'";
						break;
					case "SESSIONS1":
						if ($arFilter["SESSIONS_BACK"]=="Y")
							$arSqlSearch_h[] = "SESSIONS_BACK>='".intval($val)."'";
						else
							$arSqlSearch_h[] = "SESSIONS>='".intval($val)."'";
						break;
					case "SESSIONS2":
						if ($arFilter["SESSIONS_BACK"]=="Y")
							$arSqlSearch_h[] = "SESSIONS_BACK<='".intval($val)."'";
						else
							$arSqlSearch_h[] = "SESSIONS<='".intval($val)."'";
						break;
					case "HITS1":
						if ($arFilter["HITS_BACK"]=="Y")
							$arSqlSearch_h[] = "HITS_BACK>='".intval($val)."'";
						else
							$arSqlSearch_h[] = "HITS>='".intval($val)."'";
						break;
					case "HITS2":
						if ($arFilter["HITS_BACK"]=="Y")
							$arSqlSearch_h[] = "HITS_BACK<='".intval($val)."'";
						else
							$arSqlSearch_h[] = "HITS<='".intval($val)."'";
						break;
					case "COST1":
						$arSqlSearch_h[] = "COST>='".doubleval($val)."'";
						break;
					case "COST2":
						$arSqlSearch_h[] = "COST<='".doubleval($val)."'";
						break;
					case "REVENUE1":
						$arSqlSearch_h[] = "REVENUE>='".doubleval($val)."'";
						break;
					case "REVENUE2":
						$arSqlSearch_h[] = "REVENUE<='".doubleval($val)."'";
						break;
					case "BENEFIT1":
						$arSqlSearch_h[] = "BENEFIT>='".doubleval($val)."'";
						break;
					case "BENEFIT2":
						$arSqlSearch_h[] = "BENEFIT<='".doubleval($val)."'";
						break;
					case "ROI1":
						$arSqlSearch_h[] = "ROI>='".doubleval($val)."'";
						break;
					case "ROI2":
						$arSqlSearch_h[] = "ROI<='".doubleval($val)."'";
						break;
					case "ATTENT1":
						if ($arFilter["ATTENT_BACK"]=="Y")
							$arSqlSearch_h[] = "ATTENT_BACK>='".doubleval($val)."'";
						else
							$arSqlSearch_h[] = "ATTENT>='".doubleval($val)."'";
						break;
						break;
					case "ATTENT2":
						if ($arFilter["ATTENT_BACK"]=="Y")
							$arSqlSearch_h[] = "ATTENT_BACK<='".doubleval($val)."'";
						else
							$arSqlSearch_h[] = "ATTENT<='".doubleval($val)."'";
						break;
						break;
					case "VISITORS_PER_DAY1":
						$arSqlSearch_h[] = "VISITORS_PER_DAY>='".doubleval($val)."'";
						break;
					case "VISITORS_PER_DAY2":
						$arSqlSearch_h[] = "VISITORS_PER_DAY<='".doubleval($val)."'";
						break;
					case "DURATION1":
						$arSqlSearch_h[] = "ADV_TIME>=".doubleval($val)."*86400";
						break;
					case "DURATION2":
						$arSqlSearch_h[] = "ADV_TIME<=".doubleval($val)."*86400";
						break;
					case "CURRENCY":
						$CURRENCY = $val;
						break;
					case "DESCRIPTION":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
						break;
				}
			}
		}

		$rate = 1;
		$base_currency = GetStatisticBaseCurrency();
		$view_currency = $base_currency;
		if (strlen($base_currency)>0)
		{
			if (CModule::IncludeModule("currency"))
			{
				if ($CURRENCY!=$base_currency && strlen($CURRENCY)>0)
				{
					$rate = CCurrencyRates::GetConvertFactor($base_currency, $CURRENCY);
					$view_currency = $CURRENCY;
				}
			}
		}

		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		foreach($arSqlSearch_h as $sqlWhere)
			$strSqlSearch_h .= " and (".$sqlWhere.") ";

		$group = false;
		$find_group = (strlen($find_group)<=0) ? "NOT_REF" : $find_group;

		$arrFields_1 = array(
				"C_TIME_FIRST", "C_TIME_LAST", "CURRENCY",
				"DATE_FIRST", "DATE_LAST", "ADV_TIME",
				"GUESTS", "NEW_GUESTS", "FAVORITES",
				"C_HOSTS", "SESSIONS", "HITS",
				"GUESTS_BACK", "FAVORITES_BACK", "HOSTS_BACK",
				"SESSIONS_BACK", "HITS_BACK", "ATTENT",
				"ATTENT_BACK", "NEW_VISITORS", "RETURNED_VISITORS",
				"VISITORS_PER_DAY", "COST", "REVENUE",
				"BENEFIT", "SESSION_COST", "VISITOR_COST", "ROI",
			);
		if ($find_group=="referer1") array_push($arrFields_1, "REFERER1");
		if ($find_group=="referer2") array_push($arrFields_1, "REFERER2");

		$arrFields_2 = array(
				"GUESTS_TODAY", "NEW_GUESTS_TODAY", "FAVORITES_TODAY",
				"C_HOSTS_TODAY", "SESSIONS_TODAY", "HITS_TODAY",
				"GUESTS_BACK_TODAY", "FAVORITES_BACK_TODAY", "HOSTS_BACK_TODAY",
				"SESSIONS_BACK_TODAY", "HITS_BACK_TODAY", "GUESTS_YESTERDAY",
				"NEW_GUESTS_YESTERDAY", "FAVORITES_YESTERDAY", "C_HOSTS_YESTERDAY",
				"SESSIONS_YESTERDAY", "HITS_YESTERDAY", "GUESTS_BACK_YESTERDAY",
				"FAVORITES_BACK_YESTERDAY", "HOSTS_BACK_YESTERDAY", "SESSIONS_BACK_YESTERDAY",
				"HITS_BACK_YESTERDAY", "GUESTS_BEF_YESTERDAY", "NEW_GUESTS_BEF_YESTERDAY",
				"FAVORITES_BEF_YESTERDAY", "C_HOSTS_BEF_YESTERDAY", "SESSIONS_BEF_YESTERDAY",
				"HITS_BEF_YESTERDAY", "GUESTS_BACK_BEF_YESTERDAY", "FAVORITES_BACK_BEF_YESTERDAY",
				"HOSTS_BACK_BEF_YESTERDAY", "SESSIONS_BACK_BEF_YESTERDAY", "HITS_BACK_BEF_YESTERDAY",
				"A.ID", "REFERER1", "REFERER2",
				"A.PRIORITY", "A.EVENTS_VIEW", "A.DESCRIPTION",
				"GUESTS_PERIOD", "C_HOSTS_PERIOD", "NEW_GUESTS_PERIOD",
				"FAVORITES_PERIOD", "SESSIONS_PERIOD", "HITS_PERIOD",
				"GUESTS_BACK_PERIOD", "HOSTS_BACK_PERIOD", "FAVORITES_BACK_PERIOD",
				"SESSIONS_BACK_PERIOD", "HITS_BACK_PERIOD",
			);

		$arrFields = $arrFields_1;
		if ($find_group=="NOT_REF")
			$arrFields = array_merge($arrFields, $arrFields_2);

		if ($order!="asc")
			$order = "desc";

		$key = array_search(strtoupper($by),$arrFields);
		if ($key===NULL || $key===false)
			$key = array_search("A.".strtoupper($by),$arrFields);

		if ($key!==NULL && $key!==false)
			$strSqlOrder = " ORDER BY ".$arrFields[$key];
		elseif ($by == "s_dropdown")
			$strSqlOrder = "ORDER BY A.ID desc, A.REFERER1, A.REFERER2";
		elseif ($by == "s_referers")
			$strSqlOrder = "ORDER BY A.REFERER1, A.REFERER2";
		else
		{
			if ($find_group=="NOT_REF")
			{
				$strSqlOrder = " ORDER BY SESSIONS_TODAY $order, SESSIONS_YESTERDAY $order, SESSIONS_BEF_YESTERDAY $order, SESSIONS_PERIOD $order, SESSIONS ";
			}
			else
			{
				$strSqlOrder = " ORDER BY SESSIONS ";
			}
			$by = "BY_DEFAULT";
		}
		$strSqlOrder .= " ".$order;

		$limit = (intval($limit)>0) ? intval($limit) : intval(COption::GetOptionString('statistic','RECORDS_LIMIT'));

		$sqlDays = "
			-- TODAY
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.GUESTS_DAY,0),0))			GUESTS_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.NEW_GUESTS,0),0))			NEW_GUESTS_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.FAVORITES,0),0))			FAVORITES_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.C_HOSTS_DAY,0),0))			C_HOSTS_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.SESSIONS,0),0))				SESSIONS_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.HITS,0),0))					HITS_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.GUESTS_DAY_BACK,0),0))		GUESTS_BACK_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.FAVORITES_BACK,0),0))		FAVORITES_BACK_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.HOSTS_DAY_BACK,0),0))		HOSTS_BACK_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.SESSIONS_BACK,0),0))		SESSIONS_BACK_TODAY,
			sum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.HITS_BACK,0),0))			HITS_BACK_TODAY,

			-- YESTERDAY
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.GUESTS_DAY,0),0))			GUESTS_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.NEW_GUESTS,0),0))			NEW_GUESTS_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.FAVORITES,0),0))			FAVORITES_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.C_HOSTS_DAY,0),0))		C_HOSTS_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.SESSIONS,0),0))			SESSIONS_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.HITS,0),0))				HITS_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.GUESTS_DAY_BACK,0),0))	GUESTS_BACK_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.FAVORITES_BACK,0),0))		FAVORITES_BACK_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.HOSTS_DAY_BACK,0),0))		HOSTS_BACK_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.SESSIONS_BACK,0),0))		SESSIONS_BACK_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.HITS_BACK,0),0))			HITS_BACK_YESTERDAY,

			-- THE DAY BEFORE YESTERDAY
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.GUESTS_DAY,0),0))			GUESTS_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.NEW_GUESTS,0),0))			NEW_GUESTS_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.FAVORITES,0),0))			FAVORITES_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.C_HOSTS_DAY,0),0))		C_HOSTS_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.SESSIONS,0),0))			SESSIONS_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.HITS,0),0))				HITS_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.GUESTS_DAY_BACK,0),0))	GUESTS_BACK_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.FAVORITES_BACK,0),0))		FAVORITES_BACK_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.HOSTS_DAY_BACK,0),0))		HOSTS_BACK_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.SESSIONS_BACK,0),0))		SESSIONS_BACK_BEF_YESTERDAY,
			sum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.HITS_BACK,0),0))			HITS_BACK_BEF_YESTERDAY,
			";
		if ($find_group=="NOT_REF") // no grouping
		{
			$strSql =	"
				SELECT
					A.ID, A.REFERER1, A.REFERER2, A.PRIORITY, A.EVENTS_VIEW, A.DESCRIPTION,
					A.DATE_FIRST C_TIME_FIRST,
					A.DATE_LAST C_TIME_LAST,
					'".$DB->ForSql($view_currency)."' CURRENCY,
					".$DB->DateToCharFunction("A.DATE_FIRST","SHORT")." DATE_FIRST,
					".$DB->DateToCharFunction("A.DATE_LAST","SHORT")." DATE_LAST,
					UNIX_TIMESTAMP(ifnull(A.DATE_LAST,0))-UNIX_TIMESTAMP(ifnull(A.DATE_FIRST,0)) ADV_TIME,
					$sqlDays

					-- PERIOD
					".($filter_period ? $strSqlPeriod.'ifnull(D.GUESTS,0)'.$strT : 'A.GUESTS')." GUESTS_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.C_HOSTS,0)'.$strT : 'A.C_HOSTS')." C_HOSTS_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.NEW_GUESTS,0)'.$strT : 'A.NEW_GUESTS')." NEW_GUESTS_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.FAVORITES,0)'.$strT : 'A.FAVORITES')." FAVORITES_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.SESSIONS,0)'.$strT : 'A.SESSIONS')." SESSIONS_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.HITS,0)'.$strT : 'A.HITS')." HITS_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.GUESTS_DAY_BACK,0)'.$strT : 'A.GUESTS_BACK')." GUESTS_BACK_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.HOSTS_DAY_BACK,0)'.$strT : 'A.HOSTS_BACK')." HOSTS_BACK_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.FAVORITES_BACK,0)'.$strT : 'A.FAVORITES')." FAVORITES_BACK_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.SESSIONS_BACK,0)'.$strT : 'A.SESSIONS_BACK')." SESSIONS_BACK_PERIOD,
					".($filter_period ? $strSqlPeriod.'ifnull(D.HITS_BACK,0)'.$strT : 'A.HITS_BACK')." HITS_BACK_PERIOD,

					-- TOTAL
					A.GUESTS, A.NEW_GUESTS, A.FAVORITES, A.C_HOSTS, A.SESSIONS, A.HITS, A.GUESTS_BACK, A.FAVORITES_BACK, A.HOSTS_BACK, A.SESSIONS_BACK, A.HITS_BACK,

					-- AUDIENCE
					if(A.SESSIONS>0,round(A.HITS/A.SESSIONS,2),-1) ATTENT,
					if(A.SESSIONS_BACK>0,round(A.HITS_BACK/A.SESSIONS_BACK,2),-1) ATTENT_BACK,
					if(A.GUESTS>0,round((A.NEW_GUESTS/A.GUESTS)*100,2),-1) NEW_VISITORS,
					if(A.GUESTS>0,round((A.GUESTS_BACK/A.GUESTS)*100,2),-1) RETURNED_VISITORS,
					if(
					round((((UNIX_TIMESTAMP(ifnull(A.DATE_LAST,0))-UNIX_TIMESTAMP(ifnull(A.DATE_FIRST,0)))/86400)),0)>=1, round(A.GUESTS/((UNIX_TIMESTAMP(ifnull(A.DATE_LAST,0)) - UNIX_TIMESTAMP(ifnull(A.DATE_FIRST,0)))/86400),2),-1)  VISITORS_PER_DAY,

					-- FINANCES
					round(round(A.COST,2)*$rate,2) COST,
					round(round(A.REVENUE,2)*$rate,2) REVENUE,
					round(round(A.REVENUE-A.COST,2)*$rate,2) BENEFIT,
					round(round(if(A.SESSIONS>0,A.COST/A.SESSIONS,0),2)*$rate,2) SESSION_COST,
					round(round(if(A.GUESTS>0,A.COST/A.GUESTS,0),2)*$rate,2) VISITOR_COST,
					if(A.COST>0,round(((A.REVENUE-A.COST)/A.COST)*100,2),-1) ROI

				FROM
					b_stat_adv A
				LEFT JOIN b_stat_adv_day D ON (D.ADV_ID = A.ID)
				WHERE
					$strSqlSearch
				GROUP BY
					A.ID, A.REFERER1, A.REFERER2, A.COST, A.REVENUE, A.PRIORITY, A.EVENTS_VIEW, A.DESCRIPTION, A.DATE_FIRST, A.DATE_LAST, A.GUESTS, A.NEW_GUESTS, A.FAVORITES, A.C_HOSTS, A.SESSIONS, A.HITS, A.GUESTS_BACK, A.FAVORITES_BACK, A.HOSTS_BACK, A.SESSIONS_BACK, A.HITS_BACK
			";
		}
		else
		{
			if ($find_group=="referer1")
				$group = "REFERER1";
			else
				$group = "REFERER2";

			// total data
			$strSql =	"
				SELECT
					A.$group,
					min(A.DATE_LAST)											C_TIME_FIRST,
					max(A.DATE_LAST)											C_TIME_LAST,
					'".$DB->ForSql($view_currency)."'											CURRENCY,
					".$DB->DateToCharFunction("min(A.DATE_FIRST)","SHORT")."	DATE_FIRST,
					".$DB->DateToCharFunction("max(A.DATE_LAST)","SHORT")."		DATE_LAST,
					UNIX_TIMESTAMP(max(ifnull(A.DATE_LAST,0)))-UNIX_TIMESTAMP(min(ifnull(A.DATE_FIRST,0)))	ADV_TIME,

					-- TOTAL
					sum(A.GUESTS)			GUESTS,
					sum(A.NEW_GUESTS)		NEW_GUESTS,
					sum(A.FAVORITES)		FAVORITES,
					sum(A.C_HOSTS)			C_HOSTS,
					sum(A.SESSIONS)			SESSIONS,
					sum(A.HITS)				HITS,
					sum(A.GUESTS_BACK)		GUESTS_BACK,
					sum(A.FAVORITES_BACK)	FAVORITES_BACK,
					sum(A.HOSTS_BACK)		HOSTS_BACK,
					sum(A.SESSIONS_BACK)	SESSIONS_BACK,
					sum(A.HITS_BACK)		HITS_BACK,

					-- AUDIENCE
					if(sum(A.SESSIONS)>0,round(sum(A.HITS)/sum(A.SESSIONS),2),-1)					ATTENT,
					if(sum(A.SESSIONS_BACK)>0,round(sum(A.HITS_BACK)/sum(A.SESSIONS_BACK),2),-1)	ATTENT_BACK,
					if(sum(A.GUESTS)>0,round((sum(A.NEW_GUESTS)/sum(A.GUESTS))*100,2),-1)			NEW_VISITORS,
					if(sum(A.GUESTS)>0,round((sum(A.GUESTS_BACK)/sum(A.GUESTS))*100,2),-1)			RETURNED_VISITORS,
					if(
					round((((UNIX_TIMESTAMP(max(ifnull(A.DATE_LAST,0)))-UNIX_TIMESTAMP(min(ifnull(A.DATE_FIRST,0))))/86400)),0)>=1, round(sum(A.GUESTS)/((UNIX_TIMESTAMP(max(ifnull(A.DATE_LAST,0))) - UNIX_TIMESTAMP(min(ifnull(A.DATE_FIRST,0))))/86400),2),-1)  VISITORS_PER_DAY,

					-- FINANCES
					round(round(sum(A.COST),2)*$rate,2)												COST,
					round(round(sum(A.REVENUE),2)*$rate,2)											REVENUE,
					round(round((sum(A.REVENUE)-sum(A.COST)),2)*$rate,2)							BENEFIT,
					round(round(if(sum(A.SESSIONS)>0,sum(A.COST)/sum(A.SESSIONS),0),2)*$rate,2)		SESSION_COST,
					round(round(if(sum(A.GUESTS)>0,sum(A.COST)/sum(A.GUESTS),0),2)*$rate,2)			VISITOR_COST,
					if(sum(A.COST)>0,round(((sum(A.REVENUE)-sum(A.COST))/sum(A.COST))*100,2),-1)	ROI

				FROM
					b_stat_adv A
				WHERE
					$strSqlSearch
				GROUP BY
					A.$group
			";

			// period data
			$strSql_days = "
				SELECT
				A.$group,
				$sqlDays

				-- PERIOD
				".($filter_period ? $strSqlPeriod.'ifnull(D.GUESTS,0)'.$strT : 'sum(A.GUESTS)')."				GUESTS_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.C_HOSTS,0)'.$strT : 'sum(A.C_HOSTS)')."				C_HOSTS_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.NEW_GUESTS,0)'.$strT : 'sum(A.NEW_GUESTS)')."		NEW_GUESTS_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.FAVORITES,0)'.$strT : 'sum(A.FAVORITES)')."			FAVORITES_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.SESSIONS,0)'.$strT : 'sum(A.SESSIONS)')."			SESSIONS_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.HITS,0)'.$strT : 'sum(A.HITS)')."					HITS_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.GUESTS_BACK,0)'.$strT : 'A.GUESTS_BACK')."			GUESTS_BACK_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.HOSTS_BACK,0)'.$strT : 'A.HOSTS_BACK')."			HOSTS_BACK_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.FAVORITES_BACK,0)'.$strT : 'sum(A.FAVORITES)')."	FAVORITES_BACK_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.SESSIONS_BACK,0)'.$strT : 'sum(A.SESSIONS_BACK)')."		SESSIONS_BACK_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(D.HITS_BACK,0)'.$strT : 'sum(A.HITS_BACK)')."			HITS_BACK_PERIOD
				FROM
					b_stat_adv_day D
				LEFT JOIN b_stat_adv A ON (D.ADV_ID = A.ID)
				GROUP BY
					A.$group
				";

			$z = $DB->Query($strSql_days, false, $err_mess.__LINE__);
			while ($zr = $z->Fetch()) $arrGROUP_DAYS[$zr[$group]] = $zr;
		}
		$strSql_res = $strSql;

		$strSql .= "
				HAVING
					1=1
				$strSqlSearch_h
				$strSqlOrder
				LIMIT $limit
			";

		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		$is_filtered = (IsFiltered($strSqlSearch) || strlen($strSqlSearch_h)>0 || $group || $filter_period);
		return $res;
	}

	public static function GetByID($ID)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$ID = intval($ID);
		$strSql = "
			SELECT
				A.*,
				round(A.COST,2)									COST,
				round(A.REVENUE,2)								REVENUE,
				".$DB->DateToCharFunction("A.DATE_FIRST")."		DATE_FIRST,
				".$DB->DateToCharFunction("A.DATE_LAST")."		DATE_LAST
			FROM
				b_stat_adv A
			WHERE
				A.ID = '$ID'
		";
		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		return $res;
	}

	public static function GetEventList($ID, &$by, &$order, $arFilter=Array(), &$is_filtered)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$find_group = $arFilter["GROUP"];
		$ID = intval($ID);
		$arSqlSearch = Array();
		$arSqlSearch_h = Array();
		$strSqlSearch_h = "";
		$filter_period = false;
		$strSqlPeriod = "";
		$strT = "";
		if (is_array($arFilter))
		{
			$date1 = $arFilter["DATE1_PERIOD"];
			$date2 = $arFilter["DATE2_PERIOD"];
			$date_from = MkDateTime(ConvertDateTime($date1,"D.M.Y"),"d.m.Y");
			$date_to = MkDateTime(ConvertDateTime($date2,"D.M.Y")." 23:59","d.m.Y H:i");
			if (strlen($date1)>0)
			{
				$filter_period = true;
				if (strlen($date2)>0)
				{
					$strSqlPeriod = "sum(if(AE.DATE_STAT<FROM_UNIXTIME('$date_from'),0, if(AE.DATE_STAT>FROM_UNIXTIME('$date_to'),0,";
					$strT=")))";
				}
				else
				{
					$strSqlPeriod = "sum(if(AE.DATE_STAT<FROM_UNIXTIME('$date_from'),0,";
					$strT="))";
				}
			}
			elseif (strlen($date2)>0)
			{
				$filter_period = true;
				$strSqlPeriod = "sum(if(AE.DATE_STAT>FROM_UNIXTIME('$date_to'),0,";
				$strT="))";
			}
			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":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("E.ID", $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;
					case "KEYWORDS":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("E.DESCRIPTION, E.NAME", $val, $match);
						break;
					case "COUNTER_PERIOD_1":
						$arSqlSearch_h[] = "COUNTER_PERIOD>='".intval($val)."'";
						break;
					case "COUNTER_PERIOD_2":
						$arSqlSearch_h[] = "COUNTER_PERIOD<='".intval($val)."'";
						break;
					case "COUNTER_BACK_PERIOD_1":
						$arSqlSearch_h[] = "COUNTER_BACK_PERIOD>='".intval($val)."'";
						break;
					case "COUNTER_BACK_PERIOD_2":
						$arSqlSearch_h[] = "COUNTER_BACK_PERIOD<='".intval($val)."'";
						break;
					case "COUNTER_ADV_DYNAMIC_LIST":
						$arSqlSearch_h[] = "(COUNTER_PERIOD>='".intval($val)."' or COUNTER_BACK_PERIOD>='".intval($val)."')";
						break;
					case "MONEY1":
						$arSqlSearch_h[] = "(MONEY+MONEY_BACK)>='".roundDB($val)."'";
						break;
					case "MONEY2":
						$arSqlSearch_h[] = "(MONEY+MONEY_BACK)<='".roundDB($val)."'";
						break;
					case "MONEY_PERIOD_1":
						$arSqlSearch_h[] = "(MONEY_PERIOD+MONEY_BACK_PERIOD)>='".roundDB($val)."'";
						break;
					case "MONEY_PERIOD_2":
						$arSqlSearch_h[] = "(MONEY_PERIOD+MONEY_BACK_PERIOD)<='".roundDB($val)."'";
						break;
				}
			}
		}

		if ($by == "s_id")			$strSqlOrder = "ORDER BY E.ID";
		elseif ($by == "s_event1")		$strSqlOrder = "ORDER BY E.EVENT1";
		elseif ($by == "s_event2")		$strSqlOrder = "ORDER BY E.EVENT2";
		elseif ($by == "s_sort")		$strSqlOrder = "ORDER BY C_SORT";
		elseif ($by == "s_name")		$strSqlOrder = "ORDER BY E.NAME";
		elseif ($by == "s_description")		$strSqlOrder = "ORDER BY E.DESCRIPTION";
		elseif ($by == "s_counter")		$strSqlOrder = "ORDER BY COUNTER";
		elseif ($by == "s_counter_back")	$strSqlOrder = "ORDER BY COUNTER_BACK";
		elseif ($by == "s_counter_period")	$strSqlOrder = "ORDER BY COUNTER_PERIOD";
		elseif ($by == "s_counter_back_period")	$strSqlOrder = "ORDER BY COUNTER_BACK_PERIOD";
		elseif ($by == "s_counter_today")	$strSqlOrder = "ORDER BY COUNTER_TODAY";
		elseif ($by == "s_counter_back_today")	$strSqlOrder = "ORDER BY COUNTER_BACK_TODAY";
		elseif ($by == "s_counter_yestoday")	$strSqlOrder = "ORDER BY COUNTER_YESTERDAY";
		elseif ($by == "s_counter_back_yestoday")	$strSqlOrder = "ORDER BY COUNTER_BACK_YESTERDAY";
		elseif ($by == "s_counter_bef_yestoday")	$strSqlOrder = "ORDER BY COUNTER_BEF_YESTERDAY";
		elseif ($by == "s_counter_back_bef_yestoday")	$strSqlOrder = "ORDER BY COUNTER_BACK_BEF_YESTERDAY";
		elseif ($by == "s_def")
		{
			$strSqlOrder = "
			ORDER BY
				E.C_SORT desc,
				COUNTER_TODAY desc, COUNTER_BACK_TODAY desc,
				COUNTER_YESTERDAY desc, COUNTER_BACK_YESTERDAY desc,
				COUNTER_BEF_YESTERDAY desc, COUNTER_BACK_BEF_YESTERDAY desc,
				".($filter_period? "COUNTER_PERIOD desc, COUNTER_BACK_PERIOD desc,": "")."
				COUNTER desc, COUNTER_BACK
			";
		}
		else
		{
			$by = "s_counter";
			$strSqlOrder = "ORDER BY COUNTER";
		}

		if ($order!="asc")
		{
			$strSqlOrder .= " desc ";
			$order="desc";
		}

		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		foreach($arSqlSearch_h as $sqlWhere)
			$strSqlSearch_h .= " and (".$sqlWhere.") ";

		$find_group = (strlen($find_group)<=0) ? "NOT_REF" : $find_group;

		$sqlDays = "
			sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.COUNTER,0),0))						COUNTER_TODAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.COUNTER,0),0))						COUNTER_YESTERDAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.COUNTER,0),0))						COUNTER_BEF_YESTERDAY,
			sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.COUNTER_BACK,0),0))					COUNTER_BACK_TODAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.COUNTER_BACK,0),0))					COUNTER_BACK_YESTERDAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.COUNTER_BACK,0),0))					COUNTER_BACK_BEF_YESTERDAY,
			".($filter_period ? $strSqlPeriod.'ifnull(AE.COUNTER,0)'.$strT : 'sum(AE.COUNTER)')."			COUNTER_PERIOD,
			".($filter_period ? $strSqlPeriod.'ifnull(AE.COUNTER_BACK,0)'.$strT : 'sum(AE.COUNTER_BACK)')."	COUNTER_BACK_PERIOD,

			sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.MONEY,0),0))							MONEY_TODAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.MONEY,0),0))						MONEY_YESTERDAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.MONEY,0),0))						MONEY_BEF_YESTERDAY,
			sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.MONEY_BACK,0),0))						MONEY_BACK_TODAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.MONEY_BACK,0),0))					MONEY_BACK_YESTERDAY,
			sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.MONEY_BACK,0),0))					MONEY_BACK_BEF_YESTERDAY,
			".($filter_period ? $strSqlPeriod.'ifnull(AE.MONEY,0)'.$strT : 'sum(AE.MONEY)')."				MONEY_PERIOD,
			".($filter_period ? $strSqlPeriod.'ifnull(AE.MONEY_BACK,0)'.$strT : 'sum(AE.MONEY_BACK)')."		MONEY_BACK_PERIOD,
			";

		if ($find_group=="NOT_REF") // no grouping
		{
			$strSql = "
				SELECT
					E.ID, E.EVENT1, E.EVENT2, E.C_SORT, E.NAME, E.DESCRIPTION,
					sum(AE.COUNTER) COUNTER,
					sum(AE.COUNTER_BACK) COUNTER_BACK,
					sum(AE.MONEY) MONEY,
					sum(AE.MONEY_BACK) MONEY_BACK,
					$sqlDays
					if (length(E.NAME)>0, E.NAME,
						concat(ifnull(E.EVENT1,''),' / ',ifnull(E.EVENT2,''))) EVENT
				FROM
					b_stat_event E,
					b_stat_adv_event_day AE
				WHERE
				$strSqlSearch
				and	E.ADV_VISIBLE = 'Y'
				and AE.ADV_ID = '$ID'
				and AE.EVENT_ID = E.ID
				GROUP BY E.ID, E.EVENT1, E.EVENT2, E.C_SORT, E.NAME, E.DESCRIPTION
				HAVING
					1=1
				$strSqlSearch_h
				$strSqlOrder
				LIMIT ".intval(COption::GetOptionString('statistic','RECORDS_LIMIT'))."
				";
		}
		else
		{
			if ($find_group=="event1")
				$group = "E.EVENT1";
			else
				$group = "E.EVENT2";

			$strSql = "
				SELECT
					$group,
					sum(E.C_SORT) C_SORT,
					$sqlDays
					sum(AE.COUNTER) COUNTER,
					sum(AE.COUNTER_BACK) COUNTER_BACK,
					sum(AE.MONEY) MONEY,
					sum(AE.MONEY_BACK) MONEY_BACK
				FROM
					b_stat_event E,
					b_stat_adv_event_day AE
				WHERE
				$strSqlSearch
				and	E.ADV_VISIBLE = 'Y'
				and AE.ADV_ID = '$ID'
				and AE.EVENT_ID = E.ID
				GROUP BY $group
				HAVING
					1=1
				$strSqlSearch_h
				$strSqlOrder
				LIMIT ".intval(COption::GetOptionString('statistic','RECORDS_LIMIT'))."
			";
		}

		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		$is_filtered = (IsFiltered($strSqlSearch) || $filter_period || strlen($strSqlSearch_h)>0 || $find_group!="NOT_REF");
		return $res;
	}

	public static function GetEventListByReferer($value, $arFilter)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		if ($arFilter["GROUP"]=="referer1")
			$group = "A.REFERER1";
		else
			$group = "A.REFERER2";

		$where = "";
		$filter_period = false;
		$strSqlPeriod = "";
		$strT = "";

		if (is_array($arFilter))
		{
			$date1 = $arFilter["DATE1_PERIOD"];
			$date2 = $arFilter["DATE2_PERIOD"];
			$date_from = MkDateTime(ConvertDateTime($date1,"D.M.Y"),"d.m.Y");
			$date_to = MkDateTime(ConvertDateTime($date2,"D.M.Y")." 23:59","d.m.Y H:i");
			if (strlen($date1)>0)
			{
				$filter_period = true;
				if (strlen($date2)>0)
				{
					$strSqlPeriod = "sum(if(AE.DATE_STAT<FROM_UNIXTIME('$date_from'),0, if(AE.DATE_STAT>FROM_UNIXTIME('$date_to'),0,";
					$strT=")))";
				}
				else
				{
					$strSqlPeriod = "sum(if(AE.DATE_STAT<FROM_UNIXTIME('$date_from'),0,";
					$strT="))";
				}
			}
			elseif (strlen($date2)>0)
			{
				$filter_period = true;
				$strSqlPeriod = "sum(if(AE.DATE_STAT>FROM_UNIXTIME('$date_to'),0,";
				$strT="))";
			}
		}

		$arFilter["GROUP"]="";
		$a = CAdv::GetList($by, $order, $arFilter, $is_filtered, "", $arrGROUP_DAYS, $strSql_res);
		if ($is_filtered)
		{
			$str_id = "0";
			while ($ar = $a->Fetch()) $str_id .= ",".intval($ar["ID"]);
			$where = "and A.ID in ($str_id)";
		}

		$strSql = "
			SELECT
				E.ID, E.EVENT1, E.EVENT2, E.C_SORT, E.NAME, E.DESCRIPTION,
				sum(AE.COUNTER)																				COUNTER,
				sum(AE.COUNTER_BACK)																		COUNTER_BACK,
				sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.COUNTER,0),0))					COUNTER_TODAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.COUNTER,0),0))					COUNTER_YESTERDAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.COUNTER,0),0))					COUNTER_BEF_YESTERDAY,
				sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.COUNTER_BACK,0),0))				COUNTER_BACK_TODAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.COUNTER_BACK,0),0))				COUNTER_BACK_YESTERDAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.COUNTER_BACK,0),0))				COUNTER_BACK_BEF_YESTERDAY,
				".($filter_period ? $strSqlPeriod.'ifnull(AE.COUNTER,0)'.$strT : 'sum(AE.COUNTER)')."		COUNTER_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(AE.COUNTER_BACK,0)'.$strT : 'sum(AE.COUNTER_BACK)')."	COUNTER_BACK_PERIOD,

				sum(AE.MONEY)																				MONEY,
				sum(AE.MONEY_BACK)																			MONEY_BACK,
				sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.MONEY,0),0))						MONEY_TODAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.MONEY,0),0))					MONEY_YESTERDAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.MONEY,0),0))					MONEY_BEF_YESTERDAY,
				sum(if(to_days(curdate())=to_days(AE.DATE_STAT),ifnull(AE.MONEY_BACK,0),0))					MONEY_BACK_TODAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=1,ifnull(AE.MONEY_BACK,0),0))				MONEY_BACK_YESTERDAY,
				sum(if(to_days(curdate())-to_days(AE.DATE_STAT)=2,ifnull(AE.MONEY_BACK,0),0))				MONEY_BACK_BEF_YESTERDAY,
				".($filter_period ? $strSqlPeriod.'ifnull(AE.MONEY,0)'.$strT : 'sum(AE.MONEY)')."			MONEY_PERIOD,
				".($filter_period ? $strSqlPeriod.'ifnull(AE.MONEY_BACK,0)'.$strT : 'sum(AE.MONEY_BACK)')."	MONEY_BACK_PERIOD,

				if (length(E.NAME)>0, E.NAME,
					concat(ifnull(E.EVENT1,''),' / ',ifnull(E.EVENT2,''))) EVENT
			FROM
				b_stat_adv A,
				b_stat_adv_event_day AE,
				b_stat_event E
			WHERE
				1=1
				$where
			and	$group='".$DB->ForSql($value,255)."'
			and AE.ADV_ID = A.ID
			and E.ID = AE.EVENT_ID
			and E.ADV_VISIBLE = 'Y'
			GROUP BY
				E.ID, E.EVENT1, E.EVENT2, E.C_SORT, E.NAME, E.DESCRIPTION
			ORDER BY
				E.C_SORT desc,
				COUNTER_TODAY desc, COUNTER_BACK_TODAY desc,
				COUNTER_YESTERDAY desc, COUNTER_BACK_YESTERDAY desc,
				COUNTER_BEF_YESTERDAY desc, COUNTER_BACK_BEF_YESTERDAY desc,
				COUNTER_PERIOD desc, COUNTER_BACK_PERIOD desc,
				COUNTER desc, COUNTER_BACK
			LIMIT ".intval(COption::GetOptionString('statistic','RECORDS_LIMIT'))."
			";

		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		return $res;
	}

	public static function GetDynamicList($ADV_ID, &$by, &$order, &$arMaxMin, $arFilter=Array())
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$ADV_ID = intval($ADV_ID);
		$arSqlSearch = Array();
		$strSqlSearch = "";
		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;
				}

				$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, "SHORT")." + INTERVAL 1 DAY";
						break;
				}
			}
		}

		foreach($arSqlSearch as $sqlWhere)
			$strSqlSearch .= " and (".$sqlWhere.") ";

		if ($by == "s_date")
			$strSqlOrder = "ORDER BY D.DATE_STAT";
		else
		{
			$by = "s_date";
			$strSqlOrder = "ORDER BY D.DATE_STAT";
		}

		if ($order!="asc")
		{
			$strSqlOrder .= " desc ";
			$order="desc";
		}

		$strSql =	"
			SELECT
				".$DB->DateToCharFunction("D.DATE_STAT","SHORT")." DATE_STAT,
				DAYOFMONTH(D.DATE_STAT) DAY,
				MONTH(D.DATE_STAT) MONTH,
				YEAR(D.DATE_STAT) YEAR,
				D.GUESTS_DAY GUESTS,
				D.NEW_GUESTS NEW_GUESTS,
				D.FAVORITES FAVORITES,
				D.C_HOSTS_DAY C_HOSTS,
				D.SESSIONS SESSIONS,
				D.HITS HITS,
				D.GUESTS_DAY_BACK GUESTS_BACK,
				D.FAVORITES_BACK FAVORITES_BACK,
				D.HOSTS_DAY_BACK HOSTS_BACK,
				D.SESSIONS_BACK SESSIONS_BACK,
				D.HITS_BACK HITS_BACK
			FROM
				b_stat_adv_day D
			WHERE
				D.ADV_ID = $ADV_ID
			$strSqlSearch
			GROUP BY
				D.ADV_ID, D.DATE_STAT
			$strSqlOrder
		";
		$res = $DB->Query($strSql, false, $err_mess.__LINE__);

		$strSql = "
			SELECT
				max(D.DATE_STAT)				DATE_LAST,
				min(D.DATE_STAT)				DATE_FIRST,
				DAYOFMONTH(max(D.DATE_STAT))	MAX_DAY,
				MONTH(max(D.DATE_STAT))			MAX_MONTH,
				YEAR(max(D.DATE_STAT))			MAX_YEAR,
				DAYOFMONTH(min(D.DATE_STAT))	MIN_DAY,
				MONTH(min(D.DATE_STAT))			MIN_MONTH,
				YEAR(min(D.DATE_STAT))			MIN_YEAR
			FROM
				b_stat_adv_day D
			WHERE
				D.ADV_ID = $ADV_ID
			$strSqlSearch
			";

		$a = $DB->Query($strSql, false, $err_mess.__LINE__);
		$ar = $a->Fetch();
		$arMaxMin["MAX_DAY"]	= $ar["MAX_DAY"];
		$arMaxMin["MAX_MONTH"]	= $ar["MAX_MONTH"];
		$arMaxMin["MAX_YEAR"]	= $ar["MAX_YEAR"];
		$arMaxMin["MIN_DAY"]	= $ar["MIN_DAY"];
		$arMaxMin["MIN_MONTH"]	= $ar["MIN_MONTH"];
		$arMaxMin["MIN_YEAR"]	= $ar["MIN_YEAR"];

		return $res;
	}

	public static function GetDropDownList($strSqlOrder="ORDER BY REFERER1, REFERER2")
	{
		$DB = CDatabase::GetModuleConnection('statistic');
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$strSql = "
			SELECT
				ID as REFERENCE_ID,
				concat(ifnull(REFERER1,''),' / ',ifnull(REFERER2,''),' [',ID,']') as REFERENCE
			FROM
				b_stat_adv
			$strSqlOrder
			";
		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		return $res;
	}

	public static function GetSimpleList(&$by, &$order, $arFilter=Array(), &$is_filtered)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$arSqlSearch = Array();
		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":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
						break;
					case "REFERER1":
					case "REFERER2":
					case "DESCRIPTION":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
						break;
				}
			}
		}

		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		$order= ($order!="desc") ? "asc" : "desc";
		if ($by == "s_id")				$strSqlOrder = "ORDER BY A.ID ".$order;
		elseif ($by == "s_referer1")	$strSqlOrder = "ORDER BY A.REFERER1 ".$order.", A.REFERER2";
		elseif ($by == "s_referer2")	$strSqlOrder = "ORDER BY A.REFERER2 ".$order;
		elseif ($by == "s_description")	$strSqlOrder = "ORDER BY A.DESCRIPTION ".$order;
		else
		{
			$by = "s_referer1";
			$strSqlOrder = "ORDER BY A.REFERER1 ".$order.", A.REFERER2";
		}
		$strSql = "
			SELECT
				A.ID,
				A.REFERER1,
				A.REFERER2,
				A.DESCRIPTION
			FROM
				b_stat_adv A
			WHERE
			$strSqlSearch
			$strSqlOrder
			LIMIT ".intval(COption::GetOptionString('statistic','RECORDS_LIMIT'))."
			";

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

Zerion Mini Shell 1.0