<?php
namespace App\EventSubscriber\Logger\ActivityLogger;
use App\Features\Core\ILogger;
use OSAdmin\Event\OSAdminActivityLogEvent;
use OSAdmin\Form\ExportData;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OsAdminEventSubscriber implements EventSubscriberInterface
{
public function __construct(private ILogger $activityLogger){}
public static function getSubscribedEvents(): array
{
return [
OSAdminActivityLogEvent::NAME => 'notifyActivity',
];
}
public function notifyActivity(OSAdminActivityLogEvent $event)
{
$entity= $event->getEntity();
$object= $event->getObject();
$action= $event->getAction();
$message= "";
if($action === OSAdminActivityLogEvent::ACTION_SHOW){
if($object){
$message= "Vous avez consulté l'élément ".$entity." : ".$object->getId();
}else{
$message= "Vous avez consulté l'élément ".$entity;
}
}
if($action === OSAdminActivityLogEvent::ACTION_DELETE){
if($object){
$message= "Vous avez supprimé l'élément ".$entity." : ".$object->getId();
}else{
$message= "Vous avez supprimé l'élément ".$entity;
}
}
if($action === OSAdminActivityLogEvent::ACTION_ADD){
if($object){
$message= "Vous avez ajouté l'élément ".$entity." : ".$object->getId();
}else{
$message= "Vous avez ajouté l'élément ".$entity;
}
}
if($action === OSAdminActivityLogEvent::ACTION_EDIT){
if($object){
$message= "Vous avez modifié l'élément ".$entity." : ".$object->getId();
}else{
$message= "Vous avez modifié l'élément ".$entity;
}
}
if($action === OSAdminActivityLogEvent::ACTION_ENABLED_DISABLED){
if($object){
$message= "Vous avez activité/désactivé l'élément ".$entity." : ".$object->getId();
}else{
$message= "Vous avez activité/désactivé l'élément ".$entity;
}
}
if($action === OSAdminActivityLogEvent::ACTION_LIST){
$message= "Vous avez consulté la liste des éléments ".$entity;
}
if($action === OSAdminActivityLogEvent::ACTION_EXPORT){
if($object instanceof ExportData){
$message= "Vous avez exporté la liste des éléments ".$entity." ayant les id suivant: ".(implode(",", $object->ids));
}else{
$message= "Vous avez exporté la liste des éléments ".$entity;
}
}
if($message && $action){
try{
$this->activityLogger->log($object??$entity, $action, $message);
}catch (\Exception $e){}
}
}
}