menus = MenuPeer::findMenusWithNodes(); $this->navs = NavQuery::create()->orderByName()->find(); $this->configuration = new CrudConfiguration(); } protected function getPanelTrees() { $datas = array(); foreach ($this->navs as $nav) { $datas[] = array( 'nav' => $nav, 'menus' => MenuPeer::filterByNavId($nav->getId(), $this->menus), ); } return array('trees' => $datas); } /** * @Route("/new", name="TrinityContentManagerBundlePageAdmin_new") * @Template() */ public function newAction(Request $request) { return $this->redirect($this->generateUrl('TrinityContentManagerBundlePageAdmin_index')); } /** * @Route("/batch", name="TrinityContentManagerBundlePageAdmin_batch") * @Template() */ public function batchAction(Request $request) { return parent::batchAction($request); } /** * @Route("/remove/{id}/{token}", name="TrinityContentManagerBundlePageAdmin_remove") * @Template() * @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Page") */ public function removeAction($object, $token, Request $request) { $this->use_nav_name = $this->container->getParameter('trinity_content_manager.index_use_nav_name'); if ($object->getNodeRelatedByNodeId() !== null) { $event = new LuceneEvent(); $event->setObject($object); $nav = $object->getNodeRelatedByNodeId()->getNav(); if($this->use_nav_name){ $event->setIndex($nav->getName()); }else { $event->setIndex($nav->getCulture()); } $this->get("event_dispatcher")->dispatch( TrinitySearchEvents::LUCENE_REMOVE_INDEX, $event ); } return parent::removeAction($object, $token, $request); } /** * @Route("/filter/clear", name="TrinityContentManagerBundlePageAdmin_filter_clear") * @Template() */ public function clearFilterAction(Request $request) { return parent::clearFilterAction($request); } /** * @Route("/list/{page}", name="TrinityContentManagerBundlePageAdmin_index", defaults={"page" = "1"}, requirements={"page" = "\d+"}) * @Template() */ public function indexAction($page, Request $request) { $this->getSessionUser()->setAttribute('crud.current_nav', null); $return = parent::indexAction($page, $request); if (is_array($return)) { return array_merge(parent::indexAction($page, $request), $this->getPanelTrees()); } return $return; } /** * @Route("/edit/{id}", name="TrinityContentManagerBundlePageAdmin_edit") * @Template() * @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Page") */ public function editAction($object, Request $request) { return array_merge( array( 'object' => $object, 'form_metas' => $this->getFormMetas($object)->createView(), 'form_sitemap' => $this->getFormSitemap($object)->createView(), 'form_perms' => $this->getFormPerms($object)->createView(), 'form_blocks' => $this->getFormBlocks($object)->createView(), 'remove_token' => $this->getRemoveToken(true), 'title' => $this->configuration->getEditTitle($object), 'show' => 'form_metas', 'is_post' => $request->isMethod('post'), 'backlink' => $this->getBacklinkAndGenerateBreadcrumb(), 'current_nav' => $this->getSessionUser()->getAttribute('crud.current_nav'), 'fieldsets' => $object->getConfiguration()->getFieldsets(), ), $this->getPanelTrees() ); } /** * @Route("/process/edit/metas/{id}", name="TrinityContentManagerBundlePageAdmin_process_edit_metas") * @Template() * @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Page") */ public function processEditMetasAction(Page $object, Request $request) { $editAction = $this->editAction($object, $request); $form = $this->getFormMetas($object); if ($this->getRequest()->isMethod('post')) { $this->processForm($form, $object, $this->getRequest()); if ($form->isValid()) { $this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.updated.singular'), false, $this->getConfiguration()->getStorageNamespace()); return $this->redirect($this->generateUrl('TrinityContentManagerBundlePageAdmin_process_edit_metas', array('id' => $object->getId()))); } } $editAction['form_metas'] = $form->createView(); $editAction['show'] = 'form_metas'; $editAction['is_valid'] = $form->isSubmitted() && $form->isValid(); return $editAction; } /** * @Route("/process/edit/sitemap/{id}", name="TrinityContentManagerBundlePageAdmin_process_edit_sitemap") * @Template() * @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Page") */ public function processEditSitemapAction(Page $object, Request $request) { $editAction = $this->editAction($object, $request); $form = $this->getFormSitemap($object); if ($this->getRequest()->isMethod('post')) { $this->processForm($form, $object, $this->getRequest()); if ($form->isValid()) { $this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.updated.singular'), false, $this->getConfiguration()->getStorageNamespace()); return $this->redirect($this->generateUrl('TrinityContentManagerBundlePageAdmin_process_edit_sitemap', array('id' => $object->getId()))); } } $editAction['form_sitemap'] = $form->createView(); $editAction['show'] = 'form_sitemap'; $editAction['is_valid'] = $form->isSubmitted() && $form->isValid(); return $editAction; } /** * @Route("/process/edit/blocks/{id}", name="TrinityContentManagerBundlePageAdmin_process_edit_blocks") * @Template() * @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Page") */ public function processEditBlocksAction(Page $object, Request $request) { $editAction = $this->editAction($object, $request); $form = $this->getFormBlocks($object); if ($this->getRequest()->isMethod('post')) { $this->processForm($form, $object, $this->getRequest()); if ($form->isValid()) { $this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.updated.singular'), false, $this->getConfiguration()->getStorageNamespace()); return $this->redirect($this->generateUrl('TrinityContentManagerBundlePageAdmin_process_edit_blocks', array('id' => $object->getId()))); } } $editAction['form_blocks'] = $form->createView(); $editAction['show'] = 'form_blocks'; $editAction['is_valid'] = $form->isSubmitted() && $form->isValid(); return $editAction; } /** * @Route("/process/edit/perms/{id}", name="TrinityContentManagerBundlePageAdmin_process_edit_perms") * @Template() * @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Page") */ public function processEditPermsAction(Page $object, Request $request) { $editAction = $this->editAction($object, $request); $form = $this->getFormPerms($object); if ($this->getRequest()->isMethod('post')) { $this->processForm($form, $object, $this->getRequest()); if ($form->isValid()) { $this->configureDefaultParams($object); $this->cleanCache(); $this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.updated.singular'), false, $this->getConfiguration()->getStorageNamespace()); return $this->redirect($this->generateUrl('TrinityContentManagerBundlePageAdmin_process_edit_metas', array('id' => $object->getId()))); } } $editAction['form_perms'] = $form->createView(); $editAction['show'] = 'form_perms'; $editAction['is_valid'] = $form->isSubmitted() && $form->isValid(); return $editAction; } /** * @Route("/clean_all_cache", name="TrinityContentManagerBundlePageAdmin_clean_all_cache") * @Template() */ public function cleanAllCacheAction(Request $request) { $this->cleanVarnishCache(); $this->cleanCache(); $referer = $request->headers->get('referer'); return $this->redirect($referer); } protected function processEditForm($form, $object) { if ($this->getRequest()->isMethod('post')) { return $this->processForm($form, $object, $this->getRequest()); } } protected function getFormMetas(Page $page) { return $this->form_metas ? $this->form_metas : $this->form_metas = $this->createForm(new PageMetasType(), $page); } protected function getFormSitemap(Page $page) { return $this->form_sitemap ? $this->form_sitemap : $this->form_sitemap = $this->createForm(new PageSitemapType(), $page); } protected function getFormPerms(Page $page) { $options = $this->container->getParameter('trinity_content_manager.page'); return $this->form_perms ? $this->form_perms : $this->form_perms = $this->createForm(new PagePermissionsType($options), $page); } protected function getFormBlocks(Page $page) { return $this->form_blocks ? $this->form_blocks : $this->form_blocks = $this->createForm(new PageType(), $page); } protected function processForm(&$form, &$object, Request $request) { $form->submit($request); if ($form->isValid()) { $this->preSave($object); $object->save(); $this->postSave($object); } return $form; } protected function cleanCache() { $kernel = $this->get('kernel'); $application = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel); $application->setAutoExit(false); $options = array('command' => 'cache:clear-routing'); $application->run(new \Symfony\Component\Console\Input\ArrayInput($options)); } protected function cleanVarnishCache() { $kernel = $this->get('kernel'); $application = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel); $application->setAutoExit(false); $options = array('command' => 'cache:clear-varnish'); $application->run(new \Symfony\Component\Console\Input\ArrayInput($options)); } protected function getBacklinkAndGenerateBreadcrumb() { $backlink = $this->generateUrl('TrinityContentManagerBundlePageAdmin_index'); if (null !== $this->getSessionUser()->getAttribute('crud.current_nav')) { $nav = NavQuery::create()->findOneById($this->getSessionUser()->getAttribute('crud.current_nav')); if ($nav) { $backlink = $this->generateUrl('TrinityContentManagerBundleNodeAdmin_index', array('nav_id' => $nav->getId())); $this->get('breadcrumb.manager') ->get() ->offsetGet(1) ->setText($nav->getTitle()) ->setUrl($backlink); } } return $backlink; } protected function configureDefaultParams(Page $object) { if ($object->getDataModel() && $object->getDataModelId() && $object->getNodeId()) { // injecte les paramètres comme spécifié dans la config de l'url resolver $config = $this->container->getParameter('trinity_content_manager.url_resolver'); $resolve_params = array_key_exists($object->getClassKey(), $config['models']) ? $config['models'][$object->getClassKey()]['params'] : null; if ($resolve_params) { $node = $object->getNodeRelatedByNodeId(); $model = $node->getDataModelObject(); $default = array(); foreach ($resolve_params as $param => $method) { if ($method == 'PARENT') { if (!$node->hasParent()) { continue; } $parent_param = $node->getParent()->getCleanedDefaultParams(); if (!in_array($param, array_keys($parent_param))) { continue; } $value = $parent_param[$param]; } else { $methods = explode('.', $method); $value = $model; foreach ($methods as $method) { $value = $value->{$method}(); } } $default[$param] = $value; } $node ->setCleanedDefaultParams($default) ->save(); } } else { // inject les paramètres du noeud parent si celui ci repose sur un data model $node = $object->getNodeRelatedByNodeId(); $parent_param = $node->getCleanedDefaultParams(); if ($node->hasParent() && ($node->getParent()->layOnDataModel() || $node->getParent()->layOnDataModels())) { $parent_param = $node->getParent()->getCleanedDefaultParams(); } $node ->setCleanedDefaultParams($parent_param) ->save(); } } public function postSave($object, $was_new = false) { $this->use_nav_name = $this->container->getParameter('trinity_content_manager.index_use_nav_name'); $node = $object->getNodeRelatedByNodeId(); if ($node) { $event = new LuceneEvent(); $event->setObject($object); $nav = $node->getNav(); if($this->use_nav_name){ $event->setIndex($nav->getName()); }else { $event->setIndex($nav->getCulture()); } $this->get("event_dispatcher")->dispatch( TrinitySearchEvents::LUCENE_UPDATE_INDEX, $event ); } } }