src/Component/Organization/EventListener/RemoveUserFromOrganizationEventListener.php line 38

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\Organization\EventListener;
  4. use BitBag\OpenMarketplace\Component\Vendor\Entity\ShopUserInterface as AppShopUserInterface;
  5. use BitBag\SyliusB2BPlugin\Entity\CustomerInterface;
  6. use BitBag\SyliusB2BPlugin\Entity\ShopUserInterface;
  7. use BitBag\SyliusB2BPlugin\Repository\CustomerRepositoryInterface;
  8. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  9. use Symfony\Component\HttpFoundation\RedirectResponse;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\HttpFoundation\Session\Session;
  12. use Symfony\Component\Routing\RouterInterface;
  13. use Webmozart\Assert\Assert;
  14. class RemoveUserFromOrganizationEventListener
  15. {
  16.     private const ORGANIZATION_INDEX_ROUTE 'bitbag_sylius_organization_plugin_shop_account_organization_index';
  17.     private RouterInterface $router;
  18.     private RequestStack $requestStack;
  19.     private CustomerRepositoryInterface $customerRepository;
  20.     public function __construct(
  21.         RouterInterface $router,
  22.         RequestStack $requestStack,
  23.         CustomerRepositoryInterface $customerRepository,
  24.         ) {
  25.         $this->router $router;
  26.         $this->requestStack $requestStack;
  27.         $this->customerRepository $customerRepository;
  28.     }
  29.     public function onRemoveUser(ResourceControllerEvent $event): void
  30.     {
  31.         $user $event->getSubject();
  32.         Assert::isInstanceOf($userShopUserInterface::class);
  33.         $this->removeOrganizationAndRoleFromUser($user);
  34.         $url $this->router->generate(self::ORGANIZATION_INDEX_ROUTE);
  35.         /** @var Session $session */
  36.         $session $this->requestStack->getSession();
  37.         $session->getFlashBag()->add('success''bitbag_sylius_organization_plugin.user.removed');
  38.         $event->setResponse(new RedirectResponse($url));
  39.     }
  40.     private function removeOrganizationAndRoleFromUser(ShopUserInterface $user): void
  41.     {
  42.         /** @var CustomerInterface $customer */
  43.         $customer $user->getCustomer();
  44.         if (null === $customer->getOrganization()) {
  45.             return;
  46.         }
  47.         $customer->setOrganization(null);
  48.         $user->setEnabled(false);
  49.         /** @var AppShopUserInterface $shopUser */
  50.         $shopUser $customer->getUser();
  51.         foreach ($shopUser->getRoles() as $userRole) {
  52.             $shopUser->removeRole($userRole);
  53.         }
  54.         $this->customerRepository->add($customer);
  55.     }
  56. }