/** * Create a new block or edit an existing block. * * @Route("/edit/{blockEntity}", requirements={"blockEntity" = "^[1-9]\d*$"}) * @Theme("admin") * @param Request $request * @param BlockEntity $blockEntity * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ public function editAction(Request $request, BlockEntity $blockEntity = null) { $accessLevelRequired = ACCESS_EDIT; if (null === $blockEntity) { $bKey = json_decode($request->query->get('bkey')); if (empty($bKey)) { return $this->redirect('zikulablocksmodule_block_new'); } $blockEntity = new BlockEntity(); // sets defaults in constructor $blockEntity->setBkey($bKey); $accessLevelRequired = ACCESS_ADD; } if (!$this->hasPermission('ZikulaBlocksModule::', $blockEntity->getBlocktype() . ':' . $blockEntity->getTitle() . ':' . $blockEntity->getBid(), $accessLevelRequired)) { throw new AccessDeniedException(); } $blockInstance = $this->get('zikula_blocks_module.api.block')->createInstanceFromBKey($blockEntity->getBkey()); $blockType = $blockEntity->getBlocktype(); if (empty($blockType)) { $blockEntity->setBlocktype($blockInstance->getType()); } $form = $this->createForm('Zikula\\BlocksModule\\Form\\Type\\BlockType', $blockEntity); $form->handleRequest($request); list($moduleName, $blockFqCn) = explode(':', $blockEntity->getBkey()); $renderedOutput = $this->getBlockModifyOutput($blockInstance, $blockEntity, $request); if ($blockInstance instanceof \Zikula_Controller_AbstractBlock && $blockInstance->info()['form_content']) { // @todo @deprecated remove at Core-2.0 $renderedOutput = $this->formContentModify($request, $blockEntity); } if ($form->isSubmitted() and $form->get('save')->isClicked() and $form->isValid()) { $content = []; if ($blockInstance instanceof BlockControllerInterface) { $content = $blockInstance->modify($request, $blockEntity->getContent()); } elseif ($blockInstance instanceof \Zikula_Controller_AbstractBlock) { // @todo remove this BC at Core-2.0 if ($blockInstance->info()['form_content']) { $content = $this->formContentModify($request); } else { $blockInfo = call_user_func([$blockInstance, 'update'], ['content' => $blockEntity->getContent()]); $content = $blockInfo['content']; } } $blockEntity->setContent($content); // sort Filter array so keys are always sequential. $filters = $blockEntity->getFilters(); sort($filters); $blockEntity->setFilters($filters); /** @var \Doctrine\ORM\EntityManager $em */ $em = $this->getDoctrine()->getManager(); $module = $em->getRepository('ZikulaExtensionsModule:ExtensionEntity')->findOneBy(['name' => $moduleName]); $blockEntity->setModule($module); $em->persist($blockEntity); $em->flush(); $this->addFlash('status', __('Block saved!')); return $this->redirect($this->generateUrl('zikulablocksmodule_admin_view')); } if ($form->isSubmitted() and $form->get('cancel')->isClicked()) { $this->addFlash('status', __('Operation cancelled.')); return $this->redirect($this->generateUrl('zikulablocksmodule_admin_view')); } return $this->render('ZikulaBlocksModule:Admin:edit.html.twig', ['moduleName' => $moduleName, 'renderedOutput' => $renderedOutput, 'form' => $form->createView()]); }
/** * Display one block. * * @param BlockEntity $block * @param string $positionName @deprecated argument. remove at Core-2.0 * @return string */ public function showBlock(BlockEntity $block, $positionName = '') { $blockInstance = $this->blockApi->createInstanceFromBKey($block->getBkey()); $legacy = false; $content = ''; if ($blockInstance instanceof BlockControllerInterface) { $content = $blockInstance->display($block->getContent()); } elseif ($blockInstance instanceof \Zikula_Controller_AbstractBlock) { // @todo remove at Core-2.0 $legacy = true; $args = \BlockUtil::getBlockInfo($block->getBid()); $args['position'] = $positionName; $content = $blockInstance->display($args); } if (!$legacy) { if (null !== ($moduleInstance = $this->extensionApi->getModuleInstanceOrNull($block->getModule()->getName()))) { // @todo can remove check for null at Core-2.0 // add module stylesheet to page - legacy blocks load stylesheets automatically on ModUtil::load() $moduleInstance->addStylesheet(); } } return $this->themeEngine->wrapBlockContentInTheme($content, $block->getTitle(), $block->getBlocktype(), $block->getBid(), $positionName, $legacy); }