Skip to content

Exponential Basic 2.4.0.3

Latest

Choose a tag to compare

@se7enxweb se7enxweb released this 18 Aug 05:26
· 0 commits to eed9f245d42abc87befa5051b43880f3afdf4e73 since this release

Exponential Basic 2.4.0.3 Release Notes

Release date: 2026-08-18

Exponential Basic 2.4.0.3 is a feature and stability release that completes the extension-module API, ships a working sample extension with database storage, and hardens the admin interface and core modules for PHP 8.1 - 8.3.


Highlights

  • Extension modules now work end-to-end: active extensions can supply modules/<module>/{user,admin}/ views, per-view intl/ translations, module.info, admin menuboxes and module icons.
  • eZExtension helper class: a stable PHP API for discovering module files, menus, icons and translation directories without hard-coded extension/ or kernel/ez paths.
  • create_extension.php skeleton generator: generates the new module layout, module.info, menubox.php, datasupplier.php and intl/ files.
  • helloworld sample with eZDB storage: a complete CRUD-style admin list and public read-back using a minimal eZDB::globalDatabase() storage class.
  • Admin UI refresh: the white admin design uses CSS borders instead of GIF tiles, with improved desktop spacing and mobile responsiveness.
  • Core module hardening: eZArticle, eZStats, eZTrade, eZCompany, eZImage, eZFile, eZNewsfeed and more load cleanly and handle forms on PHP 8.

Extension system

Module discovery and routing

  • Added eZExtension::moduleFile() so the front controller resolves extension module datasupplier.php files before falling back to kernel/ez<module>/.
  • Added eZExtension::moduleMenuFile() to discover admin/menubox.php files in active extensions.
  • Added eZExtension::moduleBaseDir() to return a module's filesystem base directory for template and intl loading.
  • Added eZExtension::moduleIcon() to return a public URL for a module icon, preferring .png, then .gif, then a generic design fallback.
  • Added eZExtension::moduleName() and eZExtension::moduleUrlName() for display names and URL-safe identifiers.
  • Added eZExtension::availableAdminModules() and eZExtension::availableModules() to enumerate active extension modules.
  • Added eZExtension::moduleInfoFile() and admin menu/link support from extension/<ext>/modules/<module>/module.info.

Design and translation

  • Added eZDesign design resolver so extensions can override design resources (templates, images, stylesheets) via extension/<ext>/design/<design>/.
  • Updated eZTemplate and eZDesign to resolve extension design templates and honor the active section design.
  • Added eZTemplate translation override merging from active extension modules.
  • Translation files are now searched under both legacy extension/<ext>/translations/ and the new extension/<ext>/modules/<module>/{admin,user}/intl/<language>/<phpFile>.ini paths.
  • Updated create_extension.php to generate the new modules/<module>/{admin,user}/intl/ layout, module.info, admin/menubox.php, admin and user datasupplier.php skeletons, and design/standard/templates/<module>/.

Hello World sample

  • Added the extension/helloworld/ sample extension with module.info, admin and user views, a menubox and per-view intl/ files.
  • Renamed the helloworld translation catalogues to modules/helloworld/{admin,user}/intl/<language>/<phpFile>.ini.
  • Updated translation intl paths to use eZExtension::baseDirectory() instead of hard-coded extension/.
  • Added eZHelloWorldItem storage class: createTable(), create(), fetch(), fetchList(), fetchBySearch(), store(), removeById() and createdDate().
  • The storage class uses eZDB::globalDatabase() directly (eZ Publish 2 style) with array_query() and escapeString(), so it works with the current SQLite/MySQL layer.
  • Updated the user datasupplier.php to list the latest stored messages from the database.
  • Updated the admin datasupplier.php to render adminlist.tpl with a searchable, deletable, addable message list styled like the core article archive.
  • Added extension/helloworld/design/standard/templates/helloworld/adminlist.tpl with class="list" table, alternating bglight/bgdark rows, search box, add form and delete checkboxes.
  • Added doc/changelogs/2.4.0.3.md and updated documentation/EXTENSIONS.md with the API reference, eZExtension helper table, admin menubox example and eZDB storage class example.

Admin UI and design

  • Updated the white admin style box borders and templates, replacing GIF tile borders with CSS.
  • Tightened admin module body border spacing on desktop.
  • Tightened admin module mobile responsive styles.
  • Updated footer badge references to use Exponential Basic branding with improved contrast and wording.
  • Preserved the active admin site design in the ezuser datasupplier.
  • Fixed refererlist eZ TPL block parsing so blank referers render as "Direct" or "(none)" instead of creating a broken http://Direct link.
  • Added cache-busting headers to the referer list and moved cache headers to the top of the response.
  • Rendered blank referer domains as plain text "Direct" and avoided broken links.

Core module fixes and hardening

eZArticle and eZImage

  • Fixed MySQL schema creation for eZArticle and eZStats by removing trailing commas.
  • Fixed eZImageVariation::store() so image variation rows are inserted correctly.
  • Added eZCompany::emailAddress() to return the first mailto online URL.
  • Updated order views and SETI export to use emailAddress() as a string and avoid undefined index errors.
  • Updated the company type list to guard requestImageVariation failures for category and company logos.

eZStats, cron and admin views

  • Fixed eZStats reports and queries: dates, browser counts, visitor reverse-DNS and blank referer handling.
  • Added require('autoload.php') to all cron scripts and removed stale commented include_once calls.
  • Fixed admin fatal/rendering errors in contact, filemanager, trade, article, newsfeed and eZPBFile.

