src/WellCommerce/Bundle/CoreBundle/Controller/Admin/AbstractAdminController.php line 33

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\CoreBundle\Controller\Admin;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use WellCommerce\Bundle\AppBundle\Entity\AuditableInterface;
  17. use WellCommerce\Bundle\CoreBundle\Controller\AbstractController;
  18. use WellCommerce\Bundle\CoreBundle\Entity\EntityInterface;
  19. use WellCommerce\Bundle\CoreBundle\Manager\ManagerInterface;
  20. use WellCommerce\Component\DataGrid\DataGridInterface;
  21. use WellCommerce\Component\Form\FormBuilderInterface;
  22. use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
  23. /**
  24.  * Class AbstractAdminController
  25.  *
  26.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  27.  */
  28. abstract class AbstractAdminController extends AbstractController
  29. {
  30.     /**
  31.      * @var ManagerInterface
  32.      */
  33.     protected $manager;
  34.     public function __construct(ManagerInterface $manager)
  35.     {
  36.         $this->manager $manager;
  37.     }
  38.     protected function index(DataGridInterface $dataGrid): Response
  39.     {
  40.         $this->denyAccessUnlessGranted($this->manager->getAlias().'.index');
  41.         $this->createBreadcrumbs();
  42.         return $this->displayTemplate('index', [
  43.             'datagrid' => $dataGrid,
  44.         ]);
  45.     }
  46.     protected function save(FormBuilderInterface $formBuilderEntityInterface $entity null): Response
  47.     {
  48.         $isNew       false;
  49.         $resource    $entity;
  50.         $breadcrumbs $this->createBreadcrumbs();
  51.         $module      $this->getRouterHelper()->getCurrentModule();
  52.         if (!$entity instanceof EntityInterface) {
  53.             $entity $this->manager->initResource();
  54.             $isNew  true;
  55.         }
  56.         if ($isNew) {
  57.             $this->denyAccessUnlessGranted($this->manager->getAlias().'.add');
  58.             $breadcrumbs->addItem(sprintf('%s.heading.add'$module));
  59.         } else {
  60.             $this->denyAccessUnlessGranted($this->manager->getAlias().'.edit');
  61.             if ($entity instanceof AuditableInterface) {
  62.                 $breadcrumbs->addItem($entity->getResourceName());
  63.             }
  64.         }
  65.         $form $formBuilder->createForm($entity, [
  66.             'resource' => $resource,
  67.         ]);
  68.         if ($form->handleRequest()->isSubmitted()) {
  69.             if ($form->isValid()) {
  70.                 if ($this->getEntityManager()->contains($entity)) {
  71.                     $this->manager->updateResource($entity);
  72.                 } else {
  73.                     $this->manager->createResource($entity);
  74.                 }
  75.             }
  76.             return $this->createFormDefaultJsonResponse($form);
  77.         }
  78.         return $this->displayTemplate($isNew 'add' 'edit', [
  79.             'form'     => $form,
  80.             'resource' => $entity,
  81.         ]);
  82.     }
  83.     protected function delete(EntityInterface $entity): Response
  84.     {
  85.         $this->denyAccessUnlessGranted($this->manager->getAlias().'.delete');
  86.         $result = ['success' => true];
  87.         try {
  88.             $this->manager->removeResource($entity);
  89.         } catch (\Exception $e) {
  90.             $result = ['error' => $e->getMessage()];
  91.         }
  92.         return $this->jsonResponse($result);
  93.     }
  94.     protected function deleteGroup(Request $request): Response
  95.     {
  96.         $this->denyAccessUnlessGranted($this->manager->getAlias().'.delete');
  97.         $identifiers $request->request->filter('identifiers');
  98.         foreach ($identifiers as $id) {
  99.             $resource $this->manager->getRepository()->findOneBy(['id' => $id]);
  100.             if ($resource instanceof EntityInterface) {
  101.                 $this->manager->removeResource($resourcefalse);
  102.             }
  103.         }
  104.         $this->getEntityManager()->flush();
  105.         return $this->jsonResponse(['success' => true]);
  106.     }
  107.     protected function createBreadcrumbs(): Breadcrumbs
  108.     {
  109.         $module      $this->getRouterHelper()->getCurrentModule();
  110.         $breadcrumbs $this->getBreadcrumbs();
  111.         $breadcrumbs->clear();
  112.         $breadcrumbs->addItem($module '.heading.index'$this->getRouterHelper()->getRedirectToActionUrl('index'));
  113.         return $breadcrumbs;
  114.     }
  115. }