This is an old revision of the document!
Table of Contents
Refactoring 2020
For the release of 2020 big parts of DokuWiki are refactored.
WORK IN PROGRESS PLEASE SHARE ALL REMARKS AND QUESTIONS. Thank you very much! klap-in |
---|
How to find deprecated code
A lot of code has been marked as deprecated. Which means it will be removed in future releases of DokuWiki. While this does (normally) not cause plugins to malfunction now, it may lead to nasty surprises after future updates.
Plugin/template authors can easily check if they use any deprecated functions, classes or methods:
- enable the allowdebug setting in the Configuration Manager
- use the plugin
- check
data/cache/debug.log
for any information about deprecated calls caused by the plugin.
Deprecated and changed code
Below, you find lists with renamed, changed and moved parts of DokuWiki. Some examples are provided for easier update of plugins and templates. References to codesearch.dokuwiki.org can help locate it usage.
JSON class is deprecated
Code changes: d443762baf and 2686
Search usage: "inc\/JSON.php", "json->encode" and "json->decode"
// Remove always the require, since years already autoloaded // and file is now removed as well - require_once DOKU_INC . 'inc/JSON.php'; - $json = new JSON; - $str = $json->encode($data); - $data = $json->decode($str); + $str = json_encode($data); + $data = json_decode($str); - $json = new JSON(JSON_LOOSE_TYPE); - $str = $json->encode($data); - $data = $json->decode($str); + $str = json_encode($data, true); + $data = json_decode($str, true);
Handlers callwriters, modes and lexer are renamed
e.g. Doku_Handler_List
is replaced by dokuwiki\Parsing\Handler\Lists
. Needed code update:
//import at begin of the file: + use dokuwiki\Parsing\Handler\Lists; //at place of usage: - class Doku_Handler_Creole_List extends Doku_Handler_List { + class Doku_Handler_Creole_List extends Lists {
Tip: when using a IDE, like Intellij idea, it will suggest a lot of the imports if you use the class names.
The following classes are renamed:
Old | New |
---|---|
Doku_Handler_CallWriter_Interface Doku_Handler_CallWriter | dokuwiki\Parsing\Handler\CallWriterInterface dokuwiki\Parsing\Handler\CallWriter |
new new Doku_Handler_Block Doku_Handler_List Doku_Handler_Nest Doku_Handler_Preformatted Doku_Handler_Quote Doku_Handler_Table | dokuwiki\Parsing\Handler\ReWriterInterface dokuwiki\Parsing\Handler\AbstractRewriter dokuwiki\Parsing\Handler\Block dokuwiki\Parsing\Handler\Lists dokuwiki\Parsing\Handler\Nest dokuwiki\Parsing\Handler\Preformatted dokuwiki\Parsing\Handler\Quote dokuwiki\Parsing\Handler\Table |
Doku_Parser | dokuwiki\Parsing\Parser |
Doku_Lexer Doku_LexerParallelRegex Doku_LexerStateStack | dokuwiki\Parsing\Lexer\Lexer dokuwiki\Parsing\Lexer\ParallelRegex dokuwiki\Parsing\Lexer\StateStack |
Doku_Parser_Mode_Interface Doku_Parser_Mode Doku_Parser_Mode_acronym Doku_Parser_Mode_base Doku_Parser_Mode_camelcaselink Doku_Parser_Mode_code Doku_Parser_Mode_emaillink Doku_Parser_Mode_entity Doku_Parser_Mode_eol Doku_Parser_Mode_externallink Doku_Parser_Mode_file Doku_Parser_Mode_filelink Doku_Parser_Mode_footnote Doku_Parser_Mode_formatting Doku_Parser_Mode_header Doku_Parser_Mode_hr Doku_Parser_Mode_html Doku_Parser_Mode_internallink Doku_Parser_Mode_linebreak Doku_Parser_Mode_listblock Doku_Parser_Mode_media Doku_Parser_Mode_multiplyentity Doku_Parser_Mode_nocache Doku_Parser_Mode_notoc Doku_Parser_Mode_php Doku_Parser_Mode_Plugin Doku_Parser_Mode_preformatted Doku_Parser_Mode_quote Doku_Parser_Mode_quotes Doku_Parser_Mode_rss Doku_Parser_Mode_smiley Doku_Parser_Mode_table Doku_Parser_Mode_unformatted Doku_Parser_Mode_windowssharelink Doku_Parser_Mode_wordblock | dokuwiki\Parsing\ParserMode\ModeInterface dokuwiki\Parsing\ParserMode\AbstractMode dokuwiki\Parsing\ParserMode\Acronym dokuwiki\Parsing\ParserMode\Base dokuwiki\Parsing\ParserMode\Camelcaselink dokuwiki\Parsing\ParserMode\Code dokuwiki\Parsing\ParserMode\Emaillink dokuwiki\Parsing\ParserMode\Entity dokuwiki\Parsing\ParserMode\Eol dokuwiki\Parsing\ParserMode\Externallink dokuwiki\Parsing\ParserMode\File dokuwiki\Parsing\ParserMode\Filelink dokuwiki\Parsing\ParserMode\Footnote dokuwiki\Parsing\ParserMode\Formatting dokuwiki\Parsing\ParserMode\Header dokuwiki\Parsing\ParserMode\Hr dokuwiki\Parsing\ParserMode\Html dokuwiki\Parsing\ParserMode\Internallink dokuwiki\Parsing\ParserMode\Linebreak dokuwiki\Parsing\ParserMode\Listblock dokuwiki\Parsing\ParserMode\Media dokuwiki\Parsing\ParserMode\Multiplyentity dokuwiki\Parsing\ParserMode\Nocache dokuwiki\Parsing\ParserMode\Notoc dokuwiki\Parsing\ParserMode\Php dokuwiki\Parsing\ParserMode\Plugin dokuwiki\Parsing\ParserMode\Preformatted dokuwiki\Parsing\ParserMode\Quote dokuwiki\Parsing\ParserMode\Quotes dokuwiki\Parsing\ParserMode\Rss dokuwiki\Parsing\ParserMode\Smiley dokuwiki\Parsing\ParserMode\Table dokuwiki\Parsing\ParserMode\Unformatted dokuwiki\Parsing\ParserMode\Windowssharelink dokuwiki\Parsing\ParserMode\Wordblock |
Changes of the internals of the handler
Variables are not available anymore:
$handler->status[]
$handler->CallWriter
Functions renamed:
$handler->_addCall()
$handler->_finalize()
Search usage: status, CallWriter and _addCall, _finalize
Replacements:
- $status = $handler->status['section'] + $status = $handler->getStatus('section') - $handler->status['section'] = true + $handler->setStatus('section', true)
case DOKU_LEXER_ENTER: - $ReWriter = new Doku_Handler_Creole_List($handler->CallWriter); - $handler->CallWriter = & $ReWriter; + $ReWriter = new Doku_Handler_Creole_List($handler->getCallWriter()); + $handler->setCallWriter($ReWriter); case DOKU_LEXER_EXIT: - $handler->CallWriter->process(); - $ReWriter = & $handler->CallWriter; - $handler->CallWriter = & $ReWriter->CallWriter; + $ReWriter = $handler->getCallWriter(); + $handler->setCallWriter($ReWriter->process());
- $handler->_addCall('list_close', array(), $pos); + $handler->addCall('list_close', array(), $pos);
Note: some general addCall()
can be replaced by the specific functions like header()
, eof()
, hr()
, strong()
, emphasis()
, underline()
, etc etc. Could be worth a check, however there should be typical a reason that these specific functions were not used.
Changes of the internals of the parser
Renamed variables: Handler
and Lexer
to handler
and lexer
. (maybe no difference in practice due to case-insensitivity)
Changed visibility, these variables are now protected: handler
, lexer
, modes
, connected
. The handler
can be set via the constructor. There are no setters or getters for the others.
- $parser = new Doku_Parser(); - $parser->Handler = $handler; + $parser = new Parser($handler);
Changes of the internals of the Lexer
Variables and functions are not available anymore:
$lexer->_mode
- function
Doku_Lexer_Escape($str)
Search usage: _mode, Doku_Lexer_Escape and _dispatchTokens
- $lexer->_mode->getCurrent(); + $lexer->getModeStack()->getCurrent();
- $str = Doku_Lexer_Escape($str); + $str = \dokuwiki\Parsing\Lexer\Lexer::escape($str);
Other renamed protected functions of Lexer: _dispatchTokens()
, _isModeEnd()
, _isSpecialMode()
, _decodeSpecial()
, _invokeParser()
and _reduce()
.
Renamed protected functions of ParallelRegex: _getCompoundedRegex()
, _getPerlMatchingFlags()
.
UTF-8 functions
All UTF-8 functions are moved and renamed. Refactored mostly in 2780.
Old | New |
---|---|
inline code | \dokuwiki\Utf8\Asian::isAsianWords() \dokuwiki\Utf8\Asian::separateAsianWords() \dokuwiki\Utf8\Asian::splitAsianWords() |
IDX_ASIAN | \dokuwiki\Utf8\Asian::REGEXP |
utf8_isASCII utf8_check utf8_strip utf8_stripspecials utf8_bad_replace utf8_deaccent utf8_romanize utf8_correctIdx | \dokuwiki\Utf8\Clean::isASCII() \dokuwiki\Utf8\Clean::isUtf8() \dokuwiki\Utf8\Clean::strip() \dokuwiki\Utf8\Clean::stripspecials() \dokuwiki\Utf8\Clean::replaceBadBytes() \dokuwiki\Utf8\Clean::deaccent() \dokuwiki\Utf8\Clean::romanize() \dokuwiki\Utf8\Clean::correctIdx() |
utf8_tohtml utf8_unhtml utf8_to_utf16be utf16be_to_utf8 | \dokuwiki\Utf8\Conversion::toHtml() \dokuwiki\Utf8\Conversion::fromHtml() \dokuwiki\Utf8\Conversion::toUtf16be() \dokuwiki\Utf8\Conversion::fromUtf16be() |
utf8_basename utf8_strlen utf8_substr utf8_substr_replace utf8_ltrim utf8_rtrim utf8_trim utf8_strtolower utf8_strtoupper utf8_ucfirst utf8_ucwords utf8_strpos | \dokuwiki\Utf8\PhpString::basename() \dokuwiki\Utf8\PhpString::strlen() \dokuwiki\Utf8\PhpString::substr() \dokuwiki\Utf8\PhpString::substr_replace() \dokuwiki\Utf8\PhpString::ltrim() \dokuwiki\Utf8\PhpString::rtrim() \dokuwiki\Utf8\PhpString::trim() \dokuwiki\Utf8\PhpString::strtolower() \dokuwiki\Utf8\PhpString::strtoupper() \dokuwiki\Utf8\PhpString::ucfirst() \dokuwiki\Utf8\PhpString::ucwords() \dokuwiki\Utf8\PhpString::strpos() |
utf8_to_unicode unicode_to_utf8 | \dokuwiki\Utf8\Unicode::fromUtf8() \dokuwiki\Utf8\Unicode::toUtf8() |
globals UTF8_UPPER_TO_LOWER UTF8_LOWER_TO_UPPER UTF8_LOWER_ACCENTS UTF8_UPPER_ACCENTS UTF8_ROMANIZATION UTF8_SPECIAL_CHARS UTF8_SPECIAL_CHARS2 | \dokuwiki\Utf8\Table::upperCaseToLowerCase() \dokuwiki\Utf8\Table::lowerCaseToUpperCase() \dokuwiki\Utf8\Table::lowerAccents() \dokuwiki\Utf8\Table::upperAccents() \dokuwiki\Utf8\Table::romanization() \dokuwiki\Utf8\Table::specialChars() TO CHECK: combined? or deprecated/removed?? |
Class for handling UTF-8 in filenames. Renamed functions:
SafeFN::validate_printable_utf8 SafeFN::validate_safe | SafeFN::validatePrintableUtf8() SafeFN::validateSafe() |
Cache
cache cache_parser cache_renderer cache_instructions | dokuwiki\Cache\Cache dokuwiki\Cache\CacheParser dokuwiki\Cache\CacheRenderer dokuwiki\Cache\CacheInstructions |
Changed visibility, these variables are now protected and have new setters/getters:
? CHECK: NO SETTER FOR nocache, while used in plugins
- $time = $cache->_time + $time = $cache->getTime()) - $cache = new cache_renderer($ID, $file, 'xhtml'); - $useCache = $cache->_nocache + $cache = new CacheRenderer($ID, $file, 'xhtml'); + $useCache = $cache->isNoCache() - $cache->_event = $event + $cache->setEvent($event) - $event = $cache->_event + $event = $cache->getEvent()
Changelog
Renamed and moved classes:
Changelog MediaChangelog PageChangelog | dokuwiki\ChangeLog\Changelog dokuwiki\ChangeLog\MediaChangeLog dokuwiki\ChangeLog\PageChangeLog |
Sitemap
Renamed and moved classes:
SitemapItem Sitemapper | dokuwiki\Sitemap\Item dokuwiki\Sitemap\Mapper |
Subscription
Renamed and refactored in separated classes:
Old | New |
---|---|
Subscription with functions: - isenabled() - add() - remove() - subcribers() - user_subscription() - notifyaddresses() - send_bulk() - send_media_diff() - send_diff() - send_register() | dokuwiki\Subscriptions\SubscriberManager - isenabled() - add() - remove() - subscribers() - userSubscription() - notifyAddresses() dokuwiki\Subscriptions\SubscriptionSender dokuwiki\Subscriptions\BulkSubscriptionSender - sendBulk() dokuwiki\Subscriptions\MediaSubscriptionSender - sendMediaDiff() dokuwiki\Subscriptions\PageSubscriptionSender - sendPageDiff() dokuwiki\Subscriptions\RegistrationSubscriptionSender - sendRegister() dokuwiki\Subscriptions\SubscriberRegexBuilder - buildRegex() |
Examples:
- $subscription = new Subscription(); - $success = $subscription->send_register($login, $fullname, $email); + $subscription = new RegistrationSubscriptionSender(); + $success = $subscription->sendRegister($login, $fullname, $email); - $sub = new Subscription(); - $info['subscribed'] = $sub->user_subscription(); + $subManager = new SubscriberManager(); + $info['subscribed'] = $subManager->userSubscription(); - $subscription = new Subscription(); - $success = $subscription->send_diff($to, $tpl, $id, $rev, $summary); + $subscription = new PageSubscriptionSender(); + $success = $subscription->sendPageDiff($to, $tpl, $id, $rev, $summary); - $subscription = new Subscription(); - $success = $subscription->send_media_diff($subscriber_mail, $template, $id, $rev); + $subscriptionSender = new MediaSubscriptionSender(); + $success = $subscriptionSender->sendMediaDiff($subscriber_mail, $template, $id, $rev); - $subscription = new Subscription(); - $success = $subscription->isenabled(); - $success = $subscription->subscribers($page, $user, $style, $data); - $success = $subscription->add($id, $user, $style, $data) - $success = $subscription->remove($id, $user, $style, $data) - $success = $subscription->user_subscription($id, $user) - $subscription->notifyaddresses($data) + $manager = new SubscriberManager(); + $success = $manager->isenabled(); + $success = $manager->subscribers($page, $user, $style, $data); + $success = $manager->add($id, $user, $style, $data); + $success = $manager->remove($id, $user, $style, $data); + $success = $manager->userSubscription($id, $user); + $manager->notifyAddresses($data); - $subscription = new Subscription(); - $success = $subscription->send_bulk($page); + $subscriptionSender = new BulkSubscriptionSender(); + $success = $subscriptionSender->sendBulk($page);
Remote API and Server
Renamed and moved classes:
Old | New |
---|---|
RemoteAPI RemoteAPICore RemoteAccessDeniedException | dokuwiki\Remote\Api dokuwiki\Remote\ApiCore dokuwiki\Remote\AccessDeniedException |
variable: DOKU_API_VERSION | ApiCore::API_VERSION |
XmlRpcServer RemoteException | dokuwiki\Remote\XmlRpcServer dokuwiki\Remote\RemoteException |
HTTP Client
HTTPClient DokuHTTPClient HTTPClientException | dokuwiki\HTTP\HTTPClient dokuwiki\HTTP\DokuHTTPClient dokuwiki\HTTP\HTTPClientException |
Visibility changed to protected variables: connections, boundary
Visibility changed to protected and renamed functions:
_ssltunnel, _sendData, _readData, _readLine, _debug _debug_html, _debug_text, _time, _parseHeaders, _buildHeaders, _getCookies, _postEncode, _postMultipartEncode, _uniqueConnectionId. All the underscored are removed from the function names, and two names changed more: debugHtml
, debugText
.
Input
Renamed and moved classes:
Old | New |
---|---|
Input GetInput PostInput ServerInput | dokuwiki\Input\Input dokuwiki\Input\Get dokuwiki\Input\Post dokuwiki\Input\Server |
Other
Renamed and moved classes:
FeedParser_File | dokuwiki\FeedParserFile |
PassHash | dokuwiki\Passhash |
Settings
Deprecated 2016
signatures in action.php
- function alwaysHide(Doku_Event &$event, $params) { + function alwaysHide(Doku_Event $event, $params) {
and syntax.php
General cleanup suggestions
Lot of plugins uses the following older code. Today these are already included via the core or not needed anymore.
The following code is only needed if a file has main code that is executed. Otherwise it can be left out.
- if(!defined('DOKU_INC')) die('meh.');
Code beautification. The defines are already in core, so can be deleted. Further these code beautifications are not needed anymore with current tools.
- // Some whitespace to help View > Source - if(!defined('DOKU_LF')) define ('DOKU_LF', "\n"); - // Some whitespace to help View > Source - if(!defined('DOKU_TAB')) define ('DOKU_TAB', "\t"); - if(!defined('NL')) define('NL',"\n");
This directory is set in the core, not needed per plugin.
- if(!defined('DOKU_PLUGIN')) { - define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); - }
Scripts includes such as require
and require_one
are not needed for all the DokuWiki files or the typical plugin files. DokuWiki has an autoloader. More and more parts of the core use namespaces. Please use them, see autoloader how these are related to your files.
- require_once(DOKU_PLUGIN.'syntax.php'); - require_once(DOKU_PLUGIN.'action.php'); - require_once(DOKU_PLUGIN.'admin.php'); - etc - require_once DOKU_INC . 'inc/parser/lexer.php'; - require_once DOKU_INC . 'inc/parser/handler.php';