View source for ToDo R6.1 📌

{{toc from="h3" to="h6" numerate=1}}
 
===R 6.1===
((https://wackowiki.org/bugs/roadmap_page.php?version_id=17 Roadmap))
((https://bitbucket.org/wackowiki/wackowiki/commits/ dev repo [bitbucket.org]))
((ChangeLog))
https://github.com/WackoWiki/wackowiki/compare/6.1.26...master - Diff since last release

Main Focus: Implement new  PHP 8 functionality and improve GUI usability.

====PHP====
  2. https://php.watch/articles/php-regex-readability

=====PHP 8.3=====
  1. https://stitcher.io/blog/new-in-php-83
  1. https://php.watch/versions/8.3
  2. https://github.com/rectorphp/rector/blob/main/docs/rector_rules_overview.md#php83

%%
Creation of dynamic property Wacko::$mathjax is deprecated in /formatter/highlight/math.php on line 15

%%
  * The resultant HTML of highlight_string and highlight_file has changed.
    Whitespace between outer HTML tags is removed. Newlines and spaces
    are no longer converted to HTML entities. The whole HTML is now wrapped in
    ##<pre>## tag. The outer ##<span>## has been merged with ##<code>##.
=====PHP 8.4=====
  1. https://php.watch/versions/8.4
  3. https://github.com/rectorphp/rector/blob/main/docs/rector_rules_overview.md#php84

=====PHP 8.5=====
  1. https://php.watch/versions/8.5
====Features====
  * ((/Dev/NewFeatures/SectionEdit section-edit))
    * in some cases it saves only the edited section
  * improve ((Thumbnails thumbnail support))
  * ((CustomizableSecondaryNavigation customizable secondary navigation)) (Menu) out of the box apart from the so called bookmarks

====Core====
  1. improve notification options for moderators
    *  send only a summary 
  1. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
    * ((CacheControlHeaders Cache Control Headers))
    * bugs:562
  1. replace col attribute in input and textarea element with CSS percent width and max-width for mobile usage
  1. add ((MaxPageSize max page size)) value (2048) for edit handler and a recomended value, show warning text with suggestions if that value is reached
  1. declared visibility on all properties, constants and methods
  1. fix SQL Strict mode issues opportunistically (see error log)
    * ##'sql_mode' => '2'##
    * %%const SQL_MODE_STRICT = 'TRADITIONAL,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY';
const DB_ERROR_MODE = 1;%%
  1. ##unwrap_link()## strip also last slash if user provides ##page="/Cluster/SubPage/"## to match tag ##Cluster/SubPage## in database
    *   ##utf8_rtrim(new_tag, '/')## or better already via regex
  1. add option to overwrite upload pre-selection (global/local)
  2. migrating from SHA-1 to SHA-256 for all hashes?
  1. improve ((Bidirectionality mixed directionality of text)) support
    * set ##dir## in user elements when ##dir## differs from content, e.g content is in Persian and GUI is Greek
    * how to determine the use of the ##<bdi>## tag, e.g. for breadcrumbs or lists
  1. localize default date formats (installer + language defaults)
  1. made time format depended from localization and user preferences
    * ##DateTime::format()##
    * ##IntlDateFormatter::format()##
  1. The user name regex allows ##.## and ##-## __in__ usernames  however the sanitizer removes it 
  1. Why does it store interwiki in session and not as JSON in _cache/config/interwiki.conf?
    * ##get_inter_wiki_url($name, $tag)##
  1. move interwiki.conf and antispam.conf into table & _cache/config/*
  1. COLLATE utf8mb4_bin for tag eats ##𝓦𝓲𝓴𝓲𝓦𝓸𝓻𝓭𝓼## in LIKE '/%' query, without slash it finds it, whO_Ot
  1. UTF-8 text must be checked for well-formedness
    * %%static function is_utf8($string)
{
  return (bool) preg_match('//u', $string);
}%%
  2. improve and foster message sets
  1. set return type declarations : (array | bool | float | int | mixed | string | void |  ...   )
    * http://docs.php.net/manual/en/functions.returning-values.php
  1. fix client side JS input validation patterns
    2.  new, clone and rename handler, import action
    3. ##$tpl->pattern		= $this->lang['TAG'] . '+';##
  1. Replace all HTML-Entities except ((https://www.php.net/manual/de/function.htmlspecialchars.php HTML special chars))
    1. ##nbsp;## -- to indent or add extra spacing to a paragraph, sentence, or another portion, better using CSS instead of multiple non-breaking spaces. 
  2. allow also login with email address instead of user name
  3. individual CSP per page
  2. move link and notifications functions in own class
    * ##$this->msg->notify_user()##
    * ##$this->ref->link()##
  1. partial mixed usage of DB warnings and exceptions (must use either one or the another)
    * MySQLi: ##mysqli_sql_exception## and ##mysqli_connect_errno##
    * PDO: ##errorCode## and ##PDOException##
  1. Implement a quasi mailing lists where users can register and participate, WackoWiki already comes with all functions for realisation
    * similar to personal messages, but on topics that send outgoing messages to all users subscribed to that topic
  1. improve page export and import feature (see export handler)
    * add option (handler) to add meta-data like keywords, description, language, etc.
    * json format
    * files
  1. provide simple migration script for page and files
  2. add warning about too long page ##tag##
    * https + domain + base path + page tag + reserve for handler name and parameters
    * roundabout 2000 max
  1. Improve sending emails (bcc, timing, digest, diff options, mailing lists)

====Installer====
  1. add option to set wiki as public or private
    * sets different default ACLs
  1. add new system page with ##whatsnew## action
  1. commented out auto-creation of empty help, terms and privacy page - needs FEEDBACK
    * make creation optional, the default theme shows the links when set in the config
    * either the user defines them individually in the admin panel or sets an additional option in the installer to create them
  1. set more strict ##write## and ##create## default ACLs for system and user pages
    * user pages: only the user should be able to write and create sub-pages by default in his namespace
    * system pages: no sub-page creation for users
    * requires a option to pass custom ACLs in page creation, e.g. ##$permissions = ['write' => 'Admins', 'create' => 'Admins']##
  1. validate username
  1. Nginx: installer seems to activate ##rewrite_mode## ?
  2. use dbal also for installer: ##$db->sql_query($sql)##
  3. --raise DB version requirement-- (there is a technical minimum requirement as well as a end of support) DONE
    * enforces version for technical requirement
    * show warning for versions with end of support
  1. --((/Dev/Release/R6.1/SQLModesRevisited add config setting for database MySQL / MariaDB))-- DONE
  * show error message if variable ##$fatal_error## is true




====Handler====
  * ##moderate##: the ##has_access()## validation for the lock/unlock feature as well as for the indicator needs a special option for the Admin and the page owner, both have always access, and the handler always assumes only system read & comment defaults, so it won't show the correct indicator and lock/unlock mode
    * a forum or a topic however allows individual read and comment rights 
  * ##export.xml##: add option for cluster and if the handler should show the xml or offer it for direct download, some browsers modify the XML in presentation mode or show it as feed - however the user needs the original source text including the line feeds!
  * ##rename##: add ##utf8_ucwords()## like in ##new## handler, however it must deal with slashes from cluster tags 
  * ((/Dev/Release/R6.0/ToDo/SessionTimedOut/localStorage auto-save function)) on the edit and _comments handler by applying the ##localStorage## function
  * save discarded comment or page due invalidated token to avoid data loss
    * Lately, it is enough (with Firefox) to use the "Back" button of the browser and post the message again.
  * send notice on comment edit and make change visible in actions like it is done for pages, to not miss possible important content changes 
  * increase the default size of the comment textarea in the default theme
  * ##edit##: set custom textarea size (user settings/JS)
  * ##diff##: add page title to diff 
  * ##print##: pass arguments? e.g. ##?phrase=canonical&lang=&p=2##
  * ##upload##: says filesize with ##0## means unlimited in AP, however it is checked as zero, leftover? 
    * fix check or description
  * add feature to move attachments between pages and global, useful for page and content refactoring
  * ##filemeta##: one click to copy file syntax to clipboard


====Action====
  * ##toc##: new created page without revision wont build toc
  * ##users##: personal message - occationally does not insert subject from answer link - DEBUG
    * **filter**  issue caused by browser add-on
  * ##search##: ((ImproveSearch improve search)), highlighting, ideographic languages
  * ((MultiLineActionsAndFormatters allow multi-line actions -> Regex)), implemented
  * ##registration##: add option to enforce certain user name patterns
  * ##blog##: improve options, sorting and filtering, add content templates
  * ##paragraphs##: add option to set permalinks to paragraphs (to page version) for export (PDF) or other external reference
  * ##usersettings##: despite being logged in it occasionally redirects the user back to the login form and the user settings become in this cycle inaccessible - bugs:568
  * ##forums##: check not only for deleted topic but also for deleted comment in last comment query

====Formatter====
  * checks for ##base_url## in URL in string, but should check only at the beginning of the string to decide to add icon for external URL
    * %%(php)
<?php

if (!mb_stristr($tag, $this->db->base_url))
{
	$title	= $this->_t('OuterLink2');
	$icon	= $this->_t('Icon.Outer');
}%%
  * add Accordion, Carousel, Tabs
  * ((/Dev/Release/R6.1/TypograficaRevisited check typografica options))
    * update default settings of options, some options are mostly more annoying than useful, e.g. ##""(c)""##
    * interference with other syntax, e.g. striketrough
    * Unicode context
    * create test cases
  * multi-line strikethrough (marker similar) may break correct tag nesting and parsing, how this should work anyways across **paragraphs**, **lists**, etc. by only wrapping it via ##<del>## tag
    * WikiEdit as well the Formatter must recognize a new paragraph, list as terminators to avoid invalid tag nesting!
  * ((DefinitionListSyntax evaluate syntax for definition list)), e.g. ##;term:ex##
    * there is a working patch, however the current workaround for the random ##<dt>## to ##<dd>## tag transition, prevents wiki text formatting
  * add option to wrap caption around code blocks
    * %%(hl html)<figure>
  <figcaption>Language of code</figcaption>
  <pre>
    <code>
      <!-- your code here -->
    </code>
  </pre>
</figure>%%
  * indenting text in quote breaks page
    * %%(hl html)<p id="p291-1" class="auto">
<br>
<blockquote>Where authority fails in its duties and indeed betrays the purpose for which it has been established, disobedience is not only lawful but obligatory: non-violent disobedience, at least for now, but determined and courageous.</p>
<div class="indent">.</blockquote>
<p id="p291-2" class="auto"></div>%% 
  * auto-paragraph did not terminates correctly in indent div having a code wrapper
    * %%(hl html)<div class="indent"><pre class="code">su</pre>
<p id="p86658-7" class="auto"></div>%%
  * %%str_replace("\xc2\xa0", " ", $string);%% (##nbsp;##)
  * text inside ##""##code formatter##""## is processed as wikitext with possibly undesired results
    * the text must be escaped to be taken as is
  * removes intentional left empty lines inside info formatter
  * ##~((../ Go Back))## goes back two levels, but should go to parent page only
  * interwiki links are not tracked
  * relative links were not parsed in the context of the page they are included, what is the default behavior?
  * re-parsing all pages and links may result in wrong toc references, when the included page gets parsed after the page which includes them
    * HOTFIX: save all included pages with wrong toc reference again, this will update ##body_toc##
  * add support for ##geo:## and ##tel:## links
    * ((https://www.rfc-editor.org/rfc/rfc3966.html RFC 3966)) - URI for Telephone Numbers
  * table in list prevents closing of list, ignoring the following empty line
    * %%
  * first list
      * #||
  || « Previous | Content |  Next » ||
|| ← Back to overview | | « Back ""|"" Next » ||
||#

some text

  * next list
%%  

====Cache====


====Admin Panel====
  * --##appearances##: maybe it is better to remove the ##max="500"## restriction for the Logo in the form and let the admin decide if it should be larger than suggested-- DONE
  * the users and groups module must be rewritten (anyone? ;))
  * support templates
  * check for admin password length only for members of admin group and not for other accounts
  * allow Admins to reset / overwrite passwords (?)
    * feature: pros / cons


====Database====
  * Listing JOINS with no index: ##log_queries_not_using_indexes##
    * https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_log_queries_not_using_indexes

====WikiEdit====
  1. Autocomplete seems broken, shows possible pages - but selection does not work
  1. use only one popup for new link, having link and link description together
  2. select and remember the color of the highlighter or marker, keep selected color in session
  3. do not set multi-line markup beyond paragraph, list ad other terminators, only valid tag nesting
  2. popup for tables
    1. select rows and columns
    1. set table header
  1. select color for text and highlighting
  2. resize textarea
  2. undo / redo
  3. JavaScript search & replace
  4. ECMAScript 2018
  5. some key shortcuts does not work any longer
    * test and map what works & where
    * suggest new shortcuts in case of conflict (Firefox, Chrome, ...)

====Translations====
  * move ending colons set in the template itself back into the message sets (((/Dev/Translations/zh non-latin localization)))
    * ##[ ' _t: MessageSet ' ]:##
  * ((/Dev/Translations/ta Tamil)): work in progress - help welcome

====Libs====
  * SimplePie


====Refactoring====

====Offline usage improvements====
Intranet usage, offline, etc.

  1. manual, help
    * installer(option to add help/)
    * provide help cluster as XML for import (de, fr, en, es, ru, zh)
    * add all essential instruction to a doc/ folder
  1. XML export / import
    * improve options (chose cluster, direct download)
    * make import / export more accessible

====Themes====
  * CSS: ##[dir=rtl]##
  * https://css-tricks.com/solved-with-css-dropdown-menus/
  * https://css-tricks.com/come-to-the-light-dark-side/
  * add dark mode option: sets session value -> true: loads *_dark.css files in theme header
    * %% @media (prefers-color-scheme: dark) { ... } %%
  * %%(hl css) #page-edit form textarea {
  height: 400px;
  min-height: 5em;
}%%
    * change to ##height: auto;## -> ##rows="40" cols="60"## ?
  * make WikiEdit toolbar ##sticky## for mobile form factor so it is always visible
  * unify CSS style for diff, patch formatter
  * add very simple theme for the use of the wiki as a website as frontend for guests
  * add hovering back to top icon for mobile devices


=====Print=====
((https://www.w3.org/TR/css-page-3/ CSS Paged Media Module Level 3))
%%(hl css)
@page {
    size: A4 portrait;
    margin: 15mm;
    font-family: Arial, Helvetica, sans-serif;
    marks: crop cross;

    @bottom-center {
        content: "Seite " counter(page) " von " counter(pages);
        font-size: 10pt;
    }
}

.chapter h1 {
    page-break-before: always;
    string-set: chapter-title content()
}

h2, h3 {
    page-break-after: avoid;
}

p {
    orphans: 3;
    widows: 3;
}
%% 
====Ideas====
  * https://wiki.c2.com/?DelayedIndexing
    * ##db->delayed_indexing_time = 0;##
  * add ((https://developer.mozilla.org/en-US/docs/Web/Manifest Web app manifest))
    * https://web.dev/add-manifest/
  * add action with conditional redirect by browser language to pre-selected pages, e.g. ##['fr']## --> ##"/Doc/Français"##
  * moderation/remove/rename of sub pages without modifying the parent cluster
  * ((https://jsonfeed.org/version/1.1 JSON Feed))
  * Captcha dictionary in Russian as drop in
  * ((https://fossil-scm.org/home/doc/trunk/www/antibot.wiki Defense Against Spiders))
  * https://github.com/jgraph/drawio / https://www.diagrams.net/
    * https://desk.draw.io/support/solutions/articles/16000042544-embed-mode
    * ##~https://embed.diagrams.net/?embed=1&proto=json&spin=1&svg-warning=0##
  * ((https://github.com/hakimel/reveal.js reveal.js)) implementation for WackoWiki
  * https://github.com/DirectoryTree/LdapRecord
  * phpMyEdit
    * https://github.com/Rajah01/phpMyEdit.class.php-PHPv8
    * http://opensource.platon.org/cvs/cvs.php/phpMyEdit/phpMyEdit.class.php

====Documentation====
  * temporary write permissions for ##image/## folder -> AP Appearance settings: logo and favicon upload
    * ##chmod 0755 image/##
  * Screenshots
    * store example text for Wabi-Sabi and diff handler in sub-pages for each language
    * add missing diff handler screenshots for languages other than English 
  * write a new technical guide and MD-file for the WackoWiki Formatter, see ((/Dev/Projects/WackoFormatter/Usage))
    * new examples, what is what, workflow, etc.
  * add README.md file to action, handler and formatter folder with a short introduction and HowTo
  * differentiate update instructions between minor and major upgrade
  * add a page for Terms in WackoWiki
    * cluster, free link, wikilink, etc.
  * **add CSP help page**
  * order config page according the sections in the Admin panel via sub-headings
  * write your own action
  * write your own formatter
  * write your own theme
  * When a upgrade should be done?
  * add guide to write your own forms, e.g. contact, membership application or registration for event
    * action sending form data to table or email
    * with template and localization
  * How I reduce the applications footprint?
  * add example for rewrite with Nginx - HELP needed
    1. ((https://www.nginx.com/blog/converting-apache-to-nginx-rewrite-rules/ Converting Apache Rewrite Rules to NGINX Rewrite Rules))
    2. ((https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ Pitfalls and Common Mistakes))
    3. ((https://www.nginx.com/blog/creating-nginx-rewrite-rules/ Creating NGINX Rewrite Rules))

====Feedback====
  * ((WikkaWikiMigration migration routine for WikkaWiki users))

Any major release like this is bound to have some issues, and we will continue to fix them as they arise.
====Testing====
  * file:lotus_flower.avif?direct
  * file:lotus_flower.jxl?direct

=====Debug=====

##declare(strict_types=1);##