7x Releases Exponential 6.0.14
- 7x is very pleased to announce the release of Exponential 6.0.14 to users worldwide. This release delivers full MongoDB 8 database adapter support — enabling the entire CMS kernel to run against MongoDB in place of MySQL, PostgreSQL, or SQLite — alongside critical cross-database ORM fixes that were silently breaking all content rendering on SQLite and PostgreSQL installations, shared-hosting MySQL setup wizard improvements, and PHP 8 user and role system hardening.
- Review the improvements made since 6.0.13 in the GitHub repository changelog.
- Release date: 2026.06.07
Key Highlights of Exponential Version 6.0.14 (Stable):
- MongoDB 8 Database Adapter — Complete new expMongoDB backend implementing eZDBInterface for MongoDB 8.x. Selectable from the setup wizard. Migration tooling included in bin/mongodb/. No separate config file required.
- Critical ORM Fix for SQLite and PostgreSQL — A property-vs-method bug caused fetchObject() and fetchObjectList() to return empty arrays for every ORM query on SQLite and PostgreSQL, breaking all content rendering, URL alias resolution, and role lookups. Six files corrected.
- Shared-Hosting MySQL Setup Wizard — No longer requires SHOW DATABASES privilege or root access. Connects directly to the application database when an explicit database name is provided.
- PostgreSQL Setup Wizard Re-run — CREATE TABLE IF NOT EXISTS and CREATE SEQUENCE IF NOT EXISTS added. Deprecated pg_attrdef.adsrc column (removed in PostgreSQL 12) replaced with pg_get_expr().
- PHP 8 User and Role Fixes — implode(null) fatal errors eliminated in pagelayout.tpl and ezuser.php. Role limitations key always initialised in user cache, ending infinite regeneration loop.
- MongoDB Copy, Move, AddLocation, Hide/Show — General WHERE parser and SET clause splitter unblock content copy, subtree copy, addLocation, move, and visibility propagation on MongoDB.
- Admin UI Fixes — browse.tpl integer PersistentData values restored (fixing the Copy content action). jQuery .size() replaced with .length.
- PHP 8.1 through 8.5 supported. Running PHP 8.5 is strongly recommended for best security.
What's Changed / What's New (Since Exponential 6.0.13)
MongoDB 8 Database Adapter (feat — PR #62)
- New: lib/ezdb/classes/expmongodb.php — full eZDBInterface implementation for MongoDB 8.x via the mongodb/mongodb PHP library. databaseName() returns 'mongo', used as the kernel branch sentinel throughout.
- New: lib/ezdbschema/classes/expmongoschema.php — schema handler; no-op for SQL DDL since MongoDB is schema-free.
- New: bin/mongodb/ — five migration scripts (export_mysql.sh, mysql2ndjson.py, fixup_ndjson.py, validate_ndjson.sh, import_all.sh) and create_indexes.js for mongosh.
- New: design/standard/templates/setup/db/mongodb_info.tpl — setup wizard information page for MongoDB.
- Updated: setup wizard steps — ezstep_database_choice.php, ezstep_create_sites.php, ezstep_installer.php, ezstep_site_types.php, ezsetupcommon.php all updated for MongoDB support.
- New: doc/bc/6.0/MONGODB_KERNEL_SUPPORT_EXPANSION.md — ~4,800-line design and compatibility document covering architecture, per-subsystem porting, datatype matrix, and known limitations.
Critical Cross-Database ORM Fixes
- fix: ezpersistentobject.php — $db->databaseName property access (always null) replaced with $db->databaseName() method call; condition inverted to !== 'mongo' so SQLite, MySQL, and PostgreSQL all use the SQL ORM path.
- fix: ezrole.php — same property bug corrected; $retArray initialised before loop to prevent undefined-variable crash in implode().
- fix: ezurlaliasml.php — translate() mysql-only guard replaced with !== 'mongo'; all content URLs now resolve correctly on SQLite and PostgreSQL.
- fix: ezcontentobjecttreenode.php — fetch() mysql-only guard replaced with !== 'mongo'; node loading restored on SQLite and PostgreSQL.
- fix: ezuser.php — generateGroupIdList() and limitList() $db->find() calls replaced with $db->arrayQuery() SQL; eZUserSetting::fetch() null guard added.
- fix: eznodeviewfunctions.php — ?? [] null-coalescing fallback added on three implode() calls.
Setup Wizard Fixes
- fix: MySQL shared hosting — ezstep_installer.php copies explicit dbname into $dbParameters['database']; ezstep_site_details.php removes legacy $dbName = 'mysql' hardcode and skips availableDatabases() when dbname is provided.
- fix: ezurlaliasml.php storePath() MongoDB block wrapped in databaseName() === 'mongo' guard — prevents "Call to undefined method eZMySQLiDB::aggregate()" fatal during setup on all SQL backends.
- fix: PostgreSQL — ezpgsqlschema.php adds IF NOT EXISTS; ezdbschemainterface.php skips existing tables; ezpostgresqldb.php replaces deprecated pg_attrdef.adsrc with pg_get_expr().
PHP 8 / Admin UI Fixes
- fix: pagelayout.tpl — first_set(..., array()) guard on limited_assignment_value_list prevents implode(null) PHP 8 fatal.
- fix: ezuser.php generateUserCacheData() — $data['role_limitations'] = [] initialised before loop.
- fix: expMongoDB parseWhereClause — numeric string values cast to int, fixing empty groups() result and broken login on MongoDB.
- fix: browse.tpl — is_string() guard removed from PersistentData output; integer values now emitted correctly, fixing Copy content action.
- fix: node full view template — js_class_languages initialised as '[]' not empty string.
- fix: node_tabs.js — jQuery .size() replaced with .length (removed in jQuery 3.x).
Notable Changes (Since eZ Publish 5)
- MongoDB 8 database adapter (new this release)
- Cross-database ORM correctness for SQLite and PostgreSQL (new this release)
- Security: 6 SQL-injection / OS-shell-injection attack surfaces closed (6.0.13)
- PHP 8.4 / 8.5 support (ongoing since 6.0.8)
- SQLite3 database driver (since 6.0.13)
- PHPUnit 13 test suite (since 6.0.13)
- REST API v2 CRUD support (since 6.0.9)
- PostgreSQL 17 setup wizard support (since 6.0.10)
- Admin3 responsive admin design
- Multi-site INI override and cache-handling improvements (since 6.0.12)
Contributors
- Read the Share announcement. Download the release from GitHub or Composer. Start a conversation about your own experience on our Share forums thread about the release. For those who don't know about eZ Publish yet, read up on our favourite free software (GPL) content management system Exponential.