• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/archive/recovery/restorer.php
  • Класс: BitrixSaleArchiveRecoveryRestorer
  • Вызов: Restorer::load
static function load($id)
{
	$id = (int)$id;
	if ($id <= 0)
	{
		return null;
	}

	$archivedOrder = InternalsOrderArchiveTable::getList(
		array(
			"select" => array("*", "ORDER_FULL" => "ORDER_PACKED.ORDER_DATA"),
			"filter" => array("=ID" => $id),
			"limit" => 1
		)
	);
	$orderFields = $archivedOrder->fetch();

	if (!$orderFields)
		return null;

	$restorer = new self($id);
	if (!$restorer->checkVersion($orderFields['VERSION']))
	{
		return null;
	}

	$restorer->version = (int)$orderFields['VERSION'];
	$restorer->dateArchived = $orderFields['DATE_ARCHIVED'];
	$builder = $restorer->loadBuilder();
	$builder->setPackedOrder($restorer->packField($orderFields['ORDER_FULL']));
	$orderFields['ID'] = $orderFields['ORDER_ID'];
	$archiveFields = ['ORDER_DATA', 'ORDER_FULL', 'ORDER_ID', 'VERSION', 'DATE_ARCHIVED'];
	foreach ($archiveFields as $fieldName)
	{
		unset($orderFields[$fieldName]);
	}

	$builder->setEntityFields('ORDER', $orderFields);

	$basketArchivedItems = InternalsBasketArchiveTable::getList(
		array(
			"select" => array("*", "BASKET_FULL" => "BASKET_PACKED.BASKET_DATA"),
			"filter" => array("ARCHIVE_ID" => $id)
		)
	);

	$basketItems = [];
	while ($item = $basketArchivedItems->fetch())
	{
		$builder->addPackedBasketItem(
			$item['ID'],
			$restorer->packField($item['BASKET_FULL'])
		);
		unset($item['BASKET_DATA'], $item['BASKET_FULL'], $item['ARCHIVE_ID']);
		$basketItems[$item['ID']] = $item;
	}
	$builder->setEntityFields('BASKET', $basketItems);
	$restorer->setBuilder($builder);
	return $restorer;
}