src/FMT/Domain/Listener/UserListener.php line 116

Open in your IDE?
  1. <?php
  2. namespace FMT\Domain\Listener;
  3. use Doctrine\ORM\NonUniqueResultException;
  4. use Exception;
  5. use FMT\Data\Repository\UserRepository;
  6. use FMT\Data\Repository\UserSchoolShopperRepository;
  7. use FMT\Domain\Service\Cart\NebookService;
  8. use FMT\Data\Entity\User;
  9. use FMT\Domain\Event\UserEvent;
  10. use FMT\Infrastructure\Helper\NotificationHelper;
  11. use FOS\UserBundle\Model\UserInterface;
  12. use Monolog\Logger;
  13. use Psr\Log\LoggerInterface;
  14. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  15. use Twig\Environment;
  16. /**
  17.  * Class UserListener
  18.  * @package FMT\Application\Listener
  19.  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  20.  * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  21.  */
  22. class UserListener
  23. {
  24.     /**
  25.      * @var Logger
  26.      */
  27.     private $logger;
  28.     /**
  29.      * @var NebookService
  30.      */
  31.     private $nebookService;
  32.     /**
  33.      * @var Environment
  34.      */
  35.     private $parser;
  36.     /**
  37.      * @var TokenStorageInterface
  38.      */
  39.     private $tokenStorage;
  40.     private UserSchoolShopperRepository $userRepository;
  41.     /**
  42.      * UserListener constructor.
  43.      * @param LoggerInterface $logger
  44.      * @param NebookService $nebookService
  45.      */
  46.     public function __construct(
  47.         LoggerInterface $logger,
  48.         NebookService $nebookService,
  49.         UserSchoolShopperRepository $userSchoolShopperRepository
  50.     ) {
  51.         $this->logger $logger;
  52.         $this->nebookService $nebookService;
  53.         $this->userRepository $userSchoolShopperRepository;
  54.     }
  55.     /**
  56.      * @param TokenStorageInterface $tokenStorage
  57.      * @required
  58.      */
  59.     public function setTokenStorage(TokenStorageInterface $tokenStorage)
  60.     {
  61.         $this->tokenStorage $tokenStorage;
  62.     }
  63.     /**
  64.      * @param Environment  $engine
  65.      * @required
  66.      */
  67.     public function setEngine(Environment $engine)
  68.     {
  69.         $this->parser $engine;
  70.     }
  71.     /**
  72.      * @param UserEvent $event
  73.      * @return bool|null
  74.      * @throws NonUniqueResultException
  75.      */
  76.     public function onUserProfileUpdated(UserEvent $event)
  77.     {
  78.         $user $event->getUser();
  79.         if (!$user instanceof User || !$user->isStudent()) {
  80.             return false;
  81.         }
  82.         $shopper $user->getActiveShopper();
  83.         try {
  84.             if ($shopper && $shopper->getNebookId()) {
  85.                 $this->nebookService->updateShopper($user);
  86.             } else {
  87.                 $this->nebookService->createShopper($user);
  88.             }
  89.             return true;
  90.         } catch (Exception $e) {
  91.             $this->logger->error($e->getMessage());
  92.             $this->logger->debug($user);
  93.         }
  94.         return false;
  95.     }
  96.     /**
  97.      * @param UserEvent $event
  98.      */
  99.     public function onContactSignupInitiated(UserEvent $event)
  100.     {
  101.         $donor $event->getUser();
  102.         if (!$donor instanceof UserInterface || !$donor->isAnyDonor()) {
  103.             return;
  104.         }
  105.         try {
  106.             $message $this->parser->render('@Public/emails/donor_invitation.email.twig', [
  107.                 'donor' => $donor,
  108.                 'student' => $this->tokenStorage->getToken()->getUser(),
  109.             ]);
  110.             $recipient $donor->getProfile()->getEmail();
  111.             NotificationHelper::submitFromTemplate($message$recipient);
  112.         } catch (Exception $exception) {
  113.             $this->logger->error($exception->getMessage());
  114.         }
  115.     }
  116. }