aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--_test/rector.php14
-rw-r--r--inc/ActionRouter.php18
-rw-r--r--inc/Ajax.php83
-rw-r--r--inc/Draft.php3
-rw-r--r--inc/ErrorHandler.php2
-rw-r--r--inc/FeedParser.php3
-rw-r--r--inc/FeedParserFile.php14
-rw-r--r--inc/Logger.php8
-rw-r--r--inc/Mailer.class.php90
-rw-r--r--inc/Manifest.php10
-rw-r--r--inc/PassHash.php37
-rw-r--r--inc/SafeFN.class.php12
-rw-r--r--inc/Search/Indexer.php133
-rw-r--r--inc/Sitemap/Mapper.php36
-rw-r--r--inc/StyleUtils.php12
-rw-r--r--inc/TaskRunner.php18
-rw-r--r--inc/actions.php8
-rw-r--r--inc/auth.php91
-rw-r--r--inc/cache.php11
-rw-r--r--inc/changelog.php30
-rw-r--r--inc/common.php262
-rw-r--r--inc/config_cascade.php157
-rw-r--r--inc/confutils.php47
-rw-r--r--inc/farm.php162
-rw-r--r--inc/fetch.functions.php30
-rw-r--r--inc/fulltext.php134
-rw-r--r--inc/html.php80
-rw-r--r--inc/httputils.php157
-rw-r--r--inc/indexer.php32
-rw-r--r--inc/infoutils.php59
-rw-r--r--inc/init.php62
-rw-r--r--inc/io.php101
-rw-r--r--inc/load.php15
-rw-r--r--inc/mail.php4
-rw-r--r--inc/media.php229
-rw-r--r--inc/pageutils.php44
-rw-r--r--inc/parserutils.php55
-rw-r--r--inc/search.php49
-rw-r--r--inc/template.php264
-rw-r--r--inc/toolbar.php169
40 files changed, 1365 insertions, 1380 deletions
diff --git a/_test/rector.php b/_test/rector.php
index 225dc2c4f..414fb5307 100644
--- a/_test/rector.php
+++ b/_test/rector.php
@@ -22,9 +22,13 @@ use Rector\CodingStyle\Rector\Stmt\NewlineAfterStatementRector;
use Rector\CodingStyle\Rector\String_\SymplifyQuoteEscapeRector;
use Rector\Config\RectorConfig;
use Rector\DeadCode\Rector\ClassMethod\RemoveUselessParamTagRector;
+use Rector\DeadCode\Rector\For_\RemoveDeadContinueRector;
+use Rector\DeadCode\Rector\For_\RemoveDeadIfForeachForRector;
+use Rector\DeadCode\Rector\If_\RemoveAlwaysTrueIfConditionRector;
use Rector\DeadCode\Rector\If_\RemoveUnusedNonEmptyArrayBeforeForeachRector;
use Rector\DeadCode\Rector\Property\RemoveUselessVarTagRector;
use Rector\DeadCode\Rector\StaticCall\RemoveParentCallWithoutParentRector;
+use Rector\DeadCode\Rector\Stmt\RemoveUnreachableStatementRector;
use Rector\Php71\Rector\ClassConst\PublicConstantVisibilityRector;
use Rector\Php71\Rector\FuncCall\CountOnNullRector;
use Rector\Php71\Rector\FuncCall\RemoveExtraParametersRector;
@@ -34,18 +38,13 @@ use Rector\Strict\Rector\Empty_\DisallowedEmptyRuleFixerRector;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector;
return static function (RectorConfig $rectorConfig): void {
- define('DOKU_INC', __DIR__ . '/../');
- define('DOKU_BASE','/');
- define('DOKU_URL','http://localhost/');
- define('DOKU_COOKIE','DWCOOKIE');
-
$rectorConfig->paths([
__DIR__ . '/../inc',
__DIR__ . '/../lib',
]);
$rectorConfig->bootstrapFiles([
- __DIR__ . '/../inc/load.php',
+ __DIR__ . '/../inc/init.php',
]);
$rectorConfig->importNames();
@@ -71,6 +70,8 @@ return static function (RectorConfig $rectorConfig): void {
__DIR__ . '/../lib/plugins/*/vendor/*',
__DIR__ . '/../lib/tpl/*/vendor/*',
__DIR__ . '/../lib/plugins/*/skel/*', // dev plugin
+ __DIR__ . '/../inc/deprecated.php',
+ __DIR__ . '/../inc/form.php',
// third party libs, not yet moved to composer
__DIR__ . '/../inc/DifferenceEngine.php',
@@ -104,5 +105,6 @@ return static function (RectorConfig $rectorConfig): void {
JoinStringConcatRector::class, // this does not count variables, so it creates overlong lines
RemoveExtraParametersRector::class, // this actually broke code
RemoveUnusedNonEmptyArrayBeforeForeachRector::class, // seems unreliable when checking on array keys
+ RemoveAlwaysTrueIfConditionRector::class, // fails with if(defined(...)) constructs
]);
};
diff --git a/inc/ActionRouter.php b/inc/ActionRouter.php
index 300a56cd0..f4a7ba842 100644
--- a/inc/ActionRouter.php
+++ b/inc/ActionRouter.php
@@ -2,6 +2,7 @@
namespace dokuwiki;
+use dokuwiki\Extension\Event;
use dokuwiki\Action\AbstractAction;
use dokuwiki\Action\Exception\ActionDisabledException;
use dokuwiki\Action\Exception\ActionException;
@@ -19,7 +20,7 @@ class ActionRouter {
protected $action;
/** @var ActionRouter */
- protected static $instance = null;
+ protected static $instance;
/** @var int transition counter */
protected $transitions = 0;
@@ -42,7 +43,6 @@ class ActionRouter {
$this->disabled = explode(',', $conf['disableactions']);
$this->disabled = array_map('trim', $this->disabled);
- $this->transitions = 0;
$ACT = act_clean($ACT);
$this->setupAction($ACT);
@@ -56,7 +56,7 @@ class ActionRouter {
* @return ActionRouter
*/
public static function getInstance($reinit = false) {
- if((self::$instance === null) || $reinit) {
+ if((!self::$instance instanceof \dokuwiki\ActionRouter) || $reinit) {
self::$instance = new ActionRouter();
}
return self::$instance;
@@ -76,7 +76,7 @@ class ActionRouter {
try {
// give plugins an opportunity to process the actionname
- $evt = new Extension\Event('ACTION_ACT_PREPROCESS', $actionname);
+ $evt = new Event('ACTION_ACT_PREPROCESS', $actionname);
if ($evt->advise_before()) {
$this->action = $this->loadAction($actionname);
$this->checkAction($this->action);
@@ -92,7 +92,7 @@ class ActionRouter {
$actionname = $e->getNewAction();
// this one should trigger a user message
- if(is_a($e, ActionDisabledException::class)) {
+ if($e instanceof ActionDisabledException) {
msg('Action disabled: ' . hsc($presetup), -1);
}
@@ -147,8 +147,8 @@ class ActionRouter {
* @param \Exception|FatalException $e
* @throws FatalException during unit testing
*/
- protected function handleFatalException(\Exception $e) {
- if(is_a($e, FatalException::class)) {
+ protected function handleFatalException(\Throwable $e) {
+ if($e instanceof FatalException) {
http_status($e->getCode());
} else {
http_status(500);
@@ -178,8 +178,8 @@ class ActionRouter {
public function loadAction($actionname) {
$actionname = strtolower($actionname); // FIXME is this needed here? should we run a cleanup somewhere else?
$parts = explode('_', $actionname);
- while(!empty($parts)) {
- $load = join('_', $parts);
+ while($parts !== []) {
+ $load = implode('_', $parts);
$class = 'dokuwiki\\Action\\' . str_replace('_', '', ucwords($load, '_'));
if(class_exists($class)) {
return new $class($actionname);
diff --git a/inc/Ajax.php b/inc/Ajax.php
index fd6abb5e4..244e95b99 100644
--- a/inc/Ajax.php
+++ b/inc/Ajax.php
@@ -2,6 +2,9 @@
namespace dokuwiki;
+use dokuwiki\Extension\Event;
+use dokuwiki\Ui\MediaDiff;
+use dokuwiki\Ui\Index;
use dokuwiki\Ui;
use dokuwiki\Utf8\Sort;
@@ -23,7 +26,7 @@ class Ajax {
if(method_exists($this, $callfn)) {
$this->$callfn();
} else {
- $evt = new Extension\Event('AJAX_CALL_UNKNOWN', $call);
+ $evt = new Event('AJAX_CALL_UNKNOWN', $call);
if($evt->advise_before()) {
print "AJAX call '" . hsc($call) . "' unknown!\n";
} else {
@@ -52,7 +55,7 @@ class Ajax {
$data = ft_pageLookup($query, true, useHeading('navigation'));
- if(!count($data)) return;
+ if($data === []) return;
print '<strong>' . $lang['quickhits'] . '</strong>';
print '<ul>';
@@ -93,7 +96,7 @@ class Ajax {
if(empty($query)) return;
$data = ft_pageLookup($query);
- if(!count($data)) return;
+ if($data === []) return;
$data = array_keys($data);
// limit results to 15 hits
@@ -104,15 +107,15 @@ class Ajax {
Sort::sort($data);
/* now construct a json */
- $suggestions = array(
- $query, // the original query
- $data, // some suggestions
- array(), // no description
- array() // no urls
- );
+ $suggestions = [
+ $query, // the original query
+ $data, // some suggestions
+ [], // no description
+ [], // no urls
+ ];
header('Content-Type: application/x-suggestions+json');
- print json_encode($suggestions);
+ print json_encode($suggestions, JSON_THROW_ON_ERROR);
}
/**
@@ -152,7 +155,7 @@ class Ajax {
} else {
$response['errors'] = array_merge($response['errors'], $draft->getErrors());
}
- echo json_encode($response);
+ echo json_encode($response, JSON_THROW_ON_ERROR);
}
/**
@@ -189,8 +192,8 @@ class Ajax {
$lvl = count(explode(':', $ns));
- $data = array();
- search($data, $conf['mediadir'], 'search_index', array('nofiles' => true), $dir);
+ $data = [];
+ search($data, $conf['mediadir'], 'search_index', ['nofiles' => true], $dir);
foreach(array_keys($data) as $item) {
$data[$item]['level'] = $lvl + 1;
}
@@ -247,7 +250,7 @@ class Ajax {
$image = '';
if($INPUT->has('image')) $image = cleanID($INPUT->str('image'));
- (new Ui\MediaDiff($image))->preference('fromAjax', true)->show();
+ (new MediaDiff($image))->preference('fromAjax', true)->show();
}
/**
@@ -282,12 +285,12 @@ class Ajax {
if($INPUT->get->has('qqfile')) $res = media_upload_xhr($NS, $AUTH);
if($res) {
- $result = array(
+ $result = [
'success' => true,
- 'link' => media_managerURL(array('ns' => $ns, 'image' => $NS . ':' . $id), '&'),
+ 'link' => media_managerURL(['ns' => $ns, 'image' => $NS . ':' . $id], '&'),
'id' => $NS . ':' . $id,
'ns' => $NS
- );
+ ];
} else {
$error = '';
if(isset($MSG)) {
@@ -295,14 +298,11 @@ class Ajax {
$error .= $msg['msg'];
}
}
- $result = array(
- 'error' => $error,
- 'ns' => $NS
- );
+ $result = ['error' => $error, 'ns' => $NS];
}
header('Content-Type: application/json');
- echo json_encode($result);
+ echo json_encode($result, JSON_THROW_ON_ERROR);
}
/**
@@ -320,12 +320,12 @@ class Ajax {
$lvl = count(explode(':', $ns));
- $data = array();
- search($data, $conf['datadir'], 'search_index', array('ns' => $ns), $dir);
+ $data = [];
+ search($data, $conf['datadir'], 'search_index', ['ns' => $ns], $dir);
foreach (array_keys($data) as $item) {
$data[$item]['level'] = $lvl + 1;
}
- $idx = new Ui\Index;
+ $idx = new Index;
echo html_buildlist($data, 'idx', [$idx,'formatListItem'], [$idx,'tagListItem']);
}
@@ -344,11 +344,12 @@ class Ajax {
$ns = getNS($q);
$ns = cleanID($ns);
+
$id = cleanID($id);
$nsd = utf8_encodeFN(str_replace(':', '/', $ns));
- $data = array();
+ $data = [];
if($q !== '' && $ns === '') {
// use index to lookup matching pages
@@ -356,15 +357,15 @@ class Ajax {
// If 'useheading' option is 'always' or 'content',
// search page titles with original query as well.
- if ($conf['useheading'] == '1' || $conf['useheading'] == 'content') {
+ if ($conf['useheading'] == '1' || $conf['useheading'] == 'content') {
$pages = array_merge($pages, ft_pageLookup($q, true, true));
asort($pages, SORT_STRING);
}
-
+
// result contains matches in pages and namespaces
// we now extract the matching namespaces to show
// them seperately
- $dirs = array();
+ $dirs = [];
foreach($pages as $pid => $title) {
if(strpos(getNS($pid), $id) !== false) {
@@ -372,31 +373,24 @@ class Ajax {
$dirs[getNS($pid)] = 1; // assoc array avoids dupes
} else {
// it is a matching page, add it to the result
- $data[] = array(
- 'id' => $pid,
- 'title' => $title,
- 'type' => 'f',
- );
+ $data[] = ['id' => $pid, 'title' => $title, 'type' => 'f'];
}
unset($pages[$pid]);
}
- foreach($dirs as $dir => $junk) {
- $data[] = array(
- 'id' => $dir,
- 'type' => 'd',
- );
+ foreach(array_keys($dirs) as $dir) {
+ $data[] = ['id' => $dir, 'type' => 'd'];
}
} else {
- $opts = array(
+ $opts = [
'depth' => 1,
'listfiles' => true,
'listdirs' => true,
'pagesonly' => true,
'firsthead' => true,
- 'sneakyacl' => $conf['sneaky_index'],
- );
+ 'sneakyacl' => $conf['sneaky_index']
+ ];
if($id) $opts['filematch'] = '^.*\/' . $id;
if($id) $opts['dirmatch'] = '^.*\/' . $id;
search($data, $conf['datadir'], 'search_universal', $opts, $nsd);
@@ -404,10 +398,7 @@ class Ajax {
// add back to upper
if($ns) {
array_unshift(
- $data, array(
- 'id' => getNS($ns),
- 'type' => 'u',
- )
+ $data, ['id' => getNS($ns), 'type' => 'u']
);
}
}
diff --git a/inc/Draft.php b/inc/Draft.php
index ea9431069..99e0d2c86 100644
--- a/inc/Draft.php
+++ b/inc/Draft.php
@@ -2,6 +2,7 @@
namespace dokuwiki;
+use dokuwiki\Extension\Event;
/**
* Class Draft
*
@@ -86,7 +87,7 @@ class Draft
'cname' => $this->cname,
'errors' => [],
];
- $event = new Extension\Event('DRAFT_SAVE', $draft);
+ $event = new Event('DRAFT_SAVE', $draft);
if ($event->advise_before()) {
$draft['hasBeenSaved'] = io_saveFile($draft['cname'], serialize($draft));
if ($draft['hasBeenSaved']) {
diff --git a/inc/ErrorHandler.php b/inc/ErrorHandler.php
index a14cbc4df..ab3cdcac7 100644
--- a/inc/ErrorHandler.php
+++ b/inc/ErrorHandler.php
@@ -126,7 +126,7 @@ EOT;
*/
public static function logException($e)
{
- if (is_a($e, \ErrorException::class)) {
+ if ($e instanceof \ErrorException) {
$prefix = self::ERRORCODES[$e->getSeverity()];
} else {
$prefix = get_class($e);
diff --git a/inc/FeedParser.php b/inc/FeedParser.php
index 028f1136f..94c9d4257 100644
--- a/inc/FeedParser.php
+++ b/inc/FeedParser.php
@@ -1,12 +1,13 @@
<?php
+use SimplePie\SimplePie;
use dokuwiki\FeedParserFile;
use SimplePie\File;
/**
* We override some methods of the original SimplePie class here
*/
-class FeedParser extends \SimplePie\SimplePie {
+class FeedParser extends SimplePie {
/**
* Constructor. Set some defaults
diff --git a/inc/FeedParserFile.php b/inc/FeedParserFile.php
index b056530dd..3297a0d20 100644
--- a/inc/FeedParserFile.php
+++ b/inc/FeedParserFile.php
@@ -2,6 +2,8 @@
namespace dokuwiki;
+use SimplePie\File;
+use SimplePie\SimplePie;
use dokuwiki\HTTP\DokuHTTPClient;
/**
@@ -9,7 +11,7 @@ use dokuwiki\HTTP\DokuHTTPClient;
*
* Replaces SimplePie's own class
*/
-class FeedParserFile extends \SimplePie\File
+class FeedParserFile extends File
{
protected $http;
/** @noinspection PhpMissingParentConstructorInspection */
@@ -22,13 +24,7 @@ class FeedParserFile extends \SimplePie\File
* @inheritdoc
*/
public function __construct(
- $url,
- $timeout = 10,
- $redirects = 5,
- $headers = null,
- $useragent = null,
- $force_fsockopen = false,
- $curl_options = array()
+ $url
) {
$this->http = new DokuHTTPClient();
$this->success = $this->http->sendRequest($url);
@@ -37,7 +33,7 @@ class FeedParserFile extends \SimplePie\File
$this->body = $this->http->resp_body;
$this->error = $this->http->error;
- $this->method = \SimplePie\SimplePie::FILE_SOURCE_REMOTE | \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN;
+ $this->method = SimplePie::FILE_SOURCE_REMOTE | SimplePie::FILE_SOURCE_FSOCKOPEN;
return $this->success;
}
diff --git a/inc/Logger.php b/inc/Logger.php
index 632f37d04..3c924c8f7 100644
--- a/inc/Logger.php
+++ b/inc/Logger.php
@@ -172,9 +172,7 @@ class Logger
$details = json_encode($details, JSON_PRETTY_PRINT);
}
$details = explode("\n", $details);
- $loglines = array_map(function ($line) {
- return ' ' . $line;
- }, $details);
+ $loglines = array_map(static fn($line) => ' ' . $line, $details);
} elseif ($details) {
$loglines = [$details];
} else {
@@ -221,8 +219,8 @@ class Logger
protected function writeLogLines($lines, $logfile)
{
if (defined('DOKU_UNITTEST')) {
- fwrite(STDERR, "\n[" . $this->facility . '] ' . join("\n", $lines) . "\n");
+ fwrite(STDERR, "\n[" . $this->facility . '] ' . implode("\n", $lines) . "\n");
}
- return io_saveFile($logfile, join("\n", $lines) . "\n", true);
+ return io_saveFile($logfile, implode("\n", $lines) . "\n", true);
}
}
diff --git a/inc/Mailer.class.php b/inc/Mailer.class.php
index f92d80cc6..d83c06911 100644
--- a/inc/Mailer.class.php
+++ b/inc/Mailer.class.php
@@ -8,7 +8,8 @@
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Utf8\PhpString;
+use dokuwiki\Utf8\Clean;
use dokuwiki\Extension\Event;
/**
@@ -16,18 +17,18 @@ use dokuwiki\Extension\Event;
*/
class Mailer {
- protected $headers = array();
- protected $attach = array();
+ protected $headers = [];
+ protected $attach = [];
protected $html = '';
protected $text = '';
protected $boundary = '';
protected $partid = '';
- protected $sendparam = null;
+ protected $sendparam;
protected $allowhtml = true;
- protected $replacements = array('text'=> array(), 'html' => array());
+ protected $replacements = ['text'=> [], 'html' => []];
/**
* Constructor
@@ -42,12 +43,13 @@ class Mailer {
$server = parse_url(DOKU_URL, PHP_URL_HOST);
if(strpos($server,'.') === false) $server .= '.localhost';
- $this->partid = substr(md5(uniqid(mt_rand(), true)),0, 8).'@'.$server;
- $this->boundary = '__________'.md5(uniqid(mt_rand(), true));
+ $this->partid = substr(md5(uniqid(random_int(0, mt_getrandmax()), true)),0, 8).'@'.$server;
+ $this->boundary = '__________'.md5(uniqid(random_int(0, mt_getrandmax()), true));
$listid = implode('.', array_reverse(explode('/', DOKU_BASE))).$server;
$listid = strtolower(trim($listid, '.'));
- $messageid = uniqid(mt_rand(), true) . "@$server";
+
+ $messageid = uniqid(random_int(0, mt_getrandmax()), true) . "@$server";
$this->allowhtml = (bool)$conf['htmlmail'];
@@ -77,15 +79,15 @@ class Mailer {
*/
public function attachFile($path, $mime, $name = '', $embed = '') {
if(!$name) {
- $name = \dokuwiki\Utf8\PhpString::basename($path);
+ $name = PhpString::basename($path);
}
- $this->attach[] = array(
+ $this->attach[] = [
'data' => file_get_contents($path),
'mime' => $mime,
'name' => $name,
'embed' => $embed
- );
+ ];
}
/**
@@ -98,16 +100,16 @@ class Mailer {
*/
public function attachContent($data, $mime, $name = '', $embed = '') {
if(!$name) {
- list(, $ext) = explode('/', $mime);
+ [, $ext] = explode('/', $mime);
$name = count($this->attach).".$ext";
}
- $this->attach[] = array(
+ $this->attach[] = [
'data' => $data,
'mime' => $mime,
'name' => $name,
'embed' => $embed
- );
+ ];
}
/**
@@ -122,7 +124,7 @@ class Mailer {
// get file and mime type
$media = cleanID($matches[1]);
- list(, $mime) = mimetype($media);
+ [, $mime] = mimetype($media);
$file = mediaFN($media);
if(!file_exists($file)) return $matches[0]; //bad reference, keep as is
@@ -225,12 +227,12 @@ class Mailer {
// embed media from templates
$html = preg_replace_callback(
'/@MEDIA\(([^\)]+)\)@/',
- array($this, 'autoEmbedCallBack'), $html
+ [$this, 'autoEmbedCallBack'], $html
);
// add default token replacements
- $trep = array_merge($this->replacements['text'], (array)$textrep);
- $hrep = array_merge($this->replacements['html'], (array)$htmlrep);
+ $trep = array_merge($this->replacements['text'], $textrep);
+ $hrep = array_merge($this->replacements['html'], $htmlrep);
// Apply replacements
foreach($trep as $key => $substitution) {
@@ -359,10 +361,10 @@ class Mailer {
$headers = '';
if(!is_array($addresses)){
$count = preg_match_all('/\s*(?:("[^"]*"[^,]+),*)|([^,]+)\s*,*/', $addresses, $matches, PREG_SET_ORDER);
- $addresses = array();
+ $addresses = [];
if ($count !== false && is_array($matches)) {
foreach ($matches as $match) {
- array_push($addresses, rtrim($match[0], ','));
+ $addresses[] = rtrim($match[0], ',');
}
}
}
@@ -385,7 +387,7 @@ class Mailer {
}
// FIXME: is there a way to encode the localpart of a emailaddress?
- if(!\dokuwiki\Utf8\Clean::isASCII($addr)) {
+ if(!Clean::isASCII($addr)) {
msg(hsc("E-Mail address <$addr> is not ASCII"), -1, __LINE__, __FILE__, MSG_ADMINS_ONLY);
continue;
}
@@ -401,11 +403,11 @@ class Mailer {
$addr = "<$addr>";
if(defined('MAILHEADER_ASCIIONLY')) {
- $text = \dokuwiki\Utf8\Clean::deaccent($text);
- $text = \dokuwiki\Utf8\Clean::strip($text);
+ $text = Clean::deaccent($text);
+ $text = Clean::strip($text);
}
- if(strpos($text, ',') !== false || !\dokuwiki\Utf8\Clean::isASCII($text)) {
+ if(strpos($text, ',') !== false || !Clean::isASCII($text)) {
$text = '=?UTF-8?B?'.base64_encode($text).'?=';
}
} else {
@@ -541,7 +543,7 @@ class Mailer {
// clean up addresses
if(empty($this->headers['From'])) $this->from($conf['mailfrom']);
- $addrs = array('To', 'From', 'Cc', 'Bcc', 'Reply-To', 'Sender');
+ $addrs = ['To', 'From', 'Cc', 'Bcc', 'Reply-To', 'Sender'];
foreach($addrs as $addr) {
if(isset($this->headers[$addr])) {
$this->headers[$addr] = $this->cleanAddress($this->headers[$addr]);
@@ -551,25 +553,25 @@ class Mailer {
if(isset($this->headers['Subject'])) {
// add prefix to subject
if(empty($conf['mailprefix'])) {
- if(\dokuwiki\Utf8\PhpString::strlen($conf['title']) < 20) {
+ if(PhpString::strlen($conf['title']) < 20) {
$prefix = '['.$conf['title'].']';
} else {
- $prefix = '['.\dokuwiki\Utf8\PhpString::substr($conf['title'], 0, 20).'...]';
+ $prefix = '['.PhpString::substr($conf['title'], 0, 20).'...]';
}
} else {
$prefix = '['.$conf['mailprefix'].']';
}
$len = strlen($prefix);
- if(substr($this->headers['Subject'], 0, $len) != $prefix) {
+ if(substr($this->headers['Subject'], 0, $len) !== $prefix) {
$this->headers['Subject'] = $prefix.' '.$this->headers['Subject'];
}
// encode subject
if(defined('MAILHEADER_ASCIIONLY')) {
- $this->headers['Subject'] = \dokuwiki\Utf8\Clean::deaccent($this->headers['Subject']);
- $this->headers['Subject'] = \dokuwiki\Utf8\Clean::strip($this->headers['Subject']);
+ $this->headers['Subject'] = Clean::deaccent($this->headers['Subject']);
+ $this->headers['Subject'] = Clean::strip($this->headers['Subject']);
}
- if(!\dokuwiki\Utf8\Clean::isASCII($this->headers['Subject'])) {
+ if(!Clean::isASCII($this->headers['Subject'])) {
$this->headers['Subject'] = '=?UTF-8?B?'.base64_encode($this->headers['Subject']).'?=';
}
}
@@ -636,7 +638,7 @@ class Mailer {
$name = $INFO['userinfo']['name'] ?? '';
$mail = $INFO['userinfo']['mail'] ?? '';
- $this->replacements['text'] = array(
+ $this->replacements['text'] = [
'DATE' => dformat(),
'BROWSER' => $INPUT->server->str('HTTP_USER_AGENT'),
'IPADDRESS' => $ip,
@@ -646,7 +648,8 @@ class Mailer {
'USER' => $INPUT->server->str('REMOTE_USER'),
'NAME' => $name,
'MAIL' => $mail
- );
+ ];
+
$signature = str_replace(
'@DOKUWIKIURL@',
$this->replacements['text']['DOKUWIKIURL'],
@@ -654,7 +657,7 @@ class Mailer {
);
$this->replacements['text']['EMAILSIGNATURE'] = "\n-- \n" . $signature . "\n";
- $this->replacements['html'] = array(
+ $this->replacements['html'] = [
'DATE' => '<i>' . hsc(dformat()) . '</i>',
'BROWSER' => hsc($INPUT->server->str('HTTP_USER_AGENT')),
'IPADDRESS' => '<code>' . hsc($ip) . '</code>',
@@ -663,22 +666,15 @@ class Mailer {
'DOKUWIKIURL' => '<a href="' . DOKU_URL . '">' . DOKU_URL . '</a>',
'USER' => hsc($INPUT->server->str('REMOTE_USER')),
'NAME' => hsc($name),
- 'MAIL' => '<a href="mailto:"' . hsc($mail) . '">' .
- hsc($mail) . '</a>'
- );
+ 'MAIL' => '<a href="mailto:"' . hsc($mail) . '">' . hsc($mail) . '</a>'
+ ];
$signature = $lang['email_signature_text'];
if(!empty($lang['email_signature_html'])) {
$signature = $lang['email_signature_html'];
}
$signature = str_replace(
- array(
- '@DOKUWIKIURL@',
- "\n"
- ),
- array(
- $this->replacements['html']['DOKUWIKIURL'],
- '<br />'
- ),
+ ['@DOKUWIKIURL@', "\n"],
+ [$this->replacements['html']['DOKUWIKIURL'], '<br />'],
$signature
);
$this->replacements['html']['EMAILSIGNATURE'] = $signature;
@@ -697,7 +693,7 @@ class Mailer {
$success = false;
// prepare hook data
- $data = array(
+ $data = [
// pass the whole mail class to plugin
'mail' => $this,
// pass references for backward compatibility
@@ -711,7 +707,7 @@ class Mailer {
'headers' => '', // plugins shouldn't use this
// signal if we mailed successfully to AFTER event
'success' => &$success,
- );
+ ];
// do our thing if BEFORE hook approves
$evt = new Event('MAIL_MESSAGE_SEND', $data);
diff --git a/inc/Manifest.php b/inc/Manifest.php
index 29e7f263f..65f385188 100644
--- a/inc/Manifest.php
+++ b/inc/Manifest.php
@@ -30,7 +30,7 @@ class Manifest
$manifest['start_url'] = DOKU_REL;
}
- $styleUtil = new \dokuwiki\StyleUtils();
+ $styleUtil = new StyleUtils();
$styleIni = $styleUtil->cssStyleini();
$replacements = $styleIni['replacements'];
@@ -39,9 +39,9 @@ class Manifest
}
if (empty($manifest['theme_color'])) {
- $manifest['theme_color'] = !empty($replacements['__theme_color__'])
- ? $replacements['__theme_color__']
- : $replacements['__background_alt__'];
+ $manifest['theme_color'] = empty($replacements['__theme_color__'])
+ ? $replacements['__background_alt__']
+ : $replacements['__theme_color__'];
}
if (empty($manifest['icons'])) {
@@ -79,6 +79,6 @@ class Manifest
Event::createAndTrigger('MANIFEST_SEND', $manifest);
header('Content-Type: application/manifest+json');
- echo json_encode($manifest);
+ echo json_encode($manifest, JSON_THROW_ON_ERROR);
}
}
diff --git a/inc/PassHash.php b/inc/PassHash.php
index 9dfdd72cd..73ad8af4c 100644
--- a/inc/PassHash.php
+++ b/inc/PassHash.php
@@ -62,17 +62,11 @@ class PassHash {
$magic = 'H';
} elseif(preg_match('/^pbkdf2_(\w+?)\$(\d+)\$(.{12})\$/', $hash, $m)) {
$method = 'djangopbkdf2';
- $magic = array(
- 'algo' => $m[1],
- 'iter' => $m[2],
- );
+ $magic = ['algo' => $m[1], 'iter' => $m[2]];
$salt = $m[3];
} elseif(preg_match('/^PBKDF2(SHA\d+)\$(\d+)\$([[:xdigit:]]+)\$([[:xdigit:]]+)$/', $hash, $m)) {
$method = 'seafilepbkdf2';
- $magic = array(
- 'algo' => $m[1],
- 'iter' => $m[2],
- );
+ $magic = ['algo' => $m[1], 'iter' => $m[2]];
$salt = $m[3];
} elseif(preg_match('/^sha1\$(.{5})\$/', $hash, $m)) {
$method = 'djangosha1';
@@ -95,10 +89,7 @@ class PassHash {
} elseif(preg_match('/^\$(5|6)\$(rounds=\d+)?\$?(.+?)\$/', $hash, $m)) {
$method = 'sha2';
$salt = $m[3];
- $magic = array(
- 'prefix' => $m[1],
- 'rounds' => $m[2],
- );
+ $magic = ['prefix' => $m[1], 'rounds' => $m[2]];
} elseif(preg_match('/^\$(argon2id?)/', $hash, $m)) {
if(!defined('PASSWORD_'.strtoupper($m[1]))) {
throw new \Exception('This PHP installation has no '.strtoupper($m[1]).' support');
@@ -406,7 +397,7 @@ class PassHash {
if($iter > 30) {
throw new \Exception("Too high iteration count ($iter) in ".
- __CLASS__.'::'.__FUNCTION__);
+ self::class.'::'.__FUNCTION__);
}
$iter = 1 << $iter;
@@ -550,7 +541,7 @@ class PassHash {
* @return string Hashed password
* @throws Exception when PHP is missing support for the method/algo
*/
- public function hash_seafilepbkdf2($clear, $salt=null, $opts=array()) {
+ public function hash_seafilepbkdf2($clear, $salt=null, $opts=[]) {
$this->init_salt($salt, 64);
if(empty($opts['algo'])) {
$prefixalgo='SHA256';
@@ -586,7 +577,7 @@ class PassHash {
* @return string Hashed password
* @throws \Exception when PHP is missing support for the method/algo
*/
- public function hash_djangopbkdf2($clear, $salt=null, $opts=array()) {
+ public function hash_djangopbkdf2($clear, $salt=null, $opts=[]) {
$this->init_salt($salt, 12);
if(empty($opts['algo'])) {
$algo = 'sha256';
@@ -618,7 +609,7 @@ class PassHash {
* @return string Hashed password
* @throws \Exception when PHP is missing support for the method/algo
*/
- public function hash_djangopbkdf2_sha256($clear, $salt=null, $opts=array()) {
+ public function hash_djangopbkdf2_sha256($clear, $salt=null, $opts=[]) {
$opts['algo'] = 'sha256';
return $this->hash_djangopbkdf2($clear, $salt, $opts);
}
@@ -632,7 +623,7 @@ class PassHash {
* @return string Hashed password
* @throws \Exception when PHP is missing support for the method/algo
*/
- public function hash_djangopbkdf2_sha1($clear, $salt=null, $opts=array()) {
+ public function hash_djangopbkdf2_sha1($clear, $salt=null, $opts=[]) {
$opts['algo'] = 'sha1';
return $this->hash_djangopbkdf2($clear, $salt, $opts);
}
@@ -655,7 +646,7 @@ class PassHash {
* @return string Hashed password
*/
public function hash_bcrypt($clear, $salt = null, $compute = 10) {
- if(!defined('CRYPT_BLOWFISH') || CRYPT_BLOWFISH != 1) {
+ if(!defined('CRYPT_BLOWFISH') || CRYPT_BLOWFISH !== 1) {
throw new \Exception('This PHP installation has no bcrypt support');
}
@@ -684,7 +675,7 @@ class PassHash {
* @return string Hashed password
* @throws \Exception
*/
- public function hash_sha2($clear, $salt = null, $opts = array()) {
+ public function hash_sha2($clear, $salt = null, $opts = []) {
if(empty($opts['prefix'])) {
$prefix = '6';
} else {
@@ -695,10 +686,10 @@ class PassHash {
} else {
$rounds = $opts['rounds'];
}
- if($prefix == '5' && (!defined('CRYPT_SHA256') || CRYPT_SHA256 != 1)) {
+ if($prefix == '5' && (!defined('CRYPT_SHA256') || CRYPT_SHA256 !== 1)) {
throw new \Exception('This PHP installation has no SHA256 support');
}
- if($prefix == '6' && (!defined('CRYPT_SHA512') || CRYPT_SHA512 != 1)) {
+ if($prefix == '6' && (!defined('CRYPT_SHA512') || CRYPT_SHA512 !== 1)) {
throw new \Exception('This PHP installation has no SHA512 support');
}
$this->init_salt($salt, 8, false);
@@ -812,8 +803,8 @@ class PassHash {
}
for($i = 0; $i < strlen($key) - 1; $i++) {
- $opad[$i] = $opad[$i] ^ $key[$i];
- $ipad[$i] = $ipad[$i] ^ $key[$i];
+ $opad[$i] ^= $key[$i];
+ $ipad[$i] ^= $key[$i];
}
$output = $algo($opad . pack($pack, $algo($ipad . $data)));
diff --git a/inc/SafeFN.class.php b/inc/SafeFN.class.php
index c5489b185..4e050ef52 100644
--- a/inc/SafeFN.class.php
+++ b/inc/SafeFN.class.php
@@ -1,5 +1,6 @@
<?php
+use dokuwiki\Utf8\Unicode;
/**
* Class to safely store UTF-8 in a Filename
*
@@ -45,7 +46,7 @@ class SafeFN {
* @author Christopher Smith <chris@jalakai.co.uk>
*/
public static function encode($filename) {
- return self::unicodeToSafe(\dokuwiki\Utf8\Unicode::fromUtf8($filename));
+ return self::unicodeToSafe(Unicode::fromUtf8($filename));
}
/**
@@ -74,7 +75,7 @@ class SafeFN {
* @author Christopher Smith <chris@jalakai.co.uk>
*/
public static function decode($filename) {
- return \dokuwiki\Utf8\Unicode::toUtf8(self::safeToUnicode(strtolower($filename)));
+ return Unicode::toUtf8(self::safeToUnicode(strtolower($filename)));
}
public static function validatePrintableUtf8($printable_utf8) {
@@ -105,8 +106,7 @@ class SafeFN {
$converted = false;
}
$safe .= chr($codepoint);
-
- } else if ($codepoint == ord(self::$pre_indicator)) {
+ } elseif ($codepoint == ord(self::$pre_indicator)) {
$safe .= self::$pre_indicator;
$converted = true;
} else {
@@ -128,7 +128,7 @@ class SafeFN {
*/
private static function safeToUnicode($safe) {
- $unicode = array();
+ $unicode = [];
$split = preg_split('#(?=['.self::$post_indicator.self::$pre_indicator.'])#',$safe,-1,PREG_SPLIT_NO_EMPTY);
$converted = false;
@@ -141,7 +141,7 @@ class SafeFN {
$unicode[] = ord($sub[$i]);
}
$converted = false;
- } else if ($len==1) {
+ } elseif ($len==1) {
// a pre_indicator character in the real data
$unicode[] = ord($sub);
$converted = true;
diff --git a/inc/Search/Indexer.php b/inc/Search/Indexer.php
index 155a804aa..3ec7c5529 100644
--- a/inc/Search/Indexer.php
+++ b/inc/Search/Indexer.php
@@ -2,6 +2,9 @@
namespace dokuwiki\Search;
+use dokuwiki\Utf8\Asian;
+use dokuwiki\Utf8\Clean;
+use dokuwiki\Utf8\PhpString;
use dokuwiki\Extension\Event;
/**
@@ -13,7 +16,7 @@ class Indexer {
/**
* @var array $pidCache Cache for getPID()
*/
- protected $pidCache = array();
+ protected $pidCache = [];
/**
* Adds the contents of a page to the fulltext index
@@ -39,7 +42,7 @@ class Indexer {
return false;
}
- $pagewords = array();
+ $pagewords = [];
// get word usage in page
$words = $this->getPageWords($text);
if ($words === false) {
@@ -67,10 +70,10 @@ class Indexer {
if ($pageword_idx !== '') {
$oldwords = explode(':',$pageword_idx);
$delwords = array_diff($oldwords, $pagewords);
- $upwords = array();
+ $upwords = [];
foreach ($delwords as $word) {
if ($word != '') {
- list($wlen, $wid) = explode('*', $word);
+ [$wlen, $wid] = explode('*', $word);
$wid = (int)$wid;
$upwords[$wlen][] = $wid;
}
@@ -84,7 +87,7 @@ class Indexer {
}
}
// Save the reverse index
- $pageword_idx = join(':', $pagewords);
+ $pageword_idx = implode(':', $pagewords);
if (!$this->saveIndexKey('pageword', '', $pid, $pageword_idx)) {
$this->unlock();
return false;
@@ -109,18 +112,18 @@ class Indexer {
$tokens = $this->tokenizer($text);
$tokens = array_count_values($tokens); // count the frequency of each token
- $words = array();
+ $words = [];
foreach ($tokens as $w=>$c) {
$l = wordlen($w);
if (isset($words[$l])){
- $words[$l][$w] = $c + (isset($words[$l][$w]) ? $words[$l][$w] : 0);
+ $words[$l][$w] = $c + ($words[$l][$w] ?? 0);
}else{
- $words[$l] = array($w => $c);
+ $words[$l] = [$w => $c];
}
}
// arrive here with $words = array(wordlen => array(word => frequency))
- $index = array(); //resulting index
+ $index = []; //resulting index
foreach (array_keys($words) as $wlen) {
$word_idx = $this->getIndex('w', $wlen);
$word_idx_modified = false;
@@ -133,7 +136,7 @@ class Indexer {
$word_idx_modified = true;
}
if (!isset($index[$wlen]))
- $index[$wlen] = array();
+ $index[$wlen] = [];
$index[$wlen][$wid] = $freq;
}
// save back the word index
@@ -162,7 +165,7 @@ class Indexer {
*/
public function addMetaKeys($page, $key, $value=null) {
if (!is_array($key)) {
- $key = array($key => $value);
+ $key = [$key => $value];
} elseif (!is_null($value)) {
// $key is array, but $value is not null
trigger_error("array passed to addMetaKeys but value is not null", E_USER_WARNING);
@@ -195,7 +198,7 @@ class Indexer {
$metawords = $this->getIndex($metaname.'_w', '');
$addwords = false;
- if (!is_array($values)) $values = array($values);
+ if (!is_array($values)) $values = [$values];
$val_idx = $this->getIndexKey($metaname.'_p', '', $pid);
if ($val_idx !== '') {
@@ -203,7 +206,7 @@ class Indexer {
// -1 means remove, 0 keep, 1 add
$val_idx = array_combine($val_idx, array_fill(0, count($val_idx), -1));
} else {
- $val_idx = array();
+ $val_idx = [];
}
foreach ($values as $val) {
@@ -278,11 +281,11 @@ class Indexer {
$new_id = array_search($newpage, $pages, true);
if ($new_id !== false) {
// make sure the page is not in the index anymore
- if ($this->deletePageNoLock($newpage) !== true) {
+ if (!$this->deletePageNoLock($newpage)) {
return false;
}
- $pages[$new_id] = 'deleted:'.time().rand(0, 9999);
+ $pages[$new_id] = 'deleted:'.time().random_int(0, 9999);
}
$pages[$id] = $newpage;
@@ -294,7 +297,7 @@ class Indexer {
}
// reset the pid cache
- $this->pidCache = array();
+ $this->pidCache = [];
$this->unlock();
return true;
@@ -328,15 +331,15 @@ class Indexer {
$pagekeys = $this->getIndex($key.'_p', '');
$parts = explode(':', $indexline);
foreach ($parts as $part) {
- list($id, $count) = explode('*', $part);
+ [$id, $count] = explode('*', $part);
$newindexline = $this->updateTuple($newindexline, $id, $count);
$keyline = explode(':', $pagekeys[$id]);
// remove old meta value
- $keyline = array_diff($keyline, array($oldid));
+ $keyline = array_diff($keyline, [$oldid]);
// add new meta value when not already present
if (!in_array($newid, $keyline)) {
- array_push($keyline, $newid);
+ $keyline[] = $newid;
}
$pagekeys[$id] = implode(':', $keyline);
}
@@ -400,10 +403,10 @@ class Indexer {
$pageword_idx = $this->getIndexKey('pageword', '', $pid);
if ($pageword_idx !== '') {
$delwords = explode(':',$pageword_idx);
- $upwords = array();
+ $upwords = [];
foreach ($delwords as $word) {
if ($word != '') {
- list($wlen,$wid) = explode('*', $word);
+ [$wlen, $wid] = explode('*', $word);
$wid = (int)$wid;
$upwords[$wlen][] = $wid;
}
@@ -463,7 +466,7 @@ class Indexer {
@unlink($conf['indexdir'].'/lengths.idx');
// clear the pid cache
- $this->pidCache = array();
+ $this->pidCache = [];
$this->unlock();
return true;
@@ -493,32 +496,27 @@ class Indexer {
$evt = new Event('INDEXER_TEXT_PREPARE', $text);
if ($evt->advise_before(true)) {
if (preg_match('/[^0-9A-Za-z ]/u', $text)) {
- $text = \dokuwiki\Utf8\Asian::separateAsianWords($text);
+ $text = Asian::separateAsianWords($text);
}
}
$evt->advise_after();
unset($evt);
$text = strtr($text,
- array(
- "\r" => ' ',
- "\n" => ' ',
- "\t" => ' ',
- "\xC2\xAD" => '', //soft-hyphen
- )
+ ["\r" => ' ', "\n" => ' ', "\t" => ' ', "\xC2\xAD" => '']
);
if (preg_match('/[^0-9A-Za-z ]/u', $text))
- $text = \dokuwiki\Utf8\Clean::stripspecials($text, ' ', '\._\-:'.$wc);
+ $text = Clean::stripspecials($text, ' ', '\._\-:'.$wc);
$wordlist = explode(' ', $text);
foreach ($wordlist as $i => $word) {
$wordlist[$i] = (preg_match('/[^0-9A-Za-z]/u', $word)) ?
- \dokuwiki\Utf8\PhpString::strtolower($word) : strtolower($word);
+ PhpString::strtolower($word) : strtolower($word);
}
foreach ($wordlist as $i => $word) {
if ((!is_numeric($word) && strlen($word) < IDX_MINWORDLENGTH)
- || array_search($word, $stopwords, true) !== false)
+ || in_array($word, $stopwords, true))
unset($wordlist[$i]);
}
return array_values($wordlist);
@@ -593,12 +591,12 @@ class Indexer {
* @author Andreas Gohr <andi@splitbrain.org>
*/
public function lookup(&$tokens) {
- $result = array();
+ $result = [];
$wids = $this->getIndexWords($tokens, $result);
- if (empty($wids)) return array();
+ if (empty($wids)) return [];
// load known words and documents
$page_idx = $this->getIndex('page', '');
- $docs = array();
+ $docs = [];
foreach (array_keys($wids) as $wlen) {
$wids[$wlen] = array_unique($wids[$wlen]);
$index = $this->getIndex('i', $wlen);
@@ -608,9 +606,9 @@ class Indexer {
}
}
// merge found pages into final result array
- $final = array();
+ $final = [];
foreach ($result as $word => $res) {
- $final[$word] = array();
+ $final[$word] = [];
foreach ($res as $wid) {
// handle the case when ($ixid < count($index)) has been false
// and thus $docs[$wid] hasn't been set.
@@ -649,12 +647,12 @@ class Indexer {
*/
public function lookupKey($key, &$value, $func=null) {
if (!is_array($value))
- $value_array = array($value);
+ $value_array = [$value];
else
$value_array =& $value;
// the matching ids for the provided value(s)
- $value_ids = array();
+ $value_ids = [];
$metaname = idx_cleanName($key);
@@ -668,7 +666,7 @@ class Indexer {
if (!is_null($func)) {
foreach ($value_array as $val) {
foreach ($words as $i => $word) {
- if (call_user_func_array($func, array($val, $word)))
+ if (call_user_func_array($func, [$val, $word]))
$value_ids[$i][] = $val;
}
}
@@ -690,9 +688,8 @@ class Indexer {
$re = $caret.preg_quote($xval, '/').$dollar;
foreach(array_keys(preg_grep('/'.$re.'/', $words)) as $i)
$value_ids[$i][] = $val;
- } else {
- if (($i = array_search($val, $words, true)) !== false)
- $value_ids[$i][] = $val;
+ } elseif (($i = array_search($val, $words, true)) !== false) {
+ $value_ids[$i][] = $val;
}
}
}
@@ -700,9 +697,9 @@ class Indexer {
unset($words); // free the used memory
// initialize the result so it won't be null
- $result = array();
+ $result = [];
foreach ($value_array as $val) {
- $result[$val] = array();
+ $result[$val] = [];
}
$page_idx = $this->getIndex('page', '');
@@ -724,7 +721,7 @@ class Indexer {
// is an array with page_id => 1, page2_id => 1 etc. so take the keys only
$pages = array_keys($this->parseTuples($page_idx, $lines[$value_id]));
foreach ($val_list as $val) {
- $result[$val] = array_merge($result[$val], $pages);
+ $result[$val] = [...$result[$val], ...$pages];
}
}
}
@@ -747,11 +744,11 @@ class Indexer {
* @author Tom N Harris <tnharris@whoopdedo.org>
*/
protected function getIndexWords(&$words, &$result) {
- $tokens = array();
- $tokenlength = array();
- $tokenwild = array();
+ $tokens = [];
+ $tokenlength = [];
+ $tokenwild = [];
foreach ($words as $word) {
- $result[$word] = array();
+ $result[$word] = [];
$caret = '^';
$dollar = '$';
$xword = $word;
@@ -761,12 +758,12 @@ class Indexer {
if (substr($xword, 0, 1) == '*') {
$xword = substr($xword, 1);
$caret = '';
- $wlen -= 1;
+ --$wlen;
}
if (substr($xword, -1, 1) == '*') {
$xword = substr($xword, 0, -1);
$dollar = '';
- $wlen -= 1;
+ --$wlen;
}
if ($wlen < IDX_MINWORDLENGTH && $caret && $dollar && !is_numeric($xword))
continue;
@@ -774,22 +771,22 @@ class Indexer {
$tokenlength[$wlen][] = $xword;
if (!$caret || !$dollar) {
$re = $caret.preg_quote($xword, '/').$dollar;
- $tokens[$xword][] = array($word, '/'.$re.'/');
+ $tokens[$xword][] = [$word, '/'.$re.'/'];
if (!isset($tokenwild[$xword]))
$tokenwild[$xword] = $wlen;
} else {
- $tokens[$xword][] = array($word, null);
+ $tokens[$xword][] = [$word, null];
}
}
asort($tokenwild);
// $tokens = array( base word => array( [ query term , regexp ] ... ) ... )
// $tokenlength = array( base word length => base word ... )
// $tokenwild = array( base word => base word length ... )
- $length_filter = empty($tokenwild) ? $tokenlength : min(array_keys($tokenlength));
+ $length_filter = $tokenwild === [] ? $tokenlength : min(array_keys($tokenlength));
$indexes_known = $this->indexLengths($length_filter);
- if (!empty($tokenwild)) sort($indexes_known);
+ if ($tokenwild !== []) sort($indexes_known);
// get word IDs
- $wids = array();
+ $wids = [];
foreach ($indexes_known as $ixlen) {
$word_idx = $this->getIndex('w', $ixlen);
// handle exact search
@@ -842,7 +839,7 @@ class Indexer {
return array_values($page_idx);
}
- $pages = array();
+ $pages = [];
$lines = $this->getIndex($metaname.'_i', '');
foreach ($lines as $line) {
$pages = array_merge($pages, $this->parseTuples($page_idx, $line));
@@ -867,7 +864,7 @@ class Indexer {
if ($max < $min)
$max = 0;
- $result = array();
+ $result = [];
if ($key == 'title') {
$index = $this->getIndex('title', '');
@@ -880,7 +877,7 @@ class Indexer {
elseif (!is_null($key)) {
$metaname = idx_cleanName($key);
$index = $this->getIndex($metaname.'_i', '');
- $val_idx = array();
+ $val_idx = [];
foreach ($index as $wid => $line) {
$freq = $this->countTuples($line);
if ($freq >= $min && (!$max || $freq <= $max))
@@ -977,7 +974,7 @@ class Indexer {
protected function getIndex($idx, $suffix) {
global $conf;
$fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
- if (!file_exists($fn)) return array();
+ if (!file_exists($fn)) return [];
return file($fn, FILE_IGNORE_NEW_LINES);
}
@@ -996,7 +993,7 @@ class Indexer {
$fn = $conf['indexdir'].'/'.$idx.$suffix;
$fh = @fopen($fn.'.tmp', 'w');
if (!$fh) return false;
- fwrite($fh, join("\n", $lines));
+ fwrite($fh, implode("\n", $lines));
if (!empty($lines))
fwrite($fh, "\n");
fclose($fh);
@@ -1124,17 +1121,17 @@ class Indexer {
*/
protected function indexLengths($filter) {
global $conf;
- $idx = array();
+ $idx = [];
if (is_array($filter)) {
// testing if index files exist only
$path = $conf['indexdir']."/i";
- foreach ($filter as $key => $value) {
+ foreach (array_keys($filter) as $key) {
if (file_exists($path.$key.'.idx'))
$idx[] = $key;
}
} else {
$lengths = idx_listIndexLengths();
- foreach ($lengths as $key => $length) {
+ foreach ($lengths as $length) {
// keep all the values equal or superior
if ((int)$length >= (int)$filter)
$idx[] = $length;
@@ -1179,12 +1176,12 @@ class Indexer {
* @return array
*/
protected function parseTuples(&$keys, $line) {
- $result = array();
+ $result = [];
if ($line == '') return $result;
$parts = explode(':', $line);
foreach ($parts as $tuple) {
if ($tuple === '') continue;
- list($key, $cnt) = explode('*', $tuple);
+ [$key, $cnt] = explode('*', $tuple);
if (!$cnt) continue;
if (isset($keys[$key])) {
$key = $keys[$key];
@@ -1208,7 +1205,7 @@ class Indexer {
$parts = explode(':', $line);
foreach ($parts as $tuple) {
if ($tuple === '') continue;
- list(/* $pid */, $cnt) = explode('*', $tuple);
+ [, $cnt] = explode('*', $tuple);
$freq += (int)$cnt;
}
return $freq;
diff --git a/inc/Sitemap/Mapper.php b/inc/Sitemap/Mapper.php
index afa1b2881..2b5fcfcb0 100644
--- a/inc/Sitemap/Mapper.php
+++ b/inc/Sitemap/Mapper.php
@@ -8,6 +8,7 @@
namespace dokuwiki\Sitemap;
+use dokuwiki\Extension\Event;
use dokuwiki\HTTP\DokuHTTPClient;
use dokuwiki\Logger;
@@ -36,10 +37,10 @@ class Mapper {
$sitemap = Mapper::getFilePath();
- if(file_exists($sitemap)){
+ if (file_exists($sitemap)) {
if(!is_writable($sitemap)) return false;
- }else{
- if(!is_writable(dirname($sitemap))) return false;
+ } elseif (!is_writable(dirname($sitemap))) {
+ return false;
}
if(@filesize($sitemap) &&
@@ -52,23 +53,23 @@ class Mapper {
$pages = idx_get_indexer()->getPages();
Logger::debug('Sitemapper::generate(): creating sitemap using '.count($pages).' pages');
- $items = array();
+ $items = [];
// build the sitemap items
foreach($pages as $id){
//skip hidden, non existing and restricted files
if(isHiddenPage($id)) continue;
- if(auth_aclcheck($id,'',array()) < AUTH_READ) continue;
+ if(auth_aclcheck($id,'',[]) < AUTH_READ) continue;
$item = Item::createFromID($id);
- if ($item !== null)
+ if ($item instanceof Item)
$items[] = $item;
}
- $eventData = array('items' => &$items, 'sitemap' => &$sitemap);
- $event = new \dokuwiki\Extension\Event('SITEMAP_GENERATE', $eventData);
+ $eventData = ['items' => &$items, 'sitemap' => &$sitemap];
+ $event = new Event('SITEMAP_GENERATE', $eventData);
if ($event->advise_before(true)) {
//save the new sitemap
- $event->result = io_saveFile($sitemap, Mapper::getXML($items));
+ $event->result = io_saveFile($sitemap, (new Mapper())->getXML($items));
}
$event->advise_after();
@@ -83,7 +84,7 @@ class Mapper {
*
* @author Michael Hamann
*/
- private static function getXML($items) {
+ private function getXML($items) {
ob_start();
echo '<?xml version="1.0" encoding="UTF-8"?>'.NL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.NL;
@@ -138,16 +139,17 @@ class Mapper {
$http = new DokuHTTPClient();
$http->timeout = 8;
- $encoded_sitemap_url = urlencode(wl('', array('do' => 'sitemap'), true, '&'));
- $ping_urls = array(
+ $encoded_sitemap_url = urlencode(wl('', ['do' => 'sitemap'], true, '&'));
+ $ping_urls = [
'google' => 'https://www.google.com/ping?sitemap='.$encoded_sitemap_url,
'yandex' => 'https://webmaster.yandex.com/ping?sitemap='.$encoded_sitemap_url
- );
+ ];
- $data = array('ping_urls' => $ping_urls,
- 'encoded_sitemap_url' => $encoded_sitemap_url
- );
- $event = new \dokuwiki\Extension\Event('SITEMAP_PING', $data);
+ $data = [
+ 'ping_urls' => $ping_urls,
+ 'encoded_sitemap_url' => $encoded_sitemap_url
+ ];
+ $event = new Event('SITEMAP_PING', $data);
if ($event->advise_before(true)) {
foreach ($data['ping_urls'] as $name => $url) {
Logger::debug("Sitemapper::PingSearchEngines(): pinging $name");
diff --git a/inc/StyleUtils.php b/inc/StyleUtils.php
index d5a34623a..cf60f635b 100644
--- a/inc/StyleUtils.php
+++ b/inc/StyleUtils.php
@@ -17,7 +17,7 @@ class StyleUtils
/** @var bool $preview preview mode */
protected $preview;
/** @var array default replacements to be merged with custom style configs */
- protected $defaultReplacements = array(
+ protected $defaultReplacements = [
'__text__' => "#000",
'__background__' => "#fff",
'__text_alt__' => "#999",
@@ -26,8 +26,8 @@ class StyleUtils
'__background_neu__' => "#ddd",
'__border__' => "#ccc",
'__highlight__' => "#ff9",
- '__link__' => "#00f",
- );
+ '__link__' => "#00f"
+ ];
/**
* StyleUtils constructor.
@@ -66,7 +66,7 @@ class StyleUtils
global $conf;
global $config_cascade;
- $stylesheets = array(); // mode, file => base
+ $stylesheets = []; // mode, file => base
// guaranteed placeholder => value
$replacements = $this->defaultReplacements;
@@ -84,7 +84,7 @@ class StyleUtils
$combined['stylesheets'] = [];
$combined['replacements'] = [];
- foreach (array('default', 'local', 'protected') as $config_group) {
+ foreach (['default', 'local', 'protected'] as $config_group) {
if (empty($config_cascade['styleini'][$config_group])) continue;
// set proper server dirs
@@ -138,7 +138,7 @@ class StyleUtils
{
global $conf;
if (!file_exists($incbase . $file)) {
- list($extension, $basename) = array_map('strrev', sexplode('.', strrev($file), 2, ''));
+ [$extension, $basename] = array_map('strrev', sexplode('.', strrev($file), 2, ''));
$newExtension = $extension === 'css' ? 'less' : 'css';
if (file_exists($incbase . $basename . '.' . $newExtension)) {
$stylesheets[$mode][$incbase . $basename . '.' . $newExtension] = $webbase;
diff --git a/inc/TaskRunner.php b/inc/TaskRunner.php
index b641fb174..a558a2bb7 100644
--- a/inc/TaskRunner.php
+++ b/inc/TaskRunner.php
@@ -47,12 +47,15 @@ class TaskRunner
$tmp = []; // No event data
$evt = new Event('INDEXER_TASKS_RUN', $tmp);
if ($evt->advise_before()) {
- $this->runIndexer() or
- $this->runSitemapper() or
- $this->sendDigest() or
- $this->runTrimRecentChanges() or
- $this->runTrimRecentChanges(true) or
- $evt->advise_after();
+ if (!(
+ $this->runIndexer() ||
+ $this->runSitemapper() ||
+ $this->sendDigest() ||
+ $this->runTrimRecentChanges() ||
+ $this->runTrimRecentChanges(true))
+ ) {
+ $evt->advise_after();
+ }
}
if(!$output) {
@@ -120,7 +123,8 @@ class TaskRunner
$trim_time = time() - $conf['recent_days'] * 86400;
$out_lines = [];
$old_lines = [];
- for ($i = 0; $i < count($lines); $i++) {
+ $counter = count($lines);
+ for ($i = 0; $i < $counter; $i++) {
$log = ChangeLog::parseLogLine($lines[$i]);
if ($log === false) {
continue; // discard junk
diff --git a/inc/actions.php b/inc/actions.php
index 8c993ef98..87017f8e0 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -5,7 +5,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\ActionRouter;
use dokuwiki\Extension\Event;
/**
@@ -13,9 +13,9 @@ use dokuwiki\Extension\Event;
*/
function act_dispatch(){
// always initialize on first dispatch (test request may dispatch mutliple times on one request)
- $router = \dokuwiki\ActionRouter::getInstance(true);
+ $router = ActionRouter::getInstance(true);
- $headers = array('Content-Type: text/html; charset=utf-8');
+ $headers = ['Content-Type: text/html; charset=utf-8'];
Event::createAndTrigger('ACTION_HEADERS_SEND',$headers,'act_sendheaders');
// clear internal variables
@@ -49,7 +49,7 @@ function act_sendheaders($headers) {
function act_clean($act){
// check if the action was given as array key
if(is_array($act)){
- list($act) = array_keys($act);
+ [$act] = array_keys($act);
}
// no action given
diff --git a/inc/auth.php b/inc/auth.php
index 1dd2b2bdd..0fae22984 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -8,7 +8,8 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use phpseclib\Crypt\AES;
+use dokuwiki\Utf8\PhpString;
use dokuwiki\Extension\AuthPlugin;
use dokuwiki\Extension\Event;
use dokuwiki\Extension\PluginController;
@@ -37,7 +38,7 @@ function auth_setup() {
global $lang;
/* @var PluginController $plugin_controller */
global $plugin_controller;
- $AUTH_ACL = array();
+ $AUTH_ACL = [];
if(!$conf['useacl']) return false;
@@ -71,7 +72,7 @@ function auth_setup() {
$header = $INPUT->server->str('HTTP_AUTHORIZATION') ?: $INPUT->server->str('REDIRECT_HTTP_AUTHORIZATION');
if(preg_match( '~^Basic ([a-z\d/+]*={0,2})$~i', $header, $matches )) {
$userpass = explode(':', base64_decode($matches[1]));
- list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = $userpass;
+ [$_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']] = $userpass;
}
// if no credentials were given try to use HTTP auth (for SSO)
@@ -95,12 +96,12 @@ function auth_setup() {
if ($ok === null) {
// external trust mechanism not in place, or returns no result,
// then attempt auth_login
- $evdata = array(
+ $evdata = [
'user' => $INPUT->str('u'),
'password' => $INPUT->str('p'),
'sticky' => $INPUT->bool('r'),
'silent' => $INPUT->bool('http_credentials')
- );
+ ];
Event::createAndTrigger('AUTH_LOGIN_CHECK', $evdata, 'auth_login_wrapper');
}
@@ -123,15 +124,15 @@ function auth_loadACL() {
/* @var Input $INPUT */
global $INPUT;
- if(!is_readable($config_cascade['acl']['default'])) return array();
+ if(!is_readable($config_cascade['acl']['default'])) return [];
$acl = file($config_cascade['acl']['default']);
- $out = array();
+ $out = [];
foreach($acl as $line) {
$line = trim($line);
if(empty($line) || ($line[0] == '#')) continue; // skip blank lines & comments
- list($id,$rest) = preg_split('/[ \t]+/',$line,2);
+ [$id, $rest] = preg_split('/[ \t]+/',$line,2);
// substitute user wildcard first (its 1:1)
if(strstr($line, '%USER%')){
@@ -213,8 +214,6 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
/* @var Input $INPUT */
global $INPUT;
- $sticky ? $sticky = true : $sticky = false; //sanity check
-
if(!$auth) return false;
if(!empty($user)) {
@@ -236,7 +235,7 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
}
} else {
// read cookie information
- list($user, $sticky, $pass) = auth_getCookie();
+ [$user, $sticky, $pass] = auth_getCookie();
if($user && $pass) {
// we got a cookie - see if we can trust it
@@ -366,7 +365,7 @@ function auth_random($min, $max) {
*/
function auth_encrypt($data, $secret) {
$iv = auth_randombytes(16);
- $cipher = new \phpseclib\Crypt\AES();
+ $cipher = new AES();
$cipher->setPassword($secret);
/*
@@ -389,7 +388,7 @@ function auth_encrypt($data, $secret) {
*/
function auth_decrypt($ciphertext, $secret) {
$iv = substr($ciphertext, 0, 16);
- $cipher = new \phpseclib\Crypt\AES();
+ $cipher = new AES();
$cipher->setPassword($secret);
$cipher->setIV($iv);
@@ -539,11 +538,11 @@ function auth_isMember($memberlist, $user, array $groups) {
// clean user and groups
if(!$auth->isCaseSensitive()) {
- $user = \dokuwiki\Utf8\PhpString::strtolower($user);
- $groups = array_map([\dokuwiki\Utf8\PhpString::class, 'strtolower'], $groups);
+ $user = PhpString::strtolower($user);
+ $groups = array_map([PhpString::class, 'strtolower'], $groups);
}
$user = $auth->cleanUser($user);
- $groups = array_map(array($auth, 'cleanGroup'), $groups);
+ $groups = array_map([$auth, 'cleanGroup'], $groups);
// extract the memberlist
$members = explode(',', $memberlist);
@@ -554,7 +553,7 @@ function auth_isMember($memberlist, $user, array $groups) {
// compare cleaned values
foreach($members as $member) {
if($member == '@ALL' ) return true;
- if(!$auth->isCaseSensitive()) $member = \dokuwiki\Utf8\PhpString::strtolower($member);
+ if(!$auth->isCaseSensitive()) $member = PhpString::strtolower($member);
if($member[0] == '@') {
$member = $auth->cleanGroup(substr($member, 1));
if(in_array($member, $groups)) return true;
@@ -585,7 +584,7 @@ function auth_quickaclcheck($id) {
global $INPUT;
# if no ACL is used always return upload rights
if(!$conf['useacl']) return AUTH_UPLOAD;
- return auth_aclcheck($id, $INPUT->server->str('REMOTE_USER'), is_array($USERINFO) ? $USERINFO['grps'] : array());
+ return auth_aclcheck($id, $INPUT->server->str('REMOTE_USER'), is_array($USERINFO) ? $USERINFO['grps'] : []);
}
/**
@@ -600,11 +599,11 @@ function auth_quickaclcheck($id) {
* @return int permission level
*/
function auth_aclcheck($id, $user, $groups) {
- $data = array(
+ $data = [
'id' => $id ?? '',
'user' => $user,
'groups' => $groups
- );
+ ];
return Event::createAndTrigger('AUTH_ACL_CHECK', $data, 'auth_aclcheck_cb');
}
@@ -635,7 +634,7 @@ function auth_aclcheck_cb($data) {
if(!is_array($AUTH_ACL)) return AUTH_NONE;
//make sure groups is an array
- if(!is_array($groups)) $groups = array();
+ if(!is_array($groups)) $groups = [];
//if user is superuser or in superusergroup return 255 (acl_admin)
if(auth_isadmin($user, $groups)) {
@@ -643,11 +642,11 @@ function auth_aclcheck_cb($data) {
}
if(!$auth->isCaseSensitive()) {
- $user = \dokuwiki\Utf8\PhpString::strtolower($user);
- $groups = array_map([\dokuwiki\Utf8\PhpString::class, 'strtolower'], $groups);
+ $user = PhpString::strtolower($user);
+ $groups = array_map([PhpString::class, 'strtolower'], $groups);
}
$user = auth_nameencode($auth->cleanUser($user));
- $groups = array_map(array($auth, 'cleanGroup'), (array) $groups);
+ $groups = array_map([$auth, 'cleanGroup'], $groups);
//prepend groups with @ and nameencode
foreach($groups as &$group) {
@@ -670,7 +669,7 @@ function auth_aclcheck_cb($data) {
$match = preg_replace('/#.*$/', '', $match); //ignore comments
$acl = preg_split('/[ \t]+/', $match);
if(!$auth->isCaseSensitive() && $acl[1] !== '@ALL') {
- $acl[1] = \dokuwiki\Utf8\PhpString::strtolower($acl[1]);
+ $acl[1] = PhpString::strtolower($acl[1]);
}
if(!in_array($acl[1], $groups)) {
continue;
@@ -700,7 +699,7 @@ function auth_aclcheck_cb($data) {
$match = preg_replace('/#.*$/', '', $match); //ignore comments
$acl = preg_split('/[ \t]+/', $match);
if(!$auth->isCaseSensitive() && $acl[1] !== '@ALL') {
- $acl[1] = \dokuwiki\Utf8\PhpString::strtolower($acl[1]);
+ $acl[1] = PhpString::strtolower($acl[1]);
}
if(!in_array($acl[1], $groups)) {
continue;
@@ -799,10 +798,10 @@ function auth_nameencode_callback($matches) {
* @return string pronouncable password
*/
function auth_pwgen($foruser = '') {
- $data = array(
+ $data = [
'password' => '',
'foruser' => $foruser
- );
+ ];
$evt = new Event('AUTH_PASSWORD_GENERATE', $data);
if($evt->advise_before(true)) {
@@ -846,11 +845,11 @@ function auth_sendPassword($user, $password) {
if(!$userinfo['mail']) return false;
$text = rawLocale('password');
- $trep = array(
+ $trep = [
'FULLNAME' => $userinfo['name'],
'LOGIN' => $user,
'PASSWORD' => $password
- );
+ ];
$mail = new Mailer();
$mail->to($mail->getCleanName($userinfo['name']).' <'.$userinfo['mail'].'>');
@@ -907,7 +906,7 @@ function register() {
}
//okay try to create the user
- if(!$auth->triggerUserMod('create', array($login, $pass, $fullname, $email))) {
+ if(!$auth->triggerUserMod('create', [$login, $pass, $fullname, $email])) {
msg($lang['regfail'], -1);
return false;
}
@@ -953,7 +952,7 @@ function updateprofile() {
return false;
}
- $changes = array();
+ $changes = [];
$changes['pass'] = $INPUT->post->str('newpass');
$changes['name'] = $INPUT->post->str('fullname');
$changes['mail'] = $INPUT->post->str('email');
@@ -988,7 +987,7 @@ function updateprofile() {
if(!$auth->canDo('modPass')) unset($changes['pass']);
// anything to do?
- if(!count($changes)) {
+ if($changes === []) {
msg($lang['profnochange'], -1);
return false;
}
@@ -1000,14 +999,14 @@ function updateprofile() {
}
}
- if(!$auth->triggerUserMod('modify', array($INPUT->server->str('REMOTE_USER'), &$changes))) {
+ if(!$auth->triggerUserMod('modify', [$INPUT->server->str('REMOTE_USER'), &$changes])) {
msg($lang['proffail'], -1);
return false;
}
if($changes['pass']) {
// update cookie and session with the changed data
- list( /*user*/, $sticky, /*pass*/) = auth_getCookie();
+ [, $sticky, ] = auth_getCookie();
$pass = auth_encrypt($changes['pass'], auth_cookiesalt(!$sticky, true));
auth_setCookie($INPUT->server->str('REMOTE_USER'), $pass, (bool) $sticky);
} else {
@@ -1055,9 +1054,9 @@ function auth_deleteprofile(){
}
}
- $deleted = array();
+ $deleted = [];
$deleted[] = $INPUT->server->str('REMOTE_USER');
- if($auth->triggerUserMod('delete', array($deleted))) {
+ if($auth->triggerUserMod('delete', [$deleted])) {
// force and immediate logout including removing the sticky cookie
auth_logoff();
return true;
@@ -1130,7 +1129,7 @@ function act_resendpwd() {
}
// change it
- if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) {
+ if(!$auth->triggerUserMod('modify', [$user, ['pass' => $pass]])) {
msg($lang['proffail'], -1);
return false;
}
@@ -1138,7 +1137,7 @@ function act_resendpwd() {
} else { // autogenerate the password and send by mail
$pass = auth_pwgen($user);
- if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) {
+ if(!$auth->triggerUserMod('modify', [$user, ['pass' => $pass]])) {
msg($lang['proffail'], -1);
return false;
}
@@ -1174,16 +1173,12 @@ function act_resendpwd() {
// generate auth token
$token = md5(auth_randombytes(16)); // random secret
$tfile = $conf['cachedir'].'/'.$token[0].'/'.$token.'.pwauth';
- $url = wl('', array('do'=> 'resendpwd', 'pwauth'=> $token), true, '&');
+ $url = wl('', ['do'=> 'resendpwd', 'pwauth'=> $token], true, '&');
io_saveFile($tfile, $user);
$text = rawLocale('pwconfirm');
- $trep = array(
- 'FULLNAME' => $userinfo['name'],
- 'LOGIN' => $user,
- 'CONFIRM' => $url
- );
+ $trep = ['FULLNAME' => $userinfo['name'], 'LOGIN' => $user, 'CONFIRM' => $url];
$mail = new Mailer();
$mail->to($userinfo['name'].' <'.$userinfo['mail'].'>');
@@ -1287,13 +1282,13 @@ function auth_setCookie($user, $pass, $sticky) {
*/
function auth_getCookie() {
if(!isset($_COOKIE[DOKU_COOKIE])) {
- return array(null, null, null);
+ return [null, null, null];
}
- list($user, $sticky, $pass) = sexplode('|', $_COOKIE[DOKU_COOKIE], 3, '');
+ [$user, $sticky, $pass] = sexplode('|', $_COOKIE[DOKU_COOKIE], 3, '');
$sticky = (bool) $sticky;
$pass = base64_decode($pass);
$user = base64_decode($user);
- return array($user, $sticky, $pass);
+ return [$user, $sticky, $pass];
}
//Setup VIM: ex: et ts=2 :
diff --git a/inc/cache.php b/inc/cache.php
index b5793c263..832e45e1a 100644
--- a/inc/cache.php
+++ b/inc/cache.php
@@ -1,5 +1,6 @@
<?php
// phpcs:ignoreFile
+use dokuwiki\Cache\Cache;
use dokuwiki\Cache\CacheParser;
use dokuwiki\Cache\CacheInstructions;
use dokuwiki\Cache\CacheRenderer;
@@ -8,11 +9,11 @@ use dokuwiki\Debug\DebugHelper;
/**
* @deprecated since 2019-02-02 use \dokuwiki\Cache\Cache instead!
*/
-class cache extends \dokuwiki\Cache\Cache
+class cache extends Cache
{
public function __construct($key, $ext)
{
- DebugHelper::dbgDeprecatedFunction(dokuwiki\Cache\Cache::class);
+ DebugHelper::dbgDeprecatedFunction(Cache::class);
parent::__construct($key, $ext);
}
}
@@ -20,7 +21,7 @@ class cache extends \dokuwiki\Cache\Cache
/**
* @deprecated since 2019-02-02 use \dokuwiki\Cache\CacheParser instead!
*/
-class cache_parser extends \dokuwiki\Cache\CacheParser
+class cache_parser extends CacheParser
{
public function __construct($id, $file, $mode)
@@ -34,7 +35,7 @@ class cache_parser extends \dokuwiki\Cache\CacheParser
/**
* @deprecated since 2019-02-02 use \dokuwiki\Cache\CacheRenderer instead!
*/
-class cache_renderer extends \dokuwiki\Cache\CacheRenderer
+class cache_renderer extends CacheRenderer
{
public function __construct($id, $file, $mode)
@@ -47,7 +48,7 @@ class cache_renderer extends \dokuwiki\Cache\CacheRenderer
/**
* @deprecated since 2019-02-02 use \dokuwiki\Cache\CacheInstructions instead!
*/
-class cache_instructions extends \dokuwiki\Cache\CacheInstructions
+class cache_instructions extends CacheInstructions
{
public function __construct($id, $file)
{
diff --git a/inc/changelog.php b/inc/changelog.php
index fb1184777..9c14fc52c 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -5,7 +5,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\ChangeLog\MediaChangeLog;
use dokuwiki\ChangeLog\ChangeLog;
use dokuwiki\File\PageFile;
@@ -58,14 +58,14 @@ function addLogEntry(
global $INPUT;
// check for special flags as keys
- if (!is_array($flags)) $flags = array();
+ if (!is_array($flags)) $flags = [];
$flagExternalEdit = isset($flags['ExternalEdit']);
$id = cleanid($id);
if (!$date) $date = time(); //use current time if none supplied
- $remote = (!$flagExternalEdit) ? clientIP(true) : '127.0.0.1';
- $user = (!$flagExternalEdit) ? $INPUT->server->str('REMOTE_USER') : '';
+ $remote = ($flagExternalEdit) ? '127.0.0.1' : clientIP(true);
+ $user = ($flagExternalEdit) ? '' : $INPUT->server->str('REMOTE_USER');
$sizechange = ($sizechange === null) ? '' : (int)$sizechange;
// update changelog file and get the added entry that is also to be stored in metadata
@@ -116,18 +116,18 @@ function addMediaLogEntry(
global $INPUT;
// check for special flags as keys
- if (!is_array($flags)) $flags = array();
+ if (!is_array($flags)) $flags = [];
$flagExternalEdit = isset($flags['ExternalEdit']);
$id = cleanid($id);
if (!$date) $date = time(); //use current time if none supplied
- $remote = (!$flagExternalEdit) ? clientIP(true) : '127.0.0.1';
- $user = (!$flagExternalEdit) ? $INPUT->server->str('REMOTE_USER') : '';
+ $remote = ($flagExternalEdit) ? '127.0.0.1' : clientIP(true);
+ $user = ($flagExternalEdit) ? '' : $INPUT->server->str('REMOTE_USER');
$sizechange = ($sizechange === null) ? '' : (int)$sizechange;
// update changelog file and get the added entry
- (new \dokuwiki\ChangeLog\MediaChangeLog($id, 1024))->addLogEntry([
+ (new MediaChangeLog($id, 1024))->addLogEntry([
'date' => $date,
'ip' => $remote,
'type' => $type,
@@ -163,7 +163,7 @@ function addMediaLogEntry(
*/
function getRecents($first, $num, $ns = '', $flags = 0) {
global $conf;
- $recent = array();
+ $recent = [];
$count = 0;
if (!$num)
@@ -176,21 +176,21 @@ function getRecents($first, $num, $ns = '', $flags = 0) {
$lines = @file($conf['changelog']) ?: [];
}
if (!is_array($lines)) {
- $lines = array();
+ $lines = [];
}
$lines_position = count($lines) - 1;
$media_lines_position = 0;
- $media_lines = array();
+ $media_lines = [];
if ($flags & RECENTS_MEDIA_PAGES_MIXED) {
$media_lines = @file($conf['media_changelog']) ?: [];
if (!is_array($media_lines)) {
- $media_lines = array();
+ $media_lines = [];
}
$media_lines_position = count($media_lines) - 1;
}
- $seen = array(); // caches seen lines, _handleRecent() skips them
+ $seen = []; // caches seen lines, _handleRecent() skips them
// handle lines
while ($lines_position >= 0 || (($flags & RECENTS_MEDIA_PAGES_MIXED) && $media_lines_position >= 0)) {
@@ -261,7 +261,7 @@ function getRecents($first, $num, $ns = '', $flags = 0) {
*/
function getRecentsSince($from, $to = null, $ns = '', $flags = 0) {
global $conf;
- $recent = array();
+ $recent = [];
if ($to && $to < $from)
return $recent;
@@ -278,7 +278,7 @@ function getRecentsSince($from, $to = null, $ns = '', $flags = 0) {
$lines = array_reverse($lines);
// handle lines
- $seen = array(); // caches seen lines, _handleRecent() skips them
+ $seen = []; // caches seen lines, _handleRecent() skips them
foreach ($lines as $line) {
$rec = _handleRecent($line, $ns, $flags, $seen);
diff --git a/inc/common.php b/inc/common.php
index dacd0849e..c85bd1a6c 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -5,7 +5,11 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\PassHash;
+use dokuwiki\Draft;
+use dokuwiki\Utf8\Clean;
+use dokuwiki\Utf8\PhpString;
+use dokuwiki\Utf8\Conversion;
use dokuwiki\Cache\CacheInstructions;
use dokuwiki\Cache\CacheRenderer;
use dokuwiki\ChangeLog\PageChangeLog;
@@ -68,7 +72,7 @@ function sexplode($separator, $string, $limit, $default = null)
*/
function blank(&$in, $trim = false) {
if(is_null($in)) return true;
- if(is_array($in)) return empty($in);
+ if(is_array($in)) return $in === [];
if($in === "\0") return true;
if($trim && trim($in) === '') return true;
if(strlen($in) > 0) return false;
@@ -119,7 +123,7 @@ function getSecurityToken() {
// CSRF checks are only for logged in users - do not generate for anonymous
if(trim($user) == '' || trim($session) == '') return '';
- return \dokuwiki\PassHash::hmac('md5', $session.$user, auth_cookiesalt());
+ return PassHash::hmac('md5', $session.$user, auth_cookiesalt());
}
/**
@@ -172,7 +176,7 @@ function basicinfo($id, $htmlClient=true){
global $INPUT;
// set info about manager/admin status.
- $info = array();
+ $info = [];
$info['isadmin'] = false;
$info['ismanager'] = false;
if($INPUT->server->has('REMOTE_USER')) {
@@ -269,16 +273,14 @@ function pageinfo() {
$pagelog = new PageChangeLog($ID, 1024);
if ($REV) {
$revinfo = $pagelog->getRevisionInfo($REV);
+ } elseif (!empty($info['meta']['last_change']) && is_array($info['meta']['last_change'])) {
+ $revinfo = $info['meta']['last_change'];
} else {
- if (!empty($info['meta']['last_change']) && is_array($info['meta']['last_change'])) {
- $revinfo = $info['meta']['last_change'];
- } else {
- $revinfo = $pagelog->getRevisionInfo($info['lastmod']);
- // cache most recent changelog line in metadata if missing and still valid
- if ($revinfo !== false) {
- $info['meta']['last_change'] = $revinfo;
- p_set_metadata($ID, array('last_change' => $revinfo));
- }
+ $revinfo = $pagelog->getRevisionInfo($info['lastmod']);
+ // cache most recent changelog line in metadata if missing and still valid
+ if ($revinfo !== false) {
+ $info['meta']['last_change'] = $revinfo;
+ p_set_metadata($ID, ['last_change' => $revinfo]);
}
}
//and check for an external edit
@@ -286,7 +288,7 @@ function pageinfo() {
// cached changelog line no longer valid
$revinfo = false;
$info['meta']['last_change'] = $revinfo;
- p_set_metadata($ID, array('last_change' => $revinfo));
+ p_set_metadata($ID, ['last_change' => $revinfo]);
}
if ($revinfo !== false) {
@@ -305,7 +307,7 @@ function pageinfo() {
}
// draft
- $draft = new \dokuwiki\Draft($ID, $info['client']);
+ $draft = new Draft($ID, $info['client']);
if ($draft->isDraftAvailable()) {
$info['draft'] = $draft->getDraftFilename();
}
@@ -412,7 +414,7 @@ function breadcrumbs() {
global $INFO;
//first visit?
- $crumbs = isset($_SESSION[DOKU_COOKIE]['bc']) ? $_SESSION[DOKU_COOKIE]['bc'] : array();
+ $crumbs = $_SESSION[DOKU_COOKIE]['bc'] ?? [];
//we only save on show and existing visible readable wiki documents
$file = wikiFN($ID);
if($ACT != 'show' || $INFO['perm'] < AUTH_READ || isHiddenPage($ID) || !file_exists($file)) {
@@ -607,8 +609,8 @@ function ml($id = '', $more = '', $direct = true, $sep = '&amp;', $abs = false)
if(is_array($more)) {
// add token for resized images
- $w = isset($more['w']) ? $more['w'] : null;
- $h = isset($more['h']) ? $more['h'] : null;
+ $w = $more['w'] ?? null;
+ $h = $more['h'] ?? null;
if($w || $h || $isexternalimage){
$more['tok'] = media_get_token($id, $w, $h);
}
@@ -620,9 +622,9 @@ function ml($id = '', $more = '', $direct = true, $sep = '&amp;', $abs = false)
if(isset($more['rev']) && !$more['rev']) unset($more['rev']);
$more = buildURLparams($more, $sep);
} else {
- $matches = array();
+ $matches = [];
if (preg_match_all('/\b(w|h)=(\d*)\b/',$more,$matches,PREG_SET_ORDER) || $isexternalimage){
- $resize = array('w'=>0, 'h'=>0);
+ $resize = ['w'=>0, 'h'=>0];
foreach ($matches as $match){
$resize[$match[1]] = $match[2];
}
@@ -651,31 +653,27 @@ function ml($id = '', $more = '', $direct = true, $sep = '&amp;', $abs = false)
$id = idfilter($id);
// decide on scriptname
- if($direct) {
+ if ($direct) {
if($conf['userewrite'] == 1) {
$script = '_media';
} else {
$script = 'lib/exe/fetch.php';
}
+ } elseif ($conf['userewrite'] == 1) {
+ $script = '_detail';
} else {
- if($conf['userewrite'] == 1) {
- $script = '_detail';
- } else {
- $script = 'lib/exe/detail.php';
- }
+ $script = 'lib/exe/detail.php';
}
// build URL based on rewrite mode
- if($conf['userewrite']) {
+ if ($conf['userewrite']) {
$xlink .= $script.'/'.$id;
if($more) $xlink .= '?'.$more;
+ } elseif ($more) {
+ $xlink .= $script.'?'.$more;
+ $xlink .= $sep.'media='.$id;
} else {
- if($more) {
- $xlink .= $script.'?'.$more;
- $xlink .= $sep.'media='.$id;
- } else {
- $xlink .= $script.'?media='.$id;
- }
+ $xlink .= $script.'?media='.$id;
}
return $xlink;
@@ -748,7 +746,7 @@ function checkwordblock($text = '') {
$chunksize = 200;
while($blocks = array_splice($wordblocks, 0, $chunksize)) {
- $re = array();
+ $re = [];
// build regexp from blocks
foreach($blocks as $block) {
$block = preg_replace('/#.*$/', '', $block);
@@ -756,9 +754,9 @@ function checkwordblock($text = '') {
if(empty($block)) continue;
$re[] = $block;
}
- if(count($re) && preg_match('#('.join('|', $re).')#si', $text, $matches)) {
+ if(count($re) && preg_match('#('.implode('|', $re).')#si', $text, $matches)) {
// prepare event data
- $data = array();
+ $data = [];
$data['matches'] = $matches;
$data['userinfo']['ip'] = $INPUT->server->str('REMOTE_ADDR');
if($INPUT->server->str('REMOTE_USER')) {
@@ -766,9 +764,7 @@ function checkwordblock($text = '') {
$data['userinfo']['name'] = $INFO['userinfo']['name'];
$data['userinfo']['mail'] = $INFO['userinfo']['mail'];
}
- $callback = function () {
- return true;
- };
+ $callback = static fn() => true;
return Event::createAndTrigger('COMMON_WORDBLOCK_BLOCKED', $data, $callback, true);
}
}
@@ -794,7 +790,7 @@ function clientIP($single = false) {
/* @var Input $INPUT */
global $INPUT, $conf;
- $ip = array();
+ $ip = [];
$ip[] = $INPUT->server->str('REMOTE_ADDR');
if($INPUT->server->str('HTTP_X_FORWARDED_FOR')) {
$ip = array_merge($ip, explode(',', str_replace(' ', '', $INPUT->server->str('HTTP_X_FORWARDED_FOR'))));
@@ -811,9 +807,9 @@ function clientIP($single = false) {
}
}
$ip = array_values(array_unique($ip));
- if(empty($ip) || !$ip[0]) $ip[0] = '0.0.0.0'; // for some strange reason we don't have a IP
+ if($ip === [] || !$ip[0]) $ip[0] = '0.0.0.0'; // for some strange reason we don't have a IP
- if(!$single) return join(',', $ip);
+ if(!$single) return implode(',', $ip);
// skip trusted local addresses
foreach($ip as $i) {
@@ -849,7 +845,7 @@ function clientismobile() {
if(!$INPUT->server->has('HTTP_USER_AGENT')) return false;
- $uamatches = join(
+ $uamatches = implode(
'|',
[
'midp', 'j2me', 'avantg', 'docomo', 'novarra', 'palmos', 'palmsource', '240x320', 'opwv',
@@ -892,14 +888,14 @@ function gethostsbyaddrs($ips) {
global $conf;
if(!$conf['dnslookups']) return $ips;
- $hosts = array();
+ $hosts = [];
$ips = explode(',', $ips);
if(is_array($ips)) {
foreach($ips as $ip) {
$hosts[] = gethostbyaddr(trim($ip));
}
- return join(',', $hosts);
+ return implode(',', $hosts);
} else {
return gethostbyaddr(trim($ips));
}
@@ -932,8 +928,8 @@ function checklock($id) {
}
//my own lock
- @list($ip, $session) = explode("\n", io_readFile($lock));
- if($ip == $INPUT->server->str('REMOTE_USER') || (session_id() && $session == session_id())) {
+ @[$ip, $session] = explode("\n", io_readFile($lock));
+ if($ip == $INPUT->server->str('REMOTE_USER') || (session_id() && $session === session_id())) {
return false;
}
@@ -978,7 +974,7 @@ function unlock($id) {
$lock = wikiLockFN($id);
if(file_exists($lock)) {
- @list($ip, $session) = explode("\n", io_readFile($lock));
+ @[$ip, $session] = explode("\n", io_readFile($lock));
if($ip == $INPUT->server->str('REMOTE_USER') || $session == session_id()) {
@unlink($lock);
return true;
@@ -1004,7 +1000,7 @@ function cleanText($text) {
// if the text is not valid UTF-8 we simply assume latin1
// this won't break any worse than it breaks with the wrong encoding
// but might actually fix the problem in many cases
- if(!\dokuwiki\Utf8\Clean::isUtf8($text)) $text = utf8_encode($text);
+ if(!Clean::isUtf8($text)) $text = utf8_encode($text);
return $text;
}
@@ -1066,12 +1062,12 @@ function pageTemplate($id) {
if(is_array($id)) $id = $id[0];
// prepare initial event data
- $data = array(
+ $data = [
'id' => $id, // the id of the page to be created
'tpl' => '', // the text used as template
'tplfile' => '', // the file above text was/should be loaded from
- 'doreplace' => true // should wildcard replacements be done on the text?
- );
+ 'doreplace' => true,
+ ];
$evt = new Event('COMMON_PAGETPL_LOAD', $data);
if($evt->advise_before(true)) {
@@ -1133,52 +1129,51 @@ function parsePageTemplate(&$data) {
$page = strtr($file, $conf['sepchar'], ' ');
$tpl = str_replace(
- array(
- '@ID@',
- '@NS@',
- '@CURNS@',
- '@!CURNS@',
- '@!!CURNS@',
- '@!CURNS!@',
- '@FILE@',
- '@!FILE@',
- '@!FILE!@',
- '@PAGE@',
- '@!PAGE@',
- '@!!PAGE@',
- '@!PAGE!@',
- '@USER@',
- '@NAME@',
- '@MAIL@',
- '@DATE@',
- ),
- array(
- $id,
- getNS($id),
- curNS($id),
- \dokuwiki\Utf8\PhpString::ucfirst(curNS($id)),
- \dokuwiki\Utf8\PhpString::ucwords(curNS($id)),
- \dokuwiki\Utf8\PhpString::strtoupper(curNS($id)),
- $file,
- \dokuwiki\Utf8\PhpString::ucfirst($file),
- \dokuwiki\Utf8\PhpString::strtoupper($file),
- $page,
- \dokuwiki\Utf8\PhpString::ucfirst($page),
- \dokuwiki\Utf8\PhpString::ucwords($page),
- \dokuwiki\Utf8\PhpString::strtoupper($page),
- $INPUT->server->str('REMOTE_USER'),
- $USERINFO ? $USERINFO['name'] : '',
- $USERINFO ? $USERINFO['mail'] : '',
- $conf['dformat'],
- ), $tpl
+ [
+ '@ID@',
+ '@NS@',
+ '@CURNS@',
+ '@!CURNS@',
+ '@!!CURNS@',
+ '@!CURNS!@',
+ '@FILE@',
+ '@!FILE@',
+ '@!FILE!@',
+ '@PAGE@',
+ '@!PAGE@',
+ '@!!PAGE@',
+ '@!PAGE!@',
+ '@USER@',
+ '@NAME@',
+ '@MAIL@',
+ '@DATE@'
+ ],
+ [
+ $id,
+ getNS($id),
+ curNS($id),
+ PhpString::ucfirst(curNS($id)),
+ PhpString::ucwords(curNS($id)),
+ PhpString::strtoupper(curNS($id)),
+ $file,
+ PhpString::ucfirst($file),
+ PhpString::strtoupper($file),
+ $page,
+ PhpString::ucfirst($page),
+ PhpString::ucwords($page),
+ PhpString::strtoupper($page),
+ $INPUT->server->str('REMOTE_USER'),
+ $USERINFO ? $USERINFO['name'] : '',
+ $USERINFO ? $USERINFO['mail'] : '',
+ $conf['dformat']
+ ],
+ $tpl
);
// we need the callback to work around strftime's char limit
$tpl = preg_replace_callback(
'/%./',
- function ($m) {
- return dformat(null, $m[0]);
- },
+ static fn($m) => dformat(null, $m[0]),
$tpl
);
$data['tpl'] = $tpl;
@@ -1204,12 +1199,12 @@ function rawWikiSlices($range, $id, $rev = '') {
$text = io_readWikiPage(wikiFN($id, $rev), $id, $rev);
// Parse range
- list($from, $to) = sexplode('-', $range, 2);
+ [$from, $to] = sexplode('-', $range, 2);
// Make range zero-based, use defaults if marker is missing
- $from = !$from ? 0 : ($from - 1);
- $to = !$to ? strlen($text) : ($to - 1);
+ $from = $from ? $from - 1 : (0);
+ $to = $to ? $to - 1 : (strlen($text));
- $slices = array();
+ $slices = [];
$slices[0] = substr($text, 0, $from);
$slices[1] = substr($text, $from, $to - $from);
$slices[2] = substr($text, $to);
@@ -1283,7 +1278,7 @@ function saveWikiText($id, $text, $summary, $minor = false) {
if(!$data) return; // save was cancelled (for no changes or by a plugin)
// send notify mails
- list('oldRevision' => $rev, 'newRevision' => $new_rev, 'summary' => $summary) = $data;
+ ['oldRevision' => $rev, 'newRevision' => $new_rev, 'summary' => $summary] = $data;
notify($id, 'admin', $rev, $summary, $minor, $new_rev);
notify($id, 'subscribers', $rev, $summary, $minor, $new_rev);
@@ -1325,7 +1320,7 @@ function saveOldRevision($id) {
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace = array(), $current_rev = false) {
+function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace = [], $current_rev = false) {
global $conf;
/* @var Input $INPUT */
global $INPUT;
@@ -1338,10 +1333,10 @@ function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace =
} elseif ($who == 'subscribers') {
if (!actionOK('subscribe')) return false; //subscribers enabled?
if ($conf['useacl'] && $INPUT->server->str('REMOTE_USER') && $minor) return false; //skip minors
- $data = array('id' => $id, 'addresslist' => '', 'self' => false, 'replacements' => $replace);
+ $data = ['id' => $id, 'addresslist' => '', 'self' => false, 'replacements' => $replace];
Event::createAndTrigger(
'COMMON_NOTIFY_ADDRESSLIST', $data,
- array(new SubscriberManager(), 'notifyAddresses')
+ [new SubscriberManager(), 'notifyAddresses']
);
$to = $data['addresslist'];
if (empty($to)) return false;
@@ -1376,7 +1371,7 @@ function getGoogleQuery() {
if(!array_key_exists('host', $url)) return '';
if(!preg_match('/(google|bing|yahoo|ask|duckduckgo|babylon|aol|yandex)/',$url['host'])) return '';
- $query = array();
+ $query = [];
if(!array_key_exists('query', $url)) return '';
parse_str($url['query'], $query);
@@ -1409,7 +1404,7 @@ function getGoogleQuery() {
* @version 1.0.0
*/
function filesize_h($size, $dec = 1) {
- $sizes = array('B', 'KB', 'MB', 'GB');
+ $sizes = ['B', 'KB', 'MB', 'GB'];
$count = count($sizes);
$i = 0;
@@ -1509,11 +1504,11 @@ function obfuscate($email) {
switch($conf['mailguard']) {
case 'visible' :
- $obfuscate = array('@' => ' [at] ', '.' => ' [dot] ', '-' => ' [dash] ');
+ $obfuscate = ['@' => ' [at] ', '.' => ' [dot] ', '-' => ' [dash] '];
return strtr($email, $obfuscate);
case 'hex' :
- return \dokuwiki\Utf8\Conversion::toHtml($email, true);
+ return Conversion::toHtml($email, true);
case 'none' :
default :
@@ -1548,16 +1543,16 @@ function unslash($string, $char = "'") {
function php_to_byte($value) {
switch (strtoupper(substr($value,-1))) {
case 'G':
- $ret = intval(substr($value, 0, -1)) * 1024 * 1024 * 1024;
+ $ret = (int) substr($value, 0, -1) * 1024 * 1024 * 1024;
break;
case 'M':
- $ret = intval(substr($value, 0, -1)) * 1024 * 1024;
+ $ret = (int) substr($value, 0, -1) * 1024 * 1024;
break;
case 'K':
- $ret = intval(substr($value, 0, -1)) * 1024;
+ $ret = (int) substr($value, 0, -1) * 1024;
break;
default:
- $ret = intval($value);
+ $ret = (int) $value;
break;
}
return $ret;
@@ -1589,15 +1584,15 @@ function preg_quote_cb($string) {
* @return string
*/
function shorten($keep, $short, $max, $min = 9, $char = '…') {
- $max = $max - \dokuwiki\Utf8\PhpString::strlen($keep);
+ $max -= PhpString::strlen($keep);
if($max < $min) return $keep;
- $len = \dokuwiki\Utf8\PhpString::strlen($short);
+ $len = PhpString::strlen($short);
if($len <= $max) return $keep.$short;
$half = floor($max / 2);
return $keep .
- \dokuwiki\Utf8\PhpString::substr($short, 0, $half - 1) .
+ PhpString::substr($short, 0, $half - 1) .
$char .
- \dokuwiki\Utf8\PhpString::substr($short, $len - $half);
+ PhpString::substr($short, $len - $half);
}
/**
@@ -1631,22 +1626,23 @@ function userlink($username = null, $textonly = false) {
global $INPUT;
// prepare initial event data
- $data = array(
+ $data = [
'username' => $username, // the unique user name
'name' => '',
- 'link' => array( //setting 'link' to false disables linking
- 'target' => '',
- 'pre' => '',
- 'suf' => '',
- 'style' => '',
- 'more' => '',
- 'url' => '',
- 'title' => '',
- 'class' => ''
- ),
+ 'link' => [
+ //setting 'link' to false disables linking
+ 'target' => '',
+ 'pre' => '',
+ 'suf' => '',
+ 'style' => '',
+ 'more' => '',
+ 'url' => '',
+ 'title' => '',
+ 'class' => '',
+ ],
'userlink' => '', // formatted user name as will be returned
- 'textonly' => $textonly
- );
+ 'textonly' => $textonly,
+ ];
if($username === null) {
$data['username'] = $username = $INPUT->server->str('REMOTE_USER');
if($textonly){
@@ -1682,7 +1678,7 @@ function userlink($username = null, $textonly = false) {
if(!$data['textonly'] && empty($data['link']['url'])) {
- if(in_array($conf['showuseras'], array('email_link', 'username_link'))) {
+ if(in_array($conf['showuseras'], ['email_link', 'username_link'])) {
if(!isset($info)) {
if($auth) $info = $auth->getUserData($username);
}
@@ -1748,7 +1744,7 @@ function license_img($type) {
global $conf;
if(!$conf['license']) return '';
if(!is_array($license[$conf['license']])) return '';
- $try = array();
+ $try = [];
$try[] = 'lib/images/license/'.$type.'/'.$conf['license'].'.png';
$try[] = 'lib/images/license/'.$type.'/'.$conf['license'].'.gif';
if(substr($conf['license'], 0, 3) == 'cc-') {
@@ -1773,7 +1769,7 @@ function license_img($type) {
* @param int $bytes already allocated memory (see above)
* @return bool
*/
-function is_mem_available($mem, $bytes = 1048576) {
+function is_mem_available($mem, $bytes = 1_048_576) {
$limit = trim(ini_get('memory_limit'));
if(empty($limit)) return true; // no limit set!
if($limit == -1) return true; // unlimited
@@ -1891,7 +1887,7 @@ function get_doku_pref($pref, $default) {
// due to #2721 there might be duplicate entries,
// so we read from the end
for($i = $cnt-2; $i >= 0; $i -= 2) {
- if($parts[$i] == $enc_pref) {
+ if($parts[$i] === $enc_pref) {
return urldecode($parts[$i + 1]);
}
}
@@ -1912,14 +1908,14 @@ function set_doku_pref($pref, $val) {
$orig = get_doku_pref($pref, false);
$cookieVal = '';
- if($orig !== false && ($orig !== $val)) {
+ if ($orig !== false && ($orig !== $val)) {
$parts = explode('#', $_COOKIE['DOKU_PREFS']);
$cnt = count($parts);
// urlencode $pref for the comparison
$enc_pref = rawurlencode($pref);
$seen = false;
for ($i = 0; $i < $cnt; $i += 2) {
- if ($parts[$i] == $enc_pref) {
+ if ($parts[$i] === $enc_pref) {
if (!$seen){
if ($val !== false) {
$parts[$i + 1] = rawurlencode($val ?? '');
@@ -1936,7 +1932,7 @@ function set_doku_pref($pref, $val) {
}
}
$cookieVal = implode('#', $parts);
- } else if ($orig === false && $val !== false) {
+ } elseif ($orig === false && $val !== false) {
$cookieVal = (isset($_COOKIE['DOKU_PREFS']) ? $_COOKIE['DOKU_PREFS'] . '#' : '') .
rawurlencode($pref) . '#' . rawurlencode($val);
}
diff --git a/inc/config_cascade.php b/inc/config_cascade.php
index 61d099c6e..9b5e30af7 100644
--- a/inc/config_cascade.php
+++ b/inc/config_cascade.php
@@ -6,86 +6,83 @@
* DokuWiki directory hierarchy. It can be overriden in inc/preload.php
*/
$config_cascade = array_merge(
- array(
- 'main' => array(
- 'default' => array(DOKU_CONF . 'dokuwiki.php'),
- 'local' => array(DOKU_CONF . 'local.php'),
- 'protected' => array(DOKU_CONF . 'local.protected.php'),
- ),
- 'acronyms' => array(
- 'default' => array(DOKU_CONF . 'acronyms.conf'),
- 'local' => array(DOKU_CONF . 'acronyms.local.conf'),
- ),
- 'entities' => array(
- 'default' => array(DOKU_CONF . 'entities.conf'),
- 'local' => array(DOKU_CONF . 'entities.local.conf'),
- ),
- 'interwiki' => array(
- 'default' => array(DOKU_CONF . 'interwiki.conf'),
- 'local' => array(DOKU_CONF . 'interwiki.local.conf'),
- ),
- 'license' => array(
- 'default' => array(DOKU_CONF . 'license.php'),
- 'local' => array(DOKU_CONF . 'license.local.php'),
- ),
- 'manifest' => array(
- 'default' => array(DOKU_CONF . 'manifest.json'),
- 'local' => array(DOKU_CONF . 'manifest.local.json'),
- ),
- 'mediameta' => array(
- 'default' => array(DOKU_CONF . 'mediameta.php'),
- 'local' => array(DOKU_CONF . 'mediameta.local.php'),
- ),
- 'mime' => array(
- 'default' => array(DOKU_CONF . 'mime.conf'),
- 'local' => array(DOKU_CONF . 'mime.local.conf'),
- ),
- 'scheme' => array(
- 'default' => array(DOKU_CONF . 'scheme.conf'),
- 'local' => array(DOKU_CONF . 'scheme.local.conf'),
- ),
- 'smileys' => array(
- 'default' => array(DOKU_CONF . 'smileys.conf'),
- 'local' => array(DOKU_CONF . 'smileys.local.conf'),
- ),
- 'wordblock' => array(
- 'default' => array(DOKU_CONF . 'wordblock.conf'),
- 'local' => array(DOKU_CONF . 'wordblock.local.conf'),
- ),
- 'userstyle' => array(
- 'screen' => array(DOKU_CONF . 'userstyle.css', DOKU_CONF . 'userstyle.less'),
- 'print' => array(DOKU_CONF . 'userprint.css', DOKU_CONF . 'userprint.less'),
- 'feed' => array(DOKU_CONF . 'userfeed.css', DOKU_CONF . 'userfeed.less'),
- 'all' => array(DOKU_CONF . 'userall.css', DOKU_CONF . 'userall.less')
- ),
- 'userscript' => array(
- 'default' => array(DOKU_CONF . 'userscript.js')
- ),
- 'styleini' => array(
- 'default' => array(DOKU_INC . 'lib/tpl/%TEMPLATE%/' . 'style.ini'),
- 'local' => array(DOKU_CONF . 'tpl/%TEMPLATE%/' . 'style.ini')
- ),
- 'acl' => array(
- 'default' => DOKU_CONF . 'acl.auth.php',
- ),
- 'plainauth.users' => array(
- 'default' => DOKU_CONF . 'users.auth.php',
- 'protected' => '' // not used by default
- ),
- 'plugins' => array(
- 'default' => array(DOKU_CONF . 'plugins.php'),
- 'local' => array(DOKU_CONF . 'plugins.local.php'),
- 'protected' => array(
- DOKU_CONF . 'plugins.required.php',
- DOKU_CONF . 'plugins.protected.php',
- ),
- ),
- 'lang' => array(
- 'core' => array(DOKU_CONF . 'lang/'),
- 'plugin' => array(DOKU_CONF . 'plugin_lang/'),
- 'template' => array(DOKU_CONF . 'template_lang/')
- )
- ),
+ [
+ 'main' => [
+ 'default' => [DOKU_CONF . 'dokuwiki.php'],
+ 'local' => [DOKU_CONF . 'local.php'],
+ 'protected' => [DOKU_CONF . 'local.protected.php']
+ ],
+ 'acronyms' => [
+ 'default' => [DOKU_CONF . 'acronyms.conf'],
+ 'local' => [DOKU_CONF . 'acronyms.local.conf']
+ ],
+ 'entities' => [
+ 'default' => [DOKU_CONF . 'entities.conf'],
+ 'local' => [DOKU_CONF . 'entities.local.conf']
+ ],
+ 'interwiki' => [
+ 'default' => [DOKU_CONF . 'interwiki.conf'],
+ 'local' => [DOKU_CONF . 'interwiki.local.conf']
+ ],
+ 'license' => [
+ 'default' => [DOKU_CONF . 'license.php'],
+ 'local' => [DOKU_CONF . 'license.local.php']
+ ],
+ 'manifest' => [
+ 'default' => [DOKU_CONF . 'manifest.json'],
+ 'local' => [DOKU_CONF . 'manifest.local.json']
+ ],
+ 'mediameta' => [
+ 'default' => [DOKU_CONF . 'mediameta.php'],
+ 'local' => [DOKU_CONF . 'mediameta.local.php']
+ ],
+ 'mime' => [
+ 'default' => [DOKU_CONF . 'mime.conf'],
+ 'local' => [DOKU_CONF . 'mime.local.conf']
+ ],
+ 'scheme' => [
+ 'default' => [DOKU_CONF . 'scheme.conf'],
+ 'local' => [DOKU_CONF . 'scheme.local.conf']
+ ],
+ 'smileys' => [
+ 'default' => [DOKU_CONF . 'smileys.conf'],
+ 'local' => [DOKU_CONF . 'smileys.local.conf']
+ ],
+ 'wordblock' => [
+ 'default' => [DOKU_CONF . 'wordblock.conf'],
+ 'local' => [DOKU_CONF . 'wordblock.local.conf']
+ ],
+ 'userstyle' => [
+ 'screen' => [DOKU_CONF . 'userstyle.css', DOKU_CONF . 'userstyle.less'],
+ 'print' => [DOKU_CONF . 'userprint.css', DOKU_CONF . 'userprint.less'],
+ 'feed' => [DOKU_CONF . 'userfeed.css', DOKU_CONF . 'userfeed.less'],
+ 'all' => [DOKU_CONF . 'userall.css', DOKU_CONF . 'userall.less']
+ ],
+ 'userscript' => [
+ 'default' => [DOKU_CONF . 'userscript.js']
+ ],
+ 'styleini' => [
+ 'default' => [DOKU_INC . 'lib/tpl/%TEMPLATE%/' . 'style.ini'],
+ 'local' => [DOKU_CONF . 'tpl/%TEMPLATE%/' . 'style.ini']
+ ],
+ 'acl' => [
+ 'default' => DOKU_CONF . 'acl.auth.php'
+ ],
+ 'plainauth.users' => [
+ 'default' => DOKU_CONF . 'users.auth.php',
+ 'protected' => ''
+ ],
+ 'plugins' => [
+ 'default' => [DOKU_CONF . 'plugins.php'],
+ 'local' => [DOKU_CONF . 'plugins.local.php'],
+ 'protected' => [DOKU_CONF . 'plugins.required.php', DOKU_CONF . 'plugins.protected.php']
+ ],
+ 'lang' => [
+ 'core' => [DOKU_CONF . 'lang/'],
+ 'plugin' => [DOKU_CONF . 'plugin_lang/'],
+ 'template' => [DOKU_CONF . 'template_lang/']
+ ]
+ ],
$config_cascade
);
diff --git a/inc/confutils.php b/inc/confutils.php
index c754a1aec..1261d1fbc 100644
--- a/inc/confutils.php
+++ b/inc/confutils.php
@@ -32,20 +32,20 @@ function mimetype($file, $knownonly=true){
$mtypes = getMimeTypes(); // known mimetypes
$ext = strrpos($file, '.');
if ($ext === false) {
- return array(false, false, false);
+ return [false, false, false];
}
$ext = strtolower(substr($file, $ext + 1));
if (!isset($mtypes[$ext])){
if ($knownonly) {
- return array(false, false, false);
+ return [false, false, false];
} else {
- return array($ext, 'application/octet-stream', true);
+ return [$ext, 'application/octet-stream', true];
}
}
if($mtypes[$ext][0] == '!'){
- return array($ext, substr($mtypes[$ext],1), true);
+ return [$ext, substr($mtypes[$ext],1), true];
}else{
- return array($ext, $mtypes[$ext], false);
+ return [$ext, $mtypes[$ext], false];
}
}
@@ -113,7 +113,7 @@ function getEntities() {
function getInterwiki() {
static $wikis = null;
if ( !$wikis ) {
- $wikis = retrieveConfig('interwiki','confToHash',array(true));
+ $wikis = retrieveConfig('interwiki','confToHash',[true]);
$wikis = array_filter($wikis, 'strlen');
//add sepecial case 'this'
@@ -132,26 +132,23 @@ function getCdnUrls() {
global $conf;
// load version info
- $versions = array();
+ $versions = [];
$lines = file(DOKU_INC . 'lib/scripts/jquery/versions');
foreach($lines as $line) {
$line = trim(preg_replace('/#.*$/', '', $line));
if($line === '') continue;
- list($key, $val) = sexplode('=', $line, 2, '');
+ [$key, $val] = sexplode('=', $line, 2, '');
$key = trim($key);
$val = trim($val);
$versions[$key] = $val;
}
- $src = array();
- $data = array(
- 'versions' => $versions,
- 'src' => &$src
- );
+ $src = [];
+ $data = ['versions' => $versions, 'src' => &$src];
$event = new Event('CONFUTIL_CDN_SELECT', $data);
if($event->advise_before()) {
if(!$conf['jquerycdn']) {
- $jqmod = md5(join('-', $versions));
+ $jqmod = md5(implode('-', $versions));
$src[] = DOKU_BASE . 'lib/exe/jquery.php' . '?tseed=' . $jqmod;
} elseif($conf['jquerycdn'] == 'jquery') {
$src[] = sprintf('https://code.jquery.com/jquery-%s.min.js', $versions['JQ_VERSION']);
@@ -216,9 +213,9 @@ function getSchemes() {
* @return array
*/
function linesToHash($lines, $lower = false) {
- $conf = array();
+ $conf = [];
// remove BOM
- if(isset($lines[0]) && substr($lines[0], 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf))
+ if(isset($lines[0]) && substr($lines[0], 0, 3) === pack('CCC', 0xef, 0xbb, 0xbf))
$lines[0] = substr($lines[0], 3);
foreach($lines as $line) {
//ignore comments (except escaped ones)
@@ -255,7 +252,7 @@ function linesToHash($lines, $lower = false) {
* @return array
*/
function confToHash($file,$lower=false) {
- $conf = array();
+ $conf = [];
$lines = @file( $file );
if ( !$lines ) return $conf;
@@ -272,7 +269,7 @@ function jsonToArray($file)
{
$json = file_get_contents($file);
- $conf = json_decode($json, true);
+ $conf = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
if ($conf === null) {
return [];
@@ -299,15 +296,15 @@ function jsonToArray($file)
function retrieveConfig($type,$fn,$params=null,$combine='array_merge') {
global $config_cascade;
- if(!is_array($params)) $params = array();
+ if(!is_array($params)) $params = [];
- $combined = array();
+ $combined = [];
if (!is_array($config_cascade[$type])) trigger_error('Missing config cascade for "'.$type.'"',E_USER_WARNING);
- foreach (array('default','local','protected') as $config_group) {
+ foreach (['default', 'local', 'protected'] as $config_group) {
if (empty($config_cascade[$type][$config_group])) continue;
foreach ($config_cascade[$type][$config_group] as $file) {
if (file_exists($file)) {
- $config = call_user_func_array($fn,array_merge(array($file),$params));
+ $config = call_user_func_array($fn,array_merge([$file],$params));
$combined = $combine($combined, $config);
}
}
@@ -326,10 +323,10 @@ function retrieveConfig($type,$fn,$params=null,$combine='array_merge') {
*/
function getConfigFiles($type) {
global $config_cascade;
- $files = array();
+ $files = [];
if (!is_array($config_cascade[$type])) trigger_error('Missing config cascade for "'.$type.'"',E_USER_WARNING);
- foreach (array('default','local','protected') as $config_group) {
+ foreach (['default', 'local', 'protected'] as $config_group) {
if (empty($config_cascade[$type][$config_group])) continue;
$files = array_merge($files, $config_cascade[$type][$config_group]);
}
@@ -411,7 +408,7 @@ function useHeading($linktype) {
$useHeading['navigation'] = true;
}
} else {
- $useHeading = array();
+ $useHeading = [];
}
}
diff --git a/inc/farm.php b/inc/farm.php
index 08f6fdc29..08e346da9 100644
--- a/inc/farm.php
+++ b/inc/farm.php
@@ -23,10 +23,9 @@
*/
// DOKU_FARMDIR needs to be set in preload.php, the fallback is the same as DOKU_INC would be (if it was set already)
-if(!defined('DOKU_FARMDIR')) define('DOKU_FARMDIR', fullpath(dirname(__FILE__).'/../').'/');
-if(!defined('DOKU_CONF')) define('DOKU_CONF', farm_confpath(DOKU_FARMDIR));
-if(!defined('DOKU_FARM')) define('DOKU_FARM', false);
-
+if (!defined('DOKU_FARMDIR')) define('DOKU_FARMDIR', fullpath(__DIR__ . '/../') . '/');
+if (!defined('DOKU_CONF')) define('DOKU_CONF', farm_confpath(DOKU_FARMDIR));
+if (!defined('DOKU_FARM')) define('DOKU_FARM', false);
/**
* Find the appropriate configuration directory.
@@ -43,14 +42,15 @@ if(!defined('DOKU_FARM')) define('DOKU_FARM', false);
*
* @return string
*/
-function farm_confpath($farm) {
+function farm_confpath($farm)
+{
// htaccess based or cli
// cli usage example: animal=your_animal bin/indexer.php
- if(isset($_GET['animal']) || ('cli' == php_sapi_name() && isset($_SERVER['animal']))) {
+ if (isset($_GET['animal']) || ('cli' == PHP_SAPI && isset($_SERVER['animal']))) {
$mode = isset($_GET['animal']) ? 'htaccess' : 'cli';
$animal = $mode == 'htaccess' ? $_GET['animal'] : $_SERVER['animal'];
- if(isset($_GET['animal'])) {
+ if (isset($_GET['animal'])) {
// now unset the parameter to not leak into new queries
// code by @splitbrain from farmer plugin
unset($_GET['animal']);
@@ -62,98 +62,96 @@ function farm_confpath($farm) {
// check that $animal is a string and just a directory name and not a path
if (!is_string($animal) || strpbrk($animal, '\\/') !== false)
nice_die('Sorry! Invalid animal name!');
- if(!is_dir($farm.'/'.$animal))
+ if (!is_dir($farm . '/' . $animal))
nice_die("Sorry! This Wiki doesn't exist!");
- if(!defined('DOKU_FARM')) define('DOKU_FARM', $mode);
- return $farm.'/'.$animal.'/conf/';
+ if (!defined('DOKU_FARM')) define('DOKU_FARM', $mode);
+ return $farm . '/' . $animal . '/conf/';
}
// virtual host based
- $uri = explode('/', $_SERVER['SCRIPT_NAME'] ? $_SERVER['SCRIPT_NAME'] : $_SERVER['SCRIPT_FILENAME']);
+ $uri = explode('/', $_SERVER['SCRIPT_NAME'] ?: $_SERVER['SCRIPT_FILENAME']);
$server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));
for ($i = count($uri) - 1; $i > 0; $i--) {
for ($j = count($server); $j > 0; $j--) {
$dir = implode('.', array_slice($server, -$j)) . implode('.', array_slice($uri, 0, $i));
- if(is_dir("$farm/$dir/conf/")) {
- if(!defined('DOKU_FARM')) define('DOKU_FARM', 'virtual');
+ if (is_dir("$farm/$dir/conf/")) {
+ if (!defined('DOKU_FARM')) define('DOKU_FARM', 'virtual');
return "$farm/$dir/conf/";
}
}
}
// default conf directory in farm
- if(is_dir("$farm/default/conf/")) {
- if(!defined('DOKU_FARM')) define('DOKU_FARM', 'default');
+ if (is_dir("$farm/default/conf/")) {
+ if (!defined('DOKU_FARM')) define('DOKU_FARM', 'default');
return "$farm/default/conf/";
}
// farmer
- return DOKU_INC.'conf/';
+ return DOKU_INC . 'conf/';
}
/* Use default config files and local animal config files */
-$config_cascade = array(
- 'main' => array(
- 'default' => array(DOKU_INC.'conf/dokuwiki.php'),
- 'local' => array(DOKU_CONF.'local.php'),
- 'protected' => array(DOKU_CONF.'local.protected.php'),
- ),
- 'acronyms' => array(
- 'default' => array(DOKU_INC.'conf/acronyms.conf'),
- 'local' => array(DOKU_CONF.'acronyms.local.conf'),
- ),
- 'entities' => array(
- 'default' => array(DOKU_INC.'conf/entities.conf'),
- 'local' => array(DOKU_CONF.'entities.local.conf'),
- ),
- 'interwiki' => array(
- 'default' => array(DOKU_INC.'conf/interwiki.conf'),
- 'local' => array(DOKU_CONF.'interwiki.local.conf'),
- ),
- 'license' => array(
- 'default' => array(DOKU_INC.'conf/license.php'),
- 'local' => array(DOKU_CONF.'license.local.php'),
- ),
- 'mediameta' => array(
- 'default' => array(DOKU_INC.'conf/mediameta.php'),
- 'local' => array(DOKU_CONF.'mediameta.local.php'),
- ),
- 'mime' => array(
- 'default' => array(DOKU_INC.'conf/mime.conf'),
- 'local' => array(DOKU_CONF.'mime.local.conf'),
- ),
- 'scheme' => array(
- 'default' => array(DOKU_INC.'conf/scheme.conf'),
- 'local' => array(DOKU_CONF.'scheme.local.conf'),
- ),
- 'smileys' => array(
- 'default' => array(DOKU_INC.'conf/smileys.conf'),
- 'local' => array(DOKU_CONF.'smileys.local.conf'),
- ),
- 'wordblock' => array(
- 'default' => array(DOKU_INC.'conf/wordblock.conf'),
- 'local' => array(DOKU_CONF.'wordblock.local.conf'),
- ),
- 'acl' => array(
- 'default' => DOKU_CONF.'acl.auth.php',
- ),
- 'plainauth.users' => array(
- 'default' => DOKU_CONF.'users.auth.php',
- ),
- 'plugins' => array( // needed since Angua
- 'default' => array(DOKU_INC.'conf/plugins.php'),
- 'local' => array(DOKU_CONF.'plugins.local.php'),
- 'protected' => array(
- DOKU_INC.'conf/plugins.required.php',
- DOKU_CONF.'plugins.protected.php',
- ),
- ),
- 'userstyle' => array(
- 'screen' => array(DOKU_CONF . 'userstyle.css', DOKU_CONF . 'userstyle.less'),
- 'print' => array(DOKU_CONF . 'userprint.css', DOKU_CONF . 'userprint.less'),
- 'feed' => array(DOKU_CONF . 'userfeed.css', DOKU_CONF . 'userfeed.less'),
- 'all' => array(DOKU_CONF . 'userall.css', DOKU_CONF . 'userall.less')
- ),
- 'userscript' => array(
- 'default' => array(DOKU_CONF . 'userscript.js')
- ),
-);
+$config_cascade = [
+ 'main' => [
+ 'default' => [DOKU_INC . 'conf/dokuwiki.php'],
+ 'local' => [DOKU_CONF . 'local.php'],
+ 'protected' => [DOKU_CONF . 'local.protected.php']
+ ],
+ 'acronyms' => [
+ 'default' => [DOKU_INC . 'conf/acronyms.conf'],
+ 'local' => [DOKU_CONF . 'acronyms.local.conf']
+ ],
+ 'entities' => [
+ 'default' => [DOKU_INC . 'conf/entities.conf'],
+ 'local' => [DOKU_CONF . 'entities.local.conf']
+ ],
+ 'interwiki' => [
+ 'default' => [DOKU_INC . 'conf/interwiki.conf'],
+ 'local' => [DOKU_CONF . 'interwiki.local.conf']
+ ],
+ 'license' => [
+ 'default' => [DOKU_INC . 'conf/license.php'],
+ 'local' => [DOKU_CONF . 'license.local.php']
+ ],
+ 'mediameta' => [
+ 'default' => [DOKU_INC . 'conf/mediameta.php'],
+ 'local' => [DOKU_CONF . 'mediameta.local.php']
+ ],
+ 'mime' => [
+ 'default' => [DOKU_INC . 'conf/mime.conf'],
+ 'local' => [DOKU_CONF . 'mime.local.conf']
+ ],
+ 'scheme' => [
+ 'default' => [DOKU_INC . 'conf/scheme.conf'],
+ 'local' => [DOKU_CONF . 'scheme.local.conf']
+ ],
+ 'smileys' => [
+ 'default' => [DOKU_INC . 'conf/smileys.conf'],
+ 'local' => [DOKU_CONF . 'smileys.local.conf']
+ ],
+ 'wordblock' => [
+ 'default' => [DOKU_INC . 'conf/wordblock.conf'],
+ 'local' => [DOKU_CONF . 'wordblock.local.conf']
+ ],
+ 'acl' => [
+ 'default' => DOKU_CONF . 'acl.auth.php'
+ ],
+ 'plainauth.users' => [
+ 'default' => DOKU_CONF . 'users.auth.php'
+ ],
+ 'plugins' => [
+ // needed since Angua
+ 'default' => [DOKU_INC . 'conf/plugins.php'],
+ 'local' => [DOKU_CONF . 'plugins.local.php'],
+ 'protected' => [DOKU_INC . 'conf/plugins.required.php', DOKU_CONF . 'plugins.protected.php'],
+ ],
+ 'userstyle' => [
+ 'screen' => [DOKU_CONF . 'userstyle.css', DOKU_CONF . 'userstyle.less'],
+ 'print' => [DOKU_CONF . 'userprint.css', DOKU_CONF . 'userprint.less'],
+ 'feed' => [DOKU_CONF . 'userfeed.css', DOKU_CONF . 'userfeed.less'],
+ 'all' => [DOKU_CONF . 'userall.css', DOKU_CONF . 'userall.less']
+ ],
+ 'userscript' => [
+ 'default' => [DOKU_CONF . 'userscript.js']
+ ]
+];
diff --git a/inc/fetch.functions.php b/inc/fetch.functions.php
index d1b15633b..bcfd7fb4d 100644
--- a/inc/fetch.functions.php
+++ b/inc/fetch.functions.php
@@ -1,4 +1,6 @@
<?php
+use dokuwiki\HTTP\Headers;
+use dokuwiki\Utf8\PhpString;
/**
* Functions used by lib/exe/fetch.php
* (not included by other parts of dokuwiki)
@@ -31,13 +33,13 @@ function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null, $csp
header("Content-Type: $mime");
// send security policy if given
- if (!empty($csp)) dokuwiki\HTTP\Headers::contentSecurityPolicy($csp);
+ if (!empty($csp)) Headers::contentSecurityPolicy($csp);
// calculate cache times
- if($cache == -1) {
+ if ($cache == -1) {
$maxage = max($conf['cachetime'], 3600); // cachetime or one hour
$expires = time() + $maxage;
- } else if($cache > 0) {
+ } elseif ($cache > 0) {
$maxage = $cache; // given time
$expires = time() + $maxage;
} else { // $cache == 0
@@ -74,11 +76,11 @@ function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null, $csp
//download or display?
if ($dl) {
header('Content-Disposition: attachment;' . rfc2231_encode(
- 'filename', \dokuwiki\Utf8\PhpString::basename($orig)) . ';'
+ 'filename', PhpString::basename($orig)) . ';'
);
} else {
header('Content-Disposition: inline;' . rfc2231_encode(
- 'filename', \dokuwiki\Utf8\PhpString::basename($orig)) . ';'
+ 'filename', PhpString::basename($orig)) . ';'
);
}
@@ -114,9 +116,7 @@ function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null, $csp
function rfc2231_encode($name, $value, $charset='utf-8', $lang='en') {
$internal = preg_replace_callback(
'/[\x00-\x20*\'%()<>@,;:\\\\"\/[\]?=\x80-\xFF]/',
- function ($match) {
- return rawurlencode($match[0]);
- },
+ static fn($match) => rawurlencode($match[0]),
$value
);
if ( $value != $internal ) {
@@ -148,37 +148,37 @@ function checkFileStatus(&$media, &$file, $rev = '', $width=0, $height=0) {
if(media_isexternal($media)) {
//check token for external image and additional for resized and cached images
if(media_get_token($media, $width, $height) !== $INPUT->str('tok')) {
- return array(412, 'Precondition Failed');
+ return [412, 'Precondition Failed'];
}
//handle external images
if(strncmp($MIME, 'image/', 6) == 0) $file = media_get_from_URL($media, $EXT, $CACHE);
if(!$file) {
//download failed - redirect to original URL
- return array(302, $media);
+ return [302, $media];
}
} else {
$media = cleanID($media);
if(empty($media)) {
- return array(400, 'Bad request');
+ return [400, 'Bad request'];
}
// check token for resized images
if (($width || $height) && media_get_token($media, $width, $height) !== $INPUT->str('tok')) {
- return array(412, 'Precondition Failed');
+ return [412, 'Precondition Failed'];
}
//check permissions (namespace only)
if(auth_quickaclcheck(getNS($media).':X') < AUTH_READ) {
- return array(403, 'Forbidden');
+ return [403, 'Forbidden'];
}
$file = mediaFN($media, $rev);
}
//check file existance
if(!file_exists($file)) {
- return array(404, 'Not Found');
+ return [404, 'Not Found'];
}
- return array(200, null);
+ return [200, null];
}
/**
diff --git a/inc/fulltext.php b/inc/fulltext.php
index fda2b0e5b..3c90d60c6 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -5,7 +5,8 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Utf8\Asian;
+use dokuwiki\Search\Indexer;
use dokuwiki\Extension\Event;
use dokuwiki\Utf8\Clean;
use dokuwiki\Utf8\PhpString;
@@ -63,19 +64,19 @@ function _ft_pageSearch(&$data) {
$q = ft_queryParser($Indexer, $data['query']);
$data['highlight'] = $q['highlight'];
- if (empty($q['parsed_ary'])) return array();
+ if (empty($q['parsed_ary'])) return [];
// lookup all words found in the query
$lookup = $Indexer->lookup($q['words']);
// get all pages in this dokuwiki site (!: includes nonexistent pages)
- $pages_all = array();
+ $pages_all = [];
foreach ($Indexer->getPages() as $id) {
$pages_all[$id] = 0; // base: 0 hit
}
// process the query
- $stack = array();
+ $stack = [];
foreach ($q['parsed_ary'] as $token) {
switch (substr($token, 0, 3)) {
case 'W+:':
@@ -93,13 +94,13 @@ function _ft_pageSearch(&$data) {
// the end($stack) always points the pages that contain
// all words in this phrase
$pages = end($stack);
- $pages_matched = array();
+ $pages_matched = [];
foreach(array_keys($pages) as $id){
- $evdata = array(
+ $evdata = [
'id' => $id,
'phrase' => $phrase,
'text' => rawWiki($id)
- );
+ ];
$evt = new Event('FULLTEXT_PHRASE_MATCH',$evdata);
if ($evt->advise_before() && $evt->result !== true) {
$text = PhpString::strtolower($evdata['text']);
@@ -117,7 +118,7 @@ function _ft_pageSearch(&$data) {
case 'N+:':
case 'N-:': // namespace
$ns = cleanID(substr($token, 3)) . ':';
- $pages_matched = array();
+ $pages_matched = [];
foreach (array_keys($pages_all) as $id) {
if (strpos($id, $ns) === 0) {
$pages_matched[$id] = 0; // namespace: always 0 hit
@@ -126,22 +127,22 @@ function _ft_pageSearch(&$data) {
$stack[] = $pages_matched;
break;
case 'AND': // and operation
- list($pages1, $pages2) = array_splice($stack, -2);
- $stack[] = ft_resultCombine(array($pages1, $pages2));
+ [$pages1, $pages2] = array_splice($stack, -2);
+ $stack[] = ft_resultCombine([$pages1, $pages2]);
break;
case 'OR': // or operation
- list($pages1, $pages2) = array_splice($stack, -2);
- $stack[] = ft_resultUnite(array($pages1, $pages2));
+ [$pages1, $pages2] = array_splice($stack, -2);
+ $stack[] = ft_resultUnite([$pages1, $pages2]);
break;
case 'NOT': // not operation (unary)
$pages = array_pop($stack);
- $stack[] = ft_resultComplement(array($pages_all, $pages));
+ $stack[] = ft_resultComplement([$pages_all, $pages]);
break;
}
}
$docs = array_pop($stack);
- if (empty($docs)) return array();
+ if (empty($docs)) return [];
// check: settings, acls, existence
foreach (array_keys($docs) as $id) {
@@ -175,11 +176,11 @@ function _ft_pageSearch(&$data) {
function ft_backlinks($id, $ignore_perms = false){
$result = idx_get_indexer()->lookupKey('relation_references', $id);
- if(!count($result)) return $result;
+ if($result === []) return $result;
// check ACL permissions
foreach(array_keys($result) as $idx){
- if(($ignore_perms !== true && (
+ if((!$ignore_perms && (
isHiddenPage($result[$idx]) || auth_quickaclcheck($result[$idx]) < AUTH_READ
)) || !page_exists($result[$idx], '', false)){
unset($result[$idx]);
@@ -206,11 +207,11 @@ function ft_backlinks($id, $ignore_perms = false){
function ft_mediause($id, $ignore_perms = false){
$result = idx_get_indexer()->lookupKey('relation_media', $id);
- if(!count($result)) return $result;
+ if($result === []) return $result;
// check ACL permissions
foreach(array_keys($result) as $idx){
- if(($ignore_perms !== true && (
+ if((!$ignore_perms && (
isHiddenPage($result[$idx]) || auth_quickaclcheck($result[$idx]) < AUTH_READ
)) || !page_exists($result[$idx], '', false)){
unset($result[$idx]);
@@ -282,7 +283,7 @@ function _ft_pageLookup(&$data){
$Indexer = idx_get_indexer();
$page_idx = $Indexer->getPages();
- $pages = array();
+ $pages = [];
if ($id !== '' && $cleaned !== '') {
foreach ($page_idx as $p_id) {
if ((strpos($in_ns ? $p_id : noNSorNS($p_id), $cleaned) !== false)) {
@@ -342,7 +343,7 @@ function _ft_filterResultsByTime(array $results, $after, $before) {
$after = is_int($after) ? $after : strtotime($after);
$before = is_int($before) ? $before : strtotime($before);
- foreach ($results as $id => $value) {
+ foreach (array_keys($results) as $id) {
$mTime = filemtime(wikiFN($id));
if ($after && $after > $mTime) {
unset($results[$id]);
@@ -425,24 +426,27 @@ function ft_pagemtimesorter($a, $b) {
*/
function ft_snippet($id,$highlight){
$text = rawWiki($id);
- $text = str_replace("\xC2\xAD",'',$text); // remove soft-hyphens
- $evdata = array(
- 'id' => $id,
- 'text' => &$text,
- 'highlight' => &$highlight,
- 'snippet' => '',
- );
+ $text = str_replace("\xC2\xAD",'',$text);
+ // remove soft-hyphens
+ $evdata = [
+ 'id' => $id,
+ 'text' => &$text,
+ 'highlight' => &$highlight,
+ 'snippet' => ''
+ ];
$evt = new Event('FULLTEXT_SNIPPET_CREATE',$evdata);
if ($evt->advise_before()) {
- $match = array();
- $snippets = array();
- $utf8_offset = $offset = $end = 0;
+ $match = [];
+ $snippets = [];
+ $utf8_offset = 0;
+ $offset = 0;
+ $end = 0;
$len = PhpString::strlen($text);
// build a regexp from the phrases to highlight
$re1 = '(' .
- join(
+ implode(
'|',
array_map(
'ft_snippet_re_preprocess',
@@ -458,14 +462,17 @@ function ft_snippet($id,$highlight){
for ($cnt=4; $cnt--;) {
if (0) {
- } else if (preg_match('/'.$re3.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
- } else if (preg_match('/'.$re2.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
- } else if (preg_match('/'.$re1.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+ } elseif (preg_match('/'.$re3.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+
+ } elseif (preg_match('/'.$re2.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+
+ } elseif (preg_match('/'.$re1.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+
} else {
break;
}
- list($str,$idx) = $match[0];
+ [$str, $idx] = $match[0];
// convert $idx (a byte offset) into a utf8 character offset
$utf8_idx = PhpString::strlen(substr($text,0,$idx));
@@ -478,16 +485,17 @@ function ft_snippet($id,$highlight){
$post = min($len-$utf8_idx-$utf8_len,100);
if ($pre>50 && $post>50) {
- $pre = $post = 50;
- } else if ($pre>50) {
+ $pre = 50;
+ $post = 50;
+ } elseif ($pre>50) {
$pre = min($pre,100-$post);
- } else if ($post>50) {
+ } elseif ($post>50) {
$post = min($post, 100-$pre);
- } else if ($offset == 0) {
+ } elseif ($offset == 0) {
// both are less than 50, means the context is the whole string
// make it so and break out of this loop - there is no need for the
// complex snippet calculations
- $snippets = array($text);
+ $snippets = [$text];
break;
}
@@ -518,7 +526,7 @@ function ft_snippet($id,$highlight){
$snippet = preg_replace(
'/' . $m . '([^' . $m . ']*?)' . $m . '/iu',
'<strong class="search_hit">$1</strong>',
- hsc(join('... ', $snippets))
+ hsc(implode('... ', $snippets))
);
$evdata['snippet'] = $snippet;
@@ -537,7 +545,7 @@ function ft_snippet($id,$highlight){
*/
function ft_snippet_re_preprocess($term) {
// do not process asian terms where word boundaries are not explicit
- if(\dokuwiki\Utf8\Asian::isAsianWords($term)) return $term;
+ if(Asian::isAsianWords($term)) return $term;
if (UTF8_PROPERTYSUPPORT) {
// unicode word boundaries
@@ -559,7 +567,7 @@ function ft_snippet_re_preprocess($term) {
if(substr($term,-2,2) == '\\*'){
$term = substr($term,0,-2);
}else{
- $term = $term.$BR;
+ $term .= $BR;
}
if($term == $BL || $term == $BR || $term == $BL.$BR) $term = '';
@@ -583,7 +591,7 @@ function ft_resultCombine($args){
return $args[0];
}
- $result = array();
+ $result = [];
if ($array_count > 1) {
foreach ($args[0] as $key => $value) {
$result[$key] = $value;
@@ -655,7 +663,7 @@ function ft_resultComplement($args) {
* @author Andreas Gohr <andi@splitbrain.org>
* @author Kazutaka Miyasaka <kazmiya@gmail.com>
*
- * @param dokuwiki\Search\Indexer $Indexer
+ * @param Indexer $Indexer
* @param string $query search query
* @return array of search formulas
*/
@@ -777,7 +785,7 @@ function ft_queryParser($Indexer, $query){
// adjustment: make highlightings right
$parens_level = 0;
- $notgrp_levels = array();
+ $notgrp_levels = [];
$parsed_query_new = '';
$tokens = preg_split('/(NOT\(|[()])/u', $parsed_query, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach ($tokens as $token) {
@@ -802,9 +810,9 @@ function ft_queryParser($Indexer, $query){
* see: http://en.wikipedia.org/wiki/Reverse_Polish_notation
* see: http://en.wikipedia.org/wiki/Shunting-yard_algorithm
*/
- $parsed_ary = array();
- $ope_stack = array();
- $ope_precedence = array(')' => 1, 'OR' => 2, 'AND' => 3, 'NOT' => 4, '(' => 5);
+ $parsed_ary = [];
+ $ope_stack = [];
+ $ope_precedence = [')' => 1, 'OR' => 2, 'AND' => 3, 'NOT' => 4, '(' => 5];
$ope_regex = '/([()]|OR|AND|NOT)/u';
$tokens = preg_split($ope_regex, $parsed_query, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
@@ -823,11 +831,11 @@ function ft_queryParser($Indexer, $query){
}
} else {
// operand
- $token_decoded = str_replace(array('OP', 'CP'), array('(', ')'), $token);
+ $token_decoded = str_replace(['OP', 'CP'], ['(', ')'], $token);
$parsed_ary[] = $token_decoded;
}
}
- $parsed_ary = array_values(array_merge($parsed_ary, array_reverse($ope_stack)));
+ $parsed_ary = array_values([...$parsed_ary, ...array_reverse($ope_stack)]);
// cleanup: each double "NOT" in RPN array actually does nothing
$parsed_ary_count = count($parsed_ary);
@@ -839,7 +847,7 @@ function ft_queryParser($Indexer, $query){
$parsed_ary = array_values($parsed_ary);
// build return value
- $q = array();
+ $q = [];
$q['query'] = $query;
$q['parsed_str'] = $parsed_query;
$q['parsed_ary'] = $parsed_ary;
@@ -876,8 +884,8 @@ function ft_queryParser($Indexer, $query){
break;
}
}
- foreach (array('words', 'phrases', 'highlight', 'ns', 'notns', 'and', 'not') as $key) {
- $q[$key] = empty($q[$key]) ? array() : array_values(array_unique($q[$key]));
+ foreach (['words', 'phrases', 'highlight', 'ns', 'notns', 'and', 'not'] as $key) {
+ $q[$key] = empty($q[$key]) ? [] : array_values(array_unique($q[$key]));
}
return $q;
@@ -890,7 +898,7 @@ function ft_queryParser($Indexer, $query){
*
* @author Kazutaka Miyasaka <kazmiya@gmail.com>
*
- * @param dokuwiki\Search\Indexer $Indexer
+ * @param Indexer $Indexer
* @param string $term
* @param bool $consider_asian
* @param bool $phrase_mode
@@ -900,13 +908,13 @@ function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = f
$parsed = '';
if ($consider_asian) {
// successive asian characters need to be searched as a phrase
- $words = \dokuwiki\Utf8\Asian::splitAsianWords($term);
+ $words = Asian::splitAsianWords($term);
foreach ($words as $word) {
- $phrase_mode = $phrase_mode ? true : \dokuwiki\Utf8\Asian::isAsianWords($word);
+ $phrase_mode = $phrase_mode ? true : Asian::isAsianWords($word);
$parsed .= ft_termParser($Indexer, $word, false, $phrase_mode);
}
} else {
- $term_noparen = str_replace(array('(', ')'), ' ', $term);
+ $term_noparen = str_replace(['(', ')'], ' ', $term);
$words = $Indexer->tokenizer($term_noparen, true);
// W_: no need to highlight
@@ -915,7 +923,7 @@ function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = f
} elseif ($words[0] === $term) {
$parsed = '(W+:'.$words[0].')';
} elseif ($phrase_mode) {
- $term_encoded = str_replace(array('(', ')'), array('OP', 'CP'), $term);
+ $term_encoded = str_replace(['(', ')'], ['OP', 'CP'], $term);
$parsed = '((W_:'.implode(')(W_:', $words).')(P+:'.$term_encoded.'))';
} else {
$parsed = '((W+:'.implode(')(W+:', $words).'))';
@@ -937,19 +945,19 @@ function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = f
*/
function ft_queryUnparser_simple(array $and, array $not, array $phrases, array $ns, array $notns) {
$query = implode(' ', $and);
- if (!empty($not)) {
+ if ($not !== []) {
$query .= ' -' . implode(' -', $not);
}
- if (!empty($phrases)) {
+ if ($phrases !== []) {
$query .= ' "' . implode('" "', $phrases) . '"';
}
- if (!empty($ns)) {
+ if ($ns !== []) {
$query .= ' @' . implode(' @', $ns);
}
- if (!empty($notns)) {
+ if ($notns !== []) {
$query .= ' ^' . implode(' ^', $notns);
}
diff --git a/inc/html.php b/inc/html.php
index a7e225383..c1260ce28 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -5,7 +5,8 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Ui\MediaRevisions;
+use dokuwiki\Form\Form;
use dokuwiki\Action\Denied;
use dokuwiki\Action\Locked;
use dokuwiki\ChangeLog\PageChangeLog;
@@ -60,7 +61,7 @@ function html_wikilink($id, $name = null, $search = '') {
*/
function html_login($svg = false) {
dbg_deprecated(Login::class .'::show()');
- (new dokuwiki\Ui\Login($svg))->show();
+ (new Login($svg))->show();
}
@@ -71,7 +72,7 @@ function html_login($svg = false) {
*/
function html_denied() {
dbg_deprecated(Denied::class .'::showBanner()');
- (new dokuwiki\Action\Denied())->showBanner();
+ (new Denied())->showBanner();
}
/**
@@ -106,7 +107,7 @@ function html_secedit($text, $show = true) {
*/
function html_secedit_button($matches){
$json = htmlspecialchars_decode($matches[1], ENT_QUOTES);
- $data = json_decode($json, true);
+ $data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
if ($data === null) {
return '';
}
@@ -142,7 +143,7 @@ function html_secedit_get_button($data) {
unset($data['secid']);
$params = array_merge(
- array('do' => 'edit', 'rev' => $INFO['lastmod'], 'summary' => '['.$name.'] '),
+ ['do' => 'edit', 'rev' => $INFO['lastmod'], 'summary' => '['.$name.'] '],
$data
);
@@ -250,7 +251,7 @@ function html_showrev() {
*/
function html_show($txt=null) {
dbg_deprecated(PageView::class .'::show()');
- (new dokuwiki\Ui\PageView($txt))->show();
+ (new PageView($txt))->show();
}
/**
@@ -261,7 +262,7 @@ function html_show($txt=null) {
*/
function html_draft() {
dbg_deprecated(PageDraft::class .'::show()');
- (new dokuwiki\Ui\PageDraft)->show();
+ (new PageDraft)->show();
}
/**
@@ -279,7 +280,8 @@ function html_hilight($html, $phrases) {
$phrases = array_map('preg_quote_cb', $phrases);
$phrases = array_map('ft_snippet_re_preprocess', $phrases);
$phrases = array_filter($phrases);
- $regex = join('|',$phrases);
+
+ $regex = implode('|',$phrases);
if ($regex === '') return $html;
if (!Clean::isUtf8($regex)) return $html;
@@ -301,7 +303,7 @@ function html_hilight($html, $phrases) {
*/
function html_locked() {
dbg_deprecated(Locked::class .'::showBanner()');
- (new dokuwiki\Action\Locked())->showBanner();
+ (new Locked())->showBanner();
}
/**
@@ -318,10 +320,10 @@ function html_locked() {
function html_revisions($first = -1, $media_id = '') {
dbg_deprecated(PageRevisions::class .'::show()');
if ($media_id) {
- (new dokuwiki\Ui\MediaRevisions($media_id))->show($first);
+ (new MediaRevisions($media_id))->show($first);
} else {
global $INFO;
- (new dokuwiki\Ui\PageRevisions($INFO['id']))->show($first);
+ (new PageRevisions($INFO['id']))->show($first);
}
}
@@ -339,7 +341,7 @@ function html_revisions($first = -1, $media_id = '') {
*/
function html_recent($first = 0, $show_changes = 'both') {
dbg_deprecated(Recent::class .'::show()');
- (new dokuwiki\Ui\Recent($first, $show_changes))->show();
+ (new Recent($first, $show_changes))->show();
}
/**
@@ -352,7 +354,7 @@ function html_recent($first = 0, $show_changes = 'both') {
*/
function html_index($ns) {
dbg_deprecated(Index::class .'::show()');
- (new dokuwiki\Ui\Index($ns))->show();
+ (new Index($ns))->show();
}
/**
@@ -368,7 +370,7 @@ function html_index($ns) {
*/
function html_list_index($item) {
dbg_deprecated(Index::class .'::formatListItem()');
- return (new dokuwiki\Ui\Index)->formatListItem($item);
+ return (new Index)->formatListItem($item);
}
/**
@@ -386,7 +388,7 @@ function html_list_index($item) {
*/
function html_li_index($item) {
dbg_deprecated(Index::class .'::tagListItem()');
- return (new dokuwiki\Ui\Index)->tagListItem($item);
+ return (new Index)->tagListItem($item);
}
/**
@@ -426,7 +428,7 @@ function html_li_default($item){
* @return string html of an unordered list
*/
function html_buildlist($data, $class, $func, $lifunc = null, $forcewrapper = false) {
- if (count($data) === 0) {
+ if ($data === []) {
return '';
}
@@ -438,9 +440,7 @@ function html_buildlist($data, $class, $func, $lifunc = null, $forcewrapper = fa
// set callback function to build the <li> tag, formerly defined as html_li_default()
if (!is_callable($lifunc)) {
- $lifunc = function ($item) {
- return '<li class="level'.$item['level'].'">';
- };
+ $lifunc = static fn($item) => '<li class="level'.$item['level'].'">';
}
foreach ($data as $item) {
@@ -499,7 +499,7 @@ function html_buildlist($data, $class, $func, $lifunc = null, $forcewrapper = fa
*/
function html_backlinks() {
dbg_deprecated(Backlinks::class .'::show()');
- (new dokuwiki\Ui\Backlinks)->show();
+ (new Backlinks)->show();
}
/**
@@ -532,7 +532,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa
function html_diff($text = '', $intro = true, $type = null) {
dbg_deprecated(PageDiff::class .'::show()');
global $INFO;
- (new dokuwiki\Ui\PageDiff($INFO['id']))->compareWith($text)->preference([
+ (new PageDiff($INFO['id']))->compareWith($text)->preference([
'showIntro' => $intro,
'difftype' => $type,
])->show();
@@ -577,7 +577,7 @@ function html_diff_navigationlink($difftype, $linktype, $lrev, $rrev = null) {
*/
function html_insert_softbreaks($diffhtml) {
dbg_deprecated(PageDiff::class .'::insertSoftbreaks()');
- return (new dokuwiki\Ui\PageDiff)->insertSoftbreaks($diffhtml);
+ return (new PageDiff)->insertSoftbreaks($diffhtml);
}
/**
@@ -591,7 +591,7 @@ function html_insert_softbreaks($diffhtml) {
*/
function html_conflict($text, $summary) {
dbg_deprecated(PageConflict::class .'::show()');
- (new dokuwiki\Ui\PageConflict($text, $summary))->show();
+ (new PageConflict($text, $summary))->show();
}
/**
@@ -607,7 +607,7 @@ function html_msgarea() {
if (!isset($MSG)) return;
- $shown = array();
+ $shown = [];
foreach ($MSG as $msg) {
$hash = md5($msg['msg']);
if (isset($shown[$hash])) continue; // skip double messages
@@ -630,7 +630,7 @@ function html_msgarea() {
*/
function html_register() {
dbg_deprecated(UserRegister::class .'::show()');
- (new dokuwiki\Ui\UserRegister)->show();
+ (new UserRegister)->show();
}
/**
@@ -642,7 +642,7 @@ function html_register() {
*/
function html_updateprofile() {
dbg_deprecated(UserProfile::class .'::show()');
- (new dokuwiki\Ui\UserProfile)->show();
+ (new UserProfile)->show();
}
/**
@@ -654,7 +654,7 @@ function html_updateprofile() {
*/
function html_edit() {
dbg_deprecated(Editor::class .'::show()');
- (new dokuwiki\Ui\Editor)->show();
+ (new Editor)->show();
}
/**
@@ -667,7 +667,7 @@ function html_edit() {
*/
function html_edit_form($param) {
dbg_deprecated(Editor::class .'::addTextarea()');
- (new dokuwiki\Ui\Editor)->addTextarea($param);
+ (new Editor)->addTextarea($param);
}
/**
@@ -754,7 +754,7 @@ function html_debug() {
print '</pre>';
if (function_exists('apache_get_version')) {
- $apache = array();
+ $apache = [];
$apache['version'] = apache_get_version();
if (function_exists('apache_get_modules')) {
@@ -777,7 +777,7 @@ function html_debug() {
*/
function html_resendpwd() {
dbg_deprecated(UserResendPwd::class .'::show()');
- (new dokuwiki\Ui\UserResendPwd)->show();
+ (new UserResendPwd)->show();
}
/**
@@ -789,7 +789,7 @@ function html_resendpwd() {
* @return string html
*/
function html_TOC($toc) {
- if (!count($toc)) return '';
+ if ($toc === []) return '';
global $lang;
$out = '<!-- TOC START -->'.DOKU_LF;
$out .= '<div id="dw__toc" class="dw__toc">'.DOKU_LF;
@@ -831,12 +831,12 @@ function html_list_toc($item) {
* @return array the toc item
*/
function html_mktocitem($link, $text, $level, $hash='#') {
- return array(
- 'link' => $hash.$link,
- 'title' => $text,
- 'type' => 'ul',
- 'level' => $level
- );
+ return [
+ 'link' => $hash.$link,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level
+ ];
}
/**
@@ -866,7 +866,7 @@ function html_form($name, $form) {
* @deprecated 2020-07-18
*/
function html_form_output($form) {
- dbg_deprecated('use dokuwiki\Form\Form::toHTML()');
+ dbg_deprecated('use ' . Form::class . '::toHTML()');
$form->printForm();
}
@@ -899,7 +899,7 @@ function html_flashobject($swf,$width,$height,$params=null,$flashvars=null,$atts
$out = '';
// prepare the object attributes
- if(is_null($atts)) $atts = array();
+ if(is_null($atts)) $atts = [];
$atts['width'] = (int) $width;
$atts['height'] = (int) $height;
if(!$atts['width']) $atts['width'] = 425;
@@ -1012,7 +1012,7 @@ function html_sizechange($sizechange, $form = null) {
if (!isset($form)) {
return '<span class="'.$class.'">'.$value.'</span>';
} else { // Doku_Form
- $form->addElement(form_makeOpenTag('span', array('class' => $class)));
+ $form->addElement(form_makeOpenTag('span', ['class' => $class]));
$form->addElement($value);
$form->addElement(form_makeCloseTag('span'));
}
diff --git a/inc/httputils.php b/inc/httputils.php
index 00d001f81..fe1d22929 100644
--- a/inc/httputils.php
+++ b/inc/httputils.php
@@ -6,26 +6,27 @@
* @author Andreas Gohr <andi@splitbrain.org>
*/
-define('HTTP_MULTIPART_BOUNDARY','D0KuW1K1B0uNDARY');
-define('HTTP_HEADER_LF',"\r\n");
-define('HTTP_CHUNK_SIZE',16*1024);
+define('HTTP_MULTIPART_BOUNDARY', 'D0KuW1K1B0uNDARY');
+define('HTTP_HEADER_LF', "\r\n");
+define('HTTP_CHUNK_SIZE', 16 * 1024);
/**
* Checks and sets HTTP headers for conditional HTTP requests
*
- * @author Simon Willison <swillison@gmail.com>
+ * @param int $timestamp lastmodified time of the cache file
+ * @returns void or exits with previously header() commands executed
* @link http://simonwillison.net/2003/Apr/23/conditionalGet/
*
- * @param int $timestamp lastmodified time of the cache file
- * @returns void or exits with previously header() commands executed
+ * @author Simon Willison <swillison@gmail.com>
*/
-function http_conditionalRequest($timestamp){
+function http_conditionalRequest($timestamp)
+{
global $INPUT;
// A PHP implementation of conditional get, see
// http://fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers/
- $last_modified = substr(gmdate('r', $timestamp), 0, -5).'GMT';
- $etag = '"'.md5($last_modified).'"';
+ $last_modified = substr(gmdate('r', $timestamp), 0, -5) . 'GMT';
+ $etag = '"' . md5($last_modified) . '"';
// Send the headers
header("Last-Modified: $last_modified");
header("ETag: $etag");
@@ -33,7 +34,7 @@ function http_conditionalRequest($timestamp){
$if_modified_since = $INPUT->server->filter('stripslashes')->str('HTTP_IF_MODIFIED_SINCE', false);
$if_none_match = $INPUT->server->filter('stripslashes')->str('HTTP_IF_NONE_MATCH', false);
- if (!$if_modified_since && !$if_none_match){
+ if (!$if_modified_since && !$if_none_match) {
return;
}
@@ -57,26 +58,27 @@ function http_conditionalRequest($timestamp){
/**
* Let the webserver send the given file via x-sendfile method
*
- * @author Chris Smith <chris@jalakai.co.uk>
- *
* @param string $file absolute path of file to send
* @returns void or exits with previous header() commands executed
+ * @author Chris Smith <chris@jalakai.co.uk>
+ *
*/
-function http_sendfile($file) {
+function http_sendfile($file)
+{
global $conf;
//use x-sendfile header to pass the delivery to compatible web servers
- if($conf['xsendfile'] == 1){
+ if ($conf['xsendfile'] == 1) {
header("X-LIGHTTPD-send-file: $file");
ob_end_clean();
exit;
- }elseif($conf['xsendfile'] == 2){
+ } elseif ($conf['xsendfile'] == 2) {
header("X-Sendfile: $file");
ob_end_clean();
exit;
- }elseif($conf['xsendfile'] == 3){
+ } elseif ($conf['xsendfile'] == 3) {
// FS#2388 nginx just needs the relative path.
- $file = DOKU_REL.substr($file, strlen(fullpath(DOKU_INC)) + 1);
+ $file = DOKU_REL . substr($file, strlen(fullpath(DOKU_INC)) + 1);
header("X-Accel-Redirect: $file");
ob_end_clean();
exit;
@@ -89,79 +91,80 @@ function http_sendfile($file) {
* This function exits the running script
*
* @param resource $fh - file handle for an already open file
- * @param int $size - size of the whole file
- * @param int $mime - MIME type of the file
+ * @param int $size - size of the whole file
+ * @param int $mime - MIME type of the file
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function http_rangeRequest($fh,$size,$mime){
+function http_rangeRequest($fh, $size, $mime)
+{
global $INPUT;
- $ranges = array();
+ $ranges = [];
$isrange = false;
header('Accept-Ranges: bytes');
- if(!$INPUT->server->has('HTTP_RANGE')){
+ if (!$INPUT->server->has('HTTP_RANGE')) {
// no range requested - send the whole file
- $ranges[] = array(0,$size,$size);
- }else{
+ $ranges[] = [0, $size, $size];
+ } else {
$t = explode('=', $INPUT->server->str('HTTP_RANGE'));
- if (!$t[0]=='bytes') {
+ if (!$t[0] == 'bytes') {
// we only understand byte ranges - send the whole file
- $ranges[] = array(0,$size,$size);
- }else{
+ $ranges[] = [0, $size, $size];
+ } else {
$isrange = true;
// handle multiple ranges
- $r = explode(',',$t[1]);
- foreach($r as $x){
+ $r = explode(',', $t[1]);
+ foreach ($r as $x) {
$p = explode('-', $x);
$start = (int)$p[0];
- $end = (int)$p[1];
+ $end = (int)$p[1];
if (!$end) $end = $size - 1;
- if ($start > $end || $start > $size || $end > $size){
+ if ($start > $end || $start > $size || $end > $size) {
header('HTTP/1.1 416 Requested Range Not Satisfiable');
print 'Bad Range Request!';
exit;
}
$len = $end - $start + 1;
- $ranges[] = array($start,$end,$len);
+ $ranges[] = [$start, $end, $len];
}
}
}
$parts = count($ranges);
// now send the type and length headers
- if(!$isrange){
- header("Content-Type: $mime",true);
- }else{
+ if (!$isrange) {
+ header("Content-Type: $mime", true);
+ } else {
header('HTTP/1.1 206 Partial Content');
- if($parts == 1){
- header("Content-Type: $mime",true);
- }else{
- header('Content-Type: multipart/byteranges; boundary='.HTTP_MULTIPART_BOUNDARY,true);
+ if ($parts == 1) {
+ header("Content-Type: $mime", true);
+ } else {
+ header('Content-Type: multipart/byteranges; boundary=' . HTTP_MULTIPART_BOUNDARY, true);
}
}
// send all ranges
- for($i=0; $i<$parts; $i++){
- list($start,$end,$len) = $ranges[$i];
+ for ($i = 0; $i < $parts; $i++) {
+ [$start, $end, $len] = $ranges[$i];
// multipart or normal headers
- if($parts > 1){
- echo HTTP_HEADER_LF.'--'.HTTP_MULTIPART_BOUNDARY.HTTP_HEADER_LF;
- echo "Content-Type: $mime".HTTP_HEADER_LF;
- echo "Content-Range: bytes $start-$end/$size".HTTP_HEADER_LF;
+ if ($parts > 1) {
+ echo HTTP_HEADER_LF . '--' . HTTP_MULTIPART_BOUNDARY . HTTP_HEADER_LF;
+ echo "Content-Type: $mime" . HTTP_HEADER_LF;
+ echo "Content-Range: bytes $start-$end/$size" . HTTP_HEADER_LF;
echo HTTP_HEADER_LF;
- }else{
+ } else {
header("Content-Length: $len");
- if($isrange){
+ if ($isrange) {
header("Content-Range: bytes $start-$end/$size");
}
}
// send file content
- fseek($fh,$start); //seek to start of range
+ fseek($fh, $start); //seek to start of range
$chunk = ($len > HTTP_CHUNK_SIZE) ? HTTP_CHUNK_SIZE : $len;
while (!feof($fh) && $chunk > 0) {
@set_time_limit(30); // large files can take a lot of time
@@ -171,8 +174,8 @@ function http_rangeRequest($fh,$size,$mime){
$chunk = ($len > HTTP_CHUNK_SIZE) ? HTTP_CHUNK_SIZE : $len;
}
}
- if($parts > 1){
- echo HTTP_HEADER_LF.'--'.HTTP_MULTIPART_BOUNDARY.'--'.HTTP_HEADER_LF;
+ if ($parts > 1) {
+ echo HTTP_HEADER_LF . '--' . HTTP_MULTIPART_BOUNDARY . '--' . HTTP_HEADER_LF;
}
// everything should be done here, exit (or return if testing)
@@ -186,17 +189,18 @@ function http_rangeRequest($fh,$size,$mime){
* return true if there exists a gzip version of the uncompressed file
* (samepath/samefilename.sameext.gz) created after the uncompressed file
*
- * @author Chris Smith <chris.eureka@jalakai.co.uk>
- *
* @param string $uncompressed_file
* @return bool
+ * @author Chris Smith <chris.eureka@jalakai.co.uk>
+ *
*/
-function http_gzip_valid($uncompressed_file) {
- if(!DOKU_HAS_GZIP) return false;
+function http_gzip_valid($uncompressed_file)
+{
+ if (!DOKU_HAS_GZIP) return false;
- $gzip = $uncompressed_file.'.gz';
+ $gzip = $uncompressed_file . '.gz';
if (filemtime($gzip) < filemtime($uncompressed_file)) { // filemtime returns false (0) if file doesn't exist
- return copy($uncompressed_file, 'compress.zlib://'.$gzip);
+ return copy($uncompressed_file, 'compress.zlib://' . $gzip);
}
return true;
@@ -210,24 +214,25 @@ function http_gzip_valid($uncompressed_file) {
* and the script is terminated.
*
* @param string $cache cache file name
- * @param bool $cache_ok if cache can be used
+ * @param bool $cache_ok if cache can be used
*/
-function http_cached($cache, $cache_ok) {
+function http_cached($cache, $cache_ok)
+{
global $conf;
// check cache age & handle conditional request
// since the resource files are timestamped, we can use a long max age: 1 year
header('Cache-Control: public, max-age=31536000');
header('Pragma: public');
- if($cache_ok){
+ if ($cache_ok) {
http_conditionalRequest(filemtime($cache));
- if($conf['allowdebug']) header("X-CacheUsed: $cache");
+ if ($conf['allowdebug']) header("X-CacheUsed: $cache");
// finally send output
if ($conf['gzip_output'] && http_gzip_valid($cache)) {
header('Vary: Accept-Encoding');
header('Content-Encoding: gzip');
- readfile($cache.".gz");
+ readfile($cache . ".gz");
} else {
http_sendfile($cache);
readfile($cache);
@@ -244,18 +249,19 @@ function http_cached($cache, $cache_ok) {
* @param string $file file name
* @param string $content
*/
-function http_cached_finish($file, $content) {
+function http_cached_finish($file, $content)
+{
global $conf;
// save cache file
io_saveFile($file, $content);
- if(DOKU_HAS_GZIP) io_saveFile("$file.gz",$content);
+ if (DOKU_HAS_GZIP) io_saveFile("$file.gz", $content);
// finally send output
if ($conf['gzip_output'] && DOKU_HAS_GZIP) {
header('Vary: Accept-Encoding');
header('Content-Encoding: gzip');
- print gzencode($content,9,FORCE_GZIP);
+ print gzencode($content, 9, FORCE_GZIP);
} else {
print $content;
}
@@ -266,7 +272,8 @@ function http_cached_finish($file, $content) {
*
* @return string
*/
-function http_get_raw_post_data() {
+function http_get_raw_post_data()
+{
static $postData = null;
if ($postData === null) {
$postData = file_get_contents('php://input');
@@ -279,13 +286,14 @@ function http_get_raw_post_data() {
*
* Inspired by CodeIgniter's set_status_header function
*
- * @param int $code
+ * @param int $code
* @param string $text
*/
-function http_status($code = 200, $text = '') {
+function http_status($code = 200, $text = '')
+{
global $INPUT;
- static $stati = array(
+ static $stati = [
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
@@ -293,14 +301,12 @@ function http_status($code = 200, $text = '') {
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
-
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
304 => 'Not Modified',
305 => 'Use Proxy',
307 => 'Temporary Redirect',
-
400 => 'Bad Request',
401 => 'Unauthorized',
403 => 'Forbidden',
@@ -318,25 +324,24 @@ function http_status($code = 200, $text = '') {
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
-
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported'
- );
+ ];
- if($text == '' && isset($stati[$code])) {
+ if ($text == '' && isset($stati[$code])) {
$text = $stati[$code];
}
$server_protocol = $INPUT->server->str('SERVER_PROTOCOL', false);
- if(substr(php_sapi_name(), 0, 3) == 'cgi' || defined('SIMPLE_TEST')) {
+ if (substr(PHP_SAPI, 0, 3) == 'cgi' || defined('SIMPLE_TEST')) {
header("Status: {$code} {$text}", true);
- } elseif($server_protocol == 'HTTP/1.1' OR $server_protocol == 'HTTP/1.0') {
- header($server_protocol." {$code} {$text}", true, $code);
+ } elseif ($server_protocol == 'HTTP/1.1' || $server_protocol == 'HTTP/1.0') {
+ header($server_protocol . " {$code} {$text}", true, $code);
} else {
header("HTTP/1.1 {$code} {$text}", true, $code);
}
diff --git a/inc/indexer.php b/inc/indexer.php
index ab02b8ea2..44745520f 100644
--- a/inc/indexer.php
+++ b/inc/indexer.php
@@ -6,7 +6,7 @@
* @author Andreas Gohr <andi@splitbrain.org>
* @author Tom N Harris <tnharris@whoopdedo.org>
*/
-
+use dokuwiki\Utf8\Clean;
use dokuwiki\Extension\Event;
use dokuwiki\Search\Indexer;
@@ -36,7 +36,7 @@ function idx_get_version(){
$version = INDEXER_VERSION;
// DokuWiki version is included for the convenience of plugins
- $data = array('dokuwiki'=>$version);
+ $data = ['dokuwiki'=>$version];
Event::createAndTrigger('INDEXER_VERSION_GET', $data, null, false);
unset($data['dokuwiki']); // this needs to be first
ksort($data);
@@ -97,7 +97,7 @@ function & idx_get_stopwords() {
if(file_exists($swfile)){
$stopwords = file($swfile, FILE_IGNORE_NEW_LINES);
}else{
- $stopwords = array();
+ $stopwords = [];
}
}
return $stopwords;
@@ -167,19 +167,19 @@ function idx_addPage($page, $verbose=false, $force=false) {
return false;
}
$body = '';
- $metadata = array();
+ $metadata = [];
$metadata['title'] = p_get_metadata($page, 'title', METADATA_RENDER_UNLIMITED);
if (($references = p_get_metadata($page, 'relation references', METADATA_RENDER_UNLIMITED)) !== null)
$metadata['relation_references'] = array_keys($references);
else
- $metadata['relation_references'] = array();
+ $metadata['relation_references'] = [];
if (($media = p_get_metadata($page, 'relation media', METADATA_RENDER_UNLIMITED)) !== null)
$metadata['relation_media'] = array_keys($media);
else
- $metadata['relation_media'] = array();
+ $metadata['relation_media'] = [];
- $data = compact('page', 'body', 'metadata', 'pid');
+ $data = ['page' => $page, 'body' => $body, 'metadata' => $metadata, 'pid' => $pid];
$evt = new Event('INDEXER_PAGE_ADD', $data);
if ($evt->advise_before()) $data['body'] = $data['body'] . " " . rawWiki($page);
$evt->advise_after();
@@ -253,7 +253,7 @@ function idx_tokenizer($string, $wc=false) {
function idx_getIndex($idx, $suffix) {
global $conf;
$fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
- if (!file_exists($fn)) return array();
+ if (!file_exists($fn)) return [];
return file($fn);
}
@@ -280,7 +280,7 @@ function idx_listIndexLengths() {
($lengths = @file($conf['indexdir'].'/lengths.idx', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES))
!== false
) {
- $idx = array();
+ $idx = [];
foreach ($lengths as $length) {
$idx[] = (int)$length;
}
@@ -293,8 +293,8 @@ function idx_listIndexLengths() {
if ($conf['readdircache'] == 0 || $docache) {
$dir = @opendir($conf['indexdir']);
if ($dir === false)
- return array();
- $idx = array();
+ return [];
+ $idx = [];
while (($f = readdir($dir)) !== false) {
if (substr($f, 0, 1) == 'i' && substr($f, -4) == '.idx') {
$i = substr($f, 1, -4);
@@ -313,7 +313,7 @@ function idx_listIndexLengths() {
return $idx;
}
- return array();
+ return [];
}
/**
@@ -329,17 +329,17 @@ function idx_listIndexLengths() {
*/
function idx_indexLengths($filter) {
global $conf;
- $idx = array();
+ $idx = [];
if (is_array($filter)) {
// testing if index files exist only
$path = $conf['indexdir']."/i";
- foreach ($filter as $key => $value) {
+ foreach (array_keys($filter) as $key) {
if (file_exists($path.$key.'.idx'))
$idx[] = $key;
}
} else {
$lengths = idx_listIndexLengths();
- foreach ($lengths as $key => $length) {
+ foreach ($lengths as $length) {
// keep all the values equal or superior
if ((int)$length >= (int)$filter)
$idx[] = $length;
@@ -360,7 +360,7 @@ function idx_indexLengths($filter) {
* @return string
*/
function idx_cleanName($name) {
- $name = \dokuwiki\Utf8\Clean::romanize(trim((string)$name));
+ $name = Clean::romanize(trim((string)$name));
$name = preg_replace('#[ \./\\:-]+#', '_', $name);
$name = preg_replace('/[^A-Za-z0-9_]/', '', $name);
return strtolower($name);
diff --git a/inc/infoutils.php b/inc/infoutils.php
index 0044f00b4..4e5076f6c 100644
--- a/inc/infoutils.php
+++ b/inc/infoutils.php
@@ -5,7 +5,9 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Extension\Event;
+use dokuwiki\Utf8\PhpString;
+use dokuwiki\Debug\DebugHelper;
use dokuwiki\HTTP\DokuHTTPClient;
use dokuwiki\Logger;
@@ -66,7 +68,7 @@ function checkUpdateMessages(){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function getVersionData(){
- $version = array();
+ $version = [];
//import version string
if(file_exists(DOKU_INC.'VERSION')){
//official release
@@ -80,7 +82,7 @@ function getVersionData(){
if (function_exists('shell_exec')) {
$commitInfo = shell_exec("git log -1 --pretty=format:'%h %cd' --date=short");
if ($commitInfo) {
- list($version['sha'], $date) = explode(' ', $commitInfo);
+ [$version['sha'], $date] = explode(' ', $commitInfo);
$version['date'] = hsc($date);
return $version;
}
@@ -137,7 +139,7 @@ function getVersionData(){
*/
function getVersion(){
$version = getVersionData();
- $sha = !empty($version['sha']) ? ' (' . $version['sha'] . ')' : '';
+ $sha = empty($version['sha']) ? '' : ' (' . $version['sha'] . ')';
return $version['type'] . ' ' . $version['date'] . $sha;
}
@@ -152,31 +154,28 @@ function check(){
/* @var Input $INPUT */
global $INPUT;
- if ($INFO['isadmin'] || $INFO['ismanager']){
+ if ($INFO['isadmin'] || $INFO['ismanager']) {
msg('DokuWiki version: '.getVersion(),1);
-
if(version_compare(phpversion(),'7.4.0','<')){
msg('Your PHP version is too old ('.phpversion().' vs. 7.4+ needed)',-1);
}else{
msg('PHP version '.phpversion(),1);
}
- } else {
- if(version_compare(phpversion(),'7.4.0','<')){
- msg('Your PHP version is too old',-1);
- }
+ } elseif (version_compare(phpversion(),'7.4.0','<')) {
+ msg('Your PHP version is too old',-1);
}
- $mem = (int) php_to_byte(ini_get('memory_limit'));
+ $mem = php_to_byte(ini_get('memory_limit'));
if($mem){
if ($mem === -1) {
msg('PHP memory is unlimited', 1);
- } else if ($mem < 16777216) {
+ } elseif ($mem < 16_777_216) {
msg('PHP is limited to less than 16MB RAM (' . filesize_h($mem) . ').
Increase memory_limit in php.ini', -1);
- } else if ($mem < 20971520) {
+ } elseif ($mem < 20_971_520) {
msg('PHP is limited to less than 20MB RAM (' . filesize_h($mem) . '),
you might encounter problems with bigger pages. Increase memory_limit in php.ini', -1);
- } else if ($mem < 33554432) {
+ } elseif ($mem < 33_554_432) {
msg('PHP is limited to less than 32MB RAM (' . filesize_h($mem) . '),
but that should be enough in most cases. If not, increase memory_limit in php.ini', 0);
} else {
@@ -184,12 +183,10 @@ function check(){
}
}
- if(is_writable($conf['changelog'])){
+ if (is_writable($conf['changelog'])) {
msg('Changelog is writable',1);
- }else{
- if (file_exists($conf['changelog'])) {
- msg('Changelog is not writable',-1);
- }
+ } elseif (file_exists($conf['changelog'])) {
+ msg('Changelog is not writable',-1);
}
if (isset($conf['changelog_old']) && file_exists($conf['changelog_old'])) {
@@ -198,9 +195,9 @@ function check(){
if (file_exists($conf['changelog'].'_failed')) {
msg('Importing old changelog failed', -1);
- } else if (file_exists($conf['changelog'].'_importing')) {
+ } elseif (file_exists($conf['changelog'].'_importing')) {
msg('Importing old changelog now.', 0);
- } else if (file_exists($conf['changelog'].'_import_ok')) {
+ } elseif (file_exists($conf['changelog'].'_import_ok')) {
msg('Old changelog imported', 1);
if (!plugin_isdisabled('importoldchangelog')) {
msg('Importoldchangelog plugin not disabled after import', -1);
@@ -285,14 +282,14 @@ function check(){
$lengths = idx_listIndexLengths();
$index_corrupted = false;
foreach ($lengths as $length) {
- if (count(idx_getIndex('w', $length)) != count(idx_getIndex('i', $length))) {
+ if (count(idx_getIndex('w', $length)) !== count(idx_getIndex('i', $length))) {
$index_corrupted = true;
break;
}
}
foreach (idx_getIndex('metadata', '') as $index) {
- if (count(idx_getIndex($index.'_w', '')) != count(idx_getIndex($index.'_i', ''))) {
+ if (count(idx_getIndex($index.'_w', '')) !== count(idx_getIndex($index.'_i', ''))) {
$index_corrupted = true;
break;
}
@@ -369,15 +366,15 @@ function msg($message,$lvl=0,$line='',$file='',$allow=MSG_PUBLIC){
'file' => $file,
];
- $evt = new \dokuwiki\Extension\Event('INFOUTIL_MSG_SHOW', $msgdata);
+ $evt = new Event('INFOUTIL_MSG_SHOW', $msgdata);
if ($evt->advise_before()) {
/* Show msg normally - event could suppress message show */
if($msgdata['line'] || $msgdata['file']) {
- $basename = \dokuwiki\Utf8\PhpString::basename($msgdata['file']);
+ $basename = PhpString::basename($msgdata['file']);
$msgdata['msg'] .=' ['.$basename.':'.$msgdata['line'].']';
}
- if(!isset($MSG)) $MSG = array();
+ if(!isset($MSG)) $MSG = [];
$MSG[] = $msgdata;
if(isset($MSG_shown) || headers_sent()){
if(function_exists('html_msgarea')){
@@ -426,8 +423,6 @@ function info_msg_allowed($msg){
E_USER_WARNING);
return $INFO['isadmin'];
}
-
- return false;
}
/**
@@ -481,7 +476,7 @@ function dbglog($msg,$header=''){
* @triggers INFO_DEPRECATION_LOG
*/
function dbg_deprecated($alternative = '') {
- \dokuwiki\Debug\DebugHelper::dbgDeprecatedFunction($alternative, 2);
+ DebugHelper::dbgDeprecatedFunction($alternative, 2);
}
/**
@@ -497,14 +492,14 @@ function dbg_backtrace(){
array_shift($backtrace);
// Iterate backtrace
- $calls = array();
+ $calls = [];
$depth = count($backtrace) - 1;
foreach ($backtrace as $i => $call) {
$location = $call['file'] . ':' . $call['line'];
$function = (isset($call['class'])) ?
$call['class'] . $call['type'] . $call['function'] : $call['function'];
- $params = array();
+ $params = [];
if (isset($call['args'])){
foreach($call['args'] as $arg){
if(is_object($arg)){
@@ -514,7 +509,7 @@ function dbg_backtrace(){
}elseif(is_null($arg)){
$params[] = '[NULL]';
}else{
- $params[] = (string) '"'.$arg.'"';
+ $params[] = '"'.$arg.'"';
}
}
}
diff --git a/inc/init.php b/inc/init.php
index 06791e03c..c21fc1753 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -2,7 +2,9 @@
/**
* Initialize some defaults needed for DokuWiki
*/
-
+use dokuwiki\Extension\PluginController;
+use dokuwiki\ErrorHandler;
+use dokuwiki\Input\Input;
use dokuwiki\Extension\Event;
use dokuwiki\Extension\EventHandler;
@@ -19,14 +21,14 @@ function delta_time($start=0) {
define('DOKU_START_TIME', delta_time());
global $config_cascade;
-$config_cascade = array();
+$config_cascade = [];
// if available load a preload config file
-$preload = fullpath(dirname(__FILE__)).'/preload.php';
+$preload = fullpath(__DIR__).'/preload.php';
if (file_exists($preload)) include($preload);
// define the include path
-if(!defined('DOKU_INC')) define('DOKU_INC',fullpath(dirname(__FILE__).'/../').'/');
+if(!defined('DOKU_INC')) define('DOKU_INC',fullpath(__DIR__.'/../').'/');
// define Plugin dir
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
@@ -49,15 +51,15 @@ header('Vary: Cookie');
// init memory caches
global $cache_revinfo;
- $cache_revinfo = array();
+ $cache_revinfo = [];
global $cache_wikifn;
- $cache_wikifn = array();
+ $cache_wikifn = [];
global $cache_cleanid;
- $cache_cleanid = array();
+ $cache_cleanid = [];
global $cache_authname;
- $cache_authname = array();
+ $cache_authname = [];
global $cache_metadata;
- $cache_metadata = array();
+ $cache_metadata = [];
// always include 'inc/config_cascade.php'
// previously in preload.php set fields of $config_cascade will be merged with the defaults
@@ -65,10 +67,10 @@ include(DOKU_INC.'inc/config_cascade.php');
//prepare config array()
global $conf;
-$conf = array();
+$conf = [];
// load the global config file(s)
-foreach (array('default','local','protected') as $config_group) {
+foreach (['default', 'local', 'protected'] as $config_group) {
if (empty($config_cascade['main'][$config_group])) continue;
foreach ($config_cascade['main'][$config_group] as $config_file) {
if (file_exists($config_file)) {
@@ -79,10 +81,10 @@ foreach (array('default','local','protected') as $config_group) {
//prepare license array()
global $license;
-$license = array();
+$license = [];
// load the license file(s)
-foreach (array('default','local') as $config_group) {
+foreach (['default', 'local'] as $config_group) {
if (empty($config_cascade['license'][$config_group])) continue;
foreach ($config_cascade['license'][$config_group] as $config_file) {
if(file_exists($config_file)){
@@ -112,7 +114,7 @@ if(!defined('DOKU_TAB')) define ('DOKU_TAB',"\t");
// define cookie and session id, append server port when securecookie is configured FS#1664
if (!defined('DOKU_COOKIE')) {
- $serverPort = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : '';
+ $serverPort = $_SERVER['SERVER_PORT'] ?? '';
define('DOKU_COOKIE', 'DW' . md5(DOKU_REL . (($conf['securecookie']) ? $serverPort : '')));
unset($serverPort);
}
@@ -146,7 +148,7 @@ if(!defined('DOKU_TPLINC')) {
@ini_set('pcre.backtrack_limit', '20971520');
// enable gzip compression if supported
-$httpAcceptEncoding = isset($_SERVER['HTTP_ACCEPT_ENCODING']) ? $_SERVER['HTTP_ACCEPT_ENCODING'] : '';
+$httpAcceptEncoding = $_SERVER['HTTP_ACCEPT_ENCODING'] ?? '';
$conf['gzip_output'] &= (strpos($httpAcceptEncoding, 'gzip') !== false);
global $ACT;
if ($conf['gzip_output'] &&
@@ -193,14 +195,14 @@ init_files();
// setup plugin controller class (can be overwritten in preload.php)
global $plugin_controller_class, $plugin_controller;
-if (empty($plugin_controller_class)) $plugin_controller_class = dokuwiki\Extension\PluginController::class;
+if (empty($plugin_controller_class)) $plugin_controller_class = PluginController::class;
// load libraries
require_once(DOKU_INC.'vendor/autoload.php');
require_once(DOKU_INC.'inc/load.php');
// from now on everything is an exception
-\dokuwiki\ErrorHandler::register();
+ErrorHandler::register();
// disable gzip if not available
define('DOKU_HAS_BZIP', function_exists('bzopen'));
@@ -214,7 +216,7 @@ if($conf['compression'] == 'gz' && !DOKU_HAS_GZIP) {
// input handle class
global $INPUT;
-$INPUT = new \dokuwiki\Input\Input();
+$INPUT = new Input();
// initialize plugin controller
$plugin_controller = new $plugin_controller_class();
@@ -301,7 +303,7 @@ function init_paths(){
// path to old changelog only needed for upgrading
$conf['changelog_old'] = init_path(
- (isset($conf['changelog'])) ? ($conf['changelog']) : ($conf['savedir'] . '/changes.log')
+ $conf['changelog'] ?? $conf['savedir'] . '/changes.log'
);
if ($conf['changelog_old']=='') { unset($conf['changelog_old']); }
// hardcoded changelog because it is now a cache that lives in meta
@@ -317,7 +319,7 @@ function init_paths(){
function init_lang($langCode) {
//prepare language array
global $lang, $config_cascade;
- $lang = array();
+ $lang = [];
//load the language files
require(DOKU_INC.'inc/lang/en/lang.php');
@@ -345,7 +347,7 @@ function init_lang($langCode) {
function init_files(){
global $conf;
- $files = array($conf['indexdir'].'/page.idx');
+ $files = [$conf['indexdir'].'/page.idx'];
foreach($files as $file){
if(!file_exists($file)){
@@ -478,12 +480,12 @@ function getBaseURL($abs=null){
//split hostheader into host and port
if(isset($_SERVER['HTTP_HOST'])){
$parsed_host = parse_url('http://'.$_SERVER['HTTP_HOST']);
- $host = isset($parsed_host['host']) ? $parsed_host['host'] : null;
- $port = isset($parsed_host['port']) ? $parsed_host['port'] : null;
+ $host = $parsed_host['host'] ?? null;
+ $port = $parsed_host['port'] ?? null;
}elseif(isset($_SERVER['SERVER_NAME'])){
$parsed_host = parse_url('http://'.$_SERVER['SERVER_NAME']);
- $host = isset($parsed_host['host']) ? $parsed_host['host'] : null;
- $port = isset($parsed_host['port']) ? $parsed_host['port'] : null;
+ $host = $parsed_host['host'] ?? null;
+ $port = $parsed_host['port'] ?? null;
}else{
$host = php_uname('n');
$port = '';
@@ -540,7 +542,7 @@ function is_ssl() {
* @return bool
*/
function isWindows() {
- return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? true : false;
+ return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
}
/**
@@ -593,10 +595,10 @@ function fullpath($path,$exists=false){
$root = '/';
}elseif($iswin){
// match drive letter and UNC paths
- if(preg_match('!^([a-zA-z]:)(.*)!',$path,$match)){
+ if (preg_match('!^([a-zA-z]:)(.*)!',$path,$match)) {
$root = $match[1].'/';
$path = $match[2];
- }else if(preg_match('!^(\\\\\\\\[^\\\\/]+\\\\[^\\\\/]+[\\\\/])(.*)!',$path,$match)){
+ } elseif (preg_match('!^(\\\\\\\\[^\\\\/]+\\\\[^\\\\/]+[\\\\/])(.*)!',$path,$match)) {
$root = $match[1];
$path = $match[2];
}
@@ -616,14 +618,14 @@ function fullpath($path,$exists=false){
// canonicalize
$path=explode('/', $path);
- $newpath=array();
+ $newpath=[];
foreach($path as $p) {
if ($p === '' || $p === '.') continue;
if ($p==='..') {
array_pop($newpath);
continue;
}
- array_push($newpath, $p);
+ $newpath[] = $p;
}
$finalpath = $root.implode('/', $newpath);
diff --git a/inc/io.php b/inc/io.php
index 72831a2da..3ac8cc87a 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -5,7 +5,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Utf8\PhpString;
use dokuwiki\HTTP\DokuHTTPClient;
use dokuwiki\Extension\Event;
@@ -26,8 +26,8 @@ use dokuwiki\Extension\Event;
*/
function io_sweepNS($id,$basedir='datadir'){
global $conf;
- $types = array ('datadir'=>'pages', 'mediadir'=>'media');
- $ns_type = (isset($types[$basedir])?$types[$basedir]:false);
+ $types = ['datadir'=>'pages', 'mediadir'=>'media'];
+ $ns_type = ($types[$basedir] ?? false);
$delone = false;
@@ -38,7 +38,7 @@ function io_sweepNS($id,$basedir='datadir'){
//try to delete dir else return
if(@rmdir($dir)) {
if ($ns_type!==false) {
- $data = array($id, $ns_type);
+ $data = [$id, $ns_type];
$delone = true; // we deleted at least one dir
Event::createAndTrigger('IO_NAMESPACE_DELETED', $data);
}
@@ -69,7 +69,7 @@ function io_sweepNS($id,$basedir='datadir'){
*/
function io_readWikiPage($file, $id, $rev=false) {
if (empty($rev)) { $rev = false; }
- $data = array(array($file, true), getNS($id), noNS($id), $rev);
+ $data = [[$file, true], getNS($id), noNS($id), $rev];
return Event::createAndTrigger('IO_WIKIPAGE_READ', $data, '_io_readWikiPage_action', false);
}
@@ -83,7 +83,7 @@ function io_readWikiPage($file, $id, $rev=false) {
*/
function _io_readWikiPage_action($data) {
if (is_array($data) && is_array($data[0]) && count($data[0])===2) {
- return call_user_func_array('io_readFile', $data[0]);
+ return io_readFile(...$data[0]);
} else {
return ''; //callback error
}
@@ -106,14 +106,14 @@ function _io_readWikiPage_action($data) {
function io_readFile($file,$clean=true){
$ret = '';
if(file_exists($file)){
- if(substr($file,-3) == '.gz'){
+ if (substr($file,-3) == '.gz') {
if(!DOKU_HAS_GZIP) return false;
$ret = gzfile($file);
- if(is_array($ret)) $ret = join('', $ret);
- }else if(substr($file,-4) == '.bz2'){
+ if(is_array($ret)) $ret = implode('', $ret);
+ } elseif (substr($file,-4) == '.bz2') {
if(!DOKU_HAS_BZIP) return false;
$ret = bzfile($file);
- }else{
+ } else{
$ret = file_get_contents($file);
}
}
@@ -138,7 +138,7 @@ function bzfile($file, $array=false) {
$bz = bzopen($file,"r");
if($bz === false) return false;
- if($array) $lines = array();
+ if($array) $lines = [];
$str = '';
while (!feof($bz)) {
//8192 seems to be the maximum buffersize?
@@ -146,7 +146,7 @@ function bzfile($file, $array=false) {
if(($buffer === false) || (bzerrno($bz) !== 0)) {
return false;
}
- $str = $str . $buffer;
+ $str .= $buffer;
if($array) {
$pos = strpos($str, "\n");
while($pos !== false) {
@@ -189,7 +189,7 @@ function bzfile($file, $array=false) {
function io_writeWikiPage($file, $content, $id, $rev=false) {
if (empty($rev)) { $rev = false; }
if ($rev===false) { io_createNamespace($id); } // create namespaces as needed
- $data = array(array($file, $content, false), getNS($id), noNS($id), $rev);
+ $data = [[$file, $content, false], getNS($id), noNS($id), $rev];
return Event::createAndTrigger('IO_WIKIPAGE_WRITE', $data, '_io_writeWikiPage_action', false);
}
@@ -202,7 +202,7 @@ function io_writeWikiPage($file, $content, $id, $rev=false) {
*/
function _io_writeWikiPage_action($data) {
if (is_array($data) && is_array($data[0]) && count($data[0])===3) {
- $ok = call_user_func_array('io_saveFile', $data[0]);
+ $ok = io_saveFile(...$data[0]);
// for attic files make sure the file has the mtime of the revision
if($ok && is_int($data[3]) && $data[3] > 0) {
@touch($data[0][0], $data[3]);
@@ -228,13 +228,13 @@ function _io_saveFile($file, $content, $append) {
$mode = ($append) ? 'ab' : 'wb';
$fileexists = file_exists($file);
- if(substr($file,-3) == '.gz'){
+ if (substr($file,-3) == '.gz') {
if(!DOKU_HAS_GZIP) return false;
$fh = @gzopen($file,$mode.'9');
if(!$fh) return false;
gzwrite($fh, $content);
gzclose($fh);
- }else if(substr($file,-4) == '.bz2'){
+ } elseif (substr($file,-4) == '.bz2') {
if(!DOKU_HAS_BZIP) return false;
if($append) {
$bzcontent = bzfile($file);
@@ -245,14 +245,14 @@ function _io_saveFile($file, $content, $append) {
if(!$fh) return false;
bzwrite($fh, $content);
bzclose($fh);
- }else{
+ } else{
$fh = @fopen($file,$mode);
if(!$fh) return false;
fwrite($fh, $content);
fclose($fh);
}
- if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+ if(!$fileexists && $conf['fperm']) chmod($file, $conf['fperm']);
return true;
}
@@ -321,13 +321,13 @@ function io_replaceInFile($file, $oldline, $newline, $regex=false, $maxlines=0)
io_lock($file);
// load into array
- if(substr($file,-3) == '.gz'){
+ if (substr($file,-3) == '.gz') {
if(!DOKU_HAS_GZIP) return false;
$lines = gzfile($file);
- }else if(substr($file,-4) == '.bz2'){
+ } elseif (substr($file,-4) == '.bz2') {
if(!DOKU_HAS_BZIP) return false;
$lines = bzfile($file, true);
- }else{
+ } else{
$lines = file($file);
}
@@ -345,9 +345,8 @@ function io_replaceInFile($file, $oldline, $newline, $regex=false, $maxlines=0)
$lines[$i] = preg_replace($pattern, $replace, $line, -1, $matched);
if ($matched) $count++;
}
- } else if ($maxlines == 0) {
+ } elseif ($maxlines == 0) {
$lines = preg_grep($pattern, $lines, PREG_GREP_INVERT);
-
if ((string)$newline !== ''){
$lines[] = $newline;
}
@@ -356,7 +355,7 @@ function io_replaceInFile($file, $oldline, $newline, $regex=false, $maxlines=0)
}
if(count($lines)){
- if(!_io_saveFile($file, join('',$lines), false)) {
+ if(!_io_saveFile($file, implode('',$lines), false)) {
msg("Removing content from $file failed",-1);
io_unlock($file);
return false;
@@ -447,13 +446,13 @@ function io_unlock($file){
*/
function io_createNamespace($id, $ns_type='pages') {
// verify ns_type
- $types = array('pages'=>'wikiFN', 'media'=>'mediaFN');
+ $types = ['pages'=>'wikiFN', 'media'=>'mediaFN'];
if (!isset($types[$ns_type])) {
trigger_error('Bad $ns_type parameter for io_createNamespace().');
return;
}
// make event list
- $missing = array();
+ $missing = [];
$ns_stack = explode(':', $id);
$ns = $id;
$tmp = dirname( $file = call_user_func($types[$ns_type], $ns) );
@@ -469,7 +468,7 @@ function io_createNamespace($id, $ns_type='pages') {
// send the events
$missing = array_reverse($missing); // inside out
foreach ($missing as $ns) {
- $data = array($ns, $ns_type);
+ $data = [$ns, $ns_type];
Event::createAndTrigger('IO_NAMESPACE_CREATED', $data);
}
}
@@ -523,18 +522,17 @@ function io_rmdir($path, $removefiles = false) {
if(!is_string($path) || $path == "") return false;
if(!file_exists($path)) return true; // it's already gone or was never there, count as success
- if(is_dir($path) && !is_link($path)) {
- $dirs = array();
- $files = array();
-
+ if (is_dir($path) && !is_link($path)) {
+ $dirs = [];
+ $files = [];
if(!$dh = @opendir($path)) return false;
while(false !== ($f = readdir($dh))) {
if($f == '..' || $f == '.') continue;
// collect dirs and files first
- if(is_dir("$path/$f") && !is_link("$path/$f")) {
+ if (is_dir("$path/$f") && !is_link("$path/$f")) {
$dirs[] = "$path/$f";
- } else if($removefiles) {
+ } elseif ($removefiles) {
$files[] = "$path/$f";
} else {
return false; // abort when non empty
@@ -542,20 +540,17 @@ function io_rmdir($path, $removefiles = false) {
}
closedir($dh);
-
// now traverse into directories first
foreach($dirs as $dir) {
if(!io_rmdir($dir, $removefiles)) return false; // abort on any error
}
-
// now delete files
foreach($files as $file) {
if(!@unlink($file)) return false; //abort on any error
}
-
// remove self
return @rmdir($path);
- } else if($removefiles) {
+ } elseif ($removefiles) {
return @unlink($path);
}
return false;
@@ -573,7 +568,7 @@ function io_mktmpdir() {
global $conf;
$base = $conf['tmpdir'];
- $dir = md5(uniqid(mt_rand(), true));
+ $dir = md5(uniqid(random_int(0, mt_getrandmax()), true));
$tmpdir = $base.'/'.$dir;
if(io_mkdir_p($tmpdir)) {
@@ -605,7 +600,7 @@ function io_mktmpdir() {
* @param int $maxSize maximum file size
* @return bool|string if failed false, otherwise true or the name of the file in the given dir
*/
-function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=2097152){
+function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=2_097_152){
global $conf;
$http = new DokuHTTPClient();
$http->max_bodysize = $maxSize;
@@ -619,11 +614,11 @@ function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=20
if ($useAttachment) {
if (isset($http->resp_headers['content-disposition'])) {
$content_disposition = $http->resp_headers['content-disposition'];
- $match=array();
+ $match=[];
if (is_string($content_disposition) &&
preg_match('/attachment;\s*filename\s*=\s*"([^"]*)"/i', $content_disposition, $match)) {
- $name = \dokuwiki\Utf8\PhpString::basename($match[1]);
+ $name = PhpString::basename($match[1]);
}
}
@@ -633,7 +628,7 @@ function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=20
$name = $defaultName;
}
- $file = $file.$name;
+ $file .= $name;
}
$fileexists = file_exists($file);
@@ -641,7 +636,7 @@ function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=20
if(!$fp) return false;
fwrite($fp,$data);
fclose($fp);
- if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+ if(!$fileexists && $conf['fperm']) chmod($file, $conf['fperm']);
if ($useAttachment) return $name;
return true;
}
@@ -681,10 +676,11 @@ function io_rename($from,$to){
* @return int exit code from process
*/
function io_exec($cmd, $input, &$output){
- $descspec = array(
- 0=>array("pipe","r"),
- 1=>array("pipe","w"),
- 2=>array("pipe","w"));
+ $descspec = [
+ 0=>["pipe", "r"],
+ 1=>["pipe", "w"],
+ 2=>["pipe", "w"]
+ ];
$ph = proc_open($cmd, $descspec, $pipes);
if(!$ph) return -1;
fclose($pipes[2]); // ignore stderr
@@ -712,7 +708,7 @@ function io_exec($cmd, $input, &$output){
function io_grep($file,$pattern,$max=0,$backref=false){
$fh = @fopen($file,'r');
if(!$fh) return false;
- $matches = array();
+ $matches = [];
$cnt = 0;
$line = '';
@@ -749,21 +745,18 @@ function io_grep($file,$pattern,$max=0,$backref=false){
function io_getSizeFile($file) {
if (!file_exists($file)) return 0;
- if(substr($file,-3) == '.gz'){
+ if (substr($file,-3) == '.gz') {
$fp = @fopen($file, "rb");
if($fp === false) return 0;
-
fseek($fp, -4, SEEK_END);
$buffer = fread($fp, 4);
fclose($fp);
$array = unpack("V", $buffer);
$uncompressedsize = end($array);
- }else if(substr($file,-4) == '.bz2'){
+ } elseif (substr($file,-4) == '.bz2') {
if(!DOKU_HAS_BZIP) return 0;
-
$bz = bzopen($file,"r");
if($bz === false) return 0;
-
$uncompressedsize = 0;
while (!feof($bz)) {
//8192 seems to be the maximum buffersize?
@@ -773,7 +766,7 @@ function io_getSizeFile($file) {
}
$uncompressedsize += strlen($buffer);
}
- }else{
+ } else{
$uncompressedsize = filesize($file);
}
diff --git a/inc/load.php b/inc/load.php
index e5233acc6..9fd3a31d8 100644
--- a/inc/load.php
+++ b/inc/load.php
@@ -4,7 +4,7 @@
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\ErrorHandler;
use dokuwiki\Extension\PluginController;
// setup class autoloader
@@ -53,7 +53,7 @@ require_once(DOKU_INC.'inc/legacy.php');
*/
function load_autoload($name){
static $classes = null;
- if($classes === null) $classes = array(
+ if($classes === null) $classes = [
'Diff' => DOKU_INC.'inc/DifferenceEngine.php',
'UnifiedDiffFormatter' => DOKU_INC.'inc/DifferenceEngine.php',
'TableDiffFormatter' => DOKU_INC.'inc/DifferenceEngine.php',
@@ -67,14 +67,13 @@ function load_autoload($name){
'FeedParser' => DOKU_INC.'inc/FeedParser.php',
'SafeFN' => DOKU_INC.'inc/SafeFN.class.php',
'Mailer' => DOKU_INC.'inc/Mailer.class.php',
-
'Doku_Handler' => DOKU_INC.'inc/parser/handler.php',
'Doku_Renderer' => DOKU_INC.'inc/parser/renderer.php',
'Doku_Renderer_xhtml' => DOKU_INC.'inc/parser/xhtml.php',
'Doku_Renderer_code' => DOKU_INC.'inc/parser/code.php',
'Doku_Renderer_xhtmlsummary' => DOKU_INC.'inc/parser/xhtmlsummary.php',
- 'Doku_Renderer_metadata' => DOKU_INC.'inc/parser/metadata.php',
- );
+ 'Doku_Renderer_metadata' => DOKU_INC.'inc/parser/metadata.php'
+ ];
if(isset($classes[$name])){
require ($classes[$name]);
@@ -110,7 +109,7 @@ function load_autoload($name){
try {
require $file;
} catch (\Throwable $e) {
- \dokuwiki\ErrorHandler::showExceptionMsg($e, "Error loading plugin $name");
+ ErrorHandler::showExceptionMsg($e, "Error loading plugin $name");
}
return true;
}
@@ -124,7 +123,7 @@ function load_autoload($name){
try {
require $file;
} catch (\Throwable $e) {
- \dokuwiki\ErrorHandler::showExceptionMsg($e, "Error loading template $name");
+ ErrorHandler::showExceptionMsg($e, "Error loading template $name");
}
return true;
}
@@ -154,7 +153,7 @@ function load_autoload($name){
try {
require $plg;
} catch (\Throwable $e) {
- \dokuwiki\ErrorHandler::showExceptionMsg($e, "Error loading plugin {$m[2]}");
+ ErrorHandler::showExceptionMsg($e, "Error loading plugin {$m[2]}");
}
}
return true;
diff --git a/inc/mail.php b/inc/mail.php
index 4f5d1b337..f95a17bd8 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -45,7 +45,7 @@ function mail_setup(){
if(!$host) $host = 'example.com';
$noreply = 'noreply@'.$host;
- $replace = array();
+ $replace = [];
if(!empty($USERINFO['mail'])){
$replace['@MAIL@'] = $USERINFO['mail'];
}else{
@@ -104,7 +104,7 @@ function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true)
for ($i=0;$i<$cnt;$i++) {
$sLine =& $aLines[$i];
- if (strlen($sLine)===0) continue; // do nothing, if empty
+ if ($sLine === '') continue; // do nothing, if empty
$sRegExp = '/[^\x09\x20\x21-\x3C\x3E-\x7E]/e';
diff --git a/inc/media.php b/inc/media.php
index 2ec52497f..019d36614 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -5,7 +5,10 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Ui\MediaRevisions;
+use dokuwiki\Cache\CacheImageMod;
+use splitbrain\slika\Exception;
+use dokuwiki\PassHash;
use dokuwiki\ChangeLog\MediaChangeLog;
use dokuwiki\Extension\Event;
use dokuwiki\Form\Form;
@@ -127,7 +130,7 @@ function media_isexternal($id){
function media_ispublic($id){
if(media_isexternal($id)) return true;
$id = cleanID($id);
- if(auth_aclcheck(getNS($id).':*', '', array()) >= AUTH_READ) return true;
+ if(auth_aclcheck(getNS($id).':*', '', []) >= AUTH_READ) return true;
return false;
}
@@ -171,17 +174,17 @@ function media_metaform($id, $auth) {
foreach ($fields as $key => $field) {
// get current value
if (empty($field[0])) continue;
- $tags = array($field[0]);
+ $tags = [$field[0]];
if (is_array($field[3])) $tags = array_merge($tags, $field[3]);
$value = tpl_img_getTag($tags, '', $src);
$value = cleanText($value);
// prepare attributes
- $p = array(
+ $p = [
'class' => 'edit',
'id' => 'meta__'.$key,
- 'name' => 'meta['.$field[0].']',
- );
+ 'name' => 'meta['.$field[0].']'
+ ];
$form->addTagOpen('div')->addClass('row');
if ($field[2] == 'text') {
@@ -220,7 +223,7 @@ function media_inuse($id) {
if($conf['refcheck']){
$mediareferences = ft_mediause($id,true);
- if(!count($mediareferences)) {
+ if($mediareferences === []) {
return false;
} else {
return $mediareferences;
@@ -254,7 +257,7 @@ function media_delete($id,$auth){
$file = mediaFN($id);
// trigger an event - MEDIA_DELETE_FILE
- $data = array();
+ $data = [];
$data['id'] = $id;
$data['name'] = PhpString::basename($file);
$data['path'] = $file;
@@ -300,7 +303,7 @@ function media_upload_xhr($ns,$auth){
global $INPUT;
$id = $INPUT->get->str('qqfile');
- list($ext,$mime) = mimetype($id);
+ [$ext, $mime] = mimetype($id);
$input = fopen("php://input", "r");
if (!($tmp = io_mktmpdir())) return false;
$path = $tmp.'/'.md5($id);
@@ -314,9 +317,7 @@ function media_upload_xhr($ns,$auth){
}
$res = media_save(
- array('name' => $path,
- 'mime' => $mime,
- 'ext' => $ext),
+ ['name' => $path, 'mime' => $mime, 'ext' => $ext],
$ns.':'.$id,
($INPUT->get->str('ow') == 'true'),
$auth,
@@ -356,8 +357,8 @@ function media_upload($ns,$auth,$file=false){
if($file['error']) return false;
// check extensions
- list($fext,$fmime) = mimetype($file['name']);
- list($iext,$imime) = mimetype($id);
+ [$fext, $fmime] = mimetype($file['name']);
+ [$iext, $imime] = mimetype($id);
if($fext && !$iext){
// no extension specified in id - read original one
$id .= '.'.$fext;
@@ -367,10 +368,17 @@ function media_upload($ns,$auth,$file=false){
msg(sprintf($lang['mediaextchange'],$fext,$iext));
}
- $res = media_save(array('name' => $file['tmp_name'],
- 'mime' => $imime,
- 'ext' => $iext), $ns.':'.$id,
- $INPUT->post->bool('ow'), $auth, 'copy_uploaded_file');
+ $res = media_save(
+ [
+ 'name' => $file['tmp_name'],
+ 'mime' => $imime,
+ 'ext' => $iext
+ ],
+ $ns . ':' . $id,
+ $INPUT->post->bool('ow'),
+ $auth,
+ 'copy_uploaded_file'
+ );
if (is_array($res)) {
msg($res[0], $res[1]);
return false;
@@ -420,11 +428,11 @@ function copy_uploaded_file($from, $to){
*/
function media_save($file, $id, $ow, $auth, $move) {
if($auth < AUTH_UPLOAD) {
- return array("You don't have permissions to upload files.", -1);
+ return ["You don't have permissions to upload files.", -1];
}
if (!isset($file['mime']) || !isset($file['ext'])) {
- list($ext, $mime) = mimetype($id);
+ [$ext, $mime] = mimetype($id);
if (!isset($file['mime'])) {
$file['mime'] = $mime;
}
@@ -442,36 +450,34 @@ function media_save($file, $id, $ow, $auth, $move) {
// get filetype regexp
$types = array_keys(getMimeTypes());
$types = array_map(
- function ($q) {
- return preg_quote($q, "/");
- },
+ static fn($q) => preg_quote($q, "/"),
$types
);
- $regex = join('|',$types);
+ $regex = implode('|',$types);
// because a temp file was created already
if(!preg_match('/\.('.$regex.')$/i',$fn)) {
- return array($lang['uploadwrong'],-1);
+ return [$lang['uploadwrong'], -1];
}
//check for overwrite
$overwrite = file_exists($fn);
$auth_ow = (($conf['mediarevisions']) ? AUTH_UPLOAD : AUTH_DELETE);
if($overwrite && (!$ow || $auth < $auth_ow)) {
- return array($lang['uploadexist'], 0);
+ return [$lang['uploadexist'], 0];
}
// check for valid content
$ok = media_contentcheck($file['name'], $file['mime']);
if($ok == -1){
- return array(sprintf($lang['uploadbadcontent'],'.' . $file['ext']),-1);
+ return [sprintf($lang['uploadbadcontent'],'.' . $file['ext']), -1];
}elseif($ok == -2){
- return array($lang['uploadspam'],-1);
+ return [$lang['uploadspam'], -1];
}elseif($ok == -3){
- return array($lang['uploadxss'],-1);
+ return [$lang['uploadxss'], -1];
}
// prepare event data
- $data = array();
+ $data = [];
$data[0] = $file['name'];
$data[1] = $fn;
$data[2] = $id;
@@ -560,7 +566,7 @@ function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'mov
}
return $id;
}else{
- return array($lang['uploadfail'],-1);
+ return [$lang['uploadfail'], -1];
}
}
@@ -592,7 +598,7 @@ function media_saveOldRevision($id) {
$oldRev = $medialog->getRevisions(-1, 1); // from changelog
$oldRev = (int) (empty($oldRev) ? 0 : $oldRev[0]);
$filesize_old = filesize(mediaFN($id, $oldRev));
- $sizechange = $sizechange - $filesize_old;
+ $sizechange -= $filesize_old;
addMediaLogEntry($date, $id, DOKU_CHANGE_TYPE_EDIT, '', '', null, $sizechange);
}
@@ -703,9 +709,9 @@ function media_filelist($ns,$auth=null,$jump='',$fullscreenview=false,$sort=fals
}
$dir = utf8_encodeFN(str_replace(':','/',$ns));
- $data = array();
+ $data = [];
search($data,$conf['mediadir'],'search_mediafiles',
- array('showmsg'=>true,'depth'=>1),$dir,1,$sort);
+ ['showmsg'=>true, 'depth'=>1],$dir,1,$sort);
if(!count($data)){
echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
@@ -744,12 +750,16 @@ function media_filelist($ns,$auth=null,$jump='',$fullscreenview=false,$sort=fals
function media_tabs_files($selected_tab = ''){
global $lang;
- $tabs = array();
- foreach(array('files' => 'mediaselect',
- 'upload' => 'media_uploadtab',
- 'search' => 'media_searchtab') as $tab => $caption) {
- $tabs[$tab] = array('href' => media_managerURL(['tab_files' => $tab], '&'),
- 'caption' => $lang[$caption]);
+ $tabs = [];
+ foreach([
+ 'files' => 'mediaselect',
+ 'upload' => 'media_uploadtab',
+ 'search' => 'media_searchtab'
+ ] as $tab => $caption) {
+ $tabs[$tab] = [
+ 'href' => media_managerURL(['tab_files' => $tab], '&'),
+ 'caption' => $lang[$caption]
+ ];
}
html_tabs($tabs, $selected_tab);
@@ -765,18 +775,24 @@ function media_tabs_files($selected_tab = ''){
function media_tabs_details($image, $selected_tab = '') {
global $lang, $conf;
- $tabs = array();
- $tabs['view'] = array('href' => media_managerURL(['tab_details' => 'view'], '&'),
- 'caption' => $lang['media_viewtab']);
+ $tabs = [];
+ $tabs['view'] = [
+ 'href' => media_managerURL(['tab_details' => 'view'], '&'),
+ 'caption' => $lang['media_viewtab']
+ ];
- list(, $mime) = mimetype($image);
+ [, $mime] = mimetype($image);
if ($mime == 'image/jpeg' && file_exists(mediaFN($image))) {
- $tabs['edit'] = array('href' => media_managerURL(['tab_details' => 'edit'], '&'),
- 'caption' => $lang['media_edittab']);
+ $tabs['edit'] = [
+ 'href' => media_managerURL(['tab_details' => 'edit'], '&'),
+ 'caption' => $lang['media_edittab']
+ ];
}
if ($conf['mediarevisions']) {
- $tabs['history'] = array('href' => media_managerURL(['tab_details' => 'history'], '&'),
- 'caption' => $lang['media_historytab']);
+ $tabs['history'] = [
+ 'href' => media_managerURL(['tab_details' => 'history'], '&'),
+ 'caption' => $lang['media_historytab']
+ ];
}
html_tabs($tabs, $selected_tab);
@@ -807,15 +823,16 @@ function media_tab_files_options() {
$form->setHiddenField('q', $INPUT->str('q'));
}
$form->addHTML('<ul>'.NL);
- foreach (array('list' => array('listType', array('thumbs', 'rows')),
- 'sort' => array('sortBy', array('name', 'date')))
- as $group => $content) {
+ foreach ([
+ 'list' => ['listType', ['thumbs', 'rows']],
+ 'sort' => ['sortBy', ['name', 'date']]
+ ] as $group => $content) {
$checked = "_media_get_{$group}_type";
$checked = $checked();
$form->addHTML('<li class="'. $content[0] .'">');
foreach ($content[1] as $option) {
- $attrs = array();
+ $attrs = [];
if ($checked == $option) {
$attrs['checked'] = 'checked';
}
@@ -843,7 +860,7 @@ function media_tab_files_options() {
* @return string - sort type
*/
function _media_get_sort_type() {
- return _media_get_display_param('sort', array('default' => 'name', 'date'));
+ return _media_get_display_param('sort', ['default' => 'name', 'date']);
}
/**
@@ -854,7 +871,7 @@ function _media_get_sort_type() {
* @return string - list type
*/
function _media_get_list_type() {
- return _media_get_display_param('list', array('default' => 'thumbs', 'rows'));
+ return _media_get_display_param('list', ['default' => 'thumbs', 'rows']);
}
/**
@@ -979,7 +996,7 @@ function media_tab_edit($image, $ns, $auth=null) {
if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
if ($image) {
- list(, $mime) = mimetype($image);
+ [, $mime] = mimetype($image);
if ($mime == 'image/jpeg') media_metaform($image,$auth);
}
}
@@ -1002,10 +1019,10 @@ function media_tab_history($image, $ns, $auth=null) {
if ($auth >= AUTH_READ && $image) {
if ($do == 'diff'){
- (new dokuwiki\Ui\MediaDiff($image))->show(); //media_diff($image, $ns, $auth);
+ (new MediaDiff($image))->show(); //media_diff($image, $ns, $auth);
} else {
$first = $INPUT->int('first',-1);
- (new dokuwiki\Ui\MediaRevisions($image))->show($first);
+ (new MediaRevisions($image))->show($first);
}
} else {
echo '<div class="nothing">'.$lang['media_perm_read'].'</div>'.NL;
@@ -1030,7 +1047,7 @@ function media_preview($image, $auth, $rev = '', $meta = false) {
global $lang;
echo '<div class="image">';
- $more = array();
+ $more = [];
if ($rev) {
$more['rev'] = $rev;
} else {
@@ -1128,18 +1145,18 @@ function media_preview_buttons($image, $auth, $rev = '') {
function media_image_preview_size($image, $rev, $meta = false, $size = 500) {
if (!preg_match("/\.(jpe?g|gif|png)$/", $image)
|| !file_exists($filename = mediaFN($image, $rev))
- ) return array();
+ ) return [];
$info = getimagesize($filename);
- $w = (int) $info[0];
- $h = (int) $info[1];
+ $w = $info[0];
+ $h = $info[1];
if ($meta && ($w > $size || $h > $size)) {
$ratio = $meta->getResizeRatio($size, $size);
$w = floor($w * $ratio);
$h = floor($h * $ratio);
}
- return array($w, $h);
+ return [$w, $h];
}
/**
@@ -1177,14 +1194,14 @@ function media_file_tags($meta) {
}
}
- $tags = array();
+ $tags = [];
- foreach ($fields as $key => $tag) {
- $t = array();
- if (!empty($tag[0])) $t = array($tag[0]);
+ foreach ($fields as $tag) {
+ $t = [];
+ if (!empty($tag[0])) $t = [$tag[0]];
if (isset($tag[3]) && is_array($tag[3])) $t = array_merge($t,$tag[3]);
$value = media_getTag($t, $meta);
- $tags[] = array('tag' => $tag, 'value' => $value);
+ $tags[] = ['tag' => $tag, 'value' => $value];
}
return $tags;
@@ -1220,7 +1237,7 @@ function media_details($image, $auth, $rev='', $meta=false) {
echo '<dl>'.NL;
echo '<dt>'.$lang['reference'].':</dt>';
$media_usage = ft_mediause($image,true);
- if(count($media_usage) > 0){
+ if($media_usage !== []){
foreach($media_usage as $path){
echo '<dd>'.html_wikilink($path).'</dd>';
}
@@ -1309,7 +1326,7 @@ function media_restore($image, $rev, $auth){
$removed = (!file_exists(mediaFN($image)) && file_exists(mediaMetaFN($image, '.changes')));
if (!$image || (!file_exists(mediaFN($image)) && !$removed)) return false;
if (!$rev || !file_exists(mediaFN($image, $rev))) return false;
- list(,$imime,) = mimetype($image);
+ [, $imime, ] = mimetype($image);
$res = media_upload_finish(mediaFN($image, $rev),
mediaFN($image),
$image,
@@ -1342,18 +1359,18 @@ function media_searchlist($query,$ns,$auth=null,$fullscreen=false,$sort='natural
global $lang;
$ns = cleanID($ns);
- $evdata = array(
+ $evdata = [
'ns' => $ns,
- 'data' => array(),
+ 'data' => [],
'query' => $query
- );
+ ];
if (!blank($query)) {
$evt = new Event('MEDIA_SEARCH', $evdata);
if ($evt->advise_before()) {
$dir = utf8_encodeFN(str_replace(':','/',$evdata['ns']));
$quoted = preg_quote($evdata['query'],'/');
//apply globbing
- $quoted = str_replace(array('\*', '\?'), array('.*', '.'), $quoted, $count);
+ $quoted = str_replace(['\*', '\?'], ['.*', '.'], $quoted, $count);
//if we use globbing file name must match entirely but may be preceded by arbitrary namespace
if ($count > 0) $quoted = '^([^:]*:)*'.$quoted.'$';
@@ -1362,7 +1379,7 @@ function media_searchlist($query,$ns,$auth=null,$fullscreen=false,$sort='natural
search($evdata['data'],
$conf['mediadir'],
'search_mediafiles',
- array('showmsg'=>false,'pattern'=>$pattern),
+ ['showmsg'=>false, 'pattern'=>$pattern],
$dir,
1,
$sort);
@@ -1409,7 +1426,7 @@ function media_searchlist($query,$ns,$auth=null,$fullscreen=false,$sort='natural
* @return string html
*/
function media_printicon($filename, $size=''){
- list($ext) = mimetype(mediaFN($filename),false);
+ [$ext] = mimetype(mediaFN($filename),false);
if (file_exists(DOKU_INC.'lib/images/fileicons/'.$size.'/'.$ext.'.png')) {
$icon = DOKU_BASE.'lib/images/fileicons/'.$size.'/'.$ext.'.png';
@@ -1435,8 +1452,8 @@ function media_managerURL($params = false, $amp = '&amp;', $abs = false, $params
global $ID;
global $INPUT;
- $gets = array('do' => 'media');
- $media_manager_params = array('tab_files', 'tab_details', 'image', 'ns', 'list', 'sort');
+ $gets = ['do' => 'media'];
+ $media_manager_params = ['tab_files', 'tab_details', 'image', 'ns', 'list', 'sort'];
foreach ($media_manager_params as $x) {
if ($INPUT->has($x)) $gets[$x] = $INPUT->str($x);
}
@@ -1504,7 +1521,7 @@ function media_uploadform($ns, $auth, $fullscreen = false) {
$form->addTagClose('p');
if ($auth >= $auth_ow){
$form->addTagOpen('p');
- $attrs = array();
+ $attrs = [];
if ($update) $attrs['checked'] = 'checked';
$form->addCheckbox('ow', $lang['txt_overwrt'])->id('dw__ow')->val('1')
->addClass('check')->attrs($attrs);
@@ -1540,11 +1557,11 @@ function media_uploadform($ns, $auth, $fullscreen = false) {
function media_getuploadsize(){
$okay = 0;
- $post = (int) php_to_byte(@ini_get('post_max_size'));
- $suho = (int) php_to_byte(@ini_get('suhosin.post.max_value_length'));
- $upld = (int) php_to_byte(@ini_get('upload_max_filesize'));
+ $post = php_to_byte(@ini_get('post_max_size'));
+ $suho = php_to_byte(@ini_get('suhosin.post.max_value_length'));
+ $upld = php_to_byte(@ini_get('upload_max_filesize'));
- if($post && ($post < $okay || $okay == 0)) $okay = $post;
+ if($post && ($post < $okay || $okay === 0)) $okay = $post;
if($suho && ($suho < $okay || $okay == 0)) $okay = $suho;
if($upld && ($upld < $okay || $okay == 0)) $okay = $upld;
@@ -1606,12 +1623,11 @@ function media_nstree($ns){
$ns_dir = utf8_encodeFN(str_replace(':','/',$ns));
- $data = array();
- search($data,$conf['mediadir'],'search_index',array('ns' => $ns_dir, 'nofiles' => true));
+ $data = [];
+ search($data,$conf['mediadir'],'search_index',['ns' => $ns_dir, 'nofiles' => true]);
// wrap a list with the root level around the other namespaces
- array_unshift($data, array('level' => 0, 'id' => '', 'open' =>'true',
- 'label' => '['.$lang['mediaroot'].']'));
+ array_unshift($data, ['level' => 0, 'id' => '', 'open' =>'true', 'label' => '['.$lang['mediaroot'].']']);
// insert the current ns into the hierarchy if it isn't already part of it
$ns_parts = explode(':', $ns);
@@ -1627,7 +1643,7 @@ function media_nstree($ns){
$pos >= count($data) ||
($data[$pos]['level'] <= $level+1 && Sort::strcmp($data[$pos]['id'], $tmp_ns) > 0)
) {
- array_splice($data, $pos, 0, array(array('level' => $level+1, 'id' => $tmp_ns, 'open' => 'true')));
+ array_splice($data, $pos, 0, [['level' => $level+1, 'id' => $tmp_ns, 'open' => 'true']]);
break;
}
++$pos;
@@ -1654,7 +1670,7 @@ function media_nstree_item($item){
if(empty($item['label'])) $item['label'] = $label;
$ret = '';
- if (!($INPUT->str('do') == 'media'))
+ if ($INPUT->str('do') != 'media')
$ret .= '<a href="'.DOKU_BASE.'lib/exe/mediamanager.php?ns='.idfilter($item['id']).'" class="idx_dir">';
else $ret .= '<a href="'.media_managerURL(['ns' => idfilter($item['id'], false), 'tab_files' => 'files'])
.'" class="idx_dir">';
@@ -1715,7 +1731,7 @@ function media_mod_image($file, $ext, $w, $h=0, $crop=false)
'imconvert' => $conf['im_convert'],
];
- $cache = new \dokuwiki\Cache\CacheImageMod($file, $w, $h, $ext, $crop);
+ $cache = new CacheImageMod($file, $w, $h, $ext, $crop);
if(!$cache->useCache()) {
try {
Slika::run($file, $options)
@@ -1723,7 +1739,7 @@ function media_mod_image($file, $ext, $w, $h=0, $crop=false)
->$operation($w, $h)
->save($cache->cache, $ext);
if($conf['fperm']) @chmod($cache->cache, $conf['fperm']);
- } catch (\splitbrain\slika\Exception $e) {
+ } catch (Exception $e) {
Logger::debug($e->getMessage());
return $file;
}
@@ -1783,7 +1799,7 @@ function media_get_token($id,$w,$h){
if ($w) $token .= '.'.$w;
if ($h) $token .= '.'.$h;
- return substr(\dokuwiki\PassHash::hmac('md5', $token, auth_cookiesalt()),0,6);
+ return substr(PassHash::hmac('md5', $token, auth_cookiesalt()),0,6);
}
return '';
@@ -1857,7 +1873,7 @@ function media_image_download($url,$file){
if(!$fp) return false;
fwrite($fp,$data);
fclose($fp);
- if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+ if(!$fileexists && $conf['fperm']) chmod($file, $conf['fperm']);
// check if it is really an image
$info = @getimagesize($file);
@@ -2073,15 +2089,15 @@ function media_resize_imageGD($ext,$from,$from_w,$from_h,$to,$to_w,$to_h,$ofs_x=
*/
function media_alternativefiles($src, $exts){
- $files = array();
- list($srcExt, /* $srcMime */) = mimetype($src);
+ $files = [];
+ [$srcExt, ] = mimetype($src);
$filebase = substr($src, 0, -1 * (strlen($srcExt)+1));
foreach($exts as $ext) {
$fileid = $filebase.'.'.$ext;
$file = mediaFN($fileid);
if(file_exists($file)) {
- list(/* $fileExt */, $fileMime) = mimetype($file);
+ [, $fileMime] = mimetype($file);
$files[$fileMime] = $fileid;
}
}
@@ -2098,16 +2114,16 @@ function media_alternativefiles($src, $exts){
* @author Anika Henke <anika@selfthinker.org>
*/
function media_supportedav($mime, $type=NULL){
- $supportedAudio = array(
+ $supportedAudio = [
'ogg' => 'audio/ogg',
'mp3' => 'audio/mpeg',
- 'wav' => 'audio/wav',
- );
- $supportedVideo = array(
+ 'wav' => 'audio/wav'
+ ];
+ $supportedVideo = [
'webm' => 'video/webm',
'ogv' => 'video/ogg',
- 'mp4' => 'video/mp4',
- );
+ 'mp4' => 'video/mp4'
+ ];
if ($type == 'audio') {
$supportedAv = $supportedAudio;
} elseif ($type == 'video') {
@@ -2129,25 +2145,22 @@ function media_supportedav($mime, $type=NULL){
* @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
*/
function media_trackfiles($src){
- $kinds=array(
+ $kinds=[
'sub' => 'subtitles',
'cap' => 'captions',
'des' => 'descriptions',
'cha' => 'chapters',
'met' => 'metadata'
- );
+ ];
- $files = array();
+ $files = [];
$re='/\\.(sub|cap|des|cha|met)\\.([^.]+)\\.vtt$/';
$baseid=pathinfo($src, PATHINFO_FILENAME);
$pattern=mediaFN($baseid).'.*.*.vtt';
$list=glob($pattern);
foreach($list as $track) {
if(preg_match($re, $track, $matches)){
- $files[$baseid.'.'.$matches[1].'.'.$matches[2].'.vtt']=array(
- $kinds[$matches[1]],
- $matches[2],
- );
+ $files[$baseid.'.'.$matches[1].'.'.$matches[2].'.vtt']=[$kinds[$matches[1]], $matches[2]];
}
}
return $files;
diff --git a/inc/pageutils.php b/inc/pageutils.php
index 6af58ed82..6f958a741 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -7,7 +7,10 @@
* @author Andreas Gohr <andi@splitbrain.org>
* @todo Combine similar functions like {wiki,media,meta}FN()
*/
-
+use dokuwiki\Utf8\PhpString;
+use dokuwiki\Utf8\Clean;
+use dokuwiki\File\Resolver;
+use dokuwiki\Extension\Event;
use dokuwiki\ChangeLog\MediaChangeLog;
use dokuwiki\ChangeLog\PageChangeLog;
use dokuwiki\File\MediaResolver;
@@ -49,7 +52,7 @@ function getID($param = 'id', $clean = true)
$relpath = 'lib/exe/';
}
$script = $conf['basedir'] . $relpath .
- \dokuwiki\Utf8\PhpString::basename($INPUT->server->str('SCRIPT_FILENAME'));
+ PhpString::basename($INPUT->server->str('SCRIPT_FILENAME'));
} elseif ($INPUT->server->str('PATH_INFO')) {
$request = $INPUT->server->str('PATH_INFO');
} elseif ($INPUT->server->str('SCRIPT_NAME')) {
@@ -80,16 +83,16 @@ function getID($param = 'id', $clean = true)
if (substr($id, -1) == ':' || ($conf['useslash'] && substr($id, -1) == '/')) {
if (page_exists($id . $conf['start'])) {
// start page inside namespace
- $id = $id . $conf['start'];
+ $id .= $conf['start'];
} elseif (page_exists($id . noNS(cleanID($id)))) {
// page named like the NS inside the NS
- $id = $id . noNS(cleanID($id));
+ $id .= noNS(cleanID($id));
} elseif (page_exists($id)) {
// page like namespace exists
$id = substr($id, 0, -1);
} else {
// fall back to default
- $id = $id . $conf['start'];
+ $id .= $conf['start'];
}
if (isset($ACT) && $ACT === 'show') {
$urlParameters = $_GET;
@@ -135,7 +138,7 @@ function cleanID($raw_id, $ascii = false)
$sepcharpat = '#\\' . $sepchar . '+#';
$id = trim((string)$raw_id);
- $id = \dokuwiki\Utf8\PhpString::strtolower($id);
+ $id = PhpString::strtolower($id);
//alternative namespace seperator
if ($conf['useslash']) {
@@ -144,13 +147,13 @@ function cleanID($raw_id, $ascii = false)
$id = strtr($id, ';/', ':' . $sepchar);
}
- if ($conf['deaccent'] == 2 || $ascii) $id = \dokuwiki\Utf8\Clean::romanize($id);
- if ($conf['deaccent'] || $ascii) $id = \dokuwiki\Utf8\Clean::deaccent($id, -1);
+ if ($conf['deaccent'] == 2 || $ascii) $id = Clean::romanize($id);
+ if ($conf['deaccent'] || $ascii) $id = Clean::deaccent($id, -1);
//remove specials
- $id = \dokuwiki\Utf8\Clean::stripspecials($id, $sepchar, '\*');
+ $id = Clean::stripspecials($id, $sepchar, '\*');
- if ($ascii) $id = \dokuwiki\Utf8\Clean::strip($id);
+ if ($ascii) $id = Clean::strip($id);
//clean up
$id = preg_replace($sepcharpat, $sepchar, $id);
@@ -244,7 +247,7 @@ function noNSorNS($id)
*/
function sectionID($title, &$check)
{
- $title = str_replace(array(':','.'), '', cleanID($title));
+ $title = str_replace([':', '.'], '', cleanID($title));
$new = ltrim($title, '0123456789_-');
if (empty($new)) {
$title = 'section' . preg_replace('/[^0-9]+/', '', $title); //keep numbers from headline
@@ -359,7 +362,7 @@ function wikiFN($raw_id, $rev = '', $clean = true)
}
if (!isset($cache[$id])) {
- $cache[$id] = array();
+ $cache[$id] = [];
}
$cache[$id][$rev] = $fn;
return $fn;
@@ -394,6 +397,7 @@ function metaFN($id, $ext)
global $conf;
$id = cleanID($id);
$id = str_replace(':', '/', $id);
+
$fn = $conf['metadir'] . '/' . utf8_encodeFN($id) . $ext;
return $fn;
}
@@ -412,6 +416,7 @@ function mediaMetaFN($id, $ext)
global $conf;
$id = cleanID($id);
$id = str_replace(':', '/', $id);
+
$fn = $conf['mediametadir'] . '/' . utf8_encodeFN($id) . $ext;
return $fn;
}
@@ -430,7 +435,7 @@ function metaFiles($id)
$basename = metaFN($id, '');
$files = glob($basename . '.*', GLOB_MARK);
// filter files like foo.bar.meta when $id == 'foo'
- return $files ? preg_grep('/^' . preg_quote($basename, '/') . '\.[^.\/]*$/u', $files) : array();
+ return $files ? preg_grep('/^' . preg_quote($basename, '/') . '\.[^.\/]*$/u', $files) : [];
}
/**
@@ -504,7 +509,7 @@ function localeFN($id, $ext = 'txt')
function resolve_id($ns, $id, $clean = true)
{
global $conf;
- dbg_deprecated(\dokuwiki\File\Resolver::class . ' and its children');
+ dbg_deprecated(Resolver::class . ' and its children');
// some pre cleaning for useslash:
if ($conf['useslash']) $id = str_replace('/', ':', $id);
@@ -518,10 +523,10 @@ function resolve_id($ns, $id, $clean = true)
$id = $ns . ':' . $id;
// cleanup relatives
- $result = array();
+ $result = [];
$pathA = explode(':', $id);
if (!$pathA[0]) $result[] = '';
- foreach ($pathA as $key => $dir) {
+ foreach ($pathA as $dir) {
if ($dir == '..') {
if (end($result) == '..') {
$result[] = '..';
@@ -617,11 +622,8 @@ function getCacheName($data, $ext = '')
*/
function isHiddenPage($id)
{
- $data = array(
- 'id' => $id,
- 'hidden' => false
- );
- \dokuwiki\Extension\Event::createAndTrigger('PAGEUTILS_ID_HIDEPAGE', $data, '_isHiddenPage');
+ $data = ['id' => $id, 'hidden' => false];
+ Event::createAndTrigger('PAGEUTILS_ID_HIDEPAGE', $data, '_isHiddenPage');
return $data['hidden'];
}
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 0f309cc3d..23fc5d788 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -6,7 +6,7 @@
* @author Harry Fuecks <hfuecks@gmail.com>
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Extension\PluginInterface;
use dokuwiki\Cache\CacheInstructions;
use dokuwiki\Cache\CacheRenderer;
use dokuwiki\ChangeLog\PageChangeLog;
@@ -91,17 +91,15 @@ function p_wiki_xhtml($id, $rev = '', $excuse = true, $date_at = '')
} elseif ($excuse) {
$ret = p_locale_xhtml('norev');
}
- } else {
- if (file_exists($file)) {
- $ret = p_cached_output($file, 'xhtml', $id);
- } elseif ($excuse) {
- //check if the page once existed
- $changelog = new PageChangeLog($id);
- if ($changelog->hasRevisions()) {
- $ret = p_locale_xhtml('onceexisted');
- } else {
- $ret = p_locale_xhtml('newpage');
- }
+ } elseif (file_exists($file)) {
+ $ret = p_cached_output($file, 'xhtml', $id);
+ } elseif ($excuse) {
+ //check if the page once existed
+ $changelog = new PageChangeLog($id);
+ if ($changelog->hasRevisions()) {
+ $ret = p_locale_xhtml('onceexisted');
+ } else {
+ $ret = p_locale_xhtml('newpage');
}
}
@@ -193,7 +191,7 @@ function p_cached_instructions($file, $cacheonly = false, $id = '')
if ($cacheonly || $cache->useCache() || (isset($run[$file]) && !defined('DOKU_UNITTEST'))) {
return $cache->retrieveCache();
- } else if (file_exists($file)) {
+ } elseif (file_exists($file)) {
// no cache - do some work
$ins = p_get_instructions(io_readWikiPage($file, $id));
if ($cache->storeCache($ins)) {
@@ -386,14 +384,14 @@ function p_set_metadata($id, $data, $render = false, $persistent = true)
// these keys, must have subkeys - a legitimate value must be an array
if (is_array($value)) {
- $meta['current'][$key] = !empty($meta['current'][$key]) ?
- array_replace((array)$meta['current'][$key], $value) :
- $value;
+ $meta['current'][$key] = empty($meta['current'][$key]) ?
+ $value :
+ array_replace((array)$meta['current'][$key], $value);
if ($persistent) {
- $meta['persistent'][$key] = !empty($meta['persistent'][$key]) ?
- array_replace((array)$meta['persistent'][$key], $value) :
- $value;
+ $meta['persistent'][$key] = empty($meta['persistent'][$key]) ?
+ $value :
+ array_replace((array)$meta['persistent'][$key], $value);
}
}
@@ -576,11 +574,11 @@ function p_get_parsermodes()
// add syntax plugins
$pluginlist = plugin_list('syntax');
- if (count($pluginlist)) {
+ if ($pluginlist !== []) {
global $PARSER_MODES;
foreach ($pluginlist as $p) {
/** @var SyntaxPlugin $obj */
- if (!$obj = plugin_load('syntax', $p)) continue; //attempt to load plugin into $obj
+ if (!($obj = plugin_load('syntax', $p)) instanceof PluginInterface) continue; //attempt to load plugin into $obj
$PARSER_MODES[$obj->getType()][] = "plugin_$p"; //register mode type
//add to modes
$modes[] = [
@@ -605,11 +603,7 @@ function p_get_parsermodes()
foreach ($std_modes as $m) {
$class = 'dokuwiki\\Parsing\\ParserMode\\' . ucfirst($m);
$obj = new $class();
- $modes[] = array(
- 'sort' => $obj->getSort(),
- 'mode' => $m,
- 'obj' => $obj
- );
+ $modes[] = ['sort' => $obj->getSort(), 'mode' => $m, 'obj' => $obj];
}
// add formatting modes
@@ -618,11 +612,11 @@ function p_get_parsermodes()
];
foreach ($fmt_modes as $m) {
$obj = new Formatting($m);
- $modes[] = array(
+ $modes[] = [
'sort' => $obj->getSort(),
'mode' => $m,
'obj' => $obj
- );
+ ];
}
// add modes which need files
@@ -656,8 +650,7 @@ function p_get_parsermodes()
*/
function p_sort_modes($a, $b)
{
- if ($a['sort'] == $b['sort']) return 0;
- return ($a['sort'] < $b['sort']) ? -1 : 1;
+ return $a['sort'] <=> $b['sort'];
}
/**
@@ -724,7 +717,7 @@ function p_get_renderer($mode)
/** @var PluginController $plugin_controller */
global $conf, $plugin_controller;
- $rname = !empty($conf['renderer_' . $mode]) ? $conf['renderer_' . $mode] : $mode;
+ $rname = empty($conf['renderer_' . $mode]) ? $mode : $conf['renderer_' . $mode];
$rclass = "Doku_Renderer_$rname";
// if requested earlier or a bundled renderer
diff --git a/inc/search.php b/inc/search.php
index 27ca453c7..d270152f2 100644
--- a/inc/search.php
+++ b/inc/search.php
@@ -5,7 +5,8 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\Utf8\PhpString;
+use dokuwiki\File\MediaFile;
use dokuwiki\Utf8\Sort;
/**
@@ -25,9 +26,9 @@ use dokuwiki\Utf8\Sort;
* @author Andreas Gohr <andi@splitbrain.org>
*/
function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort='natural'){
- $dirs = array();
- $files = array();
- $filepaths = array();
+ $dirs = [];
+ $files = [];
+ $filepaths = [];
// safeguard against runaways #1452
if($base == '' || $base == '/') {
@@ -58,13 +59,13 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort='natural'){
//give directories to userfunction then recurse
foreach($dirs as $dir){
- if (call_user_func_array($func, array(&$data,$base,$dir,'d',$lvl,$opts))){
+ if (call_user_func_array($func, [&$data, $base, $dir, 'd', $lvl, $opts])){
search($data,$base,$func,$opts,$dir,$lvl+1,$sort);
}
}
//now handle the files
foreach($files as $file){
- call_user_func_array($func, array(&$data,$base,$file,'f',$lvl,$opts));
+ call_user_func_array($func, [&$data, $base, $file, 'f', $lvl, $opts]);
}
}
@@ -106,11 +107,11 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort='natural'){
* @return bool
*/
function search_qsearch(&$data,$base,$file,$type,$lvl,$opts){
- $opts = array(
- 'idmatch' => '(^|:)'.preg_quote($opts['query'],'/').'/',
- 'listfiles' => true,
- 'pagesonly' => true,
- );
+ $opts = [
+ 'idmatch' => '(^|:)'.preg_quote($opts['query'],'/').'/',
+ 'listfiles' => true,
+ 'pagesonly' => true
+ ];
return search_universal($data,$base,$file,$type,$lvl,$opts);
}
@@ -132,15 +133,15 @@ function search_qsearch(&$data,$base,$file,$type,$lvl,$opts){
*/
function search_index(&$data,$base,$file,$type,$lvl,$opts){
global $conf;
- $ns = isset($opts['ns']) ? $opts['ns'] : '';
- $opts = array(
+ $ns = $opts['ns'] ?? '';
+ $opts = [
'pagesonly' => true,
'listdirs' => true,
'listfiles' => empty($opts['nofiles']),
'sneakyacl' => $conf['sneaky_index'],
// Hacky, should rather use recmatch
- 'depth' => preg_match('#^'.preg_quote($file, '#').'(/|$)#','/'.$ns) ? 0 : -1
- );
+ 'depth' => preg_match('#^'.preg_quote($file, '#').'(/|$)#','/'.$ns) ? 0 : -1,
+ ];
return search_universal($data, $base, $file, $type, $lvl, $opts);
}
@@ -160,9 +161,7 @@ function search_index(&$data,$base,$file,$type,$lvl,$opts){
* @return bool
*/
function search_namespaces(&$data,$base,$file,$type,$lvl,$opts){
- $opts = array(
- 'listdirs' => true,
- );
+ $opts = ['listdirs' => true];
return search_universal($data,$base,$file,$type,$lvl,$opts);
}
@@ -195,7 +194,7 @@ function search_media(&$data,$base,$file,$type,$lvl,$opts){
return true;
}
- $info = array();
+ $info = [];
$info['id'] = pathID($file,true);
if($info['id'] != cleanID($info['id'])){
if(!empty($opts['showmsg']))
@@ -214,7 +213,7 @@ function search_media(&$data,$base,$file,$type,$lvl,$opts){
return false;
}
- $info['file'] = \dokuwiki\Utf8\PhpString::basename($file);
+ $info['file'] = PhpString::basename($file);
$info['size'] = filesize($base.'/'.$file);
$info['mtime'] = filemtime($base.'/'.$file);
$info['writable'] = is_writable($base.'/'.$file);
@@ -280,7 +279,7 @@ function search_mediafiles(&$data,$base,$file,$type,$lvl,$opts){
return false;
}
- $data[] = new \dokuwiki\File\MediaFile($id);
+ $data[] = new MediaFile($id);
return false;
}
@@ -338,7 +337,7 @@ function search_pagename(&$data,$base,$file,$type,$lvl,$opts){
//simple stringmatching
if (!empty($opts['query'])){
- if(strpos($file,$opts['query']) !== false){
+ if(strpos($file,(string) $opts['query']) !== false){
//check ACL
$id = pathID($file);
if(auth_quickaclcheck($id) < AUTH_READ){
@@ -385,7 +384,7 @@ function search_allpages(&$data,$base,$file,$type,$lvl,$opts){
//only search txt files
if(substr($file,-4) != '.txt') return true;
- $item = array();
+ $item = [];
$item['id'] = pathID($file);
if(empty($opts['skipacl']) && auth_quickaclcheck($item['id']) < AUTH_READ){
return false;
@@ -485,7 +484,7 @@ function pathID($path,$keeptxt=false){
* @author Andreas Gohr <gohr@cosmocode.de>
*/
function search_universal(&$data,$base,$file,$type,$lvl,$opts){
- $item = array();
+ $item = [];
$return = true;
// get ID and check if it is a valid one
@@ -552,7 +551,7 @@ function search_universal(&$data,$base,$file,$type,$lvl,$opts){
$item['open'] = $return;
if(!empty($opts['meta'])){
- $item['file'] = \dokuwiki\Utf8\PhpString::basename($file);
+ $item['file'] = PhpString::basename($file);
$item['size'] = filesize($base.'/'.$file);
$item['mtime'] = filemtime($base.'/'.$file);
$item['rev'] = $item['mtime'];
diff --git a/inc/template.php b/inc/template.php
index 0e4e3e0c5..f8d795f7d 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -5,7 +5,15 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-
+use dokuwiki\ActionRouter;
+use dokuwiki\Action\Exception\FatalException;
+use dokuwiki\Extension\PluginInterface;
+use dokuwiki\Ui\Admin;
+use dokuwiki\StyleUtils;
+use dokuwiki\Menu\Item\AbstractItem;
+use dokuwiki\Form\Form;
+use dokuwiki\Menu\MobileMenu;
+use dokuwiki\Ui\Subscribe;
use dokuwiki\Extension\AdminPlugin;
use dokuwiki\Extension\Event;
use dokuwiki\File\PageResolver;
@@ -95,10 +103,10 @@ function tpl_content($prependTOC = true) {
* @return bool
*/
function tpl_content_core() {
- $router = \dokuwiki\ActionRouter::getInstance();
+ $router = ActionRouter::getInstance();
try {
$router->getAction()->tplContent();
- } catch(\dokuwiki\Action\Exception\FatalException $e) {
+ } catch(FatalException $e) {
// there was no content for the action
msg(hsc($e->getMessage()), -1);
return false;
@@ -125,7 +133,7 @@ function tpl_toc($return = false) {
global $INFO;
global $conf;
global $INPUT;
- $toc = array();
+ $toc = [];
if(is_array($TOC)) {
// if a TOC was prepared in global scope, always use it
@@ -138,9 +146,9 @@ function tpl_toc($return = false) {
} else {
$tocok = true;
}
- $toc = isset($meta['description']['tableofcontents']) ? $meta['description']['tableofcontents'] : null;
+ $toc = $meta['description']['tableofcontents'] ?? null;
if(!$tocok || !is_array($toc) || !$conf['tocminheads'] || count($toc) < $conf['tocminheads']) {
- $toc = array();
+ $toc = [];
}
} elseif($ACT == 'admin') {
// try to load admin plugin TOC
@@ -182,12 +190,12 @@ function tpl_admin() {
}
}
- if($plugin !== null) {
+ if($plugin instanceof PluginInterface) {
if(!is_array($TOC)) $TOC = $plugin->getTOC(); //if TOC wasn't requested yet
if($INFO['prependTOC']) tpl_toc();
$plugin->html();
} else {
- $admin = new dokuwiki\Ui\Admin();
+ $admin = new Admin();
$admin->show();
}
return true;
@@ -218,7 +226,7 @@ function tpl_metaheaders($alt = true) {
global $INPUT;
// prepare the head array
- $head = array();
+ $head = [];
// prepare seed for js and css
$tseed = $updateVersion;
@@ -228,73 +236,90 @@ function tpl_metaheaders($alt = true) {
$tseed = md5($tseed);
// the usual stuff
- $head['meta'][] = array('name'=> 'generator', 'content'=> 'DokuWiki');
+ $head['meta'][] = ['name'=> 'generator', 'content'=> 'DokuWiki'];
if(actionOK('search')) {
- $head['link'][] = array(
- 'rel' => 'search', 'type'=> 'application/opensearchdescription+xml',
- 'href'=> DOKU_BASE.'lib/exe/opensearch.php', 'title'=> $conf['title']
- );
+ $head['link'][] = [
+ 'rel' => 'search',
+ 'type'=> 'application/opensearchdescription+xml',
+ 'href'=> DOKU_BASE.'lib/exe/opensearch.php',
+ 'title'=> $conf['title']
+ ];
}
- $head['link'][] = array('rel'=> 'start', 'href'=> DOKU_BASE);
+ $head['link'][] = ['rel'=> 'start', 'href'=> DOKU_BASE];
if(actionOK('index')) {
- $head['link'][] = array(
- 'rel' => 'contents', 'href'=> wl($ID, 'do=index', false, '&'),
+ $head['link'][] = [
+ 'rel' => 'contents',
+ 'href'=> wl($ID, 'do=index', false, '&'),
'title'=> $lang['btn_index']
- );
+ ];
}
if (actionOK('manifest')) {
- $head['link'][] = array('rel'=> 'manifest', 'href'=> DOKU_BASE.'lib/exe/manifest.php');
+ $head['link'][] = [
+ 'rel'=> 'manifest',
+ 'href'=> DOKU_BASE.'lib/exe/manifest.php'
+ ];
}
- $styleUtil = new \dokuwiki\StyleUtils();
+ $styleUtil = new StyleUtils();
$styleIni = $styleUtil->cssStyleini();
$replacements = $styleIni['replacements'];
if (!empty($replacements['__theme_color__'])) {
- $head['meta'][] = array('name' => 'theme-color', 'content' => $replacements['__theme_color__']);
+ $head['meta'][] = [
+ 'name' => 'theme-color',
+ 'content' => $replacements['__theme_color__']
+ ];
}
if($alt) {
if(actionOK('rss')) {
- $head['link'][] = array(
- 'rel' => 'alternate', 'type'=> 'application/rss+xml',
- 'title'=> $lang['btn_recent'], 'href'=> DOKU_BASE.'feed.php'
- );
- $head['link'][] = array(
- 'rel' => 'alternate', 'type'=> 'application/rss+xml',
+ $head['link'][] = [
+ 'rel' => 'alternate',
+ 'type'=> 'application/rss+xml',
+ 'title'=> $lang['btn_recent'],
+ 'href'=> DOKU_BASE.'feed.php'
+ ];
+ $head['link'][] = [
+ 'rel' => 'alternate',
+ 'type'=> 'application/rss+xml',
'title'=> $lang['currentns'],
'href' => DOKU_BASE.'feed.php?mode=list&ns='.(isset($INFO) ? $INFO['namespace'] : '')
- );
+ ];
}
if(($ACT == 'show' || $ACT == 'search') && $INFO['writable']) {
- $head['link'][] = array(
+ $head['link'][] = [
'rel' => 'edit',
'title'=> $lang['btn_edit'],
'href' => wl($ID, 'do=edit', false, '&')
- );
+ ];
}
if(actionOK('rss') && $ACT == 'search') {
- $head['link'][] = array(
- 'rel' => 'alternate', 'type'=> 'application/rss+xml',
+ $head['link'][] = [
+ 'rel' => 'alternate',
+ 'type'=> 'application/rss+xml',
'title'=> $lang['searchresult'],
'href' => DOKU_BASE.'feed.php?mode=search&q='.$QUERY
- );
+ ];
}
if(actionOK('export_xhtml')) {
- $head['link'][] = array(
- 'rel' => 'alternate', 'type'=> 'text/html', 'title'=> $lang['plainhtml'],
+ $head['link'][] = [
+ 'rel' => 'alternate',
+ 'type'=> 'text/html',
+ 'title'=> $lang['plainhtml'],
'href'=> exportlink($ID, 'xhtml', '', false, '&')
- );
+ ];
}
if(actionOK('export_raw')) {
- $head['link'][] = array(
- 'rel' => 'alternate', 'type'=> 'text/plain', 'title'=> $lang['wikimarkup'],
+ $head['link'][] = [
+ 'rel' => 'alternate',
+ 'type'=> 'text/plain',
+ 'title'=> $lang['wikimarkup'],
'href'=> exportlink($ID, 'raw', '', false, '&')
- );
+ ];
}
}
@@ -303,62 +328,62 @@ function tpl_metaheaders($alt = true) {
if($INFO['exists']) {
//delay indexing:
if((time() - $INFO['lastmod']) >= $conf['indexdelay'] && !isHiddenPage($ID) ) {
- $head['meta'][] = array('name'=> 'robots', 'content'=> 'index,follow');
+ $head['meta'][] = ['name'=> 'robots', 'content'=> 'index,follow'];
} else {
- $head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,nofollow');
+ $head['meta'][] = ['name'=> 'robots', 'content'=> 'noindex,nofollow'];
}
$canonicalUrl = wl($ID, '', true, '&');
if ($ID == $conf['start']) {
$canonicalUrl = DOKU_URL;
}
- $head['link'][] = array('rel'=> 'canonical', 'href'=> $canonicalUrl);
+ $head['link'][] = ['rel'=> 'canonical', 'href'=> $canonicalUrl];
} else {
- $head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,follow');
+ $head['meta'][] = ['name'=> 'robots', 'content'=> 'noindex,follow'];
}
} elseif(defined('DOKU_MEDIADETAIL')) {
- $head['meta'][] = array('name'=> 'robots', 'content'=> 'index,follow');
+ $head['meta'][] = ['name'=> 'robots', 'content'=> 'index,follow'];
} else {
- $head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,nofollow');
+ $head['meta'][] = ['name'=> 'robots', 'content'=> 'noindex,nofollow'];
}
// set metadata
if($ACT == 'show' || $ACT == 'export_xhtml') {
// keywords (explicit or implicit)
if(!empty($INFO['meta']['subject'])) {
- $head['meta'][] = array('name'=> 'keywords', 'content'=> join(',', $INFO['meta']['subject']));
+ $head['meta'][] = ['name'=> 'keywords', 'content'=> implode(',', $INFO['meta']['subject'])];
} else {
- $head['meta'][] = array('name'=> 'keywords', 'content'=> str_replace(':', ',', $ID));
+ $head['meta'][] = ['name'=> 'keywords', 'content'=> str_replace(':', ',', $ID)];
}
}
// load stylesheets
- $head['link'][] = array(
+ $head['link'][] = [
'rel' => 'stylesheet',
'href'=> DOKU_BASE.'lib/exe/css.php?t='.rawurlencode($conf['template']).'&tseed='.$tseed
- );
+ ];
$script = "var NS='".(isset($INFO)?$INFO['namespace']:'')."';";
if($conf['useacl'] && $INPUT->server->str('REMOTE_USER')) {
$script .= "var SIG=".toolbar_signature().";";
}
jsinfo();
- $script .= 'var JSINFO = ' . json_encode($JSINFO).';';
- $head['script'][] = array('_data'=> $script);
+ $script .= 'var JSINFO = ' . json_encode($JSINFO, JSON_THROW_ON_ERROR).';';
+ $head['script'][] = ['_data'=> $script];
// load jquery
$jquery = getCdnUrls();
foreach($jquery as $src) {
- $head['script'][] = array(
- '_data' => '',
- 'src' => $src,
- ) + ($conf['defer_js'] ? [ 'defer' => 'defer'] : []);
+ $head['script'][] = [
+ '_data' => '',
+ 'src' => $src
+ ] + ($conf['defer_js'] ? [ 'defer' => 'defer'] : []);
}
// load our javascript dispatcher
- $head['script'][] = array(
- '_data'=> '',
- 'src' => DOKU_BASE.'lib/exe/js.php'.'?t='.rawurlencode($conf['template']).'&tseed='.$tseed,
- ) + ($conf['defer_js'] ? [ 'defer' => 'defer'] : []);
+ $head['script'][] = [
+ '_data'=> '',
+ 'src' => DOKU_BASE.'lib/exe/js.php'.'?t='.rawurlencode($conf['template']).'&tseed='.$tseed
+ ] + ($conf['defer_js'] ? [ 'defer' => 'defer'] : []);
// trigger event here
Event::createAndTrigger('TPL_METAHEADER_OUTPUT', $head, '_tpl_metaheaders_action', true);
@@ -393,7 +418,7 @@ function _tpl_metaheaders_action($data) {
$attr['_data'].
"\n/*!]]>*/";
- echo '>', isset($attr['_data']) ? $attr['_data'] : '', '</', $tag, '>';
+ echo '>', $attr['_data'] ?? '', '</', $tag, '>';
} else {
echo '/>';
}
@@ -549,14 +574,15 @@ function tpl_actionlink($type, $pre = '', $suf = '', $inner = '', $return = fals
if(strpos($caption, '%s')){
$caption = sprintf($caption, $replacement);
}
- $akey = $addTitle = '';
+ $akey = '';
+ $addTitle = '';
if($accesskey) {
$akey = 'accesskey="'.$accesskey.'" ';
$addTitle = ' ['.strtoupper($accesskey).']';
}
$rel = $nofollow ? 'rel="nofollow" ' : '';
$out = tpl_link(
- $linktarget, $pre.(($inner) ? $inner : $caption).$suf,
+ $linktarget, $pre.($inner ?: $caption).$suf,
'class="action '.$type.'" '.
$akey.$rel.
'title="'.hsc($caption).$addTitle.'"', true
@@ -587,7 +613,7 @@ function tpl_get_action($type) {
$class = '\\dokuwiki\\Menu\\Item\\' . ucfirst($type);
if(class_exists($class)) {
try {
- /** @var \dokuwiki\Menu\Item\AbstractItem $item */
+ /** @var AbstractItem $item */
$item = new $class;
$data = $item->getLegacyData();
$unknown = false;
@@ -596,15 +622,15 @@ function tpl_get_action($type) {
}
} else {
global $ID;
- $data = array(
+ $data = [
'accesskey' => null,
'type' => $type,
'id' => $ID,
'method' => 'get',
- 'params' => array('do' => $type),
+ 'params' => ['do' => $type],
'nofollow' => true,
- 'replacement' => '',
- );
+ 'replacement' => ''
+ ];
$unknown = true;
}
@@ -648,7 +674,7 @@ function tpl_action($type, $link = false, $wrapper = false, $return = false, $pr
if($return) return $out;
print $out;
- return $out ? true : false;
+ return (bool) $out;
}
/**
@@ -676,7 +702,7 @@ function tpl_searchform($ajax = true, $autocomplete = true) {
// don't print the search form if search action has been disabled
if(!actionOK('search')) return false;
- $searchForm = new dokuwiki\Form\Form([
+ $searchForm = new Form([
'action' => wl(),
'method' => 'get',
'role' => 'search',
@@ -751,7 +777,7 @@ function tpl_breadcrumbs($sep = null, $return = false) {
}
if($return) return $out;
print $out;
- return $out ? true : false;
+ return (bool) $out;
}
/**
@@ -821,7 +847,7 @@ function tpl_youarehere($sep = null, $return = false) {
$out .= tpl_pagelink($page, null, true);
if($return) return $out;
print $out;
- return $out ? true : false;
+ return (bool) $out;
}
/**
@@ -942,7 +968,7 @@ function tpl_pagetitle($id = null, $ret = false) {
/** @var $plugin AdminPlugin */
if ($plugin = plugin_getRequestAdminPlugin()){
$plugin_title = $plugin->getMenuText($conf['lang']);
- $page_title = $plugin_title ? $plugin_title : $plugin->getPluginName();
+ $page_title = $plugin_title ?: $plugin->getPluginName();
}
break;
@@ -1072,20 +1098,18 @@ function tpl_get_img_meta() {
include($config_file);
}
}
- /** @var array $fields the included array with metadata */
-
- $tags = array();
+ $tags = [];
foreach($fields as $tag){
- $t = array();
+ $t = [];
if (!empty($tag[0])) {
- $t = array($tag[0]);
+ $t = [$tag[0]];
}
if(isset($tag[3]) && is_array($tag[3])) {
$t = array_merge($t,$tag[3]);
}
$value = tpl_img_getTag($t);
if ($value) {
- $tags[] = array('langkey' => $tag[1], 'type' => $tag[2], 'value' => $value);
+ $tags[] = ['langkey' => $tag[1], 'type' => $tag[2], 'value' => $value];
}
}
return $tags;
@@ -1113,18 +1137,16 @@ function tpl_img($maxwidth = 0, $maxheight = 0, $link = true, $params = null) {
//resize to given max values
$ratio = 1;
- if($w >= $h) {
+ if ($w >= $h) {
if($maxwidth && $w >= $maxwidth) {
$ratio = $maxwidth / $w;
} elseif($maxheight && $h > $maxheight) {
$ratio = $maxheight / $h;
}
- } else {
- if($maxheight && $h >= $maxheight) {
- $ratio = $maxheight / $h;
- } elseif($maxwidth && $w > $maxwidth) {
- $ratio = $maxwidth / $w;
- }
+ } elseif ($maxheight && $h >= $maxheight) {
+ $ratio = $maxheight / $h;
+ } elseif($maxwidth && $w > $maxwidth) {
+ $ratio = $maxwidth / $w;
}
if($ratio) {
$w = floor($ratio * $w);
@@ -1132,13 +1154,13 @@ function tpl_img($maxwidth = 0, $maxheight = 0, $link = true, $params = null) {
}
//prepare URLs
- $url = ml($IMG, array('cache'=> $INPUT->str('cache'),'rev'=>$REV), true, '&');
- $src = ml($IMG, array('cache'=> $INPUT->str('cache'),'rev'=>$REV, 'w'=> $w, 'h'=> $h), true, '&');
+ $url = ml($IMG, ['cache'=> $INPUT->str('cache'), 'rev'=>$REV], true, '&');
+ $src = ml($IMG, ['cache'=> $INPUT->str('cache'), 'rev'=>$REV, 'w'=> $w, 'h'=> $h], true, '&');
//prepare attributes
$alt = tpl_img_getTag('Simple.Title');
if(is_null($params)) {
- $p = array();
+ $p = [];
} else {
$p = $params;
}
@@ -1153,7 +1175,7 @@ function tpl_img($maxwidth = 0, $maxheight = 0, $link = true, $params = null) {
}
$p['src'] = $src;
- $data = array('url'=> ($link ? $url : null), 'params'=> $p);
+ $data = ['url'=> ($link ? $url : null), 'params'=> $p];
return Event::createAndTrigger('TPL_IMG_DISPLAY', $data, '_tpl_img_action', true);
}
@@ -1184,7 +1206,7 @@ function _tpl_img_action($data) {
function tpl_indexerWebBug() {
global $ID;
- $p = array();
+ $p = [];
$p['src'] = DOKU_BASE.'lib/exe/taskrunner.php?id='.rawurlencode($ID).
'&'.time();
$p['width'] = 2; //no more 1x1 px image because we live in times of ad blockers...
@@ -1221,11 +1243,7 @@ function tpl_getConf($id, $notset=false) {
}
}
- if(isset($conf['tpl'][$tpl][$id])){
- return $conf['tpl'][$tpl][$id];
- }
-
- return $notset;
+ return $conf['tpl'][$tpl][$id] ?? $notset;
}
/**
@@ -1239,7 +1257,7 @@ function tpl_getConf($id, $notset=false) {
function tpl_loadConfig() {
$file = tpl_incdir().'/conf/default.php';
- $conf = array();
+ $conf = [];
if(!file_exists($file)) return false;
@@ -1259,14 +1277,14 @@ function tpl_loadConfig() {
* @return string
*/
function tpl_getLang($id) {
- static $lang = array();
+ static $lang = [];
if(count($lang) === 0) {
global $conf, $config_cascade; // definitely don't invoke "global $lang"
$path = tpl_incdir() . 'lang/';
- $lang = array();
+ $lang = [];
// don't include once
@include($path . 'en/lang.php');
@@ -1285,7 +1303,7 @@ function tpl_getLang($id) {
}
}
}
- return isset($lang[$id]) ? $lang[$id] : '';
+ return $lang[$id] ?? '';
}
/**
@@ -1344,7 +1362,7 @@ function tpl_mediaContent($fromajax = false, $sort='natural') {
global $INPUT;
$do = $INPUT->extract('do')->str('do');
- if(in_array($do, array('save', 'cancel'))) $do = '';
+ if(in_array($do, ['save', 'cancel'])) $do = '';
if(!$do) {
if($INPUT->bool('edit')) {
@@ -1358,7 +1376,7 @@ function tpl_mediaContent($fromajax = false, $sort='natural') {
// output the content pane, wrapped in an event.
if(!$fromajax) ptln('<div id="media__content">');
- $data = array('do' => $do);
+ $data = ['do' => $do];
$evt = new Event('MEDIAMANAGER_CONTENT_OUTPUT', $data);
if($evt->advise_before()) {
$do = $data['do'];
@@ -1394,7 +1412,7 @@ function tpl_mediaFileList() {
global $INPUT;
$opened_tab = $INPUT->str('tab_files');
- if(!$opened_tab || !in_array($opened_tab, array('files', 'upload', 'search'))) $opened_tab = 'files';
+ if(!$opened_tab || !in_array($opened_tab, ['files', 'upload', 'search'])) $opened_tab = 'files';
if($INPUT->str('mediado') == 'update') $opened_tab = 'upload';
echo '<h2 class="a11y">'.$lang['mediaselect'].'</h2>'.NL;
@@ -1403,7 +1421,7 @@ function tpl_mediaFileList() {
echo '<div class="panelHeader">'.NL;
echo '<h3>';
- $tabTitle = ($NS) ? $NS : '['.$lang['mediaroot'].']';
+ $tabTitle = $NS ?: '['.$lang['mediaroot'].']';
printf($lang['media_'.$opened_tab], '<strong>'.hsc($tabTitle).'</strong>');
echo '</h3>'.NL;
if($opened_tab === 'search' || $opened_tab === 'files') {
@@ -1450,8 +1468,8 @@ function tpl_mediaFileDetails($image, $rev) {
$opened_tab = $INPUT->str('tab_details');
- $tab_array = array('view');
- list(, $mime) = mimetype($image);
+ $tab_array = ['view'];
+ [, $mime] = mimetype($image);
if($mime == 'image/jpeg') {
$tab_array[] = 'edit';
}
@@ -1466,9 +1484,10 @@ function tpl_mediaFileDetails($image, $rev) {
media_tabs_details($image, $opened_tab);
echo '<div class="panelHeader"><h3>';
- list($ext) = mimetype($image, false);
+ [$ext] = mimetype($image, false);
$class = preg_replace('/[^_\-a-z0-9]+/i', '_', $ext);
$class = 'select mediafile mf_'.$class;
+
$attributes = $rev ? ['rev' => $rev] : [];
$tabTitle = '<strong><a href="'.ml($image, $attributes).'" class="'.$class.'" title="'.$lang['mediaview'].'">'.
$image.'</a>'.'</strong>';
@@ -1522,7 +1541,7 @@ function tpl_mediaTree() {
*/
function tpl_actiondropdown($empty = '', $button = '&gt;') {
dbg_deprecated('see devel:menus');
- $menu = new \dokuwiki\Menu\MobileMenu();
+ $menu = new MobileMenu();
echo $menu->getDropdown($empty, $button);
}
@@ -1603,8 +1622,8 @@ function tpl_include_page($pageid, $print = true, $propagate = false, $useacl =
* @deprecated 2020-07-23
*/
function tpl_subscribe() {
- dbg_deprecated(\dokuwiki\Ui\Subscribe::class .'::show()');
- (new \dokuwiki\Ui\Subscribe)->show();
+ dbg_deprecated(Subscribe::class .'::show()');
+ (new Subscribe)->show();
}
/**
@@ -1654,7 +1673,7 @@ function tpl_getMediaFile($search, $abs = false, &$imginfo = null, $fallback = t
// manage non existing target
if (!file_exists($file)) {
// give result for fallback image
- if ($fallback === true) {
+ if ($fallback) {
$file = DOKU_INC . 'lib/images/blank.gif';
// stop process if false result is required (if $fallback is false)
} else {
@@ -1698,7 +1717,7 @@ function tpl_getMediaFile($search, $abs = false, &$imginfo = null, $fallback = t
*/
function tpl_includeFile($file) {
global $config_cascade;
- foreach(array('protected', 'local', 'default') as $config_group) {
+ foreach(['protected', 'local', 'default'] as $config_group) {
if(empty($config_cascade['main'][$config_group])) continue;
foreach($config_cascade['main'][$config_group] as $conf_file) {
$dir = dirname($conf_file);
@@ -1724,23 +1743,23 @@ function tpl_includeFile($file) {
* @param array $types - list of icon types to display (favicon|mobile|generic)
* @return string
*/
-function tpl_favicon($types = array('favicon')) {
+function tpl_favicon($types = ['favicon']) {
$return = '';
foreach($types as $type) {
switch($type) {
case 'favicon':
- $look = array(':wiki:favicon.ico', ':favicon.ico', 'images/favicon.ico');
+ $look = [':wiki:favicon.ico', ':favicon.ico', 'images/favicon.ico'];
$return .= '<link rel="shortcut icon" href="'.tpl_getMediaFile($look).'" />'.NL;
break;
case 'mobile':
- $look = array(':wiki:apple-touch-icon.png', ':apple-touch-icon.png', 'images/apple-touch-icon.png');
+ $look = [':wiki:apple-touch-icon.png', ':apple-touch-icon.png', 'images/apple-touch-icon.png'];
$return .= '<link rel="apple-touch-icon" href="'.tpl_getMediaFile($look).'" />'.NL;
break;
case 'generic':
// ideal world solution, which doesn't work in any browser yet
- $look = array(':wiki:favicon.svg', ':favicon.svg', 'images/favicon.svg');
+ $look = [':wiki:favicon.svg', ':favicon.svg', 'images/favicon.svg'];
$return .= '<link rel="icon" href="'.tpl_getMediaFile($look).'" type="image/svg+xml" />'.NL;
break;
}
@@ -1804,15 +1823,15 @@ function tpl_classes() {
/** @var Input $INPUT */
global $INPUT;
- $classes = array(
+ $classes = [
'dokuwiki',
'mode_'.$ACT,
'tpl_'.$conf['template'],
$INPUT->server->bool('REMOTE_USER') ? 'loggedIn' : '',
(isset($INFO['exists']) && $INFO['exists']) ? '' : 'notFound',
- ($ID == $conf['start']) ? 'home' : '',
- );
- return join(' ', $classes);
+ ($ID == $conf['start']) ? 'home' : ''
+ ];
+ return implode(' ', $classes);
}
/**
@@ -1826,15 +1845,12 @@ function tpl_classes() {
*/
function tpl_toolsevent($toolsname, $items, $view = 'main') {
dbg_deprecated('see devel:menus');
- $data = array(
- 'view' => $view,
- 'items' => $items
- );
+ $data = ['view' => $view, 'items' => $items];
$hook = 'TEMPLATE_' . strtoupper($toolsname) . '_DISPLAY';
$evt = new Event($hook, $data);
if($evt->advise_before()) {
- foreach($evt->data['items'] as $k => $html) echo $html;
+ foreach($evt->data['items'] as $html) echo $html;
}
$evt->advise_after();
}
diff --git a/inc/toolbar.php b/inc/toolbar.php
index d49a96ddc..b441cbbe8 100644
--- a/inc/toolbar.php
+++ b/inc/toolbar.php
@@ -16,14 +16,14 @@
function toolbar_JSdefines($varname){
global $lang;
- $menu = array();
+ $menu = [];
$evt = new Event('TOOLBAR_DEFINE', $menu);
if ($evt->advise_before()){
// build button array
- $menu = array_merge($menu, array(
- array(
+ $menu = array_merge($menu, [
+ [
'type' => 'format',
'title' => $lang['qb_bold'],
'icon' => 'bold.png',
@@ -31,8 +31,8 @@ function toolbar_JSdefines($varname){
'open' => '**',
'close' => '**',
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'format',
'title' => $lang['qb_italic'],
'icon' => 'italic.png',
@@ -40,8 +40,8 @@ function toolbar_JSdefines($varname){
'open' => '//',
'close' => '//',
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'format',
'title' => $lang['qb_underl'],
'icon' => 'underline.png',
@@ -49,8 +49,8 @@ function toolbar_JSdefines($varname){
'open' => '__',
'close' => '__',
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'format',
'title' => $lang['qb_code'],
'icon' => 'mono.png',
@@ -58,8 +58,8 @@ function toolbar_JSdefines($varname){
'open' => "''",
'close' => "''",
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'format',
'title' => $lang['qb_strike'],
'icon' => 'strike.png',
@@ -67,9 +67,8 @@ function toolbar_JSdefines($varname){
'open' => '<del>',
'close' => '</del>',
'block' => false
- ),
-
- array(
+ ],
+ [
'type' => 'autohead',
'title' => $lang['qb_hequal'],
'icon' => 'hequal.png',
@@ -77,8 +76,8 @@ function toolbar_JSdefines($varname){
'text' => $lang['qb_h'],
'mod' => 0,
'block' => true
- ),
- array(
+ ],
+ [
'type' => 'autohead',
'title' => $lang['qb_hminus'],
'icon' => 'hminus.png',
@@ -86,8 +85,8 @@ function toolbar_JSdefines($varname){
'text' => $lang['qb_h'],
'mod' => 1,
'block' => true
- ),
- array(
+ ],
+ [
'type' => 'autohead',
'title' => $lang['qb_hplus'],
'icon' => 'hplus.png',
@@ -95,59 +94,57 @@ function toolbar_JSdefines($varname){
'text' => $lang['qb_h'],
'mod' => -1,
'block' => true
- ),
-
- array(
+ ],
+ [
'type' => 'picker',
'title' => $lang['qb_hs'],
'icon' => 'h.png',
'class' => 'pk_hl',
- 'list' => array(
- array(
- 'type' => 'format',
- 'title' => $lang['qb_h1'],
- 'icon' => 'h1.png',
- 'key' => '1',
- 'open' => '====== ',
- 'close' => ' ======\n',
- ),
- array(
- 'type' => 'format',
- 'title' => $lang['qb_h2'],
- 'icon' => 'h2.png',
- 'key' => '2',
- 'open' => '===== ',
- 'close' => ' =====\n',
- ),
- array(
- 'type' => 'format',
- 'title' => $lang['qb_h3'],
- 'icon' => 'h3.png',
- 'key' => '3',
- 'open' => '==== ',
- 'close' => ' ====\n',
- ),
- array(
- 'type' => 'format',
- 'title' => $lang['qb_h4'],
- 'icon' => 'h4.png',
- 'key' => '4',
- 'open' => '=== ',
- 'close' => ' ===\n',
- ),
- array(
- 'type' => 'format',
- 'title' => $lang['qb_h5'],
- 'icon' => 'h5.png',
- 'key' => '5',
- 'open' => '== ',
- 'close' => ' ==\n',
- ),
- ),
+ 'list' => [
+ [
+ 'type' => 'format',
+ 'title' => $lang['qb_h1'],
+ 'icon' => 'h1.png',
+ 'key' => '1',
+ 'open' => '====== ',
+ 'close' => ' ======\n'
+ ],
+ [
+ 'type' => 'format',
+ 'title' => $lang['qb_h2'],
+ 'icon' => 'h2.png',
+ 'key' => '2',
+ 'open' => '===== ',
+ 'close' => ' =====\n'
+ ],
+ [
+ 'type' => 'format',
+ 'title' => $lang['qb_h3'],
+ 'icon' => 'h3.png',
+ 'key' => '3',
+ 'open' => '==== ',
+ 'close' => ' ====\n'
+ ],
+ [
+ 'type' => 'format',
+ 'title' => $lang['qb_h4'],
+ 'icon' => 'h4.png',
+ 'key' => '4',
+ 'open' => '=== ',
+ 'close' => ' ===\n'
+ ],
+ [
+ 'type' => 'format',
+ 'title' => $lang['qb_h5'],
+ 'icon' => 'h5.png',
+ 'key' => '5',
+ 'open' => '== ',
+ 'close' => ' ==\n'
+ ]
+ ],
'block' => true
- ),
-
- array(
+ ],
+ [
'type' => 'linkwiz',
'title' => $lang['qb_link'],
'icon' => 'link.png',
@@ -155,8 +152,8 @@ function toolbar_JSdefines($varname){
'open' => '[[',
'close' => ']]',
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'format',
'title' => $lang['qb_extlink'],
'icon' => 'linkextern.png',
@@ -164,8 +161,8 @@ function toolbar_JSdefines($varname){
'close' => ']]',
'sample' => 'http://example.com|'.$lang['qb_extlink'],
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'formatln',
'title' => $lang['qb_ol'],
'icon' => 'ol.png',
@@ -173,8 +170,8 @@ function toolbar_JSdefines($varname){
'close' => '',
'key' => '-',
'block' => true
- ),
- array(
+ ],
+ [
'type' => 'formatln',
'title' => $lang['qb_ul'],
'icon' => 'ul.png',
@@ -182,15 +179,15 @@ function toolbar_JSdefines($varname){
'close' => '',
'key' => '.',
'block' => true
- ),
- array(
+ ],
+ [
'type' => 'insert',
'title' => $lang['qb_hr'],
'icon' => 'hr.png',
'insert' => '\n----\n',
'block' => true
- ),
- array(
+ ],
+ [
'type' => 'mediapopup',
'title' => $lang['qb_media'],
'icon' => 'image.png',
@@ -198,16 +195,16 @@ function toolbar_JSdefines($varname){
'name' => 'mediaselect',
'options'=> 'width=750,height=500,left=20,top=20,scrollbars=yes,resizable=yes',
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'picker',
'title' => $lang['qb_smileys'],
'icon' => 'smiley.png',
'list' => getSmileys(),
'icobase'=> 'smileys',
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'picker',
'title' => $lang['qb_chars'],
'icon' => 'chars.png',
@@ -236,21 +233,21 @@ function toolbar_JSdefines($varname){
'″', '[', ']', '{', '}', '~', '(', ')', '%', '§', '$', '#', '|', '@'
],
'block' => false
- ),
- array(
+ ],
+ [
'type' => 'signature',
'title' => $lang['qb_sig'],
'icon' => 'sig.png',
'key' => 'y',
'block' => false
- ),
- ));
+ ]
+ ]);
} // end event TOOLBAR_DEFINE default action
$evt->advise_after();
unset($evt);
// use JSON to build the JavaScript array
- print "var $varname = ".json_encode($menu).";\n";
+ print "var $varname = ".json_encode($menu, JSON_THROW_ON_ERROR).";\n";
}
/**
@@ -275,7 +272,7 @@ function toolbar_signature(){
}
$sig = str_replace('@DATE@',dformat(),$sig);
$sig = str_replace('\\\\n','\\n',$sig);
- return json_encode($sig);
+ return json_encode($sig, JSON_THROW_ON_ERROR);
}
//Setup VIM: ex: et ts=4 :