diff options
-rw-r--r-- | inc/lang/cs/lang.php | 6 | ||||
-rw-r--r-- | inc/lang/de-informal/lang.php | 1 | ||||
-rw-r--r-- | inc/lang/de/lang.php | 1 | ||||
-rw-r--r-- | inc/lang/en/lang.php | 1 | ||||
-rw-r--r-- | inc/lang/pl/lang.php | 1 | ||||
-rw-r--r-- | inc/media.php | 2 | ||||
-rw-r--r-- | index.php | 59 | ||||
-rw-r--r-- | lib/plugins/config/lang/cs/lang.php | 5 | ||||
-rw-r--r-- | lib/plugins/extension/lang/cs/lang.php | 2 | ||||
-rw-r--r-- | lib/plugins/revert/lang/cs/lang.php | 2 | ||||
-rw-r--r-- | lib/plugins/styling/_test/colors.test.php | 72 | ||||
-rw-r--r-- | lib/plugins/styling/admin.php | 43 | ||||
-rw-r--r-- | lib/plugins/styling/plugin.info.txt | 2 | ||||
-rw-r--r-- | lib/scripts/media.js | 8 |
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; } @@ -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(); + }, /** |