src/Service/NotificationService.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use App\Entity\Notification;
  5. use App\Enum\NotificationActionEnum;
  6. use App\Enum\NotificationTypeEnum;
  7. use App\Enum\NotificationEnum;
  8. use App\Repository\UserRepository;
  9. use App\Repository\NotificationRepository;
  10. use App\Repository\NotificationTypeRepository;
  11. use App\Repository\UtilisateurMineRepository;
  12. use App\Repository\LogRepository;
  13. use App\Service\MailerService;
  14. use App\Service\FormulaireService;
  15. /*
  16. * SERVICE de notifications
  17. * TODO compléter
  18. *
  19. * une notification de type mail se voit attribuer le sujet du mail en libelle, le body en contenu et la cible du mail en user.
  20. */
  21. class NotificationService
  22. {
  23.   private $repo_notification;
  24.   public function __construct
  25.     NotificationRepository $repo_notificationNotificationTypeRepository $repo_type_notification
  26.     UtilisateurMineRepository $repo_user_res,
  27.     MailerService $mailerServiceFormulaireService $serv_formUserRepository $repo_user,
  28.     EntityManagerInterface $entityManagerLogRepository $repo_log) {
  29.     $this->entityManager                      $entityManager;
  30.     $this->repo_notification                  $repo_notification;
  31.     $this->repo_type_notification             $repo_type_notification;
  32.     $this->repo_user                          $repo_user;
  33.     $this->repo_user_res                      $repo_user_res;
  34.     $this->repo_log                           $repo_log;
  35.     $this->serv_form                          $serv_form;
  36.     $this->mailerService                      $mailerService;
  37.   }// function
  38.   /*
  39.   * Ajout d'une notification
  40.   * Action permet de determiner le type
  41.   *
  42.   * Apres chaque persist de notification la methode actionNotification est appelée
  43.   * et le type détermine la suite des opérations
  44.   */
  45.   public function addNotification($infos$action NotificationActionEnum::DEFAULT)
  46.   {
  47.     switch ($action) {
  48.       default:
  49.       case NotificationActionEnum::DEFAULT:
  50.         $notification = new Notification();
  51.         $type $this->repo_type_notification->find($infos['type']);
  52.         $notification->setNotificationType($type);
  53.         $notification->setLibelle($infos['libelle']); //Sujet
  54.         $notification->setContenu($infos['contenu']); //Contenu
  55.         if ($infos['url'] != null && $infos['url'] != "") {
  56.           $notification->setUrl($infos['url']); // Url si définie
  57.         }// if
  58.         $notification->setUser($infos['user']);
  59.         $notification->setMine($infos['mine']); 
  60.         $this->entityManager->persist($notification);
  61.         break;
  62.       case NotificationActionEnum::NEW_USER:
  63. /*
  64.         $notification = new Notification();
  65.         //les nouveaux users génères une notif de type mail (genre bienvenu)
  66.         $type = $this->repo_type_notification->find(NotificationTypeEnum::E_MAIL);
  67.         $notification->setNotificationType($type);
  68.         $notification->setLibelle(NotificationEnum::BIENVENUE['sujet'] . $infos->getPrenom());
  69.         $notification->setContenu(NotificationEnum::BIENVENUE['content']);
  70.         $notification->setUser($infos['user']); // TODO conditionner en fonction du role du user (peut etre)
  71.         $notification->setMine($infos['mine']); 
  72.         $this->entityManager->persist($notification); */
  73.         break;
  74.       case NotificationActionEnum::MAIL:
  75.         $notification = new Notification();
  76.         $type $this->repo_type_notification->find(NotificationTypeEnum::E_MAIL);
  77.         $notification->setNotificationType($type);
  78.         $notification->setLibelle($infos['libelle']); //Sujet
  79.         $notification->setContenu($infos['contenu']); //Contenu
  80.         $notification->setUser($infos['user']); 
  81.         $notification->setMine($infos['mine']); 
  82.         $this->entityManager->persist($notification);
  83.         break;
  84.       // 20220428 - LGA - Ajout d'une notification pour tous les utilisateurs d'une mine à la création prospect
  85.       case NotificationActionEnum::NEW_PROSPECT:
  86.         $mine      $infos['mine'];
  87.         $user           $infos['user'];
  88.         $type           $this->repo_type_notification->findOneBy(["name" => "inapp"]);
  89.         $libelle        $infos['libelle'];
  90.         $contenu        $infos['contenu'];
  91.         $url            $infos['url'];
  92.         $listUtilisateursRes $this->repo_user_res->findBy(["mine" => $mine->getId()]);
  93.     
  94.         foreach($listUtilisateursRes as $userRes) {
  95.     
  96.           // Envoi des notifications à tous les utilisateurs de la mine autre que l'utilisateur connecté
  97.           if ($user->getId() != $userRes->getUser()->getId()) {
  98.             $notification = new Notification();
  99.             $notification->setNotificationType($type);
  100.             $notification->setLibelle($libelle); //Sujet
  101.             $notification->setContenu($contenu); //Contenu
  102.             $notification->setUrl($url); //url
  103.             $notification->setUser($userRes->getUser()); 
  104.             $notification->setMine($mine); 
  105.             $this->entityManager->persist($notification);
  106.           }// if
  107.     
  108.         }// foreach
  109.     
  110.         break;
  111.       // 20220428 - LGA - Ajout d'une notification pour tous les utilisateurs concernés par un événement
  112.       case NotificationActionEnum::EVENEMENT:
  113.         $evenement      $infos['evenement'];
  114.         $user           $infos['user'];
  115.         $type           $infos['type'];
  116.         $libelle        $infos['libelle'];
  117.         $contenu        $infos['contenu'];
  118.         $url            $infos['url'];
  119.         $listUtilisateursEvt = [];
  120.         foreach($listUtilisateursEvt as $userEvt) {
  121.           // Envoi d'une notification aux utilisateurs concernés par l'événement sauf utilisateur courant
  122.           if ($userEvt->getUser()->getId() != $user->getId()) {
  123.             $notification = new Notification();
  124.             $notification->setNotificationType($type);
  125.             $notification->setLibelle($libelle); //Sujet
  126.             $notification->setContenu($contenu); //Contenu
  127.             if ($url != null && $url != "") {
  128.               $notification->setUrl($url); // Url si définie
  129.             }// if
  130.             $notification->setUser($userEvt->getUser());
  131.             $this->entityManager->persist($notification);
  132.           }// if
  133.     
  134.         }// foreach
  135.     
  136.         break;
  137.     }// switch
  138.     $this->entityManager->flush();
  139.     return 0;
  140.   }// function
  141.   /*
  142.   * ?
  143.   */
  144.   public function actionNotification($notification)
  145.   {
  146.     $typeId $notification->getNotificationType()->getId();
  147.     if ($typeId == NotificationTypeEnum::E_MAIL) {
  148.       $this->mailerService->sendEmail($notification->getLibelle(), $notification->getUser()->getEmail(), $notification->getContenu());
  149.     }// if
  150.     return true;
  151.   }
  152.   /*
  153.   * Notification lue
  154.   */
  155.   public function valideNotification($notifId)
  156.   {
  157.     $notification $this->repo_notification->find($notifId);
  158.     if (!$notification) {
  159.       return false;
  160.     };
  161.     $notification->setDateLue(new \DateTime());
  162.     $this->entityManager->flush();
  163.     return true;
  164.   }
  165.   /**
  166.    * Notifications d'un utilisateur par mine
  167.    */
  168.   public function getAllByResAndUser($mine$user) {
  169.     return $this->repo_notification->findBy([
  170.       "mine" => $mine,
  171.       "user" => $user,
  172.       "notificationType" => $this->repo_type_notification->find(\App\Enum\NotificationTypeEnum::IN_APP)
  173.     ], ['createdAt' => 'DESC']);
  174.     
  175.   }// function
  176.   /**
  177.    * Conversion de la liste des notifications pour ajax
  178.    * 20220428 - LGA - Ajout "order by" createdAt
  179.    * 20220505 - LGA - Ajout gestion mine
  180.    * @return array
  181.    */
  182.   public function getNonLuesForJsonByRes($mine$user) {
  183.     $liste          $this->repo_notification->findBy(
  184.       [
  185.         "mine"     => $mine
  186.         "user"          => $user
  187.         "dateLue"       => null 
  188.       ],
  189.       [
  190.         "createdAt" => "ASC",
  191.       ]);
  192.     
  193.     $tableau        = [];
  194.     foreach ($liste as $element) {
  195.       $ligne = [];
  196.       $ligne["date"] = $element->getCreatedAt()->format('Y-m-d H:i');
  197.       $ligne["id"] = $element->getId();
  198.       $ligne["notification_type"] = $element->getNotificationType()->getId();
  199.       if ($element->getContenu() != null && $element->getContenu() != "") {
  200.         $ligne["message"] = $element->getLibelle()." - ".$element->getContenu();
  201.       } else {
  202.         $ligne["message"] = $element->getLibelle();
  203.       }// if
  204.       $ligne["url"] = $element->getUrl();
  205.       $ligne["user"] = $this->repo_user->find($element->getCreatedBy())->getPrenom()." ".$this->repo_user->find($element->getCreatedBy())->getNom();
  206.       array_push($tableau$ligne);
  207.     }// foreach
  208.     return $tableau;
  209.   }// function
  210.   /**
  211.    * Notifications par user
  212.    */
  213.   public function getAllByUser($user) {
  214.     return $this->repo_notification->findBy([
  215.       "user" => $user,
  216.       "notificationType" => $this->repo_type_notification->find(\App\Enum\NotificationTypeEnum::IN_APP)
  217.     ], ['createdAt' => 'DESC']);
  218.   }// function
  219.   /**
  220.    * Conversion de la liste des notifications pour ajax
  221.    * 20220428 - LGA - Ajout "order by" createdAt
  222.    * @return array
  223.    */
  224.   public function getNonLuesForJson($user) {
  225.     $liste $this->repo_notification->findBy(["user" => $user"dateLue" => null ], ["createdAt" => "ASC"]);
  226.     $tableau = [];
  227.     foreach ($liste as $element) {
  228.       $ligne = [];
  229.       $ligne["date"] = $element->getCreatedAt()->format('Y-m-d H:i');
  230.       $ligne["id"] = $element->getId();
  231.       $ligne["notification_type"] = $element->getNotificationType()->getId();
  232.       if ($element->getContenu() != null && $element->getContenu() != "") {
  233.         $ligne["message"] = $element->getLibelle()." - ".$element->getContenu();
  234.       } else {
  235.         $ligne["message"] = $element->getLibelle();
  236.       }// if
  237.       $ligne["url"] = $element->getUrl();
  238.       array_push($tableau$ligne);
  239.     }// foreach
  240.     return $tableau;
  241.   }// function
  242. }// class