- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_sect.php
- Класс: CCalendarSect
- Вызов: CCalendarSect::getListOld
static function getListOld($params)
{
global $DB;
$filter = $params['arFilter'];
$sort = $params['arOrder'] ?? ['SORT' => 'asc'];
$arFields = self::GetFields();
$arSqlSearch = [];
if(is_array($filter))
{
$filterKeys = array_keys($filter);
foreach ($filterKeys as $filterKey)
{
$n = mb_strtoupper($filterKey);
$val = $filter[$filterKey] ?? '';
if (($val === '') || $val === "NOT_REF")
{
continue;
}
if ($n === 'CAL_TYPE' && ($val === 'company_calendar' || $val === 'calendar_company'))
{
$arSqlSearch[] = 'CS.CAL_TYPE = '' . $val . '' AND CS.CAL_TYPE IS NOT NULL';
}
else if (
$n === 'ID'
|| $n === 'XML_ID'
|| $n === 'OWNER_ID'
|| $n === 'EXTERNAL_TYPE'
// || $n === 'CAL_DAV_CON'
)
{
if (is_array($val))
{
$val = array_map(array($DB, "ForSQL"), $val);
$arSqlSearch[] = 'CS.'.$n.' IN (''.implode('','', $val).'')';
}
else
{
$arSqlSearch[] = GetFilterQuery("CS.".$n, $val, 'N');
}
}
else if($n === '>ID' && (int)$val > 0)
{
$arSqlSearch[] = "CS.ID > ". (int)$val;
}
elseif($n === 'ACTIVE' && $val === "Y")
{
$arSqlSearch[] = "CS.ACTIVE = 'Y'";
}
elseif ($n === 'CAL_TYPE' && is_array($val))
{
$params['joinTypeInfo'] = true;
$strType = "";
foreach($val as $type)
{
$strType .= ",'" . $DB->ForSql($type) . "'";
}
$arSqlSearch[] = "CS.CAL_TYPE in (".trim($strType, ", ").")";
$arSqlSearch[] = "CT.ACTIVE='Y'";
}
elseif(isset($arFields[$n]))
{
$arSqlSearch[] = GetFilterQuery(
$arFields[$n]["FIELD_NAME"],
$val,
(isset($arFields[$n]["PROCENT"]) && $arFields[$n]["PROCENT"] === "N") ? "N" : "Y"
);
}
}
}
$strOrderBy = '';
foreach($sort as $by => $order)
{
if(isset($arFields[mb_strtoupper($by)]))
{
$byName = $arFields[mb_strtoupper($by)]["~FIELD_NAME"]
?? $arFields[mb_strtoupper($by)]["FIELD_NAME"]
;
$strOrderBy .= $byName.' '.(mb_strtolower($order) === 'desc'?'desc':'asc').',';
}
}
if($strOrderBy)
{
$strOrderBy = "ORDER BY ".rtrim($strOrderBy, ",");
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
if (!empty($filter['ADDITIONAL_IDS'] && is_array($filter['ADDITIONAL_IDS'])))
{
$strTypes = "";
foreach($filter['ADDITIONAL_IDS'] as $adid)
{
$strTypes .= ",". (int)$adid;
}
$strSqlSearch = '('.$strSqlSearch.') OR ID in('.trim($strTypes, ', ').')';
}
$strLimit = '';
if (isset($params['limit']) && (int)$params['limit'] > 0)
{
$strLimit = 'LIMIT '. (int)$params['limit'];
}
$select = 'CS.*';
$from = 'b_calendar_section CS';
// Fetch types info into selection
if ($params['joinTypeInfo'])
{
$select .= ", CT.NAME AS TYPE_NAME, CT.DESCRIPTION AS TYPE_DESC";
$from .= "n INNER JOIN b_calendar_type CT ON (CS.CAL_TYPE=CT.XML_ID)";
}
if ($params['getPermissions'])
{
$select .= ", CAP.ACCESS_CODE, CAP.TASK_ID";
$from .= "n LEFT JOIN b_calendar_access CAP ON (CS.ID=CAP.SECT_ID)";
}
$strSql = "
SELECT
$select
FROM
$from
WHERE
$strSqlSearch
$strOrderBy
$strLimit";
$result = [];
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
while ($sect = $res->Fetch())
{
$result[] = $sect;
}
return $result;
}