WackoWiki: 5.5 Change Log

https://wackowiki.org/doc     Version: 331 (11.02.2024 23:02)

5.5 Change Log

5.5

(31.12.2019) d2649d1[link1] -> M17 (Release Notes[link2])



1. Configuration

  1. disabled registration by default in config

1.1. primary config

  1. added
    • hashid_seed
    • sql_mode_strict
  2. removed
    • header_action
    • footer_action
    • classes_path
    • action_path -> ACTION_DIR
    • formatter_path -> FORMATTER_DIR
    • handler_path -> HANDLER_DIR
    • theme_path -> THEME_DIR
    • upload_path -> UPLOAD_DIR_GLOBAL
    • upload_path_per_page -> UPLOAD_DIR_PER_PAGE
    • upload_path_backup -> UPLOAD_DIR_BACKUP
    • cache_dir -> CACHE_DIR

1.2. secondary config

  1. renamed
    • session_expiration -> session_length
    • x_csp -> csp
    • policy_page -> terms_page
    • disable_autosubscribe -> autosubscribe
  2. new
    • allow_intercom
    • allow_massemail
    • allow_persistent_cookie
    • allowed_languages
    • anonymize_ip
    • approve_new_user
    • attachments_handler
    • default_diff_mode
    • diff_modes
    • enable_captcha
    • enable_referrers
    • ext_bad_behavior
    • footer_tags
    • help_page
    • hide_article_header
    • link_target
    • list_count
    • menu_items
    • nofollow
    • noreferrer
    • noreply_email
    • notify_diff_mode
    • notify_upload
    • privacy_page
    • pwd_admin_min_chars
    • referrer_policy
    • registration_delay
    • session_store
    • show_permalink
    • sorting_comments
  3. removed
    • x_frame_option
    • session_encrypt_cookie
    • allow_swfobject
    • revisions_hide_cancel
    • session_prefix
    • cookie_prefix
    • date_precise_format -> date_format and time_format_seconds
    • date_macro_format -> date_format and time_format
    • phpmailer
    • disable_npjlinks
    • meta_description
    • meta_keywords
    • tls_proxy

1.3. user settings

  1. new
    • sorting_comments
    • notify_minor_edit
    • notify_page
    • notify_comment
    • menu_items
    • diff_mode
  2. renamed
    • changes_count -> list_count
  3. removed
    • revisions_count -> list_count

1.4. constants

  1. new
    • ACTION_DIR
    • AP_LOCK
    • CACHE_CONFIG_DIR
    • CACHE_DIR
    • CACHE_FEED_DIR
    • CACHE_PAGE_DIR
    • CACHE_SESSION_DIR
    • CACHE_SQL_DIR
    • CACHE_TEMPLATE_DIR
    • CHMOD_DIR
    • CHMOD_FILE
    • CHMOD_SAFE
    • CONFIG_DEFAULTS
    • CONFIG_DIR
    • CONFIG_FILE
    • DAYSECS
    • FORMATTER_DIR
    • HANDLER_DIR
    • IMAGE_DIR
    • LINK_FILE
    • LINK_PAGE
    • OBJECT_FILE
    • OBJECT_PAGE
    • RECOVERY_MODE
    • SITEMAP_XML
    • SITE_LOCK
    • SQL_MODE_PERMISSIVE
    • SQL_MODE_STRICT
    • THEME_DIR
    • UPLOAD_BACKUP_DIR
    • UPLOAD_GLOBAL_DIR
    • UPLOAD_PER_PAGE_DIR
    • WACKO_ENV
    • XML_DIR
  2. renamed
    • TRAN_DONTCHANGE -> TRANSLIT_DONTCHANGE
    • TRAN_LOWERCASE -> TRANSLIT_LOWERCASE
    • TRAN_LOAD -> TRANSLIT_LOAD
    • TRAN_DONTLOAD -> TRANSLIT_DONTLOAD
    • ACTIONS4DIFF -> ACTION4DIFF
  3. removed
    • SQL_NULLDATE
    • CSP_CUSTOM -> csp_custom.conf

1.5. conf files

  1. autoload.conf[link3]
  2. router.conf[link4]
  3. csp_custom.conf[link5]
  4. csp_defaults.conf[link6]

2. Features

3. Core

3.1. Methods

This is only a random selection.

3.2. Classes


3.3. Folders


Use singular for folder names, it describes a specific entity.

3.4. Template Engine

The new template engine[link8] provides support for templates, to separate visual code (HTML/CSS) from logic code (PHP).

example.php
 $tpl->variable = 'Templatest is awesome.';	

