Composer Dependency Changed NPM Resource Changed PR-6.3-dev Pending

User tests: Successful: Unsuccessful:

avatar alikon
alikon
30 Oct 2026

from discussion #48727 .

  • I read the Generative AI policy and my contribution is either not created with the help of AI or is compatible with the policy and GNU/GPL 2 or later.

Summary of Changes

update php-debugbar to 3.8.1

Testing Instructions

use the debug plugin

Actual result BEFORE applying this Pull Request

use old version 2.2.6

Expected result AFTER applying this Pull Request

use last version 3.8.1

Link to documentations

Please select:

  • Documentation link for guide.joomla.org:

  • No documentation changes for guide.joomla.org needed

  • Pull Request link for manual.joomla.org:

  • No documentation changes for manual.joomla.org needed

avatar alikon alikon - open - 30 Oct 2026
avatar alikon alikon - change - 30 Oct 2026
Status New ⇒ Pending
avatar joomla-cms-bot joomla-cms-bot - change - 30 Oct 2026
Category ⇒ External Library Composer Change
avatar alikon alikon - change - 30 Oct 2026
Labels Added: Composer Dependency Changed PR-6.3-dev
avatar joomla-cms-bot joomla-cms-bot - change - 30 Oct 2026
Category External Library Composer Change ⇒ External Library Composer Change JavaScript NPM Change Front End Plugins
avatar github-actions[bot] github-actions[bot] - change - 30 Oct 2026
Labels Added: NPM Resource Changed
09fafcb 30 Oct 2026 avatar alikon cs
avatar alikon alikon - change - 30 Oct 2026
Title
…
[WIP] Update php-debugbar version to 3.8.1
[6.3] Update php-debugbar version to 3.8.1
avatar alikon alikon - edited - 30 Oct 2026
avatar alikon alikon - change - 30 Oct 2026
The description was changed
avatar alikon alikon - edited - 30 Oct 2026
avatar brianteeman
brianteeman - comment - 30 Oct 2026
image
avatar brianteeman
brianteeman - comment - 30 Oct 2026

before

image

after

image
avatar alikon
alikon - comment - 30 Oct 2026

should be fixed

avatar brianteeman
brianteeman - comment - 30 Oct 2026

i dont consider removing the joomla logo a fix

avatar brianteeman
brianteeman - comment - 30 Oct 2026

with this pr

image

before

image
avatar alikon
alikon - comment - 30 Oct 2026

should be fixed now

avatar brianteeman
brianteeman - comment - 30 Oct 2026

all the things I reported before are now fixed. Everything seems to be working now - i guess it needs a review of the existing js and css to see if theyre all still needed

avatar tecpromotion tecpromotion - test_item - 31 Oct 2026 - Tested unsuccessfully
avatar tecpromotion
tecpromotion - comment - 31 Oct 2026

I have tested this item 🔴 unsuccessfully on 5871966

Verdict: needs changes. The bar itself works (all tabs, admin and site, no console errors), but two things regress.

1. Request history files are now readable over HTTP

Storage/FileStorage.php now writes plain <id>.json into administrator/cache/plg_system_debug_administrator/ (site: cache/plg_system_debug_site/). Before it wrote <id>.php with a <?php die(); ?> prefix, so the web server returned nothing.

"Track request history" on, logged in as admin, then without cookies GET /administrator/cache/plg_system_debug_administrator/<id> before after
response 200, 0 bytes 200, 61 KB JSON with all collectors
admin session ID ($_COOKIE / $_SERVER) in the file (not readable) yes, in 5 of 7 files

The IDs are random and directory listing is off, so it needs a leaked ID, but the protection the override existed for is gone. Fix: keep the .php extension and the die() prefix in the override (makeFilename(), get(), find(), and prune() which now only looks for .json), or store the files outside the web root.

2. "Query Explains" / "Query Profiles" have no visible effect any more

