mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
160 lines
4.6 KiB
PHP
160 lines
4.6 KiB
PHP
<?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);
|
|
}
|
|
|
|
// md5() here is not for cryptographic use.
|
|
// phpcs:ignore Magento2.Security.InsecureFunction
|
|
$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()];
|
|
}
|
|
}
|