123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Theme\Model\Design\Config;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\App\Config\Value;
- use Magento\Theme\Api\Data\DesignConfigInterface;
- use Magento\Framework\DB\TransactionFactory;
- use Magento\Framework\App\Config\ValueInterface;
- use Magento\Theme\Model\Data\Design\ConfigFactory;
- use Magento\Theme\Model\Design\BackendModelFactory;
- class Storage
- {
- /**
- * @var \Magento\Framework\DB\TransactionFactory
- */
- protected $transactionFactory;
- /**
- * @var \Magento\Theme\Model\Design\BackendModelFactory
- */
- protected $backendModelFactory;
- /**
- * @var \Magento\Theme\Model\Design\Config\ValueChecker
- */
- protected $valueChecker;
- /**
- * @var ConfigFactory
- */
- protected $configFactory;
- /**
- * @var ScopeConfigInterface
- */
- protected $scopeConfig;
- /**
- * @var ValueProcessor
- */
- protected $valueProcessor;
- /**
- * @param TransactionFactory $transactionFactory
- * @param BackendModelFactory $backendModelFactory
- * @param ValueChecker $valueChecker
- * @param ConfigFactory $configFactory
- * @param ScopeConfigInterface $scopeConfig
- * @param ValueProcessor $valueProcessor
- */
- public function __construct(
- TransactionFactory $transactionFactory,
- BackendModelFactory $backendModelFactory,
- ValueChecker $valueChecker,
- ConfigFactory $configFactory,
- ScopeConfigInterface $scopeConfig,
- ValueProcessor $valueProcessor
- ) {
- $this->transactionFactory = $transactionFactory;
- $this->backendModelFactory = $backendModelFactory;
- $this->valueChecker = $valueChecker;
- $this->configFactory = $configFactory;
- $this->scopeConfig = $scopeConfig;
- $this->valueProcessor = $valueProcessor;
- }
- /**
- * Load design config from storage
- *
- * @param string $scope
- * @param mixed $scopeId
- * @return DesignConfigInterface
- */
- public function load($scope, $scopeId)
- {
- $designConfig = $this->configFactory->create($scope, $scopeId);
- $fieldsData = $designConfig->getExtensionAttributes()->getDesignConfigData();
- foreach ($fieldsData as &$fieldData) {
- $value = $this->valueProcessor->process(
- $this->scopeConfig->getValue($fieldData->getPath(), $scope, $scopeId),
- $scope,
- $scopeId,
- $fieldData->getFieldConfig()
- );
- if ($value === null) {
- $value = '';
- }
- $fieldData->setValue($value);
- }
- return $designConfig;
- }
- /**
- * Set design config to storage
- *
- * @param DesignConfigInterface $designConfig
- * @return void
- */
- public function save(DesignConfigInterface $designConfig)
- {
- $fieldsData = $designConfig->getExtensionAttributes()->getDesignConfigData();
- /* @var $saveTransaction \Magento\Framework\DB\Transaction */
- $saveTransaction = $this->transactionFactory->create();
- /* @var $deleteTransaction \Magento\Framework\DB\Transaction */
- $deleteTransaction = $this->transactionFactory->create();
- foreach ($fieldsData as $fieldData) {
- /** @var ValueInterface|Value $backendModel */
- $backendModel = $this->backendModelFactory->create([
- 'value' => $fieldData->getValue(),
- 'scope' => $designConfig->getScope(),
- 'scopeId' => $designConfig->getScopeId(),
- 'config' => $fieldData->getFieldConfig()
- ]);
- if ($fieldData->getValue() !== null
- && $this->valueChecker->isDifferentFromDefault(
- $fieldData->getValue(),
- $designConfig->getScope(),
- $designConfig->getScopeId(),
- $fieldData->getFieldConfig()
- )
- ) {
- $saveTransaction->addObject($backendModel);
- } elseif (!$backendModel->isObjectNew()) {
- $deleteTransaction->addObject($backendModel);
- }
- }
- $saveTransaction->save();
- $deleteTransaction->delete();
- }
- /**
- * Delete design configuration from storage
- *
- * @param DesignConfigInterface $designConfig
- * @return void
- */
- public function delete(DesignConfigInterface $designConfig)
- {
- $fieldsData = $designConfig->getExtensionAttributes()->getDesignConfigData();
- /* @var $deleteTransaction \Magento\Framework\DB\Transaction */
- $deleteTransaction = $this->transactionFactory->create();
- foreach ($fieldsData as $fieldData) {
- /** @var ValueInterface|Value $backendModel */
- $backendModel = $this->backendModelFactory->create([
- 'value' => $fieldData->getValue(),
- 'scope' => $designConfig->getScope(),
- 'scopeId' => $designConfig->getScopeId(),
- 'config' => $fieldData->getFieldConfig()
- ]);
- if (!$backendModel->isObjectNew()) {
- $deleteTransaction->addObject($backendModel);
- }
- }
- $deleteTransaction->delete();
- }
- }
|