• Модуль: 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;
}