• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/hook.php
  • Класс: BitrixLandingHook
  • Вызов: Hook::saveData
static function saveData($id, $type, array $data)
{
	$data = self::prepareData($data);
	$hooks = self::getList($id, $type, $data);
	$dataSave = self::getData($id, $type, true);

	// get hooks with new new data (not saved yet)
	foreach ($hooks as $hook)
	{
		$hookLocked = $hook->isLocked();
		$codeHook = $hook->getCode();
		// modify $dataSave ...
		foreach ($hook->getFields() as $field)
		{
			$codeVal = $field->getCode();
			if ($hookLocked && !$field->isEmptyValue())
			{
				continue;
			}
			if (!isset($data[$codeHook][$codeVal]))
			{
				continue;
			}
			// ... for changed
			if (isset($dataSave[$codeHook][$codeVal]))
			{
				$dataSave[$codeHook][$codeVal]['CHANGED'] = true;
				$dataSave[$codeHook][$codeVal]['VALUE'] = $field->getValue();
			}
			// ... and new fields
			else
			{
				if (!isset($dataSave[$codeHook]))
				{
					$dataSave[$codeHook] = array();
				}
				$dataSave[$codeHook][$codeVal] = array(
					'HOOK' => $codeHook,
					'CODE' => $codeVal,
					'VALUE' => $field->getValue()
				);
			}
			if (is_array($dataSave[$codeHook][$codeVal]['VALUE']))
			{
				$dataSave[$codeHook][$codeVal]['VALUE'] = 'serialized#' . serialize(
					$dataSave[$codeHook][$codeVal]['VALUE']
				);
			}
		}
	}

	// now save the data
	foreach ($dataSave as $codeHook => $dataHook)
	{
		foreach ($dataHook as $code => $row)
		{
			if (
				is_array($row['VALUE']) && empty($row['VALUE'])
				||
				!is_array($row['VALUE']) && trim($row['VALUE']) == ''
			)
			{
				if (isset($row['ID']))
				{
					HookData::delete($row['ID']);
				}
			}
			else
			{
				if (!isset($row['ID']))
				{
					$row['ENTITY_ID'] = $id;
					$row['ENTITY_TYPE'] = $type;
					HookData::add($row);
				}
				elseif (isset($row['CHANGED']) && $row['CHANGED'])
				{
					$updId = $row['ID'];
					unset($row['ID'], $row['CHANGED']);
					HookData::update($updId, $row);
				}
			}
		}
	}
}