- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/controller/calendarajax.php
- Класс: BitrixCalendarControllerCalendarAjax
- Вызов: CalendarAjax::editCalendarSectionAction
public function editCalendarSectionAction()
{
if (Loader::includeModule('intranet') && !BitrixIntranetUtil::isIntranetUser())
{
return [];
}
$request = $this->getRequest();
$response = [];
$id = $request->getPost('id');
$isNew = (!isset($id) || !$id);
$type = $request->getPost('type');
$ownerId = (int)$request->getPost('ownerId');
$name = trim($request->getPost('name'));
$color = $request->getPost('color');
$customization = $request->getPost('customization') === 'Y';
$userId = CCalendar::GetUserId();
$isPersonal = $type === 'user' && $ownerId === $userId;
if ($id === 'tasks')
{
$id .= $ownerId;
}
$fields = [
'ID' => $id,
'NAME' => $name,
'COLOR' => $color,
'CAL_TYPE' => $type,
'OWNER_ID' => $ownerId,
'ACCESS' => $request->getPost('access'),
'EXTERNAL_TYPE' => $request->getPost('external_type') ?? 'local',
];
if ($customization && !$isNew)
{
UserSettings::setSectionCustomization($userId, [$id => ['name' => $name, 'color' => $color]]);
}
else
{
if (Loader::includeModule('extranet') && !CExtranet::IsIntranetUser(SITE_ID, $userId))
{
if (
$type === 'group'
&& Loader::includeModule('socialnetwork')
)
{
$r = BitrixSocialnetworkUserToGroupTable::getList([
'filter' => [
'@ROLE' => BitrixSocialnetworkUserToGroupTable::getRolesMember(),
'=GROUP_ID' => $ownerId,
'=USER_ID' => $userId,
],
]);
if (!$group = $r->fetch())
{
$this->addError(
new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'access_denied_extranet_01')
);
}
}
else
{
$this->addError(
new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'access_denied_extranet_02')
);
}
}
$accessController = new SectionAccessController($userId);
if ($isNew) // For new sections
{
$sectionModel =
SectionModel::createNew()
->setType($type ?? '')
->setOwnerId($userId ?? 0);
if (!$accessController->check(ActionDictionary::ACTION_SECTION_ADD, $sectionModel))
{
$this->addError(
new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'access_denied')
);
}
if ($type === 'group' && Loader::includeModule('socialnetwork'))
{
$result = BitrixSocialnetworkUserToGroupTable::getList([
'filter' => [
'@ROLE' => BitrixSocialnetworkUserToGroupTable::getRolesMember(),
'=GROUP_ID' => $ownerId,
'=USER_ID' => $userId,
],
]);
$group = $result->fetch();
if (!$group)
{
$this->addError(
new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'access_denied_user')
);
}
}
$fields['IS_EXCHANGE'] = $request->getPost('is_exchange') === 'Y';
}
else
{
$section = CCalendarSect::GetById($id);
$sectionModel = SectionModel::createFromArray($section);
if (
!$section
|| !$accessController->check(ActionDictionary::ACTION_SECTION_EDIT, $sectionModel, [])
)
{
$this->addError(
new Error(Loc::getMessage('EC_ACCESS_DENIED'), 'access_denied_04')
);
}
$fields['CAL_TYPE'] = $section['CAL_TYPE'];
$fields['OWNER_ID'] = $section['OWNER_ID'];
}
if (empty($this->getErrors()))
{
$id = CCalendar::SaveSection(['arFields' => $fields]);
if ((int)$id > 0)
{
CCalendarSect::SetClearOperationCache(true);
$response['section'] = CCalendarSect::GetById($id, true, true);
if (!$response['section'])
{
$this->addError(
new Error(Loc::getMessage('EC_CALENDAR_SAVE_ERROR'), 'saving_error_05')
);
}
$response['accessNames'] = CCalendar::GetAccessNames();
$response['sectionList'] = CCalendarSect::prepareSectionListResponse($type, $ownerId);
}
else
{
$this->addError(
new Error(Loc::getMessage('EC_CALENDAR_SAVE_ERROR'), 'saving_error_06')
);
}
}
}
return $response;
}