src/Listener/V2/AppEventSubscriber.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Listener\V2;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use App\Entity;
  5. use App\Event;
  6. /**
  7.  * Met à jour les meta data des utilisateurs avec les events custom de l'app
  8.  * Fais les majs des meta data avec des native query pour sortir du lifecycle
  9.  */
  10. class AppEventSubscriber implements EventSubscriberInterface
  11. {
  12.   protected $mailjet;
  13.   public function __construct(\App\Service\Mailjet $mailjet)
  14.   {
  15.     $this->mailjet $mailjet;
  16.   }
  17.   public static function getSubscribedEvents()
  18.   {
  19.     return [
  20.       Event\UserLoginEvent::NAME  => ['onAppUserLogin'0],
  21.       Event\UserActionEvent::NAME => ['onAppUserAction'0],
  22.       Event\EmailSentEvent::NAME  => ['onAppEmailSent'0],
  23.     ];
  24.   }
  25.   /**
  26.    * Quand un utilisateur se log (utilisé aussi quand il clique sur un lien)
  27.    */
  28.   public function onAppUserLogin(Event\UserLoginEvent $event)
  29.   {
  30.     $em   $event->getEntityManager();
  31.     $user $event->getUser();
  32.     if ($user instanceof Entity\User) {
  33.       $date = new \DateTime('now');
  34.       $date $date->format('Y-m-d H:i:s');
  35.       $em->getConnection()->prepare("INSERT INTO user_meta_data
  36.         SET last_connection = '" $date "',
  37.         user_id = '" $user->getId() . "'
  38.         ON DUPLICATE KEY UPDATE
  39.         last_connection = '" $date "'
  40.       ")->execute();
  41.       // Mailetjet dernière connexion
  42.       $this->mailjet->updateContacts($user, [
  43.         'derniere_connexion' => time()
  44.       ]);
  45.     }
  46.   }
  47.   /**
  48.    * Quand un utilisateur fait une action
  49.    */
  50.   public function onAppUserAction(Event\UserActionEvent $event)
  51.   {
  52.     $em     $event->getEntityManager();
  53.     $user   $event->getUser();
  54.     $action $event->getAction();
  55.     if ($user instanceof Entity\User) {
  56.       $date = new \DateTime('now');
  57.       $date $date->format('Y-m-d H:i:s');
  58.       $em->getConnection()->prepare("INSERT INTO user_meta_data
  59.         SET last_action = '" $action "',
  60.         last_action_date = '" $date "',
  61.         user_id = '" $user->getId() . "'
  62.         ON DUPLICATE KEY UPDATE
  63.         last_action = '" $action "',
  64.         last_action_date = '" $date "'
  65.       ")->execute();
  66.     }
  67.   }
  68.   /**
  69.    * Quand un mail est reçu
  70.    */
  71.   public function onAppEmailSent(Event\EmailSentEvent $event)
  72.   {
  73.     $em      $event->getEntityManager();
  74.     $dests   $event->getDests();
  75.     $subject $event->getSubject();
  76.     $subject addslashes($subject);
  77.     foreach ($dests as $email => $user) {
  78.       if ($user instanceof Entity\User) {
  79.         $date = new \DateTime('now');
  80.         $date $date->format('Y-m-d H:i:s');
  81.         $em->getConnection()->prepare("INSERT INTO user_meta_data
  82.           SET last_received_email = '" $subject "',
  83.           last_received_email_date = '" $date "',
  84.           user_id = '" $user->getId() . "'
  85.           ON DUPLICATE KEY UPDATE
  86.           last_received_email = '" $subject "',
  87.           last_received_email_date = '" $date "'
  88.         ")->execute();
  89.       }
  90.     }
  91.   }
  92. }