- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_restservice.php
- Класс: CCalendarRestService
- Вызов: CCalendarRestService::EventUpdate
static function EventUpdate($params = [], $nav = null, $server = null)
{
$userId = CCalendar::GetCurUserId();
$methodName = "calendar.event.update";
$necessaryParams = [
'id',
'ownerId',
'type'
];
foreach ($necessaryParams as $param)
{
if (empty($params[$param]))
{
if ($param === 'ownerId' && isset($params[$param]))
{
continue;
}
throw new RestException(Loc::getMessage('CAL_REST_PARAM_EXCEPTION', [
'#PARAM_NAME#' => $param,
'#REST_METHOD#' => $methodName
]));
}
}
if (!is_string($params['name']))
{
throw new RestException(Loc::getMessage('CAL_REST_PARAM_ERROR',
[
'#PARAM_NAME#' => 'name',
]
));
}
if (isset($params['description']) && !is_string($params['description']))
{
throw new RestException(Loc::getMessage('CAL_REST_PARAM_ERROR',
[
'#PARAM_NAME#' => 'description',
]
));
}
$id = (int)$params['id'];
$type = $params['type'];
$ownerId = (int)$params['ownerId'];
if (isset($params['from']))
{
$params['from'] = CRestUtil::unConvertDateTime($params['from'], true);
}
if (isset($params['to']))
{
$params['to'] = CRestUtil::unConvertDateTime($params['to'], true);
}
if (isset($params['from_ts']) && !isset($params['from']))
{
$params['from'] = CCalendar::Date($params['from_ts']);
}
if (isset($params['to_ts']) && !isset($params['to']))
{
$params['to'] = CCalendar::Date($params['to_ts']);
}
$arFields = [
"ID" => $id,
"DATE_FROM" => $params['from'],
"DATE_TO" => $params['to']
];
if (isset($params['skipTime']))
{
$arFields["SKIP_TIME"] = $params['skipTime'] === 'Y';
}
if (isset($params['skip_time']))
{
$arFields["SKIP_TIME"] = $params['skip_time'] === 'Y';
}
if (!$arFields["SKIP_TIME"] && isset($params['timezone_from']))
{
$arFields['TZ_FROM'] = $params['timezone_from'];
$arFields['TZ_TO'] = $params['timezone_to'] ?? $params['timezone_from'];
}
if (isset($params['name']))
{
$arFields["NAME"] = trim($params['name']);
if (empty($arFields["NAME"]))
{
$arFields["NAME"] = Loc::getMessage('EC_T_NEW_EVENT');
}
}
if (isset($params['description']))
{
$arFields["DESCRIPTION"] = trim($params['description']);
}
if (isset($params['section']))
{
$sectionId = $params['section'];
$arFields["SECTIONS"] = [$sectionId];
$res = CCalendarSect::GetList([
'arFilter' => [
'ID' => $params['section'],
'CAL_TYPE' => $type,
'OWNER_ID' => $ownerId,
]
]);
if ($res && is_array($res) && isset($res[0]))
{
if (!$res[0]['PERM']['edit'])
{
throw new RestException(Loc::getMessage('CAL_REST_ACCESS_DENIED'));
}
}
else
{
throw new RestException('CAL_REST_SECTION_ERROR');
}
}
if (isset($params['color']))
{
$color = CCalendar::Color($params['color']);
if ($color)
{
$arFields["COLOR"] = $color;
}
}
if (isset($params['text_color']))
{
$color = CCalendar::Color($params['text_color']);
if ($color)
{
$arFields["TEXT_COLOR"] = $color;
}
}
if (isset($params['accessibility']))
{
$arFields["ACCESSIBILITY"] = $params['accessibility'];
}
if (isset($params['importance']))
{
$arFields["IMPORTANCE"] = $params['importance'];
}
if (isset($params['private_event']))
{
$arFields["PRIVATE_EVENT"] = $params['private_event'] === "Y";
}
if (isset($params['rrule']))
{
$arFields["RRULE"] = $params['rrule'];
}
if (isset($params['is_meeting']))
{
$arFields["IS_MEETING"] = $params['is_meeting'] === "Y";
}
if (isset($params['location']))
{
$arFields["LOCATION"] = $params['location'];
}
if (isset($params['remind']))
{
$arFields["REMIND"] = $params['remind'];
}
$saveParams = [];
if ($arFields['IS_MEETING'])
{
$arFields['ATTENDEES'] = (isset($params['attendees']) && is_array($params['attendees'])) ? $params['attendees'] : false;
$arFields['ATTENDEES_CODES'] = [];
if (is_array($arFields['ATTENDEES']))
{
foreach($arFields['ATTENDEES'] as $attendeeId)
{
$code = 'U'. (int)$attendeeId;
if (in_array($code, $arFields['ATTENDEES_CODES'], true))
{
$arFields['ATTENDEES_CODES'][] = $code;
}
}
}
$meeting = $params['meeting'] ?? [];
$arFields['MEETING_HOST'] = isset($params['host']) ? (int)$params['host'] : $userId;
$arFields['MEETING'] = [
'HOST_NAME' => CCalendar::GetUserName($arFields['MEETING_HOST']),
'TEXT' => $meeting['text'],
'OPEN' => (bool)$meeting['open'],
'NOTIFY' => (bool)$meeting['notify'],
'REINVITE' => (bool)$meeting['reinvite']
];
$saveParams['userId'] = $arFields['MEETING_HOST'];
}
$saveParams['arFields'] = $arFields;
$newId = CCalendar::SaveEvent($saveParams);
if (!$newId)
{
throw new RestException(Loc::getMessage("CAL_REST_EVENT_UPDATE_ERROR"));
}
return $newId;
}