trinity-cms-bundles/src/Trinity/Bundle/ContentManagerBundle/Controller/NavigationAdminController.php
2015-03-05 19:59:03 +01:00

167 lines
4.9 KiB
PHP

<?php
namespace Trinity\Bundle\ContentManagerBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Trinity\Bundle\ContentManagerBundle\Configuration\NavigationCrudConfiguration as CrudConfiguration;
use Symfony\Component\HttpFoundation\Request;
use Trinity\Bundle\AdminBundle\Controller\BaseAdminController;
/**
* @Route("/admin/cms/navigation")
*/
class NavigationAdminController extends BaseAdminController
{
public function __construct()
{
$this->configuration = new CrudConfiguration();
}
/**
* @Route("/list/{page}", name="TrinityContentManagerBundleNavigationAdmin_index", defaults={"page" = "1"}, requirements={"page" = "\d+"})
* @Template()
*/
public function indexAction($page, Request $request)
{
return parent::indexAction($page, $request);
}
/**
* @Route("/new", name="TrinityContentManagerBundleNavigationAdmin_new")
* @Template()
*/
public function newAction(Request $request)
{
$this->cleanCache();
return parent::newAction($request);
}
/**
* @Route("/edit/{id}", name="TrinityContentManagerBundleNavigationAdmin_edit")
* @Template()
* @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Nav")
*/
public function editAction($object, Request $request)
{
$this->cleanCache();
return parent::editAction($object, $request);
}
/**
* @Route("/remove/{id}/{token}", name="TrinityContentManagerBundleNavigationAdmin_remove")
* @Template()
* @ParamConverter("object", class="Trinity\Bundle\ContentManagerBundle\Model\Nav")
*/
public function removeAction($object, $token, Request $request)
{
$this->cleanCache();
return parent::removeAction($object, $token, $request);
}
/**
* @Route("/batch", name="TrinityContentManagerBundleNavigationAdmin_batch")
* @Template()
* @Method({"POST"})
*/
public function batchAction(Request $request)
{
$this->cleanCache();
return parent::batchAction($request);
}
/**
* @Route("/filter/clear", name="TrinityContentManagerBundleNavigationAdmin_filter_clear")
* @Template()
*/
public function clearFilterAction(Request $request)
{
return parent::clearFilterAction($request);
}
private function cleanCache()
{
$this->get('routeur.cache')->clearRouting();
}
protected function copyObjects($query, array $pks)
{
foreach ($pks as $pk) {
$original = $query->findPK($pk);
$navCopy = $original->copy(false);
$this->preSave($navCopy);
// Navigation copy
$navCopy
->setName($navCopy->getName().'_copy')
->setDomain($navCopy->getDomain())
->setTitle($navCopy->getTitle().' copy')
->save();
// Navigation's menus copies
foreach ($original->getMenus() as $menu) {
$menuCopy = $menu->copy(false);
$menuCopy
->setNav($navCopy)
->save();
// Navigation's menus's nodes copies
foreach ($menu->getNodes() as $node) {
$nodeCopy = $node->copy(false);
$nodeCopy
->moveAfter($node)
->setRouteName($node->getRouteName());
if (!$node->getNodeAlias()) {
$nodeCopy->setUrl($node->getUrl());
}
$nodeCopy->save();
if ($node->getPage()) {
$pageCopy = $node->getPage()->copy(false);
$pageCopy
->setNodeId($nodeCopy->getId())
->save();
$nodeCopy->setPageId($pageCopy->getId());
// foreach ($node->getPage()->getBlocks() as $block) {
// $blockCopy = $block->copy(true);
// $blockCopy
// ->setPageId($pageCopy->getId())
// ->save();
// }
}
$nodeCopy
->setNav($navCopy)
->setMenu($menuCopy)
->save();
}
}
$this->get('routeur.cache')->clearRouting();
$this->postSave($navCopy);
}
}
protected function postSave($object, $wasNew = false)
{
$object->createRootNode();
return parent::postSave($object, $wasNew);
}
}