src/EventSubscriber/Logger/ActivityLogger/ProviderMessageEventSubscriber.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Logger\ActivityLogger;
  3. use App\Entity\Provider;
  4. use App\Features\Core\ILogger;
  5. use App\Features\ProviderMessage\Event\ProviderMessageBaseEvent;
  6. use App\Features\ProviderMessage\Event\ProviderMessageEmptyRecipientEvent;
  7. use App\Features\ProviderMessage\Event\ProviderMessageFailedEvent;
  8. use App\Features\ProviderMessage\Event\ProviderMessageFirstSentEvent;
  9. use App\Features\ProviderMessage\Event\ProviderMessageSentEvent;
  10. use Doctrine\Common\Collections\ArrayCollection;
  11. use OSAdmin\Event\OSAdminActivityLogEvent;
  12. use OSAdmin\Form\ExportData;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class ProviderMessageEventSubscriber implements EventSubscriberInterface
  15. {
  16.     public function __construct(private ILogger $activityLogger){}
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             ProviderMessageSentEvent::NAME => 'notify',
  21.             ProviderMessageFirstSentEvent::NAME => 'notify',
  22.             ProviderMessageFailedEvent::NAME => 'notify',
  23.             OSAdminActivityLogEvent::NAME => 'notifyActivity',
  24.         ];
  25.     }
  26.     public function notify(ProviderMessageBaseEvent $event): void
  27.     {
  28.         $message$event->getMessage();
  29.         $recipientIdarray_map(static fn(Provider $provider) => $provider->getId(), $event->getRecipients());
  30.         $suffix' au fournisseur suivant : '.implode(', '$recipientId);
  31.         $log = match ($event::NAME) {
  32.             ProviderMessageSentEvent::NAME => 'Vous avez envoyé le communiqué '.$message->getSubject().$suffix,
  33.             ProviderMessageFirstSentEvent::NAME => "Vous avez envoyé le communiqué ".$message->getSubject().$suffix,
  34.             ProviderMessageFailedEvent::NAME => "Vous avez échoué lors de l'envoi du communiqué ".$message->getSubject().$suffix,
  35.             ProviderMessageEmptyRecipientEvent::NAME => "Aucun destinataire trouvé pour le communiqué ".$message->getSubject(),
  36.         };
  37.         $this->activityLogger->log($message"Envoi de communiqué",$log);
  38.     }
  39.     public function notifyActivity(OSAdminActivityLogEvent $event)
  40.     {
  41.         $entity$event->getEntity();
  42.         $object$event->getObject();
  43.         $action$event->getAction();
  44.         $message"";
  45.         if($action === OSAdminActivityLogEvent::ACTION_SHOW){
  46.             if($object){
  47.                 $message"Vous avez consulté l'élément ".$entity." : ".$object->getId();
  48.             }else{
  49.                 $message"Vous avez consulté l'élément ".$entity;
  50.             }
  51.         }
  52.         if($action === OSAdminActivityLogEvent::ACTION_DELETE){
  53.             if($object){
  54.                 $message"Vous avez supprimé l'élément ".$entity." : ".$object->getId();
  55.             }else{
  56.                 $message"Vous avez supprimé l'élément ".$entity;
  57.             }
  58.         }
  59.         if($action === OSAdminActivityLogEvent::ACTION_ADD){
  60.             if($object){
  61.                 $message"Vous avez ajouté l'élément ".$entity." : ".$object->getId();
  62.             }else{
  63.                 $message"Vous avez ajouté l'élément ".$entity;
  64.             }
  65.         }
  66.         if($action === OSAdminActivityLogEvent::ACTION_EDIT){
  67.             if($object){
  68.                 $message"Vous avez modifié l'élément ".$entity." : ".$object->getId();
  69.             }else{
  70.                 $message"Vous avez modifié l'élément ".$entity;
  71.             }
  72.         }
  73.         if($action === OSAdminActivityLogEvent::ACTION_ENABLED_DISABLED){
  74.             if($object){
  75.                 $message"Vous avez activité/désactivé l'élément ".$entity." : ".$object->getId();
  76.             }else{
  77.                 $message"Vous avez activité/désactivé l'élément ".$entity;
  78.             }
  79.         }
  80.         if($action === OSAdminActivityLogEvent::ACTION_LIST){
  81.             $message"Vous avez consulté la liste des éléments ".$entity;
  82.         }
  83.         if($action === OSAdminActivityLogEvent::ACTION_EXPORT){
  84.             if($object instanceof ExportData){
  85.                 $message"Vous avez exporté la liste des éléments ".$entity." ayant les id suivant: ".(implode(","$object->ids));
  86.             }else{
  87.                 $message"Vous avez exporté la liste des éléments ".$entity;
  88.             }
  89.         }
  90.         if($message && $action){
  91.             try{
  92.                 $this->activityLogger->log($object??$entity$action$message);
  93.             }catch (\Exception $e){}
  94.         }
  95.     }
  96. }