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