Welcome to eZpedia!
| The free eZ Publish encyclopedia that anyone can edit. eZpedia has accumulated 722 english articles since 2006. We encourage you to create an account and create or edit a page yourself. Some folks create an article in the people namespace with their full name as the article name with a brief description of who they are, their interests, goals and objectives. Ask A QuestionDo you have an eZ Publish question, do you need an eZ Publish answer? Simply login and ask your question in our discussion forum. We publicly write free documentation based on your submissions. Posting on eZpedia is a great way to get answers you need and contribute to our freely available community documentation for eZ Publish. Chat with other eZ Publish Developers LIVE from around the World!EcosystemRead about what is going on within the various eZ Publish related websites on internet. Recent development activityTrack the development progress through the roadmap by reviewing recent Exponential Git activity from the github repository. Last updated: 2026-06-05T18:13:45Z
2026-06-05T18:13:45Z
Updated: Updated file listing md5 hashes for the 6.0.14 release upgrade check. Release prep.
2026-06-05T18:05:10Z
fix: SQLite/PostgreSQL compatibility — replace mysql/mongo-only DB branches with portable SQL
ROOT CAUSE
----------
MongoDB support was added to the codebase by inserting 'mongo' branches
alongside existing SQL paths. During that work several SQL paths were
accidentally gated behind databaseName() === 'mysql', meaning SQLite and
PostgreSQL received no data at all — returning null, empty arrays, or
skipping writes silently. One location used databaseName as a property
(always null) instead of calling it as a method.
All six files below were broken in ways that caused fatal errors or silent
data loss on SQLite (the configured database for this site).
CHANGES BY FILE
---------------
kernel/classes/ezpersistentobject.php
BEFORE: if ( $db->databaseName == 'mysql' )
[SQL path — all non-MySQL/non-Mongo DBs fell into: else { $rows = [] }]
AFTER: if ( $db->databaseName() !== 'mongo' )
WHY: $db->databaseName is a property access — it returns null on every
adapter, so the condition was always false. fetchObject() and
fetchObjectList() returned empty arrays for every single query on
SQLite, breaking the entire ORM layer. Fixed by calling the method
and inverting the condition so MySQL, SQLite, and PostgreSQL all
use the same SQL path while MongoDB uses its own aggregate pipeline.
kernel/classes/ezrole.php
BEFORE: if ( $db->databaseName == 'mysql' ) [property — always null]
[no initialization of $retArray before the elseif/mongo block]
AFTER: $retArray = array();
if ( $db->databaseName() !== 'mongo' )
WHY: fetchIDListByUser() never entered the mysql block on SQLite so
$retArray was undefined when returned. roleIDList() returned null,
which caused implode() to crash in eznodeviewfunctions.php (line 322).
kernel/classes/ezurlaliasml.php
BEFORE: if ( $db->databaseName() == 'mysql' ) [only MySQL entered SQL path]
AFTER: if ( $db->databaseName() !== 'mongo' )
WHY: The URL alias translation function (translate()) built a multi-table
JOIN query that works on any SQL database but was guarded by a mysql-
only check. On SQLite, $urlAliasArray was never assigned, causing an
'Undefined variable' warning and then $return was never set, so every
URI returned false — making ALL content URLs resolve to nothing.
kernel/classes/ezcontentobjecttreenode.php
BEFORE: if ( $db->databaseName() === 'mysql' ) [only MySQL fetched nodes]
AFTER: if ( $db->databaseName() !== 'mongo' )
WHY: fetch() is the central method for loading any content tree node.
The SQL JOIN query it builds is standard ANSI SQL and works on SQLite,
MySQL, and PostgreSQL equally. By gating it on 'mysql' only, SQLite
returned null for every single node fetch — no content could ever load.
This was the primary cause of the blank-site symptom reported by the
user ('no content loads').
kernel/classes/datatypes/ezuser/ezuser.php
1. generateGroupIdList() — replaced three $db->find() calls with
$db->arrayQuery() using SQL IN(...) clauses. find() is a MongoDB-only
method; calling it on eZSQLite3DB threw 'Call to undefined method'.
User group membership could not be resolved for any user.
2. limitList() — replaced $db->find('ezuser_role', [...]) with
$db->arrayQuery() SQL. Same reason as above; this broke role limitation
lookup (subtree/section restrictions) for all users on SQLite.
3. eZUserSetting::fetch() null guard — added null-coalescing fallback so
that if no ezuser_setting row exists for a user, isEnabled defaults to
true instead of crashing with 'Call to a member function attribute()
on null' (the original error that triggered this investigation).
kernel/classes/eznodeviewfunctions.php
Added ?? [] null-coalescing fallback on three implode() calls that consume
roleIDList(), limitValueList(), and fetchIDListByUserID(). Defensive guard:
if any of those methods ever return null (e.g. during a partially-migrated
state), implode() will receive an empty array rather than crashing with
'argument #2 must be of type array, null given' (PHP 8+).
INVESTIGATION SUMMARY
---------------------
The errors appeared in sequence as each layer was unblocked:
1. 'Call to member function attribute() on null' (ezuser.php:1097)
-> ezpersistentobject fetchObject returned null (ORM broken)
2. 'Call to undefined method eZSQLite3DB::find()' (ezuser.php:2926, 2791)
-> MongoDB-only method called on SQLite adapter
3. 'implode(): argument #2 must be array, null given' (eznodeviewfunctions:322)
-> roleIDList() returned null due to ezrole.php property-access bug
4. Error ocurred using URI: / (content/view/full/2)
-> ezurlaliasml.php + ezcontentobjecttreenode.php mysql-only guards
A full audit of all 50+ files containing databaseName() checks was performed.
All other mysql/mongo branches were verified to have correct else/SQL fallbacks.
The six files above were the only ones with broken patterns affecting SQLite.
2026-06-05T15:33:23Z
Updated: Officially moving default installations from package version 6.0.10 to 6.0.14 (for new mongodb support).
2026-06-05T15:21:34Z
Merge pull request #62 from se7enxweb/mongodb_kernel_support_from_sevenx Official MongoDB Database Kernel Support From 7x
2026-06-05T14:08:22Z
fix(admin/tpl): output persistent_data values regardless of type in browse.tpl
The {if is_string($PersistentData.item)} guard silently suppressed integer
values (e.g. ObjectID=1 passed from content/copy.php). Remove the guard
so numeric persistent_data values are correctly emitted as hidden form
fields, fixing the 'Copy' action which returned null object and aborted.
2026-06-05T14:08:06Z
fix(admin/tpl): init js_class_languages as '[]' not empty string in node full view ClassMenu JS receives the language array variable as a JS value. An empty string causes a parse error in the onclick handler; initialise it as an empty JSON array literal so the menu renders correctly even when no class languages are configured.
2026-06-05T14:04:30Z
fix(admin/js): replace deprecated jQuery .size() with .length in node_tabs.js jQuery removed .size() in v3.x. Replace both occurrences with .length to restore correct tab selection and cookie-based tab restore behaviour. |
Recent discussionsRead what others are discussing |
|
Recently updated articlesRead recently modified articles
|
||
