- Модуль: statistic
- Путь к файлу: ~/bitrix/modules/statistic/classes/mysql/page.php
- Класс: CPage
- Вызов: CPage::GetDynamicList
static function GetDynamicList($URL, $by = 's_date', $order = 'desc', $arFilter = [])
{
$err_mess = "File: ".__FILE__."
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 ($arFilter["ADV"] <> '')
{
$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( ((string)$val == '') || ($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
{
$strSqlOrder = "ORDER BY D.DATE_STAT";
}
if ($order != "asc")
{
$strSqlOrder .= " 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;
}