custom/plugins/NrbnBasketStore/src/Storefront/Page/NrbnBasketStore/NrbnBasketStorePageLoader.php line 47

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace NrbnBasketStore\Storefront\Page\NrbnBasketStore;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\RequestCriteriaBuilder;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Shopware\Storefront\Framework\Page\StorefrontSearchResult;
  11. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. class NrbnBasketStorePageLoader{
  15.     private GenericPageLoaderInterface $genericPageLoader;
  16.     private RequestCriteriaBuilder $requestCriteriaBuilder;
  17.     private EntityRepository $nrbnBasketStoreRepository;
  18.     public function __construct(
  19.         GenericPageLoaderInterface $genericPageLoader,
  20.         RequestCriteriaBuilder $requestCriteriaBuilder,
  21.         EntityRepository $nrbnBasketStoreRepository
  22.     ){
  23.         $this->genericPageLoader $genericPageLoader;
  24.         $this->requestCriteriaBuilder    $requestCriteriaBuilder;
  25.         $this->nrbnBasketStoreRepository $nrbnBasketStoreRepository;
  26.     }
  27.     public function load(Request $requestSalesChannelContext $context):NrbnBasketStorePage {
  28.         $page $this->genericPageLoader->load($request,$context);
  29.         /** @var NrbnBasketStorePage $page */
  30.         $page NrbnBasketStorePage::createFrom($page);
  31.             $page->setOrders(StorefrontSearchResult::createFrom($this->getOrders($request,$context)));
  32.         return $page;
  33.     }
  34.     private function getOrders(Request $requestSalesChannelContext $context): EntitySearchResult {
  35.         $criteria $this->createCriteria($request$context->getCustomer()->getId());
  36.         $routeRequest = new Request();
  37.         $routeRequest->query->replace($this->requestCriteriaBuilder->toArray($criteria));
  38.         return $this->nrbnBasketStoreRepository->search($criteria,$context->getContext());
  39.     }
  40.     private function createCriteria(Request $request$customerId): Criteria
  41.     {
  42.         $limit = (int)$request->query->get('limit'10);
  43.         $page  = (int)$request->query->get('p'1);
  44.         $criteria = (new Criteria())
  45.             ->setLimit($limit)
  46.             ->setOffset(($page 1) * $limit)
  47.             ->setTotalCountMode(Criteria::TOTAL_COUNT_MODE_NEXT_PAGES)
  48.             ->addAssociation('lineItems')
  49.             ->addAssociation('lineItems.cover');
  50.         $criteria->addSorting(new FieldSorting('createdAt',FieldSorting::DESCENDING));
  51.         $criteria->addFilter(new EqualsFilter('customerId'$customerId));
  52.         return $criteria;
  53.     }
  54. }