All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning conventions adapted to the existing four-component version numbers.
0.31.9.0 - 2026-05-08
- CSRF Architecture Overhaul: Implemented centralized
ajaxPrefilterinci4ms.jsfor automatic CSRF token injection on all AJAX requests. elFinder route exempted from CSRF viaMediaConfig::$csrfExceptto prevent stale-token 403 errors during multi-request operations. - HTMLPurifier Hardening: Removed
data:URI scheme fromAllowedSchemesto blockdata:text/html;base64XSS bypass attacks (Base64 images use a custom placeholder mechanism). DisabledCSS.Trustedto filter dangerous CSS properties. EnabledHTML.TargetBlankfor automaticrel="noopener noreferrer"on external links. Ensured Blog and Pages controllers always persistCustomRules::getClean()sanitized content to the database. - IP Spoofing Fix: Removed raw
$_SERVER['HTTP_X_FORWARDED_FOR']and$_SERVER['HTTP_CLIENT_IP']reads fromBackendLogFilter. Now relies solely on CI4's$request->getIPAddress()which respectsApp.proxyIPsconfig for trusted proxy detection. - Raw
$_SERVERElimination: Replaced all raw$_SERVER['HTTP_HOST'],$_SERVER['HTTPS'], and$_SERVER['SERVER_NAME']reads with CI4'sbase_url(),site_url(), andparse_url()helpers acrossEmail.php,Ci4ms.php,Install.php, andSettings.php. - Fileeditor RCE Prevention: Added
$dangerousExtensionsblacklist (.php,.phtml,.phar,.htaccess, etc.) to block creating, writing, or renaming executable files via the file editor. Addedfile_exists()overwrite protection forcreateFileandrealpathboundary validation forrenameFile. - SQL Restore Hardening: Implemented a SQL statement whitelist (
INSERT,CREATE TABLE,DROP TABLE, etc.) and dangerous command blacklist (LOAD_FILE,INTO OUTFILE,GRANT,xp_cmdshell, etc.) inDbBackup::restore(). Added path traversal protection requiring backup files to reside withinWRITEPATH. - Hardcoded Credentials: Removed plaintext passwords from
DevGateconfiguration. Implementedbcrypthashed passwords and enabled$useHashedPasswordsby default to protect developer credentials. - Stored XSS — Blog Content (reported by offset): The
html_purifycustom validation rule was applied to the Blog content field but did not enforce sanitization during update operations, allowing authenticated authors to persist malicious scripts. Fixed by ensuringCustomRules::getClean()is invoked and its output persisted on bothcreateandupdateflows inBlog.phpcontroller. - Stored XSS — Pages Content (reported by offset): Identical bypass in the Pages module: the
html_purifyrule ran validation but the raw unsanitized value was written to the database on update. Fixed by enforcingCustomRules::getClean()output persistence inPages.phpcontroller for both creation and editing endpoints. - Fileeditor Destructive Operations Extension Bypass (reported by offset): The dangerous-extension blacklist was only enforced on
createFile,saveFile, andrenameFilebut not ondeleteFileOrFolderandrenameFilewhen the target was a critical application file (e.g..env,composer.json). Added an explicit extension allowlist check to all destructive operations (deleteFileOrFolder,renameFile) so that renaming or deleting files with critical extensions is blocked regardless of the operation type.
- DevGate CLI Sync:
php spark ci4ms:setupnow automatically updatesDevGate.phpwith the admin credentials provided during installation, matching the web installer's behaviour. - Proxy Configuration: Added comprehensive Cloudflare and Nginx reverse proxy configuration examples as comments in
App.php::$proxyIPs. - URI Schemes: Removed unused
nntpandnewsURI schemes from HTMLPurifier configuration.
0.31.8.0 - 2026-04-19
- Security (Session Management): Re-activated user account status verification in
Ci4MsAuthFilter. Deactivated or banned users now have their sessions immediately terminated upon their next request, remediating a session bypass flaw. - Security (Arbitrary Table Drop): Implemented migration-based whitelist validation in
Theme::deleteProcess. This ensures that selectively dropping database tables during theme deletion is restricted exclusively to tables declared within the specific theme's migration files, preventing arbitrary database table deletion.
0.31.7.0 - 2026-04-17
- UpdateService Library: Introduced a comprehensive
UpdateServicelibrary (modules/Settings/Libraries/UpdateService.php) to centralize all update logic. Features include GitHub Releases API integration (viareleases/latest), atomic file writing withrename(), automatic backup of modified files, concurrency control viaci4ms_update.lock, and pagination-aware file comparison (bypassing GitHub's 300-file API limit). - Rollback Management: Added
listBackups()androllbackUpdate()endpoints with a SweetAlert2-based interactive UI for browsing and restoring system backups from the Settings dashboard. - Security Advisory: Added
security-advisory.mddocumenting the authenticated RCE vulnerability via theme upload (GHSA-fw49-9xq4-gmx6).
- Settings Controller: Refactored
checkVersion(),downloadPatch(), andautoUpdate()methods to delegate all logic to the newUpdateServicelibrary, reducing controller complexity and improving testability. - Setup Command: Updated version reference in
Ci4msSetup.phpto0.31.7.0. - Settings Routes: Added new
listBackupsandrollbackUpdatePOST routes under thebackend/settingsgroup. - Settings UI: Added "Backups" button to the settings header and integrated rollback confirmation workflow with progress feedback.
- Localization: Added 12 new translation keys for backup and rollback features across English and Turkish language files.
0.31.6.0 - 2026-04-15
- Automatic Update: Introduced a comprehensive
UpdateServicelibrary in the Settings module. Features include automated GitHub version discovery viareleases/latestendpoint, secure file-by-file patching (bypassing 300-file API limits), and automatic database migration support. - Atomic Operations: Implemented atomic file writing using temporary storage and
rename()to prevent partial updates. - Backup & Rollback: Integrated an automatic backup mechanism that captures modified files before patching, with a new manual rollback management interface in the Settings dashboard.
- Concurrency Control: Added
ci4ms_update.lockto prevent concurrent update attempts. - Update UI: Modernized the version check and update workflow with an interactive SweetAlert2-based interface and detailed progress feedback.
- Internationalization (i18n): Completed full translation support for the Settings module across all 11 supported languages (Arabic, German, English, Spanish, French, Hindi, Japanese, Portuguese, Russian, Turkish, Chinese).
- Update UI: Modernized the version check and update workflow with an interactive SweetAlert2-based interface.
- Setup Flow: Enhanced the security and reliability of credential propagation from the web installer to the DevGate configuration.
0.31.5.0 - 2026-04-14
- XSS Protection: Patched Stored XSS vulnerability in Backup module by mitigating unescaped filename rendering in DataTables.
- File System Security: Fixed Arbitrary File Write (Zip Slip RCE) via directory traversal inside ZIP processing during
Theme::uploadandBackup::restorehandling. - Privilege Escalation: Prevented unauthorized assignment of the
superadminrole during user creation and update flows within theUserController.
- Funding: Added funding configuration (
.github/FUNDING.yml) to support project contributions. - Logo: Updated the application's default logo format to optimized WebP.
- Backup Manager: Resolved an underlying syntax error in the Backup controller's restore method.
0.31.4.0 - 2026-04-06
- XSS Protection: Mitigated Stored XSS vulnerability in
UserControllerby wrapping blacklist status notes inesc(). - Authorization Bypass: Fortified
Fileeditormodule by implementingisHiddenPathvalidation across all file operations (readFile,saveFile,createFile,createFolder,renameFile,deleteFileOrFolder), preventing unauthorized disclosure and modification of protected system files like.envandcomposer.json. - Settings Security: Reformed Google Maps iframe validation (
cMap) inSettingscontroller to utilize a strictpreg_replace_callbackallowlist, mitigating a sophisticated srcdoc-based Cross-Site Scripting (XSS) exploit. - Pages Security: Appended the stringent
html_purifyvalidation rule to page creation and update flows to intercept and neutralize injected JavaScript securely. - Installation Integrity: Eliminated a volatile cache-dependent installation guard in favor of a persistent filesystem lock (
install.lock) verification within both Web (InstallFilter) and CLI (Ci4msSetup.php) boot lifecycles. This successfully remediates a critical post-installation re-entry bypass. - Input Validation: Patched a CRLF Injection flaw within the initial environment setup by meticulously stripping
\r\ncarriage returns from arbitrary injected payload components insideInstall.php.
0.31.3.0 - 2026-04-02
- CLI: Introduced
php spark ci4ms:setupcommand (Ci4msSetup.php) to automate the full application installation — migrations, seeding, and default data creation — from a single command-line call. - Install: Added "Site Slogan" support to both CLI and Web installation flows.
- Install: Refactored
InstallService.phpandInstall.phpcontroller to support the newci4ms:setupCLI flow alongside the existing web-based installer. - DashboardWidgets: Updated
WidgetService.phpfor improved widget handling. - CI/CD: Updated
docker-test.ymlworkflow to usephp spark ci4ms:setupinstead of separate migrate and seed steps; removed the fragilePaths.phppatch workaround. - Docs: Synchronized
architecture.htmlanddeveloper-handbook.htmlwith recent structural changes (Shield, Docker, CLI setup) and improved layout/table styling.
- Boot: Added missing
$supportDirectoryproperty toapp/Config/Paths.php, resolving theUndefined constant "CodeIgniter\Config\SUPPORTPATH"fatal error that occurred duringphp sparkexecution in Docker/CI environments on CI4 4.4+. - CLI: Fixed directory creation in
Ci4msSetup.phpby switching fromPUBLICPATHtoFCPATHand ensuredfilesystemhelper is loaded for route generation.
0.31.2.0 - 2026-04-01
- Docker Support: Introduced full Docker environment with
Dockerfile,docker-compose.yml, Apache virtual host configuration, and customphp.inifor containerized development and deployment. - CI/CD: Added GitHub Actions workflow (
docker-test.yaml) to automatically build and test the Docker image on push. - Documentation: Added
DOCKER_SETUP.mdwith detailed instructions for running the project via Docker. - Localization: Added complete translation packs for
DashboardWidgetsmodule in 9 languages: Arabic, German, Spanish, French, Hindi, Japanese, Portuguese, Russian, and Chinese. - Localization: Added complete translation packs for
LanguageManagermodule in 9 languages: Arabic, German, Spanish, French, Hindi, Japanese, Portuguese, Russian, and Chinese. - Routing: Introduced
DefaultRoutes.phpconfig for centralized default route management.
- Auth: Updated
Auth/Config/Auth.phpandAuthGroups.phpto refine group and permission configurations. - Auth: Improved
CustomActivationController.phpfor Shield-compatible activation flow. - Backend: Updated
AJAX.phpandBaseController.phpfor improved request handling and response consistency. - Backend Language: Refreshed Backend translation files across all 11 supported languages.
- Blog: Updated Blog language files across all 11 supported languages; refined comment list and display views; updated post creation view.
- Backup: Refined
BackupConfig.php,Backup.phpcontroller, andDbBackup.phplibrary for improved reliability. - DashboardWidgets: Updated
WidgetService.phpandDashboardWidgetsConfig.php. - Fileeditor: Updated
FileeditorConfig.phpfor consistency with new config patterns. - Install: Updated
Install.phpcontroller andInstallService.phpfor improved setup flow. - Media / Menu / Pages / Settings / Theme / Users: Updated language files across all supported languages and refined module configs, controllers, and views for consistency.
- Methods: Updated
ModuleInstaller.phpandModuleScanner.php; refinedRoutes.phpand language files across all supported languages. - Frontend Language: Updated
app/Language/en/Frontend.phpwith new translation keys. - Filters: Updated
app/Config/Filters.phpfor improved filter handling. - App Config: Refined
app/Config/App.phpsettings. - Git: Updated
.gitattributesand.gitignorerules.
0.31.1.0 - 2026-03-30
- Theme Manager: Added
downloadStarterfeature offering automated, memory-based ZIP creation to provide a standardized starter boilerplate theme directly from the admin panel. - Theme Manager: Smart deletion confirmation GUI that parses theme migration files and allows users to drop associated database tables selectively.
- Theme Manager: Added a standalone
remove_theme_fileshelper specifically designed to clean up MVC templates and public asset files safely from the project root. - Theme Manager: Automated schema migration implementation inside the Settings module that runs database setups upon theme activation via configuration logic.
- Core UI: Integrated multiple message list support into the SweetAlert
_message_blockcomponent for enhanced feedback logs.
- Theme Manager: Enhanced
install_theme_from_tmpto support and copy theDatabase/Migrationsdirectory automatically upon extracting a new.ziptemplate. - Settings UI: Upgraded backend settings view to elegantly display an extra "Delete Theme" action under inactive template cards.
- Theme Manager: Fixed recursive directory deletion method (
deleteFldr) inthemes_helper.phpto resolve missing directory exceptions (by correcting parameter count based on recent code deprecations) and during legacy theme updates.
0.31.0.0 - 2026-03-29
- CodeIgniter Shield Integration: Fully replaced custom authentication migrations with Shield-compatible structures (
auth_groups,auth_identities,auth_groups_users). Removed 14 legacy migration files and introduced 6 new Shield-aligned migrations with proper foreign keys. - BackendLogFilter: Added
modules/Backend/Filters/BackendLogFilter.phpto record detailed user activities (IP, user agent, action, module) in the backend for audit trail and security monitoring. - XSS Protection: Implemented global input validation using
regex_match[/^[<>{}]*$/u]for common fields to prevent HTML/Script injection. - CSRF Protection: Verified and refined CSRF settings. Enhanced
mergeCsrfExceptmethod for improved robustness. Added logic to update CSRF tokens in the UI after AJAX operations to prevent token expiration. - Improved Validation: Relaxed
seflinkregex to allow natural characters while strictly forbidding dangerous ones. Addedis_natural_no_zeroandvalid_emailchecks where missing. - Removed 'seunmatt/codeigniter-log-viewer' vendor dependency.
- Implemented
Modules\Logs\Libraries\LogViewerfor better performance and CI4 integration. - Standardized log deletion with AJAX POST and SweetAlert2 confirmation.
- Improved security by escaping log content and removing external vendor code.
- Updated Logs controller and views to follow internal architecture patterns.
- Framework Configurations: Added
WorkerMode.phpandHostnames.phpto support high-performance environments (e.g., Swoole, FrankenPHP). - Migration Safeguards: Implemented
$lockfeature inapp/Config/Migrations.phpto prevent concurrent migration execution conflicts. - Dynamic Sidebar: Implemented auto-configuration for sidebar menus and icons, populated directly from module
Configparameters. - Shared Logic: Introduced
CommonBackendLibraryto centralize common backend operational logic across controllers. - Template Settings UI: Comprehensive user-friendly interface for:
- Dynamically managing theme assets (CSS, JavaScript).
- Injecting custom CSS and JavaScript code globally.
- Configuring footer content, including copyright and navigation links.
- Selecting and previewing Google Fonts.
- Toggling general display features (breadcrumbs, back-to-top button, dark mode).
- Controlling sidebar widgets visibility.
- Version Checker: Implemented version checking mechanism to notify administrators of available application updates.
- Development Tools: Added a custom module generator hook for streamlined backend module creation.
- Dynamic Confirmation: Integrated SweetAlert2 for all delete operations across the dashboard.
- Localization: Added new translation keys (
areYouSure,youWillNotBeAbleToRecoverThis,ok,success,error) to all 11 supported languages:- Turkish (tr), English (en), Arabic (ar), German (de), Spanish (es), French (fr), Hindi (hi), Japanese (ja), Portuguese (pt), Russian (ru), Chinese (zh).
- Project Hygiene: Added
CONTRIBUTORS.mdto.gitignore.
- System Requirements: Upgraded minimum PHP requirement to 8.2 across
composer.json,public/index.php, andsparkto comply with CodeIgniter 4.7.1 standards. - Core Dependencies: Bumped
codeigniter4/frameworkto4.7.1,codeigniter4/shieldto1.3.0,codeigniter4/translationsto4.7.0, andclaviska/simpleimageto4.4.0. - Module Management: Refined
moduleScancapabilities and introduced new interactive UI elements for better backend module oversight. - Auth System Overhaul: Refactored user and permission group management to fully leverage CodeIgniter Shield's capabilities. Removed legacy
Backend/Models/UserModel.phpin favour of Shield's built-in user entity. - Standardized API Responses: Unified response formats across backend Settings endpoints using
ResponseTrait. - Cache Invalidation: Ensured proper sidebar menu cache invalidation upon permission page creation.
- Asset Optimization: Migrated heavy frontend dependencies from
node_modulesto standalonevendorandpluginsdirectories inbe-assetsandtemplates. Drastically reduced repository size (~147MB saved) by removing source maps, unminified files, and unused package logic. - Fileeditor Enhancements:
- Implemented robust client-side alphabetical sorting (folders first, with Turkish locale character support).
- Enhanced Monaco Editor integration with accurate language detection (PHP, JS, CSS, MD, ENV) and
vs-darktheme optimization. - Cleaned up redundant logic and syntax issues in the file tree view.
- AJAX Refactoring: Converted all "Delete" actions from
GETroutes to secure AJAXPOSTrequests. - DataTables Improvements: Fixed dynamic element initialization (Bootstrap Switch) by moving logic to the DataTables
drawCallback. - Module Consistency: Standardized variable names and status indicators across
BlogandPagesmodules. - Routes: Updated
Routes.phpin multiple modules to supportPOSTmethod for sensitive actions. - Frontend: Updated
ci4ms.jswith improved global utilities and event handlers. - User Management: Configured user 'group' assignments in
UserControllerto support multiple groups via Select2 array inputs. Refactored validation rules (group.*) and role synchronization logic (syncGroups) for user creation and updating. Enhanced user statistics counters to dynamically excludesuperadminaccounts. - Template Views: Refined
base.php,pages.php,post.php, andtemp-settings.phpfor Shield compatibility and new settings UI.
- Tags Architecture: Fixed pivot table insertion logic in
CommonTagsLibraryto ensure new tags are always correctly linked and persisted for blog posts. - Sidebar Navigation: Fixed the sidebar menu auto-open and active state logic (AdminLTE 3) to accurately reflect the user's current module.
- Fileeditor Module: Fixed the path validation regex to correctly allow multi-level folder traversal (
/character). - PHP Logic: Fixed ternary operator precedence bugs that caused incorrect 'checked' states for status switches.
- Database Search: Resolved a linting error in
count()method calls in controllers. - View Cleanup: Deleted unused
commentList.phpand restructured comment management views.
- Deleted 14 legacy authentication/authorization migration files replaced by Shield-compatible schemas.
- Removed
Backend/Models/UserModel.php(superseded by Shield's user management).
0.26.3.4 - 2025-09-27
- Delivered full translation packs for every module in Spanish, French, German, Chinese, Russian, Japanese, Arabic, Portuguese, and Hindi, including validation to preserve existing placeholders and HTML tokens.
0.26.3.3 - 2025-09-26
- Seed missing default permissions for file editor actions, the backend theme manager, and the WebP toggle during installation.
- Build the settings cache once during filter bootstrap to eliminate redundant database lookups.
- Move the WebP conversion toggle from the AJAX controller to the Settings controller so cache invalidation happens automatically after updates.
- Normalize blog
created_atvalues to the standardY-m-d H:i:sformat before persisting entries. - Use the correct language keys for blog category headings to resolve localization mismatches.
- Exclude matches that only appear inside HTML comments from frontend autocomplete suggestions and display category labels correctly.
- Remove the unused backend test route and broaden the blog module CSRF exceptions to cover the required endpoints.
0.26.3.2 - 2025-09-25
- Automatically add the Logs module to the admin menu during installation so the log viewer is available from the first run.
- Ship the
.gitattributesfile inside distribution packages so attribute rules accompany exported archives.
0.26.3.1 - 2025-09-19
- Started maintaining this changelog to track release highlights.
- Marked documentation and auxiliary files with
export-ignoreso Composer dist packages stay lean. - Refreshed docs to cover the new module generator command, backend log viewer, and changelog access.
0.26.3.0 - 2025-09-19
- Integrated the CI Log Viewer package and exposed a dedicated backend module for reviewing application logs.
- Captured per-action permission flags as structured JSON when creating or updating backend methods.
- Refreshed backend method management forms, navigation buttons, and module awareness.
- Loaded SweetAlert assets globally for backend pages and updated in-app documentation links to their GitHub sources.
- Dropped the legacy
module:createCLI command in favour of the composer-driven module generator dependency.
0.26.2.0 - 2025-09-17
- Updated documentation links to reference the project root correctly.
0.26.1.0 - 2025-09-17
- Published the initial developer documentation set for CI4MS.
0.26.0.0 - 2025-09-17
- Expanded database migrations and introduced new supporting libraries.