<?php
namespace App\Event;
use Swift_Attachment;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twig\Environment;
class EmailSendingSubscriber implements EventSubscriberInterface
{
private $mailer;
private $twig;
/**
* @param \Swift_Mailer $mailer
*/
public function __construct(\Swift_Mailer $mailer, Environment $environment)
{
$this->mailer = $mailer;
$this->twig = $environment;
}
public static function getSubscribedEvents()
{
return [
EmailEvent::REMOVE_MISSION => 'onDeleteMission',
EmailEvent::USER_ACTION => 'onUserAction',
EmailEvent::CHANGE_DATE => 'onChangeDate',
EmailEvent::REST_PASSWORD => 'onChangePassword',
EmailEvent::INTERRUPT_MISSION => 'onInterruptMission',
EmailEvent::AFFECT_CANDIDAT => 'onAffectCandidat',
EmailEvent::ACCEPT_INTERVIEW => 'onAcceptInterview',
EmailEvent::REJECT_INTERVIEW => 'onRejectInterview',
EmailEvent::REJECT_INTERVIEW_RECRUITER => 'onRejectInterviewRecrteur',
EmailEvent::ADD_MISSION => 'onAddMission',
EmailEvent::INTERRUPT_MISSION_RECRUITER => 'onInterruptMissionRecruiter',
EmailEvent::ADMIN_CONTRAT => 'onSendContrat',
EmailEvent::PASSWORD_CHANGED => 'onPasswordChanged',
EmailEvent::ADD_INTERVIEW => 'onAddInterview',
EmailEvent::MISSION_REJECT_CONDIDAT => 'onRejectMissionCondidat',
EmailEvent::MISSION_HIRE_CONDIDAT => 'onHireMissionCondidat',
EmailEvent::CANDIDAT_INSCRIPTION => 'onCreateCandidat',
EmailEvent::MISSION_AFFECTED => 'onAffectMission',
EmailEvent::RECRUITER_CONTRAT => 'onSendToRecruiter',
EmailEvent::RECRUITEMENT_FOR_MISSION => 'onRecruteForMission',
EmailEvent::PREFERRED_MISSION => 'onPreferedMission',
];
}
public function onPreferedMission(EmailEvent $event)
{
$param = $event->getParam();
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/mission_prefere_admin.html.twig'
],
[
'email' => $event->getUser()->getEmail(),
'email_template' => 'email_templates/mission_prefere_condidat.html.twig'
],
];
foreach ($receivers as $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject("mission préférée")
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'condidat' => $event->getUser()->getProfil()->getLastname() . ' ' . $event->getUser()->getProfil()->getName(),
'type_mission' => $param['type_mission'],
'place' => $param['place'],
'skills' => 'test',
'skills' => implode(",", $param['skills']),
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onSendToRecruiter(EmailEvent $event)
{
$files = $event->getParam();
$user = $event->getUser();
$email_template = 'email_templates/recuiter_contrat.html.twig';
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($user->getEmail())
->setSubject("Contrat")
->setContentType('text/html')
->setBody(
$this->twig->render(
$email_template,
$params = [
'full_name' => $files['company_name'],
]
),
'text/html'
);
foreach ($files as $key => $file) {
if ($key != "company_name") {
$mail->attach(
Swift_Attachment::fromPath($files[$key]->getPathName())->setFilename($files[$key]->getClientOriginalName())
);
}
}
$this->mailer->send($mail);
}
public function onDeleteMission(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo('talent@agence-inspire.com')
->setSubject('Suppression d’une mission')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/email_delete_mission.html.twig',
[
'title' => $param->getTitle(),
'recruiter' => $param->getEntreprise()->getCompanyName()
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onUserAction(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
if ($param['action'] == "accept") {
$template = 'email_templates/user_action_accept.html.twig';
$subject = "Confirmation de création de compte";
} else {
$template = 'email_templates/user_action_refuse.html.twig';
$subject = "Refus d’inscription";
}
if (in_array('ROLE_RECR', $user->getRoles())) {
$userName = $user->getEmail();
} elseif (in_array('ROLE_USER', $user->getRoles())) {
$userName = $user->getEmail();
}
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($user->getEmail())
->setSubject($subject)
->setContentType('text/html')
->setBody(
$this->twig->render(
$template,
[
'message' => $param['message'],
'username' => $userName,
'password' => $user->getPassword()
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onAffectMission(EmailEvent $event)
{
$params = $event->getParam();
$date_end = $params['mission_end'];
$date_start = $params['mission_start'];
$user = $event->getUser();
$email_template = count($params['nbr_terminatedMissions']) > 0 ? 'email_templates/first_mission.html.twig' : 'email_templates/relance_mission.html.twig';
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($user->getEmail())
->setSubject("Affectation Mission")
->setContentType('text/html')
->setBody(
$this->twig->render(
$email_template,
$params = [
'user_name' => $user->getUsername(),
'mission_title' => $params['mission_title'],
'mission_start' => $date_start,
'mission_end' => $date_end,
'place' => $params['place'],
'mission_description' => $params['mission_description'],
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onChangeDate(EmailEvent $event)
{
$param = $event->getParam();
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/admin_user_change_date.html.twig'
],
[
'email' => $param['recuiter'],
'email_template' => 'email_templates/user_change_date.html.twig'
],
];
foreach ($receivers as $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject("Demande du report de rendez-vous")
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'raison' => $param['raison'],
'name' => $param['mission']->getEntreprise()->getCompanyName(),
'interview_first_date' => $param['interview']->getFirstDate()->format('Y-m-d H:i:s'),
'title' => $param['mission']->getTitle(),
'condidat' => $param['condidat']->getProfil()->getLastname() . ' ' . $param['condidat']->getProfil()->getName()
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onChangePassword(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($user->getEmail())
->setSubject('changer mot de passe !')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/reset_password.html.twig',
['param' => $param]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onPasswordChanged(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($user->getEmail())
->setSubject('Changement du mot de passe')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/password_changed.html.twig',
[
'login_url' => $param
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onInterruptMission(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$users = [$user->getEmail()];
foreach ($param[1] as $profil) {
array_push($users, $profil['email']);
}
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($users)
->setSubject('mission a été interrompue')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/admin_interruped_mission.html.twig',
[
'param' => $param[0],
'mission_title' => $param[0]->getTitle(),
'name' => $param[0]->getEntreprise()->getCompanyName()
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onInterruptMissionRecruiter(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$users = ['talent@agence-inspire.com', 'talent@agence-inspire.com'];
foreach ($param[1] as $profil) {
array_push($users, $profil['email']);
}
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($users)
->setSubject('Interruption d’une mission')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/interruped_mission.html.twig',
[
'mission_title' => $param[0]->getTitle(),
'recuiter_name' => $param[0]->getEntreprise()->getCompanyName()
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onAffectCandidat(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$receivers = [
[
'email' => $param['mission']->getEntreprise()->getEmail(),
'email_template' => 'email_templates/admin_affect_candidat.html.twig'
],
[
'email' => $param['profil']->getEmail(),
'email_template' => 'email_templates/condidat_affect_candidat.html.twig'
],
];
foreach ($receivers as $key => $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject('Assignation d’un nouveau candidat')
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'param' => $param,
'condidat' => $param['profil']->getEmail(),
'name' => $param['mission']->getTitle()
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onAcceptInterview(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
if (in_array('ROLE_RECR', $user->getRoles())) {
$condidatFullName = $param->getEntreprise()->getFullName();
} elseif (in_array('ROLE_USER', $user->getRoles())) {
$condidatFullName = $user->getProfil()->getLastname() . ' ' . $user->getProfil()->getName();
}
//admin + recruter
$receivers = ['talent@agence-inspire.com', $param->getEntreprise()->getEmail()];
foreach ($receivers as $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
//->setTo($user->getEmail())
->setTo($receiver)
->setSubject('Date d’entretien acceptée')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/accept_interview.html.twig',
[
'param' => $param,
'condidat_full_name' => $condidatFullName,
'mission_date' => $param->getDateStart()->format('Y-m-d H:i:s'),
'mission_title' => $param->getTitle(),
'name' => $param->getEntreprise()->getCompanyName()
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onAddInterview(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/add_interview.html.twig'
],
[
'email' => $param['condidat']->getEmail(),
'email_template' => 'email_templates/condidat_add_interview.html.twig'
]
];
foreach ($receivers as $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject('Proposition d’un nouveau rendez-vous')
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'first_date' => $param['interview']->getFirstDate()->format('Y-m-d H:i:s'),
'second_date' => $param['interview']->getSecondDate()->format('Y-m-d H:i:s'),
'user_interviews_url' => $param['interviewUrl'] . $param['condidat']->getId(),
'condidat_full_name' => $param['condidat']->getProfil()->getLastname() . ' ' . $param['condidat']->getProfil()->getName(),
'mission_title' => $param['mission']->getTitle(),
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onRejectMissionCondidat(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo([$user->getEmail()])
->setSubject('Rejet de recrutement')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/mission_reject_condidat.html.twig',
[
'recruiter' => $param['mission']->getEntreprise()->getCompanyName(),
'title' => $param['mission']->getTitle(),
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onRecruteForMission(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
if ($param['status'] == "recruited") {
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/recrute_for_mission_admin.html.twig'
],
[
'email' => $user->getEmail(),
'email_template' => 'email_templates/recrute_for_mission_condidat.html.twig'
],
[
'email' => $param['mission']->getEntreprise()->getEmail(),
'email_template' => 'email_templates/recrute_for_mission_recruiter.html.twig'
],
];
$subject = "Recrutement à une nouvelle mission";
} elseif ($param['status'] == "rejected") {
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/recrute_for_mission_admin_rejected.html.twig'
],
[
'email' => $user->getEmail(),
'email_template' => 'email_templates/recrute_for_mission_condidat_rejected.html.twig'
],
[
'email' => $param['mission']->getEntreprise()->getEmail(),
'email_template' => 'email_templates/recrute_for_mission_recruiter_rejected.html.twig'
],
];
$subject = "Rejet de recrutement";
}
foreach ($receivers as $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject($subject)
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'recruiter' => $param['mission']->getEntreprise()->getCompanyName(),
'title' => $param['mission']->getTitle(),
'condidat' => $user->getProfil()->getName() . ' ' . $user->getProfil()->getLastname()
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onHireMissionCondidat(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$receivers = [
[
'email' => $user->getEmail(),
'email_template' => 'email_templates/mission_hire_condidat.html.twig'
],
[
'email' => $param['mission']->getEntreprise()->getEmail(),
'email_template' => 'email_templates/recruiter_mission_hire_condidat.html.twig'
],
];
foreach ($receivers as $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject('Recrutement à une nouvelle mission')
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'recruiter' => $param['mission']->getEntreprise()->getCompanyName(),
'title' => $param['mission']->getTitle(),
'condidat' => $user->getProfil()->getName() . ' ' . $user->getProfil()->getLastname()
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onRejectInterview(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/admin_user_reject_interview.html.twig'
],
[
'email' => $user->getEmail(),
'email_template' => 'email_templates/user_reject_interview.html.twig'
],
];
foreach ($receivers as $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject('Rejet d’un entretien')
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'raison' => $param['raison'],
'name' => $param['mission']->getEntreprise()->getCompanyName(),
'title' => $param['mission']->getTitle(),
'condidat' => $param['condidat'],
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onRejectInterviewRecrteur(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo(['talent@agence-inspire.com', $param['profil']['email']])
->setSubject('Rejet d’un entretien')
->setContentType('text/html')
->setBody(
$this->twig->render(
'email_templates/recruiter_reject_Interview.html.twig',
[
'raison' => $param['raison'],
'title' => $param['mission']->getTitle(),
'recruiter' => $param['mission']->getEntreprise()->getCompanyName()
]
),
'text/html'
);
$this->mailer->send($mail);
}
public function onAddMission(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/admin_add_mission.html.twig'
],
[
'email' => $user->getEmail(),
'email_template' => 'email_templates/add_mission.html.twig'
],
];
foreach ($receivers as $key => $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject('Ajout d’une mission de la part du recruteur')
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'recruiter' => $user->getEntreprise()->getCompanyName(),
'title' => $param->getTitle()
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onCreateCandidat(EmailEvent $event)
{
$user = $event->getUser();
$param = $event->getParam();
$receivers = [
[
'email' => 'talent@agence-inspire.com',
'email_template' => 'email_templates/admin_create_candidat.html.twig'
],
[
'email' => $user->getEmail(),
'email_template' => 'email_templates/create_candidat.html.twig'
],
];
foreach ($receivers as $key => $receiver) {
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($receiver['email'])
->setSubject('Nouvelle demande d’inscription')
->setContentType('text/html')
->setBody(
$this->twig->render(
$receiver['email_template'],
[
'email' => $user->getEmail(),
'type' => $param['type'],
'condidat_name' => $user->getProfil() ? $user->getProfil()->getName() . ' ' . $user->getProfil()->getLastname() : $user->getEntreprise()->getFullName()
]
),
'text/html'
);
$this->mailer->send($mail);
}
}
public function onSendContrat(EmailEvent $event)
{
$files = $event->getParam();
$user = $event->getUser();
$email_template = 'email_templates/contrat.html.twig';
$mail = (new \Swift_Message())
->setFrom(['no-reply@agence-inspire.com' => 'Inspire Talent'])
->setTo($user->getEmail())
->setSubject("Contrat")
->setContentType('text/html')
->setBody(
$this->twig->render(
$email_template,
$params = [
'full_name' => $user->getProfil()->getUsername(),
]
),
'text/html'
);
foreach ($files as $key => $file) {
$mail->attach(
Swift_Attachment::fromPath($files[$key]->getPathName())->setFilename($files[$key]->getClientOriginalName())
);
}
$this->mailer->send($mail);
}
}