Change Log Feed
In chronological order, the change log of the last 10 releases.
Feed Title: Release notes from wackowiki
6.3.0
WackoWiki 6.3.0 — Major Feature Release
This release represents a massive architectural overhaul, bringing modern JavaScript tooling, a completely rewritten editor experience, hardened security defaults, and a flexible new syntax highlighter.
Headline Features
WikiEdit: Complete Rewrite (ES2023 + ES Modules)
The editor has been modularized into ES6 modules with a dedicated state management layer and a AbortController for all fetch calls.
| Feature | Description |
|---|---|
| Autosave | Never lose drafts again; automatic background persistence. |
| Full Undo/Redo Stack | Deep history management across sessions. |
| Search & Replace | Full regex-supported find/replace inside the editor. |
| Live Preview | Real-time rendering as you type. |
| Syntax Highlighting | Code blocks highlighted inside the editor. |
| Fullscreen / Zen Mode | Distraction-free writing (widescreen centered). |
| Drag & Drop + Paste Images | Upload assets directly into the edit buffer. |
| Markdown ↔ Wacko Converter | Seamless format switching via toolbar. |
| Popup Forms | Guided modals for complex Links and Tables. |
| Toolbar Customization | Add/remove/reorder buttons via config. |
| Resizable Editor | Drag handle to adjust height. |
Dev Note: Complex legacy helpers (
MarkUp,_LSum,_RSum,_TSum) have been refactored. Autocomplete selection bugs are fixed.
Security & Platform Hardening
- Content Security Policy (CSP) Nonces: All inline scripts now use strict nonces.
- Cookie Prefixes (RFC 6265bis):
__Host-and__Secure-prefixes applied for session integrity. - Native Clipboard API: Removed
Clipboard.jsdependency; uses modernnavigator.clipboardwith robust fallback. - Fixed Invalid Selector Tokens: Patched potential broken "Copy to Clipboard" handlers.
Core Architecture & Routing
| Change | Impact |
|---|---|
Virtual _ Handler Prefix | Handlers moved to page/_edit, page/_show, etc. Fixes namespace collisions where user pages named Something/edit clashed with core handlers. |
Composer vendor Folder | All external PHP libraries moved out of lib/ into vendor/ (managed via Composer). |
| Config Array Upgrade | Configuration updates now respect $wacko_config_defaults live, ignoring potentially stale cache. |
| TOC Generation Fix | $this->toc logic repaired for newly created pages. |
UI & Theming
- Dark Mode: First-class support with OS detection (
prefers-color-scheme) and manual toggle. - Double-Click Edit Comments: Rapid inline editing for comment sections.
Syntax & Markup Extensions
Phiki Highlighter (v2.2.0)
Replaces the legacy Pear highlighter. Fast, modern, supports 350+ languages via TextMate grammars.
Migration Required: Obsolete highlighters removed (
css,ini,html,java,pascal,sql).
Action: Run theadmin_replaceaction to auto-migrate:%%(css) → %%(hl css) %%(sql) → %%(hl sql) ... etc
Table Markup Improvements
New attribute system for rows, cells, and tables.
New Syntax:
!| col | col |! # Header row with attributes #|(attr=value) # Row attributes Supported Attributes:
| Attribute | Values | Scope |
|---|---|---|
span | number | Cell/Colspan |
side | top | bottom | Header/Foot position |
class | alternate, sticky, default[left|center|right...], colN[left|right...], col-N[left|right...] | Styling hooks |
CSS Selectors Added:
.alternate— Zebra striping.sticky— Fixed header on scroll.default[left|center|right|top|middle|bottom]— Global cell alignment.colN[...]— Column N alignment (1–25).col-N[...]— Column N from right alignment (1–9)
Helper Functions
- New
table_attr()parser for the extended markup. - Wrapper
pagenow acceptscoloption.
Internationalization (i18n)
New complete translations added:
- 🇭🇷 Croatian (
hr) - 🇹🇭 Thai (
th) - 🇹🇷 Turkish (
tr) - 🇻🇳 Vietnamese (
vi)
Dependency Updates
| Library | Version | Status |
|---|---|---|
| Phiki | 2.2.1 | New (Replaces Pear) |
| Legacy Highlighters | — | Removed |
Upgrade Guide
- Run Composer:
composer install --no-dev(populatesvendor/). - Run Migrations: Execute the installer script.
- Migrate Highlighters: Run the
admin_replaceaction to convert%%(lang)→%%(hl lang). - Check Routes: If you have custom handlers or pages named
edit,show,properties, etc., verify they resolve correctly under the newpage/_*namespace. - Clear Cache: Delete
cache/config/andcache/template/(or runadmincacheaction). - Test CSP: Verify your web server passes the
Content-Security-Policyheader with nonces.
Credits
Huge thanks to contributors for the Phiki integration, the translation teams for HR/TH/TR/VI, and everyone testing the WikiEdit rewrite.
Full Changelog: 6.2.1...6.3.0
Documentation: wackowiki.org
6.2.1
Minor feature and bug fix release for 6.2.x series
- extend table markup allowing table caption, cell spans, width and cell attributes
?| table caption |?^| header | cell |||| cell ^ header ||||(attr=value) cell | cell ||- attributes:
align = [center|left|right|justify]bgcolor = [blue|red|green|x11colors]colspan = numberid = id_namerowspan = numberscope = [row|col|rowgroup|colgroup]valign = [top|middle|bottom]width = number[px|%|em|rem]
- allows now
[px|%|em|rem]withwrapper_width - change markup syntax for subscript to
,,subscript,, - make
sess->date_patterndependent on$this->user_lang - x11colors.css
- replace
.mark-[blue|green|red]with[xblue|xgreen|xred]to not overwrite default definitions in wacko.css
- replace
- miscellaneous minor fixes
- Libs
- PHPMailer 7.0.2
Full Changelog: 6.2.0...6.2.1
6.2.0
Major feature release
- SQLite support
- add
DbSqliteclass - add backup & restore in admin panel for SQLite
- rewrote SQL queries to work with MySQL as well as SQLite
- register custom regexp function to use
REGEXPwith SQLite - add functions to abstract SQL syntax and function differences between MySQL and SQLite
utc_dt()date_sub(int $value, string $interval)binary()collate()limit()
- add
- fix missing route case for CSS files in
RECOVERY_MODE - validates the namespace to prevent users from creating inaccessible pages when
mode_rewriteis enabled - add binary string search action (see community folder)
- adds exact or regex search for registered users
- installer
- add SQLite table creation script
- add
_t()function for$lang[]array- installer uses now English as fallback for missing message sets
- add mandatory installer password protection
- It is imperative to set the password for the installer in the
config/lock_setupfile.
- It is imperative to set the password for the installer in the
- add new system page with
whatsnewaction - add private system page with with the
admincacheandadmin_recoveryaction and set it as bookmark for the admin - the installer sets now bookmarks for the admin account, therefore it no longer shows the default bookmarks for the admin in the menu by default
- actions
menu: fix not showing 'Set a bookmark' formwhatsnew:- add filter for pages, comments and files
- show also edited comments in list
- no longer use
linktable formostcommentedandmostpopularaction
- miscellaneous minor fixes
- WikiEdit
- replace
varwithconstandlet
- replace
- update libs
- php-diff 2.5.0
- PHPMailer 7.0.1
- PHP Thumb Library 2.3.3
- SimplePie 1.9.0
Full Changelog: 6.1.29...6.2.0
6.1.25
Minor feature and bug fix release for 6.1.x series
- removed deprecated
Pragma: no-cacheandExpires:header - fixes
If-Modified-Sinceconditional requests issues - fixes invalid
ETag - fixes various
Cache-Controlheader issues - fixes missing height width value for external img links
- adds option to transliterate filenames to lowercase
- adds
navigationaction - adds option to set the
SameSiteattribute , see constants.php - adds option
login_noticeto hide recurring 'Welcome back' notice - adds full words highlight mode
- miscellaneous minor fixes
- update libs
- PHPMailer 6.9.1
- svg sanitizer 0.18
Full Changelog: 6.1.24...6.1.25
6.1.26
Minor feature and bug fix release for 6.1.x series
- adds
file_metaforfile_cache - uses
:focus-withinpseudo selector for dropdown - adds CSS class
btn-smandbtn-md - English message sets fixes
- initial language files for Tamil
- re-check for anonymous user before storing cache
soft_login()may setsess->user_profile
- removes redundant
setlocale()call - adds
db_vendorto primary config - installer auto-detects
db_vendor- either
mariadbormysql - uses server SQL mode for installer by default
- in
debugmode thedb_vendorcan be selected in the db config page along with the SQL mode - mainly to solve SQL mode incompatibilities between MariaDB and MySQL
- either
- renames
sql_mode_stricttosql_mode0- server (default)1- session lax2- session strict
- fixes not showing read ACL
$pages in the default menu for logged in users with no own bookmarks defined - miscellaneous minor fixes
- update libs
- svg sanitizer 0.19
- PhpThumb 2.3.1
Full Changelog: 6.1.25...6.1.26
Feed Title: Recent Commits to wackowiki:master
show_access_mode: show permissions link only for page owners
show_access_mode: show permissions link only for page owners The badge now renders as an <a> only for owners and admins; everyone else gets an inert <span>. Previously the method always emitted the link, so users saw a clickable "permissions" badge that took them to a handler they could not use. Also: type-hint parameters, replace the if/elseif chain with match, and hoist the "private" condition.
form_open: persist $href_param as hidden inputs on GET forms
form_open: persist $href_param as hidden inputs on GET forms Adds a $persist_params flag (default false) to form_open. When set on a GET form whose $href_param is an array, each entry is rendered as a hidden input so the parameters survive submission without appearing in the URL. Values are escaped with Ut::html(); callers must keep $href_param entries scalar.
minor fixes
minor fixes
fix(installer): prevent orphan menu records when page_id is missing
fix(installer): prevent orphan menu records when page_id is missing The installer could insert empty/orphan rows into the {prefix}menu table when the correlated sub-select for page_id returned NULL or 0. This happened when sanitize_page_tag() produced an empty tag, or in the multi-language SET_MENU_ONLY path over a missing page row. Changes in setup/insert_pages.php (insert_page function): - bail out early when the tag sanitizes to an empty string, avoiding any downstream INSERT for unusable tags - add a $menu_guard() closure that re-runs $page_select before each menu INSERT and silently skips it when the page row cannot be found - apply the guard inside all three driver branches (mysqli, sqlite, PDO) using the existing query idioms - no prepared statements, no try/catch, no schema changes - execution loop and query strings otherwise unchanged Mirrors the existing $add_page / $page_exists detection pattern so the patch stays consistent with the legacy installer style.Fix SQLite FTS5 syntax error on special characters in search
Fix SQLite FTS5 syntax error on special characters in search The full-text search query for SQLite used the user-supplied phrase directly inside an FTS5 MATCH clause. Characters such as "/", "-", ":", or "&" are treated as FTS5 operators/delimiters, which caused queries like `vendor/bin/phpunit` to fail with: fts5: syntax error near "/" Wrap the phrase in double quotes (and escape internal quotes by doubling them) before passing it to MATCH. This forces FTS5 to treat the value as a verbatim phrase, leaving LIKE-based fallbacks and the MySQL path untouched.