%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/statistic/classes/mysql/ |
Current File : //home/bitrix/www/bitrix/modules/statistic/classes/mysql/page.php |
<?php class CPage { public static function GetDynamicList($URL, &$by, &$order, $arFilter=Array()) { $err_mess = "File: ".__FILE__."<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = Array(); $from_adv = ""; $where_adv = ""; $counter = "SUM(D.COUNTER)"; $enter_counter = "SUM(D.ENTER_COUNTER)"; $exit_counter = "SUM(if(D.EXIT_COUNTER>0,D.EXIT_COUNTER,0))"; if (is_array($arFilter)) { if (strlen($arFilter["ADV"])>0) { $from_adv = " , b_stat_page_adv A "; $where_adv = "and A.PAGE_ID = D.ID"; if ($arFilter["ADV_DATA_TYPE"]=="B") { $counter = "SUM(A.COUNTER_BACK)"; $enter_counter = "SUM(A.ENTER_COUNTER_BACK)"; $exit_counter = "SUM(if(A.EXIT_COUNTER_BACK>0,A.EXIT_COUNTER_BACK,0))"; } elseif ($arFilter["ADV_DATA_TYPE"]=="P") { $counter = "SUM(A.COUNTER)"; $enter_counter = "SUM(A.ENTER_COUNTER)"; $exit_counter = "SUM(if(A.EXIT_COUNTER>0,A.EXIT_COUNTER,0))"; } else { $counter = "SUM(A.COUNTER + A.COUNTER_BACK)"; $enter_counter = "SUM(A.ENTER_COUNTER + A.ENTER_COUNTER_BACK)"; $exit_counter = "SUM(if(A.EXIT_COUNTER>0,A.EXIT_COUNTER,0) + if(A.EXIT_COUNTER_BACK>0,A.EXIT_COUNTER_BACK,0))"; } } 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, "SHORT")." + INTERVAL 1 DAY"; break; case "ADV": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("A.ADV_ID",$val,$match); break; case "IS_DIR": $arSqlSearch[] = ($val=="Y") ? "D.DIR = 'Y'" : "D.DIR = 'N'"; break; } } } 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"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $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, $counter COUNTER, $enter_counter ENTER_COUNTER, $exit_counter EXIT_COUNTER FROM b_stat_page D $from_adv WHERE $strSqlSearch and D.URL_HASH = '".crc32ex($URL)."' $where_adv GROUP BY D.DATE_STAT $strSqlOrder "; $res = $DB->Query($strSql, false, $err_mess.__LINE__); return $res; } public static function GetList($COUNTER_TYPE, &$by, &$order, $arFilter=Array(), &$is_filtered) { $err_mess = "File: ".__FILE__."<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); if ($COUNTER_TYPE!="ENTER_COUNTER" && $COUNTER_TYPE!="EXIT_COUNTER") $COUNTER_TYPE = "COUNTER"; $counter = "V.".$COUNTER_TYPE; $where_counter = "and V.".$COUNTER_TYPE.">0"; $arSqlSearch = Array(); $arSqlSearch_h = Array(); $strSqlSearch_h = ""; $from_adv = ""; $where_adv = ""; if (is_array($arFilter)) { if (strlen($arFilter["ADV"])>0) { $from_adv = " , b_stat_page_adv A "; $where_adv = "and A.PAGE_ID = V.ID"; if ($arFilter["ADV_DATA_TYPE"]=="B") { $counter = "A.".$COUNTER_TYPE."_BACK"; $where_counter = "and A.".$COUNTER_TYPE."_BACK>0"; } elseif ($arFilter["ADV_DATA_TYPE"]=="S") { $counter = "if(A.".$COUNTER_TYPE.">0, A.".$COUNTER_TYPE.", 0) + if(A.".$COUNTER_TYPE."_BACK>0, A.".$COUNTER_TYPE."_BACK, 0)"; $where_counter = "and (A.".$COUNTER_TYPE."_BACK>0 or A.".$COUNTER_TYPE.">0)"; } elseif ($arFilter["ADV_DATA_TYPE"]=="P") { $counter = "A.".$COUNTER_TYPE; $where_counter = "and A.".$COUNTER_TYPE.">0"; } } 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[] = "V.DATE_STAT>=".$DB->CharToDateFunction($val, "SHORT"); break; case "DATE2": if (CheckDateTime($val)) $arSqlSearch[] = "V.DATE_STAT<".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY"; break; case "SHOW": case "DIR": $arSqlSearch[] = ($val=="D") ? "V.DIR='Y'" : "V.DIR='N'"; break; case "SECTION": case "URL": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("V.URL",$val,$match,array("/","\\","_",".",":")); break; case "SECTION_ID": case "URL_ID": $arSqlSearch[] = "(V.URL like '".$DB->ForSql($val)."' and V.URL<>'".$DB->ForSql($val)."')"; break; case "PAGE_404": case "URL_404": $arSqlSearch_h[] = ($val=="Y") ? "max(V.URL_404)='Y'" : "max(V.URL_404)='N'"; break; case "ADV": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("A.ADV_ID",$val,$match); break; case "SITE_ID": if (is_array($val)) $val = implode(" | ", $val); $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("V.SITE_ID", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); foreach($arSqlSearch_h as $sqlWhere) $strSqlSearch_h .= " and (".$sqlWhere.") "; if ($by == "s_url") $strSqlOrder = "ORDER BY V.URL"; elseif ($by == "s_counter") $strSqlOrder = "ORDER BY COUNTER"; else { $by = "s_counter"; $strSqlOrder = "ORDER BY COUNTER desc, V.URL"; } if ($order!="asc") { $strSqlOrder .= " desc "; $order="desc"; } $strSql = " SELECT V.URL, V.DIR, V.SITE_ID, max(V.URL_404) as URL_404, sum($counter) as COUNTER FROM b_stat_page V $from_adv WHERE $strSqlSearch $where_adv $where_counter GROUP BY V.URL, V.DIR 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) || strlen($strSqlSearch_h)>0); return $res; } }