src/Aqarmap/Bundle/CRMBundle/EventListener/CRMLeadListener.php line 63

Open in your IDE?
  1. <?php
  2. namespace Aqarmap\Bundle\CRMBundle\EventListener;
  3. use App\Exception\LogicHttpException;
  4. use Aqarmap\Bundle\FeatureToggleBundle\Service\FeatureToggleManager;
  5. use Aqarmap\Bundle\ListingBundle\Event\LeadEvent;
  6. use Aqarmap\Bundle\ListingBundle\Service\LeadsCRMService;
  7. use Aqarmap\Bundle\NotificationBundle\Types\LeadGenerated;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class CRMLeadListener implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var EntityManagerInterface
  16.      */
  17.     protected $em;
  18.     /**
  19.      * @var EventDispatcherInterface
  20.      */
  21.     protected $dispatcher;
  22.     /**
  23.      * @var FeatureToggleManager
  24.      */
  25.     protected $featuresToggleManager;
  26.     /**
  27.      * @var LeadsCRMService
  28.      */
  29.     private $leadsCRMService;
  30.     /**
  31.      * @var LoggerInterface
  32.      */
  33.     private $logger;
  34.     /**
  35.      * @var LeadGenerated
  36.      */
  37.     private $leadGenerated;
  38.     public function __construct(
  39.         EntityManagerInterface $em,
  40.         EventDispatcherInterface $dispatcher,
  41.         FeatureToggleManager $featuresToggleManager,
  42.         LeadsCRMService $leadsCRMService,
  43.         LoggerInterface $logger,
  44.         LeadGenerated $leadGenerated
  45.     ) {
  46.         $this->em $em;
  47.         $this->dispatcher $dispatcher;
  48.         $this->featuresToggleManager $featuresToggleManager;
  49.         $this->leadsCRMService $leadsCRMService;
  50.         $this->logger $logger;
  51.         $this->leadGenerated $leadGenerated;
  52.     }
  53.     public function onAddLead(LeadEvent $event): void
  54.     {
  55.         $listing $event->getListing();
  56.         if ($this->featuresToggleManager->isEnabled('web.leads.crm.sync')) {
  57.             try {
  58.                 $this->leadsCRMService->sendLead($listing$event->getLead());
  59.             } catch (LogicHttpException $e) {
  60.                 $this->logger->info(sprintf('CRM Lead Listener: %s'$e->getMessage()));
  61.             } catch (\Exception $e) {
  62.                 $this->logger->error(sprintf('CRM Lead Listener: %s'$e->getMessage()));
  63.             }
  64.         }
  65.         if ($this->featuresToggleManager->isEnabled('web.leads.generate.mail')) {
  66.             $this->dispatcher->dispatch($this->leadGenerated->setSubject($event->getLead()), 'lead.generated');
  67.         }
  68.     }
  69.     public static function getSubscribedEvents()
  70.     {
  71.         return [
  72.             'aqarmap.listing.lead.add' => ['onAddLead'],
  73.         ];
  74.     }
  75. }