- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_sect.php
- Класс: CCalendarSect
- Вызов: CCalendarSect::getListOrm
static function getListOrm($params)
{
$sectionFields = self::getSectionFields();
$filterFields = $params['arFilter'] ?? [];
$orderFields = $params['arOrder'] ?? [];
$selectFields = $params['arSelect'] ?? ['*'];
$query = SectionTable::query();
$queryFilter = null;
if (!empty($filterFields) && is_array($filterFields))
{
$queryFilter = BitrixMainORMQueryQuery::filter();
foreach ($filterFields as $key => $value)
{
if (is_string($value) && !$value)
{
continue;
}
switch ($key)
{
case 'ID':
case 'XML_ID':
case 'OWNER_ID':
case 'EXTERNAL_TYPE':
if (is_array($value))
{
$queryFilter->whereIn($key, $value);
}
else
{
$queryFilter->where($key, $value);
}
break;
case '>ID':
if ((int)$value)
{
$queryFilter->where('ID', '>', (int)$value);
}
break;
case 'ACTIVE':
if ($value === 'Y')
{
$queryFilter->where('ACTIVE', $value);
}
break;
case 'CAL_TYPE':
if (is_array($value))
{
$params['joinTypeInfo'] = true;
$queryFilter
->where('TYPE.ACTIVE', 'Y')
->whereIn('CAL_TYPE', $value);
}
else
{
$queryFilter->where('CAL_TYPE', $value);
}
break;
default:
if (in_array($key, $sectionFields, true))
{
$queryFilter->where($key, $value);
}
break;
}
}
}
if (!empty($filterFields['ADDITIONAL_IDS']) && is_array($filterFields['ADDITIONAL_IDS']))
{
if ($queryFilter)
{
$query->where(
BitrixMainORMQueryQuery::filter()
->logic('or')
->whereIn('ID', $filterFields['ADDITIONAL_IDS'])
->where($queryFilter)
);
}
else
{
$query->whereIn('ID', $filterFields['ADDITIONAL_IDS']);
}
}
else if ($queryFilter)
{
$query->where($queryFilter);
}
if ($params['joinTypeInfo'])
{
$query->registerRuntimeField(
'TYPE',
new BitrixMainEntityReferenceField(
'TYPE',
BitrixCalendarInternalsTypeTable::getEntity(),
BitrixMainORMQueryJoin::on('ref.XML_ID', 'this.CAL_TYPE'),
['join_type' => BitrixMainORMQueryJoin::TYPE_INNER]
)
);
$selectFields['TYPE_NAME'] = 'TYPE.NAME';
$selectFields['TYPE_DESC'] = 'TYPE.DESCRIPTION';
}
$query->setSelect($selectFields);
$orderList = [];
foreach ($orderFields as $key => $order)
{
if (in_array($key, $sectionFields, true))
{
$orderList[$key] = (mb_strtoupper($order) === 'DESC') ? 'DESC' : 'ASC';
}
}
if (!empty($orderList))
{
$query->setOrder($orderList);
}
if (isset($params['limit']) && (int)$params['limit'] > 0)
{
$query->setLimit((int)$params['limit']);
}
$sectionQuery = $query->exec();
[$sectionIdList, $result] = self::prepareSectionQueryData($sectionQuery);
if ($params['getPermissions'])
{
$result = self::getSectionAccess($sectionIdList, $result);
}
return $result;
}