CMSB v3.78 Beta Released (PHP 8.1 Required, Plugin and Debug Tools)

5 posts by 3 authors in: Forums > CMS Builder
Last Post: Yesterday at 7:25pm   (RSS)

Hi everyone,

We've just released v3.78 beta! We're already running this version on our site, and it has some new plugin and debugging features.

What's New

  • PHP 8.1+ Required: PHP 8.0 reached end-of-life in December 2023 and no longer receives security updates
  • Plugins > Disable Plugins: New toggle switch to temporarily disable all plugin hooks for troubleshooting
  • Admin > General > Admin Debug Mode: New toggle lets admins see debug information in the view-source footer of HTML pages (see below)
  • Modernized Plugin API with 33% performance improvement and support for PHP 8.1 first-class callables (existing plugins work unchanged)
  • Developer Console: Long data values now scroll within 75px containers for better readability
  • A number of bug fixes and other UI improvements.

The updated debug footers make it easier to see where the current page is loading additional files from, the available plugin hooks, and the page load impact of existing plugins.  

Here's an example of what you'd see on a frontend page when you view-source and scroll to the bottom when logged in as an Admin with Debug Mode on.  Especially for when using permalinks, this lets you track down the files to edit very quickly.

This is for: https://interactivetools.com/showcase/

<!-- DEBUG FOOTER (visible to admins only)

    PERFORMANCE                              PLUGIN ACTIVITY         
    Execution:   0.007s                      Total Hooks:    11 calls
    Memory:      1.18 MB (peak: 1.39 MB)     Total Time:     0.001s  
    CMS Version: 3.78 (build 2901)           Avg/Hook:       0.0ms   

    Included Files                                             Available Plugin Hooks (call count)
    ---------------------------------------------------------  -----------------------------------
    /showcase/index.php
    /_init.php
    /showcase/_showcase_functions.php
    /_footer.php

    Plugin Hooks Called                                        Hook                                  Calls  Avg Time  Total Time
    ---------------------------------------------------------  ------------------------------------  -----  --------  ----------
    /cmsb/plugins/websiteMembership/websiteMembership.php:37   viewer_postinit                           1     0.6ms      0.001s
    /cmsb/plugins/facebookLogin/facebookLogin.php:23           _websiteLogin_init.pre_actionHandler      1     0.0ms      0.000s
    /cmsb/plugins/permalinks/permalinks.php:29                 viewer_output_rows                        5     0.0ms      0.000s
    /cmsb/plugins/permalinks/permalinks.php:27                 init_complete                             1     0.0ms      0.000s
    /cmsb/plugins/simpleCart/simpleCart.php:18                 viewer_postinit                           1     0.0ms      0.000s
    /cmsb/plugins/simpleCart/customCart.php:78                 viewer_postinit                           1     0.0ms      0.000s
    /cmsb/plugins/facebookLogin/facebookLogin.php:24           _websiteLogin_init.pre_actionHandler      1     0.0ms      0.000s
    ---------------------------------------------------------  ------------------------------------  -----  --------  ----------
                                                               TOTAL                                    11     0.0ms      0.001s

-->

Here's an example of the updated debug footer you'll see on a CMS page.  Very useful for when you want to know which plugin hooks are available and where.

This is for: /cmsb/admin.php?menu=test

