🚀 Changelog — Flatboard 5.1.0
Release date: February 27, 2026
🛠️ Bug Fixes
🔔 Notifications — Debug warning, bell visibility, per-item delete, stale component
Several issues across the notification system were resolved:
Debug mode alert
- When
config.debug = true, asystemnotification is automatically created for each admin on first dashboard load. - Links directly to
/admin/config. - Writes a
Logger::warning()entry on every dashboard load while debug is active. - Not duplicated if an unread copy already exists.
- When
Notification bell hidden when empty
#notification-bell-wrappernow starts withd-none.loadNotificationsUnified()reveals it only if at least one notification exists.#notification-countappears only if unread count > 0.- “Mark all as read” hides the badge but keeps the bell accessible.
Per-item delete button
- Added
fas fa-trash-altbutton innotification-manager.js. - Sends POST to
notifications/delete. - 250ms fade-out animation.
- Calls
loadNotificationsUnified()to refresh state. - Navigation click area and delete button are fully isolated.
- Added
Stale native bell component
app/Views/components/notification-bell.phprewritten to match premium theme.Updated structure:
<li id="notification-bell-wrapper" class="d-none">- Font Awesome icon
notification-countbadgenotification-list-container- “Mark all as read” button
- “View all” footer link
Affected files
| File | Scope | |||
|---|---|---|---|---|
app/Controllers/Admin/DashboardController.php | Core | |||
app/Services/NotificationService.php | Core | |||
app/Views/components/notification-bell.php | Shared | |||
themes/premium/views/components/notification-bell.php | Premium | |||
themes/assets/js/main.js | Shared JS | |||
themes/assets/js/frontend/modules/notification-manager.js | Shared JS | |||
languages/fr | en | de | zh/main.json | i18n |
🔌 NotificationService — Custom Types Hook
NotificationService::validateNotificationType() rejected plugin-defined types.
Fix:
- Added
notification.types.registerhook. $allowedTypespassed by reference.- Plugins extend types at boot:
Plugin::hook('notification.types.register', function(array &$types): void {
$types[] = 'my_custom_type';
});
| File | Scope |
|---|---|
app/Services/NotificationService.php | Core |
👤 Profile — Subscriptions Tab Date Fix
Issue: Displayed $discussion['updated_at'] instead of created_at.
Fix:
- Changed
updated_at ?? created_at→created_at. - Sorting still uses
updated_at(recent activity first).
| File | Scope |
|---|---|
app/Views/users/profile.php | Shared |
🤖 Presence — Bots Leaking Into Anonymous Visitors
Root cause: Over-broad exception array in \bbot\b fallback.
Fixes:
Removed exception array.
Added missing
$botCachewrites.Added detection patterns:
- NaverBot / Yeti
- 360Spider
- YisouSpider
- Aspiegel
- ClaudeBot
- NetpeakSpider
- Omigili
- Datadog Synthetics
netsystemsresearch
| File | Scope |
|---|---|
app/Models/Visitor.php | Core |
🏷️ Presence — Bot Name Display Fixes
- Added friendly labels for unmapped bots.
- Fixed key ordering (
googlebot-imagebeforegooglebot).
| File | Scope |
|---|---|
app/Models/Visitor.php | Core |
📄 Presence — Visitors/Bots Pagination
Problem: Hard limit of 20 entries.
Fixes:
Added:
fetchVisitors(offset, append)fetchBots(offset, append)
Added “View more…” button when
hasMore = true.Polling resets offset every 30 seconds.
| File | Scope |
|---|---|
themes/assets/js/presence-lists.js | Shared JS |
🛠️ Admin — File Permission Fix Tool
Available in Admin → Maintenance → Fix Permissions
Modes
- Analyze (dry-run)
- Apply
Rules Applied
| Target | Permission |
|---|---|
Standard directories (app/, themes/, plugins/, languages/, vendor/) | 0755 |
Writable directories (stockage/, public/uploads/) | 0775 |
| PHP/JS/CSS/JSON files | 0644 |
Data files (stockage/*.json) | 0664 |
Sensitive files (config.json, *.key, *.pem, *.env) | 0640 |
Shell scripts (*.sh) | 0755 |
Additional Behavior
- Excludes
.git,.svn,node_modules. - JSON response includes counters + failed
chmodlist (max 20). - Entire maintenance section only visible if
config.debug = true. - “Debug” badge shown in UI.
- Translated
maintenance.debug_only_noticekey (5 languages).
| File | Scope |
|---|---|
app/Controllers/Admin/MaintenanceController.php | Core |
app/Views/admin/dashboard.php | Shared |
themes/assets/js/admin/modules/dashboard-management.js | Shared JS |
app/Core/App.php | Core |
📦 Files Changed (5.1.0)
| File | Scope |
|---|---|
app/Services/NotificationService.php | Core |
app/Views/users/profile.php | Shared |
app/Models/Visitor.php | Core |
themes/assets/js/presence-lists.js | Shared JS |
app/Controllers/Admin/MaintenanceController.php | Core |
app/Views/admin/dashboard.php | Shared |
themes/assets/js/admin/modules/dashboard-management.js | Shared JS |
app/Core/App.php | Core |
🚀 Changelog — Flatboard 5.0.7
Release date: February 23, 2026
🛠️ Bug Fixes
🤖 Flatbot / PrivateMessaging — Unauthorized View Error
Added missing
authorized_viewsentries:plugins/Flatbot/views.jsonplugins/PrivateMessaging/views.json
👤 User Profile — Bio Markdown Rendering
- Applied
\App\Helpers\MarkdownHelper::parse()to bio field.
⭐ Post — “Best Answer” Link Layout
- Restructured markup for clean label + attribution.
- Added fallback
'par'if translation missing.
📄 Pagination — Subdirectory Load More Fix
- Removed
/api/exception inbuildUrl(). - Fixed
currentOffsetinitialisation.
🗄️ Cache — PHP 8.3 Deprecation
- Added
(int)cast beforeusleep()call.
🤖 Flatbot — Avatar Rendering Fix
- Added
view.user.avatarhook. - Implemented
renderFlatbotGenericAvatar()handler.
📅 Flatbot — Date Separators in Chat
Added:
dateKeyFromTs()makeDateSeparator()
Added translations for Today/Yesterday.
Dark-mode compatible CSS.
🤖 Flatbot — Bot Group & Profile Completion
- Added
ensureFlatbotGroupExists(). - Set
email_verified = 1. - Added translated signature.
- Added language keys (
bot_signature,today,yesterday, etc.).
✉️ PrivateMessaging — Base URL Redirect Fix
Replaced hardcoded redirects with window.url() in:
compose.phpview.phpfrontend.php
📤 Upload — Missing Permission Check
- Added
PermissionHelper::can($userId, 'attachment.upload').
👁️ Presence — API Permission Enforcement
Added
presence.viewcheck in:getVisitorsList()getBotsList()getPageStats()getActive()
🔐 Authentication — “Remember Me” Fixes
- Skipped timeout checks when
_remember_me = true. - Re-sent persistent cookie after
session_regenerate_id(). - Set
session.gc_maxlifetime = 30 days. - Stored
_remember_mein session.
✨ New Features
👁️ Presence Indicator — Plugin Hook System
New Hooks
| Hook | Purpose |
|---|---|
visitor.page_info | Inject page metadata |
presence.anonymous_visitors | Modify anonymous visitors |
presence.bots | Modify bots list |
presence.users | Modify active users |
visitor.before_track | Modify visitor tracking data |
Plugins Updated
| Plugin | URL Pattern | Presence Type |
|---|---|---|
| EasyPages | /page/{slug} | easypages |
| FlatBlog | /blog/* | blog_* |
| PrivateMessaging | /messages/* | messages |
| Reputation | /reputation/* | reputation |
| polls | /polls/* | polls |
| ResourceManager | /resources/* | resources |
| CookieConsent | /cookieconsent/* | cookieconsent |
| Flatbot | /flatbot | flatbot |
| TranslationManager | /translations/* | translations |
🚀 Changelog — Flatboard 5.0.6
Release date: February 22, 2026
🛠️ Bug Fixes
🌐 API — Autoloader Fix
Replaced inline bootstrap in
public/api.phpwith:PHPrequire_once BASE_PATH . '/bootstrap.php';
🔄 StorageMigrator — Multiple Fixes
| Issue | Fix |
|---|---|
Undefined DATA_PATH | Replaced with BASE_PATH . '/stockage' fallback |
Session::delete() crash | Replaced with Session::remove() |
| Dates overwritten in migration | Added createDiscussionWithId() and createPostWithId() |
📦 Files Changed (5.0.6)
| File | Scope |
|---|---|
public/api.php | Core |
plugins/StorageMigrator/StorageMigratorController.php | Plugin |
app/Storage/JsonStorage.php | Core |
app/Storage/Migrations/SqliteToJsonMigration.php | Core |
🚀 Changelog — Flatboard 5.0.5
Release date: February 19, 2026
🛠️ Bug Fixes
🔎 SEO — rel="nofollow ugc"
Added to all external user-generated links.
Applied to:
- Profile website field
- MarkdownHelper
- EasyMDEHelper
🎨 EasyMDE — Font Awesome 7 Compatibility
- Replaced glyph rendering with inline SVG
background-image. - Preserved
<i class="fa fa-*">structure. - Covers 25 toolbar icons.
- Fully supports hover, active, dark mode.
💻 EasyMDE & TUIEditor — Code Block Redesign
- Unified
.tui-code-block. - Integrated header bar.
- JS-only collapse.
- Added translations.
- Added
--forcetorebuild:markdown.
🧠 Cache — Null Value Fix
- Replaced
isset()witharray_key_exists().
🏷️ Discussion Status Badges
- Fixed JS target container.
- Added
data-statusattributes. - Ensured translated labels appear.
🧑⚖️ Moderation Dropdown
- Removed duplicate “Ban user” button.
📜 Logger — Placeholder Fix
- Injected discussion title into
{title}.
📄 Load More — Profile Tabs Fix
- Separated JSON and HTML handlers.
- Added container IDs.
- Fixed pagination ownership.
🎨 UI Styling
- Removed dropdown left indentation (
padding-left: 0).
📈 Improvements
📄 EasyPages — Banner Metadata & Rendering
- Banner uses first post
created_at. - Shows “Updated on” if edited.
- Removed duplicate title/author.
- Unified layout with Markdown pages.
📊 EasyPages — Consolidated Page Views
| Before | After |
|---|---|
| One file per visit | Single data/views.json |
| O(n) glob scan | Constant-time lookup |
| Plain IP storage | SHA-256 hashed IPs |
Includes automatic one-time migration.
🎯 Icon Picker — CSS-Parsed Catalogue
- Python script parses
font-awesome.min.css. - 1,906 validated icons across 20 categories.
- Automatic solid/brands detection.
- Supports
--dry-runand--stats.
Voici la version corrigée, complète et homogénéisée du Changelog 5.0.5, avec :
- ✅ Sections normalisées
- ✅ Emojis cohérents
- ✅ Tableaux propres
- ✅ Structure professionnelle uniforme
🚀 Changelog — Flatboard 5.0.5
Release date: February 19, 2026
🛠️ Bug Fixes
🔎 SEO — rel="nofollow ugc"
Ajout automatique de
rel="nofollow ugc"sur tous les liens externes générés par les utilisateurs.Appliqué à :
- Champ site web du profil
MarkdownHelperEasyMDEHelper
🎨 EasyMDE — Compatibilité Font Awesome 7
- Remplacement du rendu glyph par
background-imageSVG inline. - Conservation de la structure
<i class="fa fa-*">. - Compatible hover / active / dark mode.
- 25 icônes toolbar couvertes.
💻 EasyMDE & TUIEditor — Refonte des blocs de code
- Unification sous
.tui-code-block. - Ajout barre d’en-tête intégrée.
- Collapse JS-only.
- Ajout traductions associées.
- Ajout option
--forcepourrebuild:markdown.
🧠 Cache — Correction valeur null
- Remplacement de
isset()pararray_key_exists(). - Corrige les faux positifs “Invalid cache data”.
🏷️ Discussion Status Badges
- Correction ciblage JS du conteneur.
- Ajout attributs
data-status. - Garantie affichage des labels traduits.
🧑⚖️ Dropdown de modération
- Suppression du bouton “Ban user” dupliqué.
📜 Logger — Placeholder {title}
- Injection correcte du titre de discussion dans les logs.
📄 Pagination — Onglets Profil
- Séparation handlers JSON / HTML.
- Ajout IDs de conteneurs.
- Correction ownership pagination.
- Fix du "Load More".
🎨 UI — Dropdown Alignment
- Suppression
padding-left: 0résiduel. - Alignement propre des menus déroulants.
📈 Improvements
📄 EasyPages — Rendu des pages issues de discussions
- Le bandeau utilise
created_atdu premier post. - Affiche “Updated on” si édité.
- Suppression doublon titre/auteur.
- Layout unifié avec pages Markdown natives.
📊 EasyPages — Consolidation du système de vues
| Avant | Après |
|---|---|
| 1 fichier par visite | 1 fichier data/views.json unique |
Scan glob() O(n) | Lookup constant |
| IP stockées en clair | SHA-256 hash |
✔ Migration automatique exécutée une seule fois.
🎯 Icon Picker — Catalogue généré depuis CSS
- Script Python analyse
font-awesome.min.css. - 1 906 icônes validées.
- 20 catégories.
- Détection automatique solid / brands.
- Options
--dry-runet--stats.
📦 Files Changed (5.0.5)
| File | Scope |
|---|---|
app/Helpers/MarkdownHelper.php | Core |
app/Helpers/EasyMDEHelper.php | Core |
app/Helpers/Cache.php | Core |
app/Controllers/DiscussionController.php | Core |
app/Controllers/UserController.php | Core |
app/Services/EasyPagesService.php | Core |
app/Views/users/profile.php | Shared |
themes/assets/js/main.js | Shared JS |
themes/assets/js/profile-tabs.js | Shared JS |
themes/assets/css/style.css | Shared CSS |
plugins/Logger/Logger.php | Plugin |
plugins/EasyPages/* | Plugin |
tools/icon_picker_generator.py | Tooling |
Edited on Feb 27, 2026 By Fred .
- flatboard pro flatboard release new
- Celebrate(1)
arpinux