vendor/store.shopware.com/viob2blogin/src/Storefront/Subscriber/OrderPageSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace VioB2BLogin\Storefront\Subscriber;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  5. use Shopware\Storefront\Event\RouteRequest\OrderRouteRequestEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use VioB2BLogin\Core\Services\AvailabilityService;
  8. use VioB2BLogin\Core\Services\PrivilegeService;
  9. use VioB2BLogin\Core\System\SalesChannel\Context\SalesChannelContextFactory;
  10. use VioB2BLogin\Entity\Employee\EmployeeEntity;
  11. use VioB2BLogin\Entity\Privilege\PrivilegeNames;
  12. use VioB2BLogin\Entity\Privilege\PrivilegeNamespaces;
  13. use VioB2BLogin\VioB2BLogin;
  14. class OrderPageSubscriber implements EventSubscriberInterface
  15. {
  16.     private PrivilegeService $privilegeService;
  17.     private AvailabilityService $availabilityService;
  18.     public function __construct(
  19.         PrivilegeService    $privilegeService,
  20.         AvailabilityService $availabilityService
  21.     )
  22.     {
  23.         $this->privilegeService $privilegeService;
  24.         $this->availabilityService $availabilityService;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             OrderRouteRequestEvent::class => 'onOrderRouteRequest'
  30.         ];
  31.     }
  32.     public function onOrderRouteRequest(OrderRouteRequestEvent $event): void
  33.     {
  34.         $context $event->getSalesChannelContext();
  35.         if (!$this->availabilityService->isEnabled($context)) {
  36.             return;
  37.         }
  38.         if (!$this->privilegeService->checkPrivilege($contextPrivilegeNamespaces::ORDERPrivilegeNames::LIST)) {
  39.             $employee $context->getExtensionOfType(SalesChannelContextFactory::EMPLOYEE_KEYEmployeeEntity::class);
  40.             if ($employee instanceof EmployeeEntity
  41.                 && $this->privilegeService->checkPrivilege($contextPrivilegeNamespaces::EMPLOYEE_ORDERPrivilegeNames::LIST)) {
  42.                 // include only own orders
  43.                 $event->getCriteria()->addFilter(new EqualsFilter('order.customFields.' VioB2BLogin::EMPLOYEE_FIELD$employee->getId()));
  44.             } else {
  45.                 // exclude all orders from result
  46.                 $event->getCriteria()->addFilter(new EqualsFilter('order.id'null));
  47.             }
  48.         }
  49.     }
  50. }