<!-- DEBUG FOOTER (visible to admins only)

    PERFORMANCE                                  PLUGIN ACTIVITY          
    Execution:   0.004s                          Total Hooks:    121 calls
    Memory:      621.98 KB (peak: 692.38 KB)     Total Time:     0.001s   
    CMS Version: 3.78 (build 2901)               Avg/Hook:       0.0ms    

    Included Files                                                     Available Plugin Hooks (call count)
    -----------------------------------------------------------------  -------------------------------------------------------------------------------------------------------------------
    /cmsb/admin.php                                                   admin_prelogin, admin_postlogin
    /cmsb/lib/init.php                                                init_complete
    /cmsb/lib/common.php                                              admin_getRequestedAction (3), includeCDN (17)
    /cmsb/lib/schema_functions.php                                    post_loadSchema (3)
    /cmsb/lib/admin_functions.php                                     userSectionAccess (42), userHasFieldAccess (3)
    /cmsb/lib/adminUI_functions.php                                   adminUI_args, admin_footer_preButtons
    /cmsb/lib/menus/default/actionHandler.php                         section_init, viewerOnly_allowed_actions, section_preDispatch
    /cmsb/lib/menus/default/common.php
    /cmsb/lib/menus/default/list.php                                  list_postselect, list_advancedCommands, list_postAdvancedSearch, list_preListTable, list_postListTable_inner
    /cmsb/lib/menus/default/list.php (cont'd)                         list_postListTable
    /cmsb/lib/menus/default/list_functions.php                        list_where, record_access_where, list_orderBy, list_addSelectExpr, list_having, list_showListSchema
    /cmsb/lib/menus/default/list_functions.php (cont'd)               list_showListRecords, listHeader_checkAll, listHeader_thAttributes (2), listHeader_displayLabel (2), listRow_record
    /cmsb/lib/menus/default/list_functions.php (cont'd)               listRow_trStyle, listRow_trClass, listRow_displayValue (2), listRow_tdAttributes (2), listRow_showView
    /cmsb/lib/menus/default/list_functions.php (cont'd)               listRow_showModify, listRow_showErase, listRow_actionLinks, listRow_html
    /cmsb/lib/viewer_functions.php                                    viewer_postinit, viewer_link_field_content, viewer_output_rows
    /cmsb/lib/menus/header.php                                        headers, admin_head
    /cmsb/lib/menus/header_functions.php                              tableList, menulinks_array, menulinks_myAccount (2), menulinks_rowHtml (70)
    /cmsb/lib/menus/header_css.php
    /cmsb/lib/menus/footer.php                                        execute_seconds, admin_footer, admin_footer_final

    Plugin Hooks Called                                                Hook                        Calls  Avg Time  Total Time
    -----------------------------------------------------------------  --------------------------  -----  --------  ----------
    /cmsb/plugins/simpleCart/simpleCart.php:17                        admin_postlogin                 1     0.4ms      0.000s
    /cmsb/plugins/reportBuilder/reportBuilder.php:23                  menulinks_rowHtml              70     0.0ms      0.000s
    /cmsb/plugins/reportBuilder/reportBuilder.php:21                  admin_postlogin                 1     0.0ms      0.000s
    /cmsb/plugins/newletterBuilder/newsletterBuilder_cmsMenus.php:7   listRow_displayValue            2     0.0ms      0.000s
    /cmsb/plugins/developerConsole.php:26                             admin_footer_final              1     0.0ms      0.000s
    /cmsb/plugins/newletterBuilder/newsletterBuilder_cmsMenus.php:10  userHasFieldAccess              3     0.0ms      0.000s
    /cmsb/plugins/simpleForum/simpleForum.php:40                      listRow_actionLinks             1     0.0ms      0.000s
    ...
    /cmsb/plugins/permalinks/permalinks_cmsMenus.php:20               listRow_displayValue            2     0.0ms      0.000s
    /cmsb/plugins/permalinks/permalinks_cmsMenus.php:19               adminUI_args                    1     0.0ms      0.000s
    /cmsb/plugins/reportBuilder/reportBuilder.php:24                  admin_head                      1     0.0ms      0.000s
    -----------------------------------------------------------------  --------------------------  -----  --------  ----------
                                                                       TOTAL                         121     0.0ms      0.001s

-->

The full changelog for this release is as follows:

*** June 12, 2025 - Version 3.78 (PHP 8.1 Required, Plugin and Debug Tools)

SERVER REQUIREMENTS (Since Jun 2025): PHP 8.1+ and MySQL 5.7+ (or MariaDB 10.2+)

IMPORTANT: PHP 8.1 NOW REQUIRED
- PHP 8.1+ is now required (PHP 8.0 reached end-of-life in December 2023 and no longer receives security updates)
- Upgrading provides ongoing security patches and improved performance

NEW FEATURES
- Admin > General Settings: Added "Admin Debug Mode" toggle for development diagnostics
- Plugins > Disable Plugins: New toggle switch to temporarily disable all plugins for troubleshooting
- Enhanced Debug Footer: Performance monitoring for developers
- Displays execution time, memory usage, and per-plugin hook performance metrics
- Shows time spent in each plugin hook to identify bottlenecks
- Lists all available plugin hooks on current page
- Works in both admin interface and frontend pages

PLUGIN SYSTEM IMPROVEMENTS
- Modernized Plugin API with 33% performance improvement
- New method names (old methods still work):
- Plugin::on() replaces addAction()/addFilter()
- Plugin::action() replaces doAction()
- Plugin::filter() replaces applyFilters()
- Full backward compatibility - existing plugins work unchanged
- Added support for PHP 8.1 first-class callables
- Traditional: pluginAction_addHandler('functionName', 'admins')
- Modern: pluginAction_addHandler(functionName(...), 'admins')

MINOR CHANGES
- Developer Console: Long data values now scroll within 75px containers for better readability
- Source Files: Converted all line endings from Windows (CRLF) to Unix (LF) format

FOR PROGRAMMERS
- Server::pathToUrl(): Converts absolute file paths to web URLs, with optional ?t=timestamp for cache-busting
- adminUI(): New BUTTONS_HEADER and BUTTONS_FOOTER arrays for positioning action buttons above or below content
- adminUI(): Button definitions now accept 'rawHtml' => '<custom html>' for complex button layouts
- adminUI_toggleSwitch(): Creates Bootstrap-style toggle switches for binary settings in admin forms

BUG FIXES
- formatBytes(): Fixed inconsistent decimal display and missing thousands separators in file sizes
- Database Editor: Fixed menu cache not updating after manually creating schema tables
- Admin > Server Info: Improved display of very long open_basedir paths with proper line breaks
- Field Editor: Fixed default values incorrectly showing for blank upload info fields
- Related Records: Fixed colspan issue in "No records found" messages
- Admin > Server Info: Fixed error when php_ini_loaded_file() returns false
- Misc code and other minor improvements

You can download the latest beta here:https://www.interactivetools.com/download/

Please post (or email) any feedback, questions, concerns, or bugs you find.   Your help with beta testing allows us to release new features even faster.

Thanks. We look forward to your feedback! :)

Dave Edis - Senior Developer
interactivetools.com

Thanks Jeff,  That was actually related to a very obscure bug, so we found it and fixed it.

Dave Edis - Senior Developer
interactivetools.com

By Dave - Yesterday at 1:51pm - edited: Yesterday at 1:52pm

Hi All,

We just released v3.78 beta 2! This update has some minor bug fixes (include the above issue) and some UI improvements for Debug Footers: 

Here's what we updated in the header: 

  • Total plugin time shows as seconds and percentage, so you can see at a glance how much of your page load is spent in plugins
  • PHP settings show max seconds, memory, and OpCache status, so you know what you're working with and how long you need to wait for OpCache to refresh the cache after changes
  • Remote IP is displayed to make it easy to copy and paste when writing debug code, e.g., if ($_SERVER['REMOTE_ADRR'] === '156.51.31.129') { ... }
<!-- DEBUG FOOTER (visible to admins only)

    PAGE PERFORMANCE                PHP SETTINGS              SYSTEM                        
    ----------------                ------------              ------                        
    Total Time:  0.007s             PHP Version: 8.4.8        CMS:       v3.78 (build 2902) 
    - CMS Core:  0.006s (92%)       Max Time:    120s         Remote IP: 156.51.31.129      
    - Plugins:   0.001s (8%)        Max Memory:  128M                                       
    Peak Memory: 1.40 MB            OpCache:     On (2s)      

And under Plugin hooks we added a Total (ms) column to make it extra clear what's what without having to do mental math to convert averages into totals.  For reference, 1.000 ms equals 0.001s.

    Plugin Hooks Called                                        Hook                                  Calls    Avg Time  Total (ms)  Total (s)
    ---------------------------------------------------------  ------------------------------------  -----  ----------  ----------  ---------
    /cmsb/plugins/websiteMembership/websiteMembership.php:37  viewer_postinit                           1     0.495ms     0.495ms     0.000s
    /cmsb/plugins/facebookLogin/facebookLogin.php:23          _websiteLogin_init.pre_actionHandler      1     0.025ms     0.025ms     0.000s
    /cmsb/plugins/permalinks/permalinks.php:29                viewer_output_rows                        5     0.003ms     0.013ms     0.000s
    /cmsb/plugins/permalinks/permalinks.php:27                init_complete                             1     0.005ms     0.005ms     0.000s
    /cmsb/plugins/simpleCart/simpleCart.php:18                viewer_postinit                           1     0.003ms     0.003ms     0.000s
    /cmsb/plugins/simpleCart/customCart.php:78                viewer_postinit                           1     0.001ms     0.001ms     0.000s
    /cmsb/plugins/facebookLogin/facebookLogin.php:24          _websiteLogin_init.pre_actionHandler      1     0.000ms     0.000ms     0.000s
    ---------------------------------------------------------  ------------------------------------  -----  ----------  ----------  ---------
                                                               TOTAL                                    11     0.049ms     0.542ms     0.001s

Thanks to these tools, we’ve already halved our CMS load time by half, by moving slower plugin setup from the per-page hook (admin_postlogin) into the plugin menu initialization (plugin_menu_init) and applying a few other tweaks.

Give it a try and share any feedback; otherwise, we’ll publish v3.78 as stable within the next few days.

Thanks for your help!

Dave Edis - Senior Developer
interactivetools.com

Awesome :-)

Does this release include the inclusion of columnEncryptionKey into the Env variables? And, the return of the login_isValidLogin hook (or similar) so we can add third party 2FA?

Cheers

Rob