CMSB v3.82 Released (Improved UI, Menu Count Badges, & .env support)

10 posts by 6 authors in: Forums > CMS Builder
Last Post: Tuesday at 7:06am   (RSS)

Hi everyone,

We've just released v3.82, and we're already running it on our site.  

Here are some highlights from this release: 

  • Database Editor
    • We've reorganized the Database Editor tabs to make it easier to find what you're looking for.
  • Menu Record Counts
    • You can now show record counts on any menu with: Database Editor > Menu Link (tab) > Show Record Count
    • And record counts for all menus now load via Ajax for faster initial page load time
  • .env.php Support
    • You can now store sensitive credentials outside of your web root with .env.php files.  See the included .env.example.php file to instructions
    • This is mainly useful when you want to keep your passwords out of git or backup files.
  • We've also made many minor UI improvements throughout the interface
  • General code modernization and cleanup

Note: We still have a queue of pending user feature requests.  We're releasing what we have now so you can start using it.  Feel free to remind us what you'd like to see next. 

The full changelog for this release is as follows:

*** January 11, 2026 - Version 3.82 (Menu Count Badges & .env.php Support)

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

NEW FEATURES
- Menu Count Badges: Added "Show record count in menu" option to display record count next to menu items
- This can be found in: Database > Table > Menu Link > Show Record Count
- .env.php Support: Optionally store sensitive credentials in a separate file outside your web root.
- Safely commit settings files to git without exposing secrets
- Back up your data folder without including credentials
- Uses .php extension so credentials can't be viewed via direct URL access
- See .env.example.php for details and instructions
- Database Editor: Reorganized Section Editor tabs and fields with improved layout

MINOR CHANGES
- Editor UI: Create button now supports middle-click to open in a new tab
- Editor UI: Editor instructions now display in a dashed border box for better visibility
- Example Cron: Improved documentation and examples for /plugins/_example_cron.php

FOR PROGRAMMERS
- SmartArray: Major refactor with ~50% better performance (removed ArrayObject dependency)
- New sprintf() method - applies formatting to each element with auto HTML-encoding
- Supports {value} and {key} as readable aliases for sprintf formats
- Example (table cells): <tr><?= $row->sprintf("<td>{value}</td>")->implode() ?></tr>
- Example (headers): <tr><?= $row->keys()->sprintf("<th>{value}</th>")->implode() ?></tr>
- Array access deprecated: $array['key'] → use $array->key or $array->get('key')

FOR PROGRAMMERS (BREAKING CHANGES)
- Note: These changes only impact developers who have written custom PHP code using the following features
- .env.php: Code using $_ENV['key'] to access .env values must be updated to \CMS::env('key')
- SmartArray: Functions with "SmartArray" type hints must be updated to use "SmartArrayBase"
- Before: function yourCustomFunction(SmartArray $input): SmartArray
- After: function yourCustomFunction(SmartArrayBase $input): SmartArrayBase

BUG FIXES
- CMS Link Menus: Fixed error when Authors clicked link menus ("This section isn't configured to allow 'Author' user access")
- CMS Record Lists: Viewers can now see menus and lists even when View isn't enabled (only hides the view link)
- Misc code and other minor improvements

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

Please feel free to ask any questions or post any feedback or comments.

Thank you!

Dave Edis - Senior Developer
interactivetools.com

Upgraded from 3.80 to 3.82 the other day. Just reporting no problems at all :).

Hi mark99, 

Great, thanks for letting us know!  Glad it's working well.

Dave Edis - Senior Developer
interactivetools.com

I've been working extensively with the new .env file capability and have migrated all of my websites to use it for encryption keys, API keys, mail credentials, and other sensitive settings data. Everything has been running smoothly with no issues to report. 

Thanks,

Kenny H

Hi Dave

Thanks for the update. I've run into an issue. I can not log off from admin.php. When you click the link: https://domainname.co.uk/cmsb/admin.php?action=logoff, the welcome screen loads and the user stays logged in. This is an upgrade, not a new installation.

Thanks
Jeff

Jeff

BUG: When using the image tool in the TinyMCE editor, I can no longer use the media library. I get an error: invalid field. Using the traditional image upload works ok thought

Jeff Shields
yaadev.com

Hi All, 

Thanks for the feedback!

@Kenny, excellent, glad to hear the .env files are working well for you!

@JeffC, thanks for the report.  We can't recreate this locally.  Can you send me an email or support ticket and we can take a look.

@JeffS, thanks, I posted a fix for this in the other thread and we'll have it updated for the next release.

We've got some really exciting features coming in the next beta.  Appreciate all your support and feedback!

Dave Edis - Senior Developer
interactivetools.com

I can not backup all database files, I get the error (below) However I can't logout and log back in and try again as the logout link does not work (as previously stated). Is there a way to force logout so I can log back in and try it again?

Security Error: No _csrf exists in session. Try reloading or going back to previous page.

Hi Zaba

I was able to log back in after deleting my cache.

Christine @ IT helped me out. I've copied her reply to me below. My situation may not be the same as yours, so don't drop tables unless you are absolutely confident, but hopefully this will help.

It looks like the root cause of the issue resides within the site's sessions table. The "id" field is supposed to be the unique primary key of the sessions table, but in the site's database, the "id" field instead looks to be just a regular non-unique field, and an auto-incrementing "num" field is set as the primary key.

This means that every time a user clicks "Logoff", an entirely new logged-out session is being inserted into the sessions table, rather than the existing logged-in session record being updated. So the logged-in session always remains, and CMSBuilder never realizes you've actually logged out.

This happens because the query which handles this part of the logout process does so by making use of the "ON DUPLICATE KEY UPDATE" keywords, and an auto-incrementing primary key will always hold unique values, and therefore old logged-in session records will never have their keys identified as duplicate, so they will never be properly updated.

Simply dropping the sessions table entirely should trigger CMSBuilder to regenerate it with the correct fields. This can be done through phpMyAdmin in cPanel, or via the "MySQL Console" link in the Developer Console plugin in CMSBuilder.

Just to help clarify the difference in the primary key setup, in case a direct comparison is at all useful in illustrating the issue, here's approximately what the sessions table should look like:

cmsb__sessions CREATE TABLE `cmsb__sessions` (
  `id` char(64) NOT NULL,
  `expires` timestamp NOT NULL,
  `data` mediumtext,
  PRIMARY KEY (`id`),
  KEY `_auto_expires` (`expires`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC

And here's what the site's sessions table currently looks like:

CREATE TABLE `cmsb__sessions` (
  `num` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id` char(64) NOT NULL,
  `expires` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `data` mediumtext DEFAULT NULL,
  PRIMARY KEY (`num`),
  KEY `_auto_expires` (`expires`)
) ENGINE=InnoDB AUTO_INCREMENT=1010 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC

Jeff