ToDo R6.1 ūüďĆ


R 6.1

Roadmap
dev repo [bitbucket.org]
ChangeLog
https://github.com/WackoWiki/w[...]pare/6.1.11...master ‚Äď Diff since last release


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


Please look here for open issues from R6.0.

1. PHP

  • https://www.php-fig.org/psr/psr-12/
    • Code MUST use¬†an¬†indent of¬†4 spaces for¬†each indent level, and¬†MUST NOT¬†use tabs for¬†indenting. SERIOUSLY? ‚Äď tabs are¬†exactly what for?
    • The keyword elseif SHOULD be¬†used instead of¬†else if so¬†that all¬†control keywords look like single words. cognitive load
    • Allman indent style rules

1.1. PHP 8.0

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

1.2. PHP 8.1

  1. https://stitcher.io/blog/new-in-php-81
  2. https://github.com/php/php-src/blob/php-8.1.0/UPGRADING
  3. https://github.com/rectorphp/r[...]es_overview.md#php81
  4. https://php.watch/versions/8.1/gd-avif

Deprecated:

  1. Passing null to non-nullable internal function parameters

2. 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
    • there is¬†already the¬†menu_tag for¬†this purpose, shorter (usually) version of¬†headline for¬†use in¬†menus

3. Core

  1. declared visibility on all properties, constants and methods (good luck with that)
  2. 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;
  3. 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
  4. add option to overwrite upload pre-selection (global/local)
  5. migrating from SAH-1 to SHA-256 for all hashes?
  6. improve 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
  7. made time format depended from localization and user preferences
    • DateTime::format()
    • IntlDateFormatter::format()
  8. The user name regex allows . and - in usernames however the sanitizer removes it 
  9. Why does it store interwiki in session and not as JSON in _cache/config/interwiki.conf?
    • get_inter_wiki_url($name, $tag)
  10. move interwiki.conf and antispam.conf into table & _cache/config/*
  11. add option to enforce email validation before a user can login
  12. notify_watcher(): add direct link to diff mode in email body
  13. COLLATE utf8mb4_bin for¬†tag eats ūĚď¶ūĚď≤ūĚďīūĚď≤ūĚď¶ūĚďłūĚďĽūĚď≠ūĚďľ in¬†LIKE '/%' query, without slash it¬†finds it, whO_Ot
  14. UTF-8 text must be checked for well-formedness
    • static function is_utf8($string)
      {
        return (bool) preg_match('//u', $string);
      }
  15. localize default date formats
  16. improve and foster message sets
  17. set return type declarations : (array | bool | float | int | mixed | string | void | ... )
  18. fix client side JS input validation patterns
    1. new, clone and rename handler, import action
    2. $tpl->pattern = $this->language['TAG'] . '+';
  19. Replace all HTML-Entities except 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.
  20. allow also login with email address instead of user name
  21. individual CSP per page
  22. move link and notifications functions in own class
    • $this->msg->notify_user()
    • $this->ref->link()
  23. 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

4. 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
  2. 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']
  3. validate username
  4. Nginx: installer seems to activate rewrite_mode ?
  5. use dbal also for installer: $db->sql_query($sql)

5. Handler

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

6. Action

  • 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

7. Formatter

  • 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!
  • evaluate syntax for¬†definition lists, e.g. ;term:ex
    • never missed definition lists, see¬†UverseWiki implementation
  • Improve and¬†extend footnote capabilities
  • add¬†option to¬†wrap caption around code blocks
    • <figure>
        <figcaption>Language of code</figcaption>
        <pre>
          <code>
            <!-- your code here -->
          </code>
        </pre>
      </figure>
  • indenting text in¬†quote breaks page
    • <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
    • <div class="indent"><pre class="code">su</pre>
      <p id="p86658-7" class="auto"></div>
  • add¬†support for¬†AVIF ‚Äď GD lib¬†support pending! -> LibGD 2.3.2 -> PHP¬†8.1
  • 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

8. Cache


9. Admin Panel

  • the¬†users and¬†groups module must be¬†rewritten (anyone? ;))
  • support templates

10. Database

11. WikiEdit

  1. Autocomplete seems broken, shows possible pages ‚Äď but¬†selection does not¬†work
  2. use only one popup for new link, having link and link description together
  3. select and remember the color of the highlighter or marker, keep selected color in session
  4. do not set multi-line markup beyond paragraph, list ad other terminators, only valid tag nesting
  5. popup for tables
    1. select rows and columns
    2. set table header
  6. select color for text and highlighting
  7. resize textarea
  8. undo / redo
  9. JavaScript search & replace
  10. ECMAScript 2018

12. Translations

  • move ending colons set¬†in¬†the¬†template itself back into the¬†message sets (non-latin localization)
    • [ ' _t: MessageSet ' ]:

13. Libs

  1. https://github.com/pear/Text_Highlighter/pull/5
  2. https://github.com/PHPThumb/PHPThumb <‚ÄĒ successor

PHPThumb ToDo:

  • imagecreatefromavif, imageavif
  • imagecreatefromwebp, imagewebp

14. Refactoring


15. Themes

  • CSS: [dir=rtl]

15.1. Print

CSS Paged Media Module Level 3

@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;
}

16. Ideas

17. Documentation

  • 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?
  • How¬†I¬†reduce the¬†applications footprint?
  1. add¬†example for¬†rewrite with Nginx ‚Äď HELP needed
    1. Converting Apache Rewrite Rules to NGINX Rewrite Rules
    2. Pitfalls and Common Mistakes
    3. Creating NGINX Rewrite Rules

18. Feedback

18.1. 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

19. Testing

19.1. Debug


declare(strict_types=1);


Show Files (2 files)

Read comments (0 comments)