template/example.tpl
 <p>[ ' variable | e ' ]</p>	


classes
  1. templatest.php[link10]
  2. templatestescaper.php[link11]
  3. templatestfilters.php[link12]
  4. templatestsetter.php[link13]
  5. templatestuser.php[link14]

Template support is available for actions, handlers, formatters and themes.

3.5. URI router

Decouples the serve logic from Apache to be server-agnostic.

class

foo://example.com:8042/over/there?name=ferret#nose
\_/   \______________/\_________/ \_________/ \__/
 |           |            |           |        |
scheme     authority     path        query   fragment
 |     ___________________|__
/ \   /                      \
urn:example:animal:ferret:nose	


router.conf[link4]
// whole idea is to take URI path, _GET/_PUT/_SERVER data and other
// meta-data, then process rules in this file sequentially, which
// results in dispatched handler to process query,
// and all arguments extracted from URI for further usage by those handlers
// (e.g. you can extract parts of URI to _GET vars, etc.)


// 'language' guide:
// every line of code consists of regex which matched against URI, and
// actions, all separated by whitespace. there are no possibility to
// include whitespace in regex or action.
// regex will be matched against URI, on success all actions executed, on failure - we go for next regex.
// lines without regex is continuations for same regex, and will be executed sequentially if regex matched.

// every single action can succeed or fail. if any one fails - all
// variable assignments made by THIS line (even before failed action) is
// discarded, and we go to next line.

// two control action exist (all action line must succeed for them to act!)
//	_next!		-- jump to next regex (skip next action lines with empty regex)
//	_ok!		-- search terminated with success
// if no _ok! executed ever - search fails and 404 emitted

// that's all on control flow.

// main regex:
// http://php.net/manual/en/reference.pcre.pattern.syntax.php -- usual php preg_* regex syntax apply, including
// delimiters and options after trailing delimiter.
// convenience macros (defined by 'define' line, or supplied by wackowiki) expanded before matching.
// used as {macro} - to be referenced as $1-vars then, or {var=macro} - for inline assignment.
// macros cannot be used in ~-regexes

// VARIABLES:
//	$0..$9	- fields matched by main regex. $0 is complete match, $1 and later - corresponding (...) parts
//	$a..$j	- as $0..$9 but set by sub-matched (by ~ operator) patterns 
//	Gname	- _GET[name]
//	Pname	- _PUT[name]
//	Sname	- _SERVER[name]
//	others	- local variables
// predefined vars:
//	_tls		- 1 or 0, tls session
//	_uri		- parsed URI (it is matched against main regex, but can be changed by assignment)
//	_method		- _SERVER[REQUEST_METHOD]
//	_rewrite	- 1 or 0, mod_rewrite active
// usage of undefined variables considered a failure (if not masked by @ in VALUE expansion, see later)

// ACTIONS:
// similar format used for all actions (not all fields apply for every action, and just ignored):
//		VARIABLE[:FUNCTION]operatorVALUE

// value is a string, with expanded variables. expansions:
//	$0 .. $9 / $a .. $j -- see above
//	${name}
//	@$... format can be used to mask undefined variable error
//	$$ - replaced by $
//	$@ - replaced by @

// assignments:
// 	FUNCTIONs can be used: tolower | toupper | int
//	var=$1
//	var:tolower=$1
//	var?=$2				-- assign if not set
//	var!				== var=1
//	dbg=$1,$2,$3		-- Ut::dbg printer ;)

// pattern matching:
//	var~/regex/i			-- sets $a..$j on success
//	var!~/regex/i
//	var~hashid:[1-9]		-- hashid expansion, into $a...
//	var!~hashid:[1-9]

// comparisons:
//	FUNCTIONS can be used: int -- both args converted to int before comparison
//	var==12    var!=12    var:int<12    var>12    var<=12    var>=12

// others:
// var?					-- isset
// var-					-- unset

//define	{method}	name|name|name		// predefined by wackowiki
define		{hashid}	[0-9a-zA-Z]+
define		{i}			[0-9]+
define		{h}			[0-9a-fA-F]+
define		{a}			[0-9a-zA-Z]+
define		{w}			[\w]+
define		{}			[^/]*
define		{*}			.*?
define		{**}		.*

//`^{hashid}$`						$1~hashid:2 Gone=$a Gtwo=$b all=$0+${Gone} _ok! _tls!=0 _method~/g(e)t/i BIN:tolower=$b Pln=${_line}
//									desc=$0 term:tolower=MyMethod term!= Gmethod=show _ok!
//`^{hashid}/{Op=*}/{Mode=**}$`
//									Op!~/^diff$/i &next!
//									$1~hashid:2 Gone=$a Gtwo=$b Gmethod:tolower=${Op} _ok! // test

