1818use BlitzPHP \Formatter \JsonFormatter ;
1919use BlitzPHP \Formatter \XmlFormatter ;
2020use BlitzPHP \Http \Request ;
21+ use BlitzPHP \Http \Response ;
2122use BlitzPHP \Utilities \Date ;
2223use BlitzPHP \View \Parser ;
2324use Exception ;
2425use GuzzleHttp \Psr7 \Utils ;
2526use Kint \Kint ;
26- use Psr \Http \Message \RequestInterface ;
2727use Psr \Http \Message \ResponseInterface ;
2828use Psr \Http \Message \ServerRequestInterface ;
2929use stdClass ;
@@ -66,8 +66,8 @@ public function __construct(?stdClass $config = null)
6666 foreach ($ this ->config ->collectors as $ collector ) {
6767 if (! class_exists ($ collector )) {
6868 logger ()->critical (
69- 'Toolbar collector does not exist ( ' . $ collector . '). '
70- . ' Please check $collectors in the app/Config/toolbar.php file . '
69+ 'Le collecteur de la barre d \' outils n \' existe pas ( ' . $ collector . '). '
70+ . ' Veuillez vérifier $collectors dans le fichier app/Config/toolbar.php. '
7171 );
7272
7373 continue ;
@@ -80,16 +80,17 @@ public function __construct(?stdClass $config = null)
8080 /**
8181 * Renvoie toutes les données requises par la barre de débogage
8282 *
83- * @param float $startTime Heure de début de l'application
83+ * @param float $startTime Heure de début de l'application
84+ * @param Request $request
8485 *
8586 * @return string Données encodées en JSON
8687 */
8788 public function run (float $ startTime , float $ totalTime , ServerRequestInterface $ request , ResponseInterface $ response ): string
8889 {
8990 // Éléments de données utilisés dans la vue.
9091 $ data ['url ' ] = current_url ();
91- $ data ['method ' ] = strtoupper ( $ request ->getMethod () );
92- $ data ['isAJAX ' ] = service ( ' request ' ) ->ajax ();
92+ $ data ['method ' ] = $ request ->getMethod ();
93+ $ data ['isAJAX ' ] = $ request ->ajax ();
9394 $ data ['startTime ' ] = $ startTime ;
9495 $ data ['totalTime ' ] = $ totalTime * 1000 ;
9596 $ data ['totalMemory ' ] = number_format (memory_get_peak_usage () / 1024 / 1024 , 3 );
@@ -134,7 +135,7 @@ public function run(float $startTime, float $totalTime, ServerRequestInterface $
134135 foreach ($ _SESSION as $ key => $ value ) {
135136 // Remplacez les données binaires par une chaîne pour éviter l'échec de json_encode.
136137 if (is_string ($ value ) && preg_match ('~[^\x20-\x7E\t\r\n]~ ' , $ value )) {
137- $ value = 'binary data ' ;
138+ $ value = 'donnée binaire ' ;
138139 }
139140
140141 $ data ['vars ' ]['session ' ][esc ($ key )] = is_string ($ value ) ? esc ($ value ) : '<pre> ' . esc (print_r ($ value , true )) . '</pre> ' ;
@@ -160,7 +161,7 @@ public function run(float $startTime, float $totalTime, ServerRequestInterface $
160161 $ data ['vars ' ]['cookies ' ][esc ($ name )] = esc ($ value );
161162 }
162163
163- $ data ['vars ' ]['request ' ] = (service ( ' request ' ) ->is ('ssl ' ) ? 'HTTPS ' : 'HTTP ' ) . '/ ' . $ request ->getProtocolVersion ();
164+ $ data ['vars ' ]['request ' ] = ($ request ->is ('ssl ' ) ? 'HTTPS ' : 'HTTP ' ) . '/ ' . $ request ->getProtocolVersion ();
164165
165166 $ data ['vars ' ]['response ' ] = [
166167 'statusCode ' => $ response ->getStatusCode (),
@@ -210,12 +211,12 @@ protected function renderTimelineRecursive(array $rows, float $startTime, int $s
210211 $ open = $ row ['name ' ] === 'Controller ' ;
211212
212213 if ($ hasChildren || $ isQuery ) {
213- $ output .= '<tr class="timeline-parent ' . ($ open ? ' timeline-parent-open ' : '' ) . '" id="timeline- ' . $ styleCount . '_parent" onclick="blitzphpDebugBar.toggleChildRows( \' timeline- ' . $ styleCount . '\' ); "> ' ;
214+ $ output .= '<tr class="timeline-parent ' . ($ open ? ' timeline-parent-open ' : '' ) . '" id="timeline- ' . $ styleCount . '_parent" data-toggle="childrows" data-child=" timeline- ' . $ styleCount . '"> ' ;
214215 } else {
215216 $ output .= '<tr> ' ;
216217 }
217218
218- $ output .= '<td class=" ' . ($ isChild ? 'debug-bar-width30 ' : '' ) . '" style="- -level: ' . $ level . ';" > ' . ($ hasChildren || $ isQuery ? '<nav></nav> ' : '' ) . $ row ['name ' ] . '</td> ' ;
219+ $ output .= '<td class=" ' . ($ isChild ? 'debug-bar-width30 ' : '' ) . ' debug-bar -level- ' . $ level . '" > ' . ($ hasChildren || $ isQuery ? '<nav></nav> ' : '' ) . $ row ['name ' ] . '</td> ' ;
219220 $ output .= '<td class=" ' . ($ isChild ? 'debug-bar-width10 ' : '' ) . '"> ' . $ row ['component ' ] . '</td> ' ;
220221 $ output .= '<td class=" ' . ($ isChild ? 'debug-bar-width10 ' : '' ) . 'debug-bar-alignRight"> ' . number_format ($ row ['duration ' ] * 1000 , 2 ) . ' ms</td> ' ;
221222 $ output .= "<td class='debug-bar-noverflow' colspan=' {$ segmentCount }'> " ;
@@ -233,15 +234,15 @@ protected function renderTimelineRecursive(array $rows, float $startTime, int $s
233234
234235 // Ajouter des enfants le cas échéant
235236 if ($ hasChildren || $ isQuery ) {
236- $ output .= '<tr class="child-row" id="timeline- ' . ($ styleCount - 1 ) . '_children" style=" ' . ($ open ? '' : ' display: none; ' ) . '" > ' ;
237+ $ output .= '<tr class="child-row ' . ($ open ? '' : ' debug-bar-ndisplay ' ) . '" id="timeline- ' . ($ styleCount - 1 ) . '_children" > ' ;
237238 $ output .= '<td colspan=" ' . ($ segmentCount + 3 ) . '" class="child-container"> ' ;
238239 $ output .= '<table class="timeline"> ' ;
239240 $ output .= '<tbody> ' ;
240241
241242 if ($ isQuery ) {
242243 // Sortie de la chaîne de requête si requête
243244 $ output .= '<tr> ' ;
244- $ output .= '<td class="query-container" style="- -level: ' . ($ level + 1 ) . ';" > ' . $ row ['query ' ] . '</td> ' ;
245+ $ output .= '<td class="query-container debug-bar -level- ' . ($ level + 1 ) . '" > ' . $ row ['query ' ] . '</td> ' ;
245246 $ output .= '</tr> ' ;
246247 } else {
247248 // Rendre récursivement les enfants
@@ -356,13 +357,34 @@ protected function roundTo(float $number, int $increments = 5): float
356357 return ceil ($ number * $ increments ) / $ increments ;
357358 }
358359
360+ /**
361+ * Traite la barre d'outils de débogage pour la requête en cours.
362+ *
363+ * Cette méthode détermine s'il faut afficher la barre d'outils de débogage ou la préparer pour une utilisation ultérieure.
364+ *
365+ * @param array $stats Un tableau contenant des statistiques de performances.
366+ * @param Request $request La requête serveur en cours.
367+ * @param ResponseInterface $response La réponse en cours.
368+ *
369+ * @return ResponseInterface La réponse traitée, avec la barre d'outils de débogage injectée ou préparée pour une utilisation ultérieure.
370+ */
371+ public function process (array $ stats , ServerRequestInterface $ request , ResponseInterface $ response ): ResponseInterface
372+ {
373+ if ($ request ->hasAny ('blitzphp-debugbar ' , 'debugbar_time ' )) {
374+ return $ this ->respond ($ request );
375+ }
376+
377+ return $ this ->prepare ($ stats , $ request , $ response );
378+ }
379+
359380 /**
360381 * Préparez-vous au débogage..
361382 */
362- public function prepare (array $ stats , ?RequestInterface $ request = null , ?ResponseInterface $ response = null ): ResponseInterface
383+ public function prepare (array $ stats , ?ServerRequestInterface $ request = null , ?ResponseInterface $ response = null ): ResponseInterface
363384 {
364385 /** @var Request $request */
365386 $ request ??= service ('request ' );
387+ /** @var Response $response */
366388 $ response ??= service ('response ' );
367389
368390 // Si on est en CLI ou en prod, pas la peine de continuer car la debugbar n'est pas utilisable dans ces environnements
@@ -402,95 +424,88 @@ public function prepare(array $stats, ?RequestInterface $request = null, ?Respon
402424 ->withHeader ('Debugbar-Link ' , site_url ("?debugbar_time= {$ time }" ));
403425 }
404426
405- $ _SESSION ['_blitz_debugbar_ ' ] = array_merge ($ _SESSION ['_blitz_debugbar_ ' ] ?? [], compact ('time ' ));
406-
407- $ debugRenderer = $ this ->respond ();
408-
409- // Extract css
410- preg_match ('/<style (?:.+)>(.+)<\/style>/ ' , $ debugRenderer , $ matches );
411- $ style = $ matches [0 ] ?? '' ;
412- $ debugRenderer = str_replace ($ style , '' , $ debugRenderer );
413-
414- // Extract js
415- preg_match ('/<script (?:.+)>(.+)<\/script>/ ' , $ debugRenderer , $ matches );
416- $ js = $ matches [0 ] ?? '' ;
417- $ debugRenderer = str_replace ($ js , '' , $ debugRenderer );
418-
419- $ responseContent = $ response ->getBody ()->getContents ();
420-
421- if (str_contains ($ responseContent , '<head> ' )) {
422- $ responseContent = preg_replace ('/<head>/ ' , '<head> ' . $ style , $ responseContent , 1 );
423- } else {
424- $ responseContent .= $ style ;
425- }
426-
427- if (str_contains ($ responseContent , '</body> ' )) {
428- $ responseContent = preg_replace ('/<\/body>/ ' , '<div id="toolbarContainer"> ' . trim (preg_replace ('/\s+/ ' , ' ' , $ debugRenderer )) . '</div> ' . $ js . '<script>blitzphpDebugBar.init();</script></body> ' , $ responseContent , 1 );
427+ $ oldKintMode = Kint::$ mode_default ;
428+ Kint::$ mode_default = Kint::MODE_RICH ;
429+ $ kintScript = @Kint::dump ('' );
430+ Kint::$ mode_default = $ oldKintMode ;
431+ $ kintScript = substr ($ kintScript , 0 , strpos ($ kintScript , '</style> ' ) + 8 );
432+ $ kintScript = ($ kintScript === '0 ' ) ? '' : $ kintScript ;
433+
434+ $ script = PHP_EOL
435+ . '<script id="debugbar_loader" '
436+ . 'data-time=" ' . $ time . '" '
437+ . 'src=" ' . site_url () . '?blitzphp-debugbar"></script> '
438+ . '<script id="debugbar_dynamic_script"></script> '
439+ . '<style id="debugbar_dynamic_style"></style> '
440+ . $ kintScript
441+ . PHP_EOL ;
442+
443+ if (str_contains ($ responseContent = (string ) $ response ->getBody (), '<head> ' )) {
444+ $ responseContent = preg_replace (
445+ '/<head>/ ' ,
446+ '<head> ' . $ script ,
447+ $ responseContent ,
448+ 1 ,
449+ );
429450 } else {
430- $ responseContent .= ' <div id="toolbarContainer"> ' . trim ( preg_replace ( ' /\s+/ ' , ' ' , $ debugRenderer )) . ' </div> ' . $ js . ' < script>blitzphpDebugBar.init();</script> ' ;
451+ $ responseContent .= $ script ;
431452 }
432453
433- return $ response ->withBody (
434- Utils::streamFor ($ responseContent )
435- );
454+ return $ response ->withBody (Utils::streamFor ($ responseContent ));
436455 }
437456
438457 /**
439458 * Injectez la barre d'outils de débogage dans la réponse.
440459 *
441- * @return string
460+ * @param Request $request
442461 *
443462 * @codeCoverageIgnore
444463 */
445- public function respond ()
464+ public function respond (ServerRequestInterface $ request ): Response
446465 {
466+ $ response = new Response ();
467+
447468 if (on_test ()) {
448- return '' ;
469+ return $ response ;
449470 }
450471
451- $ request = service ('request ' );
452-
453- // Si la requête contient '?debugbar alors nous sommes
472+ // Si la requête contient '?blitzphp-debugbar alors nous sommes
454473 // renvoie simplement le script de chargement
455- if ($ request ->getQuery ('debugbar ' ) !== null ) {
456- header ( ' Content-Type: application/javascript ' );
474+ if ($ request ->getQuery ('blitzphp- debugbar ' ) !== null ) {
475+ $ response = $ response -> withType ( ' application/javascript ' );
457476
458477 ob_start ();
459- include $ this ->config ->view_path . 'toolbarloader.js ' ;
478+ include $ this ->config ->view_path . DS . 'toolbarloader.js ' ;
460479 $ output = ob_get_clean ();
461480
462- return str_replace ('{url} ' , rtrim (site_url (), '/ ' ), $ output );
481+ return $ response -> withStringBody ( str_replace ('{url} ' , rtrim (site_url (), '/ ' ), $ output) );
463482 }
464483
465484 // Sinon, s'il inclut ?debugbar_time, alors
466485 // nous devrions retourner la barre de débogage entière.
467- $ debugbarTime = $ _SESSION ['_blitz_debugbar_ ' ]['time ' ] ?? $ request ->getQuery ('debugbar_time ' );
468- if ($ debugbarTime ) {
486+ if (null !== $ debugbarTime = $ request ->getQuery ('debugbar_time ' )) {
469487 // Négociation du type de contenu pour formater la sortie
470- $ format = $ request ->negotiate ('media ' , ['text/html ' , 'application/json ' , 'application/xml ' ]);
471- $ format = explode ('/ ' , $ format )[1 ];
488+ $ format = $ request ->negotiate ('media ' , ['text/html ' , 'application/json ' , 'application/xml ' ]);
489+ $ response = $ response ->withType ($ format );
490+ $ format = explode ('/ ' , $ format )[1 ];
472491
473492 $ filename = 'debugbar_ ' . $ debugbarTime ;
474493 $ filename = $ this ->debugPath . DS . $ filename . '.json ' ;
475494
476495 if (is_file ($ filename )) {
477496 // Affiche la barre d'outils si elle existe
478- return $ this ->format ($ debugbarTime , file_get_contents ($ filename ), $ format );
497+ return $ response -> withStringBody ( $ this ->format ($ debugbarTime , file_get_contents ($ filename ), $ format) );
479498 }
480-
481- // Nom de fichier introuvable
482- http_response_code (404 );
483-
484- exit ; // Quitter ici est nécessaire pour éviter de charger la page d'index
485499 }
486500
487- return '' ;
501+ // Nom de fichier introuvable
502+ return $ response ->withStatus (404 );
488503 }
489504
490505 /**
491506 * Formatte la sortie
492507 *
493- * @param float $debugbar_time
508+ * @param mixed $debugbar_time
494509 */
495510 protected function format ($ debugbar_time , string $ data , string $ format = 'html ' ): string
496511 {
0 commit comments