src/Logging/Activity/PlanningResourceLog.php line 21

Open in your IDE?
  1. <?php
  2. //----------------------------------------------------------------------
  3. // src/Logging/PlanningResourceLog.php
  4. //----------------------------------------------------------------------
  5. namespace App\Logging\Activity;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use App\Entity\Planning\PlanningResource;
  8. use App\Logging\Tools;
  9. use App\Services\LogTools;
  10. class PlanningResourceLog
  11. {
  12.     private array $pendingLogArgs = [];
  13.     public function __construct(ManagerRegistry $doctrine, LogTools $logTools, Tools $tools)
  14.     {
  15.         $this->em = $doctrine->getManager();
  16.         $this->logTools = $logTools;
  17.         $this->tools = $tools;
  18.     }
  19.     public function logCreation(PlanningResource $planningResource)
  20.     {
  21.         $pendingLogArgs = [];
  22.         //----------------------------------------------------------------------
  23.         // Fetch eventual info stored in the object
  24.         $loggingData = $this->logTools->handleLoggingData($planningResource);
  25.         $info = $loggingData['info'];
  26.         $specialAuthor = $loggingData['special_author'];
  27.         $ignore = $loggingData['ignore'];
  28.         if ($ignore) return $pendingLogArgs;
  29.         //----------------------------------------------------------------------
  30.         // Init base log args
  31.         // This does not contain action
  32.         $args = $this->initArgs($planningResource, $loggingData);
  33.         //----------------------------------------------------------------------
  34.         $action = "planning_resource_add";
  35.         $args["action"] = $action;
  36.         $pendingLogArgs[] = $args;
  37.         return $pendingLogArgs;
  38.     }
  39.     public function logChanges(PlanningResource $planningResource, $changes)
  40.     {
  41.         $pendingLogArgs = [];
  42.         //----------------------------------------------------------------------
  43.         // Fetch eventual info skeletond in the object
  44.         $loggingData = $this->logTools->handleLoggingData($planningResource);
  45.         $info = $loggingData['info'];
  46.         $specialAuthor = $loggingData['special_author'];
  47.         $ignore = $loggingData['ignore'];
  48.         if ($ignore) return $pendingLogArgs;
  49.         //----------------------------------------------------------------------
  50.         // Init base log args
  51.         // This does not contain action
  52.         $args = $this->initArgs($planningResource, $loggingData);
  53.         //----------------------------------------------------------------------
  54.         $action = "planning_resource_edit";
  55.         $basicChanges = array(
  56.             "title",
  57.             "isActive",
  58.         );
  59.         // Method getLogLabel() should be defined for these objects/entities
  60.         $objectChanges = array(
  61.             "society",
  62.             "access",
  63.         );
  64.         // See what changed and log (members first)
  65.         foreach ($changes as $key => $change)
  66.         {
  67.             // Something to skip ?
  68.             if (false)
  69.             {
  70.                 continue;
  71.             }
  72.             $name = $this->logTools->camelToSnakeCase($key);
  73.             $args["action"]    = $action."_".$name;
  74.             $before = $change[0];
  75.             $after = $change[1];
  76.             if (in_array($key, $basicChanges))
  77.             {
  78.                 if ($key == "isActive")
  79.                 {
  80.                     $args = $this->tools->handleBasicChanges($args, $before, $after);
  81.                     if ($after) $args["action"] = "planning_resource_activate";
  82.                     else $args["action"] = "planning_resource_deactivate";
  83.                     $pendingLogArgs[] = $args;
  84.                 }
  85.                 else
  86.                 {
  87.                     $pendingLogArgs[] = $this->tools->handleBasicChanges($args, $before, $after);
  88.                 }
  89.                 continue;
  90.             }
  91.             if (in_array($key, $objectChanges))
  92.             {
  93.                 $pendingLogArgs[] = $this->tools->handleObjectChanges($args, $before, $after);
  94.                 continue;
  95.             }
  96.         }
  97.         return $pendingLogArgs;
  98.     }
  99.     public function logRemoval(PlanningResource $planningResource)
  100.     {
  101.         $pendingLogArgs = [];
  102.         //----------------------------------------------------------------------
  103.         // Fetch eventual info skeletond in the object
  104.         $loggingData = $this->logTools->handleLoggingData($planningResource);
  105.         $info = $loggingData['info'];
  106.         $specialAuthor = $loggingData['special_author'];
  107.         $ignore = $loggingData['ignore'];
  108.         if ($ignore) return $pendingLogArgs;
  109.         //----------------------------------------------------------------------
  110.         // Init base log args
  111.         // This does not contain action
  112.         $args = $this->initArgs($planningResource, $loggingData);
  113.         //----------------------------------------------------------------------
  114.         $args["action"] = "planning_resource_delete";
  115.         $pendingLogArgs[] = $args;
  116.         return $pendingLogArgs;
  117.     }
  118.     private function initArgs(PlanningResource $planningResource, $loggingData)
  119.     {
  120.         $society = $planningResource->getSociety();
  121.         $societyGroup = $planningResource->getSocietyGroup();
  122.         // Add HumanResource logging
  123.         $humanResource = $planningResource->getHumanResource();
  124.         $args = array(
  125.             "object_id"                    =>    $planningResource->getId(),
  126.             "object_bundle"                =>    "HR",
  127.             "object_entity"                =>    "PlanningResource",
  128.             "object_display"            =>    $planningResource->display(),
  129.             "object_human_resource_id"        =>    $humanResource !== null ? $humanResource->getId() : null,
  130.             "object_human_resource_display"    =>    $humanResource !== null ? $humanResource->display() : null,
  131.             "society_group"                =>    $societyGroup,
  132.             "society"                    =>    $society,
  133.             "info"                        =>    $loggingData['info'],
  134.             "special_author"            =>    $loggingData['special_author'],
  135.         );
  136.         return $args;
  137.     }
  138. }