- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_restservice.php
- Класс: CCalendarRestService
- Вызов: CCalendarRestService::EventAdd
static function EventAdd($params = [], $nav = null, $server = null)
{
$userId = CCalendar::GetCurUserId();
$methodName = "calendar.event.add";
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']);
}
$necessaryParams = [
'from',
'to',
'name',
'ownerId',
'type'
];
if (isset($params['auto_detect_section']) && $params['auto_detect_section'] !== "Y")
{
$necessaryParams[] = 'section';
}
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',
]
));
}
$type = $params['type'];
$ownerId = (int)$params['ownerId'];
$sectionId = $params['section'];
$res = CCalendarSect::GetList([
'arFilter' => [
'ID' => $sectionId,
'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');
}
$arFields = [
"CAL_TYPE" => $type,
"OWNER_ID" => $ownerId,
"NAME" => trim($params['name']),
"DATE_FROM" => $params['from'],
"DATE_TO" => $params['to'],
"SECTIONS" => $sectionId
];
if (isset($params['skip_time']))
{
$arFields["SKIP_TIME"] = $params['skip_time'] === 'Y';
}
if (isset($params['skipTime']))
{
$arFields["SKIP_TIME"] = $params['skipTime'] === '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['description']))
{
$arFields["DESCRIPTION"] = trim($params['description']);
}
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;
if (isset($params['auto_detect_section']) && $params['auto_detect_section'] === 'Y')
{
$saveParams['autoDetectSection'] = true;
$saveParams['autoCreateSection'] = true;
}
$newId = CCalendar::SaveEvent($saveParams);
if (!$newId)
{
throw new RestException(Loc::getMessage("CAL_REST_EVENT_NEW_ERROR"));
}
return $newId;
}