March 21, 2022
If you are upgrading from 5.0.0 you will need to do the following:
Stop your server and make a backup just in case
Open the box.json
in the root of your project and make sure the following package scripts exist, if not, add them
Open a box
shell in the root of your project
Remove the resources
folder in the root: rm resources --force --recurse
Run update --force
to update your installation to the latest release
Run run-script contentbox:migrate:up
to upgrade your database to this patch level
Startup your engines!!
CONTENTBOX-1410 Widget Form missing type and class elements
CONTENTBOX-1409 regression: issue when resetting an user password due to change to getFullName()
CONTENTBOX-1407 Media Manager Item Contextual Menus Do Not Work
CONTENTBOX-1405 Cloning Fails if Title of Page/entry/contentstore that Contains an Apostrophe
CONTENTBOX-1398 Cloning a Page with Children Produces an Error
CONTENTBOX-1397 Settings should not be cached on a per host basis anymore, since a single instance manages 1 or x number of sites
CONTENTBOX-1396 Deleting Permissions is not working due to change of primary key from numeric to string
CONTENTBOX-1381 Individual ContentBox Content-Level Cache Settings are Never Checked
CONTENTBOX-1379 Fail Quietly on ContentBox Module Removal
CONTENTBOX-1367 error on relocate widget when arguments have no length
CONTENTBOX-1365 Paginated results in CBAdmin for Page Children returns non-parented results for page 2
CONTENTBOX-1364 Relocation Widget Always inserts URL arg even when selecting page
CONTENTBOX-1362 Change all date comparisons on the expirations and publishing dates to dateCompare() to avoid ambiguity with types
CONTENTBOX-1361 Pages with null expiration date show as Expired in Page Editor
CONTENTBOX-1358 API throwing exception when content objects exist in multiple sites
CONTENTBOX-1357 If using the contentbox installer and no database tables are created yet, running the migrations fail due to tables not found
CONTENTBOX-1356 Invalid setting name on migration removing unique constraints
CONTENTBOX-1355 Category isPublic new boolean flag cannot be notnull=true as it has been a new added field
CONTENTBOX-1354 Rapidoc is not publishing on latest builds
CONTENTBOX-1353 MSSQL Issues when upgrading v4 databases due to uuid's and invalid sql syntaxes
CONTENTBOX-1333 If you activate a new theme in the active theme area, contentbox creates double entries for theme settings
CONTENTBOX-1401 Add a Warning Confirmation When a Published Page is About to Be Sent to Draft
CONTENTBOX-1386 cleanup of dev dependencies on site box.json
CONTENTBOX-1384 Remove development environment from 127 ip due to container executions
CONTENTBOX-1383 Remove cacheLayout column/values from SQL seeder files
CONTENTBOX-1380 Remove Individual Page Handling of SSL
CONTENTBOX-1373 Add support for x-forwarded-port to the site root url builder in order to assist with proxied web servers
CONTENTBOX-1363 Consolidate and encapsulate the usage of date/time methods for publish/expire date in the base content
CONTENTBOX-1359 Add Error handling to renderWithSearchResults
CONTENTBOX-1351 Resources folder that contain apidocs + seeders + migrations is not updateable
CONTENTBOX-1394 Create the migration to remove the page sslOnly bit
CONTENTBOX-1389 QA of the entire admin and API
Master artifact was stuck at -snapshot
fix with master artifact
CONTENTBOX-1412 VerifyPageLayout() on the page rendering touches the filesystem on each request, removing this as it is not needed
CONTENTBOX-1368 rc.pageUri is only the first segment of the actual slug, now it contains the full hierarchical slug
August 9, 2022
regression - the author preferences UI form should not overwrite all preferences when saving
Adding a category when creating a new blog post causes an error
Upgrade to ContentBox 5.2 from 5.0 does not allow pages to save
PAGES_EDITOR permission should allow for publishing/unpublishing for editors
Pagination stops working intermittently when navigating the site tree
Media manager context menus breaking intermittently and only a full reload will fix
Publishing time is decimal formatted not Time Formatted
Do not allow to set yourself as your own parent in pages
Import dialog broken regression on all editors
Retrieval Order Field will Only Accept Numbers up to 99
Blog entry content should not have parent modifier
Link the swagger resources to the actions in the api module
ContentBox v5.x is a major version update and will require the following instructions to update your v4.x installations. Please follow this guide or contact us at so we can assist you during your upgrade process.
If you are in version 3.x then you will need to upgrade to version 4.x before upgrading to the 5.x series
All Upgrades to ContentBox should be done with the assistance of So make sure you have CommandBox installed in the server/machine you will be upgrading.
Once you have CommandBox installed, let's make sure we have some global dependencies installed so CommandBox can work with ContentBox automated upgrades:
This will install the module and the module that will be used to provide upgrades in the future. This is only done once. ContentBox 5 already ships with these dependencies once you install it.
.env
)The upgrade process and the database migrations rely on environment variables/secrets in order to connect to your database and migrate it. Create an .env
file in the root of the ContentBox installation and add in the configuration according to your database and configuration preferences.
To generate a JWT secret key you can use CommandBox and run the following in the command prompt: #generatesecretkey "blowfish" 256
Please note that once you are on ContentBox 5 none of these steps will be necessary anymore. Since it is part of the default installation.
Please note that this .env
file should NEVER be in source control and NEVER be web accessible
If you are running CommandBox as your server of choice, then you can update your .cfconfig.json
in the root of your application to the following:
Once your environment file is seeded open the box.json
of the ContentBox 4 and add the following configuration.
Most likely you will already have a scripts
key in the box.json
so just add the listed scripts below:
PLEASE MAKE SURE TO SAVE THE FILE!
Once this is done we can reload the CommandBox shell with the command reload
and it's time to make sure migrations can connect to your database with the variables and connection information:
Please make sure you backup your source code and your database. We are not liable for broken installations.
Make sure the database, the tables and columns are using utf8mb4
if you are using MySQLx
If you are using MySQL you will need to make sure your database and your tables are all using the following character set: utf8mb4
and NOT just utf8
. ContentBox 5 requires the charset to be utf8mb4
.
We also suggest you use the utf8mb4_general_ci
collation for your database, tables and columns as well.
We have prepared a CommandBox task that will upgrade your installation in one easy execution.
If you are in a Linux or Mac environment you can execute the task using the following shell commands from the root directory of your application.
If you are in windows, download the following task:
and place it in the root of your project. Then issue the following CommandBox shell command to execute it.
The updater will update your installation and run the migration scripts. However, it will also override the following files:
It will create .bak
files for the originals so you can manually merge in any changes you had before.
Once you do, go ahead and startup the engines! You are upgraded!
If you had developed themes, modules, models, or any type of extension based on ContentBox 4, you will most likely have to update your code to match the new interfaces, methods and approaches.
If you had custom models, modules, themes and widgets, please do a search for the old injection namespace of @cb
for ContentBox models. Then replace it with the new namespace @contentbox
.
layoutRoot() => themeRoot()
customHTML() => contentStore()
author.getName() => author.getFullName()
New Migration Utils for all migrations to share common utilities
Rapidoc enhancements for our API Docs
New Admin Bar
Verify the upgrader
Deprecation of Mobile Layout
in order to use responsive design
This will tell CommandBox migrations how to connect to your database in preparation for upgrades. Please note that the contentbox:migrate
scripts are to execute migrations for ContentBox. You can have app migrations as well, following the normal .
If this command succeeds, then we are ready to go to the next step. If it fails, then check your credentials, connection information and that you can actually connect to the database. If not, ask away in our community forum:
A snapshot overview of our major versions
In this section you will find the release notes for each version we release under this major version. If you are looking for the release notes of previous major versions use the version switcher at the top left of this documentation book. Here is a breakdown of our major version releases.
Version 5 is a major architectural shift for ContentBox as we go Multi-Site and Hybrid headless API, with over 145 different improvements and new features.
Version 4 focused on upgrading its internal core to ColdBox 5 and providing more modular development around its core. We introduced the contentbox-custom
module so you can have your assets externalized from the CMS core. We also added tons of security features such as two factor authentication.
Version 3 also focused on a major ColdBox upgrade and a completely new admin interface.
In this version we introduced the content hierarchy and pages. It was a major leap to a full fledged CMS.
Our initial CMS release
September 23, 2021
ContentBox 5 is a major update for this CMS and it includes a major architectural change to move the CMS forward for the next 10-15 years. We have introduced multi-tenancy and a complete headless approach to ContentBox. It has become one of our biggest releases since our initial release since 2011.
You can find our release notes here and we will discuss our major areas of improvement for this release. If you need to upgrade your previous versions of ContentBox, please see our upgrade guide.
We have used the power of CommandBox, to build a ContentBox CLI (contentbox-cli
) module that will assist you with installations, upgrades, maintenance and much more. Once CommandBox is installed you can run the following to install our cli:
That's it. This will install the contentbox
namespace which will assist you in your ContentBox adventures. Please see the installation guide on usage.
We have upgraded our core to ColdBox 6 and we have received a tremendous amounts of benefits (https://coldbox.ortusbooks.com/intro/release-history/whats-new-with-6.0.0). Here are some of the features we get with this upgrade:
Performance, performance, performance. ColdBox 6 has been finely tuned to make your applications much more performant and stable under high load.
Better new CFML engine support
Asynchronous programming. We have introduced the concepts of the async
package to the core and ContentBox will leverage more of these features for background job processing, automation and much more.
New logging facilities and enhancements
Better exception handling for developers
REST Handlers and highly performant REST Routing
Singleton View Rendering. You will find that all renderings are way faster than before.
Much more!
We have migrated our cbsecurity
module to the latest version to give you a wealth of features (https://coldbox-security.ortusbooks.com/intro/release-history/whats-new-with-2.0.0) such as:
Fortified rule engine
Annotation based security engine
JWT support
Security Services
Cross site request forgery support
Although multi-tenancy been one of ContentBox's most requested features, we were hesitant for many years to comply due to the size of the needed refactoring. However, we have finally created a great base for making ContentBox multi-tenant. You can now configure 1 or 10000 sites under the same ContentBox umbrella. The new installer actually creates two sites for you: a development/staging site and a production site. That means that you can manage different content environments all under the same deployment.
Here are some of the features you get with multi-site ContentBox:
Ability to register an infinite number of sites
Site detection by regular expressions or patterns on incoming URIs
Site detection by header identifier if using the headless CMS or reverse proxies
Each site can contain its own
Categories
Blog
Pages
Content Store
Menus
Commenting System
Themes
Admin site switcher
Admin site control bar
Clone content or entire content hierarchies from one site to the other
Publish content directly to different sites
Move content between sites
Much more coming soon.
The entire admin UI has been revamped and streamlined. You will find it much more breathable and easier to work with, especially from mobile devices and smaller screens. We are also starting to prepare a major theme change and customization that might be introduced in the final release or scheduled for a minor update.
We have also started our migrations to Alpine.js and Tailwind for the reactivity and overall look and feel of the admin module.
We have completely changed our ORM structures and custom queries so it can be friendlier to other RDBMS. In this release we focus on portability of the host database and finally have core PostgreSQL support.
We have analyzed the entire ORM structures, queries and CFML code in this release thanks to FusionReactor's Profiler. We have streamlined the way the CMS loads and the results are impressive. In ContentBox 5, first loads are about 70% faster and page executions are around 30-40% faster than ContentBox 4.
This is such a controversial feature to be able to deliver patches via the admin. We have completely dropped the capability to patch the CMS from within the CMS. It caused more issues than it solved and in Windows it was pretty much impossible.
We have moved to a CommandBox + Migrations approach and the results are amazing. No more broken installs, half done db updates and more. Now you can simply run two CLI commands and be done with it. Here is a typical flow for updating your system:
[CONTENTBOX-1085] - Preflight check has a race condition where duplicate settings can be inserted and stop app from starting
[CONTENTBOX-1106] - ColdBox modules directory renamed to modules_bak during upgrade to ContentBox 4.2
[CONTENTBOX-1107] - Custom Module Dependencies are not respected by ContentBox ModuleService
[CONTENTBOX-1111] - When deactivating modules, module widgets still remained registered
[CONTENTBOX-1115] - Regression cachelayout
setting missing from UI on pages and blog entries
[CONTENTBOX-1118] - media service had a hardlink
to the UI module which threw an exception when the UI module was removed
[CONTENTBOX-1126] - BaseContent
has expireDate
as required via validation but not in the model
[CONTENTBOX-1127] - Problem with multiple select options in RecentPages
widget
[CONTENTBOX-1128] - Problem in RecentPages
widget on filter by category
[CONTENTBOX-1132] - Fix CB admin bar image alignment on tailwind sites
[CONTENTBOX-1133] - Fix ContentBox "latestversion" updater error #445
[CONTENTBOX-1134] - Fix content sidebar toggle label #444
[CONTENTBOX-1143] - multi domain bug when using cgi.http_host just like ColdBox, move to cgi.server_name instead affects all caching cleanups
[CONTENTBOX-1151] - Bug in Widget View clearing out cached widget query
[CONTENTBOX-1152] - ACF incompats with relocate
() after applicationStop
() due to ungraceful app metadata wiping by ACF
[CONTENTBOX-1155] - Admin Views Accessible even if logged out: cbsecurity not firing.
[CONTENTBOX-1157] - CB 5, Context menu Sitemap not visible, see screenshot
[CONTENTBOX-1158] - ms sql server doesn't support sqltype
boolean
[CONTENTBOX-1196] - When cloning and marking to publish, not publishing due to missing publish date
[CONTENTBOX-1198] - Site settings for comments are not being transferred
[CONTENTBOX-1182] - "\" doesn't go to global search
CONTENTBOX-1331 zipSlip fix for zip extractions
CONTENTBOX-1330 Error in Menu Sandbox
CONTENTBOX-1329 Listing Options do not work in Media Manager
CONTENTBOX-1327 Content Store, Entries and Pages Clone Error
CONTENTBOX-1318 If Page and ContentStore Item Have the Same Slug an Error is Thrown
CONTENTBOX-1317 Deleting a ContentStore Item from the Options Menu Throws an Error
CONTENTBOX-1316 Text Filter on Widget Insert is Broken
CONTENTBOX-1311 Truncate Auth Logs Function Throws SQL Error on SQL Server
CONTENTBOX-1307 ContentBox Menus and Submenus Default Order to Publish Date, not the Order
CONTENTBOX-1306 "Create Page" button in Admin throws Error
CONTENTBOX-1304 No Longer Able to Drill Down in Site Map
CONTENTBOX-1302 Theme is reset to default when saving a site
CONTENTBOX-1298 Prevent Re-Slugification of ContentStore Slugs on Every Save
CONTENTBOX-1290 Add Backward Compatibility Alias for @cb for ContentBox Models
CONTENTBOX-1284 Saving content on one site, if your site selection clears, will result in the
assignment of page to default
CONTENTBOX-1277 The model namespace of cb was always wrong. It should have been contentbox
if not, no module settings woud have ever been set.
CONTENTBOX-1276 RenderView Widget Attempts to Render Before View has Been Set
CONTENTBOX-1268 Regression - menu()
in the cbHelper does not return the menu children in data
mode
CONTENTBOX-1266 Data Snapshots in Admin are not Site Aware
CONTENTBOX-1256 DIFF Screen forces everything onto a single line and is unusable in a modal
CONTENTBOX-1251 Change tray icons to relative paths so CommandBox can open them correctly
CONTENTBOX-1245 contentstore saving did not account for original slug in order to change downstream hiearchies
CONTENTBOX-1240 Ordering pages on the sitemap breaks the javascript
CONTENTBOX-1231 exception when visiting newly created sites due to theme not being activated
CONTENTBOX-1224 Site Data Does not Export
CONTENTBOX-1220 Cache cleanups interceptor missing events for entry and content store removals
CONTENTBOX-1214 Font issues when loading admin
CONTENTBOX-1206 Respect carriage returns on comments
[CONTENTBOX-1121] - Upgrade javaloader
to v2.0
[CONTENTBOX-1123] - Upgrade to cborm
3 and get all of it's goodness
[CONTENTBOX-1135] - Upgrade to ColdBox 6
[CONTENTBOX-1136] - Upgrade to CBSecurity
2
[CONTENTBOX-1139] - New configuration for site is using cfconfig
with environment variables
[CONTENTBOX-1140] - Upgrade the usage of `bit` sql type to `boolean` sql type to avoid issues with major DB vendors and also to support PostgreSQL natively
[CONTENTBOX-1141] - Multi-site capabilities for all content and installations
[CONTENTBOX-1142] - All administrator js/css libraries updated to latest versions
[CONTENTBOX-1149] - Installer can now create a production and development site for you thanks to multi-site support
[CONTENTBOX-1153] - update security rules to match cbsecurity 2.0
[CONTENTBOX-1179] - Upgrade to cborm 3
[CONTENTBOX-1192] - Use Docbox 3 to generate the docs instead of the old approach
CONTENTBOX-1308 Refresh tokens support
CONTENTBOX-1301 Remove all $(document).ready() and move to DOMContentLoaded events to avoid relying on jquery and allow for deferred js
CONTENTBOX-1300 Load all js assets with defer to allow for modern JS libraries and for non blocking to DOM loading
CONTENTBOX-1291 Add ability for all search based content type services to have a array of property list return
CONTENTBOX-1275 Consolidate the editors (pages,contentstore,entries) to a single content editor
CONTENTBOX-1274 content version Diff ignore whitespace by default
CONTENTBOX-1269 Content Object Helpers
CONTENTBOX-1264 Enable Setters on Primary Keys to allow for migration of uuids to be consistent
CONTENTBOX-1257 Add export all and export selected to bulk actions
CONTENTBOX-1254 Add ability to load .env files on demand for NON commandbox installations
CONTENTBOX-1253 Ability to configure all orm settings via env variables.
CONTENTBOX-1252 Add filtering to geek settings by site
CONTENTBOX-1249 Remove the dsn creator in preference to our cli based approach
CONTENTBOX-1248 DSN Creator should update the dialect once the process starts
CONTENTBOX-1246 Allow json as native markup for content storaage
CONTENTBOX-1244 Ability to have unique slugs on a per content type basis instead of before which was unique across content types
CONTENTBOX-1242 Use the browser's timezone to display all date times to users
CONTENTBOX-1241 Add cbswagger documentation to resources and api module
CONTENTBOX-1238 tailwind polyfills
CONTENTBOX-1234 ContentBox core now registers a contentbox-tasks
schedule executor that can be used for scheduled tasks
CONTENTBOX-1232 Add an option to open a site from the site manager
CONTENTBOX-1225 Add a clear entire template cache from the admin
CONTENTBOX-1222 new buildContentCacheCleanupKey() on content objects so we can clean multiple permutations of the same content
CONTENTBOX-1219 Introduce category count caching to speed up renderings
CONTENTBOX-1217 Rearchitecture of the active content to NOT be a relationship but using the versions relationship
CONTENTBOX-1213 New Updater task and start of tasks that can ship with ContentBox
CONTENTBOX-1205 Add support for markdown comments from the ui
CONTENTBOX-1168 Responsive UI Verifications
CONTENTBOX-1153 Upgrade to cbSecurity 2
[CONTENTBOX-1110] - Drop lucee 4.5 support
[CONTENTBOX-1138] - Drop support for `runtime.properties.cfm` in favor of cfconfig datasource additions
[CONTENTBOX-1144] - Remove autoupdates capabilities in order to rely on CommandBox for patches and updates
[CONTENTBOX-1166] - Upgrade v4 migration to only run on v4 systems
[CONTENTBOX-1177] - Removal of full screen button as all browsers support this now
[CONTENTBOX-1181] - Remove the textarea editor, it's useless
[CONTENTBOX-1108] - Add restrictions on orm cfc locations for faster startups on Application.cfc
[CONTENTBOX-1109] - Remove directory browsing for production installations
[CONTENTBOX-1116] - Change the order of the logout function, to the announcement has the oCurrentAuthor still, for logging purposes.
[CONTENTBOX-1117] - Update dsn creator to support lucee 5.3 mysql jdbc path
[CONTENTBOX-1120] - Intercept installer relocation to check if the installer module is even installed else present a nice message
[CONTENTBOX-1125] - Add a setting for the timeout in the forgot password workflow
[CONTENTBOX-1131] - Encode theme settings in active theme page
[CONTENTBOX-1150] - CSS Updates to match new admin theme
[CONTENTBOX-1156] - CB5 - Multi site - feature to allow URL Path
[CONTENTBOX-1161] - DSN Module Update to latest CFML engine settings
[CONTENTBOX-1197] - Refactor formulas to methods so they can give a performance boost and increase encapsulation
[CONTENTBOX-1193] - update express to latest stable lucee
[CONTENTBOX-1194] - update express to latest tomcat 9
[CONTENTBOX-1195] - update tuckey rewrites to latest based on commandbox
CONTENTBOX-1328 Inconsistent spacing between panels under Details
CONTENTBOX-1324 Create Setting - Core Checkbox With Global Option Seems Redundant
CONTENTBOX-1319 SSL Options on Relocation Widget Should Default to Current Protocol
CONTENTBOX-1315 Settings Area is Extremely Slow to Load on Large Site
CONTENTBOX-1314 Stats for Subscribers Should be Placed under Comments Menu
CONTENTBOX-1313 Site Selection Cookie Should Either Not Expire or Expiry Forwarded on Request
CONTENTBOX-1310 Drag and Drop Ordering on Large Site Tree is Very Slow
CONTENTBOX-1305 Issue a warning when you will save content that is published and into draft mode.
CONTENTBOX-1299 Finalize migration to ColdBox 6 REST instead of REST Template assets
CONTENTBOX-1297 Increase Column Size of Content slugs, title, featuredImage, featuredImageURL
CONTENTBOX-1294 CKEditor Allow access to ContentBox Plugins Insert Buttons in Source Edit Mode
CONTENTBOX-1293 SubPage Menu Widget should Default to Current Page
CONTENTBOX-1289 Dashboard Should Be a Single Link in Admin and "About" should be in "System"
CONTENTBOX-1288 Clicking in to a Content Objects Children should Reset Page Scroll
CONTENTBOX-1287 Allow transactional argument to SiteService@save
CONTENTBOX-1283 Allow Categories to be Internal/UnPublished
CONTENTBOX-1282 Migrate post to pre js for assets to save on minimization and inline js that is used.
CONTENTBOX-1281 Admin current working site id should be set in a cookie instead of cache to provide longevity.
CONTENTBOX-1279 Loading Site Config Page on Large Site is Extremely Slow
CONTENTBOX-1273 rework all settings tabs to have their own form and validation to avoid validation issues in different tabs you don't get notified with
CONTENTBOX-1272 ACF increase post parameter list for mass setting updates
CONTENTBOX-1255 Add JSON Diffing support for ContentStore items in the history panel
CONTENTBOX-1250 Add quoted table names, join columns and columns to preserve case on all RDBMS systems
CONTENTBOX-1239 Also the DSN name is now hard-coded in the cfconfig file so you can have a database named something other than "contentbox"
CONTENTBOX-1223 Update the clear page wrappers call to include multi-site regex expression to clear stale data
CONTENTBOX-1218 Add an isPreview to the addContentVersion() so the max content checks are not executed on previews
CONTENTBOX-1216 registering info for contentbox logging as the default.
CONTENTBOX-1215 If a post has been written in a certain markup, make sure the editor adheres to it
CONTENTBOX-1211 Granular performance optimizations for content object iteration and rendering
CONTENTBOX-1210 Optimize avatar image creation by using a request cache
CONTENTBOX-1209 Optimize the way site() does discovery and site usage by adding a request cache