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