Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
ContentBox 3.0.0 is a major release and with a completely rewritten administration module. If you are upgrading from a previous release, please make sure you read the Upgrading Guide. You can find the full release notes here: Release Notes
ContentBox 3 is a collection of more than 150 tickets resolved. It has been a massive undertaking with some great results. We have divided all the major updates in this release by category below:
This release was all about improvements to the core, localization and internationalization for sites, many bug fixes, UI improvements and updates to our containerization strategy. Please see below the major areas of improvement and our full release notes.
The installer module is now available as a standalone module using the slug contentbox-installer-module
. This will improve our container and your container strategy as now you can bring in the installer on demand via CommandBox.
Thanks to the Computer Know How guys you can contribute your own CSS files to the CKEditor instance so the content has your theme's look and feel. Please note, this is mostly usable for theme developers and module developers.
The event is called cbadmin_ckeditorContentsCss
and it will receive a struct with one key called contentsCss
which is an array. You can then append CSS style sheets to that array that CKEditor will showcase.
Thanks to the Computer Know How guys, this release sports many i18n improvements.
A ContentBox application depends on the ColdBox i18n module which gives you the ability to serve any content in any language, use resource bundles and use the resource utilities. However, we have now exposed the ability natively for users to change locales via the UI module using our URL of: http://site.com/__changelang/en_US
. The route expects an ISO valid language code in the format of code_variant
.
Note By default, visitor locale's are stored in the
cookie
scope. You can change this via theconfig/Coldbox.cfc
configuration CFC.
The CBHelper
object can now produce these links for you in your layouts, themes and views by leveraging the following method:
All caching strategies have now been updated to allow for locale to determine its key. This way, every visitor's language will be cacheable and performant.
[CONTENTBOX-442] - Emails sent out to be approved or point back to the dashboard are not adhering to SSL rules of the site
[CONTENTBOX-814] - Blog counts in category list include non-published entries.
[CONTENTBOX-880] - Admin actions are note multi-tenant, regression
[CONTENTBOX-896] - markdown converter not accounting for null markups from upgrades
[CONTENTBOX-897] - Importer does not import cbox package
[CONTENTBOX-898] - Error on update patch for additonal non-existen argument on log.append()
[CONTENTBOX-899] - missing variable exception on module config for environment variables and setting service
[CONTENTBOX-901] - On HTTPS reload link are not ssl enabled
[CONTENTBOX-909] - Adobe ORM Incompatibilities
[CONTENTBOX-910] - bug on maintenance mode when user not logged in, null exception
[CONTENTBOX-878] - Admin > Settings On/Off toggle
[CONTENTBOX-881] - Create new installer slug: contentbox-installer-module
[CONTENTBOX-905] - New __changeLang/:lang UI route to allow for User locale changes
[CONTENTBOX-906] - New CBHelper method for creating links to change UI locale languages linkLanguageChange()
[CONTENTBOX-911] - New ContentsCss interceptor for CKEditor module in order to allow for custom css to be loaded
[CONTENTBOX-912] - Add getNumberOfContentStore and PublishedContentStore formulas to categories
[CONTENTBOX-747] - Menu builder cannot render SSL links
[CONTENTBOX-812] - File Uploader - Select File Change text not obvious a button
[CONTENTBOX-813] - Filebrowser Root Path Setting failure doesn't throw error
[CONTENTBOX-883] - Tools Importer Function often times out
[CONTENTBOX-884] - Tools - Import button needs to be clicked twice?
[CONTENTBOX-885] - Importer - BlogCFC Importer fails if Pages aren't in current version
[CONTENTBOX-886] - Importer - BlogCFC Importer doesn't import blog hits correctly
[CONTENTBOX-894] - Related content entries not showing in chronological order
[CONTENTBOX-900] - strip whitespace for metadata content
[CONTENTBOX-902] - cbhelper links now link correctly to homepage
[CONTENTBOX-903] - Admin bar UI fixes
[CONTENTBOX-904] - Add i18n locale to content cache keys
[CONTENTBOX-908] - Security updates on pathing and forgebox modules
This release has a major focus on security, authentication, containers, testing and automation. Below you can find the major changes and updates for this release and our full release notes.
Our ContentBox docker image has been updated to support this release and we have added two new areas of improvements for containerization:
You can now create a config/runtime.properties.cfm
file with your database information and ContentBox will leverage it dynamically. No more registering of datasources on the CFML engines if you do not need to. This can allow you to leverage dynamic datasources for multiple environments and container deployments.
In a world now of containers and distributed computing, we have added the ability for logged in sessions to be tracked by the ColdBox Cache Storages and CacheBox. This means that you can leverage in-memory sessions or distribute to any Cache provider CacheBox can talk to and distribute your sessions easily. It will also allow you to use the geek settings to monitor and manage the session objects of your users. You can even clear them all, expire them or choose a-la-carte.
The new cache provider region is called
sessions
and you can find its definition in theconfig/CacheBox.cfc
file.
Make sure that your config.Coldbox.cfc
file contains in configure
function
This is one of our biggest features for ContentBox is our two factor authentication framework. That's right, we built a two factor module framework that will allow you to build or use any two factor or multi-factor authentication mechanism. We have included one in the core which is Email verification.
Please refer to the developing two factor authentication providers in order to get an in-depth look of how to build your own two factor authentication provider modules.
The following are the new interception points for two factor authentication
cbadmin_onTwoFactorSettingsPanel
- Shows on the two factor global settings panel
cbadmin_onAuthorTwoFactorOptions
- Shows on the options for two factor auth in the author editor
cbadmin_onAuthorTwoFactorSaveOptions
- Fires when the options are being saved
cbadmin_beforeTwoFactorForm
- Shows at the beginning of two factor form challenge
cbadmin_afterTwoFactorForm
- Shows after the two factor form challenge
cbadmin_onInvalidTwoFactor
- Fires when an invalid challenge has been made
cbadmin_onValidTwoFactor
- Fires when a valid challeng has been made
An admin can force two factor authentication for all users in the system and even provided a trusted device registry so ContentBox can track their devices and challenge only after a few days.
The user can also setup two factor authentication for their account if so desired.
An administrator now can control login options and enhance the logging experience of their users.
We have introduced the ability to create and organize permissions not only in roles but in our new permission groups. This will allow you to create more complex and robust permission schemas and be able to assign multiple permission groups to users. The entire permissions tab for authors has been revamped to allow you better visualization of rules and permissions.
The rate limiting module has been revamped to help with Denial of Service attacks or even just pesky scrapers. You can now configure more options for fine-tuning including relocation URLs, custom messages and improved logging.
There have been many updates on both the UI and the security of user passwords.
We have introduced the concept of a visual password meter, which can guide users when changing, resetting or setting passwords:
You can now also as an admin decide on the minimum length of user passwords.
As an administrator, you can now reset user passwords a-la-carte or for every single user in the system. This will issue a notification to the user with instructions on resetting their system password. User password reset workflow has now been improved with our new password reset screens instead of bulky double email validation mechanisms.
Here are the new interception events you can listen on for password reset workflows:
cbadmin_onGlobalPasswordReset
cbadmin_onPasswordReset
cbadmin_onInvalidPasswordReset
We have introduced a new approach to creating authors in ContentBox. You will now be presented with the new author wizard which will allow you to pre-fill author details in a secure manner. A notification will be sent to the new author's email address with a password setup token so they can secure their account.
The author listings have been improved with tons of new filters, reporting and even sorting options. Go admin like a mad man!
The Author Profile Snapshot has been updated to include a better UI, better visualization and a new action toolbar for direct Author actions and Author exporting.
We introduced markdown support for all content in many versions before. This update includes a brand new markdown engine with table support, code syntax highlighting and much more. We also made several settings and author specific details available as markdown content. In other words, viva markdown!
We have also updated our markdown UI editor and it can be used everywhere in the admin were markdown is allowed.
We have added a new two-step workflow for publishing any piece of content. This will allow you better visibility when working with drafts or live content. The new flow will also assist users that do not have any publishing capabilities.
We have improved the navigation of the content store and the sitemap by taping into the browser history API and providing history support for hierarchy navigation. Never again loose your place in the hierarchy.
[CONTENTBOX-882] -When cloning blog posts ( possibly pages too ) the code format is lost
[CONTENTBOX-891] -Trying to delete a single user with checked boxes fails
[CONTENTBOX-907] -"notify me" checkbox is forgotten on comment submission failure
[CONTENTBOX-913] -Fix issue of installer failing when rewrites turned off
[CONTENTBOX-914] -Adobe Incompatibilities for sidebar
[CONTENTBOX-915] -Render Markdown correctly on auto updates description
[CONTENTBOX-925] -Installer issues with new radio buttons
[CONTENTBOX-936] -Change $forgebox.load to GET request instead of POST for pagination to work
[CONTENTBOX-943] -MSSQL Regression due to Category Formulas
[CONTENTBOX-950] -Adobe 2016 Syntax Error
[CONTENTBOX-953] -Check Permissions fails on User with a null Role
[CONTENTBOX-647] - Add a password meter on the installer and user profile page with key enforcements
[CONTENTBOX-875] - Add content hierarchy history as URL doesn't reflect navigation into content hierarchy
[CONTENTBOX-916] - User Permissions Groups
[CONTENTBOX-917] - New setting for rate limiter to choose either a message or a redirection URL
[CONTENTBOX-918] - New setting to control if blocked attempts are logged or not
[CONTENTBOX-920] - New author quick report: numberOfContentStore
[CONTENTBOX-921] - Creation of new author toolbar for actions in snapshot location
[CONTENTBOX-922] - New export capabilities from new author toolbar
[CONTENTBOX-926] - Ability to showcase raw content in history panel
[CONTENTBOX-927] - Ability for a author password to be reset by an admin
[CONTENTBOX-928] - New reset interception points: cbadmin_onGlobalPasswordReset, cbadmin_onPasswordReset, "cbadmin_onPasswordReset", "cbadmin_onInvalidPasswordReset"
[CONTENTBOX-929] - Ability for admin to reset all author passwords
[CONTENTBOX-930] - When resetting a password and you have a previous password, they should not be the same
[CONTENTBOX-932] - New publishing details workflow
[CONTENTBOX-933] - Ability for authors to be sorted in the listing by different common orderings
[CONTENTBOX-938] - Make password length for authors a customizable rule
[CONTENTBOX-939] - Update all range settings to new slider UI
[CONTENTBOX-940] - New author creation wizard
[CONTENTBOX-944] - Enable markdown for site maintenance
[CONTENTBOX-945] - Enable MD Editors for settings for better usability
[CONTENTBOX-946] - Two Factor Auth Framework and Authentication
[CONTENTBOX-948] - Update markdown processor to latest version
[CONTENTBOX-949] - Create server.json for site and installers, so we can have rewrites and nice logos
[CONTENTBOX-951] - New preFlight checks for settings to avoid setting upgrade issues and better encapsulation
[CONTENTBOX-954] - Email two factor authentication provider
[CONTENTBOX-955] - Refactor captcha out of the core and into an addon module.
[CONTENTBOX-957] - Security services now rely on the CacheStorages instead of session to provide distribution out of the box if necessary via CacheBox
[CONTENTBOX-958] - Ability to make the datasource portable for container deployments via config/runtime.properties.cfm convention
[CONTENTBOX-568] - Allow user to choose new password on reset
[CONTENTBOX-725] - User Management: Allows duplicate emails
[CONTENTBOX-919] - Author snapshot updates
[CONTENTBOX-923] - Added auto height to select boxes
[CONTENTBOX-924] - Page Publishing Permissions
[CONTENTBOX-931] - Content cloning needs to clone all new properties
[CONTENTBOX-934] - Added pagination to ForgeBox installer
[CONTENTBOX-935] - Don't show data snapshot donut charts if there is no data
[CONTENTBOX-937] - Make admin bar responsive
[CONTENTBOX-941] - Cache installer detection query to improve performance
[CONTENTBOX-942] - Global HTML not flushing settings cache
[CONTENTBOX-952] - Refactor formulas for category reports and optimized for better performance
[CONTENTBOX-956] - Deprecated ColdBox fileUtils to internal Utility
This release we're focusing on feedback from ContentBox 3.x customers and the ability to containerize ContentBox. Building on top of the SEO updates in ContentBox 3.1.0, we're continuing to make ContentBox more SEO friendly, Search Engine Friendly and Social Media Friendly. This update has a tremendous amount of updates and bug fixes for your current installations. So let's start investigating all the major areas of improvement:
ContentBox has been partitioned into three installation slugs from ForgeBox in this version going forward:
contentbox
- Installs ContentBox as a module into any ColdBox application.
contentbox-site
- Installs a new ColdBox site enabled for ContentBox with a dependency on contentbox
for its module.
contentbox-installer
- Same as above but with our DSN Creator and Installer Module.
This new schema and re-organization allows us better flexibility when updating ContentBox and installing ContentBox under docker containers. First of all, updating ContentBox will now be a matter of two simple steps:
Run box update contentbox
in the root of the site
Apply the contentbox-db
patch in the admin
We are trying to leverage CommandBox much more for updates and also for ease of use of installation.
On our move to greater containerization we have made several improvements and re-structuring in ContentBox.
You can now override any runtime setting for ContentBox via a configuration structure in your main ColdBox.cfc
configuration file. This will allow developers to override any runtime setting for any site (yes multi-site is coming).
All you need to do is create the a contentbox
structure in your configure()
or any tier method, with the name of the site (default
is the default site) and then any setting name-value pair.
You can also override any runtime ContentBox setting by passing them via Docker/Java Runtime variables.
Since these are string keys we can now use our fancy structures like the settings above, so you must adhere to our recognition pattern:
Here is an example on adding a custom media root:
This will allow especially Docker environments to override settings as environments or even provide secrets. More is coming, so stay tuned to our updates.
We have added a new Admin Bar that can help you manage and edit content from the front end website. This Admin Bar can be enabled/disabled from the ContentBox Settings panel and will only show up if it meets the following rules:
You are logged in
You have ANY of following permissions: CONTENTBOX_ADMIN,PAGES_ADMIN,PAGES_EDITOR,ENTRIES_ADMIN,ENTRIES_EDITOR
The admin bar will give you the following features:
Visit admin
Edit visited content
Edit custom fields
Edit SEO data
View content history
View Hits
View page layout
Visual Draft Mode
Visual Publish in Future
Hopefully, this admin bar can help you manage and edit content in a more visual manner.
Thanks to our good friend Francesco Pepe (@tropicalista), we now have a full-fledged image editor in ContentBox Media Manager. The new Image Editor has the following capabilities:
Visual Image Information
Image Resizing
Image Cropping
Image Manipulation: Rotation, Flip and much more.
The media manager also sports better dialogs, context menus and better visualization. You can now also do multiple select via the use of the ctrl
key.
The ContentBox editors now accept a new markup for retrieving localized content from any resource bundle in the ColdBox application. You can now use the following markup:
This will allow you better localization in any page, blog entry or content store item.
All the UI front-end caching mechanisms have been updated to incorporate the user's language locale via the i18n
module included in ContentBox. This means that you can localize any content now by using the getFWLocale()
method included in the i18n
module.
The ContentBox dashboard gets some love with two new reports:
Future Published Content - Shows top 10 content that publishes in the future.
Expired Content - Shows the top 10 expired content.
The Latest Edits widget also shows hit counts for the pages as a mini-report.
The admin global search has been completely revamped. The UI has been updated to reflect the different types of context searches: pages, contentstore, entries and authors. It also allows you to edit or open directly to the site if available. We have also introduced that ability to scope your search context with the following search prefixes:
author:{text}
page:{text}
contenstore:{text}
entry:{text}
You can replace the {text}
with whatever you want to search for and ContentBox will search only the context you applied.
You can add your own search contexts and search contributions by listening to the following two events:
onGlobalSearchRequest
onGlobalSearchDisplay
The content store hierarchy has now been introduced to ordering digits. This means that instead of retrieving content store collections ordered by their natural keys, you now have full control of ordering hierarchies. This will allow you to create ordered collections for things like photo galleries, metadata, etc.
In an effort to make ContentBox work better with search engines, we have added a Sitemap Generation Module for Search Engines. You can now upload your XML sitemaps to Google, Yahoo, Bing and any other search engine you would like to work with.
The Sitemap generation is available on demand, and available in several formats. Following Google's convention, we have implemented the following url patterns:
/sitemap.xml
/sitemap.txt
/sitemap.json
/sitemap.html
/sitemap
- which defaults to html
Google recommends XML, but supports txt
as well. XML allows for more information, including:
loc
- location / url of the content
lastmod
- last modified
image
image:loc - image location / url
If you use the featured image with your pages and blog entries, the image will be included in the site map, and the last modified date as well.
The site maps shows all pages and blog entries that are published, and not hidden via the show in search bit. If you disable the blog, all blog posts are removed from the site map.
Info The HTML version of the sitemap does not take into consideration any of the hierarchy of your site. It simply outputs all visible content into a list. This can be used for a crawl-able site page, but it not intended for your website visitors, at this time.
You can turn on/off the sitemap features of ContentBox via the Settings Panel.
To support sitemap.txt
, you will need to edit your config/routes.cfm
file. Inside that file you will find a line:
setValidExtensions('xml,json,jsont,rss,html,htm,cfm,print,pdf,doc');
For the .txt
extension to work inside of ContentBox ( and ColdBox the framework underneath ContentBox ), you will need to append txt
to the list of existing supporting file extensions.
setValidExtensions('xml,json,jsont,rss,html,htm,cfm,print,pdf,doc,txt');
Once you have made this change, reinitialize the site, the easiest way is to log into the admin, and then click the Setting Cog and click Reload Application
. Once this is done, the /sitemap.txt will function in addition to the xml
and json
formats.
More information on Facebook and OpenGraph can be found here: https://developers.facebook.com/docs/sharing/webmasters
CKEditor has been updated to its latest stable release with its new skin which looks fantastic within ContentBox.
All internally used JavaScript libraries and widgets have been updated to their latest stable versions.
[CONTENTBOX-827] - Widget - When loading widgets the error catching is ugly
[CONTENTBOX-829] - Widget - Test Widget in Firefox relocates to url and does not run js function
[CONTENTBOX-838] - Quick search in Contentstore ignores ajax traversing
[CONTENTBOX-840] - ContentStore - deleting an item with child throws a big bad error
[CONTENTBOX-841] - Forgebox - Cfloop uses lucee attributes not ACF and errors on ACF
[CONTENTBOX-842] - Javascript reloads like Application Reinit ignore rewrites
[CONTENTBOX-843] - Wrong link on the latest edits for content store items
[CONTENTBOX-854] - Ellusive contentbox filebrowser media root reset
[CONTENTBOX-864] - Installer for 3.5 fails - settings for file browser doesn't exist on load
[CONTENTBOX-865] - Default Theme Archive layout is not correct
[CONTENTBOX-866] - Textareas in Geek Settings should be disabled to stop editing
[CONTENTBOX-867] - Theme Service - adds settings without flushing setting cache
[CONTENTBOX-871] - Preference are not working properly
[CONTENTBOX-872] - Content caching was not working due to missing return
[CONTENTBOX-837] - Sitemap admin settings
[CONTENTBOX-844] - admin latest content widgets hit counter support
[CONTENTBOX-845] - Ability for ordering content store items within hierarchies
[CONTENTBOX-846] - Integrate yarn for node dependencies
[CONTENTBOX-847] - update all node dev dependencies
[CONTENTBOX-848] - Update ckeditor to latest edition
[CONTENTBOX-849] - Updated all UI dependencies
[CONTENTBOX-850] - Revamped global search UI
[CONTENTBOX-856] - New dashboard reports: expired content, future published content
[CONTENTBOX-858] - Ability to override ContentBox settings from the ColdBox Config
[CONTENTBOX-859] - Ability to override ContentBox settings via environment variables
[CONTENTBOX-860] - New setting prefix: i18n which will retrieve any language key
[CONTENTBOX-861] - Incorporate fw locale for cachekeys for content to allow for multi-lingual front ends
[CONTENTBOX-862] - content viewelets UI updates and choice enhancements: showAuthor, showColorings, showHits, showPublishedStatus,showExpired
[CONTENTBOX-863] - Ability to add a search context in the global admin search via a prefix (page,entry,contentstore,author:search):search
[CONTENTBOX-870] - UI Admin Bar
[CONTENTBOX-873] - Media Manager UI Updates
[CONTENTBOX-874] - Media Manager Image Editor
[CONTENTBOX-784] - Don't let the tools spinners spin infinitely after a form submission
[CONTENTBOX-791] - Mega Menu - JSON / Struct Export to allow Theme more control of display
[CONTENTBOX-792] - Add support for Facebook / Twitter OGRAPH elements in pages / entries
[CONTENTBOX-826] - Exporter - Once export is complete, UI does not update
[CONTENTBOX-828] - Widgets - Widgets loaded from Themes are still marked as Layouts
[CONTENTBOX-832] - update admin to use prc.oCurrentAuthor for consistency
[CONTENTBOX-833] - Sitemap UI module
[CONTENTBOX-835] - Contentbox Modules should have Forgebox Entries
[CONTENTBOX-836] - Allow cbCKfileBrowserDefaultEvent variable to be set in interceptor
[CONTENTBOX-839] - Anything using a .keyUp should have a debounce for better user experience
[CONTENTBOX-851] - When creating a contentstore item, you have no page modifiers for parents
[CONTENTBOX-855] - Latest Edits Viewlet need a ID for multiple viewlet renderings
ContentBox is a professional open source modular CMS (Content Management System) for ColdFusion (CFML) and Java engines that allows you to easily build websites, blogs, wikis, complex web applications and even power mobile or cloud applications. Built with a secure and flexible modular core, designed to scale, and combined with world-class support, ContentBox will get your projects out the door in no time.
ContentBox is maintained under the Semantic Versioning guidelines as much as possible.Releases will be numbered with the following format:
And constructed with the following guidelines:
Breaking backward compatibility bumps the major (and resets the minor and patch)
New additions without breaking backward compatibility bumps the minor (and resets the patch)
Bug fixes and misc changes bumps the patch
ContentBox Modular CMS is open source and licensed under the Apache 2 License. Ortus Solutions, Corp, the makers of ContentBox, can also offer commercial and supported versions as well.
Copyright by Ortus Solutions, Corp
ContentBox is a registered trademark by Ortus Solutions, Corp
The ContentBox and discussion group can be found here: https://groups.google.com/d/forum/contentbox
We all make mistakes from time to time :) So why not let us know about it and help us out. We also love pull requests, so please star us and fork us: https://github.com/Ortus-Solutions/ContentBox
ContentBox is a professional open source software backed by Ortus Solutions, Corp offering services like:
Custom Development
Professional Support & Mentoring
Training
Server Tuning
Security Hardening
Code Reviews
Official Website: https://www.contentboxcms.org
Source Code: https://github.com/Ortus-Solutions/ContentBox
Twitter: @gocontentbox
Facebook: https://www.facebook.com/gocontentbox
Vimeo Channel: http://vimeo.com/channels/contentbox
YouTube Channel: https://www.youtube.com/channel/UCKLYx772weG6Eh06ny-lJBg
Because of His grace, this project exists. If you don't like this, then don't read it, its not for you.
"Therefore being justified by faith, we have peace with God through our Lord Jesus Christ: By whom also we have access by faith into this grace wherein we stand, and rejoice in hope of the glory of God." Romans 5:5
The following are major system architecture updates we have done in ContentBox 3.
We have updated the entire core to leverage ColdBox 4 and modularity. We have completely re-architected all modules to adhere to ColdBox 4 standards and rely on CommandBox CLI for package management and resolutions. This update in itself is worth noting as it not only modularized even more ContentBox, but gave it a source code reduction and performance boosts.
Oracle and PostgreSQL are now fully supported.
The default algorithm for passwords is now based on BCrypt with work factors for better security and entropy. You can read more on bcrypt here: https://en.wikipedia.org/wiki/Bcrypt
A new password policy is now in place for ContentBox for new and current users, which must be greater than 8 characters with at least one:
Lower case character
Upper case character
Digit
Special character
The ContentBox administrator module now comes with a login tracker which if enabled can track invalid logins and be able to block individual ip addresses from brute-force attempts. We even track all valid logins into the new ContentBox Security Audit Log.
ContentBox now comes with a rate limiter module that can limit count and duration and very configurable. This can stop denial of service attacks or just penetration hacking attempts.
Introduction of core and user based system settings. This allows for the distinguishing of what are ContentBox core settings and custom user or module settings when managing them from the geek panel.
You can now decide in which caching engine to store global ContentBox settings. This provides the way to fully scale ContentBox in any cloud provider.
SSL support can now be found everywhere in ContentBox for both the UI and admin modules. Users can even select specific pages for users to transition into or out of SSL for richer eCommerce or secure experiences.
The majority of all modules have been now translated into English, Spanish, Italian, German and French. There is still work to do to localize the entire source, but it is coming.
Our entire build process has been revamped and now we can produce ContentBox Express editions with included Java runtimes for Linux, Mac OS X and Windows.
We have completely re-architected our asset pipeline and ContentBox now comes with an integrated development pipeline for front-end development. All assets are now tracked via bower and npm. We have created a developer guide for anybody working with the admin assets and collaborating.
All development is now done with CommandBox and all dependencies are tracked via CommandBox. This provides a smoother update processes for users and also a great workflow for collaboration.
DocBox now generates all API docs with much better documentation and readability.
Below is a listing of all the major updates in the administration modules.
The administration module sports a completely re-designed responsive UI. Our goal was to think mobile first and build from there. So you will see tons of great additions for working on mobile devices, new editors, new fullscreen mdoes and much much more. Below is a nice image gallery of all the changes in the administration module. Please note that every single screen has changed.
ContentBox now sports native Markdown support for writing all content objects. You can even choose markdown on a per-user level as your preferred writing style.
We have included a new code editor that supports HTML and Markdown natively. This will allow developers or editors to write in native markup and have all the integrations into ContentBox. It also sports realtime previews and side-by-side editing in full screen. Your editing experience is about to get a whole lot better now.
We have introduced local storage auto saving capabilities for all editors in ContentBox. No matter the implementation, we will provide auto-save capabilities. This is a great way to know that silently your work is secure.
You can now use the <escape></escape>
syntax in any content editor to escape ContentBox translations for settings, markdown, etc.
All live previews are now responsive. Meaning you can choose from the responsive previewer the type of device and get immediate feedback of the content result in real-time.
The content editors have completely been re-designed for mobile first paradigm. They sport new tabbed interfaces for history, comments, custom fields and editing. You also have much more real estate when editing and even full screen editing support.
The dashboard now supports a cleaner interface for visualizing the latest content edits, drafts, comments and news.
Improved UI to match the new admin UI with responsive updates. It also has a smoother uploading and drag and drop uploading capabilities.
We have added HTML5 fullscreen mode capabilities for the admin UI. This will allow you to go full screen to edit, create and manage in a gorgeous huge display.
RSS feed options and caching options can now be customized via settings.
All content objects now have the ability to set natively a featured image alongside the content.
The author details now sports two new panels to showcase their latest edits and latest drafts. It will make it much easier for authors or administrators to discover what they are working on.
The CBHelper sports some new methods:
getPrivateRequestCollection()
- Get the ColdBox private request collection
isHomePage()
- Verify if the current rendered page is the home page
prepareUIRequest()
- Use in any ColdBox module to prepare rendering under the ContentBox theme
Here is a collection of all the new admin interception points:
onGlobalSearchRequest
- When a global search is made
onGlobalSearchDisplay
- When the global search is displayed
cbadmin_beforeLoginForm
- Before the login form renders
cbadmin_afterLoginForm
- After the login form renders
cbadmin_preThemeSettingsSave
- Before saving theme settings
cbadmin_postThemeSettingsSave
- After saving theme settings
cbadmin_onThemeSettings
- When displaying theme settings in the admin UI
cbadmin_onThemeInfo
- When displaying theme information on the admin UI
ContentBox 3.1.0 is a minor release with over 40 issues, improvements and new features addressed. Below you will find the detailed release notes about this release but also the major areas of improvement and new features introduced. Enjoy!
The easiest way to upgrade your ContentBox installation is to use the auto updater located in the system > updates panel. Just make sure you please backup your database and source code as this release includes a major framework update and you will most likely need to reboot your engine or server. Go to our upgrading guide for much more information about upgrading ContentBox.
Travis is now building and publishing ContentBox to ForgeBox.io. We will also be able to accept pull requests with satisfaction that they do not break the builds. So pull away my friends!
All express versions have been updated with the latest JRE/JDKs and Lucee CFML engines.
ContentBox supports native captcha support and now your themes can render out a nice captcha image by using the new ContentBox helper method: cb.renderCaptcha()
method.
We have also devoted time to enhance the SEO capabilities of ContentBox not only in the ContentBox helper object but in the updated default theme. The new helper methods are:
getContentTitle()
: Retrieve the assigned title for a rendered page
getContentDescription()
: Retrieve the assigned description for a rendered page
getContentKeywords()
: Retrieve the assigned keywords for a rendered page
Please note that the title for a page now comes in the following discovery hiearchy:
Override set by custom modules
SEO Panel title
Page name
Please note that the description for a page now comes in the following discovery hiearchy:
Override set by custom modules
SEO Panel description
Excerpt
Dynamic Excerpt (160 characters) from content
Please note that the keywords for a page now comes in the following discovery hiearchy:
Override set by custom modules
SEO Panel keywords
Global Site Keywords
If you are building custom modules with views that render in a site's theme, you can now also set SEO content for title, description and keywords by leveraging the following methods in the ContentBox Helper:
setMetaTitle()
setMetaDescription()
setMetaKeywords()
ContentBox 3.1 now supports the generation of static sites from your content and even your blog. This is a great addition to ContentBox as now you can produce static versions and workflows, deploy to CDN networks, secure your content and much more. Once you click on the Start Generation button, ContentBox will go over your entire site and produce a static archive for you in the associated theme. It will also announce two interception points for you during the process:
cbadmin_preStaticSiteExport
: Receives all the export options
in the intercept data so you can alter the export behavior.
cbadmin_postStaticSiteExport
: Receives all the export options
and also a results
structure with the following keys: exportLog:builder, exportDirectory, exportArchive
. This is a great way to listen for the export and send to S3 for archiving, etc.
Warning Dynamic elements like commenting, searching, etc must require a JavaScript implementation. So make sure you have a static export strategy in place.
This release sports many enhancements to support module development authors in order for them to seamlessly build high impact applications using ContentBox.
The logged in (or not) author/user of ContentBox is now globally available in the ColdBox private request collection as prc.oCurrentAuthor
. This will allow module developers to have easy access to the current object that would represent a logged in Author or User of the ContentBox instance.
The File Manager / Media Manager is an important part of a Content Management System, and we have fixed several UI bugs, and added a few smaller features. The Context Menus are more accurate, and function on the selected item. The file location breadcrumb is now clickable, to allow you to move about your file structure easier.
[CONTENTBOX-762] - If admin is in SSL mode, then previews should trigger ssl as well
[CONTENTBOX-766] - BaseWidget not providing a default logging class 'log' as it did in ContentBox 2
[CONTENTBOX-767] - Admin Layout - loop through jsFullAppendList uses the wrong src base
[CONTENTBOX-771] - background color indicators for drafts, published future and expired content is not showing up
[CONTENTBOX-776] - PermissionService, RoleService missing date util injection
[CONTENTBOX-777] - exclude pages,entries on author mementos, they are not treated for export/import
[CONTENTBOX-778] - Importer not importing correct custom modules if coming from windows
[CONTENTBOX-780] - Blog excerpt not rendering ContentStore objects
[CONTENTBOX-800] - Adobe Compilation error due to ColdBox 4.3 updates
[CONTENTBOX-803] - Cascading issue on deletion of one-to-one relationship between base content and its stats
[CONTENTBOX-808] - Incorrect title on snapshots data table
[CONTENTBOX-809] - i18n properties out of sync with the US file
[CONTENTBOX-815] - Installer doesn't work without rewrites
[CONTENTBOX-816] - Blog Paging in front end works correctly but display is incorrect
[CONTENTBOX-817] - Blog Paging uses Javascript:null which errors in Firefox
[CONTENTBOX-818] - Blog Pagination - If you hit a page over total it shows up blank
[CONTENTBOX-514] - Content Subscriptions
[CONTENTBOX-760] - Update express editions to use latest JDK
[CONTENTBOX-761] - Update lucee to latest stable in 4.5 series for Express/War Editions
[CONTENTBOX-765] - New CBHelper method: renderCaptcha() to easily render the img tag
[CONTENTBOX-783] - Static Site Generator
[CONTENTBOX-796] - prc.oCurrentAuthor is now set and available globally by the UI prepare request interceptor
[CONTENTBOX-801] - Travis integration
[CONTENTBOX-802] - edge case exception when a content object has no active content versions on ACF
[CONTENTBOX-805] - new cbhelper seo method: getContentTitle() that retrieves the content title according to discovery rules
[CONTENTBOX-806] - new cbhelper seo method: getContentDescription() that retrieves the metadata according to discover rules
[CONTENTBOX-807] - new cbhelper seo method: getContentKeywords() that retrieves the metadata according to discover rules
[CONTENTBOX-573] - Auto-fill Name/E-mail and skip captcha on comments if logged in
[CONTENTBOX-641] - Add image resizing/cropping to filebrowser
[CONTENTBOX-740] - Update site maintenance feature to have admin still view site but it's down for everyone else
[CONTENTBOX-756] - SEO Convention for passing title, keywords, description to theme from modules
[CONTENTBOX-759] - Convention for Module Based Security Rules
[CONTENTBOX-768] - Admin Layout - loop through jsFullAppendList and cssFullAppendList expects no extension
[CONTENTBOX-779] - CBHelper now accounts for ssl via request context on all link building operations
[CONTENTBOX-785] - cbhelper isprintFormat not accounting for html formats
[CONTENTBOX-797] - CommentForm widget standardizes to default bootstrap themes
[CONTENTBOX-798] - Search Form Widget standardized to bootstrap
[CONTENTBOX-799] - Updated all box dependencies to latest releases
[CONTENTBOX-804] - Update mobile detector to latest incoming script
[CONTENTBOX-811] - Add more documentation options for theme elements and groups
[CONTENTBOX-819] - Filebrowser - Download a folder gives confusing error message
[CONTENTBOX-820] - FileBrowser - Right click doesn't select object when showing Context Menu
[CONTENTBOX-821] - FileBrowser - Format the timestamp in the status bar to be more user friendly
[CONTENTBOX-822] - FileBrowser - Make Location Breadcrumbs clickable
[CONTENTBOX-823] - FileBrowser - Excluded Items not removed from Item count in Status Bar
[CONTENTBOX-824] - FileBrowser - In grid view - the selection area isn't the full thumb square
[CONTENTBOX-825] - FileBrowser - Update Message to include Settings
[CONTENTBOX-828] - Widgets - Widgets loaded from Themes are still marked as Layouts
We have also updated the theming engine in ContentBox with ColdBox 4 goodness and extreme modularity. Here you can find the major updates for the theming engine.
Themes is our new mantra. We have transitioned layouts to what we now call ContentBox Themes. They have been revamped to support ColdBox 4.
The theme descriptor CFC is now named Theme.cfc
. Backwards compatibility still remains, but now the new descriptor will provide a nice way for editors and tools to target.
You can now create theme setting groups in the theme descriptor Theme.cfc
and the new admin UI will present them in a categorized and ordered format. This is a great way to visualize theme settings.
Themes can now include ContentBox modules in a new folder convention called modules
. This allows you to ship your theme with 1 or a billion modules.
The theme life-cycle now presents several new events:
cbadmin_preThemeSettingsSave
- Before saving theme settings
cbadmin_postThemeSettingsSave
- After saving theme settings
cbadmin_onThemeSettings
- When displaying theme settings in the admin UI
cbadmin_onThemeInfo
- When displaying theme information on the admin UI
If you already have a ContentBox 2.X installation you will have to follow this guide in order to update your installation. Please note that ContentBox 3 is a major upgrade and will require some manual steps on your part in order to have a seamless upgrade.
Like with any automated process, there is room for error. So backup your files and database, we will not be held responsible for any mishaps.
We have created a special ContentBox 2 module that will update your installation. Please visit and download the master branch by clicking on the download button.
Unzip the download and copy over the folder to your current ContentBox installation in the modules
folder. Make sure the folder is called cbcms-updater-v3
. It should be placed alongside the other ContentBox modules.
In order for the module to take effect, you must restart your application or even better your server.
Now open your application and visit the module by using the /CB3Updater
URL entry point. Here is an example: http://mysite.com/cb3updater
The module will be active and it will tell you to upgrade your application's config/ColdBox.cfc
that you must do so manually according to the instructions presented. Once you have done this manual step, then save your file and click on the Continue button.
Now you will be in step2 of the module wizard. It will show you an updated Application.cfc
according to your old Application.cfc
on disk. If there are any custom changes that are not reflected, then update as you see fit. Once done, then click on the continue and save button. This will start the upgrade process, grab a cup of coffee and wait for the installer to show you the finalization screens.
If you are on a Windows machine, unfortunately, you will have to have an extra step due to the fact the OS creates file locks on certain files. This means that the upgrader will not be able to upgrade the coldbox
folder in its entirety. You will have to stop the ColdFusion/Java server, and remove the following folder: coldbox/system/core/javaloader
manually. Once removed, restart the server and click on the button that says Continue so you can finalize the process.
If all went well, then you should see the screenshot above. You can now log in to your new application and site. We would recommend a final server restart if possible as well. IMPORTANT: Now you must delete the module from disk
We have a new official UI theme that you will come to love. It has over 10 different skins and configurations that will give you a plethora of configuration patterns for your site. It is based on bower and grunt assets, so you can easily fork and customize.
The UI module now allows you to be able to export your pages, or blog entries in many response formats by adding the formats as extensions to the URL or using a ?format=XXX
URL variable.
json
XML
word
The JSON and XML support means you can now build alternative UI modules based on modern JavaScript or other language frameworks. This is a game changer for ContentBox as it will provide you with the ability to export any piece of content or blog in a tranportable RESTFul format. You can get a response format from any page, blog entry, blog archive, and blog filters.
A new header will be sent to the browser if a content page is cached: x-contentbox-cached-content
. This can provide proxies or cache engines the ability to tell when a page is cached by ContentBox.
Luis Majano is a Computer Engineer with over 15 years of software development and systems architecture experience. He was born in in the late 70’s, during a period of economical instability and civil war. He lived in El Salvador until 1995 and then moved to Miami, Florida where he completed his Bachelors of Science in Computer Engineering at . Luis resides in The Woodlands, Texas with his beautiful wife Veronica, baby girl Alexia and baby boy Lucas!
Luis has a passion for Jesus, tennis, golf, volleyball and anything electronic. Random Author Facts:
He played volleyball in the Salvadorean National Team at the tender age of 17
The Lord of the Rings and The Hobbit is something he reads every 5 years. (Geek!)
His first ever computer was a Texas Instrument TI-86 that his parents gave him in 1986. After some time digesting his very first BASIC book, he had written his own tic-tac-toe game at the age of 9. (Extra geek!)
He has a geek love for circuits, microcontrollers and overall embedded systems.
He has of late (during old age) become a fan of running and bike riding with his family.
Keep Jesus number one in your life and in your heart. I did and it changed my life from desolation, defeat and failure to an abundant life full of love, thankfulness, joy and overwhelming peace. As this world breathes failure and fear upon any life, Jesus brings power, love and a sound mind to everybody!
“Trust in the LORD with all your heart, and do not lean on your own understanding.” Proverbs 3:5
Jorge started working as project manager and business developer at Ortus Solutions, Corp. in 2013, . At Ortus he fell in love with software development and now enjoys taking part on software development projects and software documentation! He is a fellow Cristian who loves to play the guitar, worship and rejoice in the Lord!
Therefore, if anyone is in Christ, the new creation has come: The old has gone, the new is here! 2 Corinthians 5:17
He is the CEO of , a consulting firm specializing in web development, ColdFusion (CFML), Java development and all open source professional services under the ColdBox and ContentBox stack. He is the creator of ColdBox, ContentBox, WireBox, MockBox, LogBox and anything “BOX”, and contributes to many open source ColdFusion projects. You can read his blog at
Jorge is an Industrial and Systems Engineer born in El Salvador. After finishing his Bachelor studies at the Monterrey Institute of Technology and Higher Education , Mexico, he went back to his home country where he worked as the COO of. In 2012 he left El Salvador and moved to Switzerland in persuit of the love of his life. He married her and today he resides in Basel with his lovely wife Marta and their daughter Sofía.
The source code for this book is hosted in GitHub: https://github.com/ortus-solutions/contentbox-docs. You can freely contribute to it and submit pull requests. The contents of this book is copyright by Ortus Solutions, Corp and cannot be altered or reproduced without author's consent. All content is provided "As-Is" and can be freely distributed.
The majority of code examples in this book are done in cfscript
.
The majority of code generation and running of examples are done via CommandBox: The ColdFusion (CFML) CLI, Package Manager, REPL - http://www.ortussolutions.com/products/commandbox
Flash, Flex, ColdFusion, and Adobe are registered trademarks and copyrights of Adobe Systems, Inc. Lucee is a trademark of the Lucee Association of Switzerland.
The information in this book is distributed “as is”, without warranty. The author and Ortus Solutions, Corp shall not have any liability to any person or entity with respect to loss or damage caused or alleged to be caused directly or indirectly by the content of this training book, software and resources described in it.
We highly encourage contribution to this book and our open source software. The source code for this book can be found in our GitHub repository where you can submit pull requests.
15% of the proceeds of this book will go to charity to support orphaned kids in El Salvador - http://www.harvesting.org/. So please donate and purchase the printed version of this book, every book sold can help a child for almost 2 months.
Shalom Children’s Home (http://www.harvesting.org/) is one of the ministries that is dear to our hearts located in El Salvador. During the 12 year civil war that ended in 1990, many children were left orphaned or abandoned by parents who fled El Salvador. The Benners saw the need to help these children and received 13 children in 1982. Little by little, more children werecame on their own, churches and the government brought children to them for care, and the Shalom Children’s Home was founded.
Shalom now cares for over 80 children in El Salvador, from newborns to 18 years old. They receive shelter, clothing, food, medical care, education and life skills training in a Christian environment. The home is supported by a child sponsorship program.
We have personally supported Shalom for over 6 years now; it is a place of blessing for many children in El Salvador that either have no families or have been abandoned. This is good earth to seed and plant.