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.9...master - Diff since last release

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

Please look here for **((/Dev/Release/R6.0/ToDo open issues from R6.0))**.

====PHP====

=====PHP 8.0=====
  1. https://stitcher.io/blog/new-in-php-8
  1. https://php.watch/versions/8.0
  1. https://github.com/php/php-src/blob/php-8.0.0/UPGRADING
  2. https://php.watch/articles/php-regex-readability

=====PHP 8.1=====
  1. https://stitcher.io/blog/new-in-php-81
  1. https://github.com/php/php-src/blob/php-8.1.0/UPGRADING
  2. https://github.com/rectorphp/rector/blob/main/docs/rector_rules_overview.md#php81
  2. https://php.watch/versions/8.1/gd-avif

Deprecated:
  1. ((https://php.watch/versions/8.1/internal-func-non-nullable-null-deprecation Passing null to non-nullable internal function parameters))

====Features====
  * customizable secondary navigation (Menu) out of the box apart from the so called bookmarks
    * most users won't fiddle with the theme to create their own navigation, see theme section

====Core====
  1. fix SQL Strict mode issues opportunistically (see error log)
    * ##'sql_mode_strict' => '1'##
    * %%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)
  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. 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. add option to enforce email validation before a user can login
  1. notify_watcher(): add direct link to diff mode in email body
  1. it sucks to see again and over again all these random session_notice(s), add a option to turn it off for daily work.
  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);
}%%
  1. localize default date formats
  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->language['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
  2. move link and notifications functions in own class
    * ##$this->msg->notify_user()##
    * ##$this->ref->link()##

====Installer====
  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)##


====Handler====
  * 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
  * saved discarded comment due invalidated token to avoid data loss
  * 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
  * add option to send a copy of the personal message also to the sender
  * edit: set custom textarea size (user settings/JS)
  * diff: add page title to diff 
  * print: pass arguments? e.g. ##?phrase=canonical&lang=&p=2##


====Action====
  * ((MultiLineActionsAndFormatters allow multi-line actions -> Regex))
  * registration: add option to enforce certain user name patterns
  * registration: add white and blacklist for allowed email domains
  * blog: improve options, sorting and filtering, add content templates

====Formatter====
  * Typografica seems no longer transform two -- into a long dash (check!)
  * allow multi-line auto-generated footnotes -> !!Conflicts with single-line markup rule for link syntax!!!
    * evaluate possible option along with extended syntax with additional options
    * ##""[[^ Footnote]]""##, ##""[[^#‑ Footnote]]""##
    * %%(sql)UPDATE prefix_page SET body = REPLACE(body, '[[fn ', '[[^ ');%%
  * 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>%%
  * add support for AVIF - ((https://github.com/libgd/libgd/releases/tag/gd-2.3.2 GD lib support pending!)) -> LibGD 2.3.2 -> PHP 8.1
    * getimagesize does not process AVIF yet ((https://github.com/php/php-src/pull/7711 AVIF support in getimagesize()))
  * %%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
  * parse also anchor with dash, e.g. ##tag#one-two##
  * ##~((../ 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##

====Cache====


====Admin Panel====
  * the users and groups module must be rewritten (anyone? ;))
  * support templates


====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
  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

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

====Libs====
  1. https://github.com/pear/Text_Highlighter/pull/5


====Refactoring====


====Themes====
  * CSS: ##[dir=rtl]##


=====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====
  * 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/mathjax/MathJax-src MathJax)) -> ##""%%(math)%%""## MathFormatter

====Documentation===
  * 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?
  * How I reduce the applications footprint?
  1. 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====
=====Polls=====
The polls class and actions have been **removed** from the core. They can be added again to the community folder after evaluation and improvement. Additionally a guide as well as further documentation is needed. See 6.0 branch for source code.

module
  * content_class

class
  * polls

actions
  * polls
  * pollsadd
  * pollsarchive
  * pollspreview

translations
database table

====Testing===
  * file:lotus_flower.avif?direct
  * file:lotus_flower.jxl?direct

=====Debug=====
https://app.codacy.com/gh/WackoWiki/wackowiki/dashboard
  * http://phpmd.org

##declare(strict_types=1);##