QueryCollector still sends explain, explain_col and profile, but the stock SQLQueriesWidget of 3.x only renders params and backtrace. Before, each query had an "Explain" link with the EXPLAIN table (same query SELECT * FROM jos_users WHERE id = :userid: before table with select_type, possible_keys …; after only Params and Backtrace). Either render them (extend the widget) or drop the two options and the collection.

Minor

  • "Errors" tab (broken language file): the generic ListWidget now shows array:2 [▶"/var/www/html/language/en-GB/mod_login.i…", 33 ] per error instead of the relative file:line link of the removed languageErrorsWidget. Map the data to strings or keep a small widget.
  • jQuery is still loaded on every page: Debug.php:257 keeps ['jquery'] as dependency of debug.min.js, which doesn't use it (debugbar 3 doesn't either). Same for fontawesome on debug.css.
  • Now unused but still built and shipped: widgets/sqlqueries/*, widgets/languageErrors/*, and the widget.css of languageFiles / languageStrings. They can go (plus the removed-files list in script.php).
  • Not new, but now easy to fix: with the HTTP Headers plugin's CSP (nonce + strict-dynamic) the bar doesn't load, because renderHead() prints <script src> without nonce (debugbar.min.js blocked → "PhpDebugBar is not defined"). 3.x has setCspNonce(); setting it before renderHead() and using the parent's output would cover it.

Tested

6.3-dev + PR (DDEV, PHP 8.3, MariaDB 11.8), debug system and language debug on, all plugin options on. Before = same instance with the debug plugin files and php-debugbar 2.2.6 from 6.3-dev. Info, Request, Session, Profile, Queries (params, backtrace, copy, sort), Loaded, Untranslated (stack), Errors, Settings, and the request history list all work. php-cs-fixer and phpstan clean.


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/48731.
avatar tecpromotion
tecpromotion - comment - 31 Oct 2026

I have tested this item 🔴 unsuccessfully on 5871966

Verdict: needs changes. The bar itself works (all tabs, admin and site, no console errors), but two things regress.

1. Request history files are now readable over HTTP

Storage/FileStorage.php now writes plain <id>.json into administrator/cache/plg_system_debug_administrator/ (site: cache/plg_system_debug_site/). Before it wrote <id>.php with a <?php die(); ?> prefix, so the web server returned nothing.

"Track request history" on, logged in as admin, then without cookies GET /administrator/cache/plg_system_debug_administrator/<id> before after
response 200, 0 bytes 200, 61 KB JSON with all collectors
admin session ID ($_COOKIE / $_SERVER) in the file (not readable) yes, in 5 of 7 files

The IDs are random and directory listing is off, so it needs a leaked ID, but the protection the override existed for is gone. Fix: keep the .php extension and the die() prefix in the override (makeFilename(), get(), find(), and prune() which now only looks for .json), or store the files outside the web root.

2. "Query Explains" / "Query Profiles" have no visible effect any more

QueryCollector still sends explain, explain_col and profile, but the stock SQLQueriesWidget of 3.x only renders params and backtrace. Before, each query had an "Explain" link with the EXPLAIN table (same query SELECT * FROM jos_users WHERE id = :userid: before table with select_type, possible_keys …; after only Params and Backtrace). Either render them (extend the widget) or drop the two options and the collection.

Minor

  • "Errors" tab (broken language file): the generic ListWidget now shows array:2 [▶"/var/www/html/language/en-GB/mod_login.i…", 33 ] per error instead of the relative file:line link of the removed languageErrorsWidget. Map the data to strings or keep a small widget.
  • jQuery is still loaded on every page: Debug.php:257 keeps ['jquery'] as dependency of debug.min.js, which doesn't use it (debugbar 3 doesn't either). Same for fontawesome on debug.css.
  • Now unused but still built and shipped: widgets/sqlqueries/*, widgets/languageErrors/*, and the widget.css of languageFiles / languageStrings. They can go (plus the removed-files list in script.php).
  • Not new, but now easy to fix: with the HTTP Headers plugin's CSP (nonce + strict-dynamic) the bar doesn't load, because renderHead() prints <script src> without nonce (debugbar.min.js blocked → "PhpDebugBar is not defined"). 3.x has setCspNonce(); setting it before renderHead() and using the parent's output would cover it.

Tested

6.3-dev + PR (DDEV, PHP 8.3, MariaDB 11.8), debug system and language debug on, all plugin options on. Before = same instance with the debug plugin files and php-debugbar 2.2.6 from 6.3-dev. Info, Request, Session, Profile, Queries (params, backtrace, copy, sort), Loaded, Untranslated (stack), Errors, Settings, and the request history list all work. php-cs-fixer and phpstan clean.


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/48731.
avatar alikon
alikon - comment - 2 Nov 2026

thanks for the detaild feedback @tecpromotion
i should have adressed them minus this one:

Now unused but still built and shipped: widgets/sqlqueries/, widgets/languageErrors/, and the widget.css of languageFiles / languageStrings. They can go (plus the removed-files list in script.php).

cause i don't think is true

avatar tecpromotion
tecpromotion - comment - 2 Nov 2026

This test was carried out with the assistance of AI and then verified manually.

The points from my last test are fixed, but two CSS leftovers break the display.

Fixed

  • History files are <id>.php with the die() prefix again: fetched without cookies → 200, 0 bytes. History list loads, old .json files get converted.
  • Explain is back (button per query, EXPLAIN table).
  • Errors tab shows file:line again.
  • jQuery and the plugin's FontAwesome are no longer loaded.
  • CSP (nonce + strict-dynamic): bar and all widget scripts get the nonce and load, site and admin, no console errors.

1. Query Params / Backtrace can't be opened any more

Clicking a query row removes the hidden attribute from the params table (debugbar 3 toggles table.hidden), but sqlqueries/widget.css still has display: none on table.phpdebugbar-widgets-params, so it stays invisible (computed display: none, height 0). Fix (tested): drop display: none from that rule. Then params + backtrace open on click and close again.

2. Loaded / Untranslated tabs lost their styling

You're right that sqlqueries and languageErrors are used again. But getAssets() in LanguageFilesCollector and LanguageStringsCollector now only returns js (6.3-dev also returned css), so their widget.min.css is built but never loaded. "Loaded" has no monospace, borders or green rows any more, "Untranslated" no column spacing.

r2-compare-loaded

Fix (tested): add the line back in both collectors:

'css' => Uri::root(true) . '/media/plg_system_debug/widgets/languageFiles/widget.min.css',

(languageStrings the same.) Same trap as 1. there: languageStrings/widget.css has display: none on table.phpdebugbar-widgets-callstack, while the widget toggles hidden. Once the CSS loads, "Stack" no longer opens, so drop that display: none too.

avatar brianteeman
brianteeman - comment - 2 Nov 2026

There are a few issues when you set the plugin to use dark mode

image

some examples but there may be more

image image
avatar brianteeman
brianteeman - comment - 2 Nov 2026

plus one more on hover - made a video to show it

thorium_fPyJUgTz3C.mp4
avatar alikon
alikon - comment - 3 Nov 2026

the dark-theme issues should have been fixed
for the last #48731 (comment) i'm unable to replicate

avatar alikon
alikon - comment - 3 Nov 2026

the dark-theme issues should have been fixed
for the last #48731 (comment) i'm unable to replicate

the test failure have nothing to do with the pr

avatar alikon
alikon - comment - 3 Nov 2026

the dark-theme issues should have been fixed
for the last #48731 (comment) i'm unable to replicate

the test failure have nothing to do with the pr

avatar github-actions[bot]
github-actions[bot] - comment - 6 Nov 2026

This pull request has conflicts, please resolve those before we can evaluate the pull request.

avatar richard67 richard67 - change - 6 Nov 2026
Labels Added: Conflicting Files
avatar richard67 richard67 - change - 6 Nov 2026
Labels Removed: Conflicting Files

Add a Comment

Login with GitHub to post a comment