mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 17:27:36 +00:00
131 lines
3.1 KiB
PHP
131 lines
3.1 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Sales\Model;
|
|
|
|
use Magento\Framework\Model\AbstractModel as FrameworkAbstractModel;
|
|
|
|
/**
|
|
* Class EntityStorage store only one type of entity per instance
|
|
*/
|
|
class EntityStorage
|
|
{
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $registry = [];
|
|
|
|
/**
|
|
* Using for mapping hashes of identifying fields to entity ids
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $storageMapper = [];
|
|
|
|
/**
|
|
* Using for array concatenation
|
|
*/
|
|
const GLUE = '';
|
|
|
|
/**
|
|
* Adds entity using identifying fields mapping, entity should have an id
|
|
*
|
|
* @param FrameworkAbstractModel $object
|
|
* @param array $identifyingFields
|
|
* @param string $storageName
|
|
* @return void
|
|
* @throws \Magento\Framework\Exception\InputException
|
|
*/
|
|
public function addByIdentifyingFields(FrameworkAbstractModel $object, array $identifyingFields, $storageName)
|
|
{
|
|
if (empty($identifyingFields)) {
|
|
throw new \Magento\Framework\Exception\InputException(__('Identifying Fields required'));
|
|
}
|
|
if (!$object->getId()) {
|
|
throw new \Magento\Framework\Exception\InputException(__('An ID is needed. Set the ID and try again.'));
|
|
}
|
|
$this->storageMapper[$storageName][$this->getHash($identifyingFields)] = $object->getId();
|
|
$this->registry[$object->getId()] = $object;
|
|
}
|
|
|
|
/**
|
|
* Add entity to registry if entity in it
|
|
*
|
|
* @param \Magento\Framework\Model\AbstractModel $entity
|
|
* @return void
|
|
*/
|
|
public function add($entity)
|
|
{
|
|
$this->registry[$entity->getId()] = $entity;
|
|
}
|
|
|
|
/**
|
|
* Retrieve entity from registry if entity in it
|
|
*
|
|
* @param int $id
|
|
* @return bool|FrameworkAbstractModel
|
|
*/
|
|
public function get($id)
|
|
{
|
|
if ($this->has($id)) {
|
|
return $this->registry[$id];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Gets entity by identifying fields
|
|
*
|
|
* @param array $identifyingFields
|
|
* @param string $storageName
|
|
* @return bool|FrameworkAbstractModel
|
|
*/
|
|
public function getByIdentifyingFields(array $identifyingFields, $storageName)
|
|
{
|
|
$hash = $this->getHash($identifyingFields);
|
|
if (isset($this->storageMapper[$storageName][$hash])) {
|
|
return $this->get($this->storageMapper[$storageName][$hash]);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Remove entity from storage
|
|
*
|
|
* @param int $id
|
|
* @return void
|
|
*/
|
|
public function remove($id)
|
|
{
|
|
if ($this->has($id)) {
|
|
unset($this->registry[$id]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if entity is in storage
|
|
*
|
|
* @param int $id
|
|
* @return bool
|
|
*/
|
|
public function has($id)
|
|
{
|
|
return isset($this->registry[$id]);
|
|
}
|
|
|
|
/**
|
|
* Gets hash using concatenation of identifying fields
|
|
*
|
|
* @param array $fields
|
|
* @return string
|
|
*/
|
|
protected function getHash(array $fields)
|
|
{
|
|
$stringForKey = implode(self::GLUE, $fields);
|
|
return sha1($stringForKey);
|
|
}
|
|
}
|