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