src/EventListener/CreditEventSubscriber.php line 74

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Event\CreditsSubtractedEvent;
  4. use App\Event\YearslotVacancyAddedEvent;
  5. use App\Sendgrid\Mailer;
  6. use App\Util\StringToEntityUtil;
  7. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class CreditEventSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @var Mailer
  13.      */
  14.     protected $mailer;
  15.     /**
  16.      * @var ParameterBagInterface
  17.      */
  18.     protected $parameterBag;
  19.     /**
  20.      * @var StringToEntityUtil
  21.      */
  22.     protected $stringToEntityUtil;
  23.     /**
  24.      * CreditEventSubscriber constructor.
  25.      */
  26.     public function __construct(
  27.         Mailer $mailer,
  28.         ParameterBagInterface $parameterBag,
  29.         StringToEntityUtil $stringToEntityUtil
  30.     ) {
  31.         $this->mailer $mailer;
  32.         $this->parameterBag $parameterBag;
  33.         $this->stringToEntityUtil $stringToEntityUtil;
  34.     }
  35.     /**
  36.      * Returns an array of event names this subscriber wants to listen to.
  37.      *
  38.      * The array keys are event names and the value can be:
  39.      *
  40.      *  * The method name to call (priority defaults to 0)
  41.      *  * An array composed of the method name to call and the priority
  42.      *  * An array of arrays composed of the method names to call and respective
  43.      *    priorities, or 0 if unset
  44.      *
  45.      * For instance:
  46.      *
  47.      *  * ['eventName' => 'methodName']
  48.      *  * ['eventName' => ['methodName', $priority]]
  49.      *  * ['eventName' => [['methodName1', $priority], ['methodName2']]]
  50.      *
  51.      * @return array The event names to listen to
  52.      */
  53.     public static function getSubscribedEvents()
  54.     {
  55.         return [
  56.             CreditsSubtractedEvent::class => 'onCreditsSubtracted',
  57.             YearslotVacancyAddedEvent::class => 'onYearslotVacancyAddition',
  58.         ];
  59.     }
  60.     public function onCreditsSubtracted(CreditsSubtractedEvent $event)
  61.     {
  62.         $this->mailCompany($event);
  63.         $this->bottomThresholdMail($event);
  64.     }
  65.     public function onYearslotVacancyAddition(YearslotVacancyAddedEvent $event)
  66.     {
  67.         $mailId $this->parameterBag->get('site_year_slot_mail_vacancy_added');
  68.         if (
  69.             !$event->shouldMail() ||
  70.             !$mailId ||
  71.             !$mail $this->stringToEntityUtil->stringToEntity($mailId)
  72.         ) {
  73.             return;
  74.         }
  75.         $this->mailer->mail(
  76.             $mail,
  77.             $this->parameterBag->get('site_company_email_address'),
  78.             [
  79.                 $this->parameterBag->get('site_company_email_address'),
  80.                 $event->getVacancy()->getCompany()->getEmail(),
  81.             ],
  82.             [
  83.                 'vacancy' => $event->getVacancy(),
  84.                 'vacancy_title' => $event->getVacancy()->getTitle(),
  85.                 'vacancy_site' => $event->getVacancy()->getSite() ? $event->getVacancy()->getSite()->getName() : null,
  86.                 'yearslot' => $event->getYearslot(),
  87.             ]
  88.         );
  89.     }
  90.     private function mailCompany(CreditsSubtractedEvent $event)
  91.     {
  92.         $mailId $this->parameterBag->get('site_credits_subtracted_by_vacancy_mail');
  93.         if (
  94.             !$event->shouldMail() ||
  95.             !$mailId ||
  96.             !$mail $this->stringToEntityUtil->stringToEntity($mailId)
  97.         ) {
  98.             return;
  99.         }
  100.         $company $event->getVacancy()->getCompany();
  101.         $this->mailer->mail(
  102.             $mail,
  103.             [$this->parameterBag->get('site_company_email_address') => $this->parameterBag->get('site_company_name')],
  104.             [
  105.                 $this->parameterBag->get('site_company_email_address'),
  106.                 $event->getVacancy()->getCompany()->getEmail(),
  107.             ],
  108.             [
  109.                 'vacancy' => $event->getVacancy(),
  110.                 'vacancy_featured' => $event->getVacancy()->isFeatured() ? VacancyEventListener::FEATURED_LABEL '',
  111.                 'vacancy_title' => $event->getVacancy()->getTitle(),
  112.                 'vacancy_site' => $event->getVacancy()->getSite() ? $event->getVacancy()->getSite()->getName() : null,
  113.                 'vacancy_reference_number' => $event->getVacancy()->getExternalReference(),
  114.                 'credits_subtracted' => $event->getCreditAmount(),
  115.                 'company_name' => $company $company->getName() : '',
  116.                 'company_department' => $company $company->getDepartment() : '',
  117.                 'company_contact_person' => $company $company->getContactPerson() : '',
  118.                 'company_email' => $company $company->getEmail() : '',
  119.                 'company_address' => $company $company->getAddress() : '',
  120.                 'company_zipcode' => $company $company->getZipcode() : '',
  121.                 'company_city' => $company $company->getCity() : '',
  122.                 'company_phone' => $company $company->getPhone() : '',
  123.                 'company_invoice_name' => $company $company->getInvoiceCompanyName() : '',
  124.                 'company_invoice_department' => $company $company->getInvoiceDepartment() : '',
  125.                 'company_invoice_contact_person' => $company $company->getInvoiceContactPerson() : '',
  126.                 'company_invoice_email' => $company $company->getInvoiceEmailAddress() : '',
  127.                 'company_invoice_address' => $company $company->getInvoiceAddress() : '',
  128.                 'company_invoice_zipcode' => $company $company->getInvoiceZipcode() : '',
  129.                 'company_invoice_city' => $company $company->getInvoiceCity() : '',
  130.                 'company_invoice_phone' => $company $company->getInvoicePhone() : '',
  131.                 'publication_date' => $event->getVacancy()->getStartDate() ? $event->getVacancy()->getStartDate()->format('d-m-Y H:i') : '',
  132.                 'expiration_date' => $event->getVacancy()->getEndDate() ? $event->getVacancy()->getEndDate()->format('d-m-Y H:i') : '',
  133.                 'order_type' => 'Credit',
  134.             ]
  135.         );
  136.     }
  137.     private function bottomThresholdMail(CreditsSubtractedEvent $event)
  138.     {
  139.         if (
  140.             empty($this->parameterBag->get('site_credits_bottom_threshold_mail')) ||
  141.             $event->getVacancy()->getCompany()->getCredits() !== $this->parameterBag->get('site_credits_bottom_threshold')
  142.         ) {
  143.             return;
  144.         }
  145.         $notificationMail $this->stringToEntityUtil->stringToEntity(
  146.             $this->parameterBag->get('site_credits_bottom_threshold_mail')
  147.         );
  148.         $this->mailer->mail(
  149.             $notificationMail,
  150.             [$this->parameterBag->get('site_company_email_address') => $this->parameterBag->get('site_company_name')],
  151.             [$this->parameterBag->get('site_company_email_address')],
  152.             [
  153.                 'vacancy' => $event->getVacancy(),
  154.                 'company' => $event->getVacancy()->getCompany(),
  155.                 'company_name' => $event->getVacancy()->getCompany() ? $event->getVacancy()->getCompany()->getName() : '',
  156.             ]
  157.         );
  158.     }
  159. }