Design.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Theme\Model;
  7. use Magento\Framework\App\DesignInterface;
  8. use Magento\Framework\App\ObjectManager;
  9. use Magento\Framework\Model\AbstractModel;
  10. use Magento\Framework\Model\ResourceModel\AbstractResource;
  11. use Magento\Framework\DataObject\IdentityInterface;
  12. use Magento\Framework\Serialize\SerializerInterface;
  13. /**
  14. * Design settings change model
  15. *
  16. * @method int getStoreId()
  17. * @method \Magento\Theme\Model\Design setStoreId(int $value)
  18. * @method string getDesign()
  19. * @method \Magento\Theme\Model\Design setDesign(string $value)
  20. * @method string getDateFrom()
  21. * @method \Magento\Theme\Model\Design setDateFrom(string $value)
  22. * @method string getDateTo()
  23. * @method \Magento\Theme\Model\Design setDateTo(string $value)
  24. */
  25. class Design extends AbstractModel implements IdentityInterface, DesignInterface
  26. {
  27. /**
  28. * Cache tag
  29. */
  30. const CACHE_TAG = 'CORE_DESIGN';
  31. /**
  32. * Prefix of model events names
  33. *
  34. * @var string
  35. */
  36. protected $_eventPrefix = 'core_design';
  37. /**
  38. * Model cache tag for clear cache in after save and after delete
  39. *
  40. * When you use true - all cache will be clean
  41. *
  42. * @var string|bool
  43. */
  44. protected $_cacheTag = self::CACHE_TAG;
  45. /**
  46. * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
  47. */
  48. protected $_localeDate;
  49. /**
  50. * @var \Magento\Framework\Stdlib\DateTime
  51. */
  52. protected $_dateTime;
  53. /**
  54. * @var SerializerInterface
  55. */
  56. private $serializer;
  57. /**
  58. * @param \Magento\Framework\Model\Context $context
  59. * @param \Magento\Framework\Registry $registry
  60. * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  61. * @param \Magento\Framework\Stdlib\DateTime $dateTime
  62. * @param AbstractResource $resource
  63. * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
  64. * @param array $data
  65. * @param SerializerInterface $serializer
  66. */
  67. public function __construct(
  68. \Magento\Framework\Model\Context $context,
  69. \Magento\Framework\Registry $registry,
  70. \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
  71. \Magento\Framework\Stdlib\DateTime $dateTime,
  72. AbstractResource $resource = null,
  73. \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
  74. array $data = [],
  75. SerializerInterface $serializer = null
  76. ) {
  77. $this->_localeDate = $localeDate;
  78. $this->_dateTime = $dateTime;
  79. $this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
  80. parent::__construct($context, $registry, $resource, $resourceCollection, $data);
  81. }
  82. /**
  83. * Initialize resource model
  84. *
  85. * @return void
  86. */
  87. protected function _construct()
  88. {
  89. $this->_init(\Magento\Theme\Model\ResourceModel\Design::class);
  90. }
  91. /**
  92. * Load custom design settings for specified store and date
  93. *
  94. * @param string $storeId
  95. * @param string|null $date
  96. * @return $this
  97. */
  98. public function loadChange($storeId, $date = null)
  99. {
  100. if ($date === null) {
  101. $date = $this->_dateTime->formatDate($this->_localeDate->scopeTimeStamp($storeId), false);
  102. }
  103. $changeCacheId = 'design_change_' . md5($storeId . $date);
  104. $result = $this->_cacheManager->load($changeCacheId);
  105. if ($result === false) {
  106. $result = $this->getResource()->loadChange($storeId, $date);
  107. if (!$result) {
  108. $result = [];
  109. }
  110. $this->_cacheManager->save($this->serializer->serialize($result), $changeCacheId, [self::CACHE_TAG], 86400);
  111. } else {
  112. $result = $this->serializer->unserialize($result);
  113. }
  114. if ($result) {
  115. $this->setData($result);
  116. }
  117. return $this;
  118. }
  119. /**
  120. * Apply design change from self data into specified design package instance
  121. *
  122. * @param \Magento\Framework\View\DesignInterface $packageInto
  123. * @return $this
  124. */
  125. public function changeDesign(\Magento\Framework\View\DesignInterface $packageInto)
  126. {
  127. $design = $this->getDesign();
  128. if ($design) {
  129. $packageInto->setDesignTheme($design);
  130. }
  131. return $this;
  132. }
  133. /**
  134. * Get identities
  135. *
  136. * @return array
  137. */
  138. public function getIdentities()
  139. {
  140. return [self::CACHE_TAG . '_' . $this->getId()];
  141. }
  142. }