- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
- Класс: CCalendarEvent
- Вызов: CCalendarEvent::getLocalBatchRecurrentEvent
static function getLocalBatchRecurrentEvent(int $userId, int $sectionId, int $syncTimestamp = 0, int $count = 50): array
{
global $DB;
$events = [];
$queryString = "SELECT DISTINCT "
. "e.*"
. ", " . $DB->DateToCharFunction('e.DATE_FROM') . " as DATE_FROM"
. ", " . $DB->DateToCharFunction('e.DATE_TO') . " as DATE_TO"
. ", " . $DB->DateToCharFunction('e.DATE_CREATE') . " as DATE_CREATE"
. ", " . $DB->DateToCharFunction('e.TIMESTAMP_X') . " as TIMESTAMP_X"
// . ", GROUP_CONCAT(". $DB->DateToCharFunction('i.ORIGINAL_DATE_FROM', 'SHORT')." SEPARATOR ';') as EXDATES"
. ", GROUP_CONCAT(". $DB->DateToCharFunction('x.ORIGINAL_DATE_FROM', 'SHORT')." SEPARATOR ';') as INSTANCES_EXDATES"
. ", GROUP_CONCAT(". $DB->DateToCharFunction('x.DATE_FROM', 'SHORT')." SEPARATOR ';') as INSTANCES_DATE_FROM"
. " FROM b_calendar_event e"
// . " LEFT JOIN b_calendar_event i"
// . " ON i.RECURRENCE_ID = e.PARENT_ID"
// . " AND e.OWNER_ID = i.OWNER_ID"
// . " AND i.MEETING_STATUS = 'N'"
. " LEFT JOIN b_calendar_event x "
. " ON x.RECURRENCE_ID = e.PARENT_ID"
. " AND e.OWNER_ID = x.OWNER_ID"
. " AND (x.MEETING_STATUS != 'N' OR x.MEETING_STATUS IS NULL)"
. " AND x.DELETED = 'N'"
. " INNER JOIN b_calendar_section s"
. " ON s.ID = e.SECTION_ID"
. " WHERE"
. " e.RRULE IS NOT NULL"
. " AND e.RRULE <> ''"
. " AND e.CAL_TYPE = 'user'"
. " AND e.OWNER_ID = " . $userId
. " AND e.SECTION_ID = " . $sectionId
. " AND e.DELETED <> 'Y'"
. " AND e.SYNC_STATUS IS NULL"
. " AND e.DATE_TO_TS_UTC >= " . $syncTimestamp
. " AND (e.MEETING_STATUS != 'N'"
. " OR e.MEETING_STATUS IS NULL)"
. " AND s.EXTERNAL_TYPE = 'local'"
. " AND s.GAPI_CALENDAR_ID IS NOT NULL"
. " GROUP BY e.ID"
. " ORDER BY e.ID DESC"
. " LIMIT " . $count
. ";"
;
$eventsDb = $DB->Query($queryString);
while ($event = $eventsDb->Fetch())
{
$event['RRULE'] = self::ParseRRULE($event['RRULE']);
if (isset($event['REMIND']) && $event['REMIND'] !== "")
{
$event['REMIND'] = unserialize($event['REMIND'], ['allowed_classes' => false]);
}
// unset($event['EXDATE']);
if (!empty($event['INSTANCES_EXDATES']) || !empty($event['INSTANCES_DATE_FROM']))
{
$eventExdate = explode(';', $event['EXDATE']);
$instanceExdate = array_unique(explode(';', $event['INSTANCES_EXDATES']));
$instanceDateFrom = array_unique(explode(';', $event['INSTANCES_DATE_FROM']));
if (is_array($eventExdate) && is_array($instanceExdate))
{
$event['EXDATE'] = implode(';', array_diff($eventExdate, $instanceExdate, $instanceDateFrom));
}
}
$events[] = $event;
}
return $events;
}