- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/googleapisync.php
- Класс: BitrixCalendarSyncGoogleApiSync
- Вызов: GoogleApiSync::prepareRRule
private function prepareRRule($event, $editNextEvents): array
{
$rule = [];
$parsedRule = CCalendarEvent::ParseRRULE($event['RRULE']);
$rRule = 'RRULE:';
$rRule .= 'FREQ=' .$parsedRule['FREQ'];
$rRule .= !empty($parsedRule['INTERVAL']) ? ';INTERVAL=' . $parsedRule['INTERVAL'] : '';
if (!empty($parsedRule['BYDAY']))
{
if (is_string($parsedRule['BYDAY']))
{
$rRule .= ';BYDAY=' . $parsedRule['BYDAY'];
}
elseif (is_array($parsedRule['BYDAY']))
{
$rRule .= ';BYDAY=' . implode(",", $parsedRule['BYDAY']);
}
else
{
$rRule = '';
}
}
if (!empty($parsedRule['COUNT']))
{
$rRule .= ';COUNT=' . $parsedRule['COUNT'];
}
elseif (!empty($parsedRule['UNTIL']))
{
$tsTo = Util::getDateObject($parsedRule['UNTIL']);
if ($event['DT_SKIP_TIME'] === "N" && $tsTo->getTimestamp() < (new TypeDate(self::END_OF_DATE, "d.m.Y"))->getTimestamp())
{
$tsTo->add('+1 day');
}
$rRule .= ';UNTIL='.$tsTo->format('YmdTHisZ');
}
$rule[] = $rRule;
if (!empty($event['EXDATE']) && $editNextEvents !== true)
{
$exDates = explode(';', $event['EXDATE']);
foreach ($exDates as $exDate)
{
if ($event['DT_SKIP_TIME'] === "Y")
{
$rule[] = 'EXDATE;VALUE=DATE:' . date('Ymd', strtotime($exDate));
}
else
{
$rule[] = 'EXDATE;TZID=UTC:'
. date("Ymd", strtotime($exDate))
. Util::getDateObject($event['DATE_FROM'], false, $event['TZ_FROM'])
->setTimeZone(new DateTimeZone('UTC'))->format('\THis\Z');
}
}
}
return $rule;
}