src/Sylius/Bundle/CoreBundle/Controller/BaseController.php line 87

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Sylius package.
  4.  *
  5.  * (c) Paweł Jędrzejewski
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace Sylius\Bundle\CoreBundle\Controller;
  12. use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
  13. use Sylius\Component\Resource\ResourceActions;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\HttpKernel\Exception\HttpException;
  18. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  19. class BaseController extends ResourceController
  20. {
  21.     public function indexAction(Request $request): Response
  22.     {
  23.         $session $request->getSession();
  24.         $criteria $request->get('criteria'null);
  25.         $sessionCriteria $request->get('_route') . '_criteria';
  26.         
  27.         $resetFilters $request->get('resetFilters'null);
  28.         if($resetFilters){
  29.             $session->remove($sessionCriteria);
  30.         }else{
  31.             if($criteria){
  32.                 $session->set($sessionCriteria$criteria);
  33.             }else{
  34.                 $criteria $session->get($sessionCriterianull);
  35.                 if($criteria){
  36.                     $request->query->set('criteria'$criteria);    
  37.                 }
  38.             }            
  39.         }
  40.         $allValues $request->query->all();
  41.         if(isset($allValues['iframeTargetSessionData']) && $allValues['iframeTargetSessionData'] != null){
  42.             $session->set("iframeTargetSessionData"$allValues['iframeTargetSessionData']);
  43.         }
  44.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  45.         $parameters $configuration->getParameters();
  46.         
  47.         // Enabled or disabled filterSession
  48.         if($parameters->get('filterSession') === false){
  49.             $session->remove($sessionCriteria);
  50.         }
  51.         $this->isGrantedOr403($configurationResourceActions::INDEX);
  52.         $resources $this->resourcesCollectionProvider->get($configuration$this->repository);
  53.         $event $this->eventDispatcher->dispatchMultiple(ResourceActions::INDEX$configuration$resources);
  54.         $eventResponse $event->getResponse();
  55.         if (null !== $eventResponse) {
  56.             return $eventResponse;
  57.         }
  58.         
  59.         if ($configuration->isHtmlRequest()) {
  60.             $template $request->isXmlHttpRequest() && $request->query->get('get_only_content'false) ? '@SyliusAdmin\Crud/index_only_content.html.twig' $configuration->getTemplate(ResourceActions::INDEX '.html');
  61.             return $this->render($template, [
  62.                 'configuration' => $configuration,
  63.                 'parameters' => $parameters,
  64.                 'request' => $request,
  65.                 'metadata' => $this->metadata,
  66.                 'resources' => $resources,
  67.                 $this->metadata->getPluralName() => $resources,
  68.             ]);
  69.         }
  70.         return $this->createRestView($configuration$resources);
  71.     }
  72.     public function createAction(Request $request): Response
  73.     {
  74.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  75.         $this->isGrantedOr403($configurationResourceActions::CREATE);
  76.         $newResource $this->newResourceFactory->create($configuration$this->factory);
  77.         $form $this->resourceFormFactory->create($configuration$newResource);
  78.         // add button and redirectLet exists
  79.         $parameters $configuration->getParameters();
  80.         if($parameters->get('redirectLet')){
  81.             $form->add('saveAndLet'SubmitType::class, ['label' => 'Guardar y Permanecer']);
  82.         }
  83.         if($parameters->get('redirectAditional')){
  84.             $form->add('saveAndRedirect'SubmitType::class, ['label' => 'Guardar y Redirigir']);
  85.         }
  86.         $form->handleRequest($request);
  87.         if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
  88.             $newResource $form->getData();
  89.             $event $this->eventDispatcher->dispatchPreEvent(ResourceActions::CREATE$configuration$newResource);
  90.             if ($event->isStopped() && !$configuration->isHtmlRequest()) {
  91.                 throw new HttpException($event->getErrorCode(), $event->getMessage());
  92.             }
  93.             if ($event->isStopped()) {
  94.                 $this->flashHelper->addFlashFromEvent($configuration$event);
  95.                 $eventResponse $event->getResponse();
  96.                 if (null !== $eventResponse) {
  97.                     return $eventResponse;
  98.                 }
  99.                 return $this->redirectHandler->redirectToIndex($configuration$newResource);
  100.             }
  101.             if ($configuration->hasStateMachine()) {
  102.                 $stateMachine $this->getStateMachine();
  103.                 $stateMachine->apply($configuration$newResource);
  104.             }
  105.             $this->repository->add($newResource);
  106.             if ($configuration->isHtmlRequest()) {
  107.                 $this->flashHelper->addSuccessFlash($configurationResourceActions::CREATE$newResource);
  108.             }
  109.             $postEvent $this->eventDispatcher->dispatchPostEvent(ResourceActions::CREATE$configuration$newResource);
  110.             if (!$configuration->isHtmlRequest()) {
  111.                 return $this->createRestView($configuration$newResourceResponse::HTTP_CREATED);
  112.             }
  113.             $postEventResponse $postEvent->getResponse();
  114.             if (null !== $postEventResponse) {
  115.                 return $postEventResponse;
  116.             }
  117.             // saveAndLet check, redirect to referer
  118.             if ($form->getClickedButton() && 'saveAndLet' === $form->getClickedButton()->getName()) {
  119.                 if($parameters->get('redirectLet')){
  120.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectLet'), ['id'=> $newResource->getId()]);
  121.                 }
  122.             }
  123.             if ($form->getClickedButton() && 'saveAndRedirect' === $form->getClickedButton()->getName()) {
  124.                 if($parameters->get('redirectAditional')){
  125.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectAditional'), ['id'=> $newResource->getId()]);
  126.                 }
  127.             }
  128.             return $this->redirectHandler->redirectToResource($configuration$newResource);
  129.         }
  130.         if ($request->isMethod('POST') && $form->isSubmitted() && !$form->isValid()) {
  131.             $responseCode Response::HTTP_UNPROCESSABLE_ENTITY;
  132.         }
  133.         if (!$configuration->isHtmlRequest()) {
  134.             return $this->createRestView($configuration$formResponse::HTTP_BAD_REQUEST);
  135.         }
  136.         $initializeEvent $this->eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE$configuration$newResource);
  137.         $initializeEventResponse $initializeEvent->getResponse();
  138.         if (null !== $initializeEventResponse) {
  139.             return $initializeEventResponse;
  140.         }
  141.         return $this->render($configuration->getTemplate(ResourceActions::CREATE '.html'), [
  142.             'configuration' => $configuration,
  143.             'metadata' => $this->metadata,
  144.             'resource' => $newResource,
  145.             $this->metadata->getName() => $newResource,
  146.             'form' => $form->createView(),
  147.         ], null$responseCode ?? Response::HTTP_OK);
  148.     }
  149.     public function updateAction(Request $request): Response
  150.     {
  151.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  152.         $this->isGrantedOr403($configurationResourceActions::UPDATE);
  153.         $resource $this->findOr404($configuration);
  154.         $form $this->resourceFormFactory->create($configuration$resource);
  155.         
  156.         // add button and redirectLet exists
  157.         $parameters $configuration->getParameters();
  158.         if(!$form->isSubmitted() && $parameters->get('redirectLet')){
  159.             $form->add('saveAndLet'SubmitType::class, ['label' => 'Guardar y Permanecer']);
  160.         }
  161.         if(!$form->isSubmitted() && $parameters->get('redirectAditional')){
  162.             $form->add('saveAndRedirect'SubmitType::class, ['label' => 'Guardar y Redirigir']);
  163.         }
  164.         
  165.         $form->handleRequest($request);
  166.         if (
  167.             in_array($request->getMethod(), ['POST''PUT''PATCH'], true) &&
  168.             $form->isSubmitted() &&
  169.             $form->isValid()
  170.         ) {
  171.             $resource $form->getData();
  172.             /** @var ResourceControllerEvent $event */
  173.             $event $this->eventDispatcher->dispatchPreEvent(ResourceActions::UPDATE$configuration$resource);
  174.             if ($event->isStopped() && !$configuration->isHtmlRequest()) {
  175.                 throw new HttpException($event->getErrorCode(), $event->getMessage());
  176.             }
  177.             if ($event->isStopped()) {
  178.                 $this->flashHelper->addFlashFromEvent($configuration$event);
  179.                 $eventResponse $event->getResponse();
  180.                 if (null !== $eventResponse) {
  181.                     return $eventResponse;
  182.                 }
  183.                 return $this->redirectHandler->redirectToResource($configuration$resource);
  184.             }
  185.             try {
  186.                 $this->resourceUpdateHandler->handle($resource$configuration$this->manager);
  187.             } catch (UpdateHandlingException $exception) {
  188.                 if (!$configuration->isHtmlRequest()) {
  189.                     return $this->createRestView($configuration$form$exception->getApiResponseCode());
  190.                 }
  191.                 $this->flashHelper->addErrorFlash($configuration$exception->getFlash());
  192.                 return $this->redirectHandler->redirectToReferer($configuration);
  193.             }
  194.             if ($configuration->isHtmlRequest()) {
  195.                 $this->flashHelper->addSuccessFlash($configurationResourceActions::UPDATE$resource);
  196.             }
  197.             $postEvent $this->eventDispatcher->dispatchPostEvent(ResourceActions::UPDATE$configuration$resource);
  198.             if (!$configuration->isHtmlRequest()) {
  199.                 if ($configuration->getParameters()->get('return_content'false)) {
  200.                     return $this->createRestView($configuration$resourceResponse::HTTP_OK);
  201.                 }
  202.                 return $this->createRestView($configurationnullResponse::HTTP_NO_CONTENT);
  203.             }
  204.             $postEventResponse $postEvent->getResponse();
  205.             if (null !== $postEventResponse) {
  206.                 return $postEventResponse;
  207.             }
  208.             // saveAndLet check, redirect to referer
  209.             if ($form->getClickedButton() && 'saveAndLet' === $form->getClickedButton()->getName()) {
  210.                 if($parameters->get('redirectLet')){
  211.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectLet'), ['id'=> $resource->getId()]);
  212.                 }
  213.             }
  214.             if ($form->getClickedButton() && 'saveAndRedirect' === $form->getClickedButton()->getName()) {
  215.                 if($parameters->get('redirectAditional')){
  216.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectAditional'), ['id'=> $resource->getId()]);
  217.                 }
  218.             }
  219.             return $this->redirectHandler->redirectToResource($configuration$resource);
  220.         }
  221.         if (in_array($request->getMethod(), ['POST''PUT''PATCH'], true) && $form->isSubmitted() && !$form->isValid()) {
  222.             $responseCode Response::HTTP_UNPROCESSABLE_ENTITY;
  223.         }
  224.         if (!$configuration->isHtmlRequest()) {
  225.             return $this->createRestView($configuration$formResponse::HTTP_BAD_REQUEST);
  226.         }
  227.         $initializeEvent $this->eventDispatcher->dispatchInitializeEvent(ResourceActions::UPDATE$configuration$resource);
  228.         $initializeEventResponse $initializeEvent->getResponse();
  229.         if (null !== $initializeEventResponse) {
  230.             return $initializeEventResponse;
  231.         }
  232.         return $this->render($configuration->getTemplate(ResourceActions::UPDATE '.html'), [
  233.             'configuration' => $configuration,
  234.             'metadata' => $this->metadata,
  235.             'resource' => $resource,
  236.             $this->metadata->getName() => $resource,
  237.             'form' => $form->createView(),
  238.         ], null$responseCode ?? Response::HTTP_OK);
  239.     }
  240.     public function cleanSessionDataAction(Request $request): Response
  241.     {
  242.         $session $request->getSession();
  243.         $cleanIframeTargetSessionData $request->get('cleanIframeTargetSessionData'false);
  244.         
  245.         if($cleanIframeTargetSessionData){
  246.             $session->remove("iframeTargetSessionData");
  247.         }
  248.         
  249.         return new JsonResponse([
  250.             'cleanSessionData' => true,
  251.             ]
  252.         );
  253.     }
  254. }