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