/** * @inheritDoc */ public function delete(DesignConfigInterface $designConfig) { if (!($designConfig->getExtensionAttributes() && $designConfig->getExtensionAttributes()->getDesignConfigData())) { throw new LocalizedException(__('Can not save empty config')); } $this->configStorage->delete($designConfig); $this->reinitableConfig->reinit(); $this->reindexGrid(); 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(); }