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