- Модуль: advertising
- Путь к файлу: ~/bitrix/modules/advertising/classes/general/advertising.php
- Класс: CAdvType_all
- Вызов: CAdvType_all::GetList
static function GetList($by = "s_sort", $order = "asc", $arFilter = [], $is_filtered = null, $CHECK_RIGHTS = "Y")
{
$err_mess = (CAdvType_all::err_mess())."
Function: GetList
Line: ";
global $DB;
$arSqlSearch = Array();
if ($CHECK_RIGHTS=="Y")
{
$isAdmin = CAdvContract::IsAdmin();
$isDemo = CAdvContract::IsDemo();
$isManager = CAdvContract::IsManager();
$isAdvertiser = CAdvContract::IsAdvertiser();
}
else
{
$isAdmin = true;
$isDemo = true;
$isManager = true;
$isAdvertiser = true;
}
if ($isAdmin || $isDemo || $isManager || $isAdvertiser)
{
if (CAdvType::CheckFilter($arFilter))
{
if (is_array($arFilter))
{
$filter_keys = array_keys($arFilter);
for ($i=0, $n = count($filter_keys); $i < $n; $i++)
{
$key = $filter_keys[$i];
$val = $arFilter[$filter_keys[$i]];
if(is_array($val))
{
if(count($val) <= 0)
continue;
}
else
{
if( ((string)$val == '') || ($val === "NOT_REF") )
continue;
}
$match_value_set = (in_array($key."_EXACT_MATCH", $filter_keys)) ? true : false;
$key = strtoupper($key);
switch($key)
{
case "SID":
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("T.SID", $val, $match);
break;
case "DATE_MODIFY_1":
$arSqlSearch[] = "T.DATE_MODIFY>=".$DB->CharToDateFunction($val, "SHORT");
break;
case "DATE_MODIFY_2":
$arSqlSearch[] = "T.DATE_MODIFY<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
break;
case "ACTIVE":
$arSqlSearch[] = ($val=="Y") ? "T.ACTIVE='Y'" : "T.ACTIVE='N'";
break;
case "NAME":
case "DESCRIPTION":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("T.".$key, $val, $match);
break;
}
}
}
}
if ($by == "s_sid") $strSqlOrder = " ORDER BY T.SID ";
elseif ($by == "s_date_modify") $strSqlOrder = " ORDER BY T.DATE_MODIFY ";
elseif ($by == "s_modified_by") $strSqlOrder = " ORDER BY T.MODIFIED_BY ";
elseif ($by == "s_date_create") $strSqlOrder = " ORDER BY T.DATE_CREATE ";
elseif ($by == "s_created_by") $strSqlOrder = " ORDER BY T.CREATED_BY ";
elseif ($by == "s_active") $strSqlOrder = " ORDER BY T.ACTIVE ";
elseif ($by == "s_name") $strSqlOrder = " ORDER BY T.NAME ";
elseif ($by == "s_banners") $strSqlOrder = " ORDER BY BANNER_COUNT ";
elseif ($by == "s_description") $strSqlOrder = " ORDER BY T.DESCRIPTION ";
else
{
$strSqlOrder = " ORDER BY T.SORT ";
}
if ($order == "desc")
{
$strSqlOrder .= " desc ";
}
else
{
$strSqlOrder .= " asc ";
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$strContracts = "";
if (!$isAdmin && !$isDemo && !$isManager)
{
$strContracts = "0";
$arPermissions = CAdvContract::GetUserPermissions();
foreach ($arPermissions as $contract_id => $arContractPerms)
{
if (is_array($arContractPerms) && !empty($arContractPerms))
$strContracts .= ",".$contract_id;
}
}
$strSql = "
SELECT
T.SID,
T.ACTIVE,
T.SORT,
T.NAME,
T.DESCRIPTION,
".$DB->DateToCharFunction("T.DATE_CREATE")." DATE_CREATE,
".$DB->DateToCharFunction("T.DATE_MODIFY")." DATE_MODIFY,
T.CREATED_BY,
T.MODIFIED_BY,
count(distinct B.ID) BANNER_COUNT
FROM
b_adv_type T
LEFT JOIN b_adv_banner B ON (B.TYPE_SID=T.SID".($strContracts == "" ? "" :" AND B.CONTRACT_ID IN (".$strContracts.")").")
WHERE
$strSqlSearch ".
($strContracts == "" ? "" :
"and exists(select 'x' from b_adv_contract_2_type CT where (CT.TYPE_SID=T.SID OR CT.TYPE_SID='ALL') AND CT.CONTRACT_ID IN (".$strContracts.")) "
).
" and T.SID<>'ALL'
GROUP BY
T.SID, T.ACTIVE, T.SORT, T.NAME, T.DESCRIPTION, T.DATE_CREATE, T.DATE_MODIFY, T.CREATED_BY, T.MODIFIED_BY
$strSqlOrder
";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return $res;
}
return null;
}