aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--inc/lang/cs/lang.php6
-rw-r--r--inc/lang/de-informal/lang.php1
-rw-r--r--inc/lang/de/lang.php1
-rw-r--r--inc/lang/en/lang.php1
-rw-r--r--inc/lang/pl/lang.php1
-rw-r--r--inc/media.php2
-rw-r--r--index.php59
-rw-r--r--lib/plugins/config/lang/cs/lang.php5
-rw-r--r--lib/plugins/extension/lang/cs/lang.php2
-rw-r--r--lib/plugins/revert/lang/cs/lang.php2
-rw-r--r--lib/plugins/styling/_test/colors.test.php72
-rw-r--r--lib/plugins/styling/admin.php43
-rw-r--r--lib/plugins/styling/plugin.info.txt2
-rw-r--r--lib/scripts/media.js8
14 files changed, 153 insertions, 52 deletions
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index 2eeb115dd..d96ea40d8 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
- * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Robert Surý <rsurycz@seznam.cz>
* @author Martin Hořínek <hev@hev.cz>
* @author Jonáš Dyba <jonas.dyba@gmail.com>
@@ -314,8 +314,11 @@ $lang['i_superuser'] = 'Správce';
$lang['i_problems'] = 'Instalátor narazil na níže popsané problémy. Nelze pokračovat v instalaci, dokud je neopravíte.';
$lang['i_modified'] = 'Instalátor bude z bezpečnostních důvodů pracovat pouze s čistou a ještě neupravenou instalací DokuWiki. Buď znovu rozbalte soubory z instalačního balíčku, nebo zkuste prostudovat <a href="http://dokuwiki.org/install">instrukce pro instalaci DokuWiki</a>.';
$lang['i_funcna'] = 'PHP funkce <code>%s</code> není dostupná. Váš webhosting ji možná z nějakého důvodu vypnul.';
+$lang['i_disabled'] = 'Bylo zakázáno vaším poskytovatelem.';
+$lang['i_funcnmail'] = '<b>Poznámka:</b> Funkce mail() není v PHP dostupná. %s Pokud tento problém přetrvává, zkuste nainstalovat <a href="https://www.dokuwiki.org/plugin:smtp">smtp plugin</a>.';
$lang['i_phpver'] = 'Verze vaší instalace PHP <code>%s</code> je nižší než požadovaná <code>%s</code>. Budete muset aktualizovat svou instalaci PHP.';
$lang['i_mbfuncoverload'] = 'mbstring.func_overload musí být vypnut v php.ini pro běh DokuWiki.';
+$lang['i_urandom'] = 'DokuWiki nemůže vytvořit kryptograficky bezpečná čísla pro cookies. Zkuste zkontrolovat nastavení open_basedir v php.ini, zda máte přistup k <code>/dev/urandom </code>.';
$lang['i_permfail'] = 'DokuWiki nemůže zapisovat do <code>%s</code>. Budete muset opravit práva k tomuto adresáři.';
$lang['i_confexists'] = '<code>%s</code> již existuje';
$lang['i_writeerr'] = 'Nelze vytvořit <code>%s</code>. Budete muset zkontrolovat práva k souborům či adresářům a vytvořit tento soubor ručně.';
@@ -366,6 +369,7 @@ $lang['media_perm_upload'] = 'Bohužel, nemáte práva nahrávat soubory.';
$lang['media_update'] = 'Nahrát novou verzi';
$lang['media_restore'] = 'Obnovit tuto verzi';
$lang['media_acl_warning'] = 'Tento seznam nemusí být úplný z důvodu omezení práv ACL a skrytým stránkám.';
+$lang['email_fail'] = 'Funkce mail() v PHP chybí nebo je zakázána. Tato e-mailová zpráva nebyla odeslána:';
$lang['currentns'] = 'Aktuální jmenný prostor';
$lang['searchresult'] = 'Výsledek hledání';
$lang['plainhtml'] = 'Čisté HTML';
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index 0bb4ddea5..e8b12f502 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -176,6 +176,7 @@ $lang['txt_upload'] = 'Datei zum Hochladen auswählen:';
$lang['txt_filename'] = 'Hochladen als (optional):';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['maxuploadsize'] = 'Max. %s pro Datei-Upload.';
+$lang['allowedmime'] = 'Liste der erlaubten Dateiendungen';
$lang['lockedby'] = 'Momentan gesperrt von:';
$lang['lockexpire'] = 'Sperre läuft ab am:';
$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index aa7e93b3b..43a49d3a2 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -195,6 +195,7 @@ $lang['txt_upload'] = 'Datei zum Hochladen auswählen:';
$lang['txt_filename'] = 'Hochladen als (optional):';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['maxuploadsize'] = 'Max. %s pro Datei-Upload.';
+$lang['allowedmime'] = 'Liste der erlaubten Dateiendungen';
$lang['lockedby'] = 'Momentan gesperrt von:';
$lang['lockexpire'] = 'Sperre läuft ab am:';
$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index 4f7d9b571..000368ac2 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -126,6 +126,7 @@ $lang['txt_upload'] = 'Select file to upload:';
$lang['txt_filename'] = 'Upload as (optional):';
$lang['txt_overwrt'] = 'Overwrite existing file';
$lang['maxuploadsize'] = 'Upload max. %s per file.';
+$lang['allowedmime'] = 'List of allowed file extensions';
$lang['lockedby'] = 'Currently locked by:';
$lang['lockexpire'] = 'Lock expires at:';
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index 49ee3e796..4dbdf9f35 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -177,6 +177,7 @@ $lang['txt_upload'] = 'Wybierz plik do wysłania:';
$lang['txt_filename'] = 'Nazwa pliku (opcjonalnie):';
$lang['txt_overwrt'] = 'Nadpisać istniejący plik?';
$lang['maxuploadsize'] = 'Maksymalny rozmiar wysyłanych danych wynosi %s dla jednego pliku.';
+$lang['allowedmime'] = 'Lista dozwolonych rozszerzeń plików';
$lang['lockedby'] = 'Aktualnie zablokowane przez:';
$lang['lockexpire'] = 'Blokada wygasa:';
$lang['rssfailed'] = 'Wystąpił błąd przy pobieraniu tych danych: ';
diff --git a/inc/media.php b/inc/media.php
index 5744dcb39..cbeaf40bf 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -1890,6 +1890,8 @@ function media_uploadform($ns, $auth, $fullscreen = false) {
echo '<p class="maxsize">';
printf($lang['maxuploadsize'], filesize_h(media_getuploadsize()));
+ echo ' <a class="allowedmime" href="#">'. $lang['allowedmime'] .'</a>';
+ echo ' <span>'. implode(', ', array_keys(getMimeTypes())) .'</span>';
echo '</p>'.DOKU_LF;
}
diff --git a/index.php b/index.php
index bfb4c0b6a..da3abe6b5 100644
--- a/index.php
+++ b/index.php
@@ -13,58 +13,65 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
-if(php_sapi_name() != 'cli-server') {
- if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/');
- require_once(DOKU_INC.'inc/init.php');
+if (php_sapi_name() != 'cli-server') {
+ if (!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__) . '/');
+ require_once(DOKU_INC . 'inc/init.php');
- send_redirect(DOKU_URL.'doku.php');
+ send_redirect(DOKU_URL . 'doku.php');
}
-# ROUTER starts below
+// ROUTER starts below
-# avoid path traversal
+// avoid path traversal
$_SERVER['SCRIPT_NAME'] = str_replace('/../', '/', $_SERVER['SCRIPT_NAME']);
-# routing aka. rewriting
-if(preg_match('/^\/_media\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
- # media dispatcher
+// routing aka. rewriting
+if (preg_match('/^\/_media\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
+ // media dispatcher
$_GET['media'] = $m[1];
require $_SERVER['DOCUMENT_ROOT'] . '/lib/exe/fetch.php';
-} else if(preg_match('/^\/_detail\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
- # image detail view
+} elseif (preg_match('/^\/_detail\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
+ // image detail view
$_GET['media'] = $m[1];
require $_SERVER['DOCUMENT_ROOT'] . '/lib/exe/detail.php';
-} else if(preg_match('/^\/_export\/([^\/]+)\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
- # exports
+} elseif (preg_match('/^\/_export\/([^\/]+)\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
+ // exports
$_GET['do'] = 'export_' . $m[1];
$_GET['id'] = $m[2];
require $_SERVER['DOCUMENT_ROOT'] . '/doku.php';
-} elseif($_SERVER['SCRIPT_NAME'] == '/index.php') {
- # 404s are automatically mapped to index.php
- if(isset($_SERVER['PATH_INFO'])) {
- $_GET['id'] = $_SERVER['PATH_INFO'];
- }
- require $_SERVER['DOCUMENT_ROOT'] . '/doku.php';
-
-} else if(file_exists($_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME'])) {
- # existing files
+} elseif (
+ $_SERVER['SCRIPT_NAME'] !== '/index.php' &&
+ file_exists($_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME'])
+) {
+ // existing files
- # access limitiations
- if(preg_match('/\/([\._]ht|README$|VERSION$|COPYING$)/', $_SERVER['SCRIPT_NAME']) or
+ // access limitiations
+ if (preg_match('/\/([._]ht|README$|VERSION$|COPYING$)/', $_SERVER['SCRIPT_NAME']) or
preg_match('/^\/(data|conf|bin|inc)\//', $_SERVER['SCRIPT_NAME'])
) {
+ header('HTTP/1.1 403 Forbidden');
die('Access denied');
}
- if(substr($_SERVER['SCRIPT_NAME'], -4) == '.php') {
+ if (substr($_SERVER['SCRIPT_NAME'], -4) == '.php') {
# php scripts
require $_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME'];
} else {
# static files
return false;
}
+} else {
+ // treat everything else as a potential wiki page
+ // working around https://bugs.php.net/bug.php?id=61286
+ $request_path = preg_split('/\?/', $_SERVER['REQUEST_URI'], 2)[0];
+ if (isset($_SERVER['PATH_INFO'])) {
+ $_GET['id'] = $_SERVER['PATH_INFO'];
+ } elseif ($request_path != '/' && $request_path != '/index.php') {
+ $_GET['id'] = $_SERVER['SCRIPT_NAME'];
+ }
+
+ require $_SERVER['DOCUMENT_ROOT'] . '/doku.php';
}
-# 404
diff --git a/lib/plugins/config/lang/cs/lang.php b/lib/plugins/config/lang/cs/lang.php
index a72ab7b2c..307da8684 100644
--- a/lib/plugins/config/lang/cs/lang.php
+++ b/lib/plugins/config/lang/cs/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
- * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Robert Surý <rsurycz@seznam.cz>
* @author Martin Hořínek <hev@hev.cz>
* @author Jonáš Dyba <jonas.dyba@gmail.com>
@@ -146,6 +146,7 @@ $lang['rss_linkto'] = 'XML kanál odkazuje na';
$lang['rss_content'] = 'Co zobrazovat v položkách XML kanálu?';
$lang['rss_update'] = 'Interval aktualizace XML kanálu (v sekundách)';
$lang['rss_show_summary'] = 'XML kanál ukazuje souhrn v titulku';
+$lang['rss_show_deleted'] = 'XML kanál Zobrazit smazané kanály';
$lang['rss_media'] = 'Jaký typ změn má být uveden v kanálu XML';
$lang['rss_media_o_both'] = 'oba';
$lang['rss_media_o_pages'] = 'stránky';
@@ -174,6 +175,8 @@ $lang['search_fragment_o_starts_with'] = 'začíná s';
$lang['search_fragment_o_ends_with'] = 'končí s';
$lang['search_fragment_o_contains'] = 'obsahuje';
$lang['trustedproxy'] = 'Důvěřovat proxy serverům odpovídajícím tomuto regulárním výrazu ohledně skutečné IP adresy klienta, kterou hlásí. Výchozí hodnota odpovídá místním sítím. Ponechejte prázdné, pokud nechcete důvěřovat žádné proxy.';
+$lang['_feature_flags'] = 'Feature flags';
+$lang['defer_js'] = 'Odložit spuštění javascriptu až po zpracování HTML kódu stránky. Zlepšuje vnímanou rychlost načtení stránky, ale může narušit funkci některých zásuvných modulů.';
$lang['dnslookups'] = 'DokuWiki zjišťuje DNS jména pro vzdálené IP adresy uživatelů, kteří editují stránky. Pokud máte pomalý, nebo nefunkční DNS server, nebo nepotřebujete tuto funkci, tak tuto volbu zrušte.';
$lang['jquerycdn'] = 'Mají být skripty jQuery a jQuery UI načítány z CDN?
Vzniknou tím další HTTP dotazy, ale soubory se mohou načíst rychleji a uživatelé je už mohou mít ve vyrovnávací paměti.';
diff --git a/lib/plugins/extension/lang/cs/lang.php b/lib/plugins/extension/lang/cs/lang.php
index 4438376dd..dd54ed222 100644
--- a/lib/plugins/extension/lang/cs/lang.php
+++ b/lib/plugins/extension/lang/cs/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
* @author Viktor Zavadil <vzavadil@newps.cz>
* @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
* @author Turkislav <turkislav@blabla.com>
@@ -75,6 +76,7 @@ $lang['msg_template_update_success'] = 'Šablona %s úspěšně aktualizována';
$lang['msg_plugin_install_success'] = 'Zásuvný modul %s úspěšně nainstalován.';
$lang['msg_plugin_update_success'] = 'Zásuvný modul %s úspěšně aktualizován.';
$lang['msg_upload_failed'] = 'Nahrávání souboru selhalo';
+$lang['msg_nooverwrite'] = 'Rozšíření %s již existuje, proto nebylo přepsáno; pro přepsání zatrhněte příslušnou možnost';
$lang['missing_dependency'] = '<strong>Chybějící nebo zakázaná závislost:</strong> %s';
$lang['security_issue'] = '<strong>Bezpečnostní problém:</strong> %s';
$lang['security_warning'] = '<strong>Bezpečnostní varování:</strong> %s';
diff --git a/lib/plugins/revert/lang/cs/lang.php b/lib/plugins/revert/lang/cs/lang.php
index 98d6e9e57..a9460659a 100644
--- a/lib/plugins/revert/lang/cs/lang.php
+++ b/lib/plugins/revert/lang/cs/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
- * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Robert Surý <rsurycz@seznam.cz>
* @author Martin Hořínek <hev@hev.cz>
* @author Jonáš Dyba <jonas.dyba@gmail.com>
diff --git a/lib/plugins/styling/_test/colors.test.php b/lib/plugins/styling/_test/colors.test.php
new file mode 100644
index 000000000..5f5425437
--- /dev/null
+++ b/lib/plugins/styling/_test/colors.test.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * Color handling tests for the styling plugin
+ *
+ * @group plugin_styling
+ * @group plugins
+ */
+class colors_plugin_styling_test extends DokuWikiTest
+{
+
+ /**
+ * @return array
+ * @see testColorType
+ */
+ public function provideColorType()
+ {
+ return [
+ ['foobar', 'text'],
+ ['white', 'text'],
+ ['#fff', 'color'],
+ ['#f0f0f0', 'color'],
+ ['#f0f0', 'text'],
+ ['some #f0f0f0 color', 'text'],
+ ];
+ }
+
+ /**
+ * @param string $input
+ * @param string $expect
+ * @dataProvider provideColorType
+ * @noinspection PhpUnhandledExceptionInspection
+ * @noinspection PhpDocMissingThrowsInspection
+ */
+ public function testColorType($input, $expect)
+ {
+ $plugin = new admin_plugin_styling();
+ $output = $this->callInaccessibleMethod($plugin, 'colorType', [$input]);
+ $this->assertEquals($expect, $output);
+ }
+
+ /**
+ * @return array
+ * @see testColorValue
+ */
+ public function provideColorValue()
+ {
+ return [
+ ['foobar', 'foobar'],
+ ['white', 'white'],
+ ['#fff', '#ffffff'],
+ ['#123', '#112233'],
+ ['#f0f0f0', '#f0f0f0'],
+ ['#f0f0', '#f0f0'],
+ ['some #f0f0f0 color', 'some #f0f0f0 color'],
+ ];
+ }
+
+ /**
+ * @param string $input
+ * @param string $expect
+ * @dataProvider provideColorValue
+ * @noinspection PhpUnhandledExceptionInspection
+ * @noinspection PhpDocMissingThrowsInspection
+ */
+ public function testColorValue($input, $expect)
+ {
+ $plugin = new admin_plugin_styling();
+ $output = $this->callInaccessibleMethod($plugin, 'colorValue', [$input]);
+ $this->assertEquals($expect, $output);
+ }
+}
diff --git a/lib/plugins/styling/admin.php b/lib/plugins/styling/admin.php
index 70c0572ea..d454422ef 100644
--- a/lib/plugins/styling/admin.php
+++ b/lib/plugins/styling/admin.php
@@ -60,7 +60,7 @@ class admin_plugin_styling extends DokuWiki_Admin_Plugin
global $conf;
global $ID;
- $styleUtil = new \dokuwiki\StyleUtils($conf['template'], true);
+ $styleUtil = new \dokuwiki\StyleUtils($conf['template'], true, true);
$styleini = $styleUtil->cssStyleini();
$replacements = $styleini['replacements'];
@@ -85,8 +85,8 @@ class admin_plugin_styling extends DokuWiki_Admin_Plugin
echo '<tr>';
echo '<td><label for="tpl__'.hsc($key).'">'.$name.'</label></td>';
- echo '<td><input type="'.$this->colorType($key).'" name="tpl['.hsc($key).']" id="tpl__'.hsc($key).'"
- value="'.hsc($value).'" dir="ltr" /></td>';
+ echo '<td><input type="'.$this->colorType($value).'" name="tpl['.hsc($key).']" id="tpl__'.hsc($key).'"
+ value="'.hsc($this->colorValue($value)).'" dir="ltr" /></td>';
echo '</tr>';
}
echo '</tbody></table>';
@@ -114,29 +114,28 @@ class admin_plugin_styling extends DokuWiki_Admin_Plugin
}
/**
- * Decide the input type based on the key name
+ * Adjust three char color codes to the 6 char one supported by browser's color input
*
- * @param string $key
+ * @param string $value
+ * @return string
+ */
+ protected function colorValue($value)
+ {
+ if (preg_match('/^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/', $value, $match)) {
+ return '#' . $match[1] . $match[1] . $match[2] . $match[2] . $match[3] . $match[3];
+ }
+ return $value;
+ }
+
+ /**
+ * Decide the input type based on the value
+ *
+ * @param string $value
* @return string color|text
*/
- protected function colorType($key)
+ protected function colorType($value)
{
- static $colors = array(
- 'text',
- 'background',
- 'text_alt',
- 'background_alt',
- 'text_neu',
- 'background_neu',
- 'border',
- 'highlight',
- 'background_site',
- 'link',
- 'existing',
- 'missing',
- );
-
- if (preg_match('/colou?r/', $key) || in_array(trim($key, '_'), $colors)) {
+ if (preg_match('/^#([0-9a-fA-F]{3}){1,2}$/', $value)) {
return 'color';
} else {
return 'text';
diff --git a/lib/plugins/styling/plugin.info.txt b/lib/plugins/styling/plugin.info.txt
index 9f002e282..e374eaf54 100644
--- a/lib/plugins/styling/plugin.info.txt
+++ b/lib/plugins/styling/plugin.info.txt
@@ -1,7 +1,7 @@
base styling
author Andreas Gohr
email andi@splitbrain.org
-date 2015-07-26
+date 2020-06-14
name styling plugin
desc Allows to edit style.ini replacements
url https://www.dokuwiki.org/plugin:styling
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index 6f36d3b2e..fda64635c 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -696,6 +696,14 @@ var dw_mediamanager = {
prepare_content: function ($content) {
// hide syntax example
$content.find('div.example:visible').hide();
+ // toggle list of allowed mime types
+ $content.find('a.allowedmime').on('click', function (event) {
+ event.preventDefault();
+ $toggle = jQuery(this);
+ $list = $toggle.next('span');
+ $list.toggle();
+ }).next('span').hide();
+
},
/**