123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Theme\Model;
- use Magento\Framework\App\DesignInterface;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\Model\AbstractModel;
- use Magento\Framework\Model\ResourceModel\AbstractResource;
- use Magento\Framework\DataObject\IdentityInterface;
- use Magento\Framework\Serialize\SerializerInterface;
- /**
- * Design settings change model
- *
- * @method int getStoreId()
- * @method \Magento\Theme\Model\Design setStoreId(int $value)
- * @method string getDesign()
- * @method \Magento\Theme\Model\Design setDesign(string $value)
- * @method string getDateFrom()
- * @method \Magento\Theme\Model\Design setDateFrom(string $value)
- * @method string getDateTo()
- * @method \Magento\Theme\Model\Design setDateTo(string $value)
- */
- class Design extends AbstractModel implements IdentityInterface, DesignInterface
- {
- /**
- * Cache tag
- */
- const CACHE_TAG = 'CORE_DESIGN';
- /**
- * Prefix of model events names
- *
- * @var string
- */
- protected $_eventPrefix = 'core_design';
- /**
- * Model cache tag for clear cache in after save and after delete
- *
- * When you use true - all cache will be clean
- *
- * @var string|bool
- */
- protected $_cacheTag = self::CACHE_TAG;
- /**
- * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
- */
- protected $_localeDate;
- /**
- * @var \Magento\Framework\Stdlib\DateTime
- */
- protected $_dateTime;
- /**
- * @var SerializerInterface
- */
- private $serializer;
- /**
- * @param \Magento\Framework\Model\Context $context
- * @param \Magento\Framework\Registry $registry
- * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
- * @param \Magento\Framework\Stdlib\DateTime $dateTime
- * @param AbstractResource $resource
- * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
- * @param array $data
- * @param SerializerInterface $serializer
- */
- public function __construct(
- \Magento\Framework\Model\Context $context,
- \Magento\Framework\Registry $registry,
- \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
- \Magento\Framework\Stdlib\DateTime $dateTime,
- AbstractResource $resource = null,
- \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
- array $data = [],
- SerializerInterface $serializer = null
- ) {
- $this->_localeDate = $localeDate;
- $this->_dateTime = $dateTime;
- $this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
- parent::__construct($context, $registry, $resource, $resourceCollection, $data);
- }
- /**
- * Initialize resource model
- *
- * @return void
- */
- protected function _construct()
- {
- $this->_init(\Magento\Theme\Model\ResourceModel\Design::class);
- }
- /**
- * Load custom design settings for specified store and date
- *
- * @param string $storeId
- * @param string|null $date
- * @return $this
- */
- public function loadChange($storeId, $date = null)
- {
- if ($date === null) {
- $date = $this->_dateTime->formatDate($this->_localeDate->scopeTimeStamp($storeId), false);
- }
- $changeCacheId = 'design_change_' . md5($storeId . $date);
- $result = $this->_cacheManager->load($changeCacheId);
- if ($result === false) {
- $result = $this->getResource()->loadChange($storeId, $date);
- if (!$result) {
- $result = [];
- }
- $this->_cacheManager->save($this->serializer->serialize($result), $changeCacheId, [self::CACHE_TAG], 86400);
- } else {
- $result = $this->serializer->unserialize($result);
- }
- if ($result) {
- $this->setData($result);
- }
- return $this;
- }
- /**
- * Apply design change from self data into specified design package instance
- *
- * @param \Magento\Framework\View\DesignInterface $packageInto
- * @return $this
- */
- public function changeDesign(\Magento\Framework\View\DesignInterface $packageInto)
- {
- $design = $this->getDesign();
- if ($design) {
- $packageInto->setDesignTheme($design);
- }
- return $this;
- }
- /**
- * Get identities
- *
- * @return array
- */
- public function getIdentities()
- {
- return [self::CACHE_TAG . '_' . $this->getId()];
- }
- }
|