src/PaaBundle/Controller/ErrorController.php line 98

Open in your IDE?
  1. <?php
  2. namespace App\PaaBundle\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController;
  5. use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;
  6. use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Debug\Exception\FlattenException;
  10. use App\PaaBundle\Component\Logs;
  11. use Symfony\Bridge\Monolog\Logger;
  12. use Twig\Environment;
  13. // LG 20200513 old class ErrorController extends DefaultController {
  14. class ErrorController extends BaseExceptionController {
  15.     protected $debug;
  16.     protected $twig;
  17.     public function __construct(Environment $twig = null, bool $debug = null) {
  18. //        $twig = $twig?:"" ;
  19.         $debug = $debug ?: false;
  20.         parent::__construct($twig, $debug);
  21.     }
  22.     //Fonction permettant de log dans la BDD un message donné en paramètre en créant une erreur
  23.     //On peut l'appeler depuis n'importe quel controller : $this->get('logArthur')->errorAction('',null,null);
  24.     function errorAction($errorMessage, $errorNiveau = null, $errorType = null) {
  25.         if ($errorNiveau == null) {
  26.             $errorNiveau = 1024;
  27.         }
  28.         set_error_handler(function ($errno, $errstr, $errfile, $errline) {
  29.             self::constructLog($errno, $errstr, $errfile, $errline);
  30.         });
  31.         if ($errorType != null) {
  32.             trigger_error($errorMessage, $errorType);
  33.         } else {
  34.             trigger_error($errorMessage);
  35.         }
  36.         restore_error_handler();
  37.     }
  38.     //Fonction permettant de log dans la BDD un message donné en paramètre sans créer une erreur
  39.     //On peut l'appeler depuis n'importe quel controller : $this->get('logArthur')->logAction('',null);
  40.     function logAction($errorMessage, $errorNiveau = null) {
  41.         if ($errorNiveau == null) {
  42.             $errorNiveau = 1024;
  43.         }
  44.         self::constructLog($errorNiveau, $errorMessage, null, null);
  45.     }
  46.     //errno : niveau d'erreur
  47.     //errstr : nom de l'erreur
  48.     //errfile : fichier où l'erreur est apparue
  49.     //errline : ligne du fichier où l'erreur est apparue
  50.     function constructLog($errno, $errstr, $errfile, $errline) {
  51.         $o = getORessources($a, $b);
  52.         $loConnexion = $this->getDoctrineConnection();
  53.         $user = $o->getUsersArthur($r, $loConnexion, $_SESSION['giUser']);
  54.         ob_start();
  55.         debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
  56.         $data = ob_get_clean();
  57.         $tabBacktrace = explode(']', $data);
  58.         unset($tabBacktrace[0]);
  59.         $tabFileLigne = explode(':', $tabBacktrace[1]);
  60.         $data = implode(']', $tabBacktrace);
  61.         $errfile = 'C:' . $tabFileLigne[1];
  62.         $errline = $tabFileLigne[2];
  63.         $content = $errstr . PHP_EOL
  64.                 . 'Niveau erreur : ' . $errno . ' : ' . $errstr . PHP_EOL
  65.                 . 'Programme concerné : ' . $errfile . ' Ligne N°' . $errline . '' . PHP_EOL . PHP_EOL
  66.                 . 'Liste des appels : ' . PHP_EOL;
  67.         $content .= $data;
  68.         $date = date("d/m/Y");
  69.         $time = date("H:i:s");
  70.         $content .= PHP_EOL . 'Le : ' . $date . ' à : ' . $time . PHP_EOL
  71.                 . 'PAA version ' . $_SESSION['gsVersionPAA'] . PHP_EOL . PHP_EOL
  72.                 . 'User : ' . $user[0]['username'] . PHP_EOL
  73.                 . 'URL demandée : ' . $_SESSION['_sf2_attributes']['URLDemandée'] . PHP_EOL
  74.                 . 'Système exploitation : ' . php_uname('s') . ' ' . php_uname('r') . ' : ' . php_uname('v') . PHP_EOL
  75.                 . 'Session windows : ' . php_uname('n') . PHP_EOL . PHP_EOL
  76.                 . 'Etat des paramètres :' . PHP_EOL . PHP_EOL;
  77.         $n = 0;
  78.         foreach (debug_backtrace() as $item) {
  79.             if ($n != 0) {
  80.                 $content .= '#' . $n . ' ' . $item['class'] . $item['type'] . $item['function'] . ' called at [' . $item['file'] . ':' . $item['line'] . ']' . PHP_EOL
  81.                         . implode(PHP_EOL, $item['args']) . PHP_EOL . PHP_EOL;
  82.             }
  83.             $n++;
  84.         }
  85.         // Décommenter pour ajouter la création d'un fichier de log en local
  86.         $o->InsertLogArthur($r, $loConnexion, $errno, $errstr, $errfile, $_SESSION['gsVersionPAA'], $content);
  87.     }
  88.     function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null) {
  89.         if ($_ENV['APP_ENV'] === 'prod') {
  90.             $id = $_ENV['lastErrorID'];
  91.             $laOptions = array();
  92.             $lsErrorCode = $exception->getStatusCode();
  93. // LG 20240411 old            if (lg_getenv("AFFICHE_INFO_ERREUR") == "true") {
  94.             if (lg_getenv("AFFICHE_INFO_ERREUR") == "true" || strpos($exception->getMessage(), "bannie")) {
  95.                 // Afficher le mesage d'erreur détaillé
  96.                 $lsErrorText = $exception->getMessage();
  97.             } else {
  98.                 // Ne pas afficher le message d'erreur détailé
  99.                 $lsErrorText = "" ;
  100.             }
  101.             $lsStatusText = isset(Response::$statusTexts[$lsErrorCode]) ? Response::$statusTexts[$lsErrorCode] : '' ;
  102.             return new Response($this->twig->render(
  103.                         '@Paa/Default/error.html.twig', [
  104.                         'psErrorCode' => $lsErrorCode,
  105.                         'psStatusText' => $lsStatusText,
  106.                         "psErrorText" => $lsErrorText,
  107.                         'exception' => $exception,
  108.                         'logger' => $logger,
  109.                         'currentContent' => '$ currentContent',
  110.                         "id" => $id,
  111.                         "psURLRetour" => $request->headers->get('referer')
  112.                     ]
  113.                     ), 200, ['Content-Type' => $request->getMimeType($request->getRequestFormat()) ?: 'text/html']);
  114.         } else {
  115.             return parent::showAction($request, $exception, $logger);
  116.         }
  117.     }
  118. }