%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/statistic/classes/mysql/ |
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; } }