/** * Adds the page attributes when a new page is added, for each language of the site * * @param BeforeEditSeoCommitEvent $event * @return boolean * @throws InvalidArgumentException * @throws \Exception * * @api */ public function onBeforeEditSeoCommit(BeforeEditSeoCommitEvent $event) { if ($event->isAborted()) { return; } $values = $event->getValues(); if (!is_array($values)) { throw new InvalidArgumentException('exception_invalid_value_array_required'); } if (array_key_exists("oldPermalink", $values)) { $result = true; $alBlocks = $this->blockRepository->fromContent($values["oldPermalink"]); if (count($alBlocks) > 0) { try { $this->blockRepository->startTransaction(); foreach ($alBlocks as $alBlock) { $htmlContent = preg_replace('/' . $values["oldPermalink"] . '/s', $values["Permalink"], $alBlock->getContent()); $blockManager = $this->blocksFactory->createBlockManager($alBlock); $value = array('Content' => $htmlContent); $result = $blockManager->save($value); if (!$result) { break; } } if (false !== $result) { $this->blockRepository->commit(); return; } $this->blockRepository->rollBack(); $event->abort(); } catch (\Exception $e) { $event->abort(); if (isset($this->blockRepository) && $this->blockRepository !== null) { $this->blockRepository->rollBack(); } throw $e; } } } }
public function generateFromBlockDefinition($blockDefinition, BlockManagerInterface $blockManager, array $values) { $default = $blockManager->getDefaultValue(); $blockDefinitionDecoded = json_decode($blockDefinition, true); $nextItems = null; if (array_key_exists("items", $blockDefinitionDecoded)) { $nextItems = $blockDefinitionDecoded["items"]; $items = array(); foreach ($nextItems as $nextItem) { $items[] = array_intersect_key($nextItem, array('blockType' => '')); } $blockDefinitionDecoded["items"] = $items; } if (array_key_exists("blockType", $blockDefinitionDecoded)) { unset($blockDefinitionDecoded["blockType"]); } $defaultValue = json_decode($default["Content"], true); if (!is_array($defaultValue)) { return true; } $values["Content"] = json_encode(array_replace_recursive($defaultValue, $blockDefinitionDecoded)); $blockManager->set(null); if (!$blockManager->save($values)) { return false; } if (null !== $nextItems) { $i = 0; $blockId = $blockManager->get()->getId(); foreach ($nextItems as $nextItem) { $values["SlotName"] = $blockId . '-' . $i; $values["Type"] = $nextItem["blockType"]; $blockManager = $this->blockManagerFactory->createBlockManager($nextItem["blockType"]); if (!$this->generateFromBlockDefinition(json_encode($nextItem), $blockManager, $values)) { return false; } $i++; } } return true; }