- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/orderhistory.php
- Класс: BitrixSaleOrderHistory
- Вызов: OrderHistory::collectEntityFields
static function collectEntityFields($entityName, $orderId, $id = null)
{
if (!$poolEntity = static::getPoolByEntity($entityName, $orderId))
{
return false;
}
if ($id !== null)
{
$found = false;
foreach ($poolEntity as $entityId => $fieldValue)
{
if ($entityId == $id)
{
$found = true;
break;
}
}
if (!$found)
return false;
}
foreach ($poolEntity as $entityId => $fieldValue)
{
if ($id !== null && $entityId != $id)
continue;
$entity = null;
$dataFields = array();
$oldFields = array();
$fields = array();
foreach ($fieldValue as $dataList)
{
foreach ($dataList as $key => $data)
{
if ($data['RECORD_TYPE'] == static::SALE_ORDER_HISTORY_RECORD_TYPE_ACTION
|| $data['RECORD_TYPE'] == static::SALE_ORDER_HISTORY_RECORD_TYPE_DEBUG)
{
static::addRecord(
$entityName,
$orderId,
$data['TYPE'],
$data['ID'],
$data['ENTITY'],
static::prepareDataForAdd($entityName, $data['TYPE'], $data['ENTITY'], $data['DATA'])
);
unset(static::$pool[$entityName][$orderId][$data['ID']][$data['TYPE']][$key]);
if (empty(static::$pool[$entityName][$orderId][$data['ID']][$data['TYPE']]))
unset(static::$pool[$entityName][$orderId][$data['ID']][$data['TYPE']]);
continue;
}
$value = $data['VALUE'];
$oldValue = $data['OLD_VALUE'];
if (static::isDate($value))
$value = static::convertDateField($value);
if (static::isDate($oldValue))
$oldValue = static::convertDateField($oldValue);
$oldFields[$data['NAME']] = $oldValue;
$fields[$data['NAME']] = $value;
if (!empty($data['DATA']) && is_array($data['DATA']))
{
$dataFields = array_merge($dataFields, $data['DATA']);
}
$dataType = static::FIELD_TYPE_TYPE;
if (isset($data['RECORD_TYPE']) && $data['RECORD_TYPE'] == static::SALE_ORDER_HISTORY_RECORD_TYPE_FIELD)
{
$dataType = static::FIELD_TYPE_NAME;
}
if (isset($data[$dataType]))
{
unset(static::$pool[$entityName][$orderId][$data['ID']][$data[$dataType]][$key]);
if (empty(static::$pool[$entityName][$orderId][$data['ID']][$data[$dataType]]))
unset(static::$pool[$entityName][$orderId][$data['ID']][$data[$dataType]]);
}
if ($entity === null && array_key_exists('ENTITY', $data))
{
$entity = $data['ENTITY'];
}
}
}
if ($entityName === "") // for order
{
if (isset($fields["ID"]))
unset($fields["ID"]);
}
foreach ($fields as $key => $val)
{
if (is_array($val))
{
continue;
}
if (!array_key_exists($key, $oldFields)
|| (
array_key_exists($key, $oldFields)
&& $val <> '' && $val != $oldFields[$key]
)
)
{
$arRecord = CSaleOrderChange::MakeRecordFromField($key, $dataFields, $entityName, $entity);
if ($arRecord)
{
$result = $arRecord["DATA"];
foreach ($arRecord["DATA"] as $fieldKey => $fieldValue)
{
if (!isset($result['OLD_'.$fieldKey]) && isset($dataFields['OLD_'.$fieldKey]))
{
$result['OLD_'.$fieldKey] = TruncateText($dataFields['OLD_'.$key], 128);
}
}
static::addRecord(
$entityName,
$orderId,
$arRecord["TYPE"],
$entityId,
$entity,
static::prepareDataForAdd($entityName, $arRecord["TYPE"], $entity, $result)
);
}
}
}
if (empty(static::$pool[$entityName][$orderId][$entityId]))
unset(static::$pool[$entityName][$orderId][$entityId]);
}
if (empty(static::$pool[$entityName][$orderId]))
unset(static::$pool[$entityName][$orderId]);
if (empty(static::$pool[$entityName]))
unset(static::$pool[$entityName]);
return true;
}