ToDo R6.0


R 6.0

Roadmap
dev repo [bitbucket.org]
ChangeLog


Main Focus: UTF-8 support and migration and PHP 8.0 compatibility


R6.0 is more or less R5.5 with Unicode support. Please look here for open issues from R5.5 .

1. PHP


PHP 8 only functionality

New PHP 8 only functionality will be not added until 2023 to ensure support for all instances running still on PHP 7.2 – 7.4.


Currently Supported PHP Versions

1.1. PHP 7.4

  1. https://www.php.net/manual/en/migration74.php
  2. "Trying to access array offset on value of type ..." warning for accessing null/bool/int/float/resource as if it were an array -> bugs:553

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

2. Features

3. Core

  1. add utf8_word_count function
  2. Why does it store interwiki in session and not as JSON in _cache/config/interwiki.conf?
    • get_inter_wiki_url($name, $tag)
  3. move interwiki.conf and antispam.conf into table & _cache/config/*
  4. add option to enforce email validation before a user can login
  5. notify_watcher(): add direct link to diff mode in email body
  6. add option for Permissions-Policy HTTP response header DONE
  7. it sucks to see again and over again all these random session_notice(s), add a option to turn it off for daily work.
  8. COLLATE utf8mb4_bin for tag eats 𝓦𝓲𝓴𝓲𝓦𝓸𝓻𝓭𝓼 in LIKE '/%' query, without slash it finds it, whO_Ot
  9. Tag Pattern Issues
    1. it is possible to create a page tag with a underscore, but then the page won't be found via run() function because _ is cast away – DONE
    2. Only alphanumeric signs at the start and end of the tag and each subtag should be allowed, furthermore the use of more then one dot (.) or hyphen (-) in consecutive order should be not allowed, to avoid conflict with wiki formatter syntax.
  10. UTF-8 text must be checked for well-formedness
    • static function is_utf8($string)
      {
        return (bool) preg_match('//u', $string);
      }
  11. localize default date formats
  12. improve and foster message sets
  13. set return type declarations : (array | bool | float | int | mixed | string | void | ... )
  14. fix client side JS input validation patterns, see below under testing
    1. login and registration action DONE
    2. new, clone and rename handler
  15. 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.
  16. add option to disable hit counter
    • user already uses web analytics software or there is no use case for a hit counter
    • This reduces database load, updating the page and file hits field with every page hit is a main source for slow queries.
  17. allow also login with email address instead of user name
  18. move link and notifications functions in own class
    • $this->msg->notify_user()
    • $this->ref->link()

4. Installer

  1. validate username
  2. Nginx: installer seems to activate rewrite_mode ?
  3. const CACHE_SESSION_DIR = '/tmp'; is defined in constant.php, and currently not set via the installer
    1. use ini_get('session.save_path') as indicator, BUT we do not use the PHP build in session! -> write value, its a nuisance that the user currently has to do this on his own
    2. bugs:558
  4. offer to create the recovery_password within the install process
  5. use dbal also for installer: $db->sql_query($sql)

5. Handler

  • auto-save function on the edit and _comments handler by applying the localStorage function
  • saved discarded comment due invalidated token to avoid data loss
  • add ability to remove / hide certain revisions via GUI
  • 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
  • properties: add page tag below page title: Tag: Cluster/Page – looks ugly
  • wordbreak, how to break lines of Chinese, Japanese, or Korean
    • line-break: strict;
      white-space: nowrap;
      word-break: keep-all; 

6. Action

  • registration: add option to enforce certain user name patterns
  • registration: add white and blacklist for allowed email domains
  • poll: improve actions and add templates

7. Formatter

  • 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
  • file:lotus_flower.avif?direct
  • add lazy loading for <img> tags in wackoformatter and for thumbnails in gallery action – DONE
  • str_replace("\xc2\xa0", " ", $string);
  • 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
  • <ignore> tags must be removed for diff-mode 0
    • check output other than show handler, the replace should be done in one place
  • 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

  • set new default cache_ttl values in config default and description in documentation
    • seconds duration
      600 10 minutes
      1200 20 minutes
      3600 1 hour
      7200 2 hours
      18000 5 hours
      86400 24 hours
      2678400 31 days

Evaluate page cache

SELECT cache_lang, method, count(cache_id) AS n 
FROM `prefix_cache` 
GROUP BY cache_lang, method 
ORDER BY `cache_lang`, n DESC, method;

9. Admin Panel

  • support templates
  • resync links excludes pages from owner System, we may remove this restriction
  • restore: process may fail while restoring page with certain Unicode
    • needs further investigation, backup seems to works while restoring may fail
    • creates empty REPLACE queries for page table until it causes a script termination due timeout

10. Database

11. WikiEdit

  1. Autocomplete seems broken, shows possible page – but selection does not work
  2. add Unicode support
  3. use only one popup for new link, having link and link description together
  4. select and remember the color of the highlighter or marker
  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

12. Libs

  1. https://github.com/pear/Text_Highlighter/pull/5
  2. php-diff successor
    1. https://github.com/jfcherng/php-diff
    2. https://github.com/JBlond/php-diff <— SWITCHED TO 
    3. https://github.com/sebastianbergmann/diff

13. Refactoring


14. Themes

  • CSS: [dir=rtl]
  • defer scripts defer></script>
  • default theme
    • background body: #ebeef2

15. Ideas

  • 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
  • add extension for https://github.com/mermaid-js/mermaid
  • JSON Feed
  • Captcha dictionary in Russian as drop in

16. Documentation

17. Feedback


18. Testing

  1. https://github.com/rectorphp/r[...]rview.md#codequality
Content Security Policy: Die Einstellungen der Seite haben das Laden einer Ressource auf eval blockiert ("script-src"). 5 autocomplete.js:280:2

18.1. Test cases

-> Test cases

18.2. Debug

https://app.codacy.com/gh/WackoWiki/wackowiki/dashboard


declare(strict_types=1);


Show Files (1 file)