示例#1
0
 /**
  * @param DesignConfigRepository $subject
  * @param DesignConfigInterface $designConfig
  * @return DesignConfigInterface
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  */
 public function afterDelete(DesignConfigRepository $subject, DesignConfigInterface $designConfig)
 {
     $website = in_array($designConfig->getScope(), [ScopeInterface::SCOPE_WEBSITE, ScopeInterface::SCOPE_WEBSITES]) ? $this->storeManager->getWebsite($designConfig->getScopeId()) : '';
     $store = in_array($designConfig->getScope(), [ScopeInterface::SCOPE_STORE, ScopeInterface::SCOPE_STORES]) ? $this->storeManager->getStore($designConfig->getScopeId()) : '';
     $this->eventManager->dispatch('admin_system_config_changed_section_design', ['website' => $website, 'store' => $store]);
     return $designConfig;
 }
示例#2
0
 /**
  * Validate if design configuration has recursive references
  *
  * @param DesignConfigInterface $designConfig
  *
  * @throws LocalizedException
  * @return void
  */
 public function validate(DesignConfigInterface $designConfig)
 {
     /** @var DesignConfigDataInterface[] $designConfigData */
     $designConfigData = $designConfig->getExtensionAttributes()->getDesignConfigData();
     $elements = [];
     foreach ($designConfigData as $designElement) {
         if (!in_array($designElement->getFieldConfig()['field'], $this->fields)) {
             continue;
         }
         /* Save mapping between field names and config paths */
         $elements[$designElement->getFieldConfig()['field']] = ['config_path' => $designElement->getPath(), 'value' => $designElement->getValue()];
     }
     foreach ($elements as $name => $data) {
         // Load template object by configured template id
         $template = $this->templateFactory->create();
         $template->emulateDesign($designConfig->getScopeId());
         $templateId = $data['value'];
         if (is_numeric($templateId)) {
             $template->load($templateId);
         } else {
             $template->loadDefault($templateId);
         }
         $text = $template->getTemplateText();
         $template->revertDesign();
         // Check if template body has a reference to the same config path
         if (preg_match_all(Template::CONSTRUCTION_TEMPLATE_PATTERN, $text, $constructions, PREG_SET_ORDER)) {
             foreach ($constructions as $construction) {
                 $configPath = isset($construction[2]) ? $construction[2] : '';
                 $params = $this->getParameters($configPath);
                 if (isset($params['config_path']) && $params['config_path'] == $data['config_path']) {
                     throw new LocalizedException(__("The %templateName contains an incorrect configuration. The template has " . "a reference to itself. Either remove or change the reference.", ["templateName" => $name]));
                 }
             }
         }
     }
 }
 /**
  * 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();
 }