deblan.tv/src/Deblan/Bundle/BlogBundle/Controller/PostAdminController.php
2015-03-02 21:57:49 +01:00

136 lines
3.7 KiB
PHP

<?php
namespace Deblan\Bundle\BlogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Trinity\Bundle\AdminBundle\Controller\BaseAdminController;
use Trinity\Bundle\UserBundle\Flash\FlashError;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Request;
use Deblan\Bundle\BlogBundle\Configuration\PostCrudConfiguration as CrudConfiguration;
use Deblan\Bundle\BlogBundle\Model\Post;
/**
* @Route("/admin/post")
*/
class PostAdminController extends BaseAdminController
{
public function __construct()
{
$this->configuration = new CrudConfiguration();
}
/**
* @Route("/{page}", name="DeblanBlogBundlePostAdmin_index", defaults={"page" = "1"}, requirements={"page" = "\d+"})
* @Template()
*/
public function indexAction($page, Request $request)
{
return parent::indexAction($page, $request);
}
/**
* @Route("/new", name="DeblanBlogBundlePostAdmin_new")
* @Template()
*/
public function newAction(Request $request)
{
return parent::newAction($request);
}
/**
* @Route("/edit/{id}", name="DeblanBlogBundlePostAdmin_edit")
* @Template()
* @ParamConverter("object", class="Deblan\Bundle\BlogBundle\Model\Post")
*/
public function editAction($object, Request $request)
{
if (!$this->canEditPost($object)) {
return $this->accessDenied();
}
return parent::editAction($object, $request);
}
/**
* @Route("/remove/{id}/{token}", name="DeblanBlogBundlePostAdmin_remove")
* @Template()
* @ParamConverter("object", class="Deblan\Bundle\BlogBundle\Model\Post")
*/
public function removeAction($object, $token, Request $request)
{
if (!$this->canEditPost($object)) {
return $this->accessDenied();
}
return parent::removeAction($object, $token, $request);
}
/**
* @Route("/batch", name="DeblanBlogBundlePostAdmin_batch")
* @Template()
* @Method({"POST"})
*/
public function batchAction(Request $request)
{
return parent::batchAction($request);
}
/**
* @Route("/filter/clear", name="DeblanBlogBundlePostAdmin_filter_clear")
* @Template()
*/
public function clearFilterAction(Request $request)
{
return parent::clearFilterAction($request);
}
/**
* @Route("/rank", name="DeblanBlogBundlePostAdmin_rank")
* @Template("TrinityAdminBundle:BaseAdmin:rank.html.twig")
* @Method({"POST"})
*/
public function rankAction(Request $request)
{
return parent::rankAction($request);
}
public function postSave($object, $was_new = false)
{
if ($object->getUserId() === null) {
$object->setUser($this->getUser())->save();
}
}
public function canEditPost(Post $post)
{
return $this->getUser()->hasRole('ROLE_SUPER_ADMIN') || $post->getUserId() === $this->getUser()->getId();
}
public function accessDenied()
{
$this->getSessionUser()->setFlash('message', new FlashError('Vous n\'avez pas les permissions nécessaires'), false, $this->getConfiguration()->getStorageNamespace());
return $this->redirect($this->generateUrl('DeblanBlogBundlePostAdmin_index'));
}
protected function getQuery()
{
$query = parent::getQuery();
if ($this->getUser()->hasRole('ROLE_SUPER_ADMIN')) {
return $query;
}
$query->filterByUserId($this->getUser()->getId());
return $query;
}
}