src/Services/LogTools.php line 23

Open in your IDE?
  1. <?php
  2. //----------------------------------------------------------------------
  3. // src/Services/LogTools.php
  4. //----------------------------------------------------------------------
  5. namespace App\Services;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  9. use Symfony\Component\Security\Core\Security;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. use App\Entity\Access;
  12. class LogTools
  13. {
  14.     public function __construct(ManagerRegistry $doctrineTranslatorInterface $translatorSecurity $securityLoggerInterface $ouchLogger)
  15.     {
  16.         $this->em $doctrine->getManager();
  17.         $this->translator $translator;
  18.         $this->security $security;
  19.         $this->ouchLogger $ouchLogger;
  20.     }
  21.     public function plooplog($msg)
  22.     {
  23.         error_log("\n".$msg."\n"3"ploop.log");
  24.     }
  25.     public function ploop_debug($active$msg)
  26.     {
  27.         if (!$active)
  28.             return false;
  29.             
  30.         error_log("\n".$msg."\n",3,"ploop.log");
  31.     }
  32.     public function errorlog_db($e)
  33.     {
  34.         if (!is_object($e))
  35.         {
  36.             return null;
  37.         }
  38.         if (!($e instanceof \Exception))
  39.         {
  40.             return null;
  41.         }
  42.         $sql null;
  43.         $params null;
  44.         $msg null;
  45.         if (method_exists($e'getMessage') &&
  46.             method_exists($e'getQuery') &&
  47.             method_exists($e->getQuery(), 'getSql') &&
  48.             method_exists($e->getQuery(), 'getParams'))
  49.         {
  50.             $sql $e->getQuery()->getSql();
  51.             $params print_r($e->getQuery()->getParams(), true);
  52.             $msg $e->getMessage();
  53.         }
  54.         $backTrace debug_backtrace()[1];
  55.         $method $backTrace['function'];
  56.         $class $backTrace['class'];
  57.         // Access handling
  58.         $access $this->getCurrentUser();
  59.         $originalUser $this->getOriginalUser();
  60.         $accessData "";
  61.         $originalUserData "";
  62.         if ($access !== null)
  63.         {
  64.             $accessData $access->displayForLog();
  65.         }
  66.         if ($originalUser !== null)
  67.         {
  68.             $originalUserData $originalUser->displayForLog();
  69.         }
  70.         $args = array(
  71.             'class'                =>    $class,
  72.             'method'            =>    $method,
  73.             'access'            =>    $accessData,
  74.             'original_access'    =>    $originalUserData,
  75.             'msg'                =>    $msg,
  76.             'query'                =>    $sql,
  77.             'params'          =>    $params,
  78.         );
  79.         $this->plooplog(print_r($argstrue));
  80.         $this->ouchLogger->error(''$args);
  81.     }
  82.     public function errorlog($msg)
  83.     {
  84.         $backTrace debug_backtrace()[1];
  85.         $method $backTrace['function'];
  86.         $class $backTrace['class'];
  87.         // Access handling
  88.         $access $this->getCurrentUser();
  89.         $originalUser $this->getOriginalUser();
  90.         $accessData "";
  91.         $originalUserData "";
  92.         if ($access !== null)
  93.         {
  94.             $accessData $access->displayForLog();
  95.         }
  96.         if ($originalUser !== null)
  97.         {
  98.             $originalUserData $originalUser->displayForLog();
  99.         }
  100.         $args = array(
  101.             'class'                =>    $class,
  102.             'method'            =>    $method,
  103.             'access'            =>    $accessData,
  104.             'original_access'    =>    $originalUserData,
  105.             'msg'                =>    $msg,
  106.         );
  107.         $this->plooplog(print_r($argstrue));
  108.         $this->ouchLogger->error(''$args);
  109.     }
  110.     public function getCurrentUser()
  111.     {
  112.         $access $this->security->getUser();
  113.         if (empty($access))
  114.         {
  115.             $access $this->em->getRepository(Access::class)->findOneByEmail(Access::EMPTY_ACCESS);
  116.         }
  117.         return $access;
  118.     }
  119.     // https://symfony.com/doc/5.4/security/impersonating_user.html
  120.     // This is also in AccessTools
  121.     // This is also in LogTools
  122.     public function getOriginalUser()
  123.     {
  124.         $originalUser null;
  125.         // #3251 Fix to avoid infinity loop
  126.         $currentUser $this->getCurrentUser();
  127.         if ($currentUser === null || $currentUser->getEmail() == Access::EMPTY_ACCESS)
  128.         {
  129.             return null;
  130.         }
  131.         $token $this->security->getToken();
  132.         if ($token instanceof SwitchUserToken)
  133.         {
  134.             $originalUser $token->getOriginalToken()->getUser();
  135.         }
  136.         return $originalUser;
  137.     }
  138. }