• Модуль: 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;
}