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; }