`^`
		SPATH_INFO!= _uri=${SPATH_INFO} _next!		// if PATH_INFO available - use it
		_rewrite==0 _uri=@${Gpage} Gpage-			// when rewrite mode is off - replace _uri by page _GET variable

`^/*{_uri=*}/*$`	// trim _uri of beginning & trailing slashes
`^index\.(php|html)$`									_uri=

'^'												route=static age=30 static=${_uri}

`^robots\.txt$`										_ok!
`^sitemap\.xml$`									_ok! age=0 

`^(theme/{}/css|theme/_common|admin/style)/{}$`			_ok!	// css
`^image/(wikiedit/)?{}$`								_ok!	// icons
`^theme/default/icon/{}$`								_ok!	// icons
`^js/(lang/)?{}$`									_ok!	// js
`^file/global/{}$`									_ok!	// global uploads
`^setup/(image|css)/{}$`								_ok! unlock=1	// setup inlines
`^xml/{}$`											_ok! age=0	// feeds

'^'												_ok! _install!=0 route=install unlock=1
												session=1 age- static-

`^\.freecap$`										_ok! route=freecap

'^'												engine=1 route=wacko

`^admin\.php$`										_ok! route=admin

`^{}(/.*)?$`
		$1~hashid:2 page=$ax$b method=Hashid _ok!
		// $1~hashid:2 Gpage_id=$a Gversion_id=$b page= method=show redirect=301 _ok!

//`^{i}rev{i}$`
//		page=$1x$2 method=Hashid redirect=301 _ok!

//`^{page=}$`
//		method=show _ok!

`^(|{page=**}/){method}(/.*?)?$`i
		method:tolower=$3 _ok!

// catch-all
`{page=**}`
		method=show _ok!	

4. Database



5. Installer

6. Formatters

7. Actions

8. Handlers

  1. show: fixed broken redirect after editing a page comment with active paging
  2. renamed ms to wordprocessor
  3. diff: added a link to switch directly between diff modes
  4. referrers: added anchor for internal links
  5. _comments: toggle setting that allows users to list comments either with the most recent OR the oldest comment at the top of the list of page comments
  6. upload: added missing file path for local file in preview link
  7. allowed Admin to fix e.g. typos in comments of other users
  8. properties: show keywords with related categories in page properties
  9. remove: updates menu array in session after deleting a related page
  10. show: moved page title (H1) from theme header to show handler
    • to suppress the page title you can set hide_article_header true in your action or theme
  11. added option to turn external referrers off or to show them only to administrators, off by default
  12. added attachments handler
  13. added filemeta handler
  14. added paging to revisions
  15. added templates for handlers, see sub-folder template/

9. Themes

  1. replaced GIF with PNG/SVG icons
    1. optimized SVG files with SVG Cleaner[link23]
  2. HTML5 Migration
  3. removed smooth scrolling JavaScript functions in default.js
    • body {
        scroll-behavior: smooth;
      } 	
  4. default theme
    1. use reverse hierarchy order in page titles
    2. bookmarks as dropdown
    3. added templates, see sub-folder appearance/template/
  5. moved theme icons to default.css[link24]
  6. moved wiki link icons to wacko.css[link24]
  7. added viewport meta tag <meta name="viewport" content="width=device-width, initial-scale=1">

10. WikiEdit

11. Admin panel

  1. now you must be logged as Admin in the first place to access the admin panel
  2. recovery password login (in case of db corruption) -> requires to set RECOVERY_MODE to 1
  3. fixed Admin Panel sets mode_rewrite always on
  4. fixed broken groups management
  5. backup & restore:
    1. fixed broken processing of default values with '' and 'timestamp'
    2. uses now the DEFAULT keyword to restore empty values
    3. fixed broken backup and restore for cluster
  6. added AP module
    1. to convert MyISAM to InnoDB
    2. for Bad Behavior extension
    3. for user approval
    4. to config appearance
    5. to config upload
  7. localized most of the message sets, please help to translate the English placeholders into your language[link25]
  8. loads separate lang files for Admin panel (see admin/lang/ap.<lang>.php)
  9. data sync: added parameter to limit redirects and the number of pages per turn for re-rendering pages

12. Extensions

  1. added Bad Behavior[link26] extension

13. Translations

14. Packages

added

updated

removed



Note that the changelog is usually incomplete, for a complete list of changes that went into R5.5, you can browse the Commit log[link39], the Bug Tracker Log[link40] and ToDo[link41] list.