• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_sync.php
  • Класс: CCalendarSync
  • Вызов: CCalendarSync::ModifyReccurentInstances
static function ModifyReccurentInstances($params = array())
{
	CCalendar::SetSilentErrorMode();
	$parentEvent = CCalendarEvent::GetById($params['parentId']);

	if ($parentEvent && CCalendarEvent::CheckRecurcion($parentEvent))
	{
		$excludeDates = CCalendarEvent::GetExDate($parentEvent['EXDATE']);

		foreach ($params['events'] as $arFields)
		{
			if (isset($parentEvent['IS_MEETING']) && $parentEvent['IS_MEETING'])
			{
				$arFields['IS_MEETING'] = $parentEvent['IS_MEETING'];
				$arFields['MEETING_HOST'] = $parentEvent['MEETING_HOST'];
				$arFields['MEETING'] = $parentEvent['MEETING'];
				$arFields['ATTENDEES_CODES'] = $parentEvent['ATTENDEES_CODES'];
			}

			$arFields['RECURRENCE_ID'] = $parentEvent['ID'];
			self::ModifyEvent(
				$params['calendarId'],
				$arFields,
				[
					'handleMeetingParams' => $parentEvent['IS_MEETING'],
					'sendInvitations' => false,
				]);

			if ($arFields['RECURRENCE_ID_DATE'])
			{
				$excludeDates[] = CCalendar::Date(CCalendar::Timestamp($arFields['RECURRENCE_ID_DATE']), false);
			}
		}

		$res = CCalendar::SaveEventEx(array(
			'arFields' => array(
				'ID' => $parentEvent['ID'],
				'EXDATE' => CCalendarEvent::SetExDate($excludeDates)
			),
			'bSilentAccessMeeting' => true,
			'recursionEditMode' => 'skip',
			'silentErrorMode' => true,
			'sendInvitations' => false,
			'bAffectToDav' => false,
			'sendEditNotification' => false
		));
	}

	CCalendar::SetSilentErrorMode(false);
}