/**
  * @Route("/newPagePart", name="KunstmaanPagePartBundle_admin_newpagepart")
  * @Template("KunstmaanPagePartBundle:PagePartAdminTwigExtension:pagepart.html.twig")
  *
  * @param \Symfony\Component\HttpFoundation\Request $request
  *
  * @return array
  */
 public function newPagePartAction(Request $request)
 {
     $em = $this->getDoctrine()->getManager();
     $pageId = $request->get('pageid');
     $pageClassName = $request->get('pageclassname');
     $context = $request->get('context');
     $pagePartClass = $request->get('type');
     $page = $em->getRepository($pageClassName)->findOneById($pageId);
     $pagePartConfigurationReader = new PagePartConfigurationReader($this->container->get('kernel'));
     $pagePartAdminConfigurators = $pagePartConfigurationReader->getPagePartAdminConfigurators($page);
     $pagePartAdminConfigurator = null;
     foreach ($pagePartAdminConfigurators as $ppac) {
         if ($context == $ppac->getContext()) {
             $pagePartAdminConfigurator = $ppac;
         }
     }
     if (is_null($pagePartAdminConfigurator)) {
         throw new \RuntimeException(sprintf('No page part admin configurator found for context "%s".', $context));
     }
     $pagePartAdmin = new PagePartAdmin($pagePartAdminConfigurator, $em, $page, $context, $this->container);
     $pagePart = new $pagePartClass();
     $formFactory = $this->container->get('form.factory');
     $formBuilder = $formFactory->createBuilder(FormType::class);
     $pagePartAdmin->adaptForm($formBuilder);
     $id = 'newpp_' . time();
     $data = $formBuilder->getData();
     $data['pagepartadmin_' . $id] = $pagePart;
     $adminType = $pagePart->getDefaultAdminType();
     $adminTypeFqn = ClassUtils::getClass($adminType);
     $formBuilder->add('pagepartadmin_' . $id, $adminTypeFqn);
     $formBuilder->setData($data);
     $form = $formBuilder->getForm();
     $formview = $form->createView();
     return array('id' => $id, 'form' => $formview, 'pagepart' => $pagePart, 'pagepartadmin' => $pagePartAdmin, 'editmode' => true);
 }
 /**
  * @param HasPageTemplateInterface $page                 The page
  * @param Request                  $request              The request
  * @param EntityManager            $em                   The entity manager
  * @param KernelInterface          $kernel               The kernel
  * @param FormFactoryInterface     $formFactory          The form factory
  * @param PagePartAdminFactory     $pagePartAdminFactory The page part admin factory
  */
 public function __construct(HasPageTemplateInterface $page, Request $request, EntityManager $em, KernelInterface $kernel, FormFactoryInterface $formFactory, PagePartAdminFactory $pagePartAdminFactory)
 {
     parent::__construct();
     $this->page = $page;
     $this->em = $em;
     $this->request = $request;
     $pageTemplateConfigurationReader = new PageTemplateConfigurationReader($kernel);
     $this->pageTemplates = $pageTemplateConfigurationReader->getPageTemplates($page);
     $pagePartConfigurationReader = new PagePartConfigurationReader($kernel);
     $this->pagePartAdminConfigurations = $pagePartConfigurationReader->getPagePartAdminConfigurators($this->page);
     $repo = $this->em->getRepository('KunstmaanPagePartBundle:PageTemplateConfiguration');
     $repo->setContainer($kernel->getContainer());
     $this->pageTemplateConfiguration = $repo->findOrCreateFor($page);
     foreach ($this->getPageTemplate()->getRows() as $row) {
         foreach ($row->getRegions() as $region) {
             $pagePartAdminConfiguration = null;
             foreach ($this->pagePartAdminConfigurations as $ppac) {
                 if ($ppac->getContext() == $region->getName()) {
                     $pagePartAdminConfiguration = $ppac;
                 }
             }
             if ($pagePartAdminConfiguration !== null) {
                 $pagePartWidget = new PagePartWidget($page, $this->request, $this->em, $pagePartAdminConfiguration, $formFactory, $pagePartAdminFactory);
                 $this->widgets[$region->getName()] = $pagePartWidget;
             }
         }
     }
 }
 /**
  * @param DeepCloneAndSaveEvent $event
  */
 public function postDeepCloneAndSave(DeepCloneAndSaveEvent $event)
 {
     $originalEntity = $event->getEntity();
     if ($originalEntity instanceof HasPagePartsInterface) {
         $clonedEntity = $event->getClonedEntity();
         $pagePartConfigurationReader = new PagePartConfigurationReader($this->kernel);
         $contexts = $pagePartConfigurationReader->getPagePartContexts($originalEntity);
         foreach ($contexts as $context) {
             $this->em->getRepository('KunstmaanPagePartBundle:PagePartRef')->copyPageParts($this->em, $originalEntity, $clonedEntity, $context);
         }
     }
     if ($originalEntity instanceof HasPageTemplateInterface) {
         $clonedEntity = $event->getClonedEntity();
         $PageTemplateConfigurationRepo = $this->em->getRepository('KunstmaanPagePartBundle:PageTemplateConfiguration');
         $PageTemplateConfigurationRepo->setContainer($this->kernel->getContainer());
         $newPageTemplateConfiguration = clone $PageTemplateConfigurationRepo->findOrCreateFor($originalEntity);
         $newPageTemplateConfiguration->setId(null);
         $newPageTemplateConfiguration->setPageId($clonedEntity->getId());
         $this->em->persist($newPageTemplateConfiguration);
     }
 }
 /**
  * @param AdaptFormEvent $event
  */
 public function adaptForm(AdaptFormEvent $event)
 {
     $page = $event->getPage();
     $tabPane = $event->getTabPane();
     if ($page instanceof HasPageTemplateInterface) {
         $pageTemplateWidget = new PageTemplateWidget($page, $event->getRequest(), $this->em, $this->kernel, $this->formFactory, $this->pagePartAdminFactory);
         /* @var Tab $propertiesTab */
         $propertiesTab = $tabPane->getTabByTitle('Properties');
         if (!is_null($propertiesTab)) {
             $propertiesWidget = $propertiesTab->getWidget();
             $tabPane->removeTab($propertiesTab);
             $tabPane->addTab(new Tab("Content", new ListWidget(array($propertiesWidget, $pageTemplateWidget))), 0);
         } else {
             $tabPane->addTab(new Tab("Content", $pageTemplateWidget), 0);
         }
     } else {
         if ($page instanceof HasPagePartsInterface) {
             /* @var HasPagePartsInterface $page */
             $pagePartConfigurationReader = new PagePartConfigurationReader($this->kernel);
             $pagePartAdminConfigurators = $pagePartConfigurationReader->getPagePartAdminConfigurators($page);
             foreach ($pagePartAdminConfigurators as $index => $pagePartAdminConfiguration) {
                 $pagePartWidget = new PagePartWidget($page, $event->getRequest(), $this->em, $pagePartAdminConfiguration, $this->formFactory, $this->pagePartAdminFactory);
                 if ($index == 0) {
                     /* @var Tab $propertiesTab */
                     $propertiesTab = $tabPane->getTabByTitle('Properties');
                     if (!is_null($propertiesTab)) {
                         $propertiesWidget = $propertiesTab->getWidget();
                         $tabPane->removeTab($propertiesTab);
                         $tabPane->addTab(new Tab($pagePartAdminConfiguration->getName(), new ListWidget(array($propertiesWidget, $pagePartWidget))), 0);
                         continue;
                     }
                 }
                 $tabPane->addTab(new Tab($pagePartAdminConfiguration->getName(), $pagePartWidget), sizeof($tabPane->getTabs()));
             }
         }
     }
 }
 /**
  * @param HasPageTemplateInterface $page                 The page
  * @param Request                  $request              The request
  * @param EntityManager            $em                   The entity manager
  * @param KernelInterface          $kernel               The kernel
  * @param FormFactoryInterface     $formFactory          The form factory
  * @param PagePartAdminFactory     $pagePartAdminFactory The page part admin factory
  */
 public function __construct(HasPageTemplateInterface $page, Request $request, EntityManager $em, KernelInterface $kernel, FormFactoryInterface $formFactory, PagePartAdminFactory $pagePartAdminFactory)
 {
     parent::__construct();
     $this->page = $page;
     $this->em = $em;
     $this->request = $request;
     $this->formFactory = $formFactory;
     $this->pagePartAdminFactory = $pagePartAdminFactory;
     $pageTemplateConfigurationReader = new PageTemplateConfigurationReader($kernel);
     $this->pageTemplates = $pageTemplateConfigurationReader->getPageTemplates($page);
     $pagePartConfigurationReader = new PagePartConfigurationReader($kernel);
     $this->pagePartAdminConfigurations = $pagePartConfigurationReader->getPagePartAdminConfigurators($this->page);
     $repo = $this->em->getRepository('KunstmaanPagePartBundle:PageTemplateConfiguration');
     $repo->setContainer($kernel->getContainer());
     $this->pageTemplateConfiguration = $repo->findOrCreateFor($page);
     foreach ($this->getPageTemplate()->getRows() as $row) {
         foreach ($row->getRegions() as $region) {
             $this->processRegion($region);
         }
     }
 }