src/Controller/Bikers/ArticlesController.php line 151

Open in your IDE?
  1. <?php
  2. namespace BitBag\OpenMarketplace\Controller\Bikers;
  3. use BitBag\OpenMarketplace\Entity\ArticleInterface;
  4. use BitBag\OpenMarketplace\Repository\ArticleExtensionRepositoryInterface;
  5. use BitBag\OpenMarketplace\Repository\ProductListing\ProductDraftRepository;
  6. use BitBag\OpenMarketplace\Repository\ProductListing\ProductListingRepositoryInterface;
  7. use BitBag\OpenMarketplace\Repository\ProductRepositoryInterface;
  8. use Doctrine\Persistence\ObjectManager;
  9. use Odiseo\SyliusBlogPlugin\Repository\ArticleRepositoryInterface;
  10. use Sylius\Bundle\ResourceBundle\Controller\AuthorizationCheckerInterface;
  11. use Sylius\Bundle\ResourceBundle\Controller\EventDispatcherInterface;
  12. use Sylius\Bundle\ResourceBundle\Controller\FlashHelperInterface;
  13. use Sylius\Bundle\ResourceBundle\Controller\NewResourceFactoryInterface;
  14. use Sylius\Bundle\ResourceBundle\Controller\RedirectHandlerInterface;
  15. use Sylius\Bundle\ResourceBundle\Controller\RequestConfigurationFactoryInterface;
  16. use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
  17. use Sylius\Bundle\ResourceBundle\Controller\ResourceDeleteHandlerInterface;
  18. use Sylius\Bundle\ResourceBundle\Controller\ResourceFormFactoryInterface;
  19. use Sylius\Bundle\ResourceBundle\Controller\ResourcesCollectionProviderInterface;
  20. use Sylius\Bundle\ResourceBundle\Controller\ResourceUpdateHandlerInterface;
  21. use Sylius\Bundle\ResourceBundle\Controller\SingleResourceProviderInterface;
  22. use Sylius\Bundle\ResourceBundle\Controller\StateMachineInterface;
  23. use Sylius\Bundle\ResourceBundle\Controller\ViewHandlerInterface;
  24. use Sylius\Component\Resource\Factory\FactoryInterface;
  25. use Sylius\Component\Resource\Metadata\MetadataInterface;
  26. use Sylius\Component\Resource\Repository\RepositoryInterface;
  27. use Sylius\Component\Resource\ResourceActions;
  28. use Sylius\Component\Taxonomy\Repository\TaxonRepositoryInterface;
  29. use Sylius\Component\User\Model\UserInterface;
  30. use Symfony\Component\HttpFoundation\Request;
  31. use Symfony\Component\HttpFoundation\Response;
  32. use Symfony\Component\HttpFoundation\RequestStack;
  33. class ArticlesController extends ResourceController
  34. {
  35.     private $articleRepository;
  36.     public function __construct(
  37.         MetadataInterface $metadata,
  38.         RequestConfigurationFactoryInterface $requestConfigurationFactory,
  39.         ?ViewHandlerInterface $viewHandler,
  40.         RepositoryInterface $repository,
  41.         FactoryInterface $factory,
  42.         NewResourceFactoryInterface $newResourceFactory,
  43.         ObjectManager $manager,
  44.         SingleResourceProviderInterface $singleResourceProvider,
  45.         ResourcesCollectionProviderInterface $resourcesFinder,
  46.         ResourceFormFactoryInterface $resourceFormFactory,
  47.         RedirectHandlerInterface $redirectHandler,
  48.         FlashHelperInterface $flashHelper,
  49.         AuthorizationCheckerInterface $authorizationChecker,
  50.         EventDispatcherInterface $eventDispatcher,
  51.         ?StateMachineInterface $stateMachine,
  52.         ResourceUpdateHandlerInterface $resourceUpdateHandler,
  53.         ResourceDeleteHandlerInterface $resourceDeleteHandler,
  54.         ArticleExtensionRepositoryInterface $articleRepository
  55.     ) {
  56.         parent::__construct(
  57.             $metadata,
  58.             $requestConfigurationFactory,
  59.             $viewHandler,
  60.             $repository,
  61.             $factory,
  62.             $newResourceFactory,
  63.             $manager,
  64.             $singleResourceProvider,
  65.             $resourcesFinder,
  66.             $resourceFormFactory,
  67.             $redirectHandler,
  68.             $flashHelper,
  69.             $authorizationChecker,
  70.             $eventDispatcher,
  71.             $stateMachine,
  72.             $resourceUpdateHandler,
  73.             $resourceDeleteHandler,
  74.         );
  75.         $this->articleRepository $articleRepository;
  76.     }
  77.     public function indexAction(Request $request): Response
  78.     {
  79.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  80.         $this->isGrantedOr403($configurationResourceActions::INDEX);
  81.         $resources $this->resourcesCollectionProvider->get($configuration$this->repository);
  82.         $event $this->eventDispatcher->dispatchMultiple(ResourceActions::INDEX$configuration$resources);
  83.         $eventResponse $event->getResponse();
  84.         if (null !== $eventResponse) {
  85.             return $eventResponse;
  86.         }
  87.         if ($configuration->isHtmlRequest()) {
  88.             return $this->render($configuration->getTemplate(ResourceActions::INDEX '.html'), [
  89.                 'configuration' => $configuration,
  90.                 'metadata' => $this->metadata,
  91.                 'resources' => $resources,
  92.                 $this->metadata->getPluralName  () => $resources,
  93.             ]);
  94.         }
  95.         return $this->createRestView($configuration$resources);
  96.     }
  97.     public function indexPageAction(Request $requestRequestStack $requestStack): Response
  98.     {
  99. //        dd($request);
  100.         $page $request->query->getInt('page');
  101.         if ($page === 0) {
  102.             $page 1;
  103.         }
  104.         $articlesPerPage 6// Nombre d'articles par page
  105.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  106.         $this->isGrantedOr403($configurationResourceActions::INDEX);
  107.         $resources $this->resourcesCollectionProvider->get($configuration$this->repository);
  108.         $totalPages ceil(count($resources) / $articlesPerPage); // Nombre total de pages
  109.         $offset = ($page 1) * $articlesPerPage// Calculer le décalage (offset) en fonction de la page sélectionnée
  110.         $paginatedArticles array_slice($resources$offset$articlesPerPage); // Récupérer les articles pour la page sélectionnée
  111.         $event $this->eventDispatcher->dispatchMultiple(ResourceActions::INDEX$configuration$resources);
  112.         $eventResponse $event->getResponse();
  113.         if (null !== $eventResponse) {
  114.             return $eventResponse;
  115.         }
  116.         if ($configuration->isHtmlRequest()) {
  117.             return $this->render($configuration->getTemplate(ResourceActions::INDEX '.html'), [
  118.                 'configuration' => $configuration,
  119.                 'metadata' => $this->metadata,
  120.                 'resources' => $resources,
  121.                 'articlesPage' => $paginatedArticles,
  122.                 'currentPage' => $page,
  123.                 'totalPages' => $totalPages,
  124.                 $this->metadata->getPluralName  () => $resources,
  125.             ]);
  126.         }
  127.         return $this->createRestView($configuration$resources);
  128.     }
  129.     public function showAction(Request $request): Response
  130.     {
  131.         $configuration $this->requestConfigurationFactory->create($this->metadata$request);
  132.         $this->isGrantedOr403($configurationResourceActions::SHOW);
  133.         $resource $this->findOr404($configuration);
  134.         $event $this->eventDispatcher->dispatch(ResourceActions::SHOW$configuration$resource);
  135.         $eventResponse $event->getResponse();
  136.         if (null !== $eventResponse) {
  137.             return $eventResponse;
  138.         }
  139.         if ($configuration->isHtmlRequest()) {
  140.             return $this->render($configuration->getTemplate(ResourceActions::SHOW '.html'), [
  141.                 'configuration' => $configuration,
  142.                 'metadata' => $this->metadata,
  143.                 'resource' => $resource,
  144.                 $this->metadata->getName() => $resource,
  145.             ]);
  146.         }
  147.         return $this->createRestView($configuration$resource);
  148.     }
  149. }