summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Smith <chris@jalakai.co.uk>2013-02-25 14:50:59 +0000
committerChristopher Smith <chris@jalakai.co.uk>2013-02-25 14:50:59 +0000
commit1fe0882c56ea31e738540e942b743966927415fd (patch)
treec3324566ada64f09775b35bc989592c7701c32d4
parent177daee5492e8c3cdfdb950cdf61a6798f7a9586 (diff)
parent058fd09655df42c72f3c447e3b9561e4909e978d (diff)
downloadrpg-1fe0882c56ea31e738540e942b743966927415fd.tar.gz
rpg-1fe0882c56ea31e738540e942b743966927415fd.tar.bz2
Merge branch 'master' into FS#2415
-rw-r--r--_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php1
-rw-r--r--_test/tests/inc/auth_browseruid.test.php30
-rw-r--r--_test/tests/inc/common_pageinfo.test.php299
-rw-r--r--_test/tests/inc/search/search.test.php4
-rw-r--r--bin/.htaccess4
-rw-r--r--data/pages/wiki/syntax.txt4
-rw-r--r--doku.php2
-rw-r--r--inc/DifferenceEngine.php76
-rw-r--r--inc/actions.php6
-rw-r--r--inc/auth.php10
-rw-r--r--inc/common.php21
-rw-r--r--inc/html.php48
-rw-r--r--inc/httputils.php71
-rw-r--r--inc/io.php19
-rw-r--r--inc/lang/af/lang.php2
-rw-r--r--inc/lang/ar/lang.php4
-rw-r--r--inc/lang/az/lang.php2
-rw-r--r--inc/lang/bg/lang.php2
-rw-r--r--inc/lang/ca-valencia/lang.php2
-rw-r--r--inc/lang/ca/lang.php2
-rw-r--r--inc/lang/cs/lang.php2
-rw-r--r--inc/lang/da/lang.php2
-rw-r--r--inc/lang/el/lang.php6
-rw-r--r--inc/lang/eo/lang.php2
-rw-r--r--inc/lang/es/lang.php4
-rw-r--r--inc/lang/et/lang.php2
-rw-r--r--inc/lang/eu/lang.php2
-rw-r--r--inc/lang/fa/lang.php4
-rw-r--r--inc/lang/fi/lang.php2
-rw-r--r--inc/lang/fo/lang.php2
-rw-r--r--inc/lang/gl/lang.php4
-rw-r--r--inc/lang/he/lang.php3
-rw-r--r--inc/lang/hi/lang.php1
-rw-r--r--inc/lang/hr/lang.php2
-rw-r--r--inc/lang/hu/lang.php2
-rw-r--r--inc/lang/ia/lang.php4
-rw-r--r--inc/lang/id/lang.php2
-rw-r--r--inc/lang/is/lang.php2
-rw-r--r--inc/lang/it/lang.php12
-rw-r--r--inc/lang/ja/lang.php2
-rw-r--r--inc/lang/km/lang.php2
-rw-r--r--inc/lang/ku/lang.php2
-rw-r--r--inc/lang/la/lang.php4
-rw-r--r--inc/lang/lb/lang.php2
-rw-r--r--inc/lang/lt/lang.php2
-rw-r--r--inc/lang/lv/lang.php2
-rw-r--r--inc/lang/mg/lang.php2
-rw-r--r--inc/lang/mk/lang.php4
-rw-r--r--inc/lang/mr/lang.php1
-rw-r--r--inc/lang/ms/lang.php2
-rw-r--r--inc/lang/ne/lang.php1
-rw-r--r--inc/lang/nl/lang.php2
-rw-r--r--inc/lang/no/lang.php5
-rw-r--r--inc/lang/pl/lang.php4
-rw-r--r--inc/lang/pt/lang.php2
-rw-r--r--inc/lang/ro/lang.php2
-rw-r--r--inc/lang/ru/lang.php4
-rw-r--r--inc/lang/sl/lang.php2
-rw-r--r--inc/lang/sq/lang.php4
-rw-r--r--inc/lang/sr/lang.php2
-rw-r--r--inc/lang/th/lang.php2
-rw-r--r--inc/lang/tr/lang.php2
-rw-r--r--inc/lang/uk/lang.php2
-rw-r--r--inc/lang/vi/lang.php2
-rw-r--r--inc/lang/zh-tw/lang.php2
-rw-r--r--inc/lang/zh/lang.php3
-rw-r--r--inc/media.php26
-rw-r--r--inc/parser/code.php2
-rw-r--r--inc/parser/xhtml.php4
-rw-r--r--inc/parserutils.php78
-rw-r--r--inc/plugin.php7
-rw-r--r--inc/search.php192
-rw-r--r--inc/template.php8
-rw-r--r--install.php21
-rw-r--r--lib/exe/detail.php2
-rw-r--r--lib/exe/fetch.php4
-rw-r--r--lib/exe/js.php2
-rw-r--r--lib/exe/mediamanager.php7
-rw-r--r--lib/exe/xmlrpc.php4
-rw-r--r--lib/plugins/acl/lang/vi/help.txt24
-rw-r--r--lib/plugins/acl/script.js8
-rw-r--r--lib/plugins/acl/style.css57
-rw-r--r--lib/plugins/authad/auth.php5
-rw-r--r--lib/plugins/authad/conf/default.php14
-rw-r--r--lib/plugins/authad/lang/it/settings.php5
-rw-r--r--lib/plugins/authad/lang/zh/settings.php18
-rw-r--r--lib/plugins/authldap/conf/default.php20
-rw-r--r--lib/plugins/authldap/conf/metadata.php1
-rw-r--r--lib/plugins/authldap/lang/en/settings.php11
-rw-r--r--lib/plugins/authldap/lang/it/settings.php5
-rw-r--r--lib/plugins/authldap/lang/zh/settings.php20
-rw-r--r--lib/plugins/authmysql/conf/default.php33
-rw-r--r--lib/plugins/authmysql/conf/metadata.php1
-rw-r--r--lib/plugins/authmysql/lang/en/settings.php3
-rw-r--r--lib/plugins/authmysql/lang/it/settings.php5
-rw-r--r--lib/plugins/authmysql/lang/zh/settings.php40
-rw-r--r--lib/plugins/authpgsql/conf/default.php32
-rw-r--r--lib/plugins/authpgsql/lang/en/settings.php2
-rw-r--r--lib/plugins/authpgsql/lang/it/settings.php5
-rw-r--r--lib/plugins/authpgsql/lang/zh/settings.php37
-rw-r--r--lib/plugins/config/lang/en/intro.txt2
-rw-r--r--lib/plugins/config/lang/it/lang.php1
-rw-r--r--lib/plugins/config/settings/config.class.php24
-rw-r--r--lib/plugins/config/settings/config.metadata.php10
-rw-r--r--lib/plugins/config/settings/extra.class.php74
-rw-r--r--lib/plugins/plugin/admin.php3
-rw-r--r--lib/plugins/plugin/lang/ar/lang.php2
-rw-r--r--lib/plugins/plugin/lang/hi/lang.php1
-rw-r--r--lib/plugins/plugin/lang/pl/lang.php2
-rw-r--r--lib/plugins/plugin/lang/zh-tw/lang.php2
-rw-r--r--lib/plugins/revert/admin.php13
-rw-r--r--lib/plugins/usermanager/admin.php25
-rw-r--r--lib/plugins/usermanager/lang/ca-valencia/lang.php2
-rw-r--r--lib/scripts/qsearch.js9
-rw-r--r--lib/scripts/toolbar.js2
-rw-r--r--lib/tpl/default/design.css12
-rw-r--r--lib/tpl/dokuwiki/css/_diff.css12
-rw-r--r--lib/tpl/dokuwiki/css/design.css1
-rw-r--r--lib/tpl/dokuwiki/css/mobile.css4
-rw-r--r--lib/tpl/dokuwiki/css/pagetools.css8
-rw-r--r--lib/tpl/dokuwiki/script.js11
121 files changed, 1044 insertions, 614 deletions
diff --git a/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php b/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php
index ecd4093b8..c5d14377b 100644
--- a/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php
+++ b/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php
@@ -49,6 +49,7 @@ class DokuWiki_Sniffs_PHP_DeprecatedFunctionsSniff extends Generic_Sniffs_PHP_Fo
'search_fulltext' => 'Fulltext Indexer',
'search_regex' => 'Fulltext Indexer',
'tpl_getFavicon' => 'tpl_getMediaFile',
+ 'p_cached_xhtml' => 'p_cached_output',
);
/**
diff --git a/_test/tests/inc/auth_browseruid.test.php b/_test/tests/inc/auth_browseruid.test.php
new file mode 100644
index 000000000..d33552582
--- /dev/null
+++ b/_test/tests/inc/auth_browseruid.test.php
@@ -0,0 +1,30 @@
+<?php
+
+class auth_browseruid_test extends DokuWikiTest {
+
+
+ /**
+ * regression test to ensure correct browser id on IE9.
+ *
+ * IE9 send different HTTP_ACCEPT_LANGUAGE header on ajax request.
+ */
+ function testIE9JsVsDefault() {
+
+ // javascript request
+ $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)';
+ $_SERVER['HTTP_ACCEPT_ENCODING'] = 'gzip, deflate';
+ $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'de';
+ unset($_SERVER['HTTP_ACCEPT_CHARSET']);
+ $javascriptId = auth_browseruid();
+
+ // default request
+ $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)';
+ $_SERVER['HTTP_ACCEPT_ENCODING'] = 'gzip, deflate';
+ $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'de-DE';
+ $normalId = auth_browseruid();
+
+ $this->assertEquals($normalId, $javascriptId);
+
+ }
+
+} \ No newline at end of file
diff --git a/_test/tests/inc/common_pageinfo.test.php b/_test/tests/inc/common_pageinfo.test.php
new file mode 100644
index 000000000..c54fbce26
--- /dev/null
+++ b/_test/tests/inc/common_pageinfo.test.php
@@ -0,0 +1,299 @@
+<?php
+/**
+ * Unit Test for inc/common.php - pageinfo()
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+class common_pageinfo_test extends DokuWikiTest {
+
+ function setup(){
+ parent::setup();
+
+ global $USERINFO;
+ $USERINFO = array(
+ 'pass' => '179ad45c6ce2cb97cf1029e212046e81',
+ 'name' => 'Arthur Dent',
+ 'mail' => 'arthur@example.com',
+ 'grps' => array ('admin','user'),
+ );
+ $_SERVER['REMOTE_USER'] = 'testuser';
+ $_SERVER['REMOTE_ADDR'] = '1.2.3.4';
+ }
+
+ function _get_expected_pageinfo() {
+ global $USERINFO;
+ $info = array (
+ 'isadmin' => true,
+ 'ismanager' => true,
+ 'userinfo' => $USERINFO,
+ 'perm' => 255,
+ 'namespace' => false,
+ 'ismobile' => false,
+ 'client' => 'testuser',
+ );
+ $info['rev'] = null;
+ $info['subscribed'] = false;
+ $info['locked'] = false;
+ $info['exists'] = false;
+ $info['writable'] = true;
+ $info['editable'] = true;
+ $info['lastmod'] = false;
+ $info['meta'] = array();
+ $info['ip'] = null;
+ $info['user'] = null;
+ $info['sum'] = null;
+ $info['editor'] = null;
+
+ return $info;
+ }
+
+ /**
+ * check info keys and values for a non-existent page & admin user
+ */
+ function test_basic_nonexistentpage(){
+ global $ID,$conf;
+ $ID = 'wiki:start';
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:start';
+ $info['namespace'] = 'wiki';
+ $info['filepath'] = $conf['datadir'].'/wiki/start.txt';
+
+ $this->assertEquals($info, pageinfo());
+ }
+
+ /**
+ * check info keys and values for a existing page & admin user
+ */
+ function test_basic_existingpage(){
+ global $ID,$conf;
+ $ID = 'wiki:syntax';
+ $filename = $conf['datadir'].'/wiki/syntax.txt';
+ $rev = filemtime($filename);
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:syntax';
+ $info['namespace'] = 'wiki';
+ $info['filepath'] = $filename;
+ $info['exists'] = true;
+ $info['lastmod'] = $rev;
+ $info['meta'] = p_get_metadata($ID);
+
+ $this->assertEquals($info, pageinfo());
+ }
+
+ /**
+ * check info keys and values for anonymous user
+ */
+ function test_anonymoususer(){
+ global $ID,$conf,$REV;
+
+ unset($_SERVER['REMOTE_USER']);
+ global $USERINFO; $USERINFO = array();
+
+ $ID = 'wiki:syntax';
+ $filename = $conf['datadir'].'/wiki/syntax.txt';
+ $rev = filemtime($filename);
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:syntax';
+ $info['namespace'] = 'wiki';
+ $info['filepath'] = $filename;
+ $info['exists'] = true;
+ $info['lastmod'] = $rev;
+ $info['meta'] = p_get_metadata($ID);
+ $info['rev'] = '';
+
+ $info = array_merge($info, array(
+ 'isadmin' => false,
+ 'ismanager' => false,
+ 'perm' => 8,
+ 'client' => '1.2.3.4',
+ ));
+ unset($info['userinfo']);
+ $this->assertEquals($info, pageinfo());
+ }
+
+ /**
+ * check info keys and values with $REV
+ * (also see $RANGE tests)
+ */
+ function test_rev(){
+ global $ID,$conf,$REV;
+
+ $ID = 'wiki:syntax';
+ $filename = $conf['datadir'].'/wiki/syntax.txt';
+ $rev = filemtime($filename);
+ $REV = $rev - 100;
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:syntax';
+ $info['namespace'] = 'wiki';
+ $info['meta'] = p_get_metadata($ID);
+ $info['rev'] = $REV;
+ $info['filepath'] = str_replace('pages','attic',substr($filename,0,-3).$REV.'.txt.gz');
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertEquals($rev-100, $REV);
+ }
+
+ /**
+ * check info keys and values with $RANGE
+ */
+ function test_range(){
+ global $ID,$conf,$REV,$RANGE;
+
+ $ID = 'wiki:syntax';
+ $filename = $conf['datadir'].'/wiki/syntax.txt';
+ $rev = filemtime($filename);
+ $range = '1000-2000';
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:syntax';
+ $info['namespace'] = 'wiki';
+ $info['exists'] = true;
+ $info['lastmod'] = $rev;
+ $info['meta'] = p_get_metadata($ID);
+ $info['filepath'] = $filename;
+
+ // check $RANGE without $REV
+ // expected result $RANGE unchanged
+ $RANGE = $range;
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertFalse(isset($REV));
+ $this->assertEquals($range,$RANGE);
+
+ // check $RANGE with $REV = current
+ // expected result: $RANGE unchanged, $REV cleared
+ $REV = $rev;
+ $info['rev'] = '';
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertEquals('',$REV);
+ $this->assertEquals($range,$RANGE);
+
+ // check with a real $REV
+ // expected result: $REV and $RANGE are cleared
+ $REV = $rev - 100;
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertEquals('',$REV);
+ $this->assertEquals('',$RANGE);
+ }
+
+ /**
+ * test editor entry and external edit
+ */
+ function test_editor_and_externaledits(){
+ global $ID,$conf;
+ $ID = 'wiki:syntax';
+ $filename = $conf['datadir'].'/wiki/syntax.txt';
+ $rev = filemtime($filename);
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:syntax';
+ $info['namespace'] = 'wiki';
+ $info['filepath'] = $filename;
+ $info['exists'] = true;
+ $info['lastmod'] = $rev;
+ $info['meta'] = p_get_metadata($ID); // need $INFO set correctly for addLogEntry()
+
+ global $INFO;
+ $INFO = $info;
+
+ // add an editor for the current version of $ID
+ addLogEntry($rev, $ID);
+
+ $info['meta'] = p_get_metadata($ID);
+ $info['editor'] = $_SERVER['REMOTE_USER'];
+ $info['user'] = $_SERVER['REMOTE_USER'];
+ $info['ip'] = $_SERVER['REMOTE_ADDR'];
+ $info['sum'] = '';
+
+ // with an editor ...
+ $this->assertEquals($info, pageinfo());
+
+ // clear the meta['last_change'] value, pageinfo should restore it
+ p_set_metadata($ID,array('last_change' => false));
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertEquals($info['meta']['last_change'], p_get_metadata($ID,'last_change'));
+
+ // fake an external edit, pageinfo should clear the last change from meta data
+ // and not return any editor data
+ $now = time()+10;
+ touch($filename,$now);
+
+ $info['lastmod'] = $now;
+ $info['meta']['last_change'] = false;
+ $info['ip'] = null;
+ $info['user'] = null;
+ $info['sum'] = null;
+ $info['editor'] = null;
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertEquals($info['meta'], p_get_metadata($ID)); // check metadata has been updated correctly
+ }
+
+ /**
+ * check draft
+ */
+ function test_draft(){
+ global $ID,$conf;
+ $ID = 'wiki:syntax';
+ $filename = $conf['datadir'].'/wiki/syntax.txt';
+ $rev = filemtime($filename);
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:syntax';
+ $info['namespace'] = 'wiki';
+ $info['filepath'] = $filename;
+ $info['exists'] = true;
+ $info['lastmod'] = $rev;
+ $info['meta'] = p_get_metadata($ID);
+
+ // setup a draft, make it more recent than the current page
+ // - pageinfo should recognise it and keep it
+ $draft = getCacheName($info['client'].$ID,'.draft');
+ touch($draft,$rev + 10);
+
+ $info['draft'] = $draft;
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertFileExists($draft);
+
+ // make the draft older than the current page
+ // - pageinfo should remove it and not return the 'draft' key
+ touch($draft,$rev - 10);
+ unset($info['draft']);
+
+ $this->assertEquals($info, pageinfo());
+ $this->assertFalse(file_exists($draft));
+ }
+
+ /**
+ * check ismobile
+ */
+ function test_ismobile(){
+ global $ID,$conf;
+ $ID = 'wiki:start';
+
+ $info = $this->_get_expected_pageinfo();
+ $info['id'] = 'wiki:start';
+ $info['namespace'] = 'wiki';
+ $info['filepath'] = $conf['datadir'].'/wiki/start.txt';
+
+ // overkill, ripped from clientismobile() as we aren't testing detection - but forcing it
+ $_SERVER['HTTP_X_WAP_PROFILE'] = 'a fake url';
+ $_SERVER['HTTP_ACCEPT'] .= ';wap';
+ $_SERVER['HTTP_USER_AGENT'] = 'blackberry,symbian,hand,mobi,phone';
+
+ $info['ismobile'] = clientismobile();
+
+ $this->assertTrue(clientismobile()); // ensure THIS test fails if clientismobile() returns false
+ $this->assertEquals($info, pageinfo()); // it would be a test failure not a pageinfo failure.
+ }
+}
+
+//Setup VIM: ex: et ts=4 :
diff --git a/_test/tests/inc/search/search.test.php b/_test/tests/inc/search/search.test.php
index 9c854a661..33d4e9d8d 100644
--- a/_test/tests/inc/search/search.test.php
+++ b/_test/tests/inc/search/search.test.php
@@ -22,9 +22,9 @@ class search_test extends DokuWikiTest {
search($data, dirname(__FILE__) . '/data', 'search_allpages', array('depth' => 1), 'ns1/ns3');
$this->assertEquals(0, count($data));
- //depth is 1 so I should get only pages from ns1
+ //depth is 2 so I should get only pages from ns1
$data = array();
- search($data, dirname(__FILE__) . '/data', 'search_allpages', array('depth' => 1), 'ns1');
+ search($data, dirname(__FILE__) . '/data', 'search_allpages', array('depth' => 2), 'ns1');
$this->assertEquals(2, count($data));
}
diff --git a/bin/.htaccess b/bin/.htaccess
index 9c96d3742..281d5c33d 100644
--- a/bin/.htaccess
+++ b/bin/.htaccess
@@ -1,2 +1,2 @@
-order allow,deny
-deny from all
+order allow,deny
+deny from all
diff --git a/data/pages/wiki/syntax.txt b/data/pages/wiki/syntax.txt
index 55bbabab2..f2c2864ed 100644
--- a/data/pages/wiki/syntax.txt
+++ b/data/pages/wiki/syntax.txt
@@ -83,9 +83,9 @@ Windows shares like [[\\server\share|this]] are recognized, too. Please note tha
Notes:
* For security reasons direct browsing of windows shares only works in Microsoft Internet Explorer per default (and only in the "local zone").
- * For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_do_not_work|Mozilla Knowledge Base]]. However, there will still be a JavaScript warning about trying to open a Windows Share. To remove this warning (for all users), put the following line in ''conf/local.protected.php'':
+ * For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_do_not_work|Mozilla Knowledge Base]]. However, there will still be a JavaScript warning about trying to open a Windows Share. To remove this warning (for all users), put the following line in ''conf/userscript.js'':
- $lang['js']['nosmblinks'] = '';
+ LANG.nosmblinks = '';
==== Image Links ====
diff --git a/doku.php b/doku.php
index 607303ca4..68976ebb3 100644
--- a/doku.php
+++ b/doku.php
@@ -29,7 +29,7 @@ if(isset($_SERVER['HTTP_X_DOKUWIKI_DO'])) {
require_once(DOKU_INC.'inc/init.php');
//import variables
-$_REQUEST['id'] = str_replace("\xC2\xAD", '', $INPUT->str('id')); //soft-hyphen
+$INPUT->set('id', str_replace("\xC2\xAD", '', $INPUT->str('id'))); //soft-hyphen
$QUERY = trim($INPUT->str('id'));
$ID = getID();
diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php
index 1b68cf6d3..e0fbf8e03 100644
--- a/inc/DifferenceEngine.php
+++ b/inc/DifferenceEngine.php
@@ -797,7 +797,7 @@ class DiffFormatter {
function _lines($lines, $prefix = ' ') {
foreach ($lines as $line)
- echo "$prefix $line\n";
+ echo "$prefix ".$this->_escape($line)."\n";
}
function _context($lines) {
@@ -816,6 +816,10 @@ class DiffFormatter {
echo "---\n";
$this->_added($closing);
}
+
+ function _escape($str){
+ return $str;
+ }
}
/**
@@ -871,13 +875,13 @@ class _HWLDF_WordAccumulator {
function _flushGroup($new_tag) {
if ($this->_group !== '') {
if ($this->_tag == 'mark')
- $this->_line .= '<strong '.HTMLDiff::css('diff-mark').'>'.$this->_group.'</strong>';
+ $this->_line .= '<strong '.HTMLDiff::css('diff-mark').'>'.$this->_escape($this->_group).'</strong>';
elseif ($this->_tag == 'add')
- $this->_line .= '<span '.HTMLDiff::css('diff-addedline').'>'.$this->_group.'</span>';
+ $this->_line .= '<span '.HTMLDiff::css('diff-addedline').'>'.$this->_escape($this->_group).'</span>';
elseif ($this->_tag == 'del')
- $this->_line .= '<span '.HTMLDiff::css('diff-deletedline').'><del>'.$this->_group.'</del></span>';
+ $this->_line .= '<span '.HTMLDiff::css('diff-deletedline').'><del>'.$this->_escape($this->_group).'</del></span>';
else
- $this->_line .= $this->_group;
+ $this->_line .= $this->_escape($this->_group);
}
$this->_group = '';
$this->_tag = $new_tag;
@@ -912,6 +916,10 @@ class _HWLDF_WordAccumulator {
$this->_flushLine('~done');
return $this->_lines;
}
+
+ function _escape($str){
+ return hsc($str);
+ }
}
class WordLevelDiff extends MappedDiff {
@@ -1029,6 +1037,7 @@ class UnifiedDiffFormatter extends DiffFormatter {
*
*/
class TableDiffFormatter extends DiffFormatter {
+ var $colspan = 2;
function __construct() {
$this->leading_context_lines = 2;
@@ -1053,8 +1062,8 @@ class TableDiffFormatter extends DiffFormatter {
global $lang;
$l1 = $lang['line'].' '.$xbeg;
$l2 = $lang['line'].' '.$ybeg;
- $r = '<tr><td '.HTMLDiff::css('diff-blockheader').' colspan="2">'.$l1.":</td>\n".
- '<td '.HTMLDiff::css('diff-blockheader').' colspan="2">'.$l2.":</td>\n".
+ $r = '<tr><td '.HTMLDiff::css('diff-blockheader').' colspan="'.$this->colspan.'">'.$l1.":</td>\n".
+ '<td '.HTMLDiff::css('diff-blockheader').' colspan="'.$this->colspan.'">'.$l2.":</td>\n".
"</tr>\n";
return $r;
}
@@ -1069,25 +1078,38 @@ class TableDiffFormatter extends DiffFormatter {
function _lines($lines, $prefix=' ', $color="white") {
}
- function addedLine($line) {
- return '<td>+</td><td '.HTMLDiff::css('diff-addedline').'>' . $line.'</td>';
+ function addedLine($line,$escaped=false) {
+ if (!$escaped){
+ $line = $this->_escape($line);
+ }
+ return '<td '.HTMLDiff::css('diff-lineheader').'>+</td>'.
+ '<td '.HTMLDiff::css('diff-addedline').'>' . $line.'</td>';
}
- function deletedLine($line) {
- return '<td>-</td><td '.HTMLDiff::css('diff-deletedline').'>' . $line.'</td>';
+ function deletedLine($line,$escaped=false) {
+ if (!$escaped){
+ $line = $this->_escape($line);
+ }
+ return '<td '.HTMLDiff::css('diff-lineheader').'>-</td>'.
+ '<td '.HTMLDiff::css('diff-deletedline').'>' . $line.'</td>';
}
function emptyLine() {
- return '<td colspan="2">&#160;</td>';
+ return '<td colspan="'.$this->colspan.'">&#160;</td>';
}
function contextLine($line) {
- return '<td> </td><td '.HTMLDiff::css('diff-context').'>'.$line.'</td>';
+ return '<td '.HTMLDiff::css('diff-lineheader').'>&#160;</td>'.
+ '<td '.HTMLDiff::css('diff-context').'>'.$this->_escape($line).'</td>';
}
function _added($lines) {
+ $this->_addedLines($lines,false);
+ }
+
+ function _addedLines($lines,$escaped=false){
foreach ($lines as $line) {
- print('<tr>' . $this->emptyLine() . $this->addedLine($line) . "</tr>\n");
+ print('<tr>' . $this->emptyLine() . $this->addedLine($line,$escaped) . "</tr>\n");
}
}
@@ -1104,15 +1126,19 @@ class TableDiffFormatter extends DiffFormatter {
}
function _changed($orig, $closing) {
- $diff = new WordLevelDiff($orig, $closing);
+ $diff = new WordLevelDiff($orig, $closing); // this escapes the diff data
$del = $diff->orig();
$add = $diff->closing();
while ($line = array_shift($del)) {
$aline = array_shift($add);
- print('<tr>' . $this->deletedLine($line) . $this->addedLine($aline) . "</tr>\n");
+ print('<tr>' . $this->deletedLine($line,true) . $this->addedLine($aline,true) . "</tr>\n");
}
- $this->_added($add); # If any leftovers
+ $this->_addedLines($add,true); # If any leftovers
+ }
+
+ function _escape($str) {
+ return hsc($str);
}
}
@@ -1121,7 +1147,7 @@ class TableDiffFormatter extends DiffFormatter {
*
*/
class InlineDiffFormatter extends DiffFormatter {
- var $colspan = 4;
+ var $colspan = 2;
function __construct() {
$this->leading_context_lines = 2;
@@ -1167,28 +1193,32 @@ class InlineDiffFormatter extends DiffFormatter {
function _added($lines) {
foreach ($lines as $line) {
- print('<tr><td colspan="'.$this->colspan.'" '.HTMLDiff::css('diff-addedline').'>'. $line . "</td></tr>\n");
+ print('<tr><td '.HTMLDiff::css('diff-lineheader').'>&#160;</td><td '.HTMLDiff::css('diff-addedline').'>'. $this->_escape($line) . "</td></tr>\n");
}
}
function _deleted($lines) {
foreach ($lines as $line) {
- print('<tr><td colspan="'.$this->colspan.'" '.HTMLDiff::css('diff-deletedline').'><del>' . $line . "</del></td></tr>\n");
+ print('<tr><td '.HTMLDiff::css('diff-lineheader').'>&#160;</td><td '.HTMLDiff::css('diff-deletedline').'><del>' . $this->_escape($line) . "</del></td></tr>\n");
}
}
function _context($lines) {
foreach ($lines as $line) {
- print('<tr><td colspan="'.$this->colspan.'" '.HTMLDiff::css('diff-context').'>'.$line."</td></tr>\n");
+ print('<tr><td '.HTMLDiff::css('diff-lineheader').'>&#160;</td><td '.HTMLDiff::css('diff-context').'>'. $this->_escape($line) ."</td></tr>\n");
}
}
function _changed($orig, $closing) {
- $diff = new InlineWordLevelDiff($orig, $closing);
+ $diff = new InlineWordLevelDiff($orig, $closing); // this escapes the diff data
$add = $diff->inline();
foreach ($add as $line)
- print('<tr><td colspan="'.$this->colspan.'">'.$line."</td></tr>\n");
+ print('<tr><td '.HTMLDiff::css('diff-lineheader').'>&#160;</td><td>'.$line."</td></tr>\n");
+ }
+
+ function _escape($str) {
+ return hsc($str);
}
}
diff --git a/inc/actions.php b/inc/actions.php
index e0ad908b7..da3414eb2 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -172,7 +172,7 @@ function act_dispatch(){
$evt->advise_after();
// Make sure plugs can handle 'denied'
if($conf['send404'] && $ACT == 'denied') {
- header('HTTP/1.0 403 Forbidden');
+ http_status(403);
}
unset($evt);
@@ -658,7 +658,7 @@ function act_sitemap($act) {
global $conf;
if ($conf['sitemap'] < 1 || !is_numeric($conf['sitemap'])) {
- header("HTTP/1.0 404 Not Found");
+ http_status(404);
print "Sitemap generation is disabled.";
exit;
}
@@ -690,7 +690,7 @@ function act_sitemap($act) {
exit;
}
- header("HTTP/1.0 500 Internal Server Error");
+ http_status(500);
print "Could not read the sitemap file - bad permissions?";
exit;
}
diff --git a/inc/auth.php b/inc/auth.php
index 7f427bd8d..68b6b438d 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -54,16 +54,17 @@ function auth_setup() {
}
}
- if(!$auth){
+ if(!isset($auth) || !$auth){
msg($lang['authtempfail'], -1);
return false;
}
- if ($auth && $auth->success == false) {
+ if ($auth->success == false) {
// degrade to unauthenticated user
unset($auth);
auth_logoff();
msg($lang['authtempfail'], -1);
+ return false;
}
// do the login either by cookie or provided credentials XXX
@@ -91,7 +92,7 @@ function auth_setup() {
// apply cleaning
if (true === $auth->success) {
- $_REQUEST['u'] = $auth->cleanUser($_REQUEST['u']);
+ $INPUT->set('u', $auth->cleanUser($INPUT->str('u')));
}
if($INPUT->str('authtok')) {
@@ -267,7 +268,7 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
function auth_validateToken($token) {
if(!$token || $token != $_SESSION[DOKU_COOKIE]['auth']['token']) {
// bad token
- header("HTTP/1.0 401 Unauthorized");
+ http_status(401);
print 'Invalid auth token - maybe the session timed out';
unset($_SESSION[DOKU_COOKIE]['auth']['token']); // no second chance
exit;
@@ -311,7 +312,6 @@ function auth_browseruid() {
$uid = '';
$uid .= $_SERVER['HTTP_USER_AGENT'];
$uid .= $_SERVER['HTTP_ACCEPT_ENCODING'];
- $uid .= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$uid .= $_SERVER['HTTP_ACCEPT_CHARSET'];
$uid .= substr($ip, 0, strpos($ip, '.'));
$uid = strtolower($uid);
diff --git a/inc/common.php b/inc/common.php
index 5c28cf9c3..83c4557c6 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -1207,27 +1207,6 @@ function getGoogleQuery() {
}
/**
- * Try to set correct locale
- *
- * @deprecated No longer used
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function setCorrectLocale() {
- global $conf;
- global $lang;
-
- $enc = strtoupper($lang['encoding']);
- foreach($lang['locales'] as $loc) {
- //try locale
- if(@setlocale(LC_ALL, $loc)) return;
- //try loceale with encoding
- if(@setlocale(LC_ALL, "$loc.$enc")) return;
- }
- //still here? try to set from environment
- @setlocale(LC_ALL, "");
-}
-
-/**
* Return the human readable size of a file
*
* @param int $size A file size
diff --git a/inc/html.php b/inc/html.php
index ddaed2261..59415f7da 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -1003,14 +1003,16 @@ function html_backlinks(){
* @param string $r_rev Right revision
* @param string $id Page id, if null $ID is used
* @param bool $media If it is for media files
+ * @param bool $inline Return the header on a single line
* @return array HTML snippets for diff header
*/
-function html_diff_head($l_rev, $r_rev, $id = null, $media = false) {
+function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = false) {
global $lang;
if ($id === null) {
global $ID;
$id = $ID;
}
+ $head_separator = $inline ? ' ' : '<br />';
$media_or_wikiFN = $media ? 'mediaFN' : 'wikiFN';
$ml_or_wl = $media ? 'ml' : 'wl';
$l_minor = $r_minor = '';
@@ -1032,7 +1034,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false) {
$l_head_title = ($media) ? dformat($l_rev) : $id.' ['.dformat($l_rev).']';
$l_head = '<a class="wikilink1" href="'.$ml_or_wl($id,"rev=$l_rev").'">'.
$l_head_title.'</a>'.
- '<br />'.$l_user.' '.$l_sum;
+ $head_separator.$l_user.' '.$l_sum;
}
if($r_rev){
@@ -1050,7 +1052,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false) {
$r_head_title = ($media) ? dformat($r_rev) : $id.' ['.dformat($r_rev).']';
$r_head = '<a class="wikilink1" href="'.$ml_or_wl($id,"rev=$r_rev").'">'.
$r_head_title.'</a>'.
- '<br />'.$r_user.' '.$r_sum;
+ $head_separator.$r_user.' '.$r_sum;
}elseif($_rev = @filemtime($media_or_wikiFN($id))){
$_info = getRevisionInfo($id,$_rev,true, $media);
if($_info['user']){
@@ -1067,7 +1069,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false) {
$r_head = '<a class="wikilink1" href="'.$ml_or_wl($id).'">'.
$r_head_title.'</a> '.
'('.$lang['current'].')'.
- '<br />'.$_user.' '.$_sum;
+ $head_separator.$_user.' '.$_sum;
}else{
$r_head = '&mdash; ('.$lang['current'].')';
}
@@ -1160,10 +1162,10 @@ function html_diff($text='',$intro=true,$type=null){
}
$r_text = rawWiki($ID,$r_rev);
- list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev);
+ list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev, null, false, $type == 'inline');
}
- $df = new Diff(explode("\n",hsc($l_text)),explode("\n",hsc($r_text)));
+ $df = new Diff(explode("\n",$l_text),explode("\n",$r_text));
if($type == 'inline'){
$tdf = new InlineDiffFormatter();
@@ -1205,6 +1207,18 @@ function html_diff($text='',$intro=true,$type=null){
?>
<div class="table">
<table class="diff diff_<?php echo $type?>">
+ <?php if ($type == 'inline') { ?>
+ <tr>
+ <th class="diff-lineheader">-</th><th <?php echo $l_minor?>>
+ <?php echo $l_head?>
+ </th>
+ </tr>
+ <tr>
+ <th class="diff-lineheader">+</th><th <?php echo $r_minor?>>
+ <?php echo $r_head?>
+ </th>
+ </tr>
+ <?php } else { ?>
<tr>
<th colspan="2" <?php echo $l_minor?>>
<?php echo $l_head?>
@@ -1213,7 +1227,8 @@ function html_diff($text='',$intro=true,$type=null){
<?php echo $r_head?>
</th>
</tr>
- <?php echo html_insert_softbreaks($tdf->format($df)); ?>
+ <?php }
+ echo html_insert_softbreaks($tdf->format($df)); ?>
</table>
</div>
<?php
@@ -1238,8 +1253,8 @@ function html_softbreak_callback($match){
&\#?\\w{1,6};) # ... for html entities - we don't want to split them (ok to catch some invalid combinations)
&\#?\\w{1,6}; # yes pattern - a quicker match for the html entity, since we know we have one
|
-[?/,&\#;:]+ # no pattern - any other group of 'special' characters to insert a breaking character after
-) # end conditional expression
+[?/,&\#;:] # no pattern - any other group of 'special' characters to insert a breaking character after
+)+ # end conditional expression
REGEX;
return preg_replace('<'.$regex.'>xu','\0&#8203;',$match[0]);
@@ -1636,11 +1651,16 @@ function html_admin(){
}
// data security check
- // @todo: could be checked and only displayed if $conf['savedir'] is under the web root
- echo '<a style="border:none; float:right;"
- href="http://www.dokuwiki.org/security#web_access_security">
- <img src="data/security.png" alt="Your data directory seems to be protected properly."
- onerror="this.parentNode.style.display=\'none\'" /></a>';
+ // simple check if the 'savedir' is relative and accessible when appended to DOKU_URL
+ // it verifies either:
+ // 'savedir' has been moved elsewhere, or
+ // has protection to prevent the webserver serving files from it
+ if (substr($conf['savedir'],0,2) == './'){
+ echo '<a style="border:none; float:right;"
+ href="http://www.dokuwiki.org/security#web_access_security">
+ <img src="'.DOKU_URL.$conf['savedir'].'/security.png" alt="Your data directory seems to be protected properly."
+ onerror="this.parentNode.style.display=\'none\'" /></a>';
+ }
print p_locale_xhtml('admin');
diff --git a/inc/httputils.php b/inc/httputils.php
index 4ba287eb5..d3f3cdde2 100644
--- a/inc/httputils.php
+++ b/inc/httputils.php
@@ -250,6 +250,11 @@ function http_cached_finish($file, $content) {
}
}
+/**
+ * Fetches raw, unparsed POST data
+ *
+ * @return string
+ */
function http_get_raw_post_data() {
static $postData = null;
if ($postData === null) {
@@ -257,3 +262,69 @@ function http_get_raw_post_data() {
}
return $postData;
}
+
+/**
+ * Set the HTTP response status and takes care of the used PHP SAPI
+ *
+ * Inspired by CodeIgniter's set_status_header function
+ *
+ * @param int $code
+ * @param string $text
+ */
+function http_status($code = 200, $text = '') {
+ static $stati = array(
+ 200 => 'OK',
+ 201 => 'Created',
+ 202 => 'Accepted',
+ 203 => 'Non-Authoritative Information',
+ 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',
+ 404 => 'Not Found',
+ 405 => 'Method Not Allowed',
+ 406 => 'Not Acceptable',
+ 407 => 'Proxy Authentication Required',
+ 408 => 'Request Timeout',
+ 409 => 'Conflict',
+ 410 => 'Gone',
+ 411 => 'Length Required',
+ 412 => 'Precondition Failed',
+ 413 => 'Request Entity Too Large',
+ 414 => 'Request-URI Too Long',
+ 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])) {
+ $text = $stati[$code];
+ }
+
+ $server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : false;
+
+ if(substr(php_sapi_name(), 0, 3) == 'cgi') {
+ header("Status: {$code} {$text}", true);
+ } elseif($server_protocol == 'HTTP/1.1' OR $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/io.php b/inc/io.php
index 5ecc79703..4bd7c3364 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -529,25 +529,6 @@ function io_rename($from,$to){
return true;
}
-
-/**
- * Runs an external command and returns its output as string
- *
- * @author Harry Brueckner <harry_b@eml.cc>
- * @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated
- */
-function io_runcmd($cmd){
- $fh = popen($cmd, "r");
- if(!$fh) return false;
- $ret = '';
- while (!feof($fh)) {
- $ret .= fread($fh, 8192);
- }
- pclose($fh);
- return $ret;
-}
-
/**
* Runs an external command with input and output pipes.
* Returns the exit code from the process.
diff --git a/inc/lang/af/lang.php b/inc/lang/af/lang.php
index 6de891a63..ab8e5177b 100644
--- a/inc/lang/af/lang.php
+++ b/inc/lang/af/lang.php
@@ -55,7 +55,7 @@ $lang['current'] = 'huidige';
$lang['line'] = 'Streak';
$lang['youarehere'] = 'Jy is hier';
$lang['by'] = 'by';
-$lang['restored'] = 'Het terug gegaan na vroeëre weergawe';
+$lang['restored'] = 'Het terug gegaan na vroeëre weergawe (%s)';
$lang['summary'] = 'Voorskou';
$lang['qb_bold'] = 'Vetdruk';
$lang['qb_italic'] = 'Skuinsdruk';
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index 4928b3dbd..5b72e0a51 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -181,7 +181,7 @@ $lang['lastmod'] = 'آخر تعديل';
$lang['by'] = 'بواسطة';
$lang['deleted'] = 'حذفت';
$lang['created'] = 'اُنشئت';
-$lang['restored'] = 'استعيدت نسخة قديمة';
+$lang['restored'] = 'استعيدت نسخة قديمة (%s)';
$lang['external_edit'] = 'تحرير خارجي';
$lang['summary'] = 'ملخص التحرير';
$lang['noflash'] = 'تحتاج إلى<a href="http://www.adobe.com/products/flashplayer/">ملحق فلاش أدوبي</a> لعرض هذا المحتوى.';
@@ -258,8 +258,6 @@ $lang['subscr_m_unsubscribe'] = 'ألغ الاشتراك';
$lang['subscr_m_subscribe'] = 'اشترك';
$lang['subscr_m_receive'] = 'استقبال';
$lang['subscr_style_every'] = 'بريدا على كل تغيير';
-$lang['subscr_style_digest'] = 'بريد ملخص عن تغييرات كل صفحة';
-$lang['subscr_style_list'] = 'قائمة بالصفحات المتغيرة منذ آخر بريد';
$lang['authmodfailed'] = 'إعدادات تصريح فاسدة، يرجى مراسلة المدير.';
$lang['authtempfail'] = 'تصريح المشترك غير متوفر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
$lang['authpwdexpire'] = 'ستنتهي صلاحية كلمة السر في %d . عليك بتغييرها سريعا.';
diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php
index 6df15a83e..5084d9f60 100644
--- a/inc/lang/az/lang.php
+++ b/inc/lang/az/lang.php
@@ -136,7 +136,7 @@ $lang['lastmod'] = 'Son dəyişiklər';
$lang['by'] = ' Kimdən';
$lang['deleted'] = 'silinib';
$lang['created'] = 'yaranıb';
-$lang['restored'] = 'köhnə versiya qaytarıldı';
+$lang['restored'] = 'köhnə versiya qaytarıldı (%s)';
$lang['external_edit'] = 'bayırdan dəyişik';
$lang['summary'] = 'Dəyişiklər xülasəsi';
$lang['noflash'] = 'Bu məzmuna baxmaq üçün <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> tələb olunur.';
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index 47d83c62f..3c0a17a72 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -190,7 +190,7 @@ $lang['lastmod'] = 'Последна промяна';
$lang['by'] = 'от';
$lang['deleted'] = 'изтрита';
$lang['created'] = 'създадена';
-$lang['restored'] = 'възстановена предишна версия';
+$lang['restored'] = 'възстановена предишна версия (%s)';
$lang['external_edit'] = 'външна редакция';
$lang['summary'] = 'Обобщение';
$lang['noflash'] = 'Необходим е <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> за изобразяване на съдържанието.';
diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php
index 532f6c73d..6e7438f53 100644
--- a/inc/lang/ca-valencia/lang.php
+++ b/inc/lang/ca-valencia/lang.php
@@ -137,7 +137,7 @@ $lang['lastmod'] = 'Última modificació el';
$lang['by'] = 'per';
$lang['deleted'] = 'borrat';
$lang['created'] = 'creat';
-$lang['restored'] = 'restaurada l\'última versió';
+$lang['restored'] = 'restaurada l\'última versió (%s)';
$lang['external_edit'] = 'edició externa';
$lang['summary'] = 'Editar sumari';
$lang['noflash'] = 'Necessita el <a href="http://www.adobe.com/products/flashplayer/">plúgin d\'Adobe Flash</a> per a vore este contingut.';
diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php
index cb2b64686..a429dc06a 100644
--- a/inc/lang/ca/lang.php
+++ b/inc/lang/ca/lang.php
@@ -180,7 +180,7 @@ $lang['lastmod'] = 'Darrera modificació';
$lang['by'] = 'per';
$lang['deleted'] = 'suprimit';
$lang['created'] = 'creat';
-$lang['restored'] = 's\'ha restaurat una versió anterior';
+$lang['restored'] = 's\'ha restaurat una versió anterior %s';
$lang['external_edit'] = 'edició externa';
$lang['summary'] = 'Resum d\'edició';
$lang['noflash'] = 'Per a visualitzar aquest contingut necessiteu el <a href="http://www.adobe.com/products/flashplayer/">connector d\'Adobe Flash</a>.';
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index af94424ac..f0b8f3ba4 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -188,7 +188,7 @@ $lang['lastmod'] = 'Poslední úprava';
$lang['by'] = 'autor:';
$lang['deleted'] = 'odstraněno';
$lang['created'] = 'vytvořeno';
-$lang['restored'] = 'stará verze byla obnovena';
+$lang['restored'] = 'stará verze byla obnovena (%s)';
$lang['external_edit'] = 'upraveno mimo DokuWiki';
$lang['summary'] = 'Komentář k úpravám';
$lang['noflash'] = 'Pro přehrání obsahu potřebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php
index f132c133b..022de8127 100644
--- a/inc/lang/da/lang.php
+++ b/inc/lang/da/lang.php
@@ -188,7 +188,7 @@ $lang['lastmod'] = 'Sidst ændret';
$lang['by'] = 'af';
$lang['deleted'] = 'slettet';
$lang['created'] = 'oprettet';
-$lang['restored'] = 'gammel udgave reetableret';
+$lang['restored'] = 'gammel udgave reetableret (%s)';
$lang['external_edit'] = 'ekstern redigering';
$lang['summary'] = 'Redigerings resumé';
$lang['noflash'] = 'Den <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> er nødvendig til at vise denne indehold.';
diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php
index 55b70074f..0fe343026 100644
--- a/inc/lang/el/lang.php
+++ b/inc/lang/el/lang.php
@@ -148,7 +148,6 @@ $lang['uploadsucc'] = 'Επιτυχής φόρτωση';
$lang['uploadfail'] = 'Η μεταφόρτωση απέτυχε. Πιθανόν αυτό να οφείλεται στις ρυθμίσεις πρόσβασης του αρχείου.';
$lang['uploadwrong'] = 'Η μεταφόρτωση δεν έγινε δεκτή. Δεν επιτρέπονται αρχεία αυτού του τύπου!';
$lang['uploadexist'] = 'Το αρχείο ήδη υπάρχει. Δεν έγινε καμία αλλαγή.';
-$lang['uploadbadcontent'] = 'Το περιεχόμενο του αρχείου δεν ταιριάζει με την επέκτασή του.';
$lang['uploadspam'] = 'Η μεταφόρτωση ακυρώθηκε από το φίλτρο spam.';
$lang['uploadxss'] = 'Η μεταφόρτωση ακυρώθηκε λόγω πιθανού επικίνδυνου περιεχομένου.';
$lang['uploadsize'] = 'Το αρχείο ήταν πολύ μεγάλο. (μέγιστο %s)';
@@ -184,7 +183,7 @@ $lang['lastmod'] = 'Τελευταία τροποποίηση';
$lang['by'] = 'από';
$lang['deleted'] = 'διαγράφηκε';
$lang['created'] = 'δημιουργήθηκε';
-$lang['restored'] = 'παλαιότερη έκδοση επαναφέρθηκε';
+$lang['restored'] = 'παλαιότερη έκδοση επαναφέρθηκε (%s)';
$lang['external_edit'] = 'εξωτερική τροποποίηση';
$lang['summary'] = 'Επεξεργασία σύνοψης';
$lang['noflash'] = 'Το <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> απαιτείται για την προβολή αυτού του στοιχείου.';
@@ -314,8 +313,7 @@ $lang['media_upload'] = 'Φόρτωση στο <strong>%s</strong> φά
$lang['media_search'] = 'Αναζήτηση στο <strong>%s</strong> φάκελο.';
$lang['media_view'] = '%s';
$lang['media_viewold'] = '%s στα %s';
-$lang['media_edit'] = 'Επεξεργασία';
-$lang['media_history'] = 'Αυτές είναι οι παλαιότερες αναθεωρήσεις του αρχείου.';
+$lang['media_edit'] = 'Επεξεργασία %s';
$lang['media_meta_edited'] = 'τα μεταδεδομένα επεξεργάστηκαν';
$lang['media_perm_read'] = 'Συγνώμη, δεν έχετε επαρκή διακαιώματα για να διαβάσετε αυτά τα αρχεία.';
$lang['media_perm_upload'] = 'Συγνώμη, δεν έχετε επαρκή διακαιώματα για να φορτώσετε αυτά τα αρχεία.';
diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php
index 1c3b6f519..2d9b03148 100644
--- a/inc/lang/eo/lang.php
+++ b/inc/lang/eo/lang.php
@@ -184,7 +184,7 @@ $lang['lastmod'] = 'Lastaj ŝanĝoj';
$lang['by'] = 'de';
$lang['deleted'] = 'forigita';
$lang['created'] = 'kreita';
-$lang['restored'] = 'malnova revizio restarigita';
+$lang['restored'] = 'malnova revizio restarigita (%s)';
$lang['external_edit'] = 'ekstera redakto';
$lang['summary'] = 'Bulteno de ŝanĝoj';
$lang['noflash'] = 'La <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> necesas por montri tiun ĉi enhavon.';
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index 20d0284bc..193ec9a7d 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -203,7 +203,7 @@ $lang['lastmod'] = 'Última modificación';
$lang['by'] = 'por';
$lang['deleted'] = 'borrado';
$lang['created'] = 'creado';
-$lang['restored'] = 'se ha restaurado la vieja versión';
+$lang['restored'] = 'se ha restaurado la vieja versión (%s)';
$lang['external_edit'] = 'editor externo';
$lang['summary'] = 'Resumen de la edición';
$lang['noflash'] = 'Para mostrar este contenido es necesario el <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a>.';
@@ -280,8 +280,6 @@ $lang['subscr_m_unsubscribe'] = 'Darse de baja';
$lang['subscr_m_subscribe'] = 'Suscribirse';
$lang['subscr_m_receive'] = 'Recibir';
$lang['subscr_style_every'] = 'enviar correo en cada cambio';
-$lang['subscr_style_digest'] = 'recopilar correo de cambios por cada página';
-$lang['subscr_style_list'] = 'lista de páginas con cambios desde el último correo';
$lang['authmodfailed'] = 'Está mal configurada la autenticación de usuarios. Por favor, avisa al administrador del wiki.';
$lang['authtempfail'] = 'La autenticación de usuarios no está disponible temporalmente. Si esta situación persiste, por favor avisa al administrador del wiki.';
$lang['authpwdexpire'] = 'Su contraseña caducara en %d días, debería cambiarla lo antes posible';
diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php
index 8ae61558a..0a0310832 100644
--- a/inc/lang/et/lang.php
+++ b/inc/lang/et/lang.php
@@ -163,7 +163,7 @@ $lang['lastmod'] = 'Viimati muutnud';
$lang['by'] = 'persoon';
$lang['deleted'] = 'eemaldatud';
$lang['created'] = 'tekitatud';
-$lang['restored'] = 'vana versioon taastatud';
+$lang['restored'] = 'vana versioon taastatud (%s)';
$lang['external_edit'] = 'väline muutmine';
$lang['summary'] = 'kokkuvõte muudatustest';
$lang['mail_newpage'] = 'leht lisatud:';
diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php
index 5b03dcb97..7aab8b44c 100644
--- a/inc/lang/eu/lang.php
+++ b/inc/lang/eu/lang.php
@@ -178,7 +178,7 @@ $lang['lastmod'] = 'Azken aldaketa';
$lang['by'] = 'egilea:';
$lang['deleted'] = 'ezabatua';
$lang['created'] = 'sortua';
-$lang['restored'] = 'bertsio zaharra berrezarria';
+$lang['restored'] = 'bertsio zaharra berrezarria (%s)';
$lang['external_edit'] = 'kanpoko aldaketa';
$lang['summary'] = 'Aldatu laburpena';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> beharrezkoa da eduki hau bistaratzeko.';
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index 026d6499a..eb828a472 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -189,7 +189,7 @@ $lang['lastmod'] = 'آخرین ویرایش';
$lang['by'] = 'توسط';
$lang['deleted'] = 'حذف شد';
$lang['created'] = 'ایجاد شد';
-$lang['restored'] = 'یک نگارش پیشین واگردانی شد.';
+$lang['restored'] = 'یک نگارش پیشین واگردانی شد. (%s)';
$lang['external_edit'] = 'ویرایش خارجی';
$lang['summary'] = 'پیش‌نمایش';
$lang['noflash'] = 'برای نمایش محتویات <a href="http://www.adobe.com/products/flashplayer/">افزونه‌ی فلش</a> مورد نیاز است.';
@@ -266,8 +266,6 @@ $lang['subscr_m_unsubscribe'] = 'لغو آبونه';
$lang['subscr_m_subscribe'] = 'آبونه شدن';
$lang['subscr_m_receive'] = 'دریافت کردن';
$lang['subscr_style_every'] = 'ارسال رای‌نامه در تمامی تغییرات';
-$lang['subscr_style_digest'] = 'ارسال ایمیل‌های فشرده برای تغییرات هر صفحه';
-$lang['subscr_style_list'] = 'لیست صفحات تغییر داده شده از آخرین رای‌نامه';
$lang['authmodfailed'] = 'اشکال در نوع معتبرسازی کاربران، مدیر ویکی را باخبر سازید.';
$lang['authtempfail'] = 'معتبرسازی کابران موقتن مسدود می‌باشد. اگر این حالت پایدار بود، مدیر ویکی را باخبر سازید.';
$lang['authpwdexpire'] = 'کلمه عبور شما در %d روز منقضی خواهد شد ، شما باید آن را زود تغییر دهید';
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index 73eb3d4cc..59e4dc6cb 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -183,7 +183,7 @@ $lang['lastmod'] = 'Viimeksi muutettu';
$lang['by'] = '/';
$lang['deleted'] = 'poistettu';
$lang['created'] = 'luotu';
-$lang['restored'] = 'vanha versio palautettu';
+$lang['restored'] = 'vanha versio palautettu (%s)';
$lang['external_edit'] = 'ulkoinen muokkaus';
$lang['summary'] = 'Yhteenveto muokkauksesta';
$lang['noflash'] = 'Tarvitset <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash-liitännäisen</a> nähdäksesi tämän sisällön.';
diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php
index 14ec8c56b..9f51824db 100644
--- a/inc/lang/fo/lang.php
+++ b/inc/lang/fo/lang.php
@@ -130,7 +130,7 @@ $lang['lastmod'] = 'Seinast broytt';
$lang['by'] = 'av';
$lang['deleted'] = 'strika';
$lang['created'] = 'stovna';
-$lang['restored'] = 'gomul útgáva endurstovna';
+$lang['restored'] = 'gomul útgáva endurstovna (%s)';
$lang['summary'] = 'Samandráttur';
$lang['mail_newpage'] = 'skjal skoyta uppí:';
$lang['mail_changed'] = 'skjal broytt:';
diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php
index 7cc06a833..fa49c1121 100644
--- a/inc/lang/gl/lang.php
+++ b/inc/lang/gl/lang.php
@@ -181,7 +181,7 @@ $lang['lastmod'] = 'Última modificación';
$lang['by'] = 'por';
$lang['deleted'] = 'eliminado';
$lang['created'] = 'creado';
-$lang['restored'] = 'revisión antiga restaurada';
+$lang['restored'] = 'revisión antiga restaurada (%s)';
$lang['external_edit'] = 'edición externa';
$lang['summary'] = 'Resumo da edición';
$lang['noflash'] = 'Precísase o <a href="http://www.adobe.com/products/flashplayer/">Extensión Adobe Flash</a> para amosar este contido.';
@@ -258,8 +258,6 @@ $lang['subscr_m_unsubscribe'] = 'Desubscribir';
$lang['subscr_m_subscribe'] = 'Subscribir';
$lang['subscr_m_receive'] = 'Recibir';
$lang['subscr_style_every'] = 'correo-e en cada troco';
-$lang['subscr_style_digest'] = 'correo-e con resumo de trocos para cada páxina';
-$lang['subscr_style_list'] = 'lista de páxinas mudadas dende o último correo-e';
$lang['authmodfailed'] = 'Configuración de autenticación de usuario incorrecta. Por favor, informa ao Administrador do teu Wiki.';
$lang['authtempfail'] = 'A autenticación de usuario non está dispoñible de xeito temporal. De persistir esta situación, por favor, informa ao Administrador do teu Wiki.';
$lang['authpwdexpire'] = 'A túa contrasinal expirará en %d días, deberías cambiala pronto.';
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index e474501ae..4853a0e2b 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -165,7 +165,7 @@ $lang['lastmod'] = 'מועד השינוי האחרון';
$lang['by'] = 'על ידי';
$lang['deleted'] = 'נמחק';
$lang['created'] = 'נוצר';
-$lang['restored'] = 'שוחזר';
+$lang['restored'] = 'שוחזר (%s)';
$lang['external_edit'] = 'עריכה חיצונית';
$lang['summary'] = 'תקציר העריכה';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">תוסף פלאש לדפדפן</a> נדרש כדי להציג תוכן זה.';
@@ -243,7 +243,6 @@ $lang['i_modified'] = 'משיקולי אבטחה סקריפט זה י
עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להיעזר בדף
<a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
$lang['i_funcna'] = 'פונקציית ה-PHP&rlm; <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
-$lang['i_phpver'] = 'גרסת ה־PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג את התקנת ה־PHP שלך.';
$lang['i_permfail'] = '<code>%s</code> אינה ניתנת לכתיבה על ידי DokuWiki. עליך לשנות הרשאות תיקייה זו!';
$lang['i_confexists'] = '<code>%s</code> כבר קיים';
$lang['i_writeerr'] = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/תיקייה וליצור את הקובץ ידנית.';
diff --git a/inc/lang/hi/lang.php b/inc/lang/hi/lang.php
index 893457066..d2021fcae 100644
--- a/inc/lang/hi/lang.php
+++ b/inc/lang/hi/lang.php
@@ -84,7 +84,6 @@ $lang['lastmod'] = 'अंतिम बार संशोधि
$lang['by'] = 'के द्वारा';
$lang['deleted'] = 'हटाया';
$lang['created'] = 'निर्मित';
-$lang['restored'] = 'पुराने संशोधन बहाल';
$lang['external_edit'] = 'बाह्य सम्पादित';
$lang['summary'] = 'सारांश संपादित करें';
$lang['mail_newpage'] = 'पृष्ठ जोड़ा:';
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index 97f4cf0c2..a607210d7 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -165,7 +165,7 @@ $lang['lastmod'] = 'Zadnja izmjena';
$lang['by'] = 'od';
$lang['deleted'] = 'obrisano';
$lang['created'] = 'stvoreno';
-$lang['restored'] = 'vraćena prijašnja inačica';
+$lang['restored'] = 'vraćena prijašnja inačica (%s)';
$lang['external_edit'] = 'vanjsko uređivanje';
$lang['summary'] = 'Sažetak izmjena';
$lang['noflash'] = 'Za prikazivanje ovog sadržaja potreban je <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index c59cace77..275fb15d5 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -169,7 +169,7 @@ $lang['lastmod'] = 'Utolsó módosítás';
$lang['by'] = 'szerkesztette:';
$lang['deleted'] = 'eltávolítva';
$lang['created'] = 'létrehozva';
-$lang['restored'] = 'az előző változat helyreállítva';
+$lang['restored'] = 'az előző változat helyreállítva (%s)';
$lang['external_edit'] = 'külső szerkesztés';
$lang['summary'] = 'A változások összefoglalása';
$lang['noflash'] = 'Ennek a tartalomnak a megtekintéséhez <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> szükséges.';
diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php
index a9d5c376c..fd63fb5ef 100644
--- a/inc/lang/ia/lang.php
+++ b/inc/lang/ia/lang.php
@@ -163,7 +163,7 @@ $lang['lastmod'] = 'Ultime modification';
$lang['by'] = 'per';
$lang['deleted'] = 'removite';
$lang['created'] = 'create';
-$lang['restored'] = 'ancian version restaurate';
+$lang['restored'] = 'ancian version restaurate (%s)';
$lang['external_edit'] = 'modification externe';
$lang['summary'] = 'Modificar summario';
$lang['noflash'] = 'Le <a href="http://www.adobe.com/products/flashplayer/">plug-in Flash de Adobe</a> es necessari pro monstrar iste contento.';
@@ -227,8 +227,6 @@ $lang['subscr_m_unsubscribe'] = 'Cancellar subscription';
$lang['subscr_m_subscribe'] = 'Subscriber';
$lang['subscr_m_receive'] = 'Reciper';
$lang['subscr_style_every'] = 'un message pro cata modification';
-$lang['subscr_style_digest'] = 'un digesto de modificationes pro cata pagina';
-$lang['subscr_style_list'] = 'lista de paginas modificate depost le ultime e-mail';
$lang['authmodfailed'] = 'Configuration incorrecte de authentication de usator. Per favor informa le administrator de tu wiki.';
$lang['authtempfail'] = 'Le authentication de usator temporarimente non es disponibile. Si iste situation persiste, per favor informa le administrator de tu wiki.';
$lang['i_chooselang'] = 'Selige tu lingua';
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index 91ed38e31..e14b9d9f5 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -125,7 +125,7 @@ $lang['lastmod'] = 'Terakhir diubah';
$lang['by'] = 'oleh';
$lang['deleted'] = 'terhapus';
$lang['created'] = 'dibuat';
-$lang['restored'] = 'revisi lama ditampilkan kembali';
+$lang['restored'] = 'revisi lama ditampilkan kembali (%s)';
$lang['external_edit'] = 'Perubahan eksternal';
$lang['summary'] = 'Edit summary';
$lang['mail_newpage'] = 'Halaman ditambahkan:';
diff --git a/inc/lang/is/lang.php b/inc/lang/is/lang.php
index be20da6b3..78ae7e249 100644
--- a/inc/lang/is/lang.php
+++ b/inc/lang/is/lang.php
@@ -134,7 +134,7 @@ $lang['lastmod'] = 'Síðast breytt';
$lang['by'] = 'af';
$lang['deleted'] = 'eytt';
$lang['created'] = 'myndað';
-$lang['restored'] = 'Breytt aftur til fyrri útgáfu';
+$lang['restored'] = 'Breytt aftur til fyrri útgáfu (%s)';
$lang['external_edit'] = 'utanaðkomandi breyta';
$lang['summary'] = 'Forskoða';
$lang['noflash'] = 'Það þarf <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash viðbót</a> til að sýna sumt efnið á þessari síðu';
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index 1ad5ae1bb..92bf5fea8 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -187,7 +187,7 @@ $lang['lastmod'] = 'Ultima modifica';
$lang['by'] = 'da';
$lang['deleted'] = 'eliminata';
$lang['created'] = 'creata';
-$lang['restored'] = 'versione precedente ripristinata';
+$lang['restored'] = 'versione precedente ripristinata (%s)';
$lang['external_edit'] = 'modifica esterna';
$lang['summary'] = 'Oggetto della modifica';
$lang['noflash'] = 'E\' necessario <a href="http://www.adobe.com/products/flashplayer/">il plugin Adobe Flash</a> per visualizzare questo contenuto.';
@@ -205,6 +205,7 @@ $lang['mail_new_user'] = 'nuovo utente:';
$lang['mail_upload'] = 'file caricato:';
$lang['changes_type'] = 'Guarda cambiamenti di';
$lang['pages_changes'] = 'Pagine';
+$lang['media_changes'] = 'File multimediali';
$lang['both_changes'] = 'Sia pagine che media files';
$lang['qb_bold'] = 'Grassetto';
$lang['qb_italic'] = 'Corsivo';
@@ -263,8 +264,8 @@ $lang['subscr_m_unsubscribe'] = 'Rimuovi sottoscrizione';
$lang['subscr_m_subscribe'] = 'Sottoscrivi';
$lang['subscr_m_receive'] = 'Ricevi';
$lang['subscr_style_every'] = 'email per ogni modifica';
-$lang['subscr_style_digest'] = 'email riassuntiva delle modifiche di ogni pagina';
-$lang['subscr_style_list'] = 'elenco delle pagine modificate dall\'ultima email';
+$lang['subscr_style_digest'] = 'email di riassunto dei cambiamenti per ogni pagina (ogni %.2f giorni)';
+$lang['subscr_style_list'] = 'lista delle pagine cambiate dall\'ultima email (ogni %.2f giorni)';
$lang['authmodfailed'] = 'La configurazione dell\'autenticazione non è corretta. Informa l\'amministratore di questo wiki.';
$lang['authtempfail'] = 'L\'autenticazione è temporaneamente non disponibile. Se questa situazione persiste, informa l\'amministratore di questo wiki.';
$lang['authpwdexpire'] = 'La tua password scadrà in %d giorni, dovresti cambiarla quanto prima.';
@@ -292,6 +293,9 @@ $lang['i_pol1'] = 'Wiki Pubblico (lettura per tutti, scrittura e
$lang['i_pol2'] = 'Wiki Chiuso (lettura, scrittura, caricamento file solamente per gli utenti registrati)';
$lang['i_retry'] = 'Riprova';
$lang['i_license'] = 'Per favore scegli la licenza sotto cui vuoi rilasciare il contenuto:';
+$lang['i_license_none'] = 'Non mostrare informazioni sulla licenza';
+$lang['i_pop_field'] = 'Per favore, aiutaci ad incrementare la conoscenza di DokuWiki:';
+$lang['i_pop_label'] = 'Mensilmente invia una statistica d\'uso anonima di DokuWiki agli sviluppatori';
$lang['recent_global'] = 'Stai attualmente vedendo le modifiche effettuate nell\'area <b>%s</b>. Puoi anche <a href="%s">vedere le modifiche recenti dell\'intero wiki</a>.';
$lang['years'] = '%d anni fa';
$lang['months'] = '%d mesi fa';
@@ -316,8 +320,10 @@ $lang['media_files'] = 'File in %s';
$lang['media_upload'] = 'Upload al %s';
$lang['media_search'] = 'Cerca in %s';
$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s a %s';
$lang['media_edit'] = 'Modifica %s';
$lang['media_history'] = 'Storia di %s';
+$lang['media_meta_edited'] = 'metadata modificati';
$lang['media_perm_read'] = 'Spiacente, non hai abbastanza privilegi per leggere i files.';
$lang['media_perm_upload'] = 'Spiacente, non hai abbastanza privilegi per caricare files.';
$lang['media_update'] = 'Carica nuova versione';
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index 66de0dab5..7997889e4 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -181,7 +181,7 @@ $lang['lastmod'] = '最終更新';
$lang['by'] = 'by';
$lang['deleted'] = '削除';
$lang['created'] = '作成';
-$lang['restored'] = '以前のバージョンを復元';
+$lang['restored'] = '以前のバージョンを復元 (%s)';
$lang['external_edit'] = '外部編集';
$lang['summary'] = '編集の概要';
$lang['noflash'] = 'この内容を表示するためには <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> が必要です。';
diff --git a/inc/lang/km/lang.php b/inc/lang/km/lang.php
index 6a5fa223f..85bb6afba 100644
--- a/inc/lang/km/lang.php
+++ b/inc/lang/km/lang.php
@@ -132,7 +132,6 @@ $lang['lastmod'] = 'ពេលកែចុងក្រោយ';
$lang['by'] = 'និពន្ឋដោយ';
$lang['deleted'] = 'យកចេញ';
$lang['created'] = 'បង្កើត';
-$lang['restored'] = 'ស្ដារបុនរាព្រឹតចាស់';
$lang['external_edit'] = 'កំរេពីក្រៅ';
$lang['summary'] = 'កែតម្រា';
@@ -207,7 +206,6 @@ $lang['i_superuser'] = 'អ្នកកំពូល';
$lang['i_problems'] = 'កម្មវិធី​ដំឡើងបានប៉ះឧបសគ្គ។ អ្នកមិនអាចបន្តទៅទៀត ដល់អ្នកជួសជុលវា។';
$lang['i_modified'] = '';
$lang['i_funcna'] = '<code>%s</code> ';
-$lang['i_phpver'] = 'PHP ប្រវត់លេខ<code>%s</code> ជា';
$lang['i_permfail'] = '<code>%s</code> មិនអាចសាស';
$lang['i_confexists'] = '<code>%s</code> មានហាយ';
$lang['i_writeerr'] = 'មិនអាចបណ្កើ<code>%s</code>។ អ្នកត្រវការពិនិត្យអធិក្រឹតិរបស់ថតនឹងឯកសារ។';
diff --git a/inc/lang/ku/lang.php b/inc/lang/ku/lang.php
index 63ccafa35..c9d658c6d 100644
--- a/inc/lang/ku/lang.php
+++ b/inc/lang/ku/lang.php
@@ -95,7 +95,7 @@ $lang['lastmod'] = 'Guherandina dawî';
$lang['by'] = 'by';
$lang['deleted'] = 'hat jê birin';
$lang['created'] = 'hat afirandin';
-$lang['restored'] = 'old revision restored';
+$lang['restored'] = 'old revision restored (%s)';
$lang['summary'] = 'Kurteya guhartinê';
$lang['mail_newpage'] = 'page added:';
diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php
index 77fec8362..bea921abc 100644
--- a/inc/lang/la/lang.php
+++ b/inc/lang/la/lang.php
@@ -131,7 +131,6 @@ $lang['uploadsucc'] = 'Oneratum perfectum';
$lang['uploadfail'] = 'Error onerandi.';
$lang['uploadwrong'] = 'Onerare non potest. Genus documenti non legitimum!';
$lang['uploadexist'] = 'Documentum iam est.';
-$lang['uploadbadcontent'] = 'Documentum oneratum cum genere documenti non congruit.';
$lang['uploadspam'] = 'Onerare non potest: nam in indice perscriptionis documentum est.';
$lang['uploadxss'] = 'Onerare non potest: nam forsitan malum scriptum in documento est.';
$lang['uploadsize'] = 'Documentum onerandum ponderosius est. (Maxime "%s")';
@@ -164,7 +163,7 @@ $lang['lastmod'] = 'Extrema mutatio';
$lang['by'] = 'a(b)';
$lang['deleted'] = 'deletur';
$lang['created'] = 'creatur';
-$lang['restored'] = 'Recensio uetus restituta';
+$lang['restored'] = 'Recensio uetus restituta (%s)';
$lang['external_edit'] = 'Externe recensere';
$lang['summary'] = 'Indicem recensere';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> necessarium est.';
@@ -254,7 +253,6 @@ $lang['i_pol1'] = 'Publicus uicis (omnes legere, Sodales scribere
$lang['i_pol2'] = 'Clausus uicis (Soli Sodales legere scribere et onerare poccunt)';
$lang['i_retry'] = 'Rursum temptas';
$lang['i_license'] = 'Elige facultatem sub qua tuus uicis est:';
-$lang['recent_global'] = 'Mutatione in hoc genere uides. Recentiores mutationes quoque uidere <a href="%s">potes</a>';
$lang['years'] = 'ab annis %d';
$lang['months'] = 'a mensibus %d';
$lang['weeks'] = 'a septimanis %d';
diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php
index e6409b7ff..bced5a50a 100644
--- a/inc/lang/lb/lang.php
+++ b/inc/lang/lb/lang.php
@@ -124,7 +124,7 @@ $lang['lastmod'] = 'Fir d\'lescht g\'ännert';
$lang['by'] = 'vun';
$lang['deleted'] = 'geläscht';
$lang['created'] = 'erstallt';
-$lang['restored'] = 'al Versioun zeréckgeholl';
+$lang['restored'] = 'al Versioun zeréckgeholl (%s)';
$lang['external_edit'] = 'extern Ännerung';
$lang['summary'] = 'Resumé vun den Ännerungen';
$lang['noflash'] = 'Den <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> get gebraucht fir dësen Inhalt unzeweisen.';
diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php
index 13ff8c305..8a4c4e6a5 100644
--- a/inc/lang/lt/lang.php
+++ b/inc/lang/lt/lang.php
@@ -132,7 +132,7 @@ $lang['lastmod'] = 'Keista';
$lang['by'] = 'vartotojo';
$lang['deleted'] = 'ištrintas';
$lang['created'] = 'sukurtas';
-$lang['restored'] = 'atstatyta sena versija';
+$lang['restored'] = 'atstatyta sena versija (%s)';
$lang['external_edit'] = 'redaguoti papildomomis priemonėmis';
$lang['summary'] = 'Redaguoti santrauką';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> reikalingas šios medžiagos peržiūrai.';
diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php
index 671e5f52a..2027b87ba 100644
--- a/inc/lang/lv/lang.php
+++ b/inc/lang/lv/lang.php
@@ -178,7 +178,7 @@ $lang['lastmod'] = 'Labota';
$lang['by'] = ', labojis';
$lang['deleted'] = 'dzēsts';
$lang['created'] = 'izveidots';
-$lang['restored'] = 'vecā versija atjaunota';
+$lang['restored'] = 'vecā versija atjaunota (%s)';
$lang['external_edit'] = 'ārpussistēmas labojums';
$lang['summary'] = 'Anotācija';
$lang['noflash'] = 'Lai attēlotu lapas saturu, vajag <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/mg/lang.php b/inc/lang/mg/lang.php
index 4142f00d0..95589ab21 100644
--- a/inc/lang/mg/lang.php
+++ b/inc/lang/mg/lang.php
@@ -88,7 +88,7 @@ $lang['lastmod'] = 'Novaina farany:';
$lang['by'] = '/';
$lang['deleted'] = 'voafafa';
$lang['created'] = 'Voamboatra';
-$lang['restored'] = 'Naverina tamin\'ny kinova taloha';
+$lang['restored'] = 'Naverina tamin\'ny kinova taloha (%s)';
$lang['summary'] = 'Fanovana teo';
$lang['mail_newpage'] = 'pejy niampy:';
diff --git a/inc/lang/mk/lang.php b/inc/lang/mk/lang.php
index 7482f2512..44bd489b7 100644
--- a/inc/lang/mk/lang.php
+++ b/inc/lang/mk/lang.php
@@ -136,7 +136,7 @@ $lang['lastmod'] = 'Последно изменета';
$lang['by'] = 'од';
$lang['deleted'] = 'отстранета';
$lang['created'] = 'креирана';
-$lang['restored'] = 'обновена е стара ревизија';
+$lang['restored'] = 'обновена е стара ревизија (%s)';
$lang['external_edit'] = 'надворешно уредување';
$lang['summary'] = 'Уреди го изводот';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash приклучокот</a> е потребен за да се прикаже оваа содржина.';
@@ -196,8 +196,6 @@ $lang['subscr_m_unsubscribe'] = 'Отплатување';
$lang['subscr_m_subscribe'] = 'Претплата';
$lang['subscr_m_receive'] = 'Прими';
$lang['subscr_style_every'] = 'е-пошта за секоја промена';
-$lang['subscr_style_digest'] = 'е-пошта со преглед од промените за секоја страница';
-$lang['subscr_style_list'] = 'листа на променети страници од последната е-пошта';
$lang['authmodfailed'] = 'Лоша конфигурација за автентикација на корисник. Ве молам информирајте го вики администратор.';
$lang['authtempfail'] = 'Автентикација на корисник е привремено недостапна. Ако оваа ситуација истрајува, ве молам известете го вики администратор.';
$lang['i_chooselang'] = 'Избере јазик';
diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php
index b754a3f1c..d95813efa 100644
--- a/inc/lang/mr/lang.php
+++ b/inc/lang/mr/lang.php
@@ -180,7 +180,6 @@ $lang['lastmod'] = 'सर्वात शेवटचा बद
$lang['by'] = 'द्वारा';
$lang['deleted'] = 'काढून टाकले';
$lang['created'] = 'निर्माण केले';
-$lang['restored'] = 'जुनी आवृत्ति पुनर्स्थापित केली';
$lang['external_edit'] = 'बाहेरून संपादित';
$lang['summary'] = 'सारांश बदला';
$lang['noflash'] = 'ही माहिती दाखवण्यासाठी <a href="http://www.adobe.com/products/flashplayer/">अडोब फ्लॅश प्लेअर</a> ची गरज आहे.';
diff --git a/inc/lang/ms/lang.php b/inc/lang/ms/lang.php
index 92dc86b5a..02c0e2c91 100644
--- a/inc/lang/ms/lang.php
+++ b/inc/lang/ms/lang.php
@@ -93,5 +93,5 @@ $lang['uploadfail'] = 'Ralat muat naik';
$lang['uploadxss'] = 'Fail ini mengandungi kod HTML atau kod skrip yang mungkin boleh disalah tafsir oleh pelayar web.';
$lang['toc'] = 'Jadual Kandungan';
$lang['current'] = 'kini';
-$lang['restored'] = 'Telah dikembalikan ke semakan sebelumnya';
+$lang['restored'] = 'Telah dikembalikan ke semakan sebelumnya (%s)';
$lang['summary'] = 'Paparan';
diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php
index fa6d2f705..b7ca14b0a 100644
--- a/inc/lang/ne/lang.php
+++ b/inc/lang/ne/lang.php
@@ -128,7 +128,6 @@ $lang['lastmod'] = 'अन्तिम पटक सच्या
$lang['by'] = 'द्वारा ';
$lang['deleted'] = 'हटाइएको';
$lang['created'] = 'निर्माण गरिएको';
-$lang['restored'] = 'पुरानो संस्करण पुनर्‌प्रयोग गरिएको';
$lang['external_edit'] = 'बाह्य सम्पादन';
$lang['summary'] = 'सम्पादनको बारेमा';
$lang['mail_newpage'] = 'थपिएको पृष्ठ';
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 0241eab2f..f6192a99b 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -192,7 +192,7 @@ $lang['lastmod'] = 'Laatst gewijzigd';
$lang['by'] = 'door';
$lang['deleted'] = 'verwijderd';
$lang['created'] = 'aangemaakt';
-$lang['restored'] = 'oude revisie hersteld';
+$lang['restored'] = 'oude revisie hersteld (%s)';
$lang['external_edit'] = 'Externe bewerking';
$lang['summary'] = 'Samenvatting wijziging';
$lang['noflash'] = 'De <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is vereist om de pagina te kunnen weergeven.';
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index 9aa11ac87..8235bfb91 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -190,7 +190,7 @@ $lang['lastmod'] = 'Sist endret';
$lang['by'] = 'av';
$lang['deleted'] = 'fjernet';
$lang['created'] = 'opprettet';
-$lang['restored'] = 'gjenopprettet til en tidligere versjon';
+$lang['restored'] = 'gjenopprettet til en tidligere versjon (%s)';
$lang['external_edit'] = 'ekstern redigering';
$lang['summary'] = 'Redigeringskommentar';
$lang['noflash'] = 'For at dette innholdet skal vises må du ha <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
@@ -316,8 +316,7 @@ $lang['media_upload'] = 'Last opp til navnerommet <strong>%s</strong>.'
$lang['media_search'] = 'Søk i navnerommet <strong>%s</strong>.';
$lang['media_view'] = '%s';
$lang['media_viewold'] = '%s på %s';
-$lang['media_edit'] = 'Rediger';
-$lang['media_history'] = 'Dette er de tidligere versjonene av filen.';
+$lang['media_edit'] = 'Rediger %s';
$lang['media_meta_edited'] = 'metadata er endra';
$lang['media_perm_read'] = 'Beklager, du har ikke tilgang til å lese filer.';
$lang['media_perm_upload'] = 'Beklager, du har ikke tilgang til å laste opp filer.';
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index cf9fc6a16..51149e88f 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -189,7 +189,7 @@ $lang['lastmod'] = 'ostatnio zmienione';
$lang['by'] = 'przez';
$lang['deleted'] = 'usunięto';
$lang['created'] = 'utworzono';
-$lang['restored'] = 'przywrócono poprzednią wersję';
+$lang['restored'] = 'przywrócono poprzednią wersję (%s)';
$lang['external_edit'] = 'edycja zewnętrzna';
$lang['summary'] = 'Opis zmian';
$lang['noflash'] = 'Plugin <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> jest niezbędny do obejrzenia tej zawartości.';
@@ -265,8 +265,6 @@ $lang['subscr_m_unsubscribe'] = 'Zrezygnuj z subskrypcji';
$lang['subscr_m_subscribe'] = 'Subskrybuj';
$lang['subscr_m_receive'] = 'Otrzymuj';
$lang['subscr_style_every'] = 'email przy każdej zmianie';
-$lang['subscr_style_digest'] = 'email ze streszczeniem zmian dla każdej ze stron';
-$lang['subscr_style_list'] = 'lista zmienionych stron od czasu ostatniego emaila';
$lang['authmodfailed'] = 'Błąd uwierzytelnienia. Powiadom administratora tego wiki.';
$lang['authtempfail'] = 'Uwierzytelnienie użytkownika jest w tej chwili niemożliwe. Jeśli ta sytuacja się powtórzy, powiadom administratora tego wiki.';
$lang['authpwdexpire'] = 'Twoje hasło wygaśnie za %d dni. Należy je zmienić w krótkim czasie.';
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 1555889f6..ac9c59c3e 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -179,7 +179,7 @@ $lang['lastmod'] = 'Esta página foi modificada pela última vez e
$lang['by'] = 'por';
$lang['deleted'] = 'Documento automaticamente removido.';
$lang['created'] = 'Criação deste novo documento.';
-$lang['restored'] = 'Versão anterior restaurada.';
+$lang['restored'] = 'Versão anterior restaurada (%s)';
$lang['external_edit'] = 'Edição externa';
$lang['summary'] = 'Sumário da Edição';
$lang['noflash'] = 'O <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a> é necessário para exibir este conteúdo.';
diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php
index d6bfcad3a..8b2483daf 100644
--- a/inc/lang/ro/lang.php
+++ b/inc/lang/ro/lang.php
@@ -184,7 +184,7 @@ $lang['lastmod'] = 'Ultima modificare';
$lang['by'] = 'de către';
$lang['deleted'] = 'şters';
$lang['created'] = 'creat';
-$lang['restored'] = 'versiune veche restaurată';
+$lang['restored'] = 'versiune veche restaurată (%s)';
$lang['external_edit'] = 'editare externă';
$lang['summary'] = 'Editează sumarul';
$lang['noflash'] = 'Plugin-ul <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> este necesar pentru afişarea corectă a conţinutului.';
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index c391bc6a5..52e0ef3d6 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -193,7 +193,7 @@ $lang['lastmod'] = 'Последние изменения';
$lang['by'] = ' —';
$lang['deleted'] = 'удалено';
$lang['created'] = 'создано';
-$lang['restored'] = 'старая ревизия восстановлена';
+$lang['restored'] = 'старая ревизия восстановлена (%s)';
$lang['external_edit'] = 'внешнее изменение';
$lang['summary'] = 'Сводка изменений';
$lang['noflash'] = 'Для просмотра этого содержимого требуется <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
@@ -270,8 +270,6 @@ $lang['subscr_m_unsubscribe'] = 'Отменить подписку';
$lang['subscr_m_subscribe'] = 'Подписаться';
$lang['subscr_m_receive'] = 'Получить';
$lang['subscr_style_every'] = 'уведомлять о каждом изменении';
-$lang['subscr_style_digest'] = 'сводка изменений по каждой странице';
-$lang['subscr_style_list'] = 'перечислять изменившиеся страницы с прошлого уведомления';
$lang['authmodfailed'] = 'Неправильная конфигурация аутентификации пользователя. Пожалуйста, сообщите об этом своему администратору вики.';
$lang['authtempfail'] = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом своему администратору вики.';
$lang['authpwdexpire'] = 'Действие вашего пароля истекает через %d дней. Вы должны изменить его как можно скорее';
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index 81220b8a2..5c4316b01 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -177,7 +177,7 @@ $lang['lastmod'] = 'Zadnja sprememba';
$lang['by'] = 'uporabnika';
$lang['deleted'] = 'odstranjena';
$lang['created'] = 'ustvarjena';
-$lang['restored'] = 'povrnjena stara različica';
+$lang['restored'] = 'povrnjena stara različica (%s)';
$lang['external_edit'] = 'urejanje v zunanjem urejevalniku';
$lang['summary'] = 'Povzetek urejanja';
$lang['noflash'] = 'Za prikaz vsebine je treba namestiti <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php
index e190d8404..212f10607 100644
--- a/inc/lang/sq/lang.php
+++ b/inc/lang/sq/lang.php
@@ -140,7 +140,7 @@ $lang['lastmod'] = 'Redaktuar për herë të fundit';
$lang['by'] = 'nga';
$lang['deleted'] = 'u fshi';
$lang['created'] = 'u krijua';
-$lang['restored'] = 'Kthehu tek një version i vjetër';
+$lang['restored'] = 'Kthehu tek një version i vjetër (%s)';
$lang['external_edit'] = 'redaktim i jashtëm';
$lang['summary'] = 'Përmbledhja redaktimit';
$lang['noflash'] = 'Nevojitet <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> për të paraqitur këtë përmbajtje.';
@@ -204,8 +204,6 @@ $lang['subscr_m_unsubscribe'] = 'Fshi Abonimin';
$lang['subscr_m_subscribe'] = 'Abonohu';
$lang['subscr_m_receive'] = 'Mer';
$lang['subscr_style_every'] = 'email mbi çdo ndryshim';
-$lang['subscr_style_digest'] = 'pasqyro email-e ndryshimi pér çdo faqe';
-$lang['subscr_style_list'] = 'listë e faqeve të ndryshuara që nga emaili i fundit';
$lang['authmodfailed'] = 'Konfigurim i gabuar i autentikimit të përdoruesit. Ju lutem informoni Administratorin tuaj të Wiki-it.';
$lang['authtempfail'] = 'Autentikimi i përdoruesve është përkohësisht i padisponueshëm. Nëse kjo gjendje vazhdon, ju lutemi të informoni Administratorin tuaj të Wiki-it.';
$lang['i_chooselang'] = 'Zgjidhni gjuhën tuaj';
diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php
index d7f594511..7fbdf1985 100644
--- a/inc/lang/sr/lang.php
+++ b/inc/lang/sr/lang.php
@@ -162,7 +162,7 @@ $lang['lastmod'] = 'Последњи пут мењано';
$lang['by'] = 'од';
$lang['deleted'] = 'избрисано';
$lang['created'] = 'направљено';
-$lang['restored'] = 'стара верзија повраћена';
+$lang['restored'] = 'стара верзија повраћена (%s)';
$lang['external_edit'] = 'спољна измена';
$lang['summary'] = 'Сажетак измене';
$lang['noflash'] = 'За приказивање ове врсте материјала потребан вам је <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php
index c9d526436..627484eab 100644
--- a/inc/lang/th/lang.php
+++ b/inc/lang/th/lang.php
@@ -144,7 +144,7 @@ $lang['lastmod'] = 'แก้ไขครั้งล่าสุ
$lang['by'] = 'โดย';
$lang['deleted'] = 'ถูกถอดออก';
$lang['created'] = 'ถูกสร้าง';
-$lang['restored'] = 'ย้อนไปรุ่นก่อนหน้า';
+$lang['restored'] = 'ย้อนไปรุ่นก่อนหน้า (%s)';
$lang['external_edit'] = 'แก้ไขภายนอก';
$lang['summary'] = 'สรุป(หมายเหตุ)การแก้ไขนี้';
$lang['noflash'] = 'ต้องการตัวเล่นแฟลช <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> เพื่อแสดงผลเนื้อหานี้';
diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php
index 5430905b1..c6edf74c6 100644
--- a/inc/lang/tr/lang.php
+++ b/inc/lang/tr/lang.php
@@ -176,7 +176,7 @@ $lang['lastmod'] = 'Son değiştirilme';
$lang['by'] = 'Değiştiren:';
$lang['deleted'] = 'silindi';
$lang['created'] = 'oluşturuldu';
-$lang['restored'] = 'eski sürüme dönüldü';
+$lang['restored'] = 'eski sürüme dönüldü (%s)';
$lang['external_edit'] = 'Dışarıdan düzenle';
$lang['summary'] = 'Özeti düzenle';
$lang['noflash'] = 'Bu içeriği göstermek için <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Eklentisi</a> gerekmektedir.';
diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php
index 5274a4210..6aa468c50 100644
--- a/inc/lang/uk/lang.php
+++ b/inc/lang/uk/lang.php
@@ -169,7 +169,7 @@ $lang['lastmod'] = 'В останнє змінено';
$lang['by'] = ' ';
$lang['deleted'] = 'знищено';
$lang['created'] = 'створено';
-$lang['restored'] = 'відновлено стару ревізію';
+$lang['restored'] = 'відновлено стару ревізію (%s)';
$lang['external_edit'] = 'зовнішнє редагування';
$lang['summary'] = 'Підсумок змін';
$lang['noflash'] = 'Для перегляду цієї сторінки необхідно встановити <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
diff --git a/inc/lang/vi/lang.php b/inc/lang/vi/lang.php
index 99c4d47e4..c439ca534 100644
--- a/inc/lang/vi/lang.php
+++ b/inc/lang/vi/lang.php
@@ -176,7 +176,7 @@ $lang['lastmod'] = 'Thời điểm thay đổi';
$lang['by'] = 'do';
$lang['deleted'] = 'bị xoá';
$lang['created'] = 'được tạo ra';
-$lang['restored'] = 'phiên bản cũ đã được khôi phục';
+$lang['restored'] = 'phiên bản cũ đã được khôi phục (%s)';
$lang['external_edit'] = 'external edit';
$lang['summary'] = 'Tóm tắt biên soạn';
$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> cần được cài để có thể xem nội dung này.';
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index ddb35617e..536266971 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -186,7 +186,7 @@ $lang['lastmod'] = '上一次變更';
$lang['by'] = '由';
$lang['deleted'] = '移除';
$lang['created'] = '建立';
-$lang['restored'] = '恢復為舊版';
+$lang['restored'] = '恢復為舊版 (%s)';
$lang['external_edit'] = '外部編輯';
$lang['summary'] = '編輯摘要';
$lang['noflash'] = '顯示此內容需要 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash 附加元件</a>。';
diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php
index e6e568cb5..f404010ba 100644
--- a/inc/lang/zh/lang.php
+++ b/inc/lang/zh/lang.php
@@ -298,6 +298,9 @@ $lang['i_pol1'] = '公共的维基(任何人都有读的权限
$lang['i_pol2'] = '关闭的维基(只有注册用户才有读、写、上传的权限)';
$lang['i_retry'] = '重试';
$lang['i_license'] = '请选择您希望的内容发布许可协议:';
+$lang['i_license_none'] = '不要显示任何许可协议信息';
+$lang['i_pop_field'] = '请帮助我们改进 Dokuwiki 的体验:';
+$lang['i_pop_label'] = '每个月向 Dokuwiki 开发者发送匿名的使用数据';
$lang['recent_global'] = '您当前看到的是<b>%s</b> 名称空间的变动。你还可以在<a href="%s">查看整个维基的近期变动</a>。';
$lang['years'] = '%d年前';
$lang['months'] = '%d月前';
diff --git a/inc/media.php b/inc/media.php
index bd80db577..db1ca0d57 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -1686,18 +1686,36 @@ function media_nstree($ns){
$ns = cleanID($ns);
if(empty($ns)){
global $ID;
- $ns = dirname(str_replace(':','/',$ID));
- if($ns == '.') $ns ='';
+ $ns = (string)getNS($ID);
}
- $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $ns_dir = utf8_encodeFN(str_replace(':','/',$ns));
$data = array();
- search($data,$conf['mediadir'],'search_index',array('ns' => $ns, 'nofiles' => true));
+ search($data,$conf['mediadir'],'search_index',array('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'].']'));
+ // insert the current ns into the hierarchy if it isn't already part of it
+ $ns_parts = explode(':', $ns);
+ $tmp_ns = '';
+ $pos = 0;
+ foreach ($ns_parts as $level => $part) {
+ if ($tmp_ns) $tmp_ns .= ':'.$part;
+ else $tmp_ns = $part;
+
+ // find the namespace parts or insert them
+ while ($data[$pos]['id'] != $tmp_ns) {
+ if ($pos >= count($data) || ($data[$pos]['level'] <= $level+1 && strnatcmp(utf8_encodeFN($data[$pos]['id']), utf8_encodeFN($tmp_ns)) > 0)) {
+ array_splice($data, $pos, 0, array(array('level' => $level+1, 'id' => $tmp_ns, 'open' => 'true')));
+ break;
+ }
+ ++$pos;
+ }
+ }
+
echo html_buildlist($data,'idx','media_nstree_item','media_nstree_li');
}
diff --git a/inc/parser/code.php b/inc/parser/code.php
index 21fb0dc3c..43d8d703f 100644
--- a/inc/parser/code.php
+++ b/inc/parser/code.php
@@ -43,7 +43,7 @@ class Doku_Renderer_code extends Doku_Renderer {
* This should never be reached, if it is send a 404
*/
function document_end() {
- header("HTTP/1.0 404 Not Found");
+ http_status(404);
echo '404 - Not found';
exit;
}
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index 71f3aa4bf..84a999e56 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -803,7 +803,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
$link['class'] .= ' mediafile mf_'.$class;
$link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),true);
- $link['title'] .= ' (' . filesize_h(filesize(mediaFN($src))).')';
+ if ($exists) $link['title'] .= ' (' . filesize_h(filesize(mediaFN($src))).')';
}
if($hash) $link['url'] .= '#'.$hash;
@@ -889,7 +889,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
// title is escaped by SimplePie, we unescape here because it
// is escaped again in externallink() FS#1705
$this->externallink($item->get_permalink(),
- htmlspecialchars_decode($item->get_title()));
+ html_entity_decode($item->get_title(), ENT_QUOTES, 'UTF-8'));
}else{
$this->doc .= ' '.$item->get_title();
}
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 1733fcf09..56161af44 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -86,67 +86,6 @@ function p_wiki_xhtml($id, $rev='', $excuse=true){
}
/**
- * Returns starting summary for a page (e.g. the first few
- * paragraphs), marked up in XHTML.
- *
- * If $excuse is true an explanation is returned if the file
- * wasn't found
- *
- * @param string $id wiki page id
- * @param string $title populated with page title from heading or page id
- * @param string $rev revision string
- * @param bool $excuse if an excuse shall be renderer when no content is found
- * @return string xhtml code
- * @deprecated
- * @author Harry Fuecks <hfuecks@gmail.com>
- */
-function p_wiki_xhtml_summary($id, &$title, $rev='', $excuse=true){
- $file = wikiFN($id,$rev);
- $ret = '';
- $ins = null;
-
- //ensure $id is in global $ID (needed for parsing)
- global $ID;
- $keep = $ID;
- $ID = $id;
-
- if($rev){
- if(@file_exists($file)){
- //no caching on old revisions
- $ins = p_get_instructions(io_readWikiPage($file,$id,$rev));
- }elseif($excuse){
- $ret = p_locale_xhtml('norev');
- //restore ID (just in case)
- $ID = $keep;
- return $ret;
- }
-
- }else{
-
- if(@file_exists($file)){
- // The XHTML for a summary is not cached so use the instruction cache
- $ins = p_cached_instructions($file);
- }elseif($excuse){
- $ret = p_locale_xhtml('newpage');
- //restore ID (just in case)
- $ID = $keep;
- return $ret;
- }
- }
-
- $ret = p_render('xhtmlsummary',$ins,$info);
-
- if ( $info['sum_pagetitle'] ) {
- $title = $info['sum_pagetitle'];
- } else {
- $title = $id;
- }
-
- $ID = $keep;
- return $ret;
-}
-
-/**
* Returns the specified local text in parsed format
*
* @author Andreas Gohr <andi@splitbrain.org>
@@ -158,23 +97,6 @@ function p_locale_xhtml($id){
}
/**
- * *** DEPRECATED ***
- *
- * use p_cached_output()
- *
- * Returns the given file parsed to XHTML
- *
- * Uses and creates a cachefile
- *
- * @deprecated
- * @author Andreas Gohr <andi@splitbrain.org>
- * @todo rewrite to use mode instead of hardcoded XHTML
- */
-function p_cached_xhtml($file){
- return p_cached_output($file);
-}
-
-/**
* Returns the given file parsed into the requested output format
*
* @author Andreas Gohr <andi@splitbrain.org>
diff --git a/inc/plugin.php b/inc/plugin.php
index cd6bd5ac7..4d3d45f62 100644
--- a/inc/plugin.php
+++ b/inc/plugin.php
@@ -258,11 +258,4 @@ class DokuWiki_Plugin {
function isSingleton() {
return true;
}
-
- // deprecated functions
- function plugin_localFN($id) { return $this->localFN($id); }
- function plugin_locale_xhtml($id) { return $this->locale_xhtml($id); }
- function plugin_email($e, $n='', $c='', $m='') { return $this->email($e, $n, $c, $m); }
- function plugin_link($l, $t='', $c='', $to='', $m='') { return $this->external_link($l, $t, $c, $to, $m); }
- function plugin_render($t, $f='xhtml') { return $this->render($t, $f); }
}
diff --git a/inc/search.php b/inc/search.php
index cc3e79006..6927fff5f 100644
--- a/inc/search.php
+++ b/inc/search.php
@@ -62,15 +62,6 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort='natural'){
}
/**
- * Wrapper around call_user_func_array.
- *
- * @deprecated
- */
-function search_callback($func,&$data,$base,$file,$type,$lvl,$opts){
- return call_user_func_array($func, array(&$data,$base,$file,$type,$lvl,$opts));
-}
-
-/**
* The following functions are userfunctions to use with the search
* function above. This function is called for every found file or
* directory. When a directory is given to the function it has to
@@ -252,8 +243,8 @@ function search_pagename(&$data,$base,$file,$type,$lvl,$opts){
function search_allpages(&$data,$base,$file,$type,$lvl,$opts){
if(isset($opts['depth']) && $opts['depth']){
$parts = explode('/',ltrim($file,'/'));
- if(($type == 'd' && count($parts) > $opts['depth'])
- || ($type != 'd' && count($parts) > $opts['depth'] + 1)){
+ if(($type == 'd' && count($parts) >= $opts['depth'])
+ || ($type != 'd' && count($parts) > $opts['depth'])){
return false; // depth reached
}
}
@@ -283,125 +274,25 @@ function search_allpages(&$data,$base,$file,$type,$lvl,$opts){
}
/**
- * Search for backlinks to a given page
+ * Reference search
+ * This fuction searches for existing references to a given media file
+ * and returns an array with the found pages. It doesn't pay any
+ * attention to ACL permissions to find every reference. The caller
+ * must check if the user has the appropriate rights to see the found
+ * page and eventually have to prevent the result from displaying.
*
- * $opts['ns'] namespace of the page
- * $opts['name'] name of the page without namespace
+ * @param array $data Reference to the result data structure
+ * @param string $base Base usually $conf['datadir']
+ * @param string $file current file or directory relative to $base
+ * @param char $type Type either 'd' for directory or 'f' for file
+ * @param int $lvl Current recursion depht
+ * @param mixed $opts option array as given to search()
*
- * @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated Replaced by ft_backlinks()
- */
-function search_backlinks(&$data,$base,$file,$type,$lvl,$opts){
- //we do nothing with directories
- if($type == 'd') return true;
- //only search txt files
- if(substr($file,-4) != '.txt') return true;
-
- //absolute search id
- $sid = cleanID($opts['ns'].':'.$opts['name']);
-
- //current id and namespace
- $cid = pathID($file);
- $cns = getNS($cid);
-
- //check ACL
- if(auth_quickaclcheck($cid) < AUTH_READ){
- return false;
- }
-
- //fetch instructions
- $instructions = p_cached_instructions($base.$file,true);
- if(is_null($instructions)) return false;
-
- global $conf;
- //check all links for match
- foreach($instructions as $ins){
- if($ins[0] == 'internallink' || ($conf['camelcase'] && $ins[0] == 'camelcaselink') ){
- $mid = $ins[1][0];
- resolve_pageid($cns,$mid,$exists); //exists is not used
- if($mid == $sid){
- //we have a match - finish
- $data[]['id'] = $cid;
- break;
- }
- }
- }
-
- return false;
-}
-
-/**
- * Fulltextsearch
- *
- * $opts['query'] is the search query
+ * $opts['query'] is the demanded media file name
*
* @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated - fulltext indexer is used instead
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
-function search_fulltext(&$data,$base,$file,$type,$lvl,$opts){
- //we do nothing with directories
- if($type == 'd') return true;
- //only search txt files
- if(substr($file,-4) != '.txt') return true;
-
- //check ACL
- $id = pathID($file);
- if(auth_quickaclcheck($id) < AUTH_READ){
- return false;
- }
-
- //create regexp from queries
- $poswords = array();
- $negwords = array();
- $qpreg = preg_split('/\s+/',$opts['query']);
-
- foreach($qpreg as $word){
- switch(substr($word,0,1)){
- case '-':
- if(strlen($word) > 1){ // catch single '-'
- array_push($negwords,preg_quote(substr($word,1),'#'));
- }
- break;
- case '+':
- if(strlen($word) > 1){ // catch single '+'
- array_push($poswords,preg_quote(substr($word,1),'#'));
- }
- break;
- default:
- array_push($poswords,preg_quote($word,'#'));
- break;
- }
- }
-
- // a search without any posword is useless
- if (!count($poswords)) return true;
-
- $reg = '^(?=.*?'.join(')(?=.*?',$poswords).')';
- $reg .= count($negwords) ? '((?!'.join('|',$negwords).').)*$' : '.*$';
- search_regex($data,$base,$file,$reg,$poswords);
- return true;
- }
-
- /**
- * Reference search
- * This fuction searches for existing references to a given media file
- * and returns an array with the found pages. It doesn't pay any
- * attention to ACL permissions to find every reference. The caller
- * must check if the user has the appropriate rights to see the found
- * page and eventually have to prevent the result from displaying.
- *
- * @param array $data Reference to the result data structure
- * @param string $base Base usually $conf['datadir']
- * @param string $file current file or directory relative to $base
- * @param char $type Type either 'd' for directory or 'f' for file
- * @param int $lvl Current recursion depht
- * @param mixed $opts option array as given to search()
- *
- * $opts['query'] is the demanded media file name
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
- */
function search_reference(&$data,$base,$file,$type,$lvl,$opts){
global $conf;
@@ -424,57 +315,6 @@ function search_reference(&$data,$base,$file,$type,$lvl,$opts){
/* ------------- helper functions below -------------- */
/**
- * fulltext search helper
- * searches a text file with a given regular expression
- * no ACL checks are performed. This have to be done by
- * the caller if necessary.
- *
- * @param array $data reference to array for results
- * @param string $base base directory
- * @param string $file file name to search in
- * @param string $reg regular expression to search for
- * @param array $words words that should be marked in the results
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
- *
- * @deprecated - fulltext indexer is used instead
- */
-function search_regex(&$data,$base,$file,$reg,$words){
-
- //get text
- $text = io_readfile($base.'/'.$file);
- //lowercase text (u modifier does not help with case)
- $lctext = utf8_strtolower($text);
-
- //do the fulltext search
- $matches = array();
- if($cnt = preg_match_all('#'.$reg.'#usi',$lctext,$matches)){
- //this is not the best way for snippet generation but the fastest I could find
- $q = $words[0]; //use first word for snippet creation
- $p = utf8_strpos($lctext,$q);
- $f = $p - 100;
- $l = utf8_strlen($q) + 200;
- if($f < 0) $f = 0;
- $snippet = '<span class="search_sep"> ... </span>'.
- htmlspecialchars(utf8_substr($text,$f,$l)).
- '<span class="search_sep"> ... </span>';
- $mark = '('.join('|', $words).')';
- $snippet = preg_replace('#'.$mark.'#si','<strong class="search_hit">\\1</strong>',$snippet);
-
- $data[] = array(
- 'id' => pathID($file),
- 'count' => preg_match_all('#'.$mark.'#usi',$lctext,$matches),
- 'poswords' => join(' ',$words),
- 'snippet' => $snippet,
- );
- }
-
- return true;
-}
-
-
-/**
* fulltext sort
*
* Callback sort function for use with usort to sort the data
diff --git a/inc/template.php b/inc/template.php
index a5bcabf1e..415b56de7 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -764,7 +764,7 @@ function tpl_searchform($ajax = true, $autocomplete = true) {
global $QUERY;
// don't print the search form if search action has been disabled
- if(!actionOk('search')) return false;
+ if(!actionOK('search')) return false;
print '<form action="'.wl().'" accept-charset="utf-8" class="search" id="dw__search" method="get"><div class="no">';
print '<input type="hidden" name="do" value="search" />';
@@ -1373,11 +1373,13 @@ function tpl_actiondropdown($empty = '', $button = '&gt;') {
global $REV;
global $lang;
- echo '<form action="'.DOKU_SCRIPT.'" method="post" accept-charset="utf-8">';
+ echo '<form action="'.DOKU_SCRIPT.'" method="get" accept-charset="utf-8">';
echo '<div class="no">';
echo '<input type="hidden" name="id" value="'.$ID.'" />';
if($REV) echo '<input type="hidden" name="rev" value="'.$REV.'" />';
- echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />';
+ if ($_SERVER['REMOTE_USER']) {
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />';
+ }
echo '<select name="do" class="edit quickselect" title="'.$lang['tools'].'">';
echo '<option value="">'.$empty.'</option>';
diff --git a/install.php b/install.php
index f54c25207..2db25bd2f 100644
--- a/install.php
+++ b/install.php
@@ -54,7 +54,8 @@ $dokuwiki_hash = array(
'2011-05-25' => '4241865472edb6fa14a1227721008072',
'2011-11-10' => 'b46ff19a7587966ac4df61cbab1b8b31',
'2012-01-25' => '72c083c73608fc43c586901fd5dabb74',
- '2012-09-10' => 'eb0b3fc90056fbc12bac6f49f7764df3'
+ '2012-09-10' => 'eb0b3fc90056fbc12bac6f49f7764df3',
+ 'devel' => '7b62b75245f57f122d3e0f8ed7989623',
);
@@ -391,6 +392,24 @@ EOT;
@touch(DOKU_INC.'data/cache/autosubmit.txt');
}
+ // disable auth plugins til needed
+ $output = <<<EOT
+<?php
+/*
+ * Local plugin enable/disable settings
+ *
+ * Auto-generated by install script
+ * Date: $now
+ */
+
+\$plugins['authad'] = 0;
+\$plugins['authldap'] = 0;
+\$plugins['authmysql'] = 0;
+\$plugins['authpgsql'] = 0;
+
+EOT;
+ $ok = $ok && fileWrite(DOKU_LOCAL.'plugins.local.php', $output);
+
return $ok;
}
diff --git a/lib/exe/detail.php b/lib/exe/detail.php
index e597db3a2..db635c016 100644
--- a/lib/exe/detail.php
+++ b/lib/exe/detail.php
@@ -31,7 +31,7 @@ if($AUTH >= AUTH_READ){
$SRC = mediaFN($IMG);
if(!@file_exists($SRC)){
//doesn't exist!
- header("HTTP/1.0 404 File not Found");
+ http_status(404);
$ERROR = 'File not found';
}
}else{
diff --git a/lib/exe/fetch.php b/lib/exe/fetch.php
index 73e74af40..9bac4d272 100644
--- a/lib/exe/fetch.php
+++ b/lib/exe/fetch.php
@@ -58,7 +58,7 @@ if(!defined('SIMPLE_TEST')) {
}
// send any non 200 status
if($data['status'] != 200) {
- header('HTTP/1.0 '.$data['status'].' '.$data['statusmessage']);
+ http_status($data['status'], $data['statusmessage']);
}
// die on errors
if($data['status'] > 203) {
@@ -137,7 +137,7 @@ function sendFile($file, $mime, $dl, $cache) {
if($fp) {
http_rangeRequest($fp, filesize($file), $mime);
} else {
- header("HTTP/1.0 500 Internal Server Error");
+ http_status(500);
print "Could not read $file - bad permissions?";
}
}
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 41d3e735c..4ff48133e 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -62,7 +62,7 @@ function js_out(){
DOKU_INC.'lib/scripts/locktimer.js',
DOKU_INC.'lib/scripts/linkwiz.js',
DOKU_INC.'lib/scripts/media.js',
- DOKU_INC.'lib/scripts/compatibility.js',
+# deprecated DOKU_INC.'lib/scripts/compatibility.js',
# disabled for FS#1958 DOKU_INC.'lib/scripts/hotkeys.js',
DOKU_INC.'lib/scripts/behaviour.js',
DOKU_INC.'lib/scripts/page.js',
diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php
index 7e0543540..a205c4570 100644
--- a/lib/exe/mediamanager.php
+++ b/lib/exe/mediamanager.php
@@ -36,19 +36,16 @@
// do not display the manager if user does not have read access
if($AUTH < AUTH_READ && !$fullscreen) {
- header('HTTP/1.0 403 Forbidden');
+ http_status(403);
die($lang['accessdenied']);
}
- // create the given namespace (just for beautification)
- if($AUTH >= AUTH_UPLOAD) { io_createNamespace("$NS:xxx", 'media'); }
-
// handle flash upload
if(isset($_FILES['Filedata'])){
$_FILES['upload'] =& $_FILES['Filedata'];
$JUMPTO = media_upload($NS,$AUTH);
if($JUMPTO == false){
- header("HTTP/1.0 400 Bad Request");
+ http_status(400);
echo 'Upload failed';
}
echo 'ok';
diff --git a/lib/exe/xmlrpc.php b/lib/exe/xmlrpc.php
index 5e6c197d0..c09daa17c 100644
--- a/lib/exe/xmlrpc.php
+++ b/lib/exe/xmlrpc.php
@@ -29,10 +29,10 @@ class dokuwiki_xmlrpc_server extends IXR_Server {
return $result;
} catch (RemoteAccessDeniedException $e) {
if (!isset($_SERVER['REMOTE_USER'])) {
- header('HTTP/1.1 401 Unauthorized');
+ http_status(401);
return new IXR_Error(-32603, "server error. not authorized to call method $methodname");
} else {
- header('HTTP/1.1 403 Forbidden');
+ http_status(403);
return new IXR_Error(-32604, "server error. forbidden to call the method $methodname");
}
} catch (RemoteException $e) {
diff --git a/lib/plugins/acl/lang/vi/help.txt b/lib/plugins/acl/lang/vi/help.txt
index 23e258678..816e5ee71 100644
--- a/lib/plugins/acl/lang/vi/help.txt
+++ b/lib/plugins/acl/lang/vi/help.txt
@@ -1,12 +1,12 @@
-=== Trợ giúp nhanh: ===
-
-Trang này giúp bạn thêm hoặc xóa quyền được cấp cho 1 thư mục hoặc trang wiki của bạn.
-
-Của sổ bên trái hiển thị tất cả các thư mục và trang văn bản.
-
-Khung trên đây cho phép bạn xem và sửa quyền của một nhóm hoặc thành viên đã chọn.
-
-Bảng bên dưới hiển thị tất cả các quyền được cấp. Bạn có thể sửa hoặc hóa các quyền đó một cách nhanh chóng.
-
-Đọc [[doku>acl|tài liệu chính thức về ACL]] sẽ giúp bạn hiểu hơn về cách phân quyền ở DokuWiki.
-
+=== Trợ giúp nhanh: ===
+
+Trang này giúp bạn thêm hoặc xóa quyền được cấp cho 1 thư mục hoặc trang wiki của bạn.
+
+Của sổ bên trái hiển thị tất cả các thư mục và trang văn bản.
+
+Khung trên đây cho phép bạn xem và sửa quyền của một nhóm hoặc thành viên đã chọn.
+
+Bảng bên dưới hiển thị tất cả các quyền được cấp. Bạn có thể sửa hoặc hóa các quyền đó một cách nhanh chóng.
+
+Đọc [[doku>acl|tài liệu chính thức về ACL]] sẽ giúp bạn hiểu hơn về cách phân quyền ở DokuWiki.
+
diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js
index 0ba91cdc9..c3763dc8d 100644
--- a/lib/plugins/acl/script.js
+++ b/lib/plugins/acl/script.js
@@ -117,11 +117,3 @@ var dw_acl = {
};
jQuery(dw_acl.init);
-
-var acl = {
- init: DEPRECATED_WRAP(dw_acl.init, dw_acl),
- userselhandler: DEPRECATED_WRAP(dw_acl.userselhandler, dw_acl),
- loadinfo: DEPRECATED_WRAP(dw_acl.loadinfo, dw_acl),
- parseatt: DEPRECATED_WRAP(dw_acl.parseatt, dw_acl),
- treehandler: DEPRECATED_WRAP(dw_acl.treehandler, dw_acl)
-};
diff --git a/lib/plugins/acl/style.css b/lib/plugins/acl/style.css
index f4277c341..d8f0b53f3 100644
--- a/lib/plugins/acl/style.css
+++ b/lib/plugins/acl/style.css
@@ -1,5 +1,5 @@
-div#acl_manager div#acl__tree {
+#acl__tree {
font-size: 90%;
width: 25%;
height: 300px;
@@ -8,61 +8,61 @@ div#acl_manager div#acl__tree {
border: 1px solid __border__;
text-align: left;
}
-[dir=rtl] div#acl_manager div#acl__tree {
+[dir=rtl] #acl__tree {
float: right;
text-align: right;
}
-div#acl_manager div#acl__tree a.cur {
+#acl__tree a.cur {
background-color: __highlight__;
font-weight: bold;
}
-div#acl_manager div#acl__tree ul {
+#acl__tree ul {
list-style-type: none;
margin: 0;
padding: 0;
}
-div#acl_manager div#acl__tree li {
+#acl__tree li {
padding-left: 1em;
list-style-image: none;
}
-[dir=rtl] div#acl_manager div#acl__tree li {
+[dir=rtl] #acl__tree li {
padding-left: 0em;
padding-right: 1em;
}
-div#acl_manager div#acl__tree ul img {
+#acl__tree ul img {
margin-right: 0.25em;
cursor: pointer;
}
-[dir=rtl] div#acl_manager div#acl__tree ul img {
+[dir=rtl] #acl__tree ul img {
margin-left: 0.25em;
margin-right: 0em;
}
-div#acl_manager div#acl__detail {
+#acl__detail {
width: 73%;
height: 300px;
float: right;
overflow: auto;
}
-[dir=rtl] div#acl_manager div#acl__detail {
+[dir=rtl] #acl__detail {
float: left;
}
-div#acl_manager div#acl__detail fieldset {
+#acl__detail fieldset {
width: 90%;
}
-div#acl_manager div#acl__detail div#acl__user {
+#acl__detail div#acl__user {
border: 1px solid __border__;
padding: 0.5em;
margin-bottom: 0.6em;
}
-div#acl_manager table.inline {
+#acl_manager table.inline {
width: 100%;
margin: 0;
}
@@ -75,59 +75,60 @@ div#acl_manager table.inline {
text-align: right;
}
-div#acl_manager .aclgroup {
+#acl_manager .aclgroup {
background: transparent url(pix/group.png) 0px 1px no-repeat;
padding: 1px 0px 1px 18px;
}
-[dir=rtl] div#acl_manager .aclgroup {
+[dir=rtl] #acl_manager .aclgroup {
background: transparent url(pix/group.png) right 1px no-repeat;
padding: 1px 18px 1px 0px;
display: inline-block; /* needed for IE7 */
}
-div#acl_manager .acluser {
+#acl_manager .acluser {
background: transparent url(pix/user.png) 0px 1px no-repeat;
padding: 1px 0px 1px 18px;
}
-[dir=rtl] div#acl_manager .acluser {
+[dir=rtl] #acl_manager .acluser {
background: transparent url(pix/user.png) right 1px no-repeat;
padding: 1px 18px 1px 0px;
display: inline-block; /* needed for IE7 */
}
-div#acl_manager .aclpage {
+#acl_manager .aclpage {
background: transparent url(pix/page.png) 0px 1px no-repeat;
padding: 1px 0px 1px 18px;
}
-[dir=rtl] div#acl_manager .aclpage {
+[dir=rtl] #acl_manager .aclpage {
background: transparent url(pix/page.png) right 1px no-repeat;
padding: 1px 18px 1px 0px;
display: inline-block; /* needed for IE7 */
}
-div#acl_manager .aclns {
+#acl_manager .aclns {
background: transparent url(pix/ns.png) 0px 1px no-repeat;
padding: 1px 0px 1px 18px;
}
-[dir=rtl] div#acl_manager .aclns {
+[dir=rtl] #acl_manager .aclns {
background: transparent url(pix/ns.png) right 1px no-repeat;
padding: 1px 18px 1px 0px;
display: inline-block; /* needed for IE7 */
}
-div#acl_manager label.disabled {
- color: __text_neu__!important;
+#acl_manager label.disabled {
+ opacity: .5;
+ cursor: auto;
}
#acl_manager label {
- text-align: left;
- font-weight: normal;
- display: inline;
+ text-align: left;
+ font-weight: normal;
+ display: inline;
}
#acl_manager table {
- margin-left: 10%;
- width: 80%;
+ margin-left: 10%;
+ width: 80%;
}
#acl_manager table tr {
diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index f651d87a1..6c49eafbb 100644
--- a/lib/plugins/authad/auth.php
+++ b/lib/plugins/authad/auth.php
@@ -71,6 +71,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
* Constructor
*/
public function __construct() {
+ global $INPUT;
parent::__construct();
// we load the config early to modify it a bit here
@@ -99,8 +100,8 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
// we need to simulate a login
if(empty($_COOKIE[DOKU_COOKIE])) {
- $_REQUEST['u'] = $_SERVER['REMOTE_USER'];
- $_REQUEST['p'] = 'sso_only';
+ $INPUT->set('u', $_SERVER['REMOTE_USER']);
+ $INPUT->set('p', 'sso_only');
}
}
diff --git a/lib/plugins/authad/conf/default.php b/lib/plugins/authad/conf/default.php
new file mode 100644
index 000000000..05d6c328e
--- /dev/null
+++ b/lib/plugins/authad/conf/default.php
@@ -0,0 +1,14 @@
+<?php
+
+$conf['account_suffix'] = '';
+$conf['base_dn'] = '';
+$conf['domain_controllers'] = '';
+$conf['sso'] = 0;
+$conf['ad_username'] = '';
+$conf['ad_password'] = '';
+$conf['real_primarygroup'] = 0;
+$conf['use_ssl'] = 0;
+$conf['use_tls'] = 0;
+$conf['debug'] = 0;
+$conf['expirywarn'] = 0;
+$conf['additional'] = ''; \ No newline at end of file
diff --git a/lib/plugins/authad/lang/it/settings.php b/lib/plugins/authad/lang/it/settings.php
new file mode 100644
index 000000000..10ae72f87
--- /dev/null
+++ b/lib/plugins/authad/lang/it/settings.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Italian language file
+ *
+ */
diff --git a/lib/plugins/authad/lang/zh/settings.php b/lib/plugins/authad/lang/zh/settings.php
new file mode 100644
index 000000000..9fd3c4e35
--- /dev/null
+++ b/lib/plugins/authad/lang/zh/settings.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Chinese language file
+ *
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['account_suffix'] = '您的账户后缀。例如 <code>@my.domain.org</code>';
+$lang['base_dn'] = '您的基本分辨名。例如 <code>DC=my,DC=domain,DC=org</code>';
+$lang['domain_controllers'] = '逗号分隔的域名控制器列表。例如 <code>srv1.domain.org,srv2.domain.org</code>';
+$lang['ad_username'] = '一个活动目录的特权用户,可以查看其他所有用户的数据。可选,但对某些活动例如发送订阅邮件是必须的。';
+$lang['ad_password'] = '上述用户的密码。';
+$lang['sso'] = '是否使用经由 Kerberos 和 NTLM 的 Single-Sign-On?';
+$lang['real_primarygroup'] = ' 是否解析真实的主要组,而不是假设为“域用户” (较慢)';
+$lang['use_ssl'] = '使用 SSL 连接?如果是,不要激活下面的 TLS。';
+$lang['use_tls'] = '使用 TLS 连接?如果是 ,不要激活上面的 SSL。';
+$lang['debug'] = '有错误时显示额外的调试信息?';
+$lang['expirywarn'] = '提前多少天警告用户密码即将到期。0 则禁用。';
+$lang['additional'] = '需要从用户数据中获取的额外 AD 属性的列表,以逗号分隔。用于某些插件。';
diff --git a/lib/plugins/authldap/conf/default.php b/lib/plugins/authldap/conf/default.php
index 35971d41d..d07f9c82e 100644
--- a/lib/plugins/authldap/conf/default.php
+++ b/lib/plugins/authldap/conf/default.php
@@ -1,7 +1,19 @@
<?php
-$conf['port'] = 389;
-
-$conf['groupkey'] = 'cn';
+$conf['server'] = '';
+$conf['port'] = 389;
+$conf['usertree'] = '';
+$conf['grouptree'] = '';
+$conf['userfilter'] = '';
+$conf['groupfilter'] = '';
+$conf['version'] = 2;
+$conf['starttls'] = 0;
+$conf['referrals'] = 0;
+$conf['binddn'] = '';
+$conf['bindpw'] = '';
+//$conf['mapping']['name'] unsupported in config manager
+//$conf['mapping']['grps'] unsupported in config manager
$conf['userscope'] = 'sub';
-$conf['groupscope'] = 'sub'; \ No newline at end of file
+$conf['groupscope'] = 'sub';
+$conf['groupkey'] = 'cn';
+$conf['debug'] = array('onoff'); \ No newline at end of file
diff --git a/lib/plugins/authldap/conf/metadata.php b/lib/plugins/authldap/conf/metadata.php
index e0815f789..fc5b2e63c 100644
--- a/lib/plugins/authldap/conf/metadata.php
+++ b/lib/plugins/authldap/conf/metadata.php
@@ -14,4 +14,5 @@ $meta['bindpw'] = array('password');
//$meta['mapping']['grps'] unsupported in config manager
$meta['userscope'] = array('multichoice','_choices' => array('sub','one','base'));
$meta['groupscope'] = array('multichoice','_choices' => array('sub','one','base'));
+$meta['groupkey'] = array('string');
$meta['debug'] = array('onoff'); \ No newline at end of file
diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php
index e3f4bab31..ddedf8ae3 100644
--- a/lib/plugins/authldap/lang/en/settings.php
+++ b/lib/plugins/authldap/lang/en/settings.php
@@ -1,15 +1,16 @@
<?php
$lang['server'] = 'Your LDAP server. Either hostname (<code>localhost</code>) or full qualified URL (<code>ldap://server.tld:389</code>)';
$lang['port'] = 'LDAP server port if no full URL was given above';
-$lang['usertree'] = 'Where to finde the user accounts. Eg. <code>ou=People, dc=server, dc=tld</code>';
+$lang['usertree'] = 'Where to find the user accounts. Eg. <code>ou=People, dc=server, dc=tld</code>';
$lang['grouptree'] = 'Where to find the user groups. Eg. <code>ou=Group, dc=server, dc=tld</code>';
-$lang['userfilter'] = 'LDAP filter to search for user accounts. Eg. <code>(&(uid=%{user})(objectClass=posixAccount))</code>';
-$lang['groupfilter'] = 'LDAP filter to search for groups. Eg. <code>(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['userfilter'] = 'LDAP filter to search for user accounts. Eg. <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter'] = 'LDAP filter to search for groups. Eg. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
$lang['version'] = 'The protocol version to use. You may need to set this to <code>3</code>';
$lang['starttls'] = 'Use TLS connections?';
$lang['referrals'] = 'Shall referrals be followed?';
-$lang['binddn'] = 'DN of an ptional bind user if anonymous bind is not sufficient. Eg. <code>cn=admin, dc=my, dc=home</code>';
+$lang['binddn'] = 'DN of an optional bind user if anonymous bind is not sufficient. Eg. <code>cn=admin, dc=my, dc=home</code>';
$lang['bindpw'] = 'Password of above user';
$lang['userscope'] = 'Limit search scope for user search';
$lang['groupscope'] = 'Limit search scope for group search';
-$lang['debug'] = 'Display additional debug information on errors'; \ No newline at end of file
+$lang['groupkey'] = 'Group member ship from any user attribute (instead of standard AD groups) e.g. group from department or telephone number';
+$lang['debug'] = 'Display additional debug information on errors';
diff --git a/lib/plugins/authldap/lang/it/settings.php b/lib/plugins/authldap/lang/it/settings.php
new file mode 100644
index 000000000..10ae72f87
--- /dev/null
+++ b/lib/plugins/authldap/lang/it/settings.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Italian language file
+ *
+ */
diff --git a/lib/plugins/authldap/lang/zh/settings.php b/lib/plugins/authldap/lang/zh/settings.php
new file mode 100644
index 000000000..e84511b42
--- /dev/null
+++ b/lib/plugins/authldap/lang/zh/settings.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Chinese language file
+ *
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['server'] = '您的 LDAP 服务器。填写主机名 (<code>localhost</code>) 或者完整的 URL (<code>ldap://server.tld:389</code>)';
+$lang['port'] = 'LDAP 服务器端口 (如果上面没有给出完整的 URL)';
+$lang['usertree'] = '何处查找用户账户。例如 <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree'] = '何处查找用户组。例如 <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter'] = '用于搜索用户账户的 LDAP 筛选器。例如 <code>(&(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter'] = '用于搜索组的 LDAP 筛选器。例如 <code>(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version'] = '使用的协议版本。您或许需要设置为 <code>3</code>';
+$lang['starttls'] = '使用 TLS 连接?';
+$lang['referrals'] = '是否允许引用 (referrals)?';
+$lang['binddn'] = '一个可选的绑定用户的 DN (如果匿名绑定不满足要求)。例如 Eg. <code>cn=admin, dc=my, dc=home</code>';
+$lang['bindpw'] = '上述用户的密码';
+$lang['userscope'] = '限制用户搜索的范围';
+$lang['groupscope'] = '限制组搜索的范围';
+$lang['debug'] = '有错误时显示额外的调试信息';
diff --git a/lib/plugins/authmysql/conf/default.php b/lib/plugins/authmysql/conf/default.php
index ea2cdad72..647f3d96c 100644
--- a/lib/plugins/authmysql/conf/default.php
+++ b/lib/plugins/authmysql/conf/default.php
@@ -1,3 +1,34 @@
<?php
-$conf['charset'] = 'utf8'; \ No newline at end of file
+$conf['charset'] = 'utf8';
+$conf['server'] = '';
+$conf['user'] = '';
+$conf['password'] = '';
+$conf['database'] = '';
+$conf['debug'] = 0;
+$conf['forwardClearPass'] = 0;
+$conf['TablesToLock'] = '';
+$conf['checkPass'] = '';
+$conf['getUserInfo'] = '';
+$conf['getGroups'] = '';
+$conf['getUsers'] = '';
+$conf['FilterLogin'] = '';
+$conf['FilterName'] = '';
+$conf['FilterEmail'] = '';
+$conf['FilterGroup'] = '';
+$conf['SortOrder'] = '';
+$conf['addUser'] = '';
+$conf['addGroup'] = '';
+$conf['addUserGroup'] = '';
+$conf['delGroup'] = '';
+$conf['getUserID'] = '';
+$conf['delUser'] = '';
+$conf['delUserRefs'] = '';
+$conf['updateUser'] = '';
+$conf['UpdateLogin'] = '';
+$conf['UpdatePass'] = '';
+$conf['UpdateEmail'] = '';
+$conf['UpdateName'] = '';
+$conf['UpdateTarget'] = '';
+$conf['delUserGroup'] = '';
+$conf['getGroupID'] = ''; \ No newline at end of file
diff --git a/lib/plugins/authmysql/conf/metadata.php b/lib/plugins/authmysql/conf/metadata.php
index f63bbe481..05d150fdf 100644
--- a/lib/plugins/authmysql/conf/metadata.php
+++ b/lib/plugins/authmysql/conf/metadata.php
@@ -4,6 +4,7 @@ $meta['server'] = array('string');
$meta['user'] = array('string');
$meta['password'] = array('password');
$meta['database'] = array('string');
+$meta['charset'] = array('string');
$meta['debug'] = array('multichoice','_choices' => array(0,1,2));
$meta['forwardClearPass'] = array('onoff');
$meta['TablesToLock'] = array('array');
diff --git a/lib/plugins/authmysql/lang/en/settings.php b/lib/plugins/authmysql/lang/en/settings.php
index dcdbbb16b..77e4806b9 100644
--- a/lib/plugins/authmysql/lang/en/settings.php
+++ b/lib/plugins/authmysql/lang/en/settings.php
@@ -4,6 +4,7 @@ $lang['server'] = 'Your MySQL server';
$lang['user'] = 'MySQL user name';
$lang['password'] = 'Password for above user';
$lang['database'] = 'Database to use';
+$lang['charset'] = 'Character set used in database';
$lang['debug'] = 'Display additional debug information';
$lang['forwardClearPass'] = 'Pass user passwords as cleartext to the SQL statements below, instead of using the passcrypt option';
$lang['TablesToLock'] = 'Comma separated list of tables that should be locked on write operations';
@@ -20,7 +21,7 @@ $lang['addUser'] = 'SQL statement to add a new user';
$lang['addGroup'] = 'SQL statement to add a new group';
$lang['addUserGroup'] = 'SQL statment to add a user to an existing group';
$lang['delGroup'] = 'SQL statement to remove a group';
-$lang['getUserID'] = 'SQL statement to get the primary ey of a user';
+$lang['getUserID'] = 'SQL statement to get the primary key of a user';
$lang['delUser'] = 'SQL statement to delete a user';
$lang['delUserRefs'] = 'SQL statement to remove a user from all groups';
$lang['updateUser'] = 'SQL statement to update a user profile';
diff --git a/lib/plugins/authmysql/lang/it/settings.php b/lib/plugins/authmysql/lang/it/settings.php
new file mode 100644
index 000000000..10ae72f87
--- /dev/null
+++ b/lib/plugins/authmysql/lang/it/settings.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Italian language file
+ *
+ */
diff --git a/lib/plugins/authmysql/lang/zh/settings.php b/lib/plugins/authmysql/lang/zh/settings.php
new file mode 100644
index 000000000..43cfbb3c0
--- /dev/null
+++ b/lib/plugins/authmysql/lang/zh/settings.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Chinese language file
+ *
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['server'] = '您的 MySQL 服务器';
+$lang['user'] = 'MySQL 用户名';
+$lang['password'] = '上述用户的密码';
+$lang['database'] = '使用的数据库';
+$lang['debug'] = '显示额外调试信息';
+$lang['forwardClearPass'] = '将用户密码以明文形式传送给下面的 SQL 语句,而不使用 passcrypt 密码加密选项';
+$lang['TablesToLock'] = '在写操作时需要锁定的数据表列表,以逗号分隔';
+$lang['checkPass'] = '检查密码的 SQL 语句';
+$lang['getUserInfo'] = '获取用户信息的 SQL 语句';
+$lang['getGroups'] = '或许用户的组成员身份的 SQL 语句';
+$lang['getUsers'] = '列出所有用户的 SQL 语句';
+$lang['FilterLogin'] = '根据登录名筛选用户的 SQL 子句';
+$lang['FilterName'] = '根据全名筛选用户的 SQL 子句';
+$lang['FilterEmail'] = '根据电子邮件地址筛选用户的 SQL 子句';
+$lang['FilterGroup'] = '根据组成员身份筛选用户的 SQL 子句';
+$lang['SortOrder'] = '对用户排序的 SQL 子句';
+$lang['addUser'] = '添加新用户的 SQL 语句';
+$lang['addGroup'] = '添加新组的 SQL 语句';
+$lang['addUserGroup'] = '将用户添加到现有组的 SQL 语句';
+$lang['delGroup'] = '删除组的 SQL 语句';
+$lang['getUserID'] = '获取用户主键的 SQL 语句';
+$lang['delUser'] = '删除用户的 SQL 语句';
+$lang['delUserRefs'] = '从所有组中删除一个用户的 SQL 语句';
+$lang['updateUser'] = '更新用户信息的 SQL 语句';
+$lang['UpdateLogin'] = '更新用户登录名的 Update 子句';
+$lang['UpdatePass'] = '更新用户密码的 Update 子句';
+$lang['UpdateEmail'] = '更新用户电子邮件地址的 Update 子句';
+$lang['UpdateName'] = '更新用户全名的 Update 子句';
+$lang['UpdateTarget'] = '更新时识别用户的 Limit 子句';
+$lang['delUserGroup'] = '从指定组删除用户的 SQL 语句';
+$lang['getGroupID'] = '获取指定组主键的 SQL 语句';
+$lang['debug_o_0'] = '无';
+$lang['debug_o_1'] = '仅在有错误时';
+$lang['debug_o_2'] = '所有 SQL 查询';
diff --git a/lib/plugins/authpgsql/conf/default.php b/lib/plugins/authpgsql/conf/default.php
index 401da80b7..7f78280f9 100644
--- a/lib/plugins/authpgsql/conf/default.php
+++ b/lib/plugins/authpgsql/conf/default.php
@@ -1,3 +1,33 @@
<?php
-$conf['port'] = 5432; \ No newline at end of file
+$conf['server'] = '';
+$conf['port'] = 5432;
+$conf['user'] = '';
+$conf['password'] = '';
+$conf['database'] = '';
+$conf['debug'] = 0;
+$conf['forwardClearPass'] = 0;
+$conf['checkPass'] = '';
+$conf['getUserInfo'] = '';
+$conf['getGroups'] = '';
+$conf['getUsers'] = '';
+$conf['FilterLogin'] = '';
+$conf['FilterName'] = '';
+$conf['FilterEmail'] = '';
+$conf['FilterGroup'] = '';
+$conf['SortOrder'] = '';
+$conf['addUser'] = '';
+$conf['addGroup'] = '';
+$conf['addUserGroup'] = '';
+$conf['delGroup'] = '';
+$conf['getUserID'] = '';
+$conf['delUser'] = '';
+$conf['delUserRefs'] = '';
+$conf['updateUser'] = '';
+$conf['UpdateLogin'] = '';
+$conf['UpdatePass'] = '';
+$conf['UpdateEmail'] = '';
+$conf['UpdateName'] = '';
+$conf['UpdateTarget'] = '';
+$conf['delUserGroup'] = '';
+$conf['getGroupID'] = ''; \ No newline at end of file
diff --git a/lib/plugins/authpgsql/lang/en/settings.php b/lib/plugins/authpgsql/lang/en/settings.php
index 74a1c1cc9..8c048fa0f 100644
--- a/lib/plugins/authpgsql/lang/en/settings.php
+++ b/lib/plugins/authpgsql/lang/en/settings.php
@@ -20,7 +20,7 @@ $lang['addUser'] = 'SQL statement to add a new user';
$lang['addGroup'] = 'SQL statement to add a new group';
$lang['addUserGroup'] = 'SQL statment to add a user to an existing group';
$lang['delGroup'] = 'SQL statement to remove a group';
-$lang['getUserID'] = 'SQL statement to get the primary ey of a user';
+$lang['getUserID'] = 'SQL statement to get the primary key of a user';
$lang['delUser'] = 'SQL statement to delete a user';
$lang['delUserRefs'] = 'SQL statement to remove a user from all groups';
$lang['updateUser'] = 'SQL statement to update a user profile';
diff --git a/lib/plugins/authpgsql/lang/it/settings.php b/lib/plugins/authpgsql/lang/it/settings.php
new file mode 100644
index 000000000..10ae72f87
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/it/settings.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Italian language file
+ *
+ */
diff --git a/lib/plugins/authpgsql/lang/zh/settings.php b/lib/plugins/authpgsql/lang/zh/settings.php
new file mode 100644
index 000000000..dc7223d89
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/zh/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Chinese language file
+ *
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['server'] = '您的 PostgreSQL 服务器';
+$lang['port'] = '您的 PostgreSQL 服务器端口';
+$lang['user'] = 'PostgreSQL 用户名';
+$lang['password'] = '上述用户的密码';
+$lang['database'] = '使用的数据库';
+$lang['debug'] = '显示额外调试信息';
+$lang['forwardClearPass'] = '将用户密码以明文形式传送给下面的 SQL 语句,而不使用 passcrypt 密码加密选项';
+$lang['checkPass'] = '检查密码的 SQL 语句';
+$lang['getUserInfo'] = '获取用户信息的 SQL 语句';
+$lang['getGroups'] = '获取用户的组成员身份的 SQL 语句';
+$lang['getUsers'] = '列出所有用户的 SQL 语句';
+$lang['FilterLogin'] = '根据登录名筛选用户的 SQL 子句';
+$lang['FilterName'] = '根据全名筛选用户的 SQL 子句';
+$lang['FilterEmail'] = '根据电子邮件地址筛选用户的 SQL 子句';
+$lang['FilterGroup'] = '根据组成员身份筛选用户的 SQL 子句';
+$lang['SortOrder'] = '对用户排序的 SQL 子句';
+$lang['addUser'] = '添加新用户的 SQL 语句';
+$lang['addGroup'] = '添加新组的 SQL 语句';
+$lang['addUserGroup'] = '将用户添加到现有组的 SQL 语句';
+$lang['delGroup'] = '删除组的 SQL 语句';
+$lang['getUserID'] = '获取用户主键的 SQL 语句';
+$lang['delUser'] = '删除用户的 SQL 语句';
+$lang['delUserRefs'] = '从所有组中删除一个用户的 SQL 语句';
+$lang['updateUser'] = '更新用户信息的 SQL 语句';
+$lang['UpdateLogin'] = '更新用户登录名的 Update 子句';
+$lang['UpdatePass'] = '更新用户密码的 Update 子句';
+$lang['UpdateEmail'] = '更新用户电子邮件地址的 Update 子句';
+$lang['UpdateName'] = '更新用户全名的 Update 子句';
+$lang['UpdateTarget'] = '更新时识别用户的 Limit 子句';
+$lang['delUserGroup'] = '从指定组删除用户的 SQL 语句';
+$lang['getGroupID'] = '获取指定组主键的 SQL 语句';
diff --git a/lib/plugins/config/lang/en/intro.txt b/lib/plugins/config/lang/en/intro.txt
index c83a80205..7cf46cee3 100644
--- a/lib/plugins/config/lang/en/intro.txt
+++ b/lib/plugins/config/lang/en/intro.txt
@@ -4,6 +4,6 @@ Use this page to control the settings of your DokuWiki installation. For help o
Settings shown with a light red background are protected and can not be altered with this plugin. Settings shown with a blue background are the default values and settings shown with a white background have been set locally for this particular installation. Both blue and white settings can be altered.
-Remember to press the **SAVE** button before leaving this page otherwise your changes will be lost.
+Remember to press the **Save** button before leaving this page otherwise your changes will be lost.
diff --git a/lib/plugins/config/lang/it/lang.php b/lib/plugins/config/lang/it/lang.php
index 751e5ee95..62dd00f0c 100644
--- a/lib/plugins/config/lang/it/lang.php
+++ b/lib/plugins/config/lang/it/lang.php
@@ -39,6 +39,7 @@ $lang['_editing'] = 'Impostazioni Modifica';
$lang['_links'] = 'Impostazioni Collegamenti';
$lang['_media'] = 'Impostazioni File';
$lang['_notifications'] = 'Impostazioni di notifica';
+$lang['_syndication'] = 'Impostazioni di collaborazione';
$lang['_advanced'] = 'Impostazioni Avanzate';
$lang['_network'] = 'Impostazioni Rete';
$lang['_plugin_sufix'] = 'Impostazioni Plugin';
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 5b81be782..8eb99284d 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -20,6 +20,7 @@ if (!class_exists('configuration')) {
var $_metadata = array(); // holds metadata describing the settings
var $setting = array(); // array of setting objects
var $locked = false; // configuration is considered locked if it can't be updated
+ var $show_disabled_plugins = false;
// configuration filenames
var $_default_files = array();
@@ -70,9 +71,14 @@ if (!class_exists('configuration')) {
foreach ($keys as $key) {
if (isset($this->_metadata[$key])) {
$class = $this->_metadata[$key][0];
- $class = ($class && class_exists('setting_'.$class)) ? 'setting_'.$class : 'setting';
- if ($class=='setting') {
- $this->setting[] = new setting_no_class($key,$param);
+
+ if($class && class_exists('setting_'.$class)){
+ $class = 'setting_'.$class;
+ } else {
+ if($class != '') {
+ $this->setting[] = new setting_no_class($key,$param);
+ }
+ $class = 'setting';
}
$param = $this->_metadata[$key];
@@ -262,7 +268,7 @@ if (!class_exists('configuration')) {
function get_plugin_list() {
if (is_null($this->_plugin_list)) {
- $list = plugin_list('',true); // all plugins, including disabled ones
+ $list = plugin_list('',$this->show_disabled_plugins);
// remove this plugin from the list
$idx = array_search('config',$list);
@@ -364,7 +370,7 @@ if (!class_exists('setting')) {
var $_cautionList = array(
'basedir' => 'danger', 'baseurl' => 'danger', 'savedir' => 'danger', 'cookiedir' => 'danger', 'useacl' => 'danger', 'authtype' => 'danger', 'superuser' => 'danger', 'userewrite' => 'danger',
'start' => 'warning', 'camelcase' => 'warning', 'deaccent' => 'warning', 'sepchar' => 'warning', 'compression' => 'warning', 'xsendfile' => 'warning', 'renderer_xhtml' => 'warning', 'fnencode' => 'warning',
- 'allowdebug' => 'security', 'htmlok' => 'security', 'phpok' => 'security', 'iexssprotect' => 'security', 'xmlrpc' => 'security', 'fullpath' => 'security'
+ 'allowdebug' => 'security', 'htmlok' => 'security', 'phpok' => 'security', 'iexssprotect' => 'security', 'remote' => 'security', 'fullpath' => 'security'
);
function setting($key, $params=null) {
@@ -387,10 +393,12 @@ if (!class_exists('setting')) {
}
/**
- * update setting with user provided value $input
- * if value fails error check, save it
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
*
- * @return boolean true if changed, false otherwise (incl. on error)
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (incl. on error)
*/
function update($input) {
if (is_null($input)) return false;
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 663eab9dd..22e76a013 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -70,14 +70,6 @@ $config['varname'] = 'conf'; // name of the config variable, sans $
// this value can be overriden when calling save_settings() method
$config['heading'] = 'Dokuwiki\'s Main Configuration File - Local Settings';
-/* DEPRECATED
-// ---------------[ setting files ]--------------------------------------
-// these values can be string expressions, they will be eval'd before use
-$file['local'] = "DOKU_CONF.'local.php'"; // mandatory (file doesn't have to exist)
-$file['default'] = "DOKU_CONF.'dokuwiki.php'"; // optional
-$file['protected'] = "DOKU_CONF.'local.protected.php'"; // optional
- */
-
// test value (FIXME, remove before publishing)
//$meta['test'] = array('multichoice','_choices' => array(''));
@@ -127,7 +119,7 @@ $meta['_authentication'] = array('fieldset');
$meta['useacl'] = array('onoff');
$meta['autopasswd'] = array('onoff');
$meta['authtype'] = array('authtype');
-$meta['passcrypt'] = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','lsmd5','crypt','mysql','my411','kmd5','pmd5','hmd5','mediawiki','bcrypt','sha512'));
+$meta['passcrypt'] = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','lsmd5','crypt','mysql','my411','kmd5','pmd5','hmd5','mediawiki','bcrypt','djangomd5','djangosha1','sha512'));
$meta['defaultgroup']= array('string');
$meta['superuser'] = array('string');
$meta['manager'] = array('string');
diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php
index 6998e1fbf..e4b97eb01 100644
--- a/lib/plugins/config/settings/extra.class.php
+++ b/lib/plugins/config/settings/extra.class.php
@@ -43,56 +43,50 @@ if (!class_exists('setting_authtype')) {
class setting_authtype extends setting_multichoice {
function initialize($default,$local,$protected) {
- global $plugin_controller;
+ global $plugin_controller;
- // retrive auth types provided by plugins
- foreach ($plugin_controller->getList('auth') as $plugin) {
- $this->_choices[] = $plugin;
- }
+ // retrieve auth types provided by plugins
+ foreach ($plugin_controller->getList('auth') as $plugin) {
+ $this->_choices[] = $plugin;
+ }
- parent::initialize($default,$local,$protected);
+ parent::initialize($default,$local,$protected);
}
function update($input) {
- global $plugin_controller;
-
- // is an update posible?
- $mayUpdate = parent::update($input);
-
- // is it an auth plugin?
- if (in_array($input, $plugin_controller->getList('auth'))) {
- // reject disabled plugins
- if ($plugin_controller->isdisabled($input)) {
- $this->_error = true;
- msg('Auth type ' . $input . ' is disabled.', -1);
- return false;
- }
-
- // load the plugin
- $auth_plugin = $plugin_controller->load('auth', $input);
-
- // @TODO: throw an error in plugin controller instead of returning null
- if (is_null($auth_plugin)) {
- $this->_error = true;
- msg('Cannot load Auth Plugin "' . $input . '"', -1);
- return false;
- }
-
- // verify proper instanciation (is this really a plugin?) @TODO use instanceof? impement interface?
- if (is_object($auth_plugin) && !method_exists($auth_plugin, 'getPluginName')) {
- $this->_error = true;
- msg('Cannot create Auth Plugin "' . $input . '"', -1);
- return false;
- }
- }
+ global $plugin_controller;
+
+ // is an update possible/requested?
+ $local = $this->_local; // save this, parent::update() may change it
+ if (!parent::update($input)) return false; // nothing changed or an error caught by parent
+ $this->_local = $local; // restore original, more error checking to come
+
+ // attempt to load the plugin
+ $auth_plugin = $plugin_controller->load('auth', $input);
+
+ // @TODO: throw an error in plugin controller instead of returning null
+ if (is_null($auth_plugin)) {
+ $this->_error = true;
+ msg('Cannot load Auth Plugin "' . $input . '"', -1);
+ return false;
+ }
+
+ // verify proper instantiation (is this really a plugin?) @TODO use instanceof? implement interface?
+ if (is_object($auth_plugin) && !method_exists($auth_plugin, 'getPluginName')) {
+ $this->_error = true;
+ msg('Cannot create Auth Plugin "' . $input . '"', -1);
+ return false;
+ }
// did we change the auth type? logout
global $conf;
if($conf['authtype'] != $input) {
- msg('Authentication system changed. Please re-login.');
- auth_logoff();
+ msg('Authentication system changed. Please re-login.');
+ auth_logoff();
}
- return true;
+
+ $this->_local = $input;
+ return true;
}
}
}
diff --git a/lib/plugins/plugin/admin.php b/lib/plugins/plugin/admin.php
index 8b1ee3c7d..de4de6aef 100644
--- a/lib/plugins/plugin/admin.php
+++ b/lib/plugins/plugin/admin.php
@@ -61,11 +61,12 @@ class admin_plugin_plugin extends DokuWiki_Admin_Plugin {
* handle user request
*/
function handle() {
+ global $INPUT;
// enable direct access to language strings
$this->setupLocale();
- $fn = $_REQUEST['fn'];
+ $fn = $INPUT->param('fn');
if (is_array($fn)) {
$this->cmd = key($fn);
$this->plugin = is_array($fn[$this->cmd]) ? key($fn[$this->cmd]) : null;
diff --git a/lib/plugins/plugin/lang/ar/lang.php b/lib/plugins/plugin/lang/ar/lang.php
index 8327e5ce3..a1a778131 100644
--- a/lib/plugins/plugin/lang/ar/lang.php
+++ b/lib/plugins/plugin/lang/ar/lang.php
@@ -50,4 +50,4 @@ $lang['enabled'] = 'الاضافة %s فُعلت. ';
$lang['notenabled'] = 'تعذر تفعيل الاضافة %s، تحقق من اذونات الملف.';
$lang['disabled'] = 'عُطلت الإضافة %s.';
$lang['notdisabled'] = 'تعذر تعطيل الإضافة %s، تحقق من اذونات الملف.';
-$lang['packageinstalled'] = 'حزمة الإضافة (%d plugin(s): %Xs) ثبتت بنجاج.';
+$lang['packageinstalled'] = 'حزمة الإضافة (%d plugin(s): %s) ثبتت بنجاج.';
diff --git a/lib/plugins/plugin/lang/hi/lang.php b/lib/plugins/plugin/lang/hi/lang.php
index ab29c6550..67b177256 100644
--- a/lib/plugins/plugin/lang/hi/lang.php
+++ b/lib/plugins/plugin/lang/hi/lang.php
@@ -6,7 +6,6 @@
* @author yndesai@gmail.com
*/
$lang['unknown'] = 'अज्ञात';
-$lang['deleted'] = 'मिटाया हुआ';
$lang['date'] = 'दिनांक:';
$lang['author'] = 'लेखक:';
$lang['error'] = 'अज्ञात त्रुटि हुइ';
diff --git a/lib/plugins/plugin/lang/pl/lang.php b/lib/plugins/plugin/lang/pl/lang.php
index 1d3bbbc03..faaa69630 100644
--- a/lib/plugins/plugin/lang/pl/lang.php
+++ b/lib/plugins/plugin/lang/pl/lang.php
@@ -60,4 +60,4 @@ $lang['enabled'] = 'Wtyczka %s włączona.';
$lang['notenabled'] = 'Nie udało się uruchomić wtyczki %s, sprawdź uprawnienia dostępu do plików.';
$lang['disabled'] = 'Wtyczka %s wyłączona.';
$lang['notdisabled'] = 'Nie udało się wyłączyć wtyczki %s, sprawdź uprawnienia dostępu do plików.';
-$lang['packageinstalled'] = 'Pakiet wtyczek (%d wtyczki:% s) zainstalowany pomyślnie.';
+$lang['packageinstalled'] = 'Pakiet wtyczek (%d wtyczki: %s) zainstalowany pomyślnie.';
diff --git a/lib/plugins/plugin/lang/zh-tw/lang.php b/lib/plugins/plugin/lang/zh-tw/lang.php
index 7b38a02c8..56149e79e 100644
--- a/lib/plugins/plugin/lang/zh-tw/lang.php
+++ b/lib/plugins/plugin/lang/zh-tw/lang.php
@@ -56,4 +56,4 @@ $lang['enabled'] = '附加元件 %s 已啟用。';
$lang['notenabled'] = '附加元件 %s 無法啟用,請檢查檔案權限。';
$lang['disabled'] = '附加元件 %s 已停用。';
$lang['notdisabled'] = '附加元件 %s 無法停用,請檢查檔案權限。';
-$lang['packageinstalled'] = '附加元件 (%d 附加元件%s: %s) 已安裝好。';
+$lang['packageinstalled'] = '附加元件 (%d 附加元件: %s) 已安裝好。';
diff --git a/lib/plugins/revert/admin.php b/lib/plugins/revert/admin.php
index fcdaa230d..847e38876 100644
--- a/lib/plugins/revert/admin.php
+++ b/lib/plugins/revert/admin.php
@@ -44,15 +44,16 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
* output appropriate html
*/
function html() {
+ global $INPUT;
echo $this->plugin_locale_xhtml('intro');
$this->_searchform();
- if(is_array($_REQUEST['revert']) && checkSecurityToken()){
- $this->_revert($_REQUEST['revert'],$_REQUEST['filter']);
- }elseif(isset($_REQUEST['filter'])){
- $this->_list($_REQUEST['filter']);
+ if(is_array($INPUT->param('revert')) && checkSecurityToken()){
+ $this->_revert($INPUT->arr('revert'),$INPUT->str('filter'));
+ }elseif($INPUT->has('filter')){
+ $this->_list($INPUT->str('filter'));
}
}
@@ -60,10 +61,10 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
* Display the form for searching spam pages
*/
function _searchform(){
- global $lang;
+ global $lang, $INPUT;
echo '<form action="" method="post"><div class="no">';
echo '<label>'.$this->getLang('filter').': </label>';
- echo '<input type="text" name="filter" class="edit" value="'.hsc($_REQUEST['filter']).'" />';
+ echo '<input type="text" name="filter" class="edit" value="'.hsc($INPUT->str('filter')).'" />';
echo ' <input type="submit" class="button" value="'.$lang['btn_search'].'" />';
echo ' <span>'.$this->getLang('note1').'</span>';
echo '</div></form><br /><br />';
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php
index cf8963e64..01f4a4cdb 100644
--- a/lib/plugins/usermanager/admin.php
+++ b/lib/plugins/usermanager/admin.php
@@ -73,11 +73,12 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
* handle user request
*/
function handle() {
+ global $INPUT;
if (is_null($this->_auth)) return false;
// extract the command and any specific parameters
// submit button name is of the form - fn[cmd][param(s)]
- $fn = $_REQUEST['fn'];
+ $fn = $INPUT->param('fn');
if (is_array($fn)) {
$cmd = key($fn);
@@ -88,8 +89,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
}
if ($cmd != "search") {
- if (!empty($_REQUEST['start']))
- $this->_start = $_REQUEST['start'];
+ $this->_start = $INPUT->int('start', 0);
$this->_filter = $this->_retrieveFilter();
}
@@ -345,6 +345,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
}
function _addUser(){
+ global $INPUT;
if (!checkSecurityToken()) return false;
if (!$this->_auth->canDo('addUser')) return false;
@@ -353,7 +354,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
if ($this->_auth->canDo('modPass')){
if (empty($pass)){
- if(!empty($_REQUEST['usernotify'])){
+ if($INPUT->has('usernotify')){
$pass = auth_pwgen();
} else {
msg($this->lang['add_fail'], -1);
@@ -393,7 +394,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
msg($this->lang['add_ok'], 1);
- if (!empty($_REQUEST['usernotify']) && $pass) {
+ if ($INPUT->has('usernotify') && $pass) {
$this->_notifyUser($user,$pass);
}
} else {
@@ -407,13 +408,13 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
* Delete user
*/
function _deleteUser(){
- global $conf;
+ global $conf, $INPUT;
if (!checkSecurityToken()) return false;
if (!$this->_auth->canDo('delUser')) return false;
- $selected = $_REQUEST['delete'];
- if (!is_array($selected) || empty($selected)) return false;
+ $selected = $INPUT->arr('delete');
+ if (empty($selected)) return false;
$selected = array_keys($selected);
if(in_array($_SERVER['REMOTE_USER'], $selected)) {
@@ -463,13 +464,13 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
* Modify user (modified user data has been recieved)
*/
function _modifyUser(){
- global $conf;
+ global $conf, $INPUT;
if (!checkSecurityToken()) return false;
if (!$this->_auth->canDo('UserMod')) return false;
// get currently valid user data
- $olduser = cleanID(preg_replace('/.*:/','',$_REQUEST['userid_old']));
+ $olduser = cleanID(preg_replace('/.*:/','',$INPUT->str('userid_old')));
$oldinfo = $this->_auth->getUserData($olduser);
// get new user data subject to change
@@ -494,7 +495,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
}
// generate password if left empty and notification is on
- if(!empty($_REQUEST['usernotify']) && empty($newpass)){
+ if($INPUT->has('usernotify') && empty($newpass)){
$newpass = auth_pwgen();
}
@@ -510,7 +511,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) {
msg($this->lang['update_ok'],1);
- if (!empty($_REQUEST['usernotify']) && $newpass) {
+ if ($INPUT->has('usernotify') && $newpass) {
$notify = empty($changes['user']) ? $olduser : $newuser;
$this->_notifyUser($notify,$newpass);
}
diff --git a/lib/plugins/usermanager/lang/ca-valencia/lang.php b/lib/plugins/usermanager/lang/ca-valencia/lang.php
index 5b0c628ed..c39c2f9b3 100644
--- a/lib/plugins/usermanager/lang/ca-valencia/lang.php
+++ b/lib/plugins/usermanager/lang/ca-valencia/lang.php
@@ -33,7 +33,7 @@ $lang['delete_ok'] = '%d usuaris borrats';
$lang['delete_fail'] = 'Erro borrant %d.';
$lang['update_ok'] = 'Usuari actualisat correctament';
$lang['update_fail'] = 'Erro actualisant usuari';
-$lang['update_exists'] = 'Erro canviant el nom de l\'usuari, el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
+$lang['update_exists'] = 'Erro canviant el nom de l\'usuari (%s), el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
$lang['start'] = 'primera';
$lang['prev'] = 'anterior';
$lang['next'] = 'següent';
diff --git a/lib/scripts/qsearch.js b/lib/scripts/qsearch.js
index 0c3609ada..e5cc73b49 100644
--- a/lib/scripts/qsearch.js
+++ b/lib/scripts/qsearch.js
@@ -12,6 +12,7 @@ var dw_qsearch = {
$inObj: null,
$outObj: null,
timer: null,
+ curRequest: null,
/**
* initialize the quick search
@@ -35,12 +36,16 @@ var dw_qsearch = {
// attach eventhandler to search field
do_qsearch = function () {
+ // abort any previous request
+ if (dw_qsearch.curRequest != null) {
+ dw_qsearch.curRequest.abort();
+ }
var value = dw_qsearch.$inObj.val();
if (value === '') {
dw_qsearch.clear_results();
return;
}
- jQuery.post(
+ dw_qsearch.curRequest = jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'qsearch',
@@ -84,6 +89,8 @@ var dw_qsearch = {
onCompletion: function(data) {
var max, $links, too_big;
+ dw_qsearch.curRequest = null;
+
if (data === '') {
dw_qsearch.clear_results();
return;
diff --git a/lib/scripts/toolbar.js b/lib/scripts/toolbar.js
index 059a4ba5c..6d75215e0 100644
--- a/lib/scripts/toolbar.js
+++ b/lib/scripts/toolbar.js
@@ -72,7 +72,7 @@ function initToolbar(tbid,edid,tb, allowblock){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function tb_format(btn, props, edid) {
- var sample = props.title || props.sample;
+ var sample = props.sample || props.title;
insertTags(edid,
fixtxt(props.open),
fixtxt(props.close),
diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css
index 3405ec258..4772fd2a5 100644
--- a/lib/tpl/default/design.css
+++ b/lib/tpl/default/design.css
@@ -632,7 +632,6 @@ div.dokuwiki td.diff-blockheader {
div.dokuwiki table.diff th {
border-bottom: 1px solid __border__;
font-size: 110%;
- width: 50%;
font-weight: normal;
text-align: left;
}
@@ -650,6 +649,17 @@ div.dokuwiki table.diff th span.sum {
div.dokuwiki table.diff th.minor {
font-style: italic;
}
+.dokuwiki table.diff_sidebyside th {
+ width: 50%;
+}
+.dokuwiki table.diff .diff-lineheader {
+ width: .7em;
+ text-align: right;
+}
+[dir=rtl] .dokuwiki table.diff .diff-lineheader {
+ text-align: left;
+}
+.dokuwiki table.diff .diff-lineheader,
div.dokuwiki table.diff td {
font-family: monospace;
font-size: 100%;
diff --git a/lib/tpl/dokuwiki/css/_diff.css b/lib/tpl/dokuwiki/css/_diff.css
index 62f831213..58c24b5c7 100644
--- a/lib/tpl/dokuwiki/css/_diff.css
+++ b/lib/tpl/dokuwiki/css/_diff.css
@@ -21,7 +21,6 @@
.dokuwiki table.diff th {
border-bottom: 1px solid __border__;
font-size: 110%;
- width: 50%;
font-weight: normal;
}
.dokuwiki table.diff th a {
@@ -37,8 +36,19 @@
.dokuwiki table.diff th.minor {
color: #999;
}
+.dokuwiki table.diff_sidebyside th {
+ width: 50%;
+}
/* table body */
+.dokuwiki table.diff .diff-lineheader {
+ width: .7em;
+ text-align: right;
+}
+[dir=rtl] .dokuwiki table.diff .diff-lineheader {
+ text-align: left;
+}
+.dokuwiki table.diff .diff-lineheader,
.dokuwiki table.diff td {
font-family: Consolas, "Andale Mono WT", "Andale Mono", "Bitstream Vera Sans Mono", "Nimbus Mono L", Monaco, "Courier New", monospace;
}
diff --git a/lib/tpl/dokuwiki/css/design.css b/lib/tpl/dokuwiki/css/design.css
index 2c2109228..2eb357a59 100644
--- a/lib/tpl/dokuwiki/css/design.css
+++ b/lib/tpl/dokuwiki/css/design.css
@@ -205,6 +205,7 @@
background-position: 5px 0;
margin-left: 0;
margin-right: -20px;
+ position: relative;
}
#dokuwiki__sitetools ul {
diff --git a/lib/tpl/dokuwiki/css/mobile.css b/lib/tpl/dokuwiki/css/mobile.css
index 88333c012..e1d4dda72 100644
--- a/lib/tpl/dokuwiki/css/mobile.css
+++ b/lib/tpl/dokuwiki/css/mobile.css
@@ -89,6 +89,10 @@
.dokuwiki div.page {
padding: 1em;
}
+/* enable horizontal scrolling in media manager */
+.mode_media div.page {
+ overflow: auto;
+}
/* _edit */
.dokuwiki div.section_highlight {
diff --git a/lib/tpl/dokuwiki/css/pagetools.css b/lib/tpl/dokuwiki/css/pagetools.css
index 60dc43fb1..0c31e283f 100644
--- a/lib/tpl/dokuwiki/css/pagetools.css
+++ b/lib/tpl/dokuwiki/css/pagetools.css
@@ -222,7 +222,7 @@
[dir=rtl] #dokuwiki__pagetools ul li a.revs:hover,
[dir=rtl] #dokuwiki__pagetools ul li a.revs:active,
[dir=rtl] #dokuwiki__pagetools ul li a.revs:focus,
-.mode_revisions [dir=rtl] #dokuwiki__pagetools ul li a.revs {
+[dir=rtl] .mode_revisions #dokuwiki__pagetools ul li a.revs {
background-position: left -585px;
}
@@ -241,7 +241,7 @@
[dir=rtl] #dokuwiki__pagetools ul li a.backlink:hover,
[dir=rtl] #dokuwiki__pagetools ul li a.backlink:active,
[dir=rtl] #dokuwiki__pagetools ul li a.backlink:focus,
-.mode_backlink [dir=rtl] #dokuwiki__pagetools ul li a.backlink {
+[dir=rtl] .mode_backlink #dokuwiki__pagetools ul li a.backlink {
background-position: left -675px;
}
@@ -277,7 +277,7 @@
[dir=rtl] #dokuwiki__pagetools ul li a.revert:hover,
[dir=rtl] #dokuwiki__pagetools ul li a.revert:active,
[dir=rtl] #dokuwiki__pagetools ul li a.revert:focus,
-.mode_revert [dir=rtl] #dokuwiki__pagetools ul li a.revert {
+[dir=rtl] .mode_revert #dokuwiki__pagetools ul li a.revert {
background-position: left -495px;
}
@@ -296,7 +296,7 @@
[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:hover,
[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:active,
[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:focus,
-.mode_subscribe [dir=rtl] #dokuwiki__pagetools ul li a.subscribe {
+[dir=rtl] .mode_subscribe #dokuwiki__pagetools ul li a.subscribe {
background-position: left -765px;
}
diff --git a/lib/tpl/dokuwiki/script.js b/lib/tpl/dokuwiki/script.js
index 3ed8dbabe..4eb92a417 100644
--- a/lib/tpl/dokuwiki/script.js
+++ b/lib/tpl/dokuwiki/script.js
@@ -1,11 +1,10 @@
/**
* We handle several device classes based on browser width.
- * see http://twitter.github.com/bootstrap/scaffolding.html#responsive
*
- * - desktop: 980+
- * - mobile: < 980
- * - tablet 481 - 979 (ostensibly for tablets in portrait mode)
- * - phone <= 480
+ * - desktop: > __tablet_width__ (as set in style.ini)
+ * - mobile:
+ * - tablet <= __tablet_width__
+ * - phone <= __phone_width__
*/
var device_class = ''; // not yet known
var device_classes = 'desktop mobile tablet phone';
@@ -13,7 +12,7 @@ var device_classes = 'desktop mobile tablet phone';
function tpl_dokuwiki_mobile(){
// the z-index in mobile.css is (mis-)used purely for detecting the screen mode here
- var screen_mode = jQuery('#screen__mode').css('z-index');
+ var screen_mode = jQuery('#screen__mode').css('z-index') + '';
// determine our device pattern
// TODO: consider moving into dokuwiki core