- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/controller/calendarentryajax.php
- Класс: BitrixCalendarControllerCalendarEntryAjax
- Вызов: CalendarEntryAjax::moveEventAction
public function moveEventAction()
{
$request = $this->getRequest();
$userId = CCalendar::getCurUserId();
$id = (int)$request->getPost('id');
$sectionId = (int)$request->getPost('section');
if ($id)
{
$eventModel = CCalendarEvent::getEventModelForPermissionCheck($id, [], $userId);
}
else
{
$section = CCalendarSect::GetById($sectionId);
$eventModel =
EventModel::createNew()
->setOwnerId((int)($section['OWNER_ID'] ?? 0))
->setSectionId($sectionId ?? 0)
->setSectionType($section['TYPE'] ?? '')
;
}
$accessController = new EventAccessController($userId);
if (
(!$id && !$accessController->check(ActionDictionary::ACTION_EVENT_ADD, $eventModel))
|| ($id && !$accessController->check(ActionDictionary::ACTION_EVENT_EDIT, $eventModel))
)
{
$this->addError(new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'move_entry_access_denied'));
}
$sectionList = InternalsSectionTable::getList([
'filter' => [
'=ACTIVE' => 'Y',
'=ID' => $sectionId
],
'select' => [
'ID',
'CAL_TYPE',
'OWNER_ID',
'NAME'
]
]
);
if (!($section = $sectionList->fetch()))
{
$this->addError(new Error(Loc::getMessage('EC_SECTION_NOT_FOUND'), 'edit_entry_section_not_found'));
}
if (
$section['CAL_TYPE'] !== 'group'
&& Loader::includeModule('intranet') && !IntranetUtil::isIntranetUser($userId)
)
{
$this->addError(new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'edit_entry_extranet_access_denied'));
}
if (empty($this->getErrors()))
{
$entry = InternalsEventTable::getList(
[
"filter" => [
"=ID" => $id,
"=DELETED" => 'N',
"=SECTION_ID" => $sectionId
],
"select" => ["ID", "CAL_TYPE"]
]
)->fetch();
if (Loader::includeModule('intranet'))
{
if ($entry['CAL_TYPE'] !== 'group' && !IntranetUtil::isIntranetUser($userId))
{
$this->addError(new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'edit_entry_extranet_access_denied'));
}
}
}
$requestUid = (int)$request->getPost('requestUid');
$reload = $request->getPost('recursive') === 'Y';
$sendInvitesToDeclined = $request->getPost('sendInvitesAgain') === 'Y';
$skipTime = $request->getPost('skip_time') === 'Y';
$dateFrom = $request->getPost('date_from');
$dateTo = $request->getPost('date_to');
$timezone = $request->getPost('timezone');
$attendees = $request->getPost('attendees');
$location = trim((string) $request->getPost('location'));
$isPlannerFeatureEnabled = Bitrix24Manager::isPlannerFeatureEnabled();
$locationBusyWarning = false;
$busyWarning = false;
if (empty($this->getErrors()))
{
$arFields = [
"ID" => $id,
"DATE_FROM" => CCalendar::Date(CCalendar::Timestamp($dateFrom), !$skipTime),
"SKIP_TIME" => $skipTime
];
if (!empty($dateTo))
{
$arFields["DATE_TO"] = CCalendar::Date(CCalendar::Timestamp($dateTo), !$skipTime);
}
if (!$skipTime && $request->getPost('set_timezone') === 'Y' && $timezone)
{
$arFields["TZ_FROM"] = $timezone;
$arFields["TZ_TO"] = $timezone;
}
if (
$isPlannerFeatureEnabled
&& !empty($location)
&& !RoomsAccessibilityManager::checkAccessibility($location, ['fields' => $arFields])
)
{
$locationBusyWarning = true;
$reload = true;
}
if (
$isPlannerFeatureEnabled
&& is_array($attendees)
&& $request->getPost('is_meeting') === 'Y'
)
{
$timezoneName = CCalendar::GetUserTimezoneName(CCalendar::GetUserId());
$timezoneOffset = Util::getTimezoneOffsetUTC($timezoneName);
$timestampFrom = CCalendar::TimestampUTC($arFields["DATE_FROM"]) - $timezoneOffset;
$timestampTo = CCalendar::TimestampUTC($arFields["DATE_TO"]) - $timezoneOffset;
if (!empty($this->getBusyUsersIds($attendees, $id, $timestampFrom, $timestampTo)))
{
$busyWarning = true;
$reload = true;
}
}
if (!$busyWarning && !$locationBusyWarning)
{
if ($request->getPost('recursive') === 'Y')
{
CCalendar::SaveEventEx(
[
'arFields' => $arFields,
'silentErrorMode' => false,
'recursionEditMode' => 'this',
'currentEventDateFrom' => CCalendar::Date(
CCalendar::Timestamp($request->getPost('current_date_from')),
false
),
'sendInvitesToDeclined' => $sendInvitesToDeclined,
'requestUid' => $requestUid
]
);
}
else
{
$id = CCalendar::SaveEvent(
[
'arFields' => $arFields,
'silentErrorMode' => false,
'sendInvitesToDeclined' => $sendInvitesToDeclined,
'requestUid' => $requestUid
]
);
}
}
}
return [
'id' => $id,
'reload' => $reload,
'busy_warning' => $busyWarning,
'location_busy_warning' => $locationBusyWarning
];
}