123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?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);
- }
- }
|