- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/ui/calendarfilter.php
- Класс: BitrixCalendarUiCalendarFilter
- Вызов: CalendarFilter::getFilterCompanyData
static function getFilterCompanyData(string $type, int $userId, int $ownerId, $fields): array
{
$filter = [
'CAL_TYPE' => $type,
'ACTIVE_SECTION' => 'Y',
];
$entries = [];
$query = EventTable::query()
->setSelect(['PARENT_ID'])
->registerRuntimeField(
'EVENT_SECOND',
new ReferenceField(
'EVENT_SECOND',
EventTable::getEntity(),
Join::on('ref.PARENT_ID', 'this.ID'),
['join_type' => Join::TYPE_LEFT]
)
)
->where('CAL_TYPE', $type)
->where('DELETED', 'N')
->where('EVENT_SECOND.DELETED', 'N')
;
if (isset($fields['fields']['IS_MEETING']) && $fields['fields']['IS_MEETING'])
{
$filter['IS_MEETING'] = $fields['fields']['IS_MEETING'] === 'Y';
}
if (isset($fields['fields']['MEETING_STATUS']) && $fields['fields']['MEETING_STATUS'])
{
$query->where('EVENT_SECOND.CREATED_BY', $userId);
if (
$fields['fields']['MEETING_STATUS'] === 'H'
&& !isset($fields['fields']['CREATED_BY'])
)
{
unset($filter['IS_MEETING']);
$query->where('EVENT_SECOND.MEETING_HOST', $userId);
}
else
{
$query->where('EVENT_SECOND.MEETING_STATUS', $fields['fields']['MEETING_STATUS']);
$filter['IS_MEETING'] = true;
}
}
if (isset($fields['fields']['CREATED_BY']) && is_array($fields['fields']['CREATED_BY']))
{
$query->whereIn('EVENT_SECOND.MEETING_HOST', $fields['fields']['CREATED_BY']);
}
if (isset($fields['fields']['SECTION_ID']) && is_array($fields['fields']['SECTION_ID']))
{
$query->whereIn('SECTION_ID', $fields['fields']['SECTION_ID']);
}
if (isset($fields['fields']['ATTENDEES']) && is_array($fields['fields']['ATTENDEES']))
{
if (isset($fields['fields']['MEETING_STATUS']))
{
$query
->registerRuntimeField(
'EVENT_THIRD',
new ReferenceField(
'EVENT_THIRD',
EventTable::getEntity(),
Join::on('ref.PARENT_ID', 'this.ID'),
['join_type' => Join::TYPE_LEFT]
)
)
->whereIn('EVENT_THIRD.CREATED_BY', $fields['fields']['ATTENDEES'])
;
}
else
{
$query->whereIn('EVENT_SECOND.CREATED_BY', $fields['fields']['ATTENDEES']);
}
$filter['IS_MEETING'] = true;
}
if (isset($fields['search']) && $fields['search'])
{
$filter[(CCalendarEvent::isFullTextIndexEnabled() ? '*' : '*%').'SEARCHABLE_CONTENT'] = CCalendarEvent::prepareToken($fields['search']);
}
[$filter, $parseRecursion] = self::filterByDate($fields, $filter);
$eventsFromQuery = $query->exec();
while ($event = $eventsFromQuery->Fetch())
{
$filter['ID'][] = (int)$event['PARENT_ID'];
}
if (isset($filter['ID']))
{
$filter['ID'] = array_unique($filter['ID']);
$entries = CCalendarEvent::GetList(
[
'arFilter' => $filter,
'fetchAttendees' => true,
'parseRecursion' => $parseRecursion,
'maxInstanceCount' => 50,
'preciseLimits' => $parseRecursion,
'userId' => $userId,
'fetchMeetings' => true,
'fetchSection' => true,
'setDefaultLimit' => false
]
);
}
$entries = self::applyAccessRestrictions($entries);
$entries = self::filterByShowDeclined($entries);
return [
'result' => true,
'entries' => $entries,
'counters' => false
];
}