- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/update/eventwithlocationupdate.php
- Класс: BitrixCalendarUpdateEventWithLocationUpdate
- Вызов: EventWithLocationUpdate::execute
public function execute(array &$result)
{
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
if (Loader::includeModule("calendar")
&& (Option::get('calendar', 'eventWithLocationConverted', 'N') === 'Y')
)
{
RoomsManager::createInstance()->clearCache();
return self::FINISH_EXECUTION;
}
$status = $this->loadCurrentStatus();
$newStatus = [
'count' => $status['count'],
'steps' => $status['steps'],
'newFinished' => $status['newFinished'],
'lastEventId' => $status['lastEventId']
];
// Update calendar room events
if (!$status['newFinished'])
{
$res = $this->getLocationEvent($newStatus['lastEventId']);
while ($event = $res->Fetch())
{
$eventId = (int)$event['ID'];
$newStatus['lastEventId'] = $eventId;
$parentRes = $this->getLocationParentEvent($eventId);
if ($parentEvent = $parentRes->Fetch())
{
$ownerName = $sqlHelper->forSql(CCalendar::GetUserName($parentEvent['CREATED_BY']));
$parentId = (int)$parentEvent['ID'];
$this->updateLocationEvent($parentId, $ownerName, $eventId);
}
else
{
$this->deleteEvent($eventId);
}
$newStatus['steps']++;
}
if (isset($newStatus['lastEventId']) && $res->SelectedRowsCount() !== 0)
{
Option::set('calendar', 'eventWithLocationConvertedStatus', serialize($newStatus));
$result = [
'title' => Loc::getMessage("CALENDAR_UPDATE_EVENT_WITH_LOCATION"),
'count' => $newStatus['count'],
'steps' => $newStatus['steps'],
'lastEventId' => $newStatus['lastEventId'],
'newFinished' => $newStatus['newFinished']
];
return self::CONTINUE_EXECUTION;
}
$newStatus['newFinished'] = true;
$newStatus['lastEventId'] = PHP_INT_MAX;
}
//update IBlock room events
$meetingRoomArray = $this->getMeetingRoomArray();
if ($meetingRoomArray !== null)
{
$res = $this->getIBlockEvent($newStatus['lastEventId']);
while ($event = $res->Fetch())
{
$eventId = (int)$event['ID'];
$newStatus['lastEventId'] = $eventId;
$phrases = $this->prepareLocationEvent($event, $meetingRoomArray);
if ($phrases !== null && isset($phrases['child']) && isset($phrases['parent']))
{
$this->updateLocationValue($phrases['parent'], $eventId);
if ($event['IS_MEETING'])
{
$this->updateLocationValueForChildEvents($phrases['child'], $eventId);
}
RoomsManager::setEventIdForLocation($eventId);
}
$newStatus['steps']++;
}
if (isset($newStatus['lastEventId']) && $res->SelectedRowsCount() !== 0)
{
Option::set('calendar', 'eventWithLocationConvertedStatus', serialize($newStatus));
$result = [
'title' => Loc::getMessage("CALENDAR_UPDATE_EVENT_WITH_LOCATION"),
'count' => $newStatus['count'],
'steps' => $newStatus['steps'],
'lastEventId' => $newStatus['lastEventId'],
'newFinished' => $newStatus['newFinished']
];
return self::CONTINUE_EXECUTION;
}
}
Option::set('calendar', 'eventWithLocationConverted', 'Y');
Option::delete('calendar', ['name' => 'eventWithLocationConvertedStatus']);
RoomsManager::createInstance()->clearCache();
return self::FINISH_EXECUTION;
}