- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_sect.php
- Класс: CCalendarSect
- Вызов: CCalendarSect::Edit
static function Edit($params)
{
global $DB;
$sectionFields = $params['arFields'];
$userId = (isset($params['userId']) ? (int)$params['userId'] : CCalendar::GetCurUserId());
$isNewSection = !isset($sectionFields['ID']) || $sectionFields['ID'] <= 0;
if (isset($sectionFields['COLOR']) || $isNewSection)
{
$sectionFields['COLOR'] = CCalendar::Color($sectionFields['COLOR'] ?? null);
}
$sectionFields['TIMESTAMP_X'] = CCalendar::Date(time());
if (isset($sectionFields['EXPORT']) && is_array($sectionFields['EXPORT']))
{
$sectionFields['EXPORT'] = [
'ALLOW' => (bool)$sectionFields['EXPORT']['ALLOW'],
'SET' => (in_array($sectionFields['EXPORT']['set'] ?? null, array('all', '3_9', '6_12')))
? $sectionFields['EXPORT']['set']
: 'all',
];
$sectionFields['EXPORT'] = serialize($sectionFields['EXPORT']);
}
if (!empty($sectionFields['NAME']))
{
$sectionFields['NAME'] = Emoji::encode($sectionFields['NAME']);
}
if ($isNewSection) // Add
{
if (!isset($sectionFields['DATE_CREATE']))
{
$sectionFields['DATE_CREATE'] = CCalendar::Date(time());
}
if ((!isset($sectionFields['CREATED_BY']) || !$sectionFields['CREATED_BY']))
{
$sectionFields['CREATED_BY'] = CCalendar::GetCurUserId();
}
if (!isset($sectionFields['EXTERNAL_TYPE']))
{
$sectionFields['EXTERNAL_TYPE'] = 'local';
}
unset($sectionFields['ID']);
$id = $DB->Add("b_calendar_section", $sectionFields, ['DESCRIPTION']);
}
else // Update
{
$id = (int)$sectionFields['ID'];
$originalSection = SectionTable::getById($id);
if (
$originalSection !== false
&& is_array($originalSection)
&& $originalSection['EXTERNAL_TYPE'] !== self::EXTERNAL_TYPE_LOCAL
)
{
$sectionFields['EXTERNAL_TYPE'] = $originalSection['EXTERNAL_TYPE'];
}
unset($sectionFields['ID']);
$strUpdate = $DB->PrepareUpdate("b_calendar_section", $sectionFields);
$strSql = "UPDATE b_calendar_section SET ". $strUpdate . " WHERE ID = " . $id;
$DB->QueryBind($strSql, array('DESCRIPTION' => $sectionFields['DESCRIPTION'] ?? null));
}
//SaveAccess
if ($id > 0 && isset($sectionFields['ACCESS']) && is_array($sectionFields['ACCESS']))
{
$sectionModel =
SectionModel::createFromId($id)
->setType($sectionFields['CAL_TYPE'])
->setOwnerId((int)($sectionFields['OWNER_ID'] ?? null))
;
if ((new SectionAccessController($userId))->check(ActionDictionary::ACTION_SECTION_ACCESS, $sectionModel))
{
if (empty($sectionFields['ACCESS']))
{
self::SavePermissions(
$id,
self::GetDefaultAccess($sectionFields['CAL_TYPE'], $sectionFields['OWNER_ID'] ?? null)
);
}
else
{
self::SavePermissions($id, $sectionFields['ACCESS']);
}
}
elseif($isNewSection)
{
self::SavePermissions(
$id,
self::GetDefaultAccess($sectionFields['CAL_TYPE'], $sectionFields['OWNER_ID'])
);
}
}
if ($isNewSection && $id > 0 && !isset($sectionFields['ACCESS']))
{
self::SavePermissions(
$id,
self::GetDefaultAccess($sectionFields['CAL_TYPE'], $sectionFields['OWNER_ID'])
);
}
if ($isNewSection && $id && !isset($sectionFields['XML_ID']))
{
$xmlId = md5($sectionFields['CAL_TYPE'] . '_' . $id . '_' . Random::getString(8));
SectionTable::update($id, [
'XML_ID' => $xmlId
]);
}
CCalendar::ClearCache(['section_list', 'event_list']);
if ($id > 0 && isset(self::$Permissions[$id]))
{
unset(self::$Permissions[$id]);
self::$arOp = [];
}
if ($isNewSection)
{
self::onCreateSync($id, [
'params' => $params,
'sectionFields' => $sectionFields,
'userId' => $userId,
]);
}
else
{
self::onUpdateSync($id, [
'params' => $params,
'sectionFields' => $sectionFields,
'userId' => $userId,
]);
}
if ($isNewSection)
{
foreach(EventManager::getInstance()->findEventHandlers("calendar", "OnAfterCalendarSectionAdd") as $event)
{
ExecuteModuleEventEx($event, [$id, $sectionFields]);
}
}
else
{
foreach(EventManager::getInstance()->findEventHandlers("calendar", "OnAfterCalendarSectionUpdate") as $event)
{
ExecuteModuleEventEx($event, array($id, $sectionFields));
}
}
$pullUserId = (int) ($sectionFields['CREATED_BY'] ?? $userId);
Util::addPullEvent(
'edit_section',
$pullUserId,
[
'fields' => $sectionFields,
'newSection' => $isNewSection,
]
);
return $id;
}