/**
  * 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;
             }
         }
     }
 }
Example #2
0
 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;
 }