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;
}