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