You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
add inline status toggle, superadmin protection, i18n, and elFinder
Pages:
- Add isActive() AJAX endpoint for inline page activation/deactivation
- Auto-remove deactivated pages from navigation menu with cache flush
- Show homepage badge in DataTables listing with real-time updates
- Filter inactive pages from frontend rendering (Home controller)
Users:
- Prevent deletion of superadmin users with localized error message
- Fix DataTables search (remove erroneous $like=[] reassignment)
- Change user_del() to read ID from POST instead of URL segment
- Add CSRF exemptions for AJAX user management endpoints
Menu:
- Replace all hardcoded Turkish strings with lang() calls (EN + TR)
- Switch refreshLeftList() from POST to GET for idempotent reads
Media:
- Upgrade elFinder from 2.1.66 to 2.1.67 (JS, CSS, i18n, help files)
- Bypass elFinder internal CSRF; CI4 Shield session auth suffices
Sitemap:
- Respect App.siteLanguageMode in Blog/Pages sitemap models
- Add public/sitemap.css stylesheet for browser-readable sitemaps
Backup:
- Fix AJAX promise chain (done/fail/always) for create and delete
- Defer DataTables reload after CSRF meta tag update
Infrastructure:
- Declare DataTable variable at module scope in Backup and Users views
- Simplify template filter path resolution in Filters.php
- Update documentation (architecture, handbook, README, CHANGELOG)
Copy file name to clipboardExpand all lines: CHANGELOG.md
+32Lines changed: 32 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,36 @@ All notable changes to this project will be documented in this file.
4
4
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) conventions adapted to the existing four-component version numbers.
6
6
7
+
## [0.32.0.0] - 2026-06-03
8
+
9
+
### Added
10
+
11
+
-**Pages: Inline Status Toggle:** New `isActive()` AJAX endpoint allows administrators to activate or deactivate pages directly from the DataTables listing without opening the edit form. Deactivating a page automatically removes it from the navigation menu and invalidates the corresponding per-locale menu cache.
12
+
-**Pages: Homepage Badge:** The pages list now shows a visual "Home" badge next to the page currently set as the homepage, updating in real time when the homepage selection changes.
13
+
-**Sitemap Stylesheet:** Added `public/sitemap.css` to style the XML sitemap with a clean, readable layout for browsers.
14
+
-**Users: Superadmin Delete Protection:**`user_del()` now verifies the caller holds the `superadmin` role and prevents deletion of any user belonging to the `superadmin` group, returning a localized error message (`cannotDeleteSuperadmin`) instead.
15
+
-**Menu Module: Full Internationalization:** All hardcoded Turkish strings in the Menu module views and JavaScript (stat labels, toast messages, confirm dialogs) have been replaced with `lang()` calls backed by new language keys in both English and Turkish language files.
16
+
17
+
### Changed
18
+
19
+
-**elFinder Upgrade to 2.1.67:** Updated all elFinder JS, CSS, and i18n files from 2.1.66 to 2.1.67. Added three new help files (`fr`, `zh_CN`, `zh_TW`). Asset `<script>` tags now include a `?v=2.1.67` cache-buster.
20
+
-**elFinder CSRF Bypass:** elFinder's internal CSRF token validation has been disabled via an anonymous class override because CI4 Shield's session-based authentication and the `backendGuard` filter already protect the connector endpoint; the internal CSRF mechanism was causing stale-token 403 errors during multi-request file operations.
21
+
-**Frontend: Inactive Pages Hidden:**`App\Controllers\Home` now adds an `isActive = 1` condition when resolving page content, preventing deactivated pages from being rendered on the public site.
22
+
-**Sitemap: Single-Language Mode:**`BlogModel::sitemapItems()` and `PagesModel::sitemapItems()` now check `App.siteLanguageMode`; in single-language mode, only records matching the default locale are emitted, eliminating duplicate sitemap entries.
23
+
-**Users: DataTables Search Fix:** Removed the erroneous `$like = []` reassignment in `UserController::index()` that was silently discarding the search string parsed from the DataTables request.
24
+
-**Users: CSRF Exemptions:** Added `backend/users/removeFromBlacklist`, `backend/users/blackList`, `backend/users/forceResetPassword`, and `backend/users/user_del` to `UsersConfig::$csrfExcept` so AJAX-based user management actions no longer fail on token regeneration.
25
+
-**Users: `user_del()` Signature Change:** The method no longer accepts a URL segment parameter; the target user ID is now read exclusively from POST data, matching the AJAX call pattern.
26
+
-**Backup Module: AJAX Reliability:** Backup create and delete operations now use the `.done()/.fail()/.always()` promise chain instead of the legacy `$.post(url, data, callback, type)` signature. The DataTables reload is deferred via `setTimeout(0)` to ensure it runs after the CSRF meta tag update.
27
+
-**Backup & Users Views: DataTable Scope Fix:** The DataTable instance variable in both Backup and Users list views is now declared at module scope (outside the `$(function(){})` wrapper) so that external functions (e.g. create/delete handlers) can call `table.ajax.reload()` without `ReferenceError`.
28
+
-**Filters.php: Template Filter Path Simplification:** The active theme's filter directory is now resolved with a simple `APPPATH` concatenation instead of the `resolve_template_path()` helper, removing an unnecessary abstraction layer and null-check branch.
29
+
-**Menu Module: `refreshLeftList()` changed from POST to GET:** The left sidebar panel refresh now uses `$.get()` instead of `$.post()`, matching the idempotent nature of the request and eliminating the need for CSRF token injection on a read-only call.
30
+
-**Pages Controller: Code Style Normalization:** Minor formatting changes (alignment, brace style, cast spacing) applied across the Pages controller for consistency with the project's coding standards.
31
+
32
+
### Fixed
33
+
34
+
-**Users: Search Broken in DataTables:** The `$like` variable was overwritten with an empty array immediately after being parsed from the DataTables request, making search effectively non-functional. The erroneous reassignment has been removed.
35
+
-**Pages: `setHomePage` Client-Side Stale Badge:** After toggling the homepage via AJAX, the JavaScript `homePageId` variable was not updated, causing the "Home" badge to appear on the wrong row until a full page reload. The variable is now updated immediately upon a successful response.
36
+
7
37
## [0.31.11.0] - 2026-05-24
8
38
9
39
### Fixed
@@ -348,6 +378,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
348
378
349
379
- Expanded database migrations and introduced new supporting libraries.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -172,7 +172,7 @@ Standard CodeIgniter commands (`php spark db:seed`, `php spark key:generate`, et
172
172
173
173
## Developer Notes
174
174
175
-
-**Cache keys**: `settings` (24h), `menus` (24h), `{userId}_permissions`. Clear with `php spark cache:clear` or `cache()->delete()`.
175
+
-**Cache keys**: `settings` (24h), `menus_{locale}` (per-locale, 24h), `{userId}_permissions`. Clear with `php spark cache:clear` or `cache()->delete()`.
176
176
-**Base controller**: Extend `Modules\Backend\Controllers\BaseController` for new backend controllers; it prepares session user, navigation, mail settings, and shared data.
177
177
-**Permissions**: Register new secured routes in `Modules\Methods` (or via the database) so the permission filter recognizes them.
0 commit comments