• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman.php
  • Класс: _CTimeManCalendarOld
  • Вызов: _CTimeManCalendarOld::Add
public function Add($arParams)
{
	global $USER;

	$res = null;

	$calendar_id = $arParams['calendar_id'];

	$calIblock = COption::GetOptionInt('intranet', 'iblock_calendar', null, $arParams['site_id']);
	$calIblockSection = CEventCalendar::GetSectionIDByOwnerId($USER->GetID(), 'USER', $calIblock);

	if (!$calendar_id)
	{
		$calendar_id = CUserOptions::GetOption('timeman', 'default_calendar', 0);
	}

	if ($calIblockSection > 0)
	{
		$arCalendars = CEventCalendar::GetCalendarList([$calIblock, $calIblockSection, 0, 'USER']);

		if (count($arCalendars) == 1)
		{
			if (
				$calendar_id
				&& $calendar_id != $arCalendars[0]['ID']
			)
			{
				CUserOptions::DeleteOption('timeman', 'default_calendar');
			}

			$calendar_id = $arCalendars[0]['ID'];
		}
		else
		{
			$bCalendarFound = false;

			$arCalsList = [];
			foreach ($arCalendars as $cal)
			{
				if ($cal['ID'] == $calendar_id)
				{
					$bCalendarFound = true;
					break;
				}

				$arCalsList[] = [
					'ID' => $cal['ID'],
					'NAME' => $cal['NAME'],
					'COLOR' => $cal['COLOR'],
				];
			}

			if (!$bCalendarFound)
			{
				$bReturnRes = true;
				$res = ['error_id' => 'CHOOSE_CALENDAR', 'error' => ['TEXT' => GetMessage('TM_CALENDAR_CHOOSE'), 'CALENDARS' => $arCalsList]];
			}
		}
	}

	if (!$bReturnRes)
	{
		if (!$calIblockSection)
		{
			$calIblockSection = 'none';
		}

		$today = CTimeMan::RemoveHoursTS(time());

		$data = [
			'DATE_FROM' => $today + CTimeMan::MakeShortTS($arParams['from']),
			'DATE_TO' => $today + CTimeMan::MakeShortTS($arParams['to']),
			'NAME' => $arParams['name'],
			'ABSENCE' => $arParams['absence'] == 'Y',
		];

		$obCalendar = new CEventCalendar();
		$obCalendar->Init([
			'ownerType' => 'USER',
			'ownerId' => $USER->GetID(),
			'bOwner' => true,
			'iblockId' => $calIblock,
			'bCache' => false,
		]);

		$arPermissions = $obCalendar->GetPermissions(
			[
				'setProperties' => true,
			]
		);

		$arRes = [
			'iblockId' => $obCalendar->iblockId,
			'ownerType' => $obCalendar->ownerType,
			'ownerId' => $obCalendar->ownerId,
			'bNew' => true,
			'fullUrl' => $obCalendar->fullUrl,
			'userId' => $obCalendar->userId,
			'pathToUserCalendar' => $obCalendar->pathToUserCalendar,
			'pathToGroupCalendar' => $obCalendar->pathToGroupCalendar,
			'userIblockId' => $obCalendar->userIblockId,
			'calendarId' => $calendar_id,
			'sectionId' => $calIblockSection,

			'dateFrom' => ConvertTimeStamp($data['DATE_FROM'], 'FULL'),
			'dateTo' => ConvertTimeStamp($data['DATE_TO'], 'FULL'),
			'name' => $data['NAME'],
			'desc' => '',
			'prop' => [
				'ACCESSIBILITY' => $data['ABSENCE'] ? 'absent' : 'busy',
			],
			'notDisplayCalendar' => true,
		];

		if ($GLOBALS['BX_TIMEMAN_RECENTLY_ADDED_EVENT_ID'] = $obCalendar->SaveEvent($arRes))
		{
			if ($_REQUEST['cal_set_default'] == 'Y')
			{
				CUserOptions::SetOption('timeman', 'default_calendar', $calendar_id);
			}
		}
	}

	return $res;
}