src/Component/Core/Shop/Controller/Vendor/IndexAction.php line 75

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\Core\Shop\Controller\Vendor;
  4. use BitBag\OpenMarketplace\Component\Elasticsearch\Finder\VendorProductsFinderInterface;
  5. use BitBag\OpenMarketplace\Component\Elasticsearch\Form\Resolver\ListProductsFacetsResolverInterface;
  6. use BitBag\OpenMarketplace\Component\Elasticsearch\Form\Type\ListProductsType;
  7. use BitBag\OpenMarketplace\Component\Elasticsearch\Provider\RedirectResponseProviderInterface;
  8. use BitBag\OpenMarketplace\Component\Organization\Checker\OrganizationStatusCheckerInterface;
  9. use BitBag\OpenMarketplace\Component\Vendor\Entity\VendorInterface;
  10. use BitBag\OpenMarketplace\Component\Vendor\Repository\VendorRepositoryInterface;
  11. use Sylius\Component\Core\Formatter\StringInflector;
  12. use Symfony\Component\Form\FormFactoryInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  16. use Twig\Environment;
  17. final class IndexAction
  18. {
  19.     public function __construct(
  20.         private VendorRepositoryInterface $vendorRepository,
  21.         private VendorProductsFinderInterface $vendorProductsFinder,
  22.         private Environment $twig,
  23.         private FormFactoryInterface $formFactory,
  24.         private ListProductsFacetsResolverInterface $facetsResolver,
  25.         private RedirectResponseProviderInterface $redirectResponseProvider,
  26.         private OrganizationStatusCheckerInterface $organizationStatusChecker,
  27.         ) {
  28.     }
  29.     public function __invoke(Request $request): Response
  30.     {
  31.         $vendorSlug $request->get('vendor_slug');
  32.         $redirectResponse $this->redirectResponseProvider->provide($request, [
  33.             'vendor_slug' => $vendorSlug,
  34.         ]);
  35.         if (null !== $redirectResponse) {
  36.             return $redirectResponse;
  37.         }
  38.         $vendor $this->vendorRepository->findOneBySlug($vendorSlug);
  39.         if (!$vendor instanceof VendorInterface || false === $vendor->isEnabled()) {
  40.             throw new NotFoundHttpException(sprintf('Vendor with slug "%s" was not found.'$vendorSlug));
  41.         }
  42.         $data = [
  43.             'vendor_name' => StringInflector::nameToLowercaseCode($vendor->getCompanyName() ?? ''),
  44.             'name' => null,
  45.         ];
  46.         $form $this->formFactory->create(ListProductsType::class, $data, [
  47.             'facets_resolver' => $this->facetsResolver,
  48.         ]);
  49.         $form->handleRequest($request);
  50.         $data array_merge(
  51.             $data,
  52.             $form->getData(),
  53.             $request->query->all(),
  54.         );
  55.         $products $this->vendorProductsFinder->find($data);
  56.         $organization $vendor->getOrganization();
  57.         $hasOwner $organization $this->organizationStatusChecker->hasOwner($organization) : false;
  58.         return new Response($this->twig->render('Context/Vendor/VendorPage/index.html.twig', [
  59.             'form' => $form->createView(),
  60.             'products' => $products,
  61.             'vendor' => $vendor,
  62.             'hasOwner' => $hasOwner,
  63.         ]));
  64.     }
  65. }