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

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.         if ($configuration->isHtmlRequest()) {
  59.             $template $request->isXmlHttpRequest() && $request->query->get('get_only_content'false) ? '@SyliusAdmin\Crud/index_only_content.html.twig' $configuration->getTemplate(ResourceActions::INDEX '.html');
  60.             return $this->render($template, [
  61.                 'configuration' => $configuration,
  62.                 'parameters' => $parameters,
  63.                 'request' => $request,
  64.                 'metadata' => $this->metadata,
  65.                 'resources' => $resources,
  66.                 $this->metadata->getPluralName() => $resources,
  67.             ]);
  68.         }
  69.         return $this->createRestView($configuration$resources);
  70.     }
  71.     public function createAction(Request $request): Response
  72.     {
  73.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  74.         $this->isGrantedOr403($configurationResourceActions::CREATE);
  75.         $newResource $this->newResourceFactory->create($configuration$this->factory);
  76.         $form $this->resourceFormFactory->create($configuration$newResource);
  77.         // add button and redirectLet exists
  78.         $parameters $configuration->getParameters();
  79.         if($parameters->get('redirectLet')){
  80.             $form->add('saveAndLet'SubmitType::class, ['label' => 'Guardar y Permanecer']);
  81.         }
  82.         if($parameters->get('redirectAditional')){
  83.             $form->add('saveAndRedirect'SubmitType::class, ['label' => 'Guardar y Redirigir']);
  84.         }
  85.         $form->handleRequest($request);
  86.         if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
  87.             $newResource $form->getData();
  88.             $event $this->eventDispatcher->dispatchPreEvent(ResourceActions::CREATE$configuration$newResource);
  89.             if ($event->isStopped() && !$configuration->isHtmlRequest()) {
  90.                 throw new HttpException($event->getErrorCode(), $event->getMessage());
  91.             }
  92.             if ($event->isStopped()) {
  93.                 $this->flashHelper->addFlashFromEvent($configuration$event);
  94.                 $eventResponse $event->getResponse();
  95.                 if (null !== $eventResponse) {
  96.                     return $eventResponse;
  97.                 }
  98.                 return $this->redirectHandler->redirectToIndex($configuration$newResource);
  99.             }
  100.             if ($configuration->hasStateMachine()) {
  101.                 $stateMachine $this->getStateMachine();
  102.                 $stateMachine->apply($configuration$newResource);
  103.             }
  104.             $this->repository->add($newResource);
  105.             if ($configuration->isHtmlRequest()) {
  106.                 $this->flashHelper->addSuccessFlash($configurationResourceActions::CREATE$newResource);
  107.             }
  108.             $postEvent $this->eventDispatcher->dispatchPostEvent(ResourceActions::CREATE$configuration$newResource);
  109.             if (!$configuration->isHtmlRequest()) {
  110.                 return $this->createRestView($configuration$newResourceResponse::HTTP_CREATED);
  111.             }
  112.             $postEventResponse $postEvent->getResponse();
  113.             if (null !== $postEventResponse) {
  114.                 return $postEventResponse;
  115.             }
  116.             // saveAndLet check, redirect to referer
  117.             if ($form->getClickedButton() && 'saveAndLet' === $form->getClickedButton()->getName()) {
  118.                 if($parameters->get('redirectLet')){
  119.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectLet'), ['id'=> $newResource->getId()]);
  120.                 }
  121.             }
  122.             if ($form->getClickedButton() && 'saveAndRedirect' === $form->getClickedButton()->getName()) {
  123.                 if($parameters->get('redirectAditional')){
  124.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectAditional'), ['id'=> $newResource->getId()]);
  125.                 }
  126.             }
  127.             return $this->redirectHandler->redirectToResource($configuration$newResource);
  128.         }
  129.         if ($request->isMethod('POST') && $form->isSubmitted() && !$form->isValid()) {
  130.             $responseCode Response::HTTP_UNPROCESSABLE_ENTITY;
  131.         }
  132.         if (!$configuration->isHtmlRequest()) {
  133.             return $this->createRestView($configuration$formResponse::HTTP_BAD_REQUEST);
  134.         }
  135.         $initializeEvent $this->eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE$configuration$newResource);
  136.         $initializeEventResponse $initializeEvent->getResponse();
  137.         if (null !== $initializeEventResponse) {
  138.             return $initializeEventResponse;
  139.         }
  140.         return $this->render($configuration->getTemplate(ResourceActions::CREATE '.html'), [
  141.             'configuration' => $configuration,
  142.             'metadata' => $this->metadata,
  143.             'resource' => $newResource,
  144.             $this->metadata->getName() => $newResource,
  145.             'form' => $form->createView(),
  146.         ], null$responseCode ?? Response::HTTP_OK);
  147.     }
  148.     public function updateAction(Request $request): Response
  149.     {
  150.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  151.         $this->isGrantedOr403($configurationResourceActions::UPDATE);
  152.         $resource $this->findOr404($configuration);
  153.         $form $this->resourceFormFactory->create($configuration$resource);
  154.         
  155.         // add button and redirectLet exists
  156.         $parameters $configuration->getParameters();
  157.         if(!$form->isSubmitted() && $parameters->get('redirectLet')){
  158.             $form->add('saveAndLet'SubmitType::class, ['label' => 'Guardar y Permanecer']);
  159.         }
  160.         if(!$form->isSubmitted() && $parameters->get('redirectAditional')){
  161.             $form->add('saveAndRedirect'SubmitType::class, ['label' => 'Guardar y Redirigir']);
  162.         }
  163.         
  164.         $form->handleRequest($request);
  165.         if (
  166.             in_array($request->getMethod(), ['POST''PUT''PATCH'], true) &&
  167.             $form->isSubmitted() &&
  168.             $form->isValid()
  169.         ) {
  170.             $resource $form->getData();
  171.             /** @var ResourceControllerEvent $event */
  172.             $event $this->eventDispatcher->dispatchPreEvent(ResourceActions::UPDATE$configuration$resource);
  173.             if ($event->isStopped() && !$configuration->isHtmlRequest()) {
  174.                 throw new HttpException($event->getErrorCode(), $event->getMessage());
  175.             }
  176.             if ($event->isStopped()) {
  177.                 $this->flashHelper->addFlashFromEvent($configuration$event);
  178.                 $eventResponse $event->getResponse();
  179.                 if (null !== $eventResponse) {
  180.                     return $eventResponse;
  181.                 }
  182.                 return $this->redirectHandler->redirectToResource($configuration$resource);
  183.             }
  184.             try {
  185.                 $this->resourceUpdateHandler->handle($resource$configuration$this->manager);
  186.             } catch (UpdateHandlingException $exception) {
  187.                 if (!$configuration->isHtmlRequest()) {
  188.                     return $this->createRestView($configuration$form$exception->getApiResponseCode());
  189.                 }
  190.                 $this->flashHelper->addErrorFlash($configuration$exception->getFlash());
  191.                 return $this->redirectHandler->redirectToReferer($configuration);
  192.             }
  193.             if ($configuration->isHtmlRequest()) {
  194.                 $this->flashHelper->addSuccessFlash($configurationResourceActions::UPDATE$resource);
  195.             }
  196.             $postEvent $this->eventDispatcher->dispatchPostEvent(ResourceActions::UPDATE$configuration$resource);
  197.             if (!$configuration->isHtmlRequest()) {
  198.                 if ($configuration->getParameters()->get('return_content'false)) {
  199.                     return $this->createRestView($configuration$resourceResponse::HTTP_OK);
  200.                 }
  201.                 return $this->createRestView($configurationnullResponse::HTTP_NO_CONTENT);
  202.             }
  203.             $postEventResponse $postEvent->getResponse();
  204.             if (null !== $postEventResponse) {
  205.                 return $postEventResponse;
  206.             }
  207.             // saveAndLet check, redirect to referer
  208.             if ($form->getClickedButton() && 'saveAndLet' === $form->getClickedButton()->getName()) {
  209.                 if($parameters->get('redirectLet')){
  210.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectLet'), ['id'=> $resource->getId()]);
  211.                 }
  212.             }
  213.             if ($form->getClickedButton() && 'saveAndRedirect' === $form->getClickedButton()->getName()) {
  214.                 if($parameters->get('redirectAditional')){
  215.                     return $this->redirectHandler->redirectToRoute($configuration$parameters->get('redirectAditional'), ['id'=> $resource->getId()]);
  216.                 }
  217.             }
  218.             return $this->redirectHandler->redirectToResource($configuration$resource);
  219.         }
  220.         if (in_array($request->getMethod(), ['POST''PUT''PATCH'], true) && $form->isSubmitted() && !$form->isValid()) {
  221.             $responseCode Response::HTTP_UNPROCESSABLE_ENTITY;
  222.         }
  223.         if (!$configuration->isHtmlRequest()) {
  224.             return $this->createRestView($configuration$formResponse::HTTP_BAD_REQUEST);
  225.         }
  226.         $initializeEvent $this->eventDispatcher->dispatchInitializeEvent(ResourceActions::UPDATE$configuration$resource);
  227.         $initializeEventResponse $initializeEvent->getResponse();
  228.         if (null !== $initializeEventResponse) {
  229.             return $initializeEventResponse;
  230.         }
  231.         return $this->render($configuration->getTemplate(ResourceActions::UPDATE '.html'), [
  232.             'configuration' => $configuration,
  233.             'metadata' => $this->metadata,
  234.             'resource' => $resource,
  235.             $this->metadata->getName() => $resource,
  236.             'form' => $form->createView(),
  237.         ], null$responseCode ?? Response::HTTP_OK);
  238.     }
  239.     public function cleanSessionDataAction(Request $request): Response
  240.     {
  241.         $session $request->getSession();
  242.         $cleanIframeTargetSessionData $request->get('cleanIframeTargetSessionData'false);
  243.         
  244.         if($cleanIframeTargetSessionData){
  245.             $session->remove("iframeTargetSessionData");
  246.         }
  247.         
  248.         return new JsonResponse([
  249.             'cleanSessionData' => true,
  250.             ]
  251.         );
  252.     }
  253. }