- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/controller/calendarajax.php
- Класс: BitrixCalendarControllerCalendarAjax
- Вызов: CalendarAjax::changeRecurciveEntryUntilAction
public function changeRecurciveEntryUntilAction($entryId, $untilDate)
{
$response = ['result' => false];
$event = CCalendarEvent::GetById((int)$entryId);
$untilTimestamp = CCalendar::Timestamp($untilDate);
$recId = false;
if ($event)
{
if (CCalendarEvent::CheckRecurcion($event))
{
$event['RRULE'] = CCalendarEvent::ParseRRULE($event['RRULE']);
$event['RRULE']['UNTIL'] = CCalendar::Date($untilTimestamp, false);
if (isset($event['RRULE']['COUNT']))
{
unset($event['RRULE']['COUNT']);
}
$id = CCalendar::SaveEvent([
'arFields' => [
"ID" => $event["ID"],
"RRULE" => $event['RRULE']
],
'silentErrorMode' => false,
'recursionEditMode' => 'skip',
'editParentEvents' => true,
'editEntryUntil' => true,
]);
$recId = $event["ID"];
$response['id'] = $id;
}
if ($event["RECURRENCE_ID"] > 0)
{
$recParentEvent = CCalendarEvent::GetById($event["RECURRENCE_ID"]);
if ($recParentEvent && CCalendarEvent::CheckRecurcion($recParentEvent))
{
$recParentEvent['RRULE'] = CCalendarEvent::ParseRRULE($recParentEvent['RRULE']);
if (
$recParentEvent['RRULE']['UNTIL']
&& CCalendar::Timestamp($recParentEvent['RRULE']['UNTIL']) > $untilTimestamp
)
{
$recParentEvent['RRULE']['UNTIL'] = CCalendar::Date($untilTimestamp, false);
if (isset($recParentEvent['RRULE']['COUNT']))
{
unset($recParentEvent['RRULE']['COUNT']);
}
$id = CCalendar::SaveEvent([
'arFields' => [
"ID" => $recParentEvent["ID"],
"RRULE" => $recParentEvent['RRULE']
],
'silentErrorMode' => false,
'recursionEditMode' => 'skip',
'editParentEvents' => true,
'editEntryUntil' => true,
]);
$response['id'] = $id;
}
}
$recId = $event["RECURRENCE_ID"];
}
if ($recId)
{
$recRelatedEvents = CCalendarEvent::GetEventsByRecId($recId, false);
foreach ($recRelatedEvents as $ev)
{
if (CCalendar::Timestamp($ev['DATE_FROM']) > $untilTimestamp)
{
CCalendar::DeleteEvent((int)$ev['ID'], true, ['recursionMode' => 'this']);
}
}
}
$response['result'] = true;
}
if ($response['result'] !== true)
{
$this->addError(new Error('[ed01]' . Loc::getMessage('EC_EVENT_DEL_ERROR'),
'change_recurcive_entry_until'));
}
return $response;
}