• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/site/update/chatsalesorder.php
  • Класс: BitrixLandingSiteUpdateChatSalesOrder
  • Вызов: ChatSalesOrder::prepareLandingHooks
static function prepareLandingHooks($currentHooks, $newHooks, $pageId): void
{
	$isUpdateBgHooks = true;
	foreach ($currentHooks as $currentHookData)
	{
		if (
			$currentHookData['HOOK'] === 'BACKGROUND'
			&& $currentHookData['CODE'] === 'USE'
			&& $currentHookData['VALUE'] === 'Y'
		)
		{
			$isUpdateBgHooks = false;
		}
	}

	$updateHooksData = [];
	$createHooksData = [];
	foreach ($newHooks as $hookData)
	{
		if ($hookData['HOOK'] === 'BACKGROUND' && $isUpdateBgHooks === false)
		{
			continue;
		}

		$isExistPublicHook = false;
		$isExistUnPublicHook = false;
		foreach ($currentHooks as $currentHookData)
		{
			if (
				$hookData['HOOK'] === $currentHookData['HOOK']
				&& $hookData['CODE'] === $currentHookData['CODE']
			)
			{
				if ($hookData['VALUE'] !== $currentHookData['VALUE'])
				{
					$updateHooksData[] = [
						'ID' => $currentHookData['ID'],
						'VALUE' => $hookData['VALUE'],
					];
				}
				$isPublicHook = $currentHookData['PUBLIC'];
				if ($isPublicHook === 'Y')
				{
					$isExistPublicHook = true;
				}
				if ($isPublicHook === 'N')
				{
					$isExistUnPublicHook = true;
				}
			}
		}
		$isNeedCreateHook = false;
		if (!$isExistPublicHook)
		{
			$isNeedCreateHook = true;
			$isPublic = 'Y';
		}
		if (!$isExistUnPublicHook)
		{
			$isNeedCreateHook = true;
			$isPublic = 'N';
		}
		if ($isNeedCreateHook === true && isset($isPublic))
		{
			$createHooksData[] = [
				'ENTITY_ID' => $pageId,
				'ENTITY_TYPE' => 'L',
				'HOOK' => $hookData['HOOK'],
				'CODE' => $hookData['CODE'],
				'VALUE' => $hookData['VALUE'],
				'PUBLIC' => $isPublic,
			];
		}
	}

	//update
	foreach ($updateHooksData as $updateHookData)
	{
		InternalsHookDataTable::update(
			$updateHookData['ID'],
			['VALUE' => $updateHookData['VALUE']]
		);
	}
	//create
	foreach ($createHooksData as $createHookData)
	{
		InternalsHookDataTable::add([
			'ENTITY_ID' => $createHookData['ENTITY_ID'],
			'ENTITY_TYPE' => $createHookData['ENTITY_TYPE'],
			'HOOK' => $createHookData['HOOK'],
			'CODE' => $createHookData['CODE'],
			'VALUE' => $createHookData['VALUE'],
			'PUBLIC' => $createHookData['PUBLIC'],
		]);
	}
}