/** * @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; }
/** * 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(); }