Site and operations

  • Changed the default IndexPage and DefaultPage to the article frontpage so the site root / serves content.
  • Moved eZ Basic caches out of kernel/ and into var/cache/.
  • Restored /proc-based system info pages and fixed PHP 8 compatibility.
  • Restored system info values when /proc is not directly readable.
  • Set the default calendar time slot colour to white for readability.
  • Updated composer.json to require phpunit v13 instead of the insecure v10.
  • Updated README.md with a troubleshooting section for first-time installs.
  • Updated settings/override/site.ini.append.php to set DatabaseImplementation=sqlite and activate the helloworld extension.

Files added or changed

  • documentation/ABOUT.md
  • documentation/CHANGELOG
  • documentation/EXTENSIONS.md
  • lib/ezutils/classes/ezextension.php
  • kernel/classes/eztemplate.php
  • kernel/classes/ezdesign.php
  • kernel/classes/ezdb.php
  • bin/shell/php/create_extension.php
  • extension/helloworld/ (module, classes, templates, intl)
  • doc/changelogs/2.4.0.3.md
  • doc/press-release-2.4.0.3.ezxml
  • doc/sevenx-blog-press-release-2.4.0.3.xml
  • doc/exponential-earth-news-press-release-2.4.0.3.xml
  • doc/exponential-earth-changelog-2.4.0.3.xml
  • settings/override/site.ini.append.php
  • plus the relevant admin templates, datasupplier files and module classes listed in the commit history.

Upgrade notes

  1. Back up your settings/override/ and database before upgrading.
  2. Run php bin/shell/php/ezpgenerateautoloads.php -e to regenerate extension autoloads.
  3. Run bash bin/shell/clearcache.sh and restart PHP-FPM.
  4. If you have an existing helloworld extension, it now expects the new modules/helloworld/{admin,user}/intl/ translation layout.

Full list of changes since v2.4.0.2

Fixed: remove trailing commas that broke MySQL schema creation for eZArticle and eZStats
Updated: default IndexPage and DefaultPage to article frontpage so root / serves content
Fixed: eZImageVariation::store() now inserts image variation rows.
Updated: README.md with a Troubleshooting section for first-time installs.
Updated: Preserve the active admin site design in ezuser datasupplier.
Updated: Updated composer.json phpunit package require from v10 insecure to v13 secure. Bugfix
Updated: admin white-style box borders and templates
Updated: restore system info values when /proc is not directly readable
Updated: restore /proc-based sysinfo pages and fix PHP 8 compatibility
Updated: replace 'Powered by eZ publish' badge references with Exponential Basic badge
Updated: improve Exponential Basic footer badge contrast
Updated: enlarge and reword Exponential Basic footer badge
Updated: Copyright year bump. Doc.
Updated: Version number for next release 2.4.0.3
Updated: move eZ Basic caches out of kernel/ and into var/cache/
Updated: Calendar time slot color to white to make it readable by default. Bugfix.
Added: eZDesign design resolver and extension/helloworld sample.
Added: documentation/EXTENSIONS.md and updated extension support plan.
Updated: eZTemplate and eZDesign to resolve extension design templates and honor the active section design.
Updated: documentation/EXTENSIONS.md with template override details and GlobalSiteDesign behavior.
Added: eZExtension::moduleFile() and wired front controllers to support extension modules.
Updated: eZTemplate to merge translation overrides from active extensions.
Added: sample extension translation for the helloworld module.
Updated: helloworld sample module to load the site language and use extension translation strings.
Updated: documented extension translation override support in EXTENSIONS.md and the support plan.
Added: sample eZHelloWorld class in the helloworld extension.
Updated: documented extension class autoloading and the completed Phase 2 features.
Added: eZCompany::emailAddress() method to return the first mailto online URL.
Updated: order views and SETI export to use customer emailAddress() as a string and avoid undefined index errors.
Updated: company type list to guard requestImageVariation failures for category and company logos.
Updated: add require('autoload.php') to all cron scripts and remove stale commented includes
Updated: fix admin fatal/rendering errors in contact, filemanager, trade, article, newsfeed and eZPBFile
Updated: fix eZStats reports and queries (dates, browser counts, visitor reverse-DNS, blank referer)
Updated: render blank referer domain as Direct and avoid broken http://Direct link
Updated: Tighten display of admin module body boder spacing on desktop. Enhancement.
Updated: render Direct referer as plain text and add cache-busting headers to refererlist
Updated: fix eZ TPL block parsing in refererlist so Direct displays cleanly and links work
Updated: show Direct and (none) for blank referer entries and move cache headers to top
Updated: Tighten display of admin module mobile responsive styles. Enhancement.
Updated: admin white-style border layout from GIF tiles to CSS
Added: extension skeleton CLI tool
Updated: EXTENSIONS.md documents the skeleton CLI tool
Updated: extension module API for module.info, admin menus, icons and per-view intl paths.
Updated: translation intl paths now use eZExtension::baseDirectory() instead of hardcoded "extension/".
Renamed: helloworld translation catalogues to modules/<module>/{admin,user}/intl.
Updated: documentation/EXTENSIONS.md with completed module API, eZExtension reference, and admin menubox example.
Added: eZHelloWorldItem storage class and list/add flow to user and admin views.
Updated: documentation/EXTENSIONS.md with a minimal eZDB storage class example.
Updated: helloworld admin view to look like the core article archive list.
Updated: documentation/EXTENSIONS.md for helloworld adminlist template.
Updated: settings/override/site.ini.append.php to set DatabaseImplementation=sqlite and activate the helloworld extension.

Download Exponential Basic