summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2012-04-15 13:45:45 +0200
committerAndreas Gohr <andi@splitbrain.org>2012-04-15 13:45:45 +0200
commitae7c596cf4e6a0a09ebcf01fe8ae98789360c5be (patch)
treef156252e404e9893922cb5d984fdc646644b6c17 /inc
parentf41c79d730286e8e8c95deb88a4c876e08e278a2 (diff)
parent026b314868ee80aca644bf4107f78d8e8052b43e (diff)
downloadrpg-ae7c596cf4e6a0a09ebcf01fe8ae98789360c5be.tar.gz
rpg-ae7c596cf4e6a0a09ebcf01fe8ae98789360c5be.tar.bz2
Merge branch 'master' into htmlmail
* master: (382 commits) Romanian language update Marathi language update Arabic Language Update when there's not enough space for images, make sure they stay proportional (might be FS#2480) added minimal RTL print styles (part of FS#2185) moved plugins' rtl.css to their style.css counterpart (part of FS#2185) removed all browser-specific gradients as the recently (in 42ff6730) introduced svg makes them unnecessary removed comments from accidentally commented lines in tpl_includeFile() removed obsolete template file added tpl_includeFile() to core Make getTitle method in remote interface public Changed an error code in XML-RPC interface. This error hasn't anything to do with the rest of the -32600 errors. BG: language update Korean language update fixed performance issues with gradient in Firefox (which also added gradient support for IE9) (FS#2447) deleted very old (and unused) images added accidentally removed '<?php' back in (was in 57fc5edd) wrapped X-UA-Compatible meta tag with conditional comments added explanation to todo in _forms.css removed problematic 'overflow: hidden' from lists again ('unfixes' FS#1950) ... Conflicts: inc/auth.php inc/load.php
Diffstat (limited to 'inc')
-rw-r--r--inc/DifferenceEngine.php10
-rw-r--r--inc/HTTPClient.php24
-rw-r--r--inc/IXR_Library.php11
-rw-r--r--inc/PassHash.class.php55
-rw-r--r--inc/RemoteAPICore.php768
-rw-r--r--inc/SafeFN.class.php23
-rw-r--r--inc/Sitemapper.php38
-rw-r--r--inc/TarLib.class.php4
-rw-r--r--inc/adLDAP.php20
-rw-r--r--inc/auth.php73
-rw-r--r--inc/auth/ad.class.php88
-rw-r--r--inc/auth/basic.class.php728
-rw-r--r--inc/auth/ldap.class.php5
-rw-r--r--inc/auth/mysql.class.php932
-rw-r--r--inc/auth/pgsql.class.php417
-rw-r--r--inc/auth/plain.class.php282
-rw-r--r--inc/changelog.php12
-rw-r--r--inc/cliopts.php10
-rw-r--r--inc/common.php18
-rw-r--r--inc/config_cascade.php2
-rw-r--r--inc/html.php53
-rw-r--r--inc/httputils.php8
-rw-r--r--inc/indexer.php28
-rw-r--r--inc/init.php38
-rw-r--r--inc/io.php2
-rw-r--r--inc/lang/af/lang.php4
-rw-r--r--inc/lang/ar/lang.php71
-rw-r--r--inc/lang/ar/resetpwd.txt3
-rw-r--r--inc/lang/az/lang.php17
-rw-r--r--inc/lang/bg/lang.php92
-rw-r--r--inc/lang/bg/resetpwd.txt4
-rw-r--r--inc/lang/ca-valencia/lang.php17
-rw-r--r--inc/lang/ca/lang.php17
-rw-r--r--inc/lang/cs/lang.php92
-rw-r--r--inc/lang/da/lang.php17
-rw-r--r--inc/lang/de-informal/lang.php23
-rw-r--r--inc/lang/de/lang.php31
-rw-r--r--inc/lang/de/resetpwd.txt4
-rw-r--r--inc/lang/el/lang.php17
-rw-r--r--inc/lang/en/lang.php28
-rw-r--r--inc/lang/en/resetpwd.txt4
-rw-r--r--inc/lang/eo/lang.php68
-rw-r--r--inc/lang/es/lang.php21
-rw-r--r--inc/lang/et/lang.php11
-rw-r--r--inc/lang/eu/lang.php17
-rw-r--r--inc/lang/fa/lang.php17
-rw-r--r--inc/lang/fi/lang.php39
-rw-r--r--inc/lang/fo/lang.php2
-rw-r--r--inc/lang/fr/index.txt2
-rw-r--r--inc/lang/fr/lang.php36
-rw-r--r--inc/lang/gl/lang.php108
-rw-r--r--inc/lang/he/lang.php17
-rw-r--r--inc/lang/hi/lang.php8
-rw-r--r--inc/lang/hr/lang.php17
-rw-r--r--inc/lang/hu/lang.php17
-rw-r--r--inc/lang/ia/lang.php17
-rw-r--r--inc/lang/id-ni/lang.php2
-rw-r--r--inc/lang/id/lang.php13
-rw-r--r--inc/lang/is/lang.php9
-rw-r--r--inc/lang/it/lang.php23
-rw-r--r--inc/lang/ja/index.txt2
-rw-r--r--inc/lang/ja/lang.php75
-rw-r--r--inc/lang/ja/resetpwd.txt3
-rw-r--r--inc/lang/kk/lang.php4
-rw-r--r--inc/lang/km/lang.php2
-rw-r--r--inc/lang/ko/lang.php74
-rw-r--r--inc/lang/ko/resetpwd.txt3
-rw-r--r--inc/lang/la/lang.php19
-rw-r--r--inc/lang/lb/lang.php19
-rw-r--r--inc/lang/lt/lang.php13
-rw-r--r--inc/lang/lv/lang.php40
-rw-r--r--inc/lang/mk/lang.php16
-rw-r--r--inc/lang/mr/lang.php97
-rw-r--r--inc/lang/ms/lang.php97
-rw-r--r--inc/lang/ne/lang.php15
-rw-r--r--inc/lang/nl/lang.php27
-rw-r--r--inc/lang/no/admin.txt2
-rw-r--r--inc/lang/no/adminplugins.txt2
-rw-r--r--inc/lang/no/conflict.txt2
-rw-r--r--inc/lang/no/denied.txt2
-rw-r--r--inc/lang/no/lang.php68
-rw-r--r--inc/lang/no/newpage.txt2
-rw-r--r--inc/lang/no/pwconfirm.txt2
-rw-r--r--inc/lang/no/recent.txt2
-rw-r--r--inc/lang/no/register.txt2
-rw-r--r--inc/lang/no/showrev.txt2
-rw-r--r--inc/lang/no/subscr_form.txt2
-rw-r--r--inc/lang/pl/lang.php69
-rw-r--r--inc/lang/pt-br/lang.php21
-rw-r--r--inc/lang/pt/lang.php19
-rw-r--r--inc/lang/ro/lang.php27
-rw-r--r--inc/lang/ro/resetpwd.txt3
-rw-r--r--inc/lang/ru/lang.php121
-rw-r--r--inc/lang/sk/lang.php25
-rw-r--r--inc/lang/sl/lang.php76
-rw-r--r--inc/lang/sl/locked.txt2
-rw-r--r--inc/lang/sl/stopwords.txt6
-rw-r--r--inc/lang/sq/lang.php17
-rw-r--r--inc/lang/sr/lang.php17
-rw-r--r--inc/lang/sv/lang.php17
-rw-r--r--inc/lang/th/lang.php17
-rw-r--r--inc/lang/tr/lang.php15
-rw-r--r--inc/lang/uk/lang.php17
-rw-r--r--inc/lang/zh-tw/lang.php63
-rw-r--r--inc/lang/zh/lang.php33
-rw-r--r--inc/load.php5
-rw-r--r--inc/mail.php6
-rw-r--r--inc/media.php44
-rw-r--r--inc/pageutils.php8
-rw-r--r--inc/parser/metadata.php8
-rw-r--r--inc/parser/parser.php2
-rw-r--r--inc/parser/xhtml.php6
-rw-r--r--inc/plugincontroller.class.php1
-rw-r--r--inc/remote.php253
-rw-r--r--inc/template.php188
-rw-r--r--inc/toolbar.php2
-rw-r--r--inc/utf8.php2
117 files changed, 3669 insertions, 2549 deletions
diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php
index 52dca32c8..0a7ce8e7c 100644
--- a/inc/DifferenceEngine.php
+++ b/inc/DifferenceEngine.php
@@ -29,7 +29,7 @@ class _DiffOp {
class _DiffOp_Copy extends _DiffOp {
var $type = 'copy';
-
+
function __construct($orig, $closing = false) {
if (!is_array($closing))
$closing = $orig;
@@ -44,7 +44,7 @@ class _DiffOp_Copy extends _DiffOp {
class _DiffOp_Delete extends _DiffOp {
var $type = 'delete';
-
+
function __construct($lines) {
$this->orig = $lines;
$this->closing = false;
@@ -57,7 +57,7 @@ class _DiffOp_Delete extends _DiffOp {
class _DiffOp_Add extends _DiffOp {
var $type = 'add';
-
+
function __construct($lines) {
$this->closing = $lines;
$this->orig = false;
@@ -70,7 +70,7 @@ class _DiffOp_Add extends _DiffOp {
class _DiffOp_Change extends _DiffOp {
var $type = 'change';
-
+
function __construct($orig, $closing) {
$this->orig = $orig;
$this->closing = $closing;
@@ -957,7 +957,7 @@ class WordLevelDiff extends MappedDiff {
}
class InlineWordLevelDiff extends MappedDiff {
-
+
function __construct($orig_lines, $closing_lines) {
list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php
index fdf95d113..26bee52a7 100644
--- a/inc/HTTPClient.php
+++ b/inc/HTTPClient.php
@@ -22,11 +22,11 @@ class DokuHTTPClient extends HTTPClient {
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
- function DokuHTTPClient(){
+ function __construct(){
global $conf;
// call parent constructor
- $this->HTTPClient();
+ parent::__construct();
// set some values from the config
$this->proxy_host = $conf['proxy']['host'];
@@ -121,7 +121,7 @@ class HTTPClient {
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
- function HTTPClient(){
+ function __construct(){
$this->agent = 'Mozilla/4.0 (compatible; DokuWiki HTTP Client; '.PHP_OS.')';
$this->timeout = 15;
$this->cookies = array();
@@ -338,7 +338,10 @@ class HTTPClient {
}
// wait for stream ready or timeout (1sec)
- if(stream_select($sel_r,$sel_w,$sel_e,1) === false) continue;
+ if(@stream_select($sel_r,$sel_w,$sel_e,1) === false){
+ usleep(1000);
+ continue;
+ }
// write to stream
$ret = fwrite($socket, substr($request,$written,4096));
@@ -577,13 +580,14 @@ class HTTPClient {
*/
function _parseHeaders($string){
$headers = array();
- if (!preg_match_all('/^\s*([\w-]+)\s*:\s*([\S \t]+)\s*$/m', $string,
- $matches, PREG_SET_ORDER)) {
- return $headers;
- }
- foreach($matches as $match){
- list(, $key, $val) = $match;
+ $lines = explode("\n",$string);
+ array_shift($lines); //skip first line (status)
+ foreach($lines as $line){
+ list($key, $val) = explode(':',$line,2);
+ $key = trim($key);
+ $val = trim($val);
$key = strtolower($key);
+ if(!$key) continue;
if(isset($headers[$key])){
if(is_array($headers[$key])){
$headers[$key][] = $val;
diff --git a/inc/IXR_Library.php b/inc/IXR_Library.php
index c8255e6d9..979dc4d16 100644
--- a/inc/IXR_Library.php
+++ b/inc/IXR_Library.php
@@ -302,11 +302,12 @@ class IXR_Server {
}
function serve($data = false) {
if (!$data) {
- global $HTTP_RAW_POST_DATA;
- if (!$HTTP_RAW_POST_DATA) {
+
+ $postData = trim(http_get_raw_post_data());
+ if (!$postData) {
die('XML-RPC server accepts POST requests only.');
}
- $data = $HTTP_RAW_POST_DATA;
+ $data = $postData;
}
$this->message = new IXR_Message($data);
if (!$this->message->parse()) {
@@ -439,7 +440,7 @@ EOD;
$method = $call['methodName'];
$params = $call['params'];
if ($method == 'system.multicall') {
- $result = new IXR_Error(-32600, 'Recursive calls to system.multicall are forbidden');
+ $result = new IXR_Error(-32800, 'Recursive calls to system.multicall are forbidden');
} else {
$result = $this->call($method, $params);
}
@@ -501,7 +502,7 @@ class IXR_Client extends DokuHTTPClient {
var $xmlerror = false;
function IXR_Client($server, $path = false, $port = 80) {
- $this->DokuHTTPClient();
+ parent::__construct();
if (!$path) {
// Assume we have been given a URL instead
$this->posturl = $server;
diff --git a/inc/PassHash.class.php b/inc/PassHash.class.php
index 31493c022..3fb1349d2 100644
--- a/inc/PassHash.class.php
+++ b/inc/PassHash.class.php
@@ -47,9 +47,15 @@ class PassHash {
}elseif(preg_match('/^md5\$(.{5})\$/',$hash,$m)){
$method = 'djangomd5';
$salt = $m[1];
+ }elseif(preg_match('/^\$2a\$(.{2})\$/',$hash,$m)){
+ $method = 'bcrypt';
+ $salt = $hash;
}elseif(substr($hash,0,6) == '{SSHA}'){
$method = 'ssha';
$salt = substr(base64_decode(substr($hash, 6)),20);
+ }elseif(substr($hash,0,6) == '{SMD5}'){
+ $method = 'lsmd5';
+ $salt = substr(base64_decode(substr($hash, 6)),16);
}elseif($len == 32){
$method = 'md5';
}elseif($len == 40){
@@ -82,7 +88,9 @@ class PassHash {
public function gen_salt($len=32){
$salt = '';
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- for($i=0;$i<$len;$i++) $salt .= $chars[mt_rand(0,61)];
+ for($i=0; $i<$len; $i++){
+ $salt .= $chars[mt_rand(0,61)];
+ }
return $salt;
}
@@ -130,6 +138,20 @@ class PassHash {
}
}
+
+ /**
+ * Password hashing method 'lsmd5'
+ *
+ * Uses salted MD5 hashs. Salt is 8 bytes long.
+ *
+ * This is the format used by LDAP.
+ */
+ public function hash_lsmd5($clear, $salt=null){
+ $this->init_salt($salt,8);
+ return "{SMD5}".base64_encode(md5($clear.$salt, true).$salt);
+ }
+
+
/**
* Password hashing method 'apr1'
*
@@ -379,4 +401,35 @@ class PassHash {
return 'md5$'.$salt.'$'.md5($salt.$clear);
}
+
+ /**
+ * Passwordhashing method 'bcrypt'
+ *
+ * Uses a modified blowfish algorithm called eksblowfish
+ * This method works on PHP 5.3+ only and will throw an exception
+ * if the needed crypt support isn't available
+ *
+ * A full hash should be given as salt (starting with $a2$) or this
+ * will break. When no salt is given, the iteration count can be set
+ * through the $compute variable.
+ *
+ * @param string $clear - the clear text to hash
+ * @param string $salt - the salt to use, null for random
+ * @param int $compute - the iteration count (between 4 and 31)
+ * @returns string - hashed password
+ */
+ public function hash_bcrypt($clear, $salt=null, $compute=8){
+ if(!defined('CRYPT_BLOWFISH') || CRYPT_BLOWFISH != 1){
+ throw new Exception('This PHP installation has no bcrypt support');
+ }
+
+ if(is_null($salt)){
+ if($compute < 4 || $compute > 31) $compute = 8;
+ $salt = '$2a$'.str_pad($compute, 2, '0', STR_PAD_LEFT).'$'.
+ $this->gen_salt(22);
+ }
+
+ return crypt($clear, $salt);
+ }
+
}
diff --git a/inc/RemoteAPICore.php b/inc/RemoteAPICore.php
new file mode 100644
index 000000000..546832100
--- /dev/null
+++ b/inc/RemoteAPICore.php
@@ -0,0 +1,768 @@
+<?php
+
+/**
+ * Increased whenever the API is changed
+ */
+define('DOKU_API_VERSION', 7);
+
+class RemoteAPICore {
+
+ private $api;
+
+ public function __construct(RemoteAPI $api) {
+ $this->api = $api;
+ }
+
+ function __getRemoteInfo() {
+ return array(
+ 'dokuwiki.getVersion' => array(
+ 'args' => array(),
+ 'return' => 'string',
+ 'doc' => 'Returns the running DokuWiki version.'
+ ), 'dokuwiki.login' => array(
+ 'args' => array('string', 'string'),
+ 'return' => 'int',
+ 'doc' => 'Tries to login with the given credentials and sets auth cookies.',
+ 'public' => '1'
+ ), 'dokuwiki.getPagelist' => array(
+ 'args' => array('string', 'array'),
+ 'return' => 'array',
+ 'doc' => 'List all pages within the given namespace.',
+ 'name' => 'readNamespace'
+ ), 'dokuwiki.search' => array(
+ 'args' => array('string'),
+ 'return' => 'array',
+ 'doc' => 'Perform a fulltext search and return a list of matching pages'
+ ), 'dokuwiki.getTime' => array(
+ 'args' => array(),
+ 'return' => 'int',
+ 'doc' => 'Returns the current time at the remote wiki server as Unix timestamp.',
+ ), 'dokuwiki.setLocks' => array(
+ 'args' => array('array'),
+ 'return' => 'array',
+ 'doc' => 'Lock or unlock pages.'
+ ), 'dokuwiki.getTitle' => array(
+ 'args' => array(),
+ 'return' => 'string',
+ 'doc' => 'Returns the wiki title.',
+ 'public' => '1'
+ ), 'dokuwiki.appendPage' => array(
+ 'args' => array('string', 'string', 'array'),
+ 'return' => 'int',
+ 'doc' => 'Append text to a wiki page.'
+ ), 'wiki.getPage' => array(
+ 'args' => array('string'),
+ 'return' => 'string',
+ 'doc' => 'Get the raw Wiki text of page, latest version.',
+ 'name' => 'rawPage',
+ ), 'wiki.getPageVersion' => array(
+ 'args' => array('string', 'int'),
+ 'name' => 'rawPage',
+ 'return' => 'string',
+ 'doc' => 'Return a raw wiki page'
+ ), 'wiki.getPageHTML' => array(
+ 'args' => array('string'),
+ 'return' => 'string',
+ 'doc' => 'Return page in rendered HTML, latest version.',
+ 'name' => 'htmlPage'
+ ), 'wiki.getPageHTMLVersion' => array(
+ 'args' => array('string', 'int'),
+ 'return' => 'string',
+ 'doc' => 'Return page in rendered HTML.',
+ 'name' => 'htmlPage'
+ ), 'wiki.getAllPages' => array(
+ 'args' => array(),
+ 'return' => 'array',
+ 'doc' => 'Returns a list of all pages. The result is an array of utf8 pagenames.',
+ 'name' => 'listPages'
+ ), 'wiki.getAttachments' => array(
+ 'args' => array('string', 'array'),
+ 'return' => 'array',
+ 'doc' => 'Returns a list of all media files.',
+ 'name' => 'listAttachments'
+ ), 'wiki.getBackLinks' => array(
+ 'args' => array('string'),
+ 'return' => 'array',
+ 'doc' => 'Returns the pages that link to this page.',
+ 'name' => 'listBackLinks'
+ ), 'wiki.getPageInfo' => array(
+ 'args' => array('string'),
+ 'return' => 'array',
+ 'doc' => 'Returns a struct with infos about the page.',
+ 'name' => 'pageInfo'
+ ), 'wiki.getPageInfoVersion' => array(
+ 'args' => array('string', 'int'),
+ 'return' => 'array',
+ 'doc' => 'Returns a struct with infos about the page.',
+ 'name' => 'pageInfo'
+ ), 'wiki.getPageVersions' => array(
+ 'args' => array('string', 'int'),
+ 'return' => 'array',
+ 'doc' => 'Returns the available revisions of the page.',
+ 'name' => 'pageVersions'
+ ), 'wiki.putPage' => array(
+ 'args' => array('string', 'string', 'array'),
+ 'return' => 'int',
+ 'doc' => 'Saves a wiki page.'
+ ), 'wiki.listLinks' => array(
+ 'args' => array('string'),
+ 'return' => 'array',
+ 'doc' => 'Lists all links contained in a wiki page.'
+ ), 'wiki.getRecentChanges' => array(
+ 'args' => array('int'),
+ 'return' => 'array',
+ 'Returns a struct about all recent changes since given timestamp.'
+ ), 'wiki.getRecentMediaChanges' => array(
+ 'args' => array('int'),
+ 'return' => 'array',
+ 'Returns a struct about all recent media changes since given timestamp.'
+ ), 'wiki.aclCheck' => array(
+ 'args' => array('string'),
+ 'return' => 'int',
+ 'doc' => 'Returns the permissions of a given wiki page.'
+ ), 'wiki.putAttachment' => array(
+ 'args' => array('string', 'file', 'array'),
+ 'return' => 'array',
+ 'doc' => 'Upload a file to the wiki.'
+ ), 'wiki.deleteAttachment' => array(
+ 'args' => array('string'),
+ 'return' => 'int',
+ 'doc' => 'Delete a file from the wiki.'
+ ), 'wiki.getAttachment' => array(
+ 'args' => array('string'),
+ 'doc' => 'Return a media file',
+ 'return' => 'file',
+ 'name' => 'getAttachment',
+ ), 'wiki.getAttachmentInfo' => array(
+ 'args' => array('string'),
+ 'return' => 'array',
+ 'doc' => 'Returns a struct with infos about the attachment.'
+ ), 'dokuwiki.getXMLRPCAPIVersion' => array(
+ 'args' => array(),
+ 'name' => 'getAPIVersion',
+ 'return' => 'int',
+ 'doc' => 'Returns the XMLRPC API version.',
+ 'public' => '1',
+ ), 'wiki.getRPCVersionSupported' => array(
+ 'args' => array(),
+ 'name' => 'wiki_RPCVersion',
+ 'return' => 'int',
+ 'doc' => 'Returns 2 with the supported RPC API version.',
+ 'public' => '1'
+ ),
+
+ );
+ }
+
+ function getVersion() {
+ return getVersion();
+ }
+
+ function getTime() {
+ return time();
+ }
+
+ /**
+ * Return a raw wiki page
+ * @param string $id wiki page id
+ * @param string $rev revision number of the page
+ * @return page text.
+ */
+ function rawPage($id,$rev=''){
+ $id = cleanID($id);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ throw new RemoteAccessDeniedException('You are not allowed to read this file', 111);
+ }
+ $text = rawWiki($id,$rev);
+ if(!$text) {
+ return pageTemplate($id);
+ } else {
+ return $text;
+ }
+ }
+
+ /**
+ * Return a media file
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ * @param string $id file id
+ * @return media file
+ */
+ function getAttachment($id){
+ $id = cleanID($id);
+ if (auth_quickaclcheck(getNS($id).':*') < AUTH_READ) {
+ throw new RemoteAccessDeniedException('You are not allowed to read this file', 211);
+ }
+
+ $file = mediaFN($id);
+ if (!@ file_exists($file)) {
+ throw new RemoteException('The requested file does not exist', 221);
+ }
+
+ $data = io_readFile($file, false);
+ return $this->api->toFile($data);
+ }
+
+ /**
+ * Return info about a media file
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function getAttachmentInfo($id){
+ $id = cleanID($id);
+ $info = array(
+ 'lastModified' => $this->api->toDate(0),
+ 'size' => 0,
+ );
+
+ $file = mediaFN($id);
+ if ((auth_quickaclcheck(getNS($id).':*') >= AUTH_READ) && file_exists($file)){
+ $info['lastModified'] = $this->api->toDate(filemtime($file));
+ $info['size'] = filesize($file);
+ }
+
+ return $info;
+ }
+
+ /**
+ * Return a wiki page rendered to html
+ */
+ function htmlPage($id,$rev=''){
+ $id = cleanID($id);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ throw new RemoteAccessDeniedException('You are not allowed to read this page', 111);
+ }
+ return p_wiki_xhtml($id,$rev,false);
+ }
+
+ /**
+ * List all pages - we use the indexer list here
+ */
+ function listPages(){
+ $list = array();
+ $pages = idx_get_indexer()->getPages();
+ $pages = array_filter(array_filter($pages,'isVisiblePage'),'page_exists');
+
+ foreach(array_keys($pages) as $idx) {
+ $perm = auth_quickaclcheck($pages[$idx]);
+ if($perm < AUTH_READ) {
+ continue;
+ }
+ $page = array();
+ $page['id'] = trim($pages[$idx]);
+ $page['perms'] = $perm;
+ $page['size'] = @filesize(wikiFN($pages[$idx]));
+ $page['lastModified'] = $this->api->toDate(@filemtime(wikiFN($pages[$idx])));
+ $list[] = $page;
+ }
+
+ return $list;
+ }
+
+ /**
+ * List all pages in the given namespace (and below)
+ */
+ function readNamespace($ns,$opts){
+ global $conf;
+
+ if(!is_array($opts)) $opts=array();
+
+ $ns = cleanID($ns);
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+ $data = array();
+ $opts['skipacl'] = 0; // no ACL skipping for XMLRPC
+ search($data, $conf['datadir'], 'search_allpages', $opts, $dir);
+ return $data;
+ }
+
+ /**
+ * List all pages in the given namespace (and below)
+ */
+ function search($query){
+ $regex = '';
+ $data = ft_pageSearch($query,$regex);
+ $pages = array();
+
+ // prepare additional data
+ $idx = 0;
+ foreach($data as $id => $score){
+ $file = wikiFN($id);
+
+ if($idx < FT_SNIPPET_NUMBER){
+ $snippet = ft_snippet($id,$regex);
+ $idx++;
+ }else{
+ $snippet = '';
+ }
+
+ $pages[] = array(
+ 'id' => $id,
+ 'score' => intval($score),
+ 'rev' => filemtime($file),
+ 'mtime' => filemtime($file),
+ 'size' => filesize($file),
+ 'snippet' => $snippet,
+ );
+ }
+ return $pages;
+ }
+
+ /**
+ * Returns the wiki title.
+ */
+ function getTitle(){
+ global $conf;
+ return $conf['title'];
+ }
+
+ /**
+ * List all media files.
+ *
+ * Available options are 'recursive' for also including the subnamespaces
+ * in the listing, and 'pattern' for filtering the returned files against
+ * a regular expression matching their name.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function listAttachments($ns, $options = array()) {
+ global $conf;
+
+ $ns = cleanID($ns);
+
+ if (!is_array($options)) $options = array();
+ $options['skipacl'] = 0; // no ACL skipping for XMLRPC
+
+
+ if(auth_quickaclcheck($ns.':*') >= AUTH_READ) {
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+
+ $data = array();
+ search($data, $conf['mediadir'], 'search_media', $options, $dir);
+ $len = count($data);
+ if(!$len) return array();
+
+ for($i=0; $i<$len; $i++) {
+ unset($data[$i]['meta']);
+ $data[$i]['lastModified'] = $this->api->toDate($data[$i]['mtime']);
+ }
+ return $data;
+ } else {
+ throw new RemoteAccessDeniedException('You are not allowed to list media files.', 215);
+ }
+ }
+
+ /**
+ * Return a list of backlinks
+ */
+ function listBackLinks($id){
+ return ft_backlinks(cleanID($id));
+ }
+
+ /**
+ * Return some basic data about a page
+ */
+ function pageInfo($id,$rev=''){
+ $id = cleanID($id);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ throw new RemoteAccessDeniedException('You are not allowed to read this page', 111);
+ }
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ if(!$time){
+ throw new RemoteException(10, 'The requested page does not exist', 121);
+ }
+
+ $info = getRevisionInfo($id, $time, 1024);
+
+ $data = array(
+ 'name' => $id,
+ 'lastModified' => $this->api->toDate($time),
+ 'author' => (($info['user']) ? $info['user'] : $info['ip']),
+ 'version' => $time
+ );
+
+ return ($data);
+ }
+
+ /**
+ * Save a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function putPage($id, $text, $params) {
+ global $TEXT;
+ global $lang;
+
+ $id = cleanID($id);
+ $TEXT = cleanText($text);
+ $sum = $params['sum'];
+ $minor = $params['minor'];
+
+ if(empty($id)) {
+ throw new RemoteException('Empty page ID', 131);
+ }
+
+ if(!page_exists($id) && trim($TEXT) == '' ) {
+ throw new RemoteException('Refusing to write an empty new wiki page', 132);
+ }
+
+ if(auth_quickaclcheck($id) < AUTH_EDIT) {
+ throw new RemoteAccessDeniedException('You are not allowed to edit this page', 112);
+ }
+
+ // Check, if page is locked
+ if(checklock($id)) {
+ throw new RemoteException('The page is currently locked', 133);
+ }
+
+ // SPAM check
+ if(checkwordblock()) {
+ throw new RemoteException('Positive wordblock check', 134);
+ }
+
+ // autoset summary on new pages
+ if(!page_exists($id) && empty($sum)) {
+ $sum = $lang['created'];
+ }
+
+ // autoset summary on deleted pages
+ if(page_exists($id) && empty($TEXT) && empty($sum)) {
+ $sum = $lang['deleted'];
+ }
+
+ lock($id);
+
+ saveWikiText($id,$TEXT,$sum,$minor);
+
+ unlock($id);
+
+ // run the indexer if page wasn't indexed yet
+ idx_addPage($id);
+
+ return 0;
+ }
+
+ /**
+ * Appends text to a wiki page.
+ */
+ function appendPage($id, $text, $params) {
+ $currentpage = $this->rawPage($id);
+ if (!is_string($currentpage)) {
+ return $currentpage;
+ }
+ return $this->putPage($id, $currentpage.$text, $params);
+ }
+
+ /**
+ * Uploads a file to the wiki.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ function putAttachment($id, $file, $params) {
+ $id = cleanID($id);
+ $auth = auth_quickaclcheck(getNS($id).':*');
+
+ if(!isset($id)) {
+ throw new RemoteException('Filename not given.', 231);
+ }
+
+ global $conf;
+
+ $ftmp = $conf['tmpdir'] . '/' . md5($id.clientIP());
+
+ // save temporary file
+ @unlink($ftmp);
+ io_saveFile($ftmp, $file);
+
+ $res = media_save(array('name' => $ftmp), $id, $params['ow'], $auth, 'rename');
+ if (is_array($res)) {
+ throw new RemoteException($res[0], -$res[1]);
+ } else {
+ return $res;
+ }
+ }
+
+ /**
+ * Deletes a file from the wiki.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function deleteAttachment($id){
+ $id = cleanID($id);
+ $auth = auth_quickaclcheck(getNS($id).':*');
+ $res = media_delete($id, $auth);
+ if ($res & DOKU_MEDIA_DELETED) {
+ return 0;
+ } elseif ($res & DOKU_MEDIA_NOT_AUTH) {
+ throw new RemoteAccessDeniedException('You don\'t have permissions to delete files.', 212);
+ } elseif ($res & DOKU_MEDIA_INUSE) {
+ throw new RemoteException('File is still referenced', 232);
+ } else {
+ throw new RemoteException('Could not delete file', 233);
+ }
+ }
+
+ /**
+ * Returns the permissions of a given wiki page
+ */
+ function aclCheck($id) {
+ $id = cleanID($id);
+ return auth_quickaclcheck($id);
+ }
+
+ /**
+ * Lists all links contained in a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function listLinks($id) {
+ $id = cleanID($id);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ throw new RemoteAccessDeniedException('You are not allowed to read this page', 111);
+ }
+ $links = array();
+
+ // resolve page instructions
+ $ins = p_cached_instructions(wikiFN($id));
+
+ // instantiate new Renderer - needed for interwiki links
+ include(DOKU_INC.'inc/parser/xhtml.php');
+ $Renderer = new Doku_Renderer_xhtml();
+ $Renderer->interwiki = getInterwiki();
+
+ // parse parse instructions
+ foreach($ins as $in) {
+ $link = array();
+ switch($in[0]) {
+ case 'internallink':
+ $link['type'] = 'local';
+ $link['page'] = $in[1][0];
+ $link['href'] = wl($in[1][0]);
+ array_push($links,$link);
+ break;
+ case 'externallink':
+ $link['type'] = 'extern';
+ $link['page'] = $in[1][0];
+ $link['href'] = $in[1][0];
+ array_push($links,$link);
+ break;
+ case 'interwikilink':
+ $url = $Renderer->_resolveInterWiki($in[1][2],$in[1][3]);
+ $link['type'] = 'extern';
+ $link['page'] = $url;
+ $link['href'] = $url;
+ array_push($links,$link);
+ break;
+ }
+ }
+
+ return ($links);
+ }
+
+ /**
+ * Returns a list of recent changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentChanges($timestamp) {
+ if(strlen($timestamp) != 10) {
+ throw new RemoteException('The provided value is not a valid timestamp', 311);
+ }
+
+ $recents = getRecentsSince($timestamp);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = $this->api->toDate($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(wikiFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ return new RemoteException('There are no changes in the specified timeframe', 321);
+ }
+ }
+
+ /**
+ * Returns a list of recent media changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentMediaChanges($timestamp) {
+ if(strlen($timestamp) != 10)
+ throw new RemoteException('The provided value is not a valid timestamp', 311);
+
+ $recents = getRecentsSince($timestamp, null, '', RECENTS_MEDIA_CHANGES);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = $this->api->toDate($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(mediaFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ throw new RemoteException('There are no changes in the specified timeframe', 321);
+ }
+ }
+
+ /**
+ * Returns a list of available revisions of a given wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function pageVersions($id, $first) {
+ $id = cleanID($id);
+ if(auth_quickaclcheck($id) < AUTH_READ) {
+ throw new RemoteAccessDeniedException('You are not allowed to read this page', 111);
+ }
+ global $conf;
+
+ $versions = array();
+
+ if(empty($id)) {
+ throw new RemoteException('Empty page ID', 131);
+ }
+
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+
+ if(count($revisions)==0 && $first!=0) {
+ $first=0;
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+ }
+
+ if(count($revisions)>0 && $first==0) {
+ array_unshift($revisions, ''); // include current revision
+ array_pop($revisions); // remove extra log entry
+ }
+
+ if(count($revisions) > $conf['recent']) {
+ array_pop($revisions); // remove extra log entry
+ }
+
+ if(!empty($revisions)) {
+ foreach($revisions as $rev) {
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ // we check if the page actually exists, if this is not the
+ // case this can lead to less pages being returned than
+ // specified via $conf['recent']
+ if($time){
+ $info = getRevisionInfo($id, $time, 1024);
+ if(!empty($info)) {
+ $data['user'] = $info['user'];
+ $data['ip'] = $info['ip'];
+ $data['type'] = $info['type'];
+ $data['sum'] = $info['sum'];
+ $data['modified'] = $this->api->toDate($info['date']);
+ $data['version'] = $info['date'];
+ array_push($versions, $data);
+ }
+ }
+ }
+ return $versions;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * The version of Wiki RPC API supported
+ */
+ function wiki_RPCVersion(){
+ return 2;
+ }
+
+
+ /**
+ * Locks or unlocks a given batch of pages
+ *
+ * Give an associative array with two keys: lock and unlock. Both should contain a
+ * list of pages to lock or unlock
+ *
+ * Returns an associative array with the keys locked, lockfail, unlocked and
+ * unlockfail, each containing lists of pages.
+ */
+ function setLocks($set){
+ $locked = array();
+ $lockfail = array();
+ $unlocked = array();
+ $unlockfail = array();
+
+ foreach((array) $set['lock'] as $id){
+ $id = cleanID($id);
+ if(auth_quickaclcheck($id) < AUTH_EDIT || checklock($id)){
+ $lockfail[] = $id;
+ }else{
+ lock($id);
+ $locked[] = $id;
+ }
+ }
+
+ foreach((array) $set['unlock'] as $id){
+ $id = cleanID($id);
+ if(auth_quickaclcheck($id) < AUTH_EDIT || !unlock($id)){
+ $unlockfail[] = $id;
+ }else{
+ $unlocked[] = $id;
+ }
+ }
+
+ return array(
+ 'locked' => $locked,
+ 'lockfail' => $lockfail,
+ 'unlocked' => $unlocked,
+ 'unlockfail' => $unlockfail,
+ );
+ }
+
+ function getAPIVersion(){
+ return DOKU_API_VERSION;
+ }
+
+ function login($user,$pass){
+ global $conf;
+ global $auth;
+ if(!$conf['useacl']) return 0;
+ if(!$auth) return 0;
+
+ @session_start(); // reopen session for login
+ if($auth->canDo('external')){
+ $ok = $auth->trustExternal($user,$pass,false);
+ }else{
+ $evdata = array(
+ 'user' => $user,
+ 'password' => $pass,
+ 'sticky' => false,
+ 'silent' => true,
+ );
+ $ok = trigger_event('AUTH_LOGIN_CHECK', $evdata, 'auth_login_wrapper');
+ }
+ session_write_close(); // we're done with the session
+
+ return $ok;
+ }
+
+
+}
+
diff --git a/inc/SafeFN.class.php b/inc/SafeFN.class.php
index 43b19e9ab..ab05b9eae 100644
--- a/inc/SafeFN.class.php
+++ b/inc/SafeFN.class.php
@@ -1,17 +1,17 @@
<?php
/**
- * Class to safely store UTF-8 in a Filename
+ * Class to safely store UTF-8 in a Filename
*
- * Encodes a utf8 string using only the following characters 0-9a-z_.-%
- * characters 0-9a-z in the original string are preserved, "plain".
- * all other characters are represented in a substring that starts
- * with '%' are "converted".
- * The transition from converted substrings to plain characters is
- * marked with a '.'
+ * Encodes a utf8 string using only the following characters 0-9a-z_.-%
+ * characters 0-9a-z in the original string are preserved, "plain".
+ * all other characters are represented in a substring that starts
+ * with '%' are "converted".
+ * The transition from converted substrings to plain characters is
+ * marked with a '.'
*
- * @author Christopher Smith
- * @date 2010-04-02
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @date 2010-04-02
*/
class SafeFN {
@@ -133,14 +133,15 @@ class SafeFN {
$converted = false;
foreach ($split as $sub) {
+ $len = strlen($sub);
if ($sub[0] != self::$pre_indicator) {
// plain (unconverted) characters, optionally starting with a post_indicator
// set initial value to skip any post_indicator
- for ($i=($converted?1:0); $i < strlen($sub); $i++) {
+ for ($i=($converted?1:0); $i < $len; $i++) {
$unicode[] = ord($sub[$i]);
}
$converted = false;
- } else if (strlen($sub)==1) {
+ } else if ($len==1) {
// a pre_indicator character in the real data
$unicode[] = ord($sub);
$converted = true;
diff --git a/inc/Sitemapper.php b/inc/Sitemapper.php
index bbe1caf26..bbea73b52 100644
--- a/inc/Sitemapper.php
+++ b/inc/Sitemapper.php
@@ -10,7 +10,7 @@ if(!defined('DOKU_INC')) die('meh.');
/**
* A class for building sitemaps and pinging search engines with the sitemap URL.
- *
+ *
* @author Michael Hamann
*/
class Sitemapper {
@@ -25,7 +25,7 @@ class Sitemapper {
* @link https://www.google.com/webmasters/sitemaps/docs/en/about.html
* @link http://www.sitemaps.org/
*/
- public function generate(){
+ public static function generate(){
global $conf;
if($conf['sitemap'] < 1 || !is_numeric($conf['sitemap'])) return false;
@@ -39,11 +39,11 @@ class Sitemapper {
if(@filesize($sitemap) &&
@filemtime($sitemap) > (time()-($conf['sitemap']*86400))){ // 60*60*24=86400
- dbglog('Sitemapper::generate(): Sitemap up to date'); // FIXME: only in debug mode
+ dbglog('Sitemapper::generate(): Sitemap up to date');
return false;
}
- dbglog("Sitemapper::generate(): using $sitemap"); // FIXME: Only in debug mode
+ dbglog("Sitemapper::generate(): using $sitemap");
$pages = idx_get_indexer()->getPages();
dbglog('Sitemapper::generate(): creating sitemap using '.count($pages).' pages');
@@ -55,7 +55,7 @@ class Sitemapper {
if(isHiddenPage($id)) continue;
if(auth_aclcheck($id,'','') < AUTH_READ) continue;
$item = SitemapItem::createFromID($id);
- if ($item !== NULL)
+ if ($item !== null)
$items[] = $item;
}
@@ -72,12 +72,12 @@ class Sitemapper {
/**
* Builds the sitemap XML string from the given array auf SitemapItems.
- *
+ *
* @param $items array The SitemapItems that shall be included in the sitemap.
* @return string The sitemap XML.
* @author Michael Hamann
*/
- private function getXML($items) {
+ private static function getXML($items) {
ob_start();
echo '<?xml version="1.0" encoding="UTF-8"?>'.NL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.NL;
@@ -92,11 +92,11 @@ class Sitemapper {
/**
* Helper function for getting the path to the sitemap file.
- *
+ *
* @return The path to the sitemap file.
* @author Michael Hamann
*/
- public function getFilePath() {
+ public static function getFilePath() {
global $conf;
$sitemap = $conf['cachedir'].'/sitemap.xml';
@@ -108,12 +108,12 @@ class Sitemapper {
}
/**
- * Pings search engines with the sitemap url. Plugins can add or remove
+ * Pings search engines with the sitemap url. Plugins can add or remove
* urls to ping using the SITEMAP_PING event.
- *
+ *
* @author Michael Hamann
*/
- public function pingSearchEngines() {
+ public static function pingSearchEngines() {
//ping search engines...
$http = new DokuHTTPClient();
$http->timeout = 8;
@@ -145,7 +145,7 @@ class Sitemapper {
/**
* An item of a sitemap.
- *
+ *
* @author Michael Hamann
*/
class SitemapItem {
@@ -156,7 +156,7 @@ class SitemapItem {
/**
* Create a new item.
- *
+ *
* @param $url string The url of the item
* @param $lastmod int Timestamp of the last modification
* @param $changefreq string How frequently the item is likely to change. Valid values: always, hourly, daily, weekly, monthly, yearly, never.
@@ -171,7 +171,7 @@ class SitemapItem {
/**
* Helper function for creating an item for a wikipage id.
- *
+ *
* @param $id string A wikipage id.
* @param $changefreq string How frequently the item is likely to change. Valid values: always, hourly, daily, weekly, monthly, yearly, never.
* @param $priority float|string The priority of the item relative to other URLs on your site. Valid values range from 0.0 to 1.0.
@@ -180,22 +180,22 @@ class SitemapItem {
public static function createFromID($id, $changefreq = null, $priority = null) {
$id = trim($id);
$date = @filemtime(wikiFN($id));
- if(!$date) return NULL;
+ if(!$date) return null;
return new SitemapItem(wl($id, '', true), $date, $changefreq, $priority);
}
/**
* Get the XML representation of the sitemap item.
- *
+ *
* @return The XML representation.
*/
public function toXML() {
$result = ' <url>'.NL
.' <loc>'.hsc($this->url).'</loc>'.NL
.' <lastmod>'.date_iso8601($this->lastmod).'</lastmod>'.NL;
- if ($this->changefreq !== NULL)
+ if ($this->changefreq !== null)
$result .= ' <changefreq>'.hsc($this->changefreq).'</changefreq>'.NL;
- if ($this->priority !== NULL)
+ if ($this->priority !== null)
$result .= ' <priority>'.hsc($this->priority).'</priority>'.NL;
$result .= ' </url>'.NL;
return $result;
diff --git a/inc/TarLib.class.php b/inc/TarLib.class.php
index 12418c48d..36c1fee83 100644
--- a/inc/TarLib.class.php
+++ b/inc/TarLib.class.php
@@ -108,7 +108,7 @@ class TarLib {
* represent the GZIP or BZIP compression level. 1 produce fast compression,
* and 9 produce smaller files. See the RFC 1952 for more infos.
*/
- function tarlib($p_filen = TarLib::ARCHIVE_DYNAMIC , $p_comptype = TarLib::COMPRESS_AUTO, $p_complevel = 9) {
+ function __construct($p_filen = TarLib::ARCHIVE_DYNAMIC , $p_comptype = TarLib::COMPRESS_AUTO, $p_complevel = 9) {
$this->_initerror = 0;
$this->_nomf = $p_filen;
$flag=0;
@@ -127,7 +127,7 @@ class TarLib {
}
switch($p_comptype) {
- case TarLib::COMPRESS_GZIP:
+ case TarLib::COMPRESS_GZIP:
if(!extension_loaded('zlib')) $this->_initerror = -1;
$this->_comptype = TarLib::COMPRESS_GZIP;
break;
diff --git a/inc/adLDAP.php b/inc/adLDAP.php
index a64096b85..24be6e475 100644
--- a/inc/adLDAP.php
+++ b/inc/adLDAP.php
@@ -1021,6 +1021,26 @@ class adLDAP {
}
/**
+ * Return info about the domain itself
+ *
+ * @authot Andreas Gohr <gohr@cosmocode.de>
+ * @param array $fields The fields to query
+ * @return array
+ */
+ public function domain_info($fields){
+ if (!$this->_bind){ return (false); }
+
+ $sr = ldap_read($this->_conn, $this->_base_dn, 'objectclass=*', $fields);
+ if (!$sr) {
+ return false;
+ }
+ $info = ldap_get_entries($this->_conn, $sr);
+ if(count($info)) return $info[0];
+
+ return false;
+ }
+
+ /**
* Determine a user's password expiry date
*
* @param string $username The username to query
diff --git a/inc/auth.php b/inc/auth.php
index 49346a84f..ed0e2dcf7 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -422,7 +422,7 @@ function auth_isadmin($user=null,$groups=null){
* @param $memberlist string commaseparated list of allowed users and groups
* @param $user string user to match against
* @param $groups array groups the user is member of
- * @returns bool true for membership acknowledged
+ * @return bool true for membership acknowledged
*/
function auth_isMember($memberlist,$user,array $groups){
global $auth;
@@ -523,18 +523,19 @@ function auth_aclcheck($id,$user,$groups){
$groups[] = '@ALL';
//add User
if($user) $groups[] = $user;
- //build regexp
- $regexp = join('|',$groups);
}else{
- $regexp = '@ALL';
+ $groups[] = '@ALL';
}
//check exact match first
- $matches = preg_grep('/^'.preg_quote($id,'/').'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
+ $matches = preg_grep('/^'.preg_quote($id,'/').'\s+(\S+)\s+/'.$ci,$AUTH_ACL);
if(count($matches)){
foreach($matches as $match){
$match = preg_replace('/#.*$/','',$match); //ignore comments
$acl = preg_split('/\s+/',$match);
+ if (!in_array($acl[1], $groups)) {
+ continue;
+ }
if($acl[2] > AUTH_DELETE) $acl[2] = AUTH_DELETE; //no admins in the ACL!
if($acl[2] > $perm){
$perm = $acl[2];
@@ -554,20 +555,24 @@ function auth_aclcheck($id,$user,$groups){
}
do{
- $matches = preg_grep('/^'.preg_quote($path,'/').'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
+ $matches = preg_grep('/^'.preg_quote($path,'/').'\s+(\S+)\s+/'.$ci,$AUTH_ACL);
if(count($matches)){
foreach($matches as $match){
$match = preg_replace('/#.*$/','',$match); //ignore comments
$acl = preg_split('/\s+/',$match);
+ if (!in_array($acl[1], $groups)) {
+ continue;
+ }
if($acl[2] > AUTH_DELETE) $acl[2] = AUTH_DELETE; //no admins in the ACL!
if($acl[2] > $perm){
$perm = $acl[2];
}
}
//we had a match - return it
- return $perm;
+ if ($perm != -1) {
+ return $perm;
+ }
}
-
//get next higher namespace
$ns = getNS($ns);
@@ -582,9 +587,6 @@ function auth_aclcheck($id,$user,$groups){
return AUTH_NONE;
}
}while(1); //this should never loop endless
-
- //still here? return no permissions
- return AUTH_NONE;
}
/**
@@ -853,32 +855,59 @@ function act_resendpwd(){
$token = preg_replace('/[^a-f0-9]+/','',$_REQUEST['pwauth']);
if($token){
- // we're in token phase
+ // we're in token phase - get user info from token
$tfile = $conf['cachedir'].'/'.$token{0}.'/'.$token.'.pwauth';
if(!@file_exists($tfile)){
msg($lang['resendpwdbadauth'],-1);
+ unset($_REQUEST['pwauth']);
return false;
}
+ // token is only valid for 3 days
+ if( (time() - filemtime($tfile)) > (3*60*60*24) ){
+ msg($lang['resendpwdbadauth'],-1);
+ unset($_REQUEST['pwauth']);
+ @unlink($tfile);
+ return false;
+ }
+
$user = io_readfile($tfile);
- @unlink($tfile);
$userinfo = $auth->getUserData($user);
if(!$userinfo['mail']) {
msg($lang['resendpwdnouser'], -1);
return false;
}
- $pass = auth_pwgen();
- if (!$auth->triggerUserMod('modify', array($user,array('pass' => $pass)))) {
- msg('error modifying user data',-1);
- return false;
- }
+ if(!$conf['autopasswd']){ // we let the user choose a password
+ // password given correctly?
+ if(!isset($_REQUEST['pass']) || $_REQUEST['pass'] == '') return false;
+ if($_REQUEST['pass'] != $_REQUEST['passchk']){
+ msg($lang['regbadpass'],-1);
+ return false;
+ }
+ $pass = $_REQUEST['pass'];
- if (auth_sendPassword($user,$pass)) {
- msg($lang['resendpwdsuccess'],1);
- } else {
- msg($lang['regmailfail'],-1);
+ if (!$auth->triggerUserMod('modify', array($user,array('pass' => $pass)))) {
+ msg('error modifying user data',-1);
+ return false;
+ }
+
+ }else{ // autogenerate the password and send by mail
+
+ $pass = auth_pwgen();
+ if (!$auth->triggerUserMod('modify', array($user,array('pass' => $pass)))) {
+ msg('error modifying user data',-1);
+ return false;
+ }
+
+ if (auth_sendPassword($user,$pass)) {
+ msg($lang['resendpwdsuccess'],1);
+ } else {
+ msg($lang['regmailfail'],-1);
+ }
}
+
+ @unlink($tfile);
return true;
} else {
diff --git a/inc/auth/ad.class.php b/inc/auth/ad.class.php
index 1fddad243..bc4168527 100644
--- a/inc/auth/ad.class.php
+++ b/inc/auth/ad.class.php
@@ -26,15 +26,17 @@
* $conf['auth']['ad']['use_ssl'] = 1;
* $conf['auth']['ad']['use_tls'] = 1;
* $conf['auth']['ad']['debug'] = 1;
+ * // warn user about expiring password this many days in advance:
+ * $conf['auth']['ad']['expirywarn'] = 5;
*
* // get additional information to the userinfo array
* // add a list of comma separated ldap contact fields.
* $conf['auth']['ad']['additional'] = 'field1,field2';
*
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author James Van Lommel <jamesvl@gmail.com>
- * @link http://www.nosq.com/blog/2005/08/ldap-activedirectory-and-dokuwiki/
- * @author Andreas Gohr <andi@splitbrain.org>
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Van Lommel <jamesvl@gmail.com>
+ * @link http://www.nosq.com/blog/2005/08/ldap-activedirectory-and-dokuwiki/
+ * @author Andreas Gohr <andi@splitbrain.org>
*/
require_once(DOKU_INC.'inc/adLDAP.php');
@@ -44,15 +46,15 @@ class auth_ad extends auth_basic {
var $opts = null;
var $adldap = null;
var $users = null;
+ var $msgshown = false;
/**
* Constructor
*/
- function auth_ad() {
+ function __construct() {
global $conf;
$this->cnf = $conf['auth']['ad'];
-
// additional information fields
if (isset($this->cnf['additional'])) {
$this->cnf['additional'] = str_replace(' ', '', $this->cnf['additional']);
@@ -69,21 +71,21 @@ class auth_ad extends auth_basic {
// Prepare SSO
if($_SERVER['REMOTE_USER'] && $this->cnf['sso']){
- // remove possible NTLM domain
- list($dom,$usr) = explode('\\',$_SERVER['REMOTE_USER'],2);
- if(!$usr) $usr = $dom;
+ // remove possible NTLM domain
+ list($dom,$usr) = explode('\\',$_SERVER['REMOTE_USER'],2);
+ if(!$usr) $usr = $dom;
- // remove possible Kerberos domain
- list($usr,$dom) = explode('@',$usr);
+ // remove possible Kerberos domain
+ list($usr,$dom) = explode('@',$usr);
- $dom = strtolower($dom);
- $_SERVER['REMOTE_USER'] = $usr;
+ $dom = strtolower($dom);
+ $_SERVER['REMOTE_USER'] = $usr;
- // we need to simulate a login
- if(empty($_COOKIE[DOKU_COOKIE])){
- $_REQUEST['u'] = $_SERVER['REMOTE_USER'];
- $_REQUEST['p'] = 'sso_only';
- }
+ // we need to simulate a login
+ if(empty($_COOKIE[DOKU_COOKIE])){
+ $_REQUEST['u'] = $_SERVER['REMOTE_USER'];
+ $_REQUEST['p'] = 'sso_only';
+ }
}
// prepare adLDAP standard configuration
@@ -144,11 +146,15 @@ class auth_ad extends auth_basic {
*
* @author James Van Lommel <james@nosq.com>
*/
- function getUserData($user){
+ function getUserData($user){
global $conf;
+ global $lang;
+ global $ID;
if(!$this->_init()) return false;
- $fields = array('mail','displayname','samaccountname');
+ if($user == '') return array();
+
+ $fields = array('mail','displayname','samaccountname','lastpwd','pwdlastset','useraccountcontrol');
// add additional fields to read
$fields = array_merge($fields, $this->cnf['additional']);
@@ -156,11 +162,19 @@ class auth_ad extends auth_basic {
//get info for given user
$result = $this->adldap->user_info($user, $fields);
+ if($result == false){
+ return array();
+ }
+
//general user info
- $info['name'] = $result[0]['displayname'][0];
- $info['mail'] = $result[0]['mail'][0];
- $info['uid'] = $result[0]['samaccountname'][0];
- $info['dn'] = $result[0]['dn'];
+ $info['name'] = $result[0]['displayname'][0];
+ $info['mail'] = $result[0]['mail'][0];
+ $info['uid'] = $result[0]['samaccountname'][0];
+ $info['dn'] = $result[0]['dn'];
+ //last password set (Windows counts from January 1st 1601)
+ $info['lastpwd'] = $result[0]['pwdlastset'][0] / 10000000 - 11644473600;
+ //will it expire?
+ $info['expires'] = !($result[0]['useraccountcontrol'][0] & 0x10000); //ADS_UF_DONT_EXPIRE_PASSWD
// additional information
foreach ($this->cnf['additional'] as $field) {
@@ -183,6 +197,29 @@ class auth_ad extends auth_basic {
$info['grps'][] = $conf['defaultgroup'];
}
+ // check expiry time
+ if($info['expires'] && $this->cnf['expirywarn']){
+ $result = $this->adldap->domain_info(array('maxpwdage')); // maximum pass age
+ $maxage = -1 * $result['maxpwdage'][0] / 10000000; // negative 100 nanosecs
+ $timeleft = $maxage - (time() - $info['lastpwd']);
+ $timeleft = round($timeleft/(24*60*60));
+ $info['expiresin'] = $timeleft;
+
+ // if this is the current user, warn him (once per request only)
+ if( ($_SERVER['REMOTE_USER'] == $user) &&
+ ($timeleft <= $this->cnf['expirywarn']) &&
+ !$this->msgshown
+ ){
+ $msg = sprintf($lang['authpwdexpire'],$timeleft);
+ if($this->canDo('modPass')){
+ $url = wl($ID,array('do'=>'profile'));
+ $msg .= ' <a href="'.$url.'">'.$lang['btn_profile'].'</a>';
+ }
+ msg($msg);
+ $this->msgshown = true;
+ }
+ }
+
return $info;
}
@@ -259,7 +296,7 @@ class auth_ad extends auth_basic {
* @param $user nick of the user to be changed
* @param $changes array of field/value pairs to be changed
* @return bool
- */
+ */
function modifyUser($user, $changes) {
$return = true;
@@ -342,7 +379,6 @@ class auth_ad extends auth_basic {
function _constructPattern($filter) {
$this->_pattern = array();
foreach ($filter as $item => $pattern) {
-// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
$this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
}
}
diff --git a/inc/auth/basic.class.php b/inc/auth/basic.class.php
index c7e7031bf..7c0a5f2c9 100644
--- a/inc/auth/basic.class.php
+++ b/inc/auth/basic.class.php
@@ -9,395 +9,393 @@
*/
class auth_basic {
+ var $success = true;
- var $success = true;
-
-
- /**
- * Posible things an auth backend module may be able to
- * do. The things a backend can do need to be set to true
- * in the constructor.
- */
- var $cando = array (
- 'addUser' => false, // can Users be created?
- 'delUser' => false, // can Users be deleted?
- 'modLogin' => false, // can login names be changed?
- 'modPass' => false, // can passwords be changed?
- 'modName' => false, // can real names be changed?
- 'modMail' => false, // can emails be changed?
- 'modGroups' => false, // can groups be changed?
- 'getUsers' => false, // can a (filtered) list of users be retrieved?
- 'getUserCount'=> false, // can the number of users be retrieved?
- 'getGroups' => false, // can a list of available groups be retrieved?
- 'external' => false, // does the module do external auth checking?
- 'logout' => true, // can the user logout again? (eg. not possible with HTTP auth)
- );
+ /**
+ * Posible things an auth backend module may be able to
+ * do. The things a backend can do need to be set to true
+ * in the constructor.
+ */
+ var $cando = array (
+ 'addUser' => false, // can Users be created?
+ 'delUser' => false, // can Users be deleted?
+ 'modLogin' => false, // can login names be changed?
+ 'modPass' => false, // can passwords be changed?
+ 'modName' => false, // can real names be changed?
+ 'modMail' => false, // can emails be changed?
+ 'modGroups' => false, // can groups be changed?
+ 'getUsers' => false, // can a (filtered) list of users be retrieved?
+ 'getUserCount'=> false, // can the number of users be retrieved?
+ 'getGroups' => false, // can a list of available groups be retrieved?
+ 'external' => false, // does the module do external auth checking?
+ 'logout' => true, // can the user logout again? (eg. not possible with HTTP auth)
+ );
+ /**
+ * Constructor.
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate. Set capabilities in $this->cando
+ * array here
+ *
+ * Set $this->success to false if checks fail
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function __construct() {
+ // the base class constructor does nothing, derived class
+ // constructors do the real work
+ }
- /**
- * Constructor.
- *
- * Carry out sanity checks to ensure the object is
- * able to operate. Set capabilities in $this->cando
- * array here
- *
- * Set $this->success to false if checks fail
- *
- * @author Christopher Smith <chris@jalakai.co.uk>
- */
- function auth_basic() {
- // the base class constructor does nothing, derived class
- // constructors do the real work
- }
+ /**
+ * Capability check. [ DO NOT OVERRIDE ]
+ *
+ * Checks the capabilities set in the $this->cando array and
+ * some pseudo capabilities (shortcutting access to multiple
+ * ones)
+ *
+ * ususal capabilities start with lowercase letter
+ * shortcut capabilities start with uppercase letter
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function canDo($cap) {
+ switch($cap){
+ case 'Profile':
+ // can at least one of the user's properties be changed?
+ return ( $this->cando['modPass'] ||
+ $this->cando['modName'] ||
+ $this->cando['modMail'] );
+ break;
+ case 'UserMod':
+ // can at least anything be changed?
+ return ( $this->cando['modPass'] ||
+ $this->cando['modName'] ||
+ $this->cando['modMail'] ||
+ $this->cando['modLogin'] ||
+ $this->cando['modGroups'] ||
+ $this->cando['modMail'] );
+ break;
+ default:
+ // print a helping message for developers
+ if(!isset($this->cando[$cap])){
+ msg("Check for unknown capability '$cap' - Do you use an outdated Plugin?",-1);
+ }
+ return $this->cando[$cap];
+ }
+ }
- /**
- * Capability check. [ DO NOT OVERRIDE ]
- *
- * Checks the capabilities set in the $this->cando array and
- * some pseudo capabilities (shortcutting access to multiple
- * ones)
- *
- * ususal capabilities start with lowercase letter
- * shortcut capabilities start with uppercase letter
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @return bool
- */
- function canDo($cap) {
- switch($cap){
- case 'Profile':
- // can at least one of the user's properties be changed?
- return ( $this->cando['modPass'] ||
- $this->cando['modName'] ||
- $this->cando['modMail'] );
- break;
- case 'UserMod':
- // can at least anything be changed?
- return ( $this->cando['modPass'] ||
- $this->cando['modName'] ||
- $this->cando['modMail'] ||
- $this->cando['modLogin'] ||
- $this->cando['modGroups'] ||
- $this->cando['modMail'] );
- break;
- default:
- // print a helping message for developers
- if(!isset($this->cando[$cap])){
- msg("Check for unknown capability '$cap' - Do you use an outdated Plugin?",-1);
+ /**
+ * Trigger the AUTH_USERDATA_CHANGE event and call the modification function. [ DO NOT OVERRIDE ]
+ *
+ * You should use this function instead of calling createUser, modifyUser or
+ * deleteUsers directly. The event handlers can prevent the modification, for
+ * example for enforcing a user name schema.
+ *
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @param string $type Modification type ('create', 'modify', 'delete')
+ * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type
+ * @return mixed Result from the modification function or false if an event handler has canceled the action
+ */
+ function triggerUserMod($type, $params) {
+ $validTypes = array(
+ 'create' => 'createUser',
+ 'modify' => 'modifyUser',
+ 'delete' => 'deleteUsers'
+ );
+ if(empty($validTypes[$type]))
+ return false;
+ $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null);
+ $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata);
+ if ($evt->advise_before(true)) {
+ $result = call_user_func_array(array($this, $validTypes[$type]), $params);
+ $evt->data['modification_result'] = $result;
}
- return $this->cando[$cap];
+ $evt->advise_after();
+ unset($evt);
+ return $result;
}
- }
- /**
- * Trigger the AUTH_USERDATA_CHANGE event and call the modification function. [ DO NOT OVERRIDE ]
- *
- * You should use this function instead of calling createUser, modifyUser or
- * deleteUsers directly. The event handlers can prevent the modification, for
- * example for enforcing a user name schema.
- *
- * @author Gabriel Birke <birke@d-scribe.de>
- * @param string $type Modification type ('create', 'modify', 'delete')
- * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type
- * @return mixed Result from the modification function or false if an event handler has canceled the action
- */
- function triggerUserMod($type, $params)
- {
- $validTypes = array(
- 'create' => 'createUser',
- 'modify' => 'modifyUser',
- 'delete' => 'deleteUsers'
- );
- if(empty($validTypes[$type]))
- return false;
- $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null);
- $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata);
- if ($evt->advise_before(true)) {
- $result = call_user_func_array(array($this, $validTypes[$type]), $params);
- $evt->data['modification_result'] = $result;
+ /**
+ * Log off the current user [ OPTIONAL ]
+ *
+ * Is run in addition to the ususal logoff method. Should
+ * only be needed when trustExternal is implemented.
+ *
+ * @see auth_logoff()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function logOff(){
}
- $evt->advise_after();
- unset($evt);
- return $result;
- }
- /**
- * Log off the current user [ OPTIONAL ]
- *
- * Is run in addition to the ususal logoff method. Should
- * only be needed when trustExternal is implemented.
- *
- * @see auth_logoff()
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- function logOff(){
- }
+ /**
+ * Do all authentication [ OPTIONAL ]
+ *
+ * Set $this->cando['external'] = true when implemented
+ *
+ * If this function is implemented it will be used to
+ * authenticate a user - all other DokuWiki internals
+ * will not be used for authenticating, thus
+ * implementing the checkPass() function is not needed
+ * anymore.
+ *
+ * The function can be used to authenticate against third
+ * party cookies or Apache auth mechanisms and replaces
+ * the auth_login() function
+ *
+ * The function will be called with or without a set
+ * username. If the Username is given it was called
+ * from the login form and the given credentials might
+ * need to be checked. If no username was given it
+ * the function needs to check if the user is logged in
+ * by other means (cookie, environment).
+ *
+ * The function needs to set some globals needed by
+ * DokuWiki like auth_login() does.
+ *
+ * @see auth_login()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $user Username
+ * @param string $pass Cleartext Password
+ * @param bool $sticky Cookie should not expire
+ * @return bool true on successful auth
+ */
+ function trustExternal($user,$pass,$sticky=false){
+ /* some example:
+
+ global $USERINFO;
+ global $conf;
+ $sticky ? $sticky = true : $sticky = false; //sanity check
+
+ // do the checking here
- /**
- * Do all authentication [ OPTIONAL ]
- *
- * Set $this->cando['external'] = true when implemented
- *
- * If this function is implemented it will be used to
- * authenticate a user - all other DokuWiki internals
- * will not be used for authenticating, thus
- * implementing the checkPass() function is not needed
- * anymore.
- *
- * The function can be used to authenticate against third
- * party cookies or Apache auth mechanisms and replaces
- * the auth_login() function
- *
- * The function will be called with or without a set
- * username. If the Username is given it was called
- * from the login form and the given credentials might
- * need to be checked. If no username was given it
- * the function needs to check if the user is logged in
- * by other means (cookie, environment).
- *
- * The function needs to set some globals needed by
- * DokuWiki like auth_login() does.
- *
- * @see auth_login()
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param string $user Username
- * @param string $pass Cleartext Password
- * @param bool $sticky Cookie should not expire
- * @return bool true on successful auth
- */
- function trustExternal($user,$pass,$sticky=false){
-# // some example:
-#
-# global $USERINFO;
-# global $conf;
-# $sticky ? $sticky = true : $sticky = false; //sanity check
-#
-# // do the checking here
-#
-# // set the globals if authed
-# $USERINFO['name'] = 'FIXME';
-# $USERINFO['mail'] = 'FIXME';
-# $USERINFO['grps'] = array('FIXME');
-# $_SERVER['REMOTE_USER'] = $user;
-# $_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
-# $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass;
-# $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
-# return true;
- }
+ // set the globals if authed
+ $USERINFO['name'] = 'FIXME';
+ $USERINFO['mail'] = 'FIXME';
+ $USERINFO['grps'] = array('FIXME');
+ $_SERVER['REMOTE_USER'] = $user;
+ $_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
+ $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass;
+ $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
+ return true;
- /**
- * Check user+password [ MUST BE OVERRIDDEN ]
- *
- * Checks if the given user exists and the given
- * plaintext password is correct
- *
- * May be ommited if trustExternal is used.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @return bool
- */
- function checkPass($user,$pass){
- msg("no valid authorisation system in use", -1);
- return false;
- }
+ */
+ }
+
+ /**
+ * Check user+password [ MUST BE OVERRIDDEN ]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct
+ *
+ * May be ommited if trustExternal is used.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+ msg("no valid authorisation system in use", -1);
+ return false;
+ }
- /**
- * Return user info [ MUST BE OVERRIDDEN ]
- *
- * Returns info about the given user needs to contain
- * at least these fields:
- *
- * name string full name of the user
- * mail string email addres of the user
- * grps array list of groups the user is in
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @return array containing user data or false
- */
- function getUserData($user) {
- if(!$this->cando['external']) msg("no valid authorisation system in use", -1);
- return false;
- }
+ /**
+ * Return user info [ MUST BE OVERRIDDEN ]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return array containing user data or false
+ */
+ function getUserData($user) {
+ if(!$this->cando['external']) msg("no valid authorisation system in use", -1);
+ return false;
+ }
- /**
- * Create a new User [implement only where required/possible]
- *
- * Returns false if the user already exists, null when an error
- * occurred and true if everything went well.
- *
- * The new user HAS TO be added to the default group by this
- * function!
- *
- * Set addUser capability when implemented
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- function createUser($user,$pass,$name,$mail,$grps=null){
- msg("authorisation method does not allow creation of new users", -1);
- return null;
- }
+ /**
+ * Create a new User [implement only where required/possible]
+ *
+ * Returns false if the user already exists, null when an error
+ * occurred and true if everything went well.
+ *
+ * The new user HAS TO be added to the default group by this
+ * function!
+ *
+ * Set addUser capability when implemented
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function createUser($user,$pass,$name,$mail,$grps=null){
+ msg("authorisation method does not allow creation of new users", -1);
+ return null;
+ }
- /**
- * Modify user data [implement only where required/possible]
- *
- * Set the mod* capabilities according to the implemented features
- *
- * @author Chris Smith <chris@jalakai.co.uk>
- * @param $user nick of the user to be changed
- * @param $changes array of field/value pairs to be changed (password will be clear text)
- * @return bool
- */
- function modifyUser($user, $changes) {
- msg("authorisation method does not allow modifying of user data", -1);
- return false;
- }
+ /**
+ * Modify user data [implement only where required/possible]
+ *
+ * Set the mod* capabilities according to the implemented features
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password will be clear text)
+ * @return bool
+ */
+ function modifyUser($user, $changes) {
+ msg("authorisation method does not allow modifying of user data", -1);
+ return false;
+ }
- /**
- * Delete one or more users [implement only where required/possible]
- *
- * Set delUser capability when implemented
- *
- * @author Chris Smith <chris@jalakai.co.uk>
- * @param array $users
- * @return int number of users deleted
- */
- function deleteUsers($users) {
- msg("authorisation method does not allow deleting of users", -1);
- return false;
- }
+ /**
+ * Delete one or more users [implement only where required/possible]
+ *
+ * Set delUser capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param array $users
+ * @return int number of users deleted
+ */
+ function deleteUsers($users) {
+ msg("authorisation method does not allow deleting of users", -1);
+ return false;
+ }
- /**
- * Return a count of the number of user which meet $filter criteria
- * [should be implemented whenever retrieveUsers is implemented]
- *
- * Set getUserCount capability when implemented
- *
- * @author Chris Smith <chris@jalakai.co.uk>
- */
- function getUserCount($filter=array()) {
- msg("authorisation method does not provide user counts", -1);
- return 0;
- }
+ /**
+ * Return a count of the number of user which meet $filter criteria
+ * [should be implemented whenever retrieveUsers is implemented]
+ *
+ * Set getUserCount capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function getUserCount($filter=array()) {
+ msg("authorisation method does not provide user counts", -1);
+ return 0;
+ }
- /**
- * Bulk retrieval of user data [implement only where required/possible]
- *
- * Set getUsers capability when implemented
- *
- * @author Chris Smith <chris@jalakai.co.uk>
- * @param start index of first user to be returned
- * @param limit max number of users to be returned
- * @param filter array of field/pattern pairs, null for no filter
- * @return array of userinfo (refer getUserData for internal userinfo details)
- */
- function retrieveUsers($start=0,$limit=-1,$filter=null) {
- msg("authorisation method does not support mass retrieval of user data", -1);
- return array();
- }
+ /**
+ * Bulk retrieval of user data [implement only where required/possible]
+ *
+ * Set getUsers capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param start index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs, null for no filter
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ */
+ function retrieveUsers($start=0,$limit=-1,$filter=null) {
+ msg("authorisation method does not support mass retrieval of user data", -1);
+ return array();
+ }
- /**
- * Define a group [implement only where required/possible]
- *
- * Set addGroup capability when implemented
- *
- * @author Chris Smith <chris@jalakai.co.uk>
- * @return bool
- */
- function addGroup($group) {
- msg("authorisation method does not support independent group creation", -1);
- return false;
- }
+ /**
+ * Define a group [implement only where required/possible]
+ *
+ * Set addGroup capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @return bool
+ */
+ function addGroup($group) {
+ msg("authorisation method does not support independent group creation", -1);
+ return false;
+ }
- /**
- * Retrieve groups [implement only where required/possible]
- *
- * Set getGroups capability when implemented
- *
- * @author Chris Smith <chris@jalakai.co.uk>
- * @return array
- */
- function retrieveGroups($start=0,$limit=0) {
- msg("authorisation method does not support group list retrieval", -1);
- return array();
- }
+ /**
+ * Retrieve groups [implement only where required/possible]
+ *
+ * Set getGroups capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @return array
+ */
+ function retrieveGroups($start=0,$limit=0) {
+ msg("authorisation method does not support group list retrieval", -1);
+ return array();
+ }
- /**
- * Return case sensitivity of the backend [OPTIONAL]
- *
- * When your backend is caseinsensitive (eg. you can login with USER and
- * user) then you need to overwrite this method and return false
- */
- function isCaseSensitive(){
- return true;
- }
+ /**
+ * Return case sensitivity of the backend [OPTIONAL]
+ *
+ * When your backend is caseinsensitive (eg. you can login with USER and
+ * user) then you need to overwrite this method and return false
+ */
+ function isCaseSensitive(){
+ return true;
+ }
- /**
- * Sanitize a given username [OPTIONAL]
- *
- * This function is applied to any user name that is given to
- * the backend and should also be applied to any user name within
- * the backend before returning it somewhere.
- *
- * This should be used to enforce username restrictions.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param string $user - username
- * @param string - the cleaned username
- */
- function cleanUser($user){
- return $user;
- }
+ /**
+ * Sanitize a given username [OPTIONAL]
+ *
+ * This function is applied to any user name that is given to
+ * the backend and should also be applied to any user name within
+ * the backend before returning it somewhere.
+ *
+ * This should be used to enforce username restrictions.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $user - username
+ * @param string - the cleaned username
+ */
+ function cleanUser($user){
+ return $user;
+ }
- /**
- * Sanitize a given groupname [OPTIONAL]
- *
- * This function is applied to any groupname that is given to
- * the backend and should also be applied to any groupname within
- * the backend before returning it somewhere.
- *
- * This should be used to enforce groupname restrictions.
- *
- * Groupnames are to be passed without a leading '@' here.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param string $group - groupname
- * @param string - the cleaned groupname
- */
- function cleanGroup($group){
- return $group;
- }
+ /**
+ * Sanitize a given groupname [OPTIONAL]
+ *
+ * This function is applied to any groupname that is given to
+ * the backend and should also be applied to any groupname within
+ * the backend before returning it somewhere.
+ *
+ * This should be used to enforce groupname restrictions.
+ *
+ * Groupnames are to be passed without a leading '@' here.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $group - groupname
+ * @param string - the cleaned groupname
+ */
+ function cleanGroup($group){
+ return $group;
+ }
- /**
- * Check Session Cache validity [implement only where required/possible]
- *
- * DokuWiki caches user info in the user's session for the timespan defined
- * in $conf['auth_security_timeout'].
- *
- * This makes sure slow authentication backends do not slow down DokuWiki.
- * This also means that changes to the user database will not be reflected
- * on currently logged in users.
- *
- * To accommodate for this, the user manager plugin will touch a reference
- * file whenever a change is submitted. This function compares the filetime
- * of this reference file with the time stored in the session.
- *
- * This reference file mechanism does not reflect changes done directly in
- * the backend's database through other means than the user manager plugin.
- *
- * Fast backends might want to return always false, to force rechecks on
- * each page load. Others might want to use their own checking here. If
- * unsure, do not override.
- *
- * @param string $user - The username
- * @author Andreas Gohr <andi@splitbrain.org>
- * @return bool
- */
- function useSessionCache($user){
- global $conf;
- return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge'));
- }
+ /**
+ * Check Session Cache validity [implement only where required/possible]
+ *
+ * DokuWiki caches user info in the user's session for the timespan defined
+ * in $conf['auth_security_timeout'].
+ *
+ * This makes sure slow authentication backends do not slow down DokuWiki.
+ * This also means that changes to the user database will not be reflected
+ * on currently logged in users.
+ *
+ * To accommodate for this, the user manager plugin will touch a reference
+ * file whenever a change is submitted. This function compares the filetime
+ * of this reference file with the time stored in the session.
+ *
+ * This reference file mechanism does not reflect changes done directly in
+ * the backend's database through other means than the user manager plugin.
+ *
+ * Fast backends might want to return always false, to force rechecks on
+ * each page load. Others might want to use their own checking here. If
+ * unsure, do not override.
+ *
+ * @param string $user - The username
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function useSessionCache($user){
+ global $conf;
+ return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge'));
+ }
}
//Setup VIM: ex: et ts=2 :
diff --git a/inc/auth/ldap.class.php b/inc/auth/ldap.class.php
index 8eb411995..a6a15ee3d 100644
--- a/inc/auth/ldap.class.php
+++ b/inc/auth/ldap.class.php
@@ -15,7 +15,7 @@ class auth_ldap extends auth_basic {
/**
* Constructor
*/
- function auth_ldap(){
+ function __construct(){
global $conf;
$this->cnf = $conf['auth']['ldap'];
@@ -307,8 +307,6 @@ class auth_ldap extends auth_basic {
}
}
return $result;
-
-
}
/**
@@ -360,7 +358,6 @@ class auth_ldap extends auth_basic {
function _constructPattern($filter) {
$this->_pattern = array();
foreach ($filter as $item => $pattern) {
-// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
$this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
}
}
diff --git a/inc/auth/mysql.class.php b/inc/auth/mysql.class.php
index 653c725a3..9dcf82a87 100644
--- a/inc/auth/mysql.class.php
+++ b/inc/auth/mysql.class.php
@@ -6,7 +6,7 @@
* @author Andreas Gohr <andi@splitbrain.org>
* @author Chris Smith <chris@jalakai.co.uk>
* @author Matthias Grimm <matthias.grimmm@sourceforge.net>
-*/
+ */
class auth_mysql extends auth_basic {
@@ -25,65 +25,74 @@ class auth_mysql extends auth_basic {
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
- function auth_mysql() {
- global $conf;
- $this->cnf = $conf['auth']['mysql'];
-
- if (method_exists($this, 'auth_basic'))
- parent::auth_basic();
-
- if(!function_exists('mysql_connect')) {
- if ($this->cnf['debug'])
- msg("MySQL err: PHP MySQL extension not found.",-1,__LINE__,__FILE__);
- $this->success = false;
- return;
- }
-
- // default to UTF-8, you rarely want something else
- if(!isset($this->cnf['charset'])) $this->cnf['charset'] = 'utf8';
-
- $this->defaultgroup = $conf['defaultgroup'];
-
- // set capabilities based upon config strings set
- if (empty($this->cnf['server']) || empty($this->cnf['user']) ||
- !isset($this->cnf['password']) || empty($this->cnf['database'])){
- if ($this->cnf['debug'])
- msg("MySQL err: insufficient configuration.",-1,__LINE__,__FILE__);
- $this->success = false;
- return;
- }
-
- $this->cando['addUser'] = $this->_chkcnf(array('getUserInfo',
- 'getGroups',
- 'addUser',
- 'getUserID',
- 'getGroupID',
- 'addGroup',
- 'addUserGroup'),true);
- $this->cando['delUser'] = $this->_chkcnf(array('getUserID',
- 'delUser',
- 'delUserRefs'),true);
- $this->cando['modLogin'] = $this->_chkcnf(array('getUserID',
- 'updateUser',
- 'UpdateTarget'),true);
- $this->cando['modPass'] = $this->cando['modLogin'];
- $this->cando['modName'] = $this->cando['modLogin'];
- $this->cando['modMail'] = $this->cando['modLogin'];
- $this->cando['modGroups'] = $this->_chkcnf(array('getUserID',
- 'getGroups',
- 'getGroupID',
- 'addGroup',
- 'addUserGroup',
- 'delGroup',
- 'getGroupID',
- 'delUserGroup'),true);
- /* getGroups is not yet supported
- $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
- 'getGroupID'),false); */
- $this->cando['getUsers'] = $this->_chkcnf(array('getUsers',
- 'getUserInfo',
- 'getGroups'),false);
- $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'),false);
+ function __construct() {
+ global $conf;
+ $this->cnf = $conf['auth']['mysql'];
+
+ if (method_exists($this, 'auth_basic')){
+ parent::__construct();
+ }
+
+ if(!function_exists('mysql_connect')) {
+ if ($this->cnf['debug']){
+ msg("MySQL err: PHP MySQL extension not found.",-1,__LINE__,__FILE__);
+ }
+ $this->success = false;
+ return;
+ }
+
+ // default to UTF-8, you rarely want something else
+ if(!isset($this->cnf['charset'])) $this->cnf['charset'] = 'utf8';
+
+ $this->defaultgroup = $conf['defaultgroup'];
+
+ // set capabilities based upon config strings set
+ if (empty($this->cnf['server']) || empty($this->cnf['user']) ||
+ !isset($this->cnf['password']) || empty($this->cnf['database'])){
+
+ if ($this->cnf['debug']){
+ msg("MySQL err: insufficient configuration.",-1,__LINE__,__FILE__);
+ }
+ $this->success = false;
+ return;
+ }
+
+ $this->cando['addUser'] = $this->_chkcnf(array(
+ 'getUserInfo',
+ 'getGroups',
+ 'addUser',
+ 'getUserID',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup'),true);
+ $this->cando['delUser'] = $this->_chkcnf(array(
+ 'getUserID',
+ 'delUser',
+ 'delUserRefs'),true);
+ $this->cando['modLogin'] = $this->_chkcnf(array(
+ 'getUserID',
+ 'updateUser',
+ 'UpdateTarget'),true);
+ $this->cando['modPass'] = $this->cando['modLogin'];
+ $this->cando['modName'] = $this->cando['modLogin'];
+ $this->cando['modMail'] = $this->cando['modLogin'];
+ $this->cando['modGroups'] = $this->_chkcnf(array(
+ 'getUserID',
+ 'getGroups',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup',
+ 'delGroup',
+ 'getGroupID',
+ 'delUserGroup'),true);
+ /* getGroups is not yet supported
+ $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
+ 'getGroupID'),false); */
+ $this->cando['getUsers'] = $this->_chkcnf(array(
+ 'getUsers',
+ 'getUserInfo',
+ 'getGroups'),false);
+ $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'),false);
}
/**
@@ -93,17 +102,17 @@ class auth_mysql extends auth_basic {
* @return bool
*/
function _chkcnf($keys, $wop=false){
- foreach ($keys as $key){
- if (empty($this->cnf[$key])) return false;
- }
+ foreach ($keys as $key){
+ if (empty($this->cnf[$key])) return false;
+ }
- /* write operation and lock array filled with tables names? */
- if ($wop && (!is_array($this->cnf['TablesToLock']) ||
- !count($this->cnf['TablesToLock']))){
- return false;
- }
+ /* write operation and lock array filled with tables names? */
+ if ($wop && (!is_array($this->cnf['TablesToLock']) ||
+ !count($this->cnf['TablesToLock']))){
+ return false;
+ }
- return true;
+ return true;
}
/**
@@ -122,23 +131,23 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function checkPass($user,$pass){
- $rc = false;
-
- if($this->_openDB()) {
- $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']);
- $sql = str_replace('%{pass}',$this->_escape($pass),$sql);
- $sql = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql);
- $result = $this->_queryDB($sql);
-
- if($result !== false && count($result) == 1) {
- if($this->cnf['forwardClearPass'] == 1)
- $rc = true;
- else
- $rc = auth_verifyPassword($pass,$result[0]['pass']);
+ $rc = false;
+
+ if($this->_openDB()) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']);
+ $sql = str_replace('%{pass}',$this->_escape($pass),$sql);
+ $sql = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql);
+ $result = $this->_queryDB($sql);
+
+ if($result !== false && count($result) == 1) {
+ if($this->cnf['forwardClearPass'] == 1)
+ $rc = true;
+ else
+ $rc = auth_verifyPassword($pass,$result[0]['pass']);
+ }
+ $this->_closeDB();
}
- $this->_closeDB();
- }
- return $rc;
+ return $rc;
}
/**
@@ -156,14 +165,14 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function getUserData($user){
- if($this->_openDB()) {
- $this->_lockTables("READ");
- $info = $this->_getUserInfo($user);
- $this->_unlockTables();
- $this->_closeDB();
- } else
- $info = false;
- return $info;
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $info = $this->_getUserInfo($user);
+ $this->_unlockTables();
+ $this->_closeDB();
+ } else
+ $info = false;
+ return $info;
}
/**
@@ -186,22 +195,22 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function createUser($user,$pwd,$name,$mail,$grps=null){
- if($this->_openDB()) {
- if (($info = $this->_getUserInfo($user)) !== false)
- return false; // user already exists
-
- // set defaultgroup if no groups were given
- if ($grps == null)
- $grps = array($this->defaultgroup);
-
- $this->_lockTables("WRITE");
- $pwd = $this->cnf['forwardClearPass'] ? $pwd : auth_cryptPassword($pwd);
- $rc = $this->_addUser($user,$pwd,$name,$mail,$grps);
- $this->_unlockTables();
- $this->_closeDB();
- if ($rc) return true;
- }
- return null; // return error
+ if($this->_openDB()) {
+ if (($info = $this->_getUserInfo($user)) !== false)
+ return false; // user already exists
+
+ // set defaultgroup if no groups were given
+ if ($grps == null)
+ $grps = array($this->defaultgroup);
+
+ $this->_lockTables("WRITE");
+ $pwd = $this->cnf['forwardClearPass'] ? $pwd : auth_cryptPassword($pwd);
+ $rc = $this->_addUser($user,$pwd,$name,$mail,$grps);
+ $this->_unlockTables();
+ $this->_closeDB();
+ if ($rc) return true;
+ }
+ return null; // return error
}
/**
@@ -233,36 +242,36 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function modifyUser($user, $changes) {
- $rc = false;
+ $rc = false;
- if (!is_array($changes) || !count($changes))
- return true; // nothing to change
+ if (!is_array($changes) || !count($changes))
+ return true; // nothing to change
- if($this->_openDB()) {
- $this->_lockTables("WRITE");
+ if($this->_openDB()) {
+ $this->_lockTables("WRITE");
- if (($uid = $this->_getUserID($user))) {
- $rc = $this->_updateUserInfo($changes, $uid);
+ if (($uid = $this->_getUserID($user))) {
+ $rc = $this->_updateUserInfo($changes, $uid);
- if ($rc && isset($changes['grps']) && $this->cando['modGroups']) {
- $groups = $this->_getGroups($user);
- $grpadd = array_diff($changes['grps'], $groups);
- $grpdel = array_diff($groups, $changes['grps']);
+ if ($rc && isset($changes['grps']) && $this->cando['modGroups']) {
+ $groups = $this->_getGroups($user);
+ $grpadd = array_diff($changes['grps'], $groups);
+ $grpdel = array_diff($groups, $changes['grps']);
- foreach($grpadd as $group)
- if (($this->_addUserToGroup($user, $group, 1)) == false)
- $rc = false;
+ foreach($grpadd as $group)
+ if (($this->_addUserToGroup($user, $group, 1)) == false)
+ $rc = false;
- foreach($grpdel as $group)
- if (($this->_delUserFromGroup($user, $group)) == false)
- $rc = false;
- }
- }
+ foreach($grpdel as $group)
+ if (($this->_delUserFromGroup($user, $group)) == false)
+ $rc = false;
+ }
+ }
- $this->_unlockTables();
- $this->_closeDB();
- }
- return $rc;
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
}
/**
@@ -277,20 +286,20 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function deleteUsers($users) {
- $count = 0;
-
- if($this->_openDB()) {
- if (is_array($users) && count($users)) {
- $this->_lockTables("WRITE");
- foreach ($users as $user) {
- if ($this->_delUser($user))
- $count++;
- }
- $this->_unlockTables();
- }
- $this->_closeDB();
- }
- return $count;
+ $count = 0;
+
+ if($this->_openDB()) {
+ if (is_array($users) && count($users)) {
+ $this->_lockTables("WRITE");
+ foreach ($users as $user) {
+ if ($this->_delUser($user))
+ $count++;
+ }
+ $this->_unlockTables();
+ }
+ $this->_closeDB();
+ }
+ return $count;
}
/**
@@ -304,23 +313,23 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function getUserCount($filter=array()) {
- $rc = 0;
-
- if($this->_openDB()) {
- $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
-
- if ($this->dbver >= 4) {
- $sql = substr($sql, 6); /* remove 'SELECT' or 'select' */
- $sql = "SELECT SQL_CALC_FOUND_ROWS".$sql." LIMIT 1";
- $this->_queryDB($sql);
- $result = $this->_queryDB("SELECT FOUND_ROWS()");
- $rc = $result[0]['FOUND_ROWS()'];
- } else if (($result = $this->_queryDB($sql)))
- $rc = count($result);
-
- $this->_closeDB();
- }
- return $rc;
+ $rc = 0;
+
+ if($this->_openDB()) {
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+
+ if ($this->dbver >= 4) {
+ $sql = substr($sql, 6); /* remove 'SELECT' or 'select' */
+ $sql = "SELECT SQL_CALC_FOUND_ROWS".$sql." LIMIT 1";
+ $this->_queryDB($sql);
+ $result = $this->_queryDB("SELECT FOUND_ROWS()");
+ $rc = $result[0]['FOUND_ROWS()'];
+ } else if (($result = $this->_queryDB($sql)))
+ $rc = count($result);
+
+ $this->_closeDB();
+ }
+ return $rc;
}
/**
@@ -334,24 +343,24 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function retrieveUsers($first=0,$limit=10,$filter=array()) {
- $out = array();
-
- if($this->_openDB()) {
- $this->_lockTables("READ");
- $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
- $sql .= " ".$this->cnf['SortOrder']." LIMIT $first, $limit";
- $result = $this->_queryDB($sql);
+ $out = array();
+
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+ $sql .= " ".$this->cnf['SortOrder']." LIMIT $first, $limit";
+ $result = $this->_queryDB($sql);
+
+ if (!empty($result)) {
+ foreach ($result as $user)
+ if (($info = $this->_getUserInfo($user['user'])))
+ $out[$user['user']] = $info;
+ }
- if (!empty($result)) {
- foreach ($result as $user)
- if (($info = $this->_getUserInfo($user['user'])))
- $out[$user['user']] = $info;
+ $this->_unlockTables();
+ $this->_closeDB();
}
-
- $this->_unlockTables();
- $this->_closeDB();
- }
- return $out;
+ return $out;
}
/**
@@ -364,15 +373,15 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function joinGroup($user, $group) {
- $rc = false;
-
- if ($this->_openDB()) {
- $this->_lockTables("WRITE");
- $rc = $this->_addUserToGroup($user, $group);
- $this->_unlockTables();
- $this->_closeDB();
- }
- return $rc;
+ $rc = false;
+
+ if ($this->_openDB()) {
+ $this->_lockTables("WRITE");
+ $rc = $this->_addUserToGroup($user, $group);
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
}
/**
@@ -385,16 +394,16 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function leaveGroup($user, $group) {
- $rc = false;
-
- if ($this->_openDB()) {
- $this->_lockTables("WRITE");
- $uid = $this->_getUserID($user);
- $rc = $this->_delUserFromGroup($user, $group);
- $this->_unlockTables();
- $this->_closeDB();
- }
- return $rc;
+ $rc = false;
+
+ if ($this->_openDB()) {
+ $this->_lockTables("WRITE");
+ $uid = $this->_getUserID($user);
+ $rc = $this->_delUserFromGroup($user, $group);
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
}
/**
@@ -422,36 +431,36 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _addUserToGroup($user, $group, $force=0) {
- $newgroup = 0;
-
- if (($this->dbcon) && ($user)) {
- $gid = $this->_getGroupID($group);
- if (!$gid) {
- if ($force) { // create missing groups
- $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['addGroup']);
- $gid = $this->_modifyDB($sql);
- $newgroup = 1; // group newly created
- }
- if (!$gid) return false; // group didn't exist and can't be created
- }
-
- $sql = $this->cnf['addUserGroup'];
- if(strpos($sql,'%{uid}') !== false){
- $uid = $this->_getUserID($user);
- $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
- }
- $sql = str_replace('%{user}', $this->_escape($user),$sql);
- $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
- $sql = str_replace('%{group}',$this->_escape($group),$sql);
- if ($this->_modifyDB($sql) !== false) return true;
+ $newgroup = 0;
+
+ if (($this->dbcon) && ($user)) {
+ $gid = $this->_getGroupID($group);
+ if (!$gid) {
+ if ($force) { // create missing groups
+ $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['addGroup']);
+ $gid = $this->_modifyDB($sql);
+ $newgroup = 1; // group newly created
+ }
+ if (!$gid) return false; // group didn't exist and can't be created
+ }
- if ($newgroup) { // remove previously created group on error
- $sql = str_replace('%{gid}', $this->_escape($gid),$this->cnf['delGroup']);
- $sql = str_replace('%{group}',$this->_escape($group),$sql);
- $this->_modifyDB($sql);
+ $sql = $this->cnf['addUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
+ }
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ if ($this->_modifyDB($sql) !== false) return true;
+
+ if ($newgroup) { // remove previously created group on error
+ $sql = str_replace('%{gid}', $this->_escape($gid),$this->cnf['delGroup']);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ $this->_modifyDB($sql);
+ }
}
- }
- return false;
+ return false;
}
/**
@@ -464,24 +473,23 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _delUserFromGroup($user, $group) {
- $rc = false;
+ $rc = false;
-
- if (($this->dbcon) && ($user)) {
- $sql = $this->cnf['delUserGroup'];
- if(strpos($sql,'%{uid}') !== false){
- $uid = $this->_getUserID($user);
- $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
- }
- $gid = $this->_getGroupID($group);
- if ($gid) {
- $sql = str_replace('%{user}', $this->_escape($user),$sql);
- $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
- $sql = str_replace('%{group}',$this->_escape($group),$sql);
- $rc = $this->_modifyDB($sql) == 0 ? true : false;
+ if (($this->dbcon) && ($user)) {
+ $sql = $this->cnf['delUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
+ }
+ $gid = $this->_getGroupID($group);
+ if ($gid) {
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ $rc = $this->_modifyDB($sql) == 0 ? true : false;
+ }
}
- }
- return $rc;
+ return $rc;
}
/**
@@ -498,19 +506,19 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _getGroups($user) {
- $groups = array();
+ $groups = array();
- if($this->dbcon) {
- $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getGroups']);
- $result = $this->_queryDB($sql);
+ if($this->dbcon) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getGroups']);
+ $result = $this->_queryDB($sql);
- if($result !== false && count($result)) {
- foreach($result as $row)
- $groups[] = $row['group'];
+ if($result !== false && count($result)) {
+ foreach($result as $row)
+ $groups[] = $row['group'];
+ }
+ return $groups;
}
- return $groups;
- }
- return false;
+ return false;
}
/**
@@ -526,12 +534,12 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _getUserID($user) {
- if($this->dbcon) {
- $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserID']);
- $result = $this->_queryDB($sql);
- return $result === false ? false : $result[0]['id'];
- }
- return false;
+ if($this->dbcon) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserID']);
+ $result = $this->_queryDB($sql);
+ return $result === false ? false : $result[0]['id'];
+ }
+ return false;
}
/**
@@ -553,33 +561,33 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _addUser($user,$pwd,$name,$mail,$grps){
- if($this->dbcon && is_array($grps)) {
- $sql = str_replace('%{user}', $this->_escape($user),$this->cnf['addUser']);
- $sql = str_replace('%{pass}', $this->_escape($pwd),$sql);
- $sql = str_replace('%{name}', $this->_escape($name),$sql);
- $sql = str_replace('%{email}',$this->_escape($mail),$sql);
- $uid = $this->_modifyDB($sql);
-
- if ($uid) {
- foreach($grps as $group) {
- $gid = $this->_addUserToGroup($user, $group, 1);
- if ($gid === false) break;
- }
-
- if ($gid) return true;
- else {
- /* remove the new user and all group relations if a group can't
- * be assigned. Newly created groups will remain in the database
- * and won't be removed. This might create orphaned groups but
- * is not a big issue so we ignore this problem here.
- */
- $this->_delUser($user);
- if ($this->cnf['debug'])
- msg ("MySQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
- }
+ if($this->dbcon && is_array($grps)) {
+ $sql = str_replace('%{user}', $this->_escape($user),$this->cnf['addUser']);
+ $sql = str_replace('%{pass}', $this->_escape($pwd),$sql);
+ $sql = str_replace('%{name}', $this->_escape($name),$sql);
+ $sql = str_replace('%{email}',$this->_escape($mail),$sql);
+ $uid = $this->_modifyDB($sql);
+
+ if ($uid) {
+ foreach($grps as $group) {
+ $gid = $this->_addUserToGroup($user, $group, 1);
+ if ($gid === false) break;
+ }
+
+ if ($gid) return true;
+ else {
+ /* remove the new user and all group relations if a group can't
+ * be assigned. Newly created groups will remain in the database
+ * and won't be removed. This might create orphaned groups but
+ * is not a big issue so we ignore this problem here.
+ */
+ $this->_delUser($user);
+ if ($this->cnf['debug'])
+ msg ("MySQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
+ }
+ }
}
- }
- return false;
+ return false;
}
/**
@@ -595,18 +603,18 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _delUser($user) {
- if($this->dbcon) {
- $uid = $this->_getUserID($user);
- if ($uid) {
- $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUserRefs']);
- $this->_modifyDB($sql);
- $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUser']);
- $sql = str_replace('%{user}', $this->_escape($user),$sql);
- $this->_modifyDB($sql);
- return true;
- }
- }
- return false;
+ if($this->dbcon) {
+ $uid = $this->_getUserID($user);
+ if ($uid) {
+ $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUserRefs']);
+ $this->_modifyDB($sql);
+ $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUser']);
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $this->_modifyDB($sql);
+ return true;
+ }
+ }
+ return false;
}
/**
@@ -623,14 +631,14 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _getUserInfo($user){
- $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserInfo']);
- $result = $this->_queryDB($sql);
- if($result !== false && count($result)) {
- $info = $result[0];
- $info['grps'] = $this->_getGroups($user);
- return $info;
- }
- return false;
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserInfo']);
+ $result = $this->_queryDB($sql);
+ if($result !== false && count($result)) {
+ $info = $result[0];
+ $info['grps'] = $this->_getGroups($user);
+ return $info;
+ }
+ return false;
}
/**
@@ -653,43 +661,43 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _updateUserInfo($changes, $uid) {
- $sql = $this->cnf['updateUser']." ";
- $cnt = 0;
- $err = 0;
-
- if($this->dbcon) {
- foreach ($changes as $item => $value) {
- if ($item == 'user') {
- if (($this->_getUserID($changes['user']))) {
- $err = 1; /* new username already exists */
- break; /* abort update */
+ $sql = $this->cnf['updateUser']." ";
+ $cnt = 0;
+ $err = 0;
+
+ if($this->dbcon) {
+ foreach ($changes as $item => $value) {
+ if ($item == 'user') {
+ if (($this->_getUserID($changes['user']))) {
+ $err = 1; /* new username already exists */
+ break; /* abort update */
+ }
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{user}',$value,$this->cnf['UpdateLogin']);
+ } else if ($item == 'name') {
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{name}',$value,$this->cnf['UpdateName']);
+ } else if ($item == 'pass') {
+ if (!$this->cnf['forwardClearPass'])
+ $value = auth_cryptPassword($value);
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{pass}',$value,$this->cnf['UpdatePass']);
+ } else if ($item == 'mail') {
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{email}',$value,$this->cnf['UpdateEmail']);
+ }
}
- if ($cnt++ > 0) $sql .= ", ";
- $sql .= str_replace('%{user}',$value,$this->cnf['UpdateLogin']);
- } else if ($item == 'name') {
- if ($cnt++ > 0) $sql .= ", ";
- $sql .= str_replace('%{name}',$value,$this->cnf['UpdateName']);
- } else if ($item == 'pass') {
- if (!$this->cnf['forwardClearPass'])
- $value = auth_cryptPassword($value);
- if ($cnt++ > 0) $sql .= ", ";
- $sql .= str_replace('%{pass}',$value,$this->cnf['UpdatePass']);
- } else if ($item == 'mail') {
- if ($cnt++ > 0) $sql .= ", ";
- $sql .= str_replace('%{email}',$value,$this->cnf['UpdateEmail']);
- }
- }
-
- if ($err == 0) {
- if ($cnt > 0) {
- $sql .= " ".str_replace('%{uid}', $uid, $this->cnf['UpdateTarget']);
- if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp.
- $this->_modifyDB($sql);
- }
- return true;
- }
- }
- return false;
+
+ if ($err == 0) {
+ if ($cnt > 0) {
+ $sql .= " ".str_replace('%{uid}', $uid, $this->cnf['UpdateTarget']);
+ if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp.
+ $this->_modifyDB($sql);
+ }
+ return true;
+ }
+ }
+ return false;
}
/**
@@ -705,12 +713,12 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _getGroupID($group) {
- if($this->dbcon) {
- $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['getGroupID']);
- $result = $this->_queryDB($sql);
- return $result === false ? false : $result[0]['id'];
- }
- return false;
+ if($this->dbcon) {
+ $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['getGroupID']);
+ $result = $this->_queryDB($sql);
+ return $result === false ? false : $result[0]['id'];
+ }
+ return false;
}
/**
@@ -723,32 +731,32 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _openDB() {
- if (!$this->dbcon) {
- $con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']);
- if ($con) {
- if ((mysql_select_db($this->cnf['database'], $con))) {
- if ((preg_match("/^(\d+)\.(\d+)\.(\d+).*/", mysql_get_server_info ($con), $result)) == 1) {
- $this->dbver = $result[1];
- $this->dbrev = $result[2];
- $this->dbsub = $result[3];
- }
- $this->dbcon = $con;
- if(!empty($this->cnf['charset'])){
- mysql_query('SET CHARACTER SET "' . $this->cnf['charset'] . '"', $con);
- }
- return true; // connection and database successfully opened
- } else {
- mysql_close ($con);
- if ($this->cnf['debug'])
- msg("MySQL err: No access to database {$this->cnf['database']}.",-1,__LINE__,__FILE__);
- }
- } else if ($this->cnf['debug'])
- msg ("MySQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
- -1,__LINE__,__FILE__);
-
- return false; // connection failed
- }
- return true; // connection already open
+ if (!$this->dbcon) {
+ $con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']);
+ if ($con) {
+ if ((mysql_select_db($this->cnf['database'], $con))) {
+ if ((preg_match("/^(\d+)\.(\d+)\.(\d+).*/", mysql_get_server_info ($con), $result)) == 1) {
+ $this->dbver = $result[1];
+ $this->dbrev = $result[2];
+ $this->dbsub = $result[3];
+ }
+ $this->dbcon = $con;
+ if(!empty($this->cnf['charset'])){
+ mysql_query('SET CHARACTER SET "' . $this->cnf['charset'] . '"', $con);
+ }
+ return true; // connection and database successfully opened
+ } else {
+ mysql_close ($con);
+ if ($this->cnf['debug'])
+ msg("MySQL err: No access to database {$this->cnf['database']}.",-1,__LINE__,__FILE__);
+ }
+ } else if ($this->cnf['debug'])
+ msg ("MySQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
+ -1,__LINE__,__FILE__);
+
+ return false; // connection failed
+ }
+ return true; // connection already open
}
/**
@@ -757,10 +765,10 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _closeDB() {
- if ($this->dbcon) {
- mysql_close ($this->dbcon);
- $this->dbcon = 0;
- }
+ if ($this->dbcon) {
+ mysql_close ($this->dbcon);
+ $this->dbcon = 0;
+ }
}
/**
@@ -776,23 +784,23 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _queryDB($query) {
- if($this->cnf['debug'] >= 2){
- msg('MySQL query: '.hsc($query),0,__LINE__,__FILE__);
- }
-
- $resultarray = array();
- if ($this->dbcon) {
- $result = @mysql_query($query,$this->dbcon);
- if ($result) {
- while (($t = mysql_fetch_assoc($result)) !== false)
- $resultarray[]=$t;
- mysql_free_result ($result);
- return $resultarray;
- }
- if ($this->cnf['debug'])
- msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
- }
- return false;
+ if($this->cnf['debug'] >= 2){
+ msg('MySQL query: '.hsc($query),0,__LINE__,__FILE__);
+ }
+
+ $resultarray = array();
+ if ($this->dbcon) {
+ $result = @mysql_query($query,$this->dbcon);
+ if ($result) {
+ while (($t = mysql_fetch_assoc($result)) !== false)
+ $resultarray[]=$t;
+ mysql_free_result ($result);
+ return $resultarray;
+ }
+ if ($this->cnf['debug'])
+ msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
}
/**
@@ -807,16 +815,16 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _modifyDB($query) {
- if ($this->dbcon) {
- $result = @mysql_query($query,$this->dbcon);
- if ($result) {
- $rc = mysql_insert_id($this->dbcon); //give back ID on insert
- if ($rc !== false) return $rc;
- }
- if ($this->cnf['debug'])
- msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
- }
- return false;
+ if ($this->dbcon) {
+ $result = @mysql_query($query,$this->dbcon);
+ if ($result) {
+ $rc = mysql_insert_id($this->dbcon); //give back ID on insert
+ if ($rc !== false) return $rc;
+ }
+ if ($this->cnf['debug'])
+ msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
}
/**
@@ -838,21 +846,21 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _lockTables($mode) {
- if ($this->dbcon) {
- if (is_array($this->cnf['TablesToLock']) && !empty($this->cnf['TablesToLock'])) {
- if ($mode == "READ" || $mode == "WRITE") {
- $sql = "LOCK TABLES ";
- $cnt = 0;
- foreach ($this->cnf['TablesToLock'] as $table) {
- if ($cnt++ != 0) $sql .= ", ";
- $sql .= "$table $mode";
+ if ($this->dbcon) {
+ if (is_array($this->cnf['TablesToLock']) && !empty($this->cnf['TablesToLock'])) {
+ if ($mode == "READ" || $mode == "WRITE") {
+ $sql = "LOCK TABLES ";
+ $cnt = 0;
+ foreach ($this->cnf['TablesToLock'] as $table) {
+ if ($cnt++ != 0) $sql .= ", ";
+ $sql .= "$table $mode";
+ }
+ $this->_modifyDB($sql);
+ return true;
+ }
}
- $this->_modifyDB($sql);
- return true;
- }
}
- }
- return false;
+ return false;
}
/**
@@ -862,11 +870,11 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _unlockTables() {
- if ($this->dbcon) {
- $this->_modifyDB("UNLOCK TABLES");
- return true;
- }
- return false;
+ if ($this->dbcon) {
+ $this->_modifyDB("UNLOCK TABLES");
+ return true;
+ }
+ return false;
}
/**
@@ -882,38 +890,38 @@ class auth_mysql extends auth_basic {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _createSQLFilter($sql, $filter) {
- $SQLfilter = "";
- $cnt = 0;
-
- if ($this->dbcon) {
- foreach ($filter as $item => $pattern) {
- $tmp = '%'.$this->_escape($pattern).'%';
- if ($item == 'user') {
- if ($cnt++ > 0) $SQLfilter .= " AND ";
- $SQLfilter .= str_replace('%{user}',$tmp,$this->cnf['FilterLogin']);
- } else if ($item == 'name') {
- if ($cnt++ > 0) $SQLfilter .= " AND ";
- $SQLfilter .= str_replace('%{name}',$tmp,$this->cnf['FilterName']);
- } else if ($item == 'mail') {
- if ($cnt++ > 0) $SQLfilter .= " AND ";
- $SQLfilter .= str_replace('%{email}',$tmp,$this->cnf['FilterEmail']);
- } else if ($item == 'grps') {
- if ($cnt++ > 0) $SQLfilter .= " AND ";
- $SQLfilter .= str_replace('%{group}',$tmp,$this->cnf['FilterGroup']);
- }
- }
-
- // we have to check SQLfilter here and must not use $cnt because if
- // any of cnf['Filter????'] is not defined, a malformed SQL string
- // would be generated.
-
- if (strlen($SQLfilter)) {
- $glue = strpos(strtolower($sql),"where") ? " AND " : " WHERE ";
- $sql = $sql.$glue.$SQLfilter;
- }
- }
-
- return $sql;
+ $SQLfilter = "";
+ $cnt = 0;
+
+ if ($this->dbcon) {
+ foreach ($filter as $item => $pattern) {
+ $tmp = '%'.$this->_escape($pattern).'%';
+ if ($item == 'user') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{user}',$tmp,$this->cnf['FilterLogin']);
+ } else if ($item == 'name') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{name}',$tmp,$this->cnf['FilterName']);
+ } else if ($item == 'mail') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{email}',$tmp,$this->cnf['FilterEmail']);
+ } else if ($item == 'grps') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{group}',$tmp,$this->cnf['FilterGroup']);
+ }
+ }
+
+ // we have to check SQLfilter here and must not use $cnt because if
+ // any of cnf['Filter????'] is not defined, a malformed SQL string
+ // would be generated.
+
+ if (strlen($SQLfilter)) {
+ $glue = strpos(strtolower($sql),"where") ? " AND " : " WHERE ";
+ $sql = $sql.$glue.$SQLfilter;
+ }
+ }
+
+ return $sql;
}
/**
@@ -924,15 +932,15 @@ class auth_mysql extends auth_basic {
* @param boolean $like Escape wildcard chars as well?
*/
function _escape($string,$like=false){
- if($this->dbcon){
- $string = mysql_real_escape_string($string, $this->dbcon);
- }else{
- $string = addslashes($string);
- }
- if($like){
- $string = addcslashes($string,'%_');
- }
- return $string;
+ if($this->dbcon){
+ $string = mysql_real_escape_string($string, $this->dbcon);
+ }else{
+ $string = addslashes($string);
+ }
+ if($like){
+ $string = addcslashes($string,'%_');
+ }
+ return $string;
}
}
diff --git a/inc/auth/pgsql.class.php b/inc/auth/pgsql.class.php
index cf8bf7600..b422b100d 100644
--- a/inc/auth/pgsql.class.php
+++ b/inc/auth/pgsql.class.php
@@ -9,7 +9,7 @@
* @author Andreas Gohr <andi@splitbrain.org>
* @author Chris Smith <chris@jalakai.co.uk>
* @author Matthias Grimm <matthias.grimmm@sourceforge.net>
-*/
+ */
require_once(DOKU_INC.'inc/auth/mysql.class.php');
@@ -24,63 +24,72 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
* @author Andreas Gohr <andi@splitbrain.org>
*/
- function auth_pgsql() {
- global $conf;
- $this->cnf = $conf['auth']['pgsql'];
- if(!$this->cnf['port']) $this->cnf['port'] = 5432;
-
- if (method_exists($this, 'auth_basic'))
- parent::auth_basic();
-
- if(!function_exists('pg_connect')) {
- if ($this->cnf['debug'])
- msg("PgSQL err: PHP Postgres extension not found.",-1);
- $this->success = false;
- return;
- }
-
- $this->defaultgroup = $conf['defaultgroup'];
-
- // set capabilities based upon config strings set
- if (empty($this->cnf['user']) ||
- empty($this->cnf['password']) || empty($this->cnf['database'])){
- if ($this->cnf['debug'])
- msg("PgSQL err: insufficient configuration.",-1,__LINE__,__FILE__);
- $this->success = false;
- return;
- }
-
- $this->cando['addUser'] = $this->_chkcnf(array('getUserInfo',
- 'getGroups',
- 'addUser',
- 'getUserID',
- 'getGroupID',
- 'addGroup',
- 'addUserGroup'));
- $this->cando['delUser'] = $this->_chkcnf(array('getUserID',
- 'delUser',
- 'delUserRefs'));
- $this->cando['modLogin'] = $this->_chkcnf(array('getUserID',
- 'updateUser',
- 'UpdateTarget'));
- $this->cando['modPass'] = $this->cando['modLogin'];
- $this->cando['modName'] = $this->cando['modLogin'];
- $this->cando['modMail'] = $this->cando['modLogin'];
- $this->cando['modGroups'] = $this->_chkcnf(array('getUserID',
- 'getGroups',
- 'getGroupID',
- 'addGroup',
- 'addUserGroup',
- 'delGroup',
- 'getGroupID',
- 'delUserGroup'));
- /* getGroups is not yet supported
- $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
- 'getGroupID')); */
- $this->cando['getUsers'] = $this->_chkcnf(array('getUsers',
- 'getUserInfo',
- 'getGroups'));
- $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'));
+ function __construct() {
+ global $conf;
+ $this->cnf = $conf['auth']['pgsql'];
+ if(!$this->cnf['port']){
+ $this->cnf['port'] = 5432;
+ }
+
+ if (method_exists($this, 'auth_basic')){
+ parent::auth_basic();
+ }
+
+ if(!function_exists('pg_connect')) {
+ if ($this->cnf['debug'])
+ msg("PgSQL err: PHP Postgres extension not found.",-1);
+ $this->success = false;
+ return;
+ }
+
+ $this->defaultgroup = $conf['defaultgroup'];
+
+ // set capabilities based upon config strings set
+ if (empty($this->cnf['user']) ||
+ empty($this->cnf['password']) || empty($this->cnf['database'])){
+ if ($this->cnf['debug']){
+ msg("PgSQL err: insufficient configuration.",-1,__LINE__,__FILE__);
+ }
+ $this->success = false;
+ return;
+ }
+
+ $this->cando['addUser'] = $this->_chkcnf(array(
+ 'getUserInfo',
+ 'getGroups',
+ 'addUser',
+ 'getUserID',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup'));
+ $this->cando['delUser'] = $this->_chkcnf(array(
+ 'getUserID',
+ 'delUser',
+ 'delUserRefs'));
+ $this->cando['modLogin'] = $this->_chkcnf(array(
+ 'getUserID',
+ 'updateUser',
+ 'UpdateTarget'));
+ $this->cando['modPass'] = $this->cando['modLogin'];
+ $this->cando['modName'] = $this->cando['modLogin'];
+ $this->cando['modMail'] = $this->cando['modLogin'];
+ $this->cando['modGroups'] = $this->_chkcnf(array(
+ 'getUserID',
+ 'getGroups',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup',
+ 'delGroup',
+ 'getGroupID',
+ 'delUserGroup'));
+ /* getGroups is not yet supported
+ $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
+ 'getGroupID')); */
+ $this->cando['getUsers'] = $this->_chkcnf(array(
+ 'getUsers',
+ 'getUserInfo',
+ 'getGroups'));
+ $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'));
}
/**
@@ -90,10 +99,10 @@ class auth_pgsql extends auth_mysql {
* @return bool
*/
function _chkcnf($keys, $wop=false){
- foreach ($keys as $key){
- if (empty($this->cnf[$key])) return false;
- }
- return true;
+ foreach ($keys as $key){
+ if (empty($this->cnf[$key])) return false;
+ }
+ return true;
}
// @inherit function checkPass($user,$pass)
@@ -114,18 +123,18 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function getUserCount($filter=array()) {
- $rc = 0;
+ $rc = 0;
- if($this->_openDB()) {
- $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+ if($this->_openDB()) {
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
- // no equivalent of SQL_CALC_FOUND_ROWS in pgsql?
- if (($result = $this->_queryDB($sql))){
- $rc = count($result);
+ // no equivalent of SQL_CALC_FOUND_ROWS in pgsql?
+ if (($result = $this->_queryDB($sql))){
+ $rc = count($result);
+ }
+ $this->_closeDB();
}
- $this->_closeDB();
- }
- return $rc;
+ return $rc;
}
/**
@@ -139,22 +148,22 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function retrieveUsers($first=0,$limit=10,$filter=array()) {
- $out = array();
-
- if($this->_openDB()) {
- $this->_lockTables("READ");
- $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
- $sql .= " ".$this->cnf['SortOrder']." LIMIT $limit OFFSET $first";
- $result = $this->_queryDB($sql);
-
- foreach ($result as $user)
- if (($info = $this->_getUserInfo($user['user'])))
- $out[$user['user']] = $info;
-
- $this->_unlockTables();
- $this->_closeDB();
- }
- return $out;
+ $out = array();
+
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+ $sql .= " ".$this->cnf['SortOrder']." LIMIT $limit OFFSET $first";
+ $result = $this->_queryDB($sql);
+
+ foreach ($result as $user)
+ if (($info = $this->_getUserInfo($user['user'])))
+ $out[$user['user']] = $info;
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $out;
}
// @inherit function joinGroup($user, $group)
@@ -177,38 +186,38 @@ class auth_pgsql extends auth_mysql {
* @author Andreas Gohr <andi@splitbrain.org>
*/
function _addUserToGroup($user, $group, $force=0) {
- $newgroup = 0;
-
- if (($this->dbcon) && ($user)) {
- $gid = $this->_getGroupID($group);
- if (!$gid) {
- if ($force) { // create missing groups
- $sql = str_replace('%{group}',addslashes($group),$this->cnf['addGroup']);
- $this->_modifyDB($sql);
- //group should now exists try again to fetch it
- $gid = $this->_getGroupID($group);
- $newgroup = 1; // group newly created
- }
- }
- if (!$gid) return false; // group didn't exist and can't be created
+ $newgroup = 0;
- $sql = $this->cnf['addUserGroup'];
- if(strpos($sql,'%{uid}') !== false){
- $uid = $this->_getUserID($user);
- $sql = str_replace('%{uid}', addslashes($uid), $sql);
- }
- $sql = str_replace('%{user}', addslashes($user),$sql);
- $sql = str_replace('%{gid}', addslashes($gid),$sql);
- $sql = str_replace('%{group}',addslashes($group),$sql);
- if ($this->_modifyDB($sql) !== false) return true;
-
- if ($newgroup) { // remove previously created group on error
- $sql = str_replace('%{gid}', addslashes($gid),$this->cnf['delGroup']);
- $sql = str_replace('%{group}',addslashes($group),$sql);
- $this->_modifyDB($sql);
+ if (($this->dbcon) && ($user)) {
+ $gid = $this->_getGroupID($group);
+ if (!$gid) {
+ if ($force) { // create missing groups
+ $sql = str_replace('%{group}',addslashes($group),$this->cnf['addGroup']);
+ $this->_modifyDB($sql);
+ //group should now exists try again to fetch it
+ $gid = $this->_getGroupID($group);
+ $newgroup = 1; // group newly created
+ }
+ }
+ if (!$gid) return false; // group didn't exist and can't be created
+
+ $sql = $this->cnf['addUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', addslashes($uid), $sql);
+ }
+ $sql = str_replace('%{user}', addslashes($user),$sql);
+ $sql = str_replace('%{gid}', addslashes($gid),$sql);
+ $sql = str_replace('%{group}',addslashes($group),$sql);
+ if ($this->_modifyDB($sql) !== false) return true;
+
+ if ($newgroup) { // remove previously created group on error
+ $sql = str_replace('%{gid}', addslashes($gid),$this->cnf['delGroup']);
+ $sql = str_replace('%{group}',addslashes($group),$sql);
+ $this->_modifyDB($sql);
+ }
}
- }
- return false;
+ return false;
}
// @inherit function _delUserFromGroup($user $group)
@@ -234,37 +243,37 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _addUser($user,$pwd,$name,$mail,$grps){
- if($this->dbcon && is_array($grps)) {
- $sql = str_replace('%{user}', addslashes($user),$this->cnf['addUser']);
- $sql = str_replace('%{pass}', addslashes($pwd),$sql);
- $sql = str_replace('%{name}', addslashes($name),$sql);
- $sql = str_replace('%{email}',addslashes($mail),$sql);
- if($this->_modifyDB($sql)){
- $uid = $this->_getUserID($user);
- }else{
- return false;
+ if($this->dbcon && is_array($grps)) {
+ $sql = str_replace('%{user}', addslashes($user),$this->cnf['addUser']);
+ $sql = str_replace('%{pass}', addslashes($pwd),$sql);
+ $sql = str_replace('%{name}', addslashes($name),$sql);
+ $sql = str_replace('%{email}',addslashes($mail),$sql);
+ if($this->_modifyDB($sql)){
+ $uid = $this->_getUserID($user);
+ }else{
+ return false;
+ }
+
+ if ($uid) {
+ foreach($grps as $group) {
+ $gid = $this->_addUserToGroup($user, $group, 1);
+ if ($gid === false) break;
+ }
+
+ if ($gid) return true;
+ else {
+ /* remove the new user and all group relations if a group can't
+ * be assigned. Newly created groups will remain in the database
+ * and won't be removed. This might create orphaned groups but
+ * is not a big issue so we ignore this problem here.
+ */
+ $this->_delUser($user);
+ if ($this->cnf['debug'])
+ msg("PgSQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
+ }
+ }
}
-
- if ($uid) {
- foreach($grps as $group) {
- $gid = $this->_addUserToGroup($user, $group, 1);
- if ($gid === false) break;
- }
-
- if ($gid) return true;
- else {
- /* remove the new user and all group relations if a group can't
- * be assigned. Newly created groups will remain in the database
- * and won't be removed. This might create orphaned groups but
- * is not a big issue so we ignore this problem here.
- */
- $this->_delUser($user);
- if ($this->cnf['debug'])
- msg("PgSQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
- }
- }
- }
- return false;
+ return false;
}
// @inherit function _delUser($user)
@@ -282,24 +291,24 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _openDB() {
- if (!$this->dbcon) {
- $dsn = $this->cnf['server'] ? 'host='.$this->cnf['server'] : '';
- $dsn .= ' port='.$this->cnf['port'];
- $dsn .= ' dbname='.$this->cnf['database'];
- $dsn .= ' user='.$this->cnf['user'];
- $dsn .= ' password='.$this->cnf['password'];
-
- $con = @pg_connect($dsn);
- if ($con) {
- $this->dbcon = $con;
- return true; // connection and database successfully opened
- } else if ($this->cnf['debug']){
- msg ("PgSQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
- -1,__LINE__,__FILE__);
+ if (!$this->dbcon) {
+ $dsn = $this->cnf['server'] ? 'host='.$this->cnf['server'] : '';
+ $dsn .= ' port='.$this->cnf['port'];
+ $dsn .= ' dbname='.$this->cnf['database'];
+ $dsn .= ' user='.$this->cnf['user'];
+ $dsn .= ' password='.$this->cnf['password'];
+
+ $con = @pg_connect($dsn);
+ if ($con) {
+ $this->dbcon = $con;
+ return true; // connection and database successfully opened
+ } else if ($this->cnf['debug']){
+ msg ("PgSQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
+ -1,__LINE__,__FILE__);
+ }
+ return false; // connection failed
}
- return false; // connection failed
- }
- return true; // connection already open
+ return true; // connection already open
}
/**
@@ -308,10 +317,10 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _closeDB() {
- if ($this->dbcon) {
- pg_close ($this->dbcon);
- $this->dbcon = 0;
- }
+ if ($this->dbcon) {
+ pg_close ($this->dbcon);
+ $this->dbcon = 0;
+ }
}
/**
@@ -327,17 +336,17 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _queryDB($query) {
- if ($this->dbcon) {
- $result = @pg_query($this->dbcon,$query);
- if ($result) {
- while (($t = pg_fetch_assoc($result)) !== false)
- $resultarray[]=$t;
- pg_free_result ($result);
- return $resultarray;
- }elseif ($this->cnf['debug'])
- msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
- }
- return false;
+ if ($this->dbcon) {
+ $result = @pg_query($this->dbcon,$query);
+ if ($result) {
+ while (($t = pg_fetch_assoc($result)) !== false)
+ $resultarray[]=$t;
+ pg_free_result ($result);
+ return $resultarray;
+ }elseif ($this->cnf['debug'])
+ msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
}
/**
@@ -347,17 +356,17 @@ class auth_pgsql extends auth_mysql {
* @author Andreas Gohr
*/
function _modifyDB($query) {
- if ($this->dbcon) {
- $result = @pg_query($this->dbcon,$query);
- if ($result) {
- pg_free_result ($result);
- return true;
- }
- if ($this->cnf['debug']){
- msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
+ if ($this->dbcon) {
+ $result = @pg_query($this->dbcon,$query);
+ if ($result) {
+ pg_free_result ($result);
+ return true;
+ }
+ if ($this->cnf['debug']){
+ msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
}
- }
- return false;
+ return false;
}
/**
@@ -367,11 +376,11 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _lockTables($mode) {
- if ($this->dbcon) {
- $this->_modifyDB('BEGIN');
- return true;
- }
- return false;
+ if ($this->dbcon) {
+ $this->_modifyDB('BEGIN');
+ return true;
+ }
+ return false;
}
/**
@@ -380,11 +389,11 @@ class auth_pgsql extends auth_mysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
function _unlockTables() {
- if ($this->dbcon) {
- $this->_modifyDB('COMMIT');
- return true;
- }
- return false;
+ if ($this->dbcon) {
+ $this->_modifyDB('COMMIT');
+ return true;
+ }
+ return false;
}
// @inherit function _createSQLFilter($sql, $filter)
@@ -398,11 +407,11 @@ class auth_pgsql extends auth_mysql {
* @param boolean $like Escape wildcard chars as well?
*/
function _escape($string,$like=false){
- $string = pg_escape_string($string);
- if($like){
- $string = addcslashes($string,'%_');
- }
- return $string;
+ $string = pg_escape_string($string);
+ if($like){
+ $string = addcslashes($string,'%_');
+ }
+ return $string;
}
}
diff --git a/inc/auth/plain.class.php b/inc/auth/plain.class.php
index 3941190e9..e682d2522 100644
--- a/inc/auth/plain.class.php
+++ b/inc/auth/plain.class.php
@@ -20,24 +20,24 @@ class auth_plain extends auth_basic {
*
* @author Christopher Smith <chris@jalakai.co.uk>
*/
- function auth_plain() {
- global $config_cascade;
-
- if (!@is_readable($config_cascade['plainauth.users']['default'])){
- $this->success = false;
- }else{
- if(@is_writable($config_cascade['plainauth.users']['default'])){
- $this->cando['addUser'] = true;
- $this->cando['delUser'] = true;
- $this->cando['modLogin'] = true;
- $this->cando['modPass'] = true;
- $this->cando['modName'] = true;
- $this->cando['modMail'] = true;
- $this->cando['modGroups'] = true;
+ function __construct() {
+ global $config_cascade;
+
+ if (!@is_readable($config_cascade['plainauth.users']['default'])){
+ $this->success = false;
+ }else{
+ if(@is_writable($config_cascade['plainauth.users']['default'])){
+ $this->cando['addUser'] = true;
+ $this->cando['delUser'] = true;
+ $this->cando['modLogin'] = true;
+ $this->cando['modPass'] = true;
+ $this->cando['modName'] = true;
+ $this->cando['modMail'] = true;
+ $this->cando['modGroups'] = true;
+ }
+ $this->cando['getUsers'] = true;
+ $this->cando['getUserCount'] = true;
}
- $this->cando['getUsers'] = true;
- $this->cando['getUserCount'] = true;
- }
}
/**
@@ -51,10 +51,10 @@ class auth_plain extends auth_basic {
*/
function checkPass($user,$pass){
- $userinfo = $this->getUserData($user);
- if ($userinfo === false) return false;
+ $userinfo = $this->getUserData($user);
+ if ($userinfo === false) return false;
- return auth_verifyPassword($pass,$this->users[$user]['pass']);
+ return auth_verifyPassword($pass,$this->users[$user]['pass']);
}
/**
@@ -71,8 +71,8 @@ class auth_plain extends auth_basic {
*/
function getUserData($user){
- if($this->users === null) $this->_loadUserData();
- return isset($this->users[$user]) ? $this->users[$user] : false;
+ if($this->users === null) $this->_loadUserData();
+ return isset($this->users[$user]) ? $this->users[$user] : false;
}
/**
@@ -88,29 +88,29 @@ class auth_plain extends auth_basic {
* @author Chris Smith <chris@jalakai.co.uk>
*/
function createUser($user,$pwd,$name,$mail,$grps=null){
- global $conf;
- global $config_cascade;
+ global $conf;
+ global $config_cascade;
- // user mustn't already exist
- if ($this->getUserData($user) !== false) return false;
+ // user mustn't already exist
+ if ($this->getUserData($user) !== false) return false;
- $pass = auth_cryptPassword($pwd);
+ $pass = auth_cryptPassword($pwd);
- // set default group if no groups specified
- if (!is_array($grps)) $grps = array($conf['defaultgroup']);
+ // set default group if no groups specified
+ if (!is_array($grps)) $grps = array($conf['defaultgroup']);
- // prepare user line
- $groups = join(',',$grps);
- $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n";
+ // prepare user line
+ $groups = join(',',$grps);
+ $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n";
- if (io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) {
- $this->users[$user] = compact('pass','name','mail','grps');
- return $pwd;
- }
+ if (io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) {
+ $this->users[$user] = compact('pass','name','mail','grps');
+ return $pwd;
+ }
- msg('The '.$config_cascade['plainauth.users']['default'].
- ' file is not writable. Please inform the Wiki-Admin',-1);
- return null;
+ msg('The '.$config_cascade['plainauth.users']['default'].
+ ' file is not writable. Please inform the Wiki-Admin',-1);
+ return null;
}
/**
@@ -122,78 +122,78 @@ class auth_plain extends auth_basic {
* @return bool
*/
function modifyUser($user, $changes) {
- global $conf;
- global $ACT;
- global $INFO;
- global $config_cascade;
-
- // sanity checks, user must already exist and there must be something to change
- if (($userinfo = $this->getUserData($user)) === false) return false;
- if (!is_array($changes) || !count($changes)) return true;
-
- // update userinfo with new data, remembering to encrypt any password
- $newuser = $user;
- foreach ($changes as $field => $value) {
- if ($field == 'user') {
- $newuser = $value;
- continue;
+ global $conf;
+ global $ACT;
+ global $INFO;
+ global $config_cascade;
+
+ // sanity checks, user must already exist and there must be something to change
+ if (($userinfo = $this->getUserData($user)) === false) return false;
+ if (!is_array($changes) || !count($changes)) return true;
+
+ // update userinfo with new data, remembering to encrypt any password
+ $newuser = $user;
+ foreach ($changes as $field => $value) {
+ if ($field == 'user') {
+ $newuser = $value;
+ continue;
+ }
+ if ($field == 'pass') $value = auth_cryptPassword($value);
+ $userinfo[$field] = $value;
+ }
+
+ $groups = join(',',$userinfo['grps']);
+ $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
+
+ if (!$this->deleteUsers(array($user))) {
+ msg('Unable to modify user data. Please inform the Wiki-Admin',-1);
+ return false;
+ }
+
+ if (!io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) {
+ msg('There was an error modifying your user data. You should register again.',-1);
+ // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
+ $ACT == 'register';
+ return false;
}
- if ($field == 'pass') $value = auth_cryptPassword($value);
- $userinfo[$field] = $value;
- }
-
- $groups = join(',',$userinfo['grps']);
- $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
-
- if (!$this->deleteUsers(array($user))) {
- msg('Unable to modify user data. Please inform the Wiki-Admin',-1);
- return false;
- }
-
- if (!io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) {
- msg('There was an error modifying your user data. You should register again.',-1);
- // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
- $ACT == 'register';
- return false;
- }
-
- $this->users[$newuser] = $userinfo;
- return true;
+
+ $this->users[$newuser] = $userinfo;
+ return true;
}
/**
- * Remove one or more users from the list of registered users
+ * Remove one or more users from the list of registered users
*
- * @author Christopher Smith <chris@jalakai.co.uk>
- * @param array $users array of users to be deleted
- * @return int the number of users deleted
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @param array $users array of users to be deleted
+ * @return int the number of users deleted
*/
function deleteUsers($users) {
- global $config_cascade;
+ global $config_cascade;
- if (!is_array($users) || empty($users)) return 0;
+ if (!is_array($users) || empty($users)) return 0;
- if ($this->users === null) $this->_loadUserData();
+ if ($this->users === null) $this->_loadUserData();
- $deleted = array();
- foreach ($users as $user) {
- if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/');
- }
+ $deleted = array();
+ foreach ($users as $user) {
+ if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/');
+ }
- if (empty($deleted)) return 0;
+ if (empty($deleted)) return 0;
- $pattern = '/^('.join('|',$deleted).'):/';
+ $pattern = '/^('.join('|',$deleted).'):/';
- if (io_deleteFromFile($config_cascade['plainauth.users']['default'],$pattern,true)) {
- foreach ($deleted as $user) unset($this->users[$user]);
- return count($deleted);
- }
+ if (io_deleteFromFile($config_cascade['plainauth.users']['default'],$pattern,true)) {
+ foreach ($deleted as $user) unset($this->users[$user]);
+ return count($deleted);
+ }
- // problem deleting, reload the user list and count the difference
- $count = count($this->users);
- $this->_loadUserData();
- $count -= count($this->users);
- return $count;
+ // problem deleting, reload the user list and count the difference
+ $count = count($this->users);
+ $this->_loadUserData();
+ $count -= count($this->users);
+ return $count;
}
/**
@@ -203,18 +203,18 @@ class auth_plain extends auth_basic {
*/
function getUserCount($filter=array()) {
- if($this->users === null) $this->_loadUserData();
+ if($this->users === null) $this->_loadUserData();
- if (!count($filter)) return count($this->users);
+ if (!count($filter)) return count($this->users);
- $count = 0;
- $this->_constructPattern($filter);
+ $count = 0;
+ $this->_constructPattern($filter);
- foreach ($this->users as $user => $info) {
- $count += $this->_filter($user, $info);
- }
+ foreach ($this->users as $user => $info) {
+ $count += $this->_filter($user, $info);
+ }
- return $count;
+ return $count;
}
/**
@@ -228,27 +228,27 @@ class auth_plain extends auth_basic {
*/
function retrieveUsers($start=0,$limit=0,$filter=array()) {
- if ($this->users === null) $this->_loadUserData();
+ if ($this->users === null) $this->_loadUserData();
- ksort($this->users);
+ ksort($this->users);
- $i = 0;
- $count = 0;
- $out = array();
- $this->_constructPattern($filter);
+ $i = 0;
+ $count = 0;
+ $out = array();
+ $this->_constructPattern($filter);
- foreach ($this->users as $user => $info) {
- if ($this->_filter($user, $info)) {
- if ($i >= $start) {
- $out[$user] = $info;
- $count++;
- if (($limit > 0) && ($count >= $limit)) break;
- }
- $i++;
+ foreach ($this->users as $user => $info) {
+ if ($this->_filter($user, $info)) {
+ if ($i >= $start) {
+ $out[$user] = $info;
+ $count++;
+ if (($limit > 0) && ($count >= $limit)) break;
+ }
+ $i++;
+ }
}
- }
- return $out;
+ return $out;
}
/**
@@ -275,26 +275,26 @@ class auth_plain extends auth_basic {
* @author Andreas Gohr <andi@splitbrain.org>
*/
function _loadUserData(){
- global $config_cascade;
+ global $config_cascade;
- $this->users = array();
+ $this->users = array();
- if(!@file_exists($config_cascade['plainauth.users']['default'])) return;
+ if(!@file_exists($config_cascade['plainauth.users']['default'])) return;
- $lines = file($config_cascade['plainauth.users']['default']);
- foreach($lines as $line){
- $line = preg_replace('/#.*$/','',$line); //ignore comments
- $line = trim($line);
- if(empty($line)) continue;
+ $lines = file($config_cascade['plainauth.users']['default']);
+ foreach($lines as $line){
+ $line = preg_replace('/#.*$/','',$line); //ignore comments
+ $line = trim($line);
+ if(empty($line)) continue;
- $row = explode(":",$line,5);
- $groups = array_values(array_filter(explode(",",$row[4])));
+ $row = explode(":",$line,5);
+ $groups = array_values(array_filter(explode(",",$row[4])));
- $this->users[$row[0]]['pass'] = $row[1];
- $this->users[$row[0]]['name'] = urldecode($row[2]);
- $this->users[$row[0]]['mail'] = $row[3];
- $this->users[$row[0]]['grps'] = $groups;
- }
+ $this->users[$row[0]]['pass'] = $row[1];
+ $this->users[$row[0]]['name'] = urldecode($row[2]);
+ $this->users[$row[0]]['mail'] = $row[3];
+ $this->users[$row[0]]['grps'] = $groups;
+ }
}
/**
@@ -317,11 +317,11 @@ class auth_plain extends auth_basic {
}
function _constructPattern($filter) {
- $this->_pattern = array();
- foreach ($filter as $item => $pattern) {
-// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
- $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
- }
+ $this->_pattern = array();
+ foreach ($filter as $item => $pattern) {
+ // $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
+ $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
+ }
}
}
diff --git a/inc/changelog.php b/inc/changelog.php
index 60f9b8657..24583b341 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -188,7 +188,7 @@ function getRecents($first,$num,$ns='',$flags=0){
// handle lines
while ($lines_position >= 0 || (($flags & RECENTS_MEDIA_PAGES_MIXED) && $media_lines_position >=0)) {
if (empty($rec) && $lines_position >= 0) {
- $rec = _handleRecent(@$lines[$lines_position], $ns, $flags & ~RECENTS_MEDIA_CHANGES, $seen);
+ $rec = _handleRecent(@$lines[$lines_position], $ns, $flags, $seen);
if (!$rec) {
$lines_position --;
continue;
@@ -197,8 +197,8 @@ function getRecents($first,$num,$ns='',$flags=0){
if (($flags & RECENTS_MEDIA_PAGES_MIXED) && empty($media_rec) && $media_lines_position >= 0) {
$media_rec = _handleRecent(@$media_lines[$media_lines_position], $ns, $flags | RECENTS_MEDIA_CHANGES, $seen);
if (!$media_rec) {
- $media_lines_position --;
- continue;
+ $media_lines_position --;
+ continue;
}
}
if (($flags & RECENTS_MEDIA_PAGES_MIXED) && @$media_rec['date'] >= @$rec['date']) {
@@ -320,8 +320,10 @@ function _handleRecent($line,$ns,$flags,&$seen){
if ($recent['perms'] < AUTH_READ) return false;
// check existance
- $fn = (($flags & RECENTS_MEDIA_CHANGES) ? mediaFN($recent['id']) : wikiFN($recent['id']));
- if((!@file_exists($fn)) && ($flags & RECENTS_SKIP_DELETED)) return false;
+ if($flags & RECENTS_SKIP_DELETED){
+ $fn = (($flags & RECENTS_MEDIA_CHANGES) ? mediaFN($recent['id']) : wikiFN($recent['id']));
+ if(!@file_exists($fn)) return false;
+ }
return $recent;
}
diff --git a/inc/cliopts.php b/inc/cliopts.php
index 588f0bc6d..9cea686a2 100644
--- a/inc/cliopts.php
+++ b/inc/cliopts.php
@@ -6,7 +6,7 @@
*
* Copyright (c) 1997-2004 The PHP Group
*
- * LICENSE: This source file is subject to the New BSD license that is
+ * LICENSE: This source file is subject to the New BSD license that is
* available through the world-wide-web at the following URI:
* http://www.opensource.org/licenses/bsd-license.php. If you did not receive
* a copy of the New BSD License and are unable to obtain it through the web,
@@ -297,9 +297,8 @@ class Doku_Cli_Opts {
* @access private
* @return bool
*/
- function _isShortOpt($arg)
- {
- return strlen($arg) == 2 && $arg[0] == '-'
+ function _isShortOpt($arg){
+ return strlen($arg) == 2 && $arg[0] == '-'
&& preg_match('/[a-zA-Z]/', $arg[1]);
}
@@ -311,8 +310,7 @@ class Doku_Cli_Opts {
* @access private
* @return bool
*/
- function _isLongOpt($arg)
- {
+ function _isLongOpt($arg){
return strlen($arg) > 2 && $arg[0] == '-' && $arg[1] == '-' &&
preg_match('/[a-zA-Z]+$/', substr($arg, 2));
}
diff --git a/inc/common.php b/inc/common.php
index d19147387..22a315901 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -1296,14 +1296,14 @@ function dformat($dt=null,$format=''){
*
* @author <ungu at terong dot com>
* @link http://www.php.net/manual/en/function.date.php#54072
+ * @param int $int_date: current date in UNIX timestamp
*/
function date_iso8601($int_date) {
- //$int_date: current date in UNIX timestamp
- $date_mod = date('Y-m-d\TH:i:s', $int_date);
- $pre_timezone = date('O', $int_date);
- $time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);
- $date_mod .= $time_zone;
- return $date_mod;
+ $date_mod = date('Y-m-d\TH:i:s', $int_date);
+ $pre_timezone = date('O', $int_date);
+ $time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);
+ $date_mod .= $time_zone;
+ return $date_mod;
}
/**
@@ -1564,10 +1564,14 @@ function valid_input_set($param, $valid_values, $array, $exc = '') {
}
}
+/**
+ * Read a preference from the DokuWiki cookie
+ */
function get_doku_pref($pref, $default) {
if (strpos($_COOKIE['DOKU_PREFS'], $pref) !== false) {
$parts = explode('#', $_COOKIE['DOKU_PREFS']);
- for ($i = 0; $i < count($parts); $i+=2){
+ $cnt = count($parts);
+ for ($i = 0; $i < $cnt; $i+=2){
if ($parts[$i] == $pref) {
return $parts[$i+1];
}
diff --git a/inc/config_cascade.php b/inc/config_cascade.php
index 443114f52..79567fc56 100644
--- a/inc/config_cascade.php
+++ b/inc/config_cascade.php
@@ -64,7 +64,7 @@ $config_cascade = array_merge(
'plainauth.users' => array(
'default' => DOKU_CONF.'users.auth.php',
),
-
+
'plugins' => array(
'local' => array(DOKU_CONF.'plugins.local.php'),
'protected' => array(
diff --git a/inc/html.php b/inc/html.php
index 1a2d7daef..b233e1d92 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -1141,8 +1141,6 @@ function html_diff($text='',$intro=true,$type=null){
$tdf = new TableDiffFormatter();
}
-
-
if($intro) print p_locale_xhtml('diff');
if (!$text) {
@@ -1165,7 +1163,6 @@ function html_diff($text='',$intro=true,$type=null){
$form->addElement(form_makeButton('submit', 'diff','Go'));
$form->printForm();
-
$diffurl = wl($ID, array(
'do' => 'diff',
'rev2[0]' => $l_rev,
@@ -1176,6 +1173,7 @@ function html_diff($text='',$intro=true,$type=null){
ptln('</div>');
}
?>
+ <div class="table">
<table class="diff diff_<?php echo $type?>">
<tr>
<th colspan="2" <?php echo $l_minor?>>
@@ -1187,6 +1185,7 @@ function html_diff($text='',$intro=true,$type=null){
</tr>
<?php echo $tdf->format($df)?>
</table>
+ </div>
<?php
}
@@ -1661,26 +1660,46 @@ function html_admin(){
* Form to request a new password for an existing account
*
* @author Benoit Chesneau <benoit@bchesneau.info>
+ * @author Andreas Gohr <gohr@cosmocode.de>
*/
function html_resendpwd() {
global $lang;
global $conf;
global $ID;
- print p_locale_xhtml('resendpwd');
- print '<div class="centeralign">'.NL;
- $form = new Doku_Form(array('id' => 'dw__resendpwd'));
- $form->startFieldset($lang['resendpwd']);
- $form->addHidden('do', 'resendpwd');
- $form->addHidden('save', '1');
- $form->addElement(form_makeTag('br'));
- $form->addElement(form_makeTextField('login', $_POST['login'], $lang['user'], '', 'block'));
- $form->addElement(form_makeTag('br'));
- $form->addElement(form_makeTag('br'));
- $form->addElement(form_makeButton('submit', '', $lang['btn_resendpwd']));
- $form->endFieldset();
- html_form('resendpwd', $form);
- print '</div>'.NL;
+ $token = preg_replace('/[^a-f0-9]+/','',$_REQUEST['pwauth']);
+
+ if(!$conf['autopasswd'] && $token){
+ print p_locale_xhtml('resetpwd');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__resendpwd'));
+ $form->startFieldset($lang['btn_resendpwd']);
+ $form->addHidden('token', $token);
+ $form->addHidden('do', 'resendpwd');
+
+ $form->addElement(form_makePasswordField('pass', $lang['pass'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makePasswordField('passchk', $lang['passchk'], '', 'block', array('size'=>'50')));
+
+ $form->addElement(form_makeButton('submit', '', $lang['btn_resendpwd']));
+ $form->endFieldset();
+ html_form('resendpwd', $form);
+ print '</div>'.NL;
+ }else{
+ print p_locale_xhtml('resendpwd');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__resendpwd'));
+ $form->startFieldset($lang['resendpwd']);
+ $form->addHidden('do', 'resendpwd');
+ $form->addHidden('save', '1');
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeTextField('login', $_POST['login'], $lang['user'], '', 'block'));
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeButton('submit', '', $lang['btn_resendpwd']));
+ $form->endFieldset();
+ html_form('resendpwd', $form);
+ print '</div>'.NL;
+ }
}
/**
diff --git a/inc/httputils.php b/inc/httputils.php
index 0ad97a9a1..b815f3ca6 100644
--- a/inc/httputils.php
+++ b/inc/httputils.php
@@ -249,3 +249,11 @@ function http_cached_finish($file, $content) {
print $content;
}
}
+
+function http_get_raw_post_data() {
+ static $postData = null;
+ if ($postData === null) {
+ $postData = file_get_contents('php://input');
+ }
+ return $postData;
+}
diff --git a/inc/indexer.php b/inc/indexer.php
index 9d8d6f99b..80d2651c2 100644
--- a/inc/indexer.php
+++ b/inc/indexer.php
@@ -291,7 +291,6 @@ class Doku_Indexer {
$val_idx = array();
}
-
foreach ($values as $val) {
$val = (string)$val;
if ($val !== "") {
@@ -351,7 +350,7 @@ class Doku_Indexer {
return "locked";
// load known documents
- $pid = $this->getIndexKey('page', '', $page);
+ $pid = $this->addIndexKey('page', '', $page);
if ($pid === false) {
$this->unlock();
return false;
@@ -389,6 +388,7 @@ class Doku_Indexer {
$val_idx = explode(':', $this->getIndexKey($metaname.'_p', '', $pid));
$meta_idx = $this->getIndex($metaname.'_i', '');
foreach ($val_idx as $id) {
+ if ($id === '') continue;
$meta_idx[$id] = $this->updateTuple($meta_idx[$id], $pid, 0);
}
$this->saveIndex($metaname.'_i', '', $meta_idx);
@@ -1174,18 +1174,8 @@ function & idx_get_stopwords() {
* @author Tom N Harris <tnharris@whoopdedo.org>
*/
function idx_addPage($page, $verbose=false, $force=false) {
- // check if indexing needed
$idxtag = metaFN($page,'.indexed');
- if(!$force && @file_exists($idxtag)){
- if(trim(io_readFile($idxtag)) == idx_get_version()){
- $last = @filemtime($idxtag);
- if($last > @filemtime(wikiFN($page))){
- if ($verbose) print("Indexer: index for $page up to date".DOKU_LF);
- return false;
- }
- }
- }
-
+ // check if page was deleted but is still in the index
if (!page_exists($page)) {
if (!@file_exists($idxtag)) {
if ($verbose) print("Indexer: $page does not exist, ignoring".DOKU_LF);
@@ -1200,6 +1190,18 @@ function idx_addPage($page, $verbose=false, $force=false) {
@unlink($idxtag);
return $result;
}
+
+ // check if indexing needed
+ if(!$force && @file_exists($idxtag)){
+ if(trim(io_readFile($idxtag)) == idx_get_version()){
+ $last = @filemtime($idxtag);
+ if($last > @filemtime(wikiFN($page))){
+ if ($verbose) print("Indexer: index for $page up to date".DOKU_LF);
+ return false;
+ }
+ }
+ }
+
$indexenabled = p_get_metadata($page, 'internal index', METADATA_RENDER_UNLIMITED);
if ($indexenabled === false) {
$result = false;
diff --git a/inc/init.php b/inc/init.php
index b3acf2e33..d57e12d7b 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -30,8 +30,8 @@ if (!defined('DOKU_E_LEVEL') && @file_exists(DOKU_CONF.'report_e_all')) {
define('DOKU_E_LEVEL', E_ALL);
}
if (!defined('DOKU_E_LEVEL')) {
- if(defined('E_DEPRECATED')){ // since php 5.3
- error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
+ if(defined('E_DEPRECATED')){ // since php 5.3, since php 5.4 E_STRICT is part of E_ALL
+ error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
}else{
error_reporting(E_ALL ^ E_NOTICE);
}
@@ -69,16 +69,6 @@ foreach (array('default','local','protected') as $config_group) {
}
}
-//prepare language array
-global $lang;
-$lang = array();
-
-//load the language files
-require_once(DOKU_INC.'inc/lang/en/lang.php');
-if ( $conf['lang'] && $conf['lang'] != 'en' ) {
- require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
-}
-
//prepare license array()
global $license;
$license = array();
@@ -118,11 +108,11 @@ if (!defined('DOKU_COOKIE')) define('DOKU_COOKIE', 'DW'.md5(DOKU_REL.(($conf['se
// define main script
if(!defined('DOKU_SCRIPT')) define('DOKU_SCRIPT','doku.php');
-// define Template baseURL
+// DEPRECATED, use tpl_basedir() instead
if(!defined('DOKU_TPL')) define('DOKU_TPL',
DOKU_BASE.'lib/tpl/'.$conf['template'].'/');
-// define real Template directory
+// DEPRECATED, use tpl_incdir() instead
if(!defined('DOKU_TPLINC')) define('DOKU_TPLINC',
DOKU_INC.'lib/tpl/'.$conf['template'].'/');
@@ -200,7 +190,7 @@ init_paths();
init_files();
// setup plugin controller class (can be overwritten in preload.php)
-$plugin_types = array('admin','syntax','action','renderer', 'helper');
+$plugin_types = array('admin','syntax','action','renderer', 'helper','remote');
global $plugin_controller_class, $plugin_controller;
if (empty($plugin_controller_class)) $plugin_controller_class = 'Doku_Plugin_Controller';
@@ -214,6 +204,10 @@ $plugin_controller = new $plugin_controller_class();
global $EVENT_HANDLER;
$EVENT_HANDLER = new Doku_Event_Handler();
+$local = $conf['lang'];
+trigger_event('INIT_LANG_LOAD', $local, 'init_lang', true);
+
+
// setup authentication system
if (!defined('NOSESSION')) {
auth_setup();
@@ -256,6 +250,20 @@ function init_paths(){
$conf['media_changelog'] = $conf['metadir'].'/_media.changes';
}
+function init_lang($langCode) {
+ //prepare language array
+ global $lang;
+ $lang = array();
+
+ //load the language files
+ require_once(DOKU_INC.'inc/lang/en/lang.php');
+ if ($langCode && $langCode != 'en') {
+ if (file_exists(DOKU_INC."inc/lang/$langCode/lang.php")) {
+ require_once(DOKU_INC."inc/lang/$langCode/lang.php");
+ }
+ }
+}
+
/**
* Checks the existance of certain files and creates them if missing.
*/
diff --git a/inc/io.php b/inc/io.php
index 034ac650e..c76d2f44c 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -63,7 +63,7 @@ function io_sweepNS($id,$basedir='datadir'){
*/
function io_readWikiPage($file, $id, $rev=false) {
if (empty($rev)) { $rev = false; }
- $data = array(array($file, false), getNS($id), noNS($id), $rev);
+ $data = array(array($file, true), getNS($id), noNS($id), $rev);
return trigger_event('IO_WIKIPAGE_READ', $data, '_io_readWikiPage_action', false);
}
diff --git a/inc/lang/af/lang.php b/inc/lang/af/lang.php
index 6665196f4..6de891a63 100644
--- a/inc/lang/af/lang.php
+++ b/inc/lang/af/lang.php
@@ -25,7 +25,6 @@ $lang['btn_back'] = 'Terug';
$lang['btn_backlink'] = 'Wat skakel hierheen';
$lang['btn_subscribe'] = 'Hou bladsy dop';
$lang['btn_unsubscribe'] = 'Verwyder van bladsy dophoulys';
-$lang['btn_resendpwd'] = 'E-pos nuwe wagwoord';
$lang['btn_register'] = 'Skep gerus \'n rekening';
$lang['loggedinas'] = 'Ingeteken as';
$lang['user'] = 'Gebruikernaam';
@@ -43,7 +42,6 @@ $lang['regsuccess2'] = 'Rekening geskep';
$lang['regbadpass'] = 'Die ingetikte wagwoorde is nie dieselfde nie.';
$lang['regpwmail'] = 'Jo DokuWiki wagwoord';
$lang['profnoempty'] = 'Jy moet \'n name en a e-posadres in sit';
-$lang['resendpwd'] = 'Stuir vir a niwe wagwoord';
$lang['resendpwdmissing'] = 'Jammer, jy moet ales in fil';
$lang['resendpwdconfirm'] = '\'n Bevestigingpos is gestuur na die gekose e-posadres.';
$lang['resendpwdsuccess'] = 'Jou nuive wagwoord was deur e-pos gesteur';
@@ -71,5 +69,3 @@ $lang['img_date'] = 'Datem';
$lang['img_camera'] = 'Camera';
$lang['i_wikiname'] = 'Wiki Naam';
$lang['i_funcna'] = 'PHP funksie <code>%s</code> is nie beskibaar nie. Miskien is dit af gehaal.';
-$lang['mu_toobig'] = 'te groet';
-$lang['mu_done'] = 'klaar';
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index 02a62fe94..350e26695 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -42,12 +42,14 @@ $lang['btn_backtomedia'] = 'ارجع إلى اختيار ملف الوسا
$lang['btn_subscribe'] = 'ادر الاشتراكات';
$lang['btn_profile'] = 'حدث الملف الشخصي';
$lang['btn_reset'] = 'صفّر';
-$lang['btn_resendpwd'] = 'ارسل كلمة سر جديدة';
+$lang['btn_resendpwd'] = 'اضبط كلمة سر جديدة';
$lang['btn_draft'] = 'حرر المسودة';
$lang['btn_recover'] = 'استرجع المسودة';
$lang['btn_draftdel'] = 'احذف المسوّدة';
$lang['btn_revert'] = 'استعد';
$lang['btn_register'] = 'سجّل';
+$lang['btn_apply'] = 'طبق';
+$lang['btn_media'] = 'مدير الوسائط';
$lang['loggedinas'] = 'داخل باسم';
$lang['user'] = 'اسم المستخدم';
$lang['pass'] = 'كلمة السر';
@@ -77,7 +79,7 @@ $lang['profnoempty'] = 'غير مسموح باسم مستخدم أو
$lang['profchanged'] = 'حُدث الملف الشخصي للمستخدم بنجاح.';
$lang['pwdforget'] = 'أنسيت كلمة السر؟ احصل على واحدة جديدة';
$lang['resendna'] = 'هذه الويكي لا تدعم إعادة إرسال كلمة المرور.';
-$lang['resendpwd'] = 'إرسال كلمة مرور';
+$lang['resendpwd'] = 'اضبط كلمة سر جديدة لـ';
$lang['resendpwdmissing'] = 'عذراّ، يجب أن تملأ كل الحقول.';
$lang['resendpwdnouser'] = 'عذراً، لم نجد المستخدم هذا في قاعدة بياناتنا.';
$lang['resendpwdbadauth'] = 'عذراً، رمز التفعيل هذا غير صحيح. نأكد من استخدامك كامل وصلة التأكيد.';
@@ -92,7 +94,7 @@ $lang['txt_filename'] = 'رفع كـ (اختياري)';
$lang['txt_overwrt'] = 'اكتب على ملف موجود';
$lang['lockedby'] = 'مقفلة حاليا لـ';
$lang['lockexpire'] = 'ينتهي القفل في';
-$lang['js']['willexpire'] = 'سينتهي قفل تحرير هذه الصفحه خلال دقيقة.\nلتجنب التعارض استخدم زر المعاينة لتصفير مؤقت القفل.';
+$lang['js']['willexpire'] = 'سينتهي قفل تحرير هذه الصفحه خلال دقيقة.\nلتجنب التعارض استخدم زر المعاينة لتصفير مؤقت القفل.';
$lang['js']['notsavedyet'] = 'التعديلات غير المحفوظة ستفقد.';
$lang['js']['searchmedia'] = 'ابحث عن ملفات';
$lang['js']['keepopen'] = 'أبقي النافذة مفتوحة أثناء الاختيار';
@@ -123,6 +125,17 @@ $lang['js']['nosmblinks'] = 'الروابط لمجلدات مشاركة و
$lang['js']['linkwiz'] = 'مرشد الروابط';
$lang['js']['linkto'] = 'الرابط إلى :';
$lang['js']['del_confirm'] = 'هل حقاً تريد حذف البنود المختارة؟';
+$lang['js']['restore_confirm'] = 'أمتأكد من استرجاع هذه النسخة؟';
+$lang['js']['media_diff'] = 'عرض الفروق:';
+$lang['js']['media_diff_both'] = 'جنبا إلى جنب';
+$lang['js']['media_diff_opacity'] = 'Shine-through';
+$lang['js']['media_diff_portions'] = 'Swipe';
+$lang['js']['media_select'] = 'اختر ملفا...';
+$lang['js']['media_upload_btn'] = 'ارفع';
+$lang['js']['media_done_btn'] = 'تم';
+$lang['js']['media_drop'] = 'اسقط الملف هنا لرفعه';
+$lang['js']['media_cancel'] = 'أزل';
+$lang['js']['media_overwrt'] = 'أكتب فوق الملفات الموجودة';
$lang['rssfailed'] = 'خطأ ما حدث أثناء جلب ملف التغذية:';
$lang['nothingfound'] = 'لا يوجد شيء';
$lang['mediaselect'] = 'ملفات الوسائط';
@@ -172,11 +185,20 @@ $lang['external_edit'] = 'تحرير خارجي';
$lang['summary'] = 'ملخص التحرير';
$lang['noflash'] = 'تحتاج إلى<a href="http://www.adobe.com/products/flashplayer/">ملحق فلاش أدوبي</a> لعرض هذا المحتوى.';
$lang['download'] = 'نزل Snippet';
+$lang['tools'] = 'أدوات';
+$lang['user_tools'] = 'أدوات المستخدم';
+$lang['site_tools'] = 'أدوات الموقع';
+$lang['page_tools'] = 'أدوات الصفحة';
+$lang['skip_to_content'] = 'تجاوز إلى المحتوى';
$lang['mail_newpage'] = 'إضافة صفحة:';
$lang['mail_changed'] = 'تعديل صفحة:';
$lang['mail_subscribe_list'] = 'صفحات غيرت في النطاق:';
$lang['mail_new_user'] = 'مشترك جديد:';
$lang['mail_upload'] = 'رفع ملف:';
+$lang['changes_type'] = 'أظهر تغييرات الـ';
+$lang['pages_changes'] = 'صفحات';
+$lang['media_changes'] = 'ملفات الوسائط';
+$lang['both_changes'] = 'كلا من الصفحات وملفات الوسائط';
$lang['qb_bold'] = 'نص عريض';
$lang['qb_italic'] = 'نص مائل';
$lang['qb_underl'] = 'نص مسطر';
@@ -217,6 +239,9 @@ $lang['img_copyr'] = 'حقوق النسخ';
$lang['img_format'] = 'الهيئة';
$lang['img_camera'] = 'الكمرا';
$lang['img_keywords'] = 'كلمات مفتاحية';
+$lang['img_width'] = 'العرض';
+$lang['img_height'] = 'الإرتفاع';
+$lang['img_manager'] = 'اعرض في مدير الوسائط';
$lang['subscr_subscribe_success'] = 'اضيف %s لقائمة اشتراك %s';
$lang['subscr_subscribe_error'] = 'خطأ في إضافة %s لقائمة اشتراك %s';
$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بولوجك، لا يمكن اضافتك لقائمة الاشتراك';
@@ -235,6 +260,7 @@ $lang['subscr_style_digest'] = 'بريد ملخص عن تغييرات كل ص
$lang['subscr_style_list'] = 'قائمة بالصفحات المتغيرة منذ آخر بريد';
$lang['authmodfailed'] = 'إعدادات تصريح فاسدة، يرجى مراسلة المدير.';
$lang['authtempfail'] = 'تصريح المشترك غير متوفر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
+$lang['authpwdexpire'] = 'ستنتهي صلاحية كلمة السر في %d . عليك بتغييرها سريعا.';
$lang['i_chooselang'] = 'اختر لغتك';
$lang['i_installer'] = 'برنامج تنصيب دوكو ويكي';
$lang['i_wikiname'] = 'اسم الويكي';
@@ -266,21 +292,6 @@ $lang['i_pol1'] = 'ويكي عامة؛ أي القراءة للج
$lang['i_pol2'] = 'ويكي مغلقة؛ أي القراءة والكتابة والتحميل للمشتركين المسجلين فقط';
$lang['i_retry'] = 'إعادة المحاولة';
$lang['i_license'] = 'اختر الرخصة التي تريد وضع المحتوى تحتها:';
-$lang['mu_intro'] = 'هنا يمكنك رفع ملفات متعددة في وقت واحد. انقر على زر استعرض لاضافتهم إلى الطابور. انقر ارفع عند الانتهاء.';
-$lang['mu_gridname'] = 'اسم الملف';
-$lang['mu_gridsize'] = 'الحجم';
-$lang['mu_gridstat'] = 'الحالة';
-$lang['mu_namespace'] = 'نطاق';
-$lang['mu_browse'] = 'استعرض';
-$lang['mu_toobig'] = 'كبير جدا';
-$lang['mu_ready'] = 'جاهز للرفع';
-$lang['mu_done'] = 'اكتمل';
-$lang['mu_fail'] = 'فشل';
-$lang['mu_authfail'] = 'انتهت الجلسة';
-$lang['mu_progress'] = 'رُفع @PCT@% ';
-$lang['mu_filetypes'] = 'انواع الملفات المسموحة';
-$lang['mu_info'] = 'تم رفع الملفات';
-$lang['mu_lasterr'] = 'آخر خطأ:';
$lang['recent_global'] = 'انت تراقب حاليا التغييرات داخل نطاق <b>%s</b>. يمكنك أيضا <a href="%s">عرض أحدث تغييرات الويكي كلها</a>.';
$lang['years'] = '%d سنة مضت';
$lang['months'] = '%d شهرا مضى';
@@ -290,3 +301,27 @@ $lang['hours'] = '%d ساعة مضت';
$lang['minutes'] = '%d دقيقة مضت';
$lang['seconds'] = '%d ثانية مضت';
$lang['wordblock'] = 'لم تحفظ تغييراتك لاحتوائها على نص ممنوع )غثاء(';
+$lang['media_uploadtab'] = 'ارفع';
+$lang['media_searchtab'] = 'ابحث';
+$lang['media_file'] = 'ملف';
+$lang['media_viewtab'] = 'عرض';
+$lang['media_edittab'] = 'تحرير';
+$lang['media_historytab'] = 'التاريخ';
+$lang['media_list_thumbs'] = 'المصغرات';
+$lang['media_list_rows'] = 'صفوف';
+$lang['media_sort_name'] = 'الاسم';
+$lang['media_sort_date'] = 'التاريخ';
+$lang['media_namespaces'] = 'اختر نطاقا';
+$lang['media_files'] = 'الملفات في %s';
+$lang['media_upload'] = 'ارفع إلى %s';
+$lang['media_search'] = 'ابحث في %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s في %s';
+$lang['media_edit'] = 'حرر %s';
+$lang['media_history'] = 'تاريخ %s';
+$lang['media_meta_edited'] = 'عُدلت الميتاداتا';
+$lang['media_perm_read'] = 'عفوا، لست مخولا بقراءة الملفات.';
+$lang['media_perm_upload'] = 'عفوا، لست مخولا برفع الملفات.';
+$lang['media_update'] = 'ارفع إصدارا أحدث';
+$lang['media_restore'] = 'استرجع هذه النسخة';
+$lang['plugin_install_err'] = 'ثبتت الإضافة بشكل خاطئ. أعد تسمية دليل الإضافة \'%s\' إلى \'%s\'.';
diff --git a/inc/lang/ar/resetpwd.txt b/inc/lang/ar/resetpwd.txt
new file mode 100644
index 000000000..2bbd4a21a
--- /dev/null
+++ b/inc/lang/ar/resetpwd.txt
@@ -0,0 +1,3 @@
+====== اضبط كلمة سر جديدة ======
+
+أدخل كلمة سر جديدة لحسابك في هذه الويكي.
diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php
index 13ba7b3c3..fff6f34b7 100644
--- a/inc/lang/az/lang.php
+++ b/inc/lang/az/lang.php
@@ -40,7 +40,6 @@ $lang['btn_subscribe'] = 'Abunə ol (bütün dəyişiklər)';
$lang['btn_unsubscribe'] = 'Abunəlikdən çıx (bütün dəyişiklər)';
$lang['btn_profile'] = 'Profil';
$lang['btn_reset'] = 'Boşalt';
-$lang['btn_resendpwd'] = 'Yeni şifrəni göndər';
$lang['btn_draft'] = 'Qaralamada düzəliş etmək';
$lang['btn_recover'] = 'Qaralamanı qaytar';
$lang['btn_draftdel'] = 'Qaralamanı sil';
@@ -75,7 +74,6 @@ $lang['profnoempty'] = 'istifadəci adı və e-mail ünvanı boş ola
$lang['profchanged'] = 'İstifadəçi profili uğurla yeniləndi.';
$lang['pwdforget'] = 'Şifrəni yaddan çıxartmısız? Buyurun yenisini əldə edin';
$lang['resendna'] = 'Bu wiki şifrəni yenidən göndərməyi dəstəkləmir.';
-$lang['resendpwd'] = 'Yeni şifrəni göndər:';
$lang['resendpwdmissing'] = 'Formanın bütün xanəlırini doldurun.';
$lang['resendpwdnouser'] = 'Verilənlər bazasında bu ad ilə istifadəçi tapılmadı.';
$lang['resendpwdbadauth'] = 'Ativləşdirmə kodu səhvdir. Link-i tam olaraq köçürdüyünüzü yoxlayın. ';
@@ -217,21 +215,6 @@ $lang['i_pol0'] = 'Tam açıq wiki (oxumaq, yazmaq, fayl yükləm
$lang['i_pol1'] = 'Acıq wiki (oxumaq hamıya olar, yazmaq və fayl yükləmək ancaq üzv olan istifadəçilərə olar)';
$lang['i_pol2'] = 'Bağlı wiki (uxumaq, yazmaq və yükləmək ancaq üzv olan istifadəçilərə olar)';
$lang['i_retry'] = 'Cəhdi təkrarla';
-$lang['mu_intro'] = 'Burda siz bir neçə faylı birdən yükləyə bilərsiniz. Fayl əlavə etmək üçün "fayl seç" düyməsini sıxın. Sonda "yüklə" düyməsini sıxın.';
-$lang['mu_gridname'] = 'Faylın adı';
-$lang['mu_gridsize'] = 'Həcmi';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namespace';
-$lang['mu_browse'] = 'Fayl seç';
-$lang['mu_toobig'] = 'çox böyükdür';
-$lang['mu_ready'] = 'yükləməyə hazırdı';
-$lang['mu_done'] = 'başa çatdı';
-$lang['mu_fail'] = 'xəta baş verdi';
-$lang['mu_authfail'] = 'sessiyanın vaxtı bitdi';
-$lang['mu_progress'] = '@PCT@% yükləndi';
-$lang['mu_filetypes'] = 'İçazə olan fayl növləri';
-$lang['mu_info'] = 'fayllar yükləndi.';
-$lang['mu_lasterr'] = 'Son xəta:';
$lang['recent_global'] = '<b>%s</b> namespace-də baş vermiş dəyışıklərə baxırsınız. Siz həmçinin <a href="%s">wiki-də bu yaxında baş vermiş bütün dəyişiklərə</a> baxa bilərsiniz.';
$lang['years'] = '%d il əvvəl';
$lang['months'] = '%d ay əvvəl';
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index 8985e20e5..7a246024d 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -9,11 +9,12 @@
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
-$lang['doublequoteopening'] = '“';
-$lang['doublequoteclosing'] = '”';
-$lang['singlequoteopening'] = '‘';
-$lang['singlequoteclosing'] = '’';
-$lang['apostrophe'] = '’';
+$lang['doublequoteopening'] = '“'; //&ldquo;
+$lang['doublequoteclosing'] = '”'; //&rdquo;
+$lang['singlequoteopening'] = '‘'; //&lsquo;
+$lang['singlequoteclosing'] = '’'; //&rsquo;
+$lang['apostrophe'] = '’'; //&rsquo;
+
$lang['btn_edit'] = 'Редактиране';
$lang['btn_source'] = 'Преглед на кода';
$lang['btn_show'] = 'Преглед на страницата';
@@ -41,14 +42,15 @@ $lang['btn_backtomedia'] = 'Назад към избора на файл';
$lang['btn_subscribe'] = 'Абонаменти';
$lang['btn_profile'] = 'Профил';
$lang['btn_reset'] = 'Изчистване';
-$lang['btn_resendpwd'] = 'Пращане на нова парола';
-$lang['btn_draft'] = 'Редактиране на чернова';
-$lang['btn_recover'] = 'Възстановяване на чернова';
-$lang['btn_draftdel'] = 'Изтриване на чернова';
+$lang['btn_resendpwd'] = 'Задаване на нова парола';
+$lang['btn_draft'] = 'Редактиране на черновата';
+$lang['btn_recover'] = 'Възстановяване на черновата';
+$lang['btn_draftdel'] = 'Изтриване на черновата';
$lang['btn_revert'] = 'Възстановяване';
$lang['btn_register'] = 'Регистриране';
$lang['btn_apply'] = 'Прилагане';
$lang['btn_media'] = 'Диспечер на файлове';
+
$lang['loggedinas'] = 'Вписани сте като';
$lang['user'] = 'Потребител';
$lang['pass'] = 'Парола';
@@ -60,9 +62,10 @@ $lang['fullname'] = 'Истинско име';
$lang['email'] = 'Електронна поща';
$lang['profile'] = 'Потребителски профил';
$lang['badlogin'] = 'Грешно потребителско име или парола.';
-$lang['minoredit'] = 'Незначителни промени';
-$lang['draftdate'] = 'Черновата е автоматично записана на';
+$lang['minoredit'] = 'Промените са незначителни';
+$lang['draftdate'] = 'Черновата е автоматично записана на'; // full dformat date will be added
$lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.';
+
$lang['regmissing'] = 'Моля, попълнете всички полета.';
$lang['reguexists'] = 'Вече съществува потребител с избраното име.';
$lang['regsuccess'] = 'Потребителят е създаден, а паролата е пратена по електронната поща.';
@@ -72,20 +75,24 @@ $lang['regbadmail'] = 'Въведеният адрес изглежд
$lang['regbadpass'] = 'Двете въведени пароли не съвпадат, моля опитайте отново.';
$lang['regpwmail'] = 'Паролата ви за DokuWiki';
$lang['reghere'] = 'Все още нямате профил? Направете си';
+
$lang['profna'] = 'Wiki-то не поддържа промяна на профила';
$lang['profnochange'] = 'Няма промени.';
$lang['profnoempty'] = 'Въвеждането на име и ел. поща е задължително';
$lang['profchanged'] = 'Потребителският профил е обновен успешно.';
+
$lang['pwdforget'] = 'Забравили сте паролата си? Получете нова';
$lang['resendna'] = 'Wiki-то не поддържа повторно пращане на паролата.';
-$lang['resendpwd'] = 'Изпращане на нова парола за';
+$lang['resendpwd'] = 'Задаване на нова парола за';
$lang['resendpwdmissing'] = 'Моля, попълнете всички полета.';
$lang['resendpwdnouser'] = 'Потребителят не е намерен в базата от данни.';
$lang['resendpwdbadauth'] = 'Кодът за потвърждение е невалиден. Проверете дали сте използвали целия линк за потвърждение.';
$lang['resendpwdconfirm'] = 'Линк за потвърждение е пратен по електронната поща.';
$lang['resendpwdsuccess'] = 'Новата ви паролата е пратена по електронната поща.';
+
$lang['license'] = 'Ако не е посочено друго, съдържанието на Wiki-то е лицензирано под следния лиценз:';
-$lang['licenseok'] = 'Бележка: Редактирайки страницата, вие се съгласявате да лицензирате промените (които сте направили) под следния лиценз:';
+$lang['licenseok'] = 'Бележка: Редактирайки страницата, Вие се съгласявате да лицензирате промените (които сте направили) под следния лиценз:';
+
$lang['searchmedia'] = 'Търсене на файл: ';
$lang['searchmedia_in'] = 'Търсене в %s';
$lang['txt_upload'] = 'Изберете файл за качване';
@@ -93,6 +100,7 @@ $lang['txt_filename'] = 'Качи като (незадължителн
$lang['txt_overwrt'] = 'Презапиши съществуващите файлове';
$lang['lockedby'] = 'В момента е заключена от';
$lang['lockexpire'] = 'Ще бъде отключена на';
+
$lang['js']['willexpire'] = 'Страницата ще бъде отключена за редактиране след минута.\nЗа предотвратяване на конфликти, ползвайте бутона "Преглед", за рестартиране на брояча за заключване.';
$lang['js']['notsavedyet'] = 'Незаписаните промени ще бъдат загубени. Желаете ли да продължите?';
$lang['js']['searchmedia'] = 'Търсене на файлове';
@@ -119,8 +127,7 @@ $lang['js']['medialeft'] = 'Подреди изображението от
$lang['js']['mediaright'] = 'Подреди изображението отдясно.';
$lang['js']['mediacenter'] = 'Подреди изображението по средата.';
$lang['js']['medianoalign'] = 'Без подреждане.';
-$lang['js']['nosmblinks'] = 'Връзките към Windows shares работят само под Internet Explorer.
-Можете да копирате и поставите връзката.';
+$lang['js']['nosmblinks'] = 'Връзките към Windows shares работят само под Internet Explorer.<br />Можете да копирате и поставите връзката.';
$lang['js']['linkwiz'] = 'Помощник за препратки';
$lang['js']['linkto'] = 'Препратка към: ';
$lang['js']['del_confirm'] = 'Да бъдат ли изтрити избраните елементи?';
@@ -135,8 +142,10 @@ $lang['js']['media_done_btn'] = 'Готово';
$lang['js']['media_drop'] = 'Влачете и пуснете файливе тук, за да бъдат качени';
$lang['js']['media_cancel'] = 'премахване';
$lang['js']['media_overwrt'] = 'Презапиши съществуващите файлове';
+
$lang['rssfailed'] = 'Възникна грешка при получаването на емисията: ';
$lang['nothingfound'] = 'Нищо не е открито.';
+
$lang['mediaselect'] = 'Файлове';
$lang['fileupload'] = 'Качване на файлове';
$lang['uploadsucc'] = 'Качването е успешно';
@@ -161,6 +170,7 @@ $lang['mediaextchange'] = 'Разширението на файла е с
$lang['reference'] = 'Връзки за';
$lang['ref_inuse'] = 'Файлът не може да бъде изтрит, защото все още се ползва от следните страници:';
$lang['ref_hidden'] = 'Някои връзки са към страници, които нямате права да четете';
+
$lang['hits'] = 'Съвпадения';
$lang['quickhits'] = 'Съвпадащи имена на страници';
$lang['toc'] = 'Съдържание';
@@ -184,15 +194,23 @@ $lang['external_edit'] = 'външна редакция';
$lang['summary'] = 'Обобщение';
$lang['noflash'] = 'Необходим е <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> за изобразяване на съдържанието.';
$lang['download'] = 'Изтегляне на фрагмент';
+$lang['tools'] = 'Инструменти';
+$lang['user_tools'] = 'Инструменти за потребители';
+$lang['site_tools'] = 'Инструменти за сайта';
+$lang['page_tools'] = 'Инструменти за страници';
+$lang['skip_to_content'] = 'към съдържанието';
+
$lang['mail_newpage'] = 'добавена страница: ';
$lang['mail_changed'] = 'променена страница: ';
$lang['mail_subscribe_list'] = 'променени страници в именно пространство: ';
$lang['mail_new_user'] = 'нов потребител: ';
$lang['mail_upload'] = 'качен файл: ';
+
$lang['changes_type'] = 'Преглед на променените';
$lang['pages_changes'] = 'Страници';
$lang['media_changes'] = 'Файлове';
$lang['both_changes'] = 'Страници и файлове';
+
$lang['qb_bold'] = 'Удебелен текст';
$lang['qb_italic'] = 'Курсив текст';
$lang['qb_underl'] = 'Подчертан текст';
@@ -217,8 +235,11 @@ $lang['qb_media'] = 'Добавяне на изображения
$lang['qb_sig'] = 'Вмъкване на подпис';
$lang['qb_smileys'] = 'Усмивчици';
$lang['qb_chars'] = 'Специални знаци';
+
$lang['upperns'] = 'към майчиното именно пространство';
+
$lang['admin_register'] = 'Добавяне на нов потребител';
+
$lang['metaedit'] = 'Редактиране на метаданни';
$lang['metasaveerr'] = 'Записването на метаданните се провали';
$lang['metasaveok'] = 'Метаданните са запазени успешно';
@@ -236,6 +257,7 @@ $lang['img_keywords'] = 'Ключови думи';
$lang['img_width'] = 'Ширина';
$lang['img_height'] = 'Височина';
$lang['img_manager'] = 'Преглед в диспечера на файлове';
+
$lang['subscr_subscribe_success'] = '%s е добавен към списъка с абониралите се за %s';
$lang['subscr_subscribe_error'] = 'Грешка при добавянето на %s към списъка с абониралите се за %s';
$lang['subscr_subscribe_noaddress'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (на ел. поща) с профила ви.';
@@ -243,6 +265,7 @@ $lang['subscr_unsubscribe_success'] = '%s е премахнат от списъ
$lang['subscr_unsubscribe_error'] = 'Грешка при премахването на %s от списъка с абониралите се за %s';
$lang['subscr_already_subscribed'] = '%s е вече абониран за %s';
$lang['subscr_not_subscribed'] = '%s не е абониран за %s';
+// Manage page for subscriptions
$lang['subscr_m_not_subscribed'] = 'Не сте абониран за текущата страницата или именно пространство.';
$lang['subscr_m_new_header'] = 'Добави абонамент';
$lang['subscr_m_current_header'] = 'Текущи абонаменти';
@@ -252,15 +275,22 @@ $lang['subscr_m_receive'] = 'Получаване';
$lang['subscr_style_every'] = 'на ел. писмо при всяка промяна';
$lang['subscr_style_digest'] = 'на ел. писмо с обобщение на промените във всяка страница (всеки %.2f дни)';
$lang['subscr_style_list'] = 'на списък с променените страници от последното ел. писмо (всеки %.2f дни)';
+
+/* auth.class language support */
$lang['authmodfailed'] = 'Лоша настройки за удостоверяване. Моля, уведомете администратора на Wiki страницата.';
$lang['authtempfail'] = 'Удостоверяването на потребители не е възможно за момента. Ако продължи дълго, моля уведомете администратора на Wiki страницата.';
+$lang['authpwdexpire'] = 'Срока на паролата ви ще изтече след %d дни. Препорачително е да я смените по-скоро.';
+
+/* installer strings */
$lang['i_chooselang'] = 'Изберете вашия изик';
$lang['i_installer'] = 'Инсталатор на DokuWiki';
$lang['i_wikiname'] = 'Име на Wiki-то';
$lang['i_enableacl'] = 'Ползване на списък за достъп (ACL) [препоръчително]';
$lang['i_superuser'] = 'Супер потребител';
$lang['i_problems'] = 'Открити са проблеми, които възпрепятстват инсталирането. Ще можете да продължите след като отстраните долуизброените проблеми.';
-$lang['i_modified'] = 'Поради мерки за сигурност инсталаторът работи само с нови и непроменени инсталационни файлове. Трябва да разархивирате отново файловете от сваления архив или да се посъветвате с <a href="http://dokuwiki.org/install">Инструкциите за инсталиране на Dokuwiki</a>.';
+$lang['i_modified'] = 'Поради мерки за сигурност инсталаторът работи само с нови и непроменени инсталационни файлове.
+ Трябва да разархивирате отново файловете от сваления архив или да се посъветвате с <a href="http://dokuwiki.org/install">Инструкциите за инсталиране на Dokuwiki</a>.';
+
$lang['i_funcna'] = 'PHP функцията <code>%s</code> не е достъпна. Може би е забранена от доставчика на хостинг.';
$lang['i_phpver'] = 'Инсталираната версия <code>%s</code> на PHP е по-стара от необходимата <code>%s</code>. Актуализирайте PHP инсталацията.';
$lang['i_permfail'] = '<code>%s</code> не е достъпна за писане от DokuWiki. Трябва да промените правата за достъп до директорията!';
@@ -269,29 +299,16 @@ $lang['i_writeerr'] = '<code>%s</code> не можа да бъде с
$lang['i_badhash'] = 'Файлът dokuwiki.php не може да бъде разпознат или е променен (hash=<code>%s</code>)';
$lang['i_badval'] = '<code>%s</code> - непозволена или празна стойност';
$lang['i_success'] = 'Настройването приключи успешно. Вече можете да изтриете файла install.php. Продължете към <a href="doku.php">Вашето ново DokuWiki</a>.';
-$lang['i_failure'] = 'Възникнаха грешки при записването на файловете с настройки. Вероятно ще се наложи да ги поправите ръчно, за да можете да ползвате <a href="doku.php">Вашето ново DokuWiki</a>.';
+
+$lang['i_failure'] = 'Възникнаха грешки при записването на файловете с настройки. Вероятно ще се наложи да ги поправите ръчно,
+ за да можете да ползвате <a href="doku.php">Вашето ново DokuWiki</a>.';
$lang['i_policy'] = 'Първоначална политика за достъп';
$lang['i_pol0'] = 'Отворено Wiki (всеки може да чете, пише и качва)';
$lang['i_pol1'] = 'Публично Wiki (всеки може да чете, само регистрирани пишат и качват)';
$lang['i_pol2'] = 'Затворено Wiki (само регистрирани четат, пишат и качват)';
$lang['i_retry'] = 'Повторен опит';
$lang['i_license'] = 'Моля, изберете лиценз под който желаете да публикувате съдържанието:';
-$lang['mu_intro'] = 'От тук можете да качите няколко файла наведнъж. Натиснете бутона "Избиране", изберете файлове и натиснете "Качване".
-';
-$lang['mu_gridname'] = 'Име на файла';
-$lang['mu_gridsize'] = 'Големина';
-$lang['mu_gridstat'] = 'Състояние';
-$lang['mu_namespace'] = 'Именно пространство';
-$lang['mu_browse'] = 'Избиране';
-$lang['mu_toobig'] = 'прекалено голям';
-$lang['mu_ready'] = 'готов за качване';
-$lang['mu_done'] = 'качен';
-$lang['mu_fail'] = 'неуспешно качване';
-$lang['mu_authfail'] = 'приключила сесия';
-$lang['mu_progress'] = '@PCT@% качен';
-$lang['mu_filetypes'] = 'Позволени файлови разширения';
-$lang['mu_info'] = 'качени файла.';
-$lang['mu_lasterr'] = 'Последна грешка:';
+
$lang['recent_global'] = 'В момента преглеждате промените в именно пространство <b>%s</b>. Може да прегледате и <a href="%s">промените в цялото Wiki</a>.';
$lang['years'] = 'преди %d години';
$lang['months'] = 'преди %d месеца';
@@ -300,7 +317,9 @@ $lang['days'] = 'преди %d дни';
$lang['hours'] = 'преди %d часа';
$lang['minutes'] = 'преди %d минути';
$lang['seconds'] = 'преди %d секунди';
-$lang['wordblock'] = 'Направените от вас промени не са съхранени, защото съдържат забранен текст (SPAM).';
+
+$lang['wordblock'] = 'Направените от Вас промени не са съхранени, защото съдържат забранен текст (SPAM).';
+
$lang['media_uploadtab'] = 'Качване';
$lang['media_searchtab'] = 'Търсене';
$lang['media_file'] = 'Файл';
@@ -311,7 +330,7 @@ $lang['media_list_thumbs'] = 'Миниатюри';
$lang['media_list_rows'] = 'Редове';
$lang['media_sort_name'] = 'Име';
$lang['media_sort_date'] = 'Дата';
-$lang['media_namespaces'] = 'Изберете именно пространство';
+$lang['media_namespaces'] = 'Изберете:';
$lang['media_files'] = 'Файлове в %s';
$lang['media_upload'] = 'Качване в %s';
$lang['media_search'] = 'Търсене в %s';
@@ -324,4 +343,7 @@ $lang['media_perm_read'] = 'За съжаление нямате дост
$lang['media_perm_upload'] = 'За съжаление нямате достатъчно права, за да можете да качите файла.';
$lang['media_update'] = 'Качване на нова версия';
$lang['media_restore'] = 'Възстановяване на тази версия';
+
$lang['plugin_install_err'] = 'Неправилно инсталирана приставка. Моля, преименувайте директорията \'%s\' на \'%s\'.';
+
+//Setup VIM: ex: et ts=2 :
diff --git a/inc/lang/bg/resetpwd.txt b/inc/lang/bg/resetpwd.txt
new file mode 100644
index 000000000..caa4adfdc
--- /dev/null
+++ b/inc/lang/bg/resetpwd.txt
@@ -0,0 +1,4 @@
+====== Задаване на нова парола ======
+
+Моля, въведете нова парола за вашия акаунт в Wiki страницата.
+
diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php
index eac9fc8d1..e299f6427 100644
--- a/inc/lang/ca-valencia/lang.php
+++ b/inc/lang/ca-valencia/lang.php
@@ -41,7 +41,6 @@ $lang['btn_subscribe'] = 'Subscriure\'s a la pàgina';
$lang['btn_unsubscribe'] = 'Desubscriure\'s de la pàgina';
$lang['btn_profile'] = 'Actualisar perfil';
$lang['btn_reset'] = 'Reiniciar';
-$lang['btn_resendpwd'] = 'Enviar contrasenya nova';
$lang['btn_draft'] = 'Editar borrador';
$lang['btn_recover'] = 'Recuperar borrador';
$lang['btn_draftdel'] = 'Borrar borrador';
@@ -76,7 +75,6 @@ $lang['profnoempty'] = 'No es permet deixar el nom o la direcció de c
$lang['profchanged'] = 'Perfil de l\'usuari actualisat.';
$lang['pwdforget'] = '¿Ha oblidat la contrasenya? Demane\'n una nova';
$lang['resendna'] = 'Este wiki no permet reenviar la contrasenya.';
-$lang['resendpwd'] = 'Enviar contrasenya nova per a';
$lang['resendpwdmissing'] = 'Disculpe, pero deu omplir tots els camps.';
$lang['resendpwdnouser'] = 'Disculpe, pero no trobem ad est usuari en la base de senyes.';
$lang['resendpwdbadauth'] = 'Disculpe, pero este còdic d\'autenticació no es vàlit. Verifique que haja utilisat el víncul de confirmació sancer.';
@@ -221,21 +219,6 @@ $lang['i_pol0'] = 'Wiki obert (llegir, escriure i enviar tots)';
$lang['i_pol1'] = 'Wiki públic (llegir tots, escriure i enviar només usuaris registrats)';
$lang['i_pol2'] = 'Wiki tancat (llegir, escriure i enviar només usuaris registrats)';
$lang['i_retry'] = 'Reintentar';
-$lang['mu_intro'] = 'Des d\'ací pot enviar diversos archius d\'una volta. Pulse el botó d\'examinar per a afegir-los a la coa. Pulse enviar quan ho tinga.';
-$lang['mu_gridname'] = 'Nom d\'archiu';
-$lang['mu_gridsize'] = 'Tamany';
-$lang['mu_gridstat'] = 'Estat';
-$lang['mu_namespace'] = 'Espai de noms';
-$lang['mu_browse'] = 'Examinar';
-$lang['mu_toobig'] = 'massa gran';
-$lang['mu_ready'] = 'preparat per a enviar';
-$lang['mu_done'] = 'complet';
-$lang['mu_fail'] = 'fallit';
-$lang['mu_authfail'] = 'la sessió ha vençut';
-$lang['mu_progress'] = '@PCT@% enviat';
-$lang['mu_filetypes'] = 'Classes d\'archiu permeses';
-$lang['mu_info'] = 'archius enviats.';
-$lang['mu_lasterr'] = 'Últim erro:';
$lang['recent_global'] = 'Està veent els canvis dins de l\'espai de noms <b>%s</b>. També pot <a href="%s">vore els canvis recents en el wiki sancer</a>.';
$lang['years'] = 'fa %d anys';
$lang['months'] = 'fa %d mesos';
diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php
index 7094df5b4..3a1412617 100644
--- a/inc/lang/ca/lang.php
+++ b/inc/lang/ca/lang.php
@@ -41,7 +41,6 @@ $lang['btn_subscribe'] = 'Subscripció a canvis d\'aquesta pàgina';
$lang['btn_unsubscribe'] = 'Cancel·la subscripció a pàgina';
$lang['btn_profile'] = 'Actualització del perfil';
$lang['btn_reset'] = 'Reinicia';
-$lang['btn_resendpwd'] = 'Envia nova contrasenya';
$lang['btn_draft'] = 'Edita esborrany';
$lang['btn_recover'] = 'Recupera esborrany';
$lang['btn_draftdel'] = 'Suprimeix esborrany';
@@ -76,7 +75,6 @@ $lang['profnoempty'] = 'No es pot deixar en blanc el nom o l\'adreça
$lang['profchanged'] = 'El perfil d\'usuari s\'ha actualitzat correctament.';
$lang['pwdforget'] = 'Heu oblidat la contrasenya? Podeu obtenir-ne una de nova.';
$lang['resendna'] = 'Aquest wiki no permet tornar a enviar la contrasenya.';
-$lang['resendpwd'] = 'Enviament d\'una nova contrasenya per a';
$lang['resendpwdmissing'] = 'Heu d\'emplenar tots els camps.';
$lang['resendpwdnouser'] = 'No s\'ha pogut trobar aquest usuari a la base de dades.';
$lang['resendpwdbadauth'] = 'Aquest codi d\'autenticació no és vàlid. Assegureu-vos d\'utilitzar l\'enllaç de confirmació complet.';
@@ -217,21 +215,6 @@ $lang['i_pol0'] = 'Wiki obert (tothom pot llegir, escriure i penj
$lang['i_pol1'] = 'Wiki públic (tothom pot llegir, els usuaris registrats poden escriure i penjar fitxers)';
$lang['i_pol2'] = 'Wiki tancat (només els usuaris registrats poden llegir, escriure i penjar fitxers)';
$lang['i_retry'] = 'Reintenta';
-$lang['mu_intro'] = 'Aquí podeu penjar múltiples fitxers d\'una vegada. Feu clic en el botó Explora per afegir els fitxers a la cua. Després, premeu Penja.';
-$lang['mu_gridname'] = 'Nom del fitxer';
-$lang['mu_gridsize'] = 'Mida';
-$lang['mu_gridstat'] = 'Estat';
-$lang['mu_namespace'] = 'Espai';
-$lang['mu_browse'] = 'Explora';
-$lang['mu_toobig'] = 'massa gran';
-$lang['mu_ready'] = 'llest per a penjar';
-$lang['mu_done'] = 'complet';
-$lang['mu_fail'] = 'error';
-$lang['mu_authfail'] = 'la sessió ha vençut';
-$lang['mu_progress'] = 'càrrega @PCT@%';
-$lang['mu_filetypes'] = 'Tipus de fitxer permesos';
-$lang['mu_info'] = 'fitxers penjats.';
-$lang['mu_lasterr'] = 'Darrer error:';
$lang['recent_global'] = 'Esteu veient els canvis recents de l\'espai <strong>%s</strong>. També podeu veure els <a href="%s">canvis recents de tot el wiki</a>.';
$lang['years'] = 'fa %d anys';
$lang['months'] = 'fa %d mesos';
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index 292c2c42e..608beafd8 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -10,6 +10,8 @@
* @author Marek Sacha <sachamar@fel.cvut.cz>
* @author Lefty <lefty@multihost.cz>
* @author Vojta Beran <xmamut@email.cz>
+ * @author zbynek.krivka@seznam.cz
+ * @author Bohumir Zamecnik <bohumir.zamecnik@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -45,12 +47,13 @@ $lang['btn_backtomedia'] = 'Zpět do Výběru dokumentu';
$lang['btn_subscribe'] = 'Odebírat emailem změny stránky';
$lang['btn_profile'] = 'Upravit profil';
$lang['btn_reset'] = 'Reset';
-$lang['btn_resendpwd'] = 'Zaslat nové heslo';
$lang['btn_draft'] = 'Upravit koncept';
$lang['btn_recover'] = 'Obnovit koncept';
$lang['btn_draftdel'] = 'Vymazat koncept';
$lang['btn_revert'] = 'Vrátit zpět';
$lang['btn_register'] = 'Registrovat';
+$lang['btn_apply'] = 'Použít';
+$lang['btn_media'] = 'Správa médií';
$lang['loggedinas'] = 'Přihlášen(a) jako';
$lang['user'] = 'Uživatelské jméno';
$lang['pass'] = 'Heslo';
@@ -80,7 +83,6 @@ $lang['profnoempty'] = 'Nelze zadat prázdné jméno nebo mailová adr
$lang['profchanged'] = 'Uživatelský profil změněn.';
$lang['pwdforget'] = 'Zapomněli jste heslo? Nechte si zaslat nové';
$lang['resendna'] = 'Tato wiki neumožňuje zasílání nových hesel.';
-$lang['resendpwd'] = 'Odeslat nové heslo pro uživatele';
$lang['resendpwdmissing'] = 'Musíte vyplnit všechny položky.';
$lang['resendpwdnouser'] = 'Bohužel takový uživatel v systému není.';
$lang['resendpwdbadauth'] = 'Autorizační kód není platný. Zadali jste opravdu celý odkaz na potvrzovací stránku?';
@@ -95,7 +97,7 @@ $lang['txt_filename'] = 'Wiki jméno (volitelné)';
$lang['txt_overwrt'] = 'Přepsat existující soubor';
$lang['lockedby'] = 'Právě zamknuto:';
$lang['lockexpire'] = 'Zámek vyprší:';
-$lang['js']['willexpire'] = 'Váš zámek pro editaci za chvíli vyprší.\nAbyste předešli konfliktům, stiskněte tlačítko Náhled a zámek se prodlouží.';
+$lang['js']['willexpire'] = 'Váš zámek pro editaci za chvíli vyprší.\nAbyste předešli konfliktům, stiskněte tlačítko Náhled a zámek se prodlouží.';
$lang['js']['notsavedyet'] = 'Jsou tu neuložené změny, které budou ztraceny.
Chcete opravdu pokračovat?';
$lang['js']['searchmedia'] = 'Hledat soubory';
@@ -127,6 +129,17 @@ Přesto tento odkaz můžete zkopírovat a vložit jinde.';
$lang['js']['linkwiz'] = 'Průvodce odkazy';
$lang['js']['linkto'] = 'Odkaz na:';
$lang['js']['del_confirm'] = 'Vymazat tuto položku?';
+$lang['js']['restore_confirm'] = 'Opravdu obnovit tuto verzi?';
+$lang['js']['media_diff'] = 'Prohlédnout rozdíly:';
+$lang['js']['media_diff_both'] = 'Vedle sebe';
+$lang['js']['media_diff_opacity'] = 'Zvýraznění';
+$lang['js']['media_diff_portions'] = 'Osvědčit';
+$lang['js']['media_select'] = 'Vybrat soubory...';
+$lang['js']['media_upload_btn'] = 'Nahrát';
+$lang['js']['media_done_btn'] = 'Hotovo';
+$lang['js']['media_drop'] = 'Sem přetáhněte soubory pro nahrátí';
+$lang['js']['media_cancel'] = 'odstranit';
+$lang['js']['media_overwrt'] = 'Přepsat existující soubory';
$lang['rssfailed'] = 'Nastala chyba při vytváření tohoto RSS: ';
$lang['nothingfound'] = 'Nic nenalezeno.';
$lang['mediaselect'] = 'Výběr dokumentu';
@@ -161,7 +174,7 @@ $lang['yours'] = 'Vaše verze';
$lang['diff'] = 'Zobrazit rozdíly vůči aktuální verzi';
$lang['diff2'] = 'Zobrazit rozdíly mezi vybranými verzemi';
$lang['difflink'] = 'Odkaz na výstup diff';
-$lang['diff_type'] = 'Prohlédnout rozdíly:';
+$lang['diff_type'] = 'Zobrazit rozdíly:';
$lang['diff_inline'] = 'Vložené';
$lang['diff_side'] = 'Přidané';
$lang['line'] = 'Řádek';
@@ -176,11 +189,20 @@ $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>.';
$lang['download'] = 'Stáhnout snippet';
+$lang['tools'] = 'Nástroje';
+$lang['user_tools'] = 'Uživatelské nástroje';
+$lang['site_tools'] = 'Nástroje pro tento web';
+$lang['page_tools'] = 'Nástroje pro stránku';
+$lang['skip_to_content'] = 'jít k obsahu';
$lang['mail_newpage'] = 'nová stránka:';
$lang['mail_changed'] = 'změna stránky:';
$lang['mail_subscribe_list'] = 'stránky změněné ve jmenném prostoru:';
$lang['mail_new_user'] = 'nový uživatel:';
$lang['mail_upload'] = 'načtený dokument:';
+$lang['changes_type'] = 'Prohlednou změny ';
+$lang['pages_changes'] = 'stránek';
+$lang['media_changes'] = 'souborů médií';
+$lang['both_changes'] = 'stránek i médií';
$lang['qb_bold'] = 'Tučně';
$lang['qb_italic'] = 'Kurzíva';
$lang['qb_underl'] = 'Podtržení';
@@ -221,6 +243,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Formát';
$lang['img_camera'] = 'Typ fotoaparátu';
$lang['img_keywords'] = 'Klíčová slova';
+$lang['img_width'] = 'Šířka';
+$lang['img_height'] = 'Výška';
+$lang['img_manager'] = 'Zobrazit ve správě médií';
$lang['subscr_subscribe_success'] = '%s byl přihlášen do seznamu odběratelů %s';
$lang['subscr_subscribe_error'] = 'Došlo k chybě při přihlašování %s do seznamu odběratelů %s';
$lang['subscr_subscribe_noaddress'] = 'K Vašemu loginu neexistuje žádná adresa, nemohl jste být přihlášen do seznamu odběratelů.';
@@ -235,8 +260,8 @@ $lang['subscr_m_unsubscribe'] = 'Odhlásit z odběru změn emailem';
$lang['subscr_m_subscribe'] = 'Přihlásit se k odběru změn emailem';
$lang['subscr_m_receive'] = 'Přejete si dostávat';
$lang['subscr_style_every'] = 'email pro každou změnu';
-$lang['subscr_style_digest'] = 'souhrnný email změn pro každou stránku';
-$lang['subscr_style_list'] = 'seznam změněných stránek od posledního emailu';
+$lang['subscr_style_digest'] = 'souhrnný email změn pro každou stránku (každé %.2f dny/dní)';
+$lang['subscr_style_list'] = 'seznam změněných stránek od posledního emailu (každé %.2f dny/dní)';
$lang['authmodfailed'] = 'Autentizace uživatelů je špatně nastavena. Informujte prosím správce této wiki.';
$lang['authtempfail'] = 'Autentizace uživatelů je dočasně nedostupná. Pokud tento problém přetrvává, informujte prosím správce této wiki.';
$lang['i_chooselang'] = 'Vyberte si jazyk';
@@ -245,7 +270,7 @@ $lang['i_wikiname'] = 'Název wiki';
$lang['i_enableacl'] = 'Zapnout ACL (doporučeno)';
$lang['i_superuser'] = 'Správce';
$lang['i_problems'] = 'Instalátor narazil na níže popsané problémy. Nelze pokračovat v instalaci, dokud je neopravíte.';
-$lang['i_modified'] = 'Instalátor bude z bezpečnostních důvodů pracovat pouze s čistou a ještě neupravenou instalací DokuWiki. Buď znovu rozbalte souboru z instalačního balíčku nebo se zkuste poradit s <a href="http://dokuwiki.org/install">instrukcemi pro instalaci DokuWiki</a>.';
+$lang['i_modified'] = 'Instalátor bude z bezpečnostních důvodů pracovat pouze s čistou a ještě neupravenou instalací DokuWiki. Buď znovu rozbalte soubory z instalačního balíčku, nebo zkuste prostudovat <a href="http://dokuwiki.org/install">instrukce pro instalaci DokuWiki</a>.';
$lang['i_funcna'] = 'PHP funkce <code>%s</code> není dostupná. Váš webhosting ji možná z nějakého důvodu vypnul.';
$lang['i_phpver'] = 'Verze vaší instalace PHP <code>%s</code> je nižší než požadovaná <code>%s</code>. Budete muset aktualizovat svou instalaci PHP.';
$lang['i_permfail'] = 'DokuWiki nemůže zapisovat do <code>%s</code>. Budete muset opravit práva k tomuto adresáři.';
@@ -261,27 +286,36 @@ $lang['i_pol1'] = 'Veřejná wiki (čtení pro všechny, zápis a
$lang['i_pol2'] = 'Uzavřená wiki (čtení, zápis a upload pouze pro registrované uživatele)';
$lang['i_retry'] = 'Zkusit znovu';
$lang['i_license'] = 'Vyberte prosím licenci obsahu:';
-$lang['mu_intro'] = 'Zde můžete načíst více souborů najednou. Pro přidání souborů do fronty stiskněte tlačítko "Procházet". Až budete hotovi, stiskněte "Načíst".';
-$lang['mu_gridname'] = 'Název souboru';
-$lang['mu_gridsize'] = 'Velikost';
-$lang['mu_gridstat'] = 'Stav';
-$lang['mu_namespace'] = 'Jmenný prostor';
-$lang['mu_browse'] = 'Procházet';
-$lang['mu_toobig'] = 'příliš velké';
-$lang['mu_ready'] = 'připraveno k načtení';
-$lang['mu_done'] = 'hotovo';
-$lang['mu_fail'] = 'selhalo';
-$lang['mu_authfail'] = 'vypršela session';
-$lang['mu_progress'] = '@PCT@% načten';
-$lang['mu_filetypes'] = 'Povolené typy souborů';
-$lang['mu_info'] = 'soubory načteny.';
-$lang['mu_lasterr'] = 'Poslední chyba:';
$lang['recent_global'] = 'Právě si prohlížíte změny ve jmenném prostoru <b>%s</b>. Také si můžete <a href="%s">zobrazit změny v celé wiki</a>.';
-$lang['years'] = 'před % roky';
-$lang['months'] = 'před % měsíci';
-$lang['weeks'] = 'před % týdny';
-$lang['days'] = 'před % dny';
-$lang['hours'] = 'před % hodinami';
-$lang['minutes'] = 'před % minutami';
-$lang['seconds'] = 'před % sekundami';
+$lang['years'] = 'před %d roky';
+$lang['months'] = 'před %d měsíci';
+$lang['weeks'] = 'před %d týdny';
+$lang['days'] = 'před %d dny';
+$lang['hours'] = 'před %d hodinami';
+$lang['minutes'] = 'před %d minutami';
+$lang['seconds'] = 'před %d sekundami';
$lang['wordblock'] = 'Vaše změny nebyly uloženy, protože obsahují blokovaný text(spam).';
+$lang['media_uploadtab'] = 'Nahrát';
+$lang['media_searchtab'] = 'Hledat';
+$lang['media_file'] = 'Soubor';
+$lang['media_viewtab'] = 'Zobrazit';
+$lang['media_edittab'] = 'Upravit';
+$lang['media_historytab'] = 'Historie';
+$lang['media_list_thumbs'] = 'Zmenšeniny';
+$lang['media_list_rows'] = 'Řádky';
+$lang['media_sort_name'] = 'Jméno';
+$lang['media_sort_date'] = 'Datum';
+$lang['media_namespaces'] = 'Vyber jmenný prostor';
+$lang['media_files'] = 'Soubory v %s';
+$lang['media_upload'] = 'Upload do %s';
+$lang['media_search'] = 'Hledat v %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s na %s';
+$lang['media_edit'] = 'Upravit %s';
+$lang['media_history'] = 'Historie %s';
+$lang['media_meta_edited'] = 'metadata upravena';
+$lang['media_perm_read'] = 'Bohužel, nemáte práva číst soubory.';
+$lang['media_perm_upload'] = 'Bohužel, nemáte práva nahrávat soubory.';
+$lang['media_update'] = 'Nahrát novou verzi';
+$lang['media_restore'] = 'Obnovit tuto verzi';
+$lang['plugin_install_err'] = 'Plugin je špatně nainstalován. Přejmenujte adresář pluginu \'%s\' na \'%s\'.';
diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php
index 0b6961921..641ea6552 100644
--- a/inc/lang/da/lang.php
+++ b/inc/lang/da/lang.php
@@ -48,7 +48,6 @@ $lang['btn_backtomedia'] = 'Tilbage til valg af mediefil';
$lang['btn_subscribe'] = 'Abonnér på ændringer';
$lang['btn_profile'] = 'Opdatér profil';
$lang['btn_reset'] = 'Nulstil';
-$lang['btn_resendpwd'] = 'Send ny adgangskode';
$lang['btn_draft'] = 'Redigér kladde';
$lang['btn_recover'] = 'Gendan kladde';
$lang['btn_draftdel'] = 'Slet kladde';
@@ -83,7 +82,6 @@ $lang['profnoempty'] = 'Tomt navn eller e-mail adresse er ikke tilladt
$lang['profchanged'] = 'Brugerprofil opdateret korrekt.';
$lang['pwdforget'] = 'Har du glemt dit adgangskode? Få et nyt';
$lang['resendna'] = 'Denne wiki understøtter ikke udsendelse af nyt adgangskode.';
-$lang['resendpwd'] = 'Send nyt adgangskode for';
$lang['resendpwdmissing'] = 'Du skal udfylde alle felter.';
$lang['resendpwdnouser'] = 'Vi kan ikke finde denne bruger i vores database.';
$lang['resendpwdbadauth'] = 'Beklager, denne autoriseringskode er ikke gyldig. Kontroller venligst at du benyttede det fulde link til bekræftelse.';
@@ -262,21 +260,6 @@ $lang['i_pol1'] = 'Offentlig Wiki (alle kan læse, kun registrere
$lang['i_pol2'] = 'Lukket Wiki (kun for registerede brugere kan læse, skrive og overføre)';
$lang['i_retry'] = 'Forsøg igen';
$lang['i_license'] = 'Vælg venligst licensen du vil tilføje dit indhold under:';
-$lang['mu_intro'] = 'Her kan du overføre flere filer af gangen. Klik på gennemse for at tilføje dem til køen. Tryk på overføre knappen når du er klar.';
-$lang['mu_gridname'] = 'Filnavn';
-$lang['mu_gridsize'] = 'Størrelse';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Navnerum';
-$lang['mu_browse'] = 'gennemse';
-$lang['mu_toobig'] = 'for stor';
-$lang['mu_ready'] = 'klar til overføre';
-$lang['mu_done'] = 'færdig';
-$lang['mu_fail'] = 'fejlede';
-$lang['mu_authfail'] = 'session udløb';
-$lang['mu_progress'] = '@PCT@% upload';
-$lang['mu_filetypes'] = 'Tilladte filtyper';
-$lang['mu_info'] = 'filer var overføret.';
-$lang['mu_lasterr'] = 'Sidste fejl:';
$lang['recent_global'] = 'Du ser lige nu ændringerne i <b>%s</b> navnerummet. Du kan også <a href="%s">se de sidste ændringer for hele wiki siden </a>';
$lang['years'] = '%d år siden';
$lang['months'] = '%d måned siden';
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index ec5e308ce..093125aa6 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -54,7 +54,7 @@ $lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
$lang['btn_subscribe'] = 'Aboverwaltung';
$lang['btn_profile'] = 'Benutzerprofil';
$lang['btn_reset'] = 'Zurücksetzen';
-$lang['btn_resendpwd'] = 'Sende neues Passwort';
+$lang['btn_resendpwd'] = 'Setze neues Passwort';
$lang['btn_draft'] = 'Entwurf bearbeiten';
$lang['btn_recover'] = 'Entwurf wiederherstellen';
$lang['btn_draftdel'] = 'Entwurf löschen';
@@ -91,7 +91,7 @@ $lang['profnoempty'] = 'Es muss ein Name oder eine E-Mail Adresse ange
$lang['profchanged'] = 'Benutzerprofil erfolgreich geändert.';
$lang['pwdforget'] = 'Passwort vergessen? Fordere ein neues an';
$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
-$lang['resendpwd'] = 'Neues Passwort senden für';
+$lang['resendpwd'] = 'Neues Passwort setzen für';
$lang['resendpwdmissing'] = 'Es tut mir Leid, aber du musst alle Felder ausfüllen.';
$lang['resendpwdnouser'] = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
$lang['resendpwdbadauth'] = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stelle sicher, dass du den kompletten Bestätigungslink verwendet haben.';
@@ -155,7 +155,7 @@ $lang['uploadsucc'] = 'Datei wurde erfolgreich hochgeladen';
$lang['uploadfail'] = 'Hochladen fehlgeschlagen. Keine Berechtigung?';
$lang['uploadwrong'] = 'Hochladen verweigert. Diese Dateiendung ist nicht erlaubt.';
$lang['uploadexist'] = 'Datei existiert bereits. Keine Änderungen vorgenommen.';
-$lang['uploadbadcontent'] = 'Die hochgeladenen Daten stimmen nicht mit der Dateiendung % überein.';
+$lang['uploadbadcontent'] = 'Die hochgeladenen Daten stimmen nicht mit der Dateiendung %s überein.';
$lang['uploadspam'] = 'Hochladen verweigert: Treffer auf der Spamliste.';
$lang['uploadxss'] = 'Hochladen verweigert: Daten scheinen Schadcode zu enthalten.';
$lang['uploadsize'] = 'Die hochgeladene Datei war zu groß. (max. %s)';
@@ -168,7 +168,7 @@ $lang['accessdenied'] = 'Du hast keinen Zugriff auf diese Seite';
$lang['mediausage'] = 'Syntax zum Verwenden dieser Datei:';
$lang['mediaview'] = 'Originaldatei öffnen';
$lang['mediaroot'] = 'Wurzel';
-$lang['mediaupload'] = 'Lade hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stelle diese dem Dateinamen im Feld "Hochladen als" durch Doppelpunkt getrennt voran.';
+$lang['mediaupload'] = 'Lade hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stelle diese dem Dateinamen durch Doppelpunkt getrennt voran, nachdem Du die Datei ausgewählt hast.';
$lang['mediaextchange'] = 'Dateiendung vom .%s nach .%s geändert!';
$lang['reference'] = 'Verwendung von';
$lang['ref_inuse'] = 'Diese Datei kann nicht gelöscht werden, da sie noch von folgenden Seiten benutzt wird:';
@@ -288,21 +288,6 @@ $lang['i_pol1'] = 'Öffentliches Wiki (lesen für alle, schreiben
$lang['i_pol2'] = 'Geschlossenes Wiki (lesen, schreiben, hochladen nur für registrierte Nutzer)';
$lang['i_retry'] = 'Wiederholen';
$lang['i_license'] = 'Bitte wähle die Lizenz aus unter der die Wiki-Inhalte veröffentlicht werden sollen:';
-$lang['mu_intro'] = 'In diesem Bereich kannst du mehrere Dateien gleichzeitig hochladen. Benutze die Schaltfläche "Durchsuchen", um sie der Warteschlange zuzufügen. Betätige die Schaltfläche "Hochladen", um die Übertragung zu starten.';
-$lang['mu_gridname'] = 'Dateiname';
-$lang['mu_gridsize'] = 'Größe';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namensraum';
-$lang['mu_browse'] = 'Durchsuchen';
-$lang['mu_toobig'] = 'zu groß';
-$lang['mu_ready'] = 'bereit zum Hochladen';
-$lang['mu_done'] = 'fertig';
-$lang['mu_fail'] = 'gescheitert';
-$lang['mu_authfail'] = 'Sitzung abgelaufen';
-$lang['mu_progress'] = '@PCT@% hochgeladen';
-$lang['mu_filetypes'] = 'Erlaubte Dateitypen';
-$lang['mu_info'] = 'Dateien hochgeladen.';
-$lang['mu_lasterr'] = 'Letzter Fehler:';
$lang['recent_global'] = 'Im Moment siehst du die Änderungen im Namensraum <b>%s</b>. Du kannst auch <a href="%s">die Änderungen im gesamten Wiki sehen</a>.';
$lang['years'] = 'vor %d Jahren';
$lang['months'] = 'vor %d Monaten';
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index eef2f6632..63ffd3008 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -56,7 +56,7 @@ $lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
$lang['btn_subscribe'] = 'Aboverwaltung';
$lang['btn_profile'] = 'Benutzerprofil';
$lang['btn_reset'] = 'Zurücksetzen';
-$lang['btn_resendpwd'] = 'Sende neues Passwort';
+$lang['btn_resendpwd'] = 'Setze neues Passwort';
$lang['btn_draft'] = 'Entwurf bearbeiten';
$lang['btn_recover'] = 'Entwurf wiederherstellen';
$lang['btn_draftdel'] = 'Entwurf löschen';
@@ -93,7 +93,7 @@ $lang['profnoempty'] = 'Es muss ein Name und eine E-Mail-Adresse angeg
$lang['profchanged'] = 'Benutzerprofil erfolgreich geändert.';
$lang['pwdforget'] = 'Passwort vergessen? Fordere ein neues an';
$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
-$lang['resendpwd'] = 'Neues Passwort senden für';
+$lang['resendpwd'] = 'Neues Passwort setzen für';
$lang['resendpwdmissing'] = 'Es tut mir Leid, aber Sie müssen alle Felder ausfüllen.';
$lang['resendpwdnouser'] = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
$lang['resendpwdbadauth'] = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stellen Sie sicher, dass Sie den kompletten Bestätigungslink verwendet haben.';
@@ -170,7 +170,7 @@ $lang['accessdenied'] = 'Es ist Ihnen nicht gestattet, diese Seite zu s
$lang['mediausage'] = 'Syntax zum Verwenden dieser Datei:';
$lang['mediaview'] = 'Originaldatei öffnen';
$lang['mediaroot'] = 'Wurzel';
-$lang['mediaupload'] = 'Laden Sie hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stellen Sie diese dem Dateinamen im Feld "Hochladen als" durch Doppelpunkt getrennt voran.';
+$lang['mediaupload'] = 'Laden Sie hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stellen Sie diese dem Dateinamen durch Doppelpunkt getrennt voran, nachdem Sie die Datei ausgewählt haben.';
$lang['mediaextchange'] = 'Dateiendung vom .%s nach .%s geändert!';
$lang['reference'] = 'Verwendung von';
$lang['ref_inuse'] = 'Diese Datei kann nicht gelöscht werden, da sie noch von folgenden Seiten benutzt wird:';
@@ -198,6 +198,11 @@ $lang['external_edit'] = 'Externe Bearbeitung';
$lang['summary'] = 'Zusammenfassung';
$lang['noflash'] = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Inhalt anzuzeigen.';
$lang['download'] = 'Schnipsel herunterladen';
+$lang['tools'] = 'Werkzeuge';
+$lang['user_tools'] = 'Benutzer-Werkzeuge';
+$lang['site_tools'] = 'Webseiten-Werkzeuge';
+$lang['page_tools'] = 'Seiten-Werkzeuge';
+$lang['skip_to_content'] = 'zum Inhalt springen';
$lang['mail_newpage'] = 'Neue Seite:';
$lang['mail_changed'] = 'Seite geändert:';
$lang['mail_subscribe_list'] = 'Geänderte Seiten im Namensraum:';
@@ -268,6 +273,7 @@ $lang['subscr_style_digest'] = 'Zusammenfassung der Änderungen für jede ver
$lang['subscr_style_list'] = 'Liste der geänderten Seiten (Alle %.2f Tage)';
$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wenden Sie sich an den Systembetreuer.';
$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wenden Sie sich an den Systembetreuer.';
+$lang['authpwdexpire'] = 'Ihr Passwort läuft in %d Tag(en) ab, Sie sollten es bald ändern.';
$lang['i_chooselang'] = 'Wählen Sie Ihre Sprache';
$lang['i_installer'] = 'DokuWiki Installation';
$lang['i_wikiname'] = 'Wiki-Name';
@@ -290,21 +296,6 @@ $lang['i_pol1'] = 'Öffentliches Wiki (lesen für alle, schreiben
$lang['i_pol2'] = 'Geschlossenes Wiki (lesen, schreiben, hochladen nur für registrierte Nutzer)';
$lang['i_retry'] = 'Wiederholen';
$lang['i_license'] = 'Bitte wählen Sie die Lizenz, unter die Sie Ihre Inhalte stellen möchten:';
-$lang['mu_intro'] = 'In diesem Bereich können Sie mehrere Dateien gleichzeitig hochladen. Benutzen Sie die Schaltfläche "Durchsuchen" um sie der Warteschlange zuzufügen. Betätigen Sie die Schaltfläche "Hochladen" um die Übertragung zu starten.';
-$lang['mu_gridname'] = 'Dateiname';
-$lang['mu_gridsize'] = 'Größe';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namensraum';
-$lang['mu_browse'] = 'Durchsuchen';
-$lang['mu_toobig'] = 'zu groß';
-$lang['mu_ready'] = 'bereit zum Hochladen';
-$lang['mu_done'] = 'fertig';
-$lang['mu_fail'] = 'gescheitert';
-$lang['mu_authfail'] = 'Sitzung abgelaufen';
-$lang['mu_progress'] = '@PCT@% hochgeladen';
-$lang['mu_filetypes'] = 'Erlaubte Dateitypen';
-$lang['mu_info'] = 'Dateien hochgeladen!';
-$lang['mu_lasterr'] = 'Letzter Fehler:';
$lang['recent_global'] = 'Im Moment sehen Sie die Änderungen im Namensraum <b>%s</b>. Sie können auch <a href="%s">die Änderungen im gesamten Wiki sehen</a>.';
$lang['years'] = 'vor %d Jahren';
$lang['months'] = 'vor %d Monaten';
@@ -330,8 +321,8 @@ $lang['media_upload'] = 'In den <strong>%s</strong> Namespace hochladen
$lang['media_search'] = 'Im Namespace <strong>%s</strong> suchen.';
$lang['media_view'] = '%s';
$lang['media_viewold'] = '%s in %s';
-$lang['media_edit'] = 'Bearbeiten';
-$lang['media_history'] = 'Versionsverlauf der Datei.';
+$lang['media_edit'] = '%s bearbeiten';
+$lang['media_history'] = 'Versionsverlauf von %s.';
$lang['media_meta_edited'] = 'Meta-Informationen bearbeitet';
$lang['media_perm_read'] = 'Sie besitzen nicht die notwendigen Berechtigungen um die Datei anzuzeigen.';
$lang['media_perm_upload'] = 'Sie besitzen nicht die notwendigen Berechtigungen um Dateien hochzuladen.';
diff --git a/inc/lang/de/resetpwd.txt b/inc/lang/de/resetpwd.txt
new file mode 100644
index 000000000..a0a55c67a
--- /dev/null
+++ b/inc/lang/de/resetpwd.txt
@@ -0,0 +1,4 @@
+====== Neues Passwort setzen ======
+
+Bitte geben Sie ein neues Passwort für Ihren Wiki-Zugang ein.
+
diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php
index 4c334c1de..95f1a1ea5 100644
--- a/inc/lang/el/lang.php
+++ b/inc/lang/el/lang.php
@@ -43,7 +43,6 @@ $lang['btn_backtomedia'] = 'Επιστροφή στην επιλογή α
$lang['btn_subscribe'] = 'Εγγραφή σε λήψη ενημερώσεων σελίδας';
$lang['btn_profile'] = 'Επεξεργασία προφίλ';
$lang['btn_reset'] = 'Ακύρωση';
-$lang['btn_resendpwd'] = 'Αποστολή νέου κωδικού';
$lang['btn_draft'] = 'Επεξεργασία αυτόματα αποθηκευμένης σελίδας';
$lang['btn_recover'] = 'Επαναφορά αυτόματα αποθηκευμένης σελίδας';
$lang['btn_draftdel'] = 'Διαγραφή αυτόματα αποθηκευμένης σελίδας';
@@ -80,7 +79,6 @@ $lang['profnoempty'] = 'Δεν επιτρέπεται κενό όνο
$lang['profchanged'] = 'Το προφίλ χρήστη τροποποιήθηκε επιτυχώς.';
$lang['pwdforget'] = 'Ξεχάσατε το κωδικό σας; Αποκτήστε νέο.';
$lang['resendna'] = 'Αυτό το wiki δεν υποστηρίζει την εκ\' νέου αποστολή κωδικών.';
-$lang['resendpwd'] = 'Αποστολή νέων κωδικών για τον χρήστη';
$lang['resendpwdmissing'] = 'Πρέπει να συμπληρώσετε όλα τα πεδία.';
$lang['resendpwdnouser'] = 'Αυτός ο χρήστης δεν υπάρχει στα αρχεία μας.';
$lang['resendpwdbadauth'] = 'Αυτός ο κωδικός ενεργοποίησης δεν είναι έγκυρος.';
@@ -280,21 +278,6 @@ $lang['i_pol1'] = 'Δημόσιο Wiki (όλοι μπορούν
$lang['i_pol2'] = 'Κλειστό Wiki (μόνο οι εγγεγραμμένοι χρήστες μπορούν να διαβάσουν ή να δημιουργήσουν/τροποποιήσουν σελίδες και να μεταφορτώσουν αρχεία)';
$lang['i_retry'] = 'Νέα προσπάθεια';
$lang['i_license'] = 'Παρακαλώ επιλέξτε την άδεια που θα χρησιμοποιήσετε για την διάθεση του περιεχομένου σας:';
-$lang['mu_intro'] = 'Εδώ μπορείτε να φορτώσετε ταυτόχρονα πολλαπλά αρχεία. Πατήστε στο κουμπί προεπισκόπησης για να τα προσθέσετε στη λίστα. Πατήστε στο κουμπί μεταφόρτωσης όταν έχετε τελειώσει.';
-$lang['mu_gridname'] = 'Όνομα αρχείου';
-$lang['mu_gridsize'] = 'Μέγεθος';
-$lang['mu_gridstat'] = 'Κατάσταση';
-$lang['mu_namespace'] = 'Φάκελος';
-$lang['mu_browse'] = 'Επισκόπηση';
-$lang['mu_toobig'] = 'υπερβολικά μεγάλο';
-$lang['mu_ready'] = 'έτοιμο για φόρτωση';
-$lang['mu_done'] = 'ολοκληρώθηκε';
-$lang['mu_fail'] = 'απέτυχε';
-$lang['mu_authfail'] = 'η συνεδρία έληξε';
-$lang['mu_progress'] = 'φορτώθηκε @PCT@%';
-$lang['mu_filetypes'] = 'Επιτρεπτοί τύποι αρχείων';
-$lang['mu_info'] = 'τα αρχεία ανέβηκαν.';
-$lang['mu_lasterr'] = 'Τελευταίο σφάλμα:';
$lang['recent_global'] = 'Βλέπετε τις αλλαγές εντός του φακέλου <b>%s</b>. Μπορείτε επίσης να <a href="%s">δείτε τις πρόσφατες αλλαγές σε όλο το wiki</a>.';
$lang['years'] = 'πριν %d χρόνια';
$lang['months'] = 'πριν %d μήνες';
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index 89a7c4d40..2ba220e64 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -43,7 +43,7 @@ $lang['btn_backtomedia'] = 'Back to Mediafile Selection';
$lang['btn_subscribe'] = 'Manage Subscriptions';
$lang['btn_profile'] = 'Update Profile';
$lang['btn_reset'] = 'Reset';
-$lang['btn_resendpwd'] = 'Send new password';
+$lang['btn_resendpwd'] = 'Set new password';
$lang['btn_draft'] = 'Edit draft';
$lang['btn_recover'] = 'Recover draft';
$lang['btn_draftdel'] = 'Delete draft';
@@ -84,7 +84,7 @@ $lang['profchanged'] = 'User profile successfully updated.';
$lang['pwdforget'] = 'Forgotten your password? Get a new one';
$lang['resendna'] = 'This wiki does not support password resending.';
-$lang['resendpwd'] = 'Send new password for';
+$lang['resendpwd'] = 'Set new password for';
$lang['resendpwdmissing'] = 'Sorry, you must fill in all fields.';
$lang['resendpwdnouser'] = 'Sorry, we can\'t find this user in our database.';
$lang['resendpwdbadauth'] = 'Sorry, this auth code is not valid. Make sure you used the complete confirmation link.';
@@ -166,7 +166,7 @@ $lang['accessdenied'] = 'You are not allowed to view this page.';
$lang['mediausage'] = 'Use the following syntax to reference this file:';
$lang['mediaview'] = 'View original file';
$lang['mediaroot'] = 'root';
-$lang['mediaupload'] = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your "Upload as" filename separated by colons. Files also can be selected by drag and drop.';
+$lang['mediaupload'] = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your filename separated by colons after you selected the files. Files can also be selected by drag and drop.';
$lang['mediaextchange'] = 'Filextension changed from .%s to .%s!';
$lang['reference'] = 'References for';
$lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:';
@@ -195,6 +195,11 @@ $lang['external_edit'] = 'external edit';
$lang['summary'] = 'Edit summary';
$lang['noflash'] = 'The <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is needed to display this content.';
$lang['download'] = 'Download Snippet';
+$lang['tools'] = 'Tools';
+$lang['user_tools'] = 'User Tools';
+$lang['site_tools'] = 'Site Tools';
+$lang['page_tools'] = 'Page Tools';
+$lang['skip_to_content'] = 'skip to content';
$lang['mail_newpage'] = 'page added:';
$lang['mail_changed'] = 'page changed:';
@@ -275,6 +280,7 @@ $lang['subscr_style_list'] = 'list of changed pages since last email (e
/* auth.class language support */
$lang['authmodfailed'] = 'Bad user authentication configuration. Please inform your Wiki Admin.';
$lang['authtempfail'] = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
+$lang['authpwdexpire'] = 'Your password will expire in %d days, you should change it soon.';
/* installer strings */
$lang['i_chooselang'] = 'Choose your language';
@@ -304,22 +310,6 @@ $lang['i_pol2'] = 'Closed Wiki (read, write, upload for registere
$lang['i_retry'] = 'Retry';
$lang['i_license'] = 'Please choose the license you want to put your content under:';
-$lang['mu_intro'] = 'Here you can upload multiple files at once. Click the browse button to add them to the queue. Press upload when done.';
-$lang['mu_gridname'] = 'Filename';
-$lang['mu_gridsize'] = 'Size';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namespace';
-$lang['mu_browse'] = 'Browse';
-$lang['mu_toobig'] = 'too big';
-$lang['mu_ready'] = 'ready for upload';
-$lang['mu_done'] = 'complete';
-$lang['mu_fail'] = 'failed';
-$lang['mu_authfail'] = 'session expired';
-$lang['mu_progress'] = '@PCT@% uploaded';
-$lang['mu_filetypes'] = 'Allowed Filetypes';
-$lang['mu_info'] = 'files uploaded.';
-$lang['mu_lasterr'] = 'Last error:';
-
$lang['recent_global'] = 'You\'re currently watching the changes inside the <b>%s</b> namespace. You can also <a href="%s">view the recent changes of the whole wiki</a>.';
$lang['years'] = '%d years ago';
$lang['months'] = '%d months ago';
diff --git a/inc/lang/en/resetpwd.txt b/inc/lang/en/resetpwd.txt
new file mode 100644
index 000000000..993b48765
--- /dev/null
+++ b/inc/lang/en/resetpwd.txt
@@ -0,0 +1,4 @@
+====== Set new password ======
+
+Please enter a new password for your account in this wiki.
+
diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php
index abb6bf7d7..41c6b80d1 100644
--- a/inc/lang/eo/lang.php
+++ b/inc/lang/eo/lang.php
@@ -26,8 +26,8 @@ $lang['btn_search'] = 'Serĉi';
$lang['btn_save'] = 'Konservi';
$lang['btn_preview'] = 'Antaŭrigardi';
$lang['btn_top'] = 'Supren';
-$lang['btn_newer'] = '&lt;&lt; pli freŝe';
-$lang['btn_older'] = 'malpli freŝe &gt;&gt;';
+$lang['btn_newer'] = '<< pli freŝe';
+$lang['btn_older'] = 'malpli freŝe >>';
$lang['btn_revs'] = 'Malnovaj revizioj';
$lang['btn_recent'] = 'Freŝaj ŝanĝoj';
$lang['btn_upload'] = 'Alŝuti';
@@ -45,7 +45,6 @@ $lang['btn_backtomedia'] = 'Retroiri al elekto de dosiero';
$lang['btn_subscribe'] = 'Aliĝi al paĝaj modifoj';
$lang['btn_profile'] = 'Ĝisdatigi profilon';
$lang['btn_reset'] = 'Rekomenci';
-$lang['btn_resendpwd'] = 'Sendi novan pasvorton';
$lang['btn_draft'] = 'Redakti skizon';
$lang['btn_recover'] = 'Restarigi skizon';
$lang['btn_draftdel'] = 'Forigi skizon';
@@ -82,7 +81,6 @@ $lang['profnoempty'] = 'Malplena nomo aŭ retadreso ne estas permesata
$lang['profchanged'] = 'La profilo de la uzanto estas sukcese ĝisdatigita.';
$lang['pwdforget'] = 'Ĉu vi forgesis vian pasvorton? Prenu novan';
$lang['resendna'] = 'Tiu ĉi vikio ne ebligas resendon de la pasvortoj.';
-$lang['resendpwd'] = 'Sendi novan pasvorton al';
$lang['resendpwdmissing'] = 'Pardonu, vi devas plenigi ĉiujn kampojn.';
$lang['resendpwdnouser'] = 'Pardonu, ni ne trovas tiun uzanton en nia datenbazo.';
$lang['resendpwdbadauth'] = 'Pardonu, tiu aŭtentiga kodo ne validas. Certiĝu, ke vi uzis la kompletan konfirmigan ligilon.';
@@ -124,8 +122,7 @@ $lang['js']['medialeft'] = 'Meti la bildon maldekstren.';
$lang['js']['mediaright'] = 'Meti la bildon dekstren.';
$lang['js']['mediacenter'] = 'Meti la bildon mezen.';
$lang['js']['medianoalign'] = 'Ne uzi poziciigon.';
-$lang['js']['nosmblinks'] = 'Tio ĉi nur funkcias en la Vindozaĉa &quot;Microsoft Internet Explorer&quot;.
-Vi ankoraŭ povas kopii kaj almeti la ligilon.';
+$lang['js']['nosmblinks'] = 'Tio ĉi nur funkcias en la Vindozaĉa "Microsoft Internet Explorer".\nVi ankoraŭ povas kopii kaj almeti la ligilon.';
$lang['js']['linkwiz'] = 'Ligil-Asistanto';
$lang['js']['linkto'] = 'Ligilo al:';
$lang['js']['del_confirm'] = 'Ĉu vere forigi elektitajn ero(j)n?';
@@ -152,16 +149,16 @@ $lang['uploadbadcontent'] = 'La alŝutita enhavo ne kongruas al la sufikso
$lang['uploadspam'] = 'La alŝutaĵo estis blokita de kontraŭspama vortlisto.';
$lang['uploadxss'] = 'La alŝutajo estis blokita pro ebla malica enhavo.';
$lang['uploadsize'] = 'La alŝutita dosiero estis tro granda. (maks. %s)';
-$lang['deletesucc'] = 'La dosiero &quot;%s%quot; estas forigita.';
-$lang['deletefail'] = '&quot;%s&quot; ne povis esti forigita - kontrolu permes-atributojn.';
-$lang['mediainuse'] = 'La dosiero &quot;%s&quot; ne estis forigita - ĝi ankoraŭ estas uzata.';
+$lang['deletesucc'] = 'La dosiero "%s" estas forigita.';
+$lang['deletefail'] = '"%s" ne povis esti forigita - kontrolu permes-atributojn.';
+$lang['mediainuse'] = 'La dosiero "%s" ne estis forigita - ĝi ankoraŭ estas uzata.';
$lang['namespaces'] = 'Nomspacoj';
$lang['mediafiles'] = 'Disponeblaj dosieroj';
$lang['accessdenied'] = 'Vi ne rajtas vidi tiun paĝon.';
$lang['mediausage'] = 'Uzu la jenan sintakson por referenci tiun ĉi dosieron:';
$lang['mediaview'] = 'Rigardi originalan dosieron';
$lang['mediaroot'] = 'ĉefo (root)';
-$lang['mediaupload'] = 'Alŝutu dosieron al la kuranta nomspaco tien ĉi. Por krei subnomspacojn, antaŭmetu ilin al via &quot;Alŝuti kiel&quot; dosiernomo, apartigante per dupunktoj (:).';
+$lang['mediaupload'] = 'Alŝutu dosieron al la kuranta nomspaco tien ĉi. Por krei subnomspacojn, antaŭmetu ilin al via "Alŝuti kiel" dosiernomo, apartigante per dupunktoj (:).';
$lang['mediaextchange'] = 'La dosiersufikso ŝanĝis de .%s al .%s!';
$lang['reference'] = 'Referencoj por';
$lang['ref_inuse'] = 'La dosiero ne povas esti forigita, ĉar ĝi ankoraŭ estas uzata de la jenaj paĝoj:';
@@ -187,7 +184,7 @@ $lang['created'] = 'kreita';
$lang['restored'] = 'malnova revizio restarigita';
$lang['external_edit'] = 'ekstera redakto';
$lang['summary'] = 'Bulteno de ŝanĝoj';
-$lang['noflash'] = 'La &lt;a href=&quot;http://www.adobe.com/products/flashplayer/&quot;&gt;Adobe Flash Plugin&lt;/a&gt; estas bezonata por montrigi tiun ĉi enhavon.';
+$lang['noflash'] = 'La <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> estas bezonata por montrigi tiun ĉi enhavon.';
$lang['download'] = 'Elŝuti eltiraĵon';
$lang['mail_newpage'] = 'paĝo aldonita:';
$lang['mail_changed'] = 'paĝo modifita:';
@@ -255,49 +252,34 @@ $lang['subscr_m_unsubscribe'] = 'Malaboni';
$lang['subscr_m_subscribe'] = 'Aboni';
$lang['subscr_m_receive'] = 'Ricevi';
$lang['subscr_style_every'] = 'retpoŝtaĵo pro ĉiu ŝanĝo';
-$lang['subscr_style_digest'] = 'kolekta retpoŝtaĵo de ŝanĝoj por ĉiu paĝo';
-$lang['subscr_style_list'] = 'listo de ŝanĝitaj paĝoj ekde la lasta retpoŝtaĵo';
+$lang['subscr_style_digest'] = 'resuma retpoŝtaĵo de ŝanĝoj por ĉiu paĝo (je %.2f tagoj)';
+$lang['subscr_style_list'] = 'listo de ŝanĝitaj paĝoj ekde la lasta retpoŝtaĵo (je %.2f tagoj)';
$lang['authmodfailed'] = 'Malbona agordo por identigi la uzanton. Bonvolu informi la administranton de la vikio.';
$lang['authtempfail'] = 'La identigo de via uzantonomo estas intertempe maldisponebla. Se tiu ĉi situacio daŭros, bonvolu informi la adminstranton de la vikio.';
$lang['i_chooselang'] = 'Elektu vian lingvon';
$lang['i_installer'] = 'Instalilo de DokuWiki';
$lang['i_wikiname'] = 'Nomo de la vikio';
-$lang['i_enableacl'] = 'Ebligi &quot;ACL&quot; (alirkontrolo, rekomendinde)';
+$lang['i_enableacl'] = 'Ebligi "ACL" (alirkontrolo, rekomendinde)';
$lang['i_superuser'] = 'Superuzanto';
$lang['i_problems'] = 'La instalilo trovis kelkajn problemojn, indikitaj sube. Vi ne povas pluiri ĝis ili estos iel korektitaj.';
$lang['i_modified'] = 'Pro sekureco tiu ĉi instalilo nur funkcias por nova kaj nemodifita DokuWiki-pakaĵo.
Vi devas aŭ redemeti la dosierojn el la elŝutita pakaĵo aŭ plibone informiĝi pri la instalada procezo.';
-$lang['i_funcna'] = 'La PHP-a funkcio &lt;code&gt;%s&lt;/code&gt; ne estas uzebla. Eble via retprovizanto ial malpermesis tion?';
-$lang['i_phpver'] = 'La versio de la PHP &lt;code&gt;%s&lt;/code&gt; estas pli malnova ol la bezonata &lt;code&gt;%s&lt;/code&gt;. Vi bezonas ĝisdatigi la PHP-an instalon.';
-$lang['i_permfail'] = '&lt;code&gt;%s&lt;/code&gt; ne estas skribebla por DokuWiki. Vi devas redifini la permes-atributojn de tiu ĉi dosierujo!';
-$lang['i_confexists'] = '&lt;code&gt;%s&lt;/code&gt; jam ekzistas';
-$lang['i_writeerr'] = 'Ne eblas krei &quot;&lt;code&gt;%s&lt;/code&gt;&quot;. Vi bezonas kontroli la permesojn de la dosier(uj)oj kaj mem krej la dosieron.';
-$lang['i_badhash'] = 'dokuwiki.php ne estas rekonebla aŭ ĝi estas modifita (hash=&lt;code&gt;%s&lt;/code&gt;)';
-$lang['i_badval'] = '&lt;code&gt;%s&lt;/code&gt; - malvalida aŭ malplena valoro';
-$lang['i_success'] = 'La agordado estas sukcese kompletita. Vi povas forigi la dosieron nun. Pluiru al &lt;a href=&quot;doku.php&quot;&gt;via nova DokuWiki&lt;/a&gt;.';
-$lang['i_failure'] = 'Kelkaj eraroj okazis dum la konservo de la agordaj dosieroj. Vi devas senpere korekti ilin antaŭ ol vi povos uzi &lt;a href=&quot;doku.php&quot;&gt;vian novan DokuWiki-on&lt;/a&gt;. ';
+$lang['i_funcna'] = 'La PHP-a funkcio <code>%s</code> ne estas uzebla. Eble via retprovizanto ial malpermesis tion?';
+$lang['i_phpver'] = 'La versio de la PHP <code>%s</code> estas pli malnova ol la bezonata <code>%s</code>. Vi bezonas ĝisdatigi la PHP-an instalon.';
+$lang['i_permfail'] = '<code>%s</code> ne estas skribebla por DokuWiki. Vi devas redifini la permes-atributojn de tiu ĉi dosierujo!';
+$lang['i_confexists'] = '<code>%s</code> jam ekzistas';
+$lang['i_writeerr'] = 'Ne eblas krei "<code>%s</code>". Vi bezonas kontroli la permesojn de la dosier(uj)oj kaj mem krej la dosieron.';
+$lang['i_badhash'] = 'dokuwiki.php ne estas rekonebla aŭ ĝi estas modifita (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - malvalida aŭ malplena valoro';
+$lang['i_success'] = 'La agordado estas sukcese kompletita. Vi povas forigi la dosieron nun. Pluiru al <a href="doku.php">via nova DokuWiki</a>.';
+$lang['i_failure'] = 'Kelkaj eraroj okazis dum la konservo de la agordaj dosieroj. Vi devas senpere korekti ilin antaŭ ol vi povos uzi <a href="doku.php">vian novan DokuWiki-on</a>. ';
$lang['i_policy'] = 'Komenca ACL-a agordo';
$lang['i_pol0'] = 'Malferma Vikio (legi, skribi, alŝuti povas ĉiuj)';
$lang['i_pol1'] = 'Publika Vikio (legi povas ĉiuj, skribi kaj alŝuti povas registritaj uzantoj)';
$lang['i_pol2'] = 'Ferma Vikio (legi, skribi, alŝuti nur povas registritaj uzantoj)';
$lang['i_retry'] = 'Reprovi';
$lang['i_license'] = 'Bonvolu elekti la permesilon, sub kiun vi volas meti vian enhavon:';
-$lang['mu_intro'] = 'Ĉi tie vi povas alŝuti plurajn dosierojn multope. Klaku la esplor-butonon por aldoni ilin al la vico. Premu alŝuti kiam prete.';
-$lang['mu_gridname'] = 'Dosiernomo';
-$lang['mu_gridsize'] = 'Grandeco';
-$lang['mu_gridstat'] = 'Stato';
-$lang['mu_namespace'] = 'Nomspaco';
-$lang['mu_browse'] = 'Esplori';
-$lang['mu_toobig'] = 'tro granda';
-$lang['mu_ready'] = 'preta por alŝuti';
-$lang['mu_done'] = 'plenumite';
-$lang['mu_fail'] = 'malsukcesinte';
-$lang['mu_authfail'] = 'sekcio tro longdaŭris';
-$lang['mu_progress'] = '@PCT@&#37; alŝutite';
-$lang['mu_filetypes'] = 'Permesitaj dosiertipoj';
-$lang['mu_info'] = 'alŝutitaj dosieroj.';
-$lang['mu_lasterr'] = 'Lasta eraro:';
-$lang['recent_global'] = 'Vi nun rigardas la ŝanĝojn ene de la nomspaco &lt;b&gt;%s&lt;/b&gt;. Vi povas ankaŭ &lt;a href=&quot;%s&quot;&gt;vidi la freŝajn ŝanĝojn de la tuta vikio&lt;/a&gt;.';
+$lang['recent_global'] = 'Vi nun rigardas la ŝanĝojn ene de la nomspaco <b>%s</b>. Vi povas ankaŭ <a href="%s">vidi la freŝajn ŝanĝojn de la tuta vikio</a>.';
$lang['years'] = 'antaŭ %d jaroj';
$lang['months'] = 'antaŭ %d monatoj';
$lang['weeks'] = 'antaŭ %d semajnoj';
@@ -318,12 +300,12 @@ $lang['media_sort_name'] = 'per nomo';
$lang['media_sort_date'] = 'per dato';
$lang['media_namespaces'] = 'Elektu nomspacon';
$lang['media_files'] = 'Dosieroj en %s';
-$lang['media_upload'] = 'Alŝuti al la nomspaco &lt;strong&gt;%s&lt;/strong&gt;.';
-$lang['media_search'] = 'Serĉi en la nomspaco &lt;strong&gt;%s&lt;/strong&gt;.';
+$lang['media_upload'] = 'Alŝuti al la nomspaco <strong>%s</strong>.';
+$lang['media_search'] = 'Serĉi en la nomspaco <strong>%s</strong>.';
$lang['media_view'] = '%s';
$lang['media_viewold'] = '%s ĉe %s';
-$lang['media_edit'] = 'Modifi';
-$lang['media_history'] = 'Tiuj estas la pli malnovaj revizioj de la dosiero.';
+$lang['media_edit'] = 'Modifi %s';
+$lang['media_history'] = 'Protokolo de %s';
$lang['media_meta_edited'] = 'metadatumoj ŝanĝitaj';
$lang['media_perm_read'] = 'Bedaûrinde viaj rajtoj ne sufiĉas por legi dosierojn.';
$lang['media_perm_upload'] = 'Bedaûrinde viaj rajtoj ne sufiĉas por alŝuti dosierojn.';
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index 5164c3243..ee3da258b 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -61,7 +61,6 @@ $lang['btn_backtomedia'] = 'Volver a la selección de archivos multimedia'
$lang['btn_subscribe'] = 'Suscribirse a cambios de la página';
$lang['btn_profile'] = 'Actualizar perfil';
$lang['btn_reset'] = 'Restablecer';
-$lang['btn_resendpwd'] = 'Enviar nueva contraseña';
$lang['btn_draft'] = 'Editar borrador';
$lang['btn_recover'] = 'Recuperar borrador';
$lang['btn_draftdel'] = 'Eliminar borrador';
@@ -98,7 +97,6 @@ $lang['profnoempty'] = 'No se permite que el nombre o la dirección de
$lang['profchanged'] = 'Se actualizó correctamente el perfil del usuario.';
$lang['pwdforget'] = '¿Has olvidado tu contraseña? Consigue una nueva';
$lang['resendna'] = 'Este wiki no brinda la posibilidad de reenvío de contraseña.';
-$lang['resendpwd'] = 'Enviar una nueva contraseña para';
$lang['resendpwdmissing'] = 'Lo siento, debes completar todos los campos.';
$lang['resendpwdnouser'] = 'Lo siento, no se encuentra este usuario en nuestra base de datos.';
$lang['resendpwdbadauth'] = 'Lo siento, este código de autenticación no es válido. Asegúrate de haber usado el enlace de confirmación entero.';
@@ -282,9 +280,9 @@ $lang['i_enableacl'] = 'Habilitar ACL (recomendado) (ACL: lista de con
$lang['i_superuser'] = 'Super-usuario';
$lang['i_problems'] = 'El instalador encontró algunos problemas, se muestran abajo. No se puede continuar la instalación hasta que usted no los corrija.';
$lang['i_modified'] = 'Por razones de seguridad este script sólo funcionará con una instalación nueva y no modificada de Dokuwiki. Usted debe extraer nuevamente los ficheros del paquete bajado, o bien consultar las <a href="http://dokuwiki.org/install">instrucciones de instalación de Dokuwiki</a> completas.';
-$lang['i_funcna'] = 'La función de PHP <code>%s</code> no está disponible. Tal vez su proveedor de hosting la ha deshabilitado por alguna razón?';
+$lang['i_funcna'] = 'La función de PHP <code>%s</code> no está disponible. ¿Tal vez su proveedor de hosting la ha deshabilitado por alguna razón?';
$lang['i_phpver'] = 'Su versión de PHP <code>%s</code> es menor que la necesaria <code>%s</code>. Es necesario que actualice su instalación de PHP.';
-$lang['i_permfail'] = 'DokuWili no puede escribir <code>%s</code>. Es necesario establecer correctamente los permisos de este directorio!';
+$lang['i_permfail'] = 'DokuWili no puede escribir <code>%s</code>. ¡Es necesario establecer correctamente los permisos de este directorio!';
$lang['i_confexists'] = '<code>%s</code> ya existe';
$lang['i_writeerr'] = 'Imposible crear <code>%s</code>. Se necesita que usted controle los permisos del fichero/directorio y que cree el fichero manualmente.';
$lang['i_badhash'] = 'dokuwiki.php no reconocido o modificado (hash=<code>%s</code>)';
@@ -297,21 +295,6 @@ $lang['i_pol1'] = 'Wiki público (leer para todos, escribir y sub
$lang['i_pol2'] = 'Wiki cerrado (leer, escribir y subir archivos para usuarios registrados únicamente)';
$lang['i_retry'] = 'Reintentar';
$lang['i_license'] = 'Por favor escoja una licencia bajo la que publicar su contenido:';
-$lang['mu_intro'] = 'Puedes subir varios archivos a la vez desde aquí. Pulsa el botón del navegador para agregarlos a la cola. Pulsa "subir archivo" para proceder.';
-$lang['mu_gridname'] = 'Nombre de archivo';
-$lang['mu_gridsize'] = 'Tamaño';
-$lang['mu_gridstat'] = 'Estado';
-$lang['mu_namespace'] = 'Espacio de nombres';
-$lang['mu_browse'] = 'Buscar';
-$lang['mu_toobig'] = 'demasiado grande';
-$lang['mu_ready'] = 'listo para subir';
-$lang['mu_done'] = 'completado';
-$lang['mu_fail'] = 'falló';
-$lang['mu_authfail'] = 'la sesión caducó';
-$lang['mu_progress'] = '@PCT@% transferido';
-$lang['mu_filetypes'] = 'Tipos de archivos permitidos';
-$lang['mu_info'] = 'Archivos subidos:';
-$lang['mu_lasterr'] = 'Último error:';
$lang['recent_global'] = 'Actualmente estás viendo los cambios dentro del namespace <b>%s</b>. También puedes <a href="%s">ver los cambios recientes en el wiki completo</a>.';
$lang['years'] = '%d años atrás';
$lang['months'] = '%d meses atrás';
diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php
index 6cd2f437d..5e5caa1c8 100644
--- a/inc/lang/et/lang.php
+++ b/inc/lang/et/lang.php
@@ -43,7 +43,6 @@ $lang['btn_backtomedia'] = 'Tagasi faili valikusse';
$lang['btn_subscribe'] = 'Jälgi seda lehte (teated meilile)';
$lang['btn_profile'] = 'Minu info';
$lang['btn_reset'] = 'Taasta';
-$lang['btn_resendpwd'] = 'Saada uus parool';
$lang['btn_draft'] = 'Toimeta mustandit';
$lang['btn_recover'] = 'Taata mustand';
$lang['btn_draftdel'] = 'Kustuta mustand';
@@ -79,7 +78,6 @@ $lang['profnoempty'] = 'Tühi nimi ega meiliaadress pole lubatud.';
$lang['profchanged'] = 'Kasutaja info edukalt muudetud';
$lang['pwdforget'] = 'Unustasid parooli? Tee uus';
$lang['resendna'] = 'See wiki ei toeta parooli taassaatmist.';
-$lang['resendpwd'] = 'Saada uus parool';
$lang['resendpwdmissing'] = 'Khmm... Sa pead täitma kõik väljad.';
$lang['resendpwdnouser'] = 'Aga sellist kasutajat ei ole.';
$lang['resendpwdbadauth'] = 'See autentimiskood ei ole õige. Kontrolli, et kopeerisid terve lingi.';
@@ -232,12 +230,3 @@ $lang['i_pol0'] = 'Avatud (lugemine, kirjutamine ja üleslaadimin
$lang['i_pol1'] = 'Avalikuks lugemiseks (lugeda saavad kõik, kirjutada ja üles laadida vaid registreeritud kasutajad)';
$lang['i_pol2'] = 'Suletud (kõik õigused, kaasaarvatud lugemine on lubatud vaid registreeritud kasutajatele)';
$lang['i_retry'] = 'Proovi uuesti';
-$lang['mu_gridname'] = 'Failinimi';
-$lang['mu_gridsize'] = 'Suurus';
-$lang['mu_gridstat'] = 'Staatus';
-$lang['mu_browse'] = 'Sirvi';
-$lang['mu_toobig'] = 'liiga suur';
-$lang['mu_ready'] = 'valmis üleslaadimiseks';
-$lang['mu_done'] = 'valmis';
-$lang['mu_fail'] = 'ebaõnnestus';
-$lang['mu_lasterr'] = 'Viimane viga:';
diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php
index d02f281c3..f7a517fe4 100644
--- a/inc/lang/eu/lang.php
+++ b/inc/lang/eu/lang.php
@@ -40,7 +40,6 @@ $lang['btn_backtomedia'] = 'Atzera Multimedia Fitxategiaren Aukeraketara';
$lang['btn_subscribe'] = 'Harpidetu Orri Aldaketetara';
$lang['btn_profile'] = 'Eguneratu Profila ';
$lang['btn_reset'] = 'Aldaketak Desegin';
-$lang['btn_resendpwd'] = 'Pasahitz berria bidali';
$lang['btn_draft'] = 'Editatu zirriborroa';
$lang['btn_recover'] = 'Berreskuratu zirriborroa';
$lang['btn_draftdel'] = 'Ezabatu zirriborroa';
@@ -75,7 +74,6 @@ $lang['profnoempty'] = 'Izen edota e-posta hutsa ez dago onartua.';
$lang['profchanged'] = 'Erabiltzaile profila arrakastaz eguneratua.';
$lang['pwdforget'] = 'Pasahitza ahaztu duzu? Eskuratu berri bat';
$lang['resendna'] = 'Wiki honek ez du pasahitz berbidalketa onartzen.';
-$lang['resendpwd'] = 'Bidali pasahitz berria honentzat:';
$lang['resendpwdmissing'] = 'Barkatu, eremu guztiak bete behar dituzu.';
$lang['resendpwdnouser'] = 'Barkatu, ez dugu erabiltzaile hori datu-basean aurkitzen';
$lang['resendpwdbadauth'] = 'Barkatu, kautotze kodea ez da baliozkoa. Ziurtatu baieztapen esteka osoa erabili duzula.';
@@ -256,21 +254,6 @@ $lang['i_pol1'] = 'Wiki Publikoa (irakurri edonorentzat, idatzi e
$lang['i_pol2'] = 'Wiki Itxia (irakurri, idatzi, fitxategiak igo erregistratutako erabiltzaileentzat soilik)';
$lang['i_retry'] = 'Berriz saiatu';
$lang['i_license'] = 'Mesedez, aukeratu zein lizentzipean ezarri nahi duzun zure edukia:';
-$lang['mu_intro'] = 'Hemen hainbat fitxategi aldi berean igo ditzakezu. Egin klik nabigazio botoian hauek ilarara gehitzeko. Sakatu igo botoia prest egotean.';
-$lang['mu_gridname'] = 'Fitxategi izena';
-$lang['mu_gridsize'] = 'Tamaina';
-$lang['mu_gridstat'] = 'Egoera';
-$lang['mu_namespace'] = 'Izen-espazioa';
-$lang['mu_browse'] = 'Nabigatu';
-$lang['mu_toobig'] = 'handiegia';
-$lang['mu_ready'] = 'igotzeko prest';
-$lang['mu_done'] = 'amaitua';
-$lang['mu_fail'] = 'hutsegitea';
-$lang['mu_authfail'] = 'saioa iraungita';
-$lang['mu_progress'] = '@PCT@% igota';
-$lang['mu_filetypes'] = 'Onartutako Fitxategi Motak';
-$lang['mu_info'] = 'igotako fitxategiak.';
-$lang['mu_lasterr'] = 'Azken errorea;';
$lang['recent_global'] = 'Une honetan <b>%s</b> izen-espazioaren barneko aldaketak ikusten ari zara.<a href="%s"> Wiki osoaren azken aldaketak</a> ere ikusi ditzakezu.';
$lang['years'] = 'duela %d urte';
$lang['months'] = 'duela %d hilabete';
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index ac14ce07a..c55c3efdd 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -47,7 +47,6 @@ $lang['btn_backtomedia'] = 'بازگشت به انتخاب فایل';
$lang['btn_subscribe'] = 'عضویت در تغییرات صفحه';
$lang['btn_profile'] = 'به روز رسانی پروفایل';
$lang['btn_reset'] = 'بازنشاندن';
-$lang['btn_resendpwd'] = 'یک گذرواژه‌ی جدید برای شما فرستاده شود';
$lang['btn_draft'] = 'ویرایش پیش‌نویس';
$lang['btn_recover'] = 'بازیابی پیش‌نویس';
$lang['btn_draftdel'] = 'حذف پیش‌نویس';
@@ -82,7 +81,6 @@ $lang['profnoempty'] = 'نام و آدرس ایمیل باید پر ش
$lang['profchanged'] = 'پروفایل کاربر با موفقیت به روز شد';
$lang['pwdforget'] = 'گذرواژه‌ی خود را فراموش کرده‌اید؟ جدید دریافت کنید';
$lang['resendna'] = 'این ویکی ارسال مجدد گذرواژه را پشتیبانی نمی‌کند';
-$lang['resendpwd'] = 'گذرواژه‌ی جدید ارسال شد';
$lang['resendpwdmissing'] = 'متاسفم، شما باید تمام قسمت‌ها را پر کنید';
$lang['resendpwdnouser'] = 'متاسفم، ما نتوانستیم این نام کاربری را در بانک خود پیدا کنیم';
$lang['resendpwdbadauth'] = 'متاسفم، کد شناسایی معتبر نیست. از صحت لینک تاییدیه اطمینان حاصل کنید.';
@@ -263,21 +261,6 @@ $lang['i_pol1'] = 'ویکی عمومی (همه می‌توانن
$lang['i_pol2'] = 'ویکی بسته (فقط کاربران ثبت شده می‌توانند بخوانند، بنویسند و فایل ارسال کنند)';
$lang['i_retry'] = 'تلاش مجدد';
$lang['i_license'] = 'لطفن مجوز این محتوا را وارد کنید:';
-$lang['mu_intro'] = 'شما می‌توانید چندین فایل را با یک حرکت ارسال کنید. روی دکمه‌ی «بچر» کلیک کنید و فایل‌ها را به صف ارسال اضافه نمایید. سپس دکمه‌ی «ارسال» را فشار دهید. ';
-$lang['mu_gridname'] = 'نام فایل';
-$lang['mu_gridsize'] = 'اندازه';
-$lang['mu_gridstat'] = 'وضعیت';
-$lang['mu_namespace'] = 'فضای‌نام';
-$lang['mu_browse'] = 'بچر';
-$lang['mu_toobig'] = 'خیلی بزرگ';
-$lang['mu_ready'] = 'آماده‌ی ارسال';
-$lang['mu_done'] = 'کامل';
-$lang['mu_fail'] = 'شکست خورد';
-$lang['mu_authfail'] = 'سشن به پایان رسید';
-$lang['mu_progress'] = '@PCT@% ارسال شد';
-$lang['mu_filetypes'] = 'توسعه‌های مجاز';
-$lang['mu_info'] = 'فایل ارسال گردید';
-$lang['mu_lasterr'] = 'آخرین خطا:';
$lang['recent_global'] = 'شما هم‌اکنون تغییرات فضای‌نام <b>%s</b> را مشاهده می‌کنید. شما هم‌چنین می‌توانید <a href="%s">تغییرات اخیر در کل ویکی را مشاهده نمایید</a>.';
$lang['years'] = '%d سال پیش';
$lang['months'] = '%d ماه پیش';
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index 8d671a4cb..ce15f68d0 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -43,7 +43,6 @@ $lang['btn_backtomedia'] = 'Takaisin mediatiedostojen valintaan';
$lang['btn_subscribe'] = 'Tilaa muutokset';
$lang['btn_profile'] = 'Päivitä profiili';
$lang['btn_reset'] = 'Tyhjennä';
-$lang['btn_resendpwd'] = 'Lähetä uusi salasana';
$lang['btn_draft'] = 'Muokkaa luonnosta';
$lang['btn_recover'] = 'Palauta luonnos';
$lang['btn_draftdel'] = 'Poista luonnos';
@@ -80,7 +79,6 @@ $lang['profnoempty'] = 'Tyhjä nimi tai sähköpostiosoite ei ole sall
$lang['profchanged'] = 'Käyttäjän profiilin päivitys onnistui.';
$lang['pwdforget'] = 'Unohtuiko salasana? Hanki uusi';
$lang['resendna'] = 'Tämä wiki ei tue salasanan uudelleenlähettämistä.';
-$lang['resendpwd'] = 'Lähetä uusi salasana käyttäjälle';
$lang['resendpwdmissing'] = 'Kaikki kentät on täytettävä.';
$lang['resendpwdnouser'] = 'Käyttäjää ei löydy tietokannastamme.';
$lang['resendpwdbadauth'] = 'Tunnistuskoodi on virheellinen. Varmista, että käytit koko varmistuslinkkiä.';
@@ -242,7 +240,7 @@ $lang['img_manager'] = 'Näytä mediamanagerissa';
$lang['subscr_subscribe_success'] = '%s lisätty %s tilauslistalle';
$lang['subscr_subscribe_error'] = 'Virhe lisättäessä %s tilauslistalle %s';
$lang['subscr_subscribe_noaddress'] = 'Login tiedoissasi ei ole sähköpostiosoitetta. Sinua ei voi lisätä tilaukseen';
-$lang['subscr_unsubscribe_success'] = '% poistettu tilauslistalta %s';
+$lang['subscr_unsubscribe_success'] = '%s poistettu tilauslistalta %s';
$lang['subscr_unsubscribe_error'] = 'Virhe tapahtui poistaessa %s tilauslistalta %s';
$lang['subscr_already_subscribed'] = '%s on jo tilannut %s';
$lang['subscr_not_subscribed'] = '%s ei ole tilannut %s';
@@ -253,8 +251,8 @@ $lang['subscr_m_unsubscribe'] = 'Poista tilaus';
$lang['subscr_m_subscribe'] = 'Tilaa';
$lang['subscr_m_receive'] = 'Vastaanota';
$lang['subscr_style_every'] = 'Sähköposti joka muutoksesta';
-$lang['subscr_style_digest'] = 'yhteenveto sähköposti joka sivusta';
-$lang['subscr_style_list'] = 'lista muuttuneista sivuista edellisen sähköpostin jälkeen';
+$lang['subscr_style_digest'] = 'yhteenveto-sähköposti joka sivusta (joka %.2f. päivä)';
+$lang['subscr_style_list'] = 'lista muuttuneista sivuista edellisen sähköpostin jälkeen (joka %.2f. päivä)';
$lang['authmodfailed'] = 'Käyttäjien autentikoinnin asetukset ovat virheelliset. Ilmoita asiasta wikin ylläpitäjälle.';
$lang['authtempfail'] = 'Käyttäjien autentikointi ei tällä hetkellä onnistu. Jos ongelma jatkuu, ota yhteyttä wikin ylläpitäjään.';
$lang['i_chooselang'] = 'Valitse kieli';
@@ -279,21 +277,6 @@ $lang['i_pol1'] = 'Julkinen Wiki (luku kaikilla, kirjoitus ja tie
$lang['i_pol2'] = 'Suljettu Wiki (luku, kirjoitus ja tiedostojen lähetys vain rekisteröityneillä käyttäjillä)';
$lang['i_retry'] = 'Yritä uudelleen';
$lang['i_license'] = 'Valitse lisenssi, jonka alle haluat sisältösi laittaa:';
-$lang['mu_intro'] = 'Täällä voit lähettää useampia tiedostoja kerralla. Klikkaa Selaa-nappia lisätäksesi ne jonoon. Paina lähetä, kun olet valmis.';
-$lang['mu_gridname'] = 'Tiedoston nimi';
-$lang['mu_gridsize'] = 'Koko';
-$lang['mu_gridstat'] = 'Tilanne';
-$lang['mu_namespace'] = 'Nimiavaruus';
-$lang['mu_browse'] = 'Selaa';
-$lang['mu_toobig'] = 'liian iso';
-$lang['mu_ready'] = 'valmis lähetettäväksi';
-$lang['mu_done'] = 'valmis';
-$lang['mu_fail'] = 'epäonnistui';
-$lang['mu_authfail'] = 'istunto on vanhentunut';
-$lang['mu_progress'] = '@PCT@% lähetetty';
-$lang['mu_filetypes'] = 'Sallitut tyypit';
-$lang['mu_info'] = 'tiedostoa ladattu.';
-$lang['mu_lasterr'] = 'Edellinen virhe:';
$lang['recent_global'] = 'Seuraat tällä hetkellä muutoksia nimiavaruuden <b>%s</b> sisällä. Voit myös <a href="%s">katsoa muutoksia koko wikissä</a>';
$lang['years'] = '%d vuotta sitten';
$lang['months'] = '%d kuukautta sitten';
@@ -301,22 +284,26 @@ $lang['weeks'] = '%d viikkoa sitten';
$lang['days'] = '%d päivää sitten';
$lang['hours'] = '%d tuntia sitten';
$lang['minutes'] = '%d minuuttia sitten';
-$lang['seconds'] = '% sekuntia sitten';
+$lang['seconds'] = '%d sekuntia sitten';
$lang['wordblock'] = 'Muutostasi ei talletettu, koska se sisältää estettyä tekstiä (spam).';
$lang['media_uploadtab'] = 'Lähetä';
$lang['media_searchtab'] = 'Etsi';
+$lang['media_file'] = 'Tiedosto';
$lang['media_viewtab'] = 'Näytä';
$lang['media_edittab'] = 'Muokkaa';
$lang['media_historytab'] = 'Historia';
-$lang['media_thumbsview'] = 'Pikkukuvat';
-$lang['media_listview'] = 'Lista';
-$lang['media_sort'] = 'Järjestä';
+$lang['media_list_thumbs'] = 'Thumbnails';
+$lang['media_list_rows'] = 'Rivit';
$lang['media_sort_name'] = 'nimen mukaan';
$lang['media_sort_date'] = 'päivämäärän mukaan';
+$lang['media_namespaces'] = 'Valitse nimiavaruus';
+$lang['media_files'] = 'Tiedostoja %s';
$lang['media_upload'] = 'Lähetä <strong>%s</strong> nimiavaruuteen';
$lang['media_search'] = 'Etsi <strong>%s</strong> nimiavaruudesta';
-$lang['media_edit'] = 'Muokkaa';
-$lang['media_history'] = 'Nämä ovat vanhat versiot tiedostosta.';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s at %s';
+$lang['media_edit'] = 'Muokkaa %s';
+$lang['media_history'] = 'Nämä ovat vanhat versiot tiedostosta %s';
$lang['media_meta_edited'] = 'Metadataa muokattu';
$lang['media_perm_read'] = 'Anteeksi. Sinulla ei ole riittävästi oikeuksia lukeaksesi tiedostoja.';
$lang['media_perm_upload'] = 'Anteeksi. Sinulla ei ole riittävästi oikeuksia lähettääksesi tiedostoja.';
diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php
index 4cb895f72..14ec8c56b 100644
--- a/inc/lang/fo/lang.php
+++ b/inc/lang/fo/lang.php
@@ -40,7 +40,6 @@ $lang['btn_backtomedia'] = 'Aftur til val av miðlafílu';
$lang['btn_subscribe'] = 'Tilmelda broytingar';
$lang['btn_profile'] = 'Dagføra vangamynd';
$lang['btn_reset'] = 'Nullstilla';
-$lang['btn_resendpwd'] = 'Send nýtt loyniorð';
$lang['btn_draft'] = 'Broyt kladdu';
$lang['btn_recover'] = 'Endurbygg kladdu';
$lang['btn_draftdel'] = 'Sletta';
@@ -75,7 +74,6 @@ $lang['profnoempty'] = 'Tómt navn ella t-post adressa er ikki loyvt.'
$lang['profchanged'] = 'Brúkara vangamynd dagført rætt.';
$lang['pwdforget'] = 'Gloymt títt loyniorð? Fá eitt nýtt';
$lang['resendna'] = 'Tað er ikki møguligt at fá sent nýtt loyniorð við hesu wiki.';
-$lang['resendpwd'] = 'Send nýtt loyniorð til';
$lang['resendpwdmissing'] = 'Tú skal filla út øll økir.';
$lang['resendpwdnouser'] = 'Vit kunna ikki finna hendan brúkara í okkara dátagrunni.';
$lang['resendpwdbadauth'] = 'Hald til góðar, hendan góðkenningar kodan er ikki gildug. Kanna eftir at tú nýtti tað fulfíggjaðu góðkenningarleinkjuna';
diff --git a/inc/lang/fr/index.txt b/inc/lang/fr/index.txt
index 14446681e..c66c656ab 100644
--- a/inc/lang/fr/index.txt
+++ b/inc/lang/fr/index.txt
@@ -1,4 +1,4 @@
====== Index ======
-Voici un index de toutes les pages disponibles, triées par [[doku>namespaces|catégorie]].
+Voici un index de toutes les pages disponibles, triées par [[doku>fr:namespaces|catégorie]].
diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php
index 60b86b346..140c584c3 100644
--- a/inc/lang/fr/lang.php
+++ b/inc/lang/fr/lang.php
@@ -22,6 +22,7 @@
* @author Samuel Dorsaz <samuel.dorsaz@novelion.net>
* @author Johan Guilbaud <guilbaud.johan@gmail.com>
* @author schplurtz@laposte.net
+ * @author skimpax@gmail.com
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -57,7 +58,6 @@ $lang['btn_backtomedia'] = 'Retour à la sélection du fichier média';
$lang['btn_subscribe'] = 'S\'abonner à la page';
$lang['btn_profile'] = 'Mettre à jour le profil';
$lang['btn_reset'] = 'Réinitialiser';
-$lang['btn_resendpwd'] = 'Envoyer le mot de passe';
$lang['btn_draft'] = 'Modifier le brouillon';
$lang['btn_recover'] = 'Récupérer le brouillon';
$lang['btn_draftdel'] = 'Effacer le brouillon';
@@ -94,7 +94,6 @@ $lang['profnoempty'] = 'Un nom ou une adresse de courriel vide n\'est
$lang['profchanged'] = 'Mise à jour du profil réussie.';
$lang['pwdforget'] = 'Mot de passe oublié ? Faites-vous envoyer votre mot de passe ';
$lang['resendna'] = 'Ce wiki ne permet pas le renvoi de mot de passe.';
-$lang['resendpwd'] = 'Renvoyer le mot de passe de';
$lang['resendpwdmissing'] = 'Désolé, vous devez remplir tous les champs.';
$lang['resendpwdnouser'] = 'Désolé, cet utilisateur est introuvable dans notre base.';
$lang['resendpwdbadauth'] = 'Désolé, ce code d\'authentification est invalide. Assurez-vous d\'avoir utilisé le lien de confirmation.';
@@ -112,7 +111,7 @@ $lang['lockexpire'] = 'Le blocage expire à';
$lang['js']['willexpire'] = 'Votre verrouillage pour la modification de cette page expire dans une minute.\nPour éviter les conflits, utilisez le bouton « Aperçu » pour réinitialiser le minuteur.';
$lang['js']['notsavedyet'] = 'Les modifications non enregistrées seront perdues. Voulez-vous vraiment continuer ?';
$lang['js']['searchmedia'] = 'Chercher des fichiers';
-$lang['js']['keepopen'] = 'Gardez la fenêtre ouverte pendant la sélection';
+$lang['js']['keepopen'] = 'Gardez cette fenêtre toujours ouverte';
$lang['js']['hidedetails'] = 'Masquer détails';
$lang['js']['mediatitle'] = 'Paramètres de lien';
$lang['js']['mediadisplay'] = 'Type de lien';
@@ -135,12 +134,10 @@ $lang['js']['medialeft'] = 'Aligner l\'image sur la gauche.';
$lang['js']['mediaright'] = 'Aligner l\'image sur la droite.';
$lang['js']['mediacenter'] = 'Centrer l\'image';
$lang['js']['medianoalign'] = 'Ne pas aligner.';
-$lang['js']['nosmblinks'] = 'Les liens vers les partages Windows ne fonctionnent qu\'avec Microsoft Internet Explorer.
- Vous pouvez toujours copier puis coller le lien.';
+$lang['js']['nosmblinks'] = 'Les liens vers les partages Windows ne fonctionnent qu\'avec Microsoft Internet Explorer.\nVous pouvez toujours copier puis coller le lien.';
$lang['js']['linkwiz'] = 'Assistant Lien';
$lang['js']['linkto'] = 'Lien vers :';
$lang['js']['del_confirm'] = 'Effacer cette entrée ?';
-$lang['js']['mu_btn'] = 'Envoyer plusieurs fichiers en même temps';
$lang['js']['restore_confirm'] = 'Voulez vous vraiment restaurer cette version ?';
$lang['js']['media_diff'] = 'Voir les différences:';
$lang['js']['media_diff_both'] = 'Côte à côte';
@@ -267,8 +264,8 @@ $lang['subscr_m_unsubscribe'] = 'Annuler la souscription';
$lang['subscr_m_subscribe'] = 'Souscrire';
$lang['subscr_m_receive'] = 'Recevoir';
$lang['subscr_style_every'] = 'Envoyer un courriel à chaque modification';
-$lang['subscr_style_digest'] = 'Courriel résumant les modifications de chaque page';
-$lang['subscr_style_list'] = 'Liste des pages modifiées depuis le dernier courriel';
+$lang['subscr_style_digest'] = 'Courriel, tous les %.2f jours, résumant les modifications de chaque page';
+$lang['subscr_style_list'] = 'Liste des pages modifiées depuis le dernier courriel (tous les %.2f jours)';
$lang['authmodfailed'] = 'Mauvais paramétrage de l\'authentification. Merci d\'informer l\'administrateur du Wiki.';
$lang['authtempfail'] = 'L\'authentification est temporairement indisponible. Si cela perdure, merci d\'informer l\'administrateur du Wiki.';
$lang['i_chooselang'] = 'Choisissez votre langue';
@@ -293,21 +290,6 @@ $lang['i_pol1'] = 'Wiki public (lecture pour tout le monde, écri
$lang['i_pol2'] = 'Wiki fermé (lecture, écriture, envoi de fichiers pour les utilisateurs enregistrés uniquement)';
$lang['i_retry'] = 'Réessayer';
$lang['i_license'] = 'Veuillez choisir la licence sous laquelle placer votre contenu :';
-$lang['mu_intro'] = 'Ici vous pouvez envoyer plusieurs fichiers en même temps. Cliquez sur le bouton parcourir pour les ajouter. Cliquez sur envoyer lorsque c\'est prêt. ';
-$lang['mu_gridname'] = 'Nom du fichier';
-$lang['mu_gridsize'] = 'Taille';
-$lang['mu_gridstat'] = 'État';
-$lang['mu_namespace'] = 'Catégorie';
-$lang['mu_browse'] = 'Parcourir';
-$lang['mu_toobig'] = 'Trop gros';
-$lang['mu_ready'] = 'Prêt à envoyer';
-$lang['mu_done'] = 'Terminé';
-$lang['mu_fail'] = 'Échoué';
-$lang['mu_authfail'] = 'Session expirée';
-$lang['mu_progress'] = '@PCT@% envoyé';
-$lang['mu_filetypes'] = 'Types de fichiers acceptés';
-$lang['mu_info'] = 'fichiers envoyés.';
-$lang['mu_lasterr'] = 'Dernière erreur : ';
$lang['recent_global'] = 'Vous êtes actuellement en train de regarder les modifications au sein de la catégorie <strong>%s</strong>. Vous pouvez aussi <a href="%s">voir les récentes modifications sur tout le wiki</a>.';
$lang['years'] = 'il y a %d ans';
$lang['months'] = 'il y a %d mois';
@@ -328,13 +310,13 @@ $lang['media_list_rows'] = 'Lignes';
$lang['media_sort_name'] = 'Tri par nom';
$lang['media_sort_date'] = 'Tri par date';
$lang['media_namespaces'] = 'Choisissez un espace de nom';
-$lang['media_files'] = 'Fichiers présents dans';
-$lang['media_upload'] = 'Télécharger dans la catégorie <strong>%s</strong>.';
-$lang['media_search'] = 'Chercher dans la catégorie <strong>%s</strong>.';
+$lang['media_files'] = 'Fichiers de %s';
+$lang['media_upload'] = 'Télécharger dans %s.';
+$lang['media_search'] = 'Chercher dans %s.';
$lang['media_view'] = '%s';
$lang['media_viewold'] = '%s dans %s';
$lang['media_edit'] = 'Éditer %s';
-$lang['media_history'] = 'Historique du %s';
+$lang['media_history'] = 'Historique de %s';
$lang['media_meta_edited'] = 'métadonnées éditées';
$lang['media_perm_read'] = 'Désolé, vous n\'avez pas les droits pour lire les fichiers.';
$lang['media_perm_upload'] = 'Désolé, vous n\'avez pas les droits pour télécharger des fichiers.';
diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php
index 01938b3a0..9636d6c15 100644
--- a/inc/lang/gl/lang.php
+++ b/inc/lang/gl/lang.php
@@ -4,6 +4,7 @@
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Medúlio <medulio@ciberirmandade.org>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -39,12 +40,13 @@ $lang['btn_backtomedia'] = 'Volver á Selección de Arquivos-Media';
$lang['btn_subscribe'] = 'Avísame dos trocos na páxina';
$lang['btn_profile'] = 'Actualizar Perfil';
$lang['btn_reset'] = 'Reiniciar';
-$lang['btn_resendpwd'] = 'Envíame un novo contrasinal';
$lang['btn_draft'] = 'Editar borrador';
$lang['btn_recover'] = 'Recuperar borrador';
$lang['btn_draftdel'] = 'Eliminar borrador';
$lang['btn_revert'] = 'Restaurar';
$lang['btn_register'] = 'Rexístrate';
+$lang['btn_apply'] = 'Aplicar';
+$lang['btn_media'] = 'Xestor de Arquivos-Media';
$lang['loggedinas'] = 'Iniciaches sesión como';
$lang['user'] = 'Nome de Usuario';
$lang['pass'] = 'Contrasinal';
@@ -74,7 +76,6 @@ $lang['profnoempty'] = 'Non se permite un nome ou un enderezo de corre
$lang['profchanged'] = 'Perfil de usuario actualizado correctamente.';
$lang['pwdforget'] = 'Esqueceches o teu contrasinal? Consegue un novo';
$lang['resendna'] = 'Este wiki non permite o reenvío de contrasinais.';
-$lang['resendpwd'] = 'Enviar novo contrasinal para';
$lang['resendpwdmissing'] = 'Sentímolo, tes que cubrir todos os campos.';
$lang['resendpwdnouser'] = 'Sentímolo, non atopamos este usuario no noso banco de datos.';
$lang['resendpwdbadauth'] = 'Sentímolo, mais este código de autorización non é válido. Asegúrate de que usaches a ligazón completa de confirmación.';
@@ -89,25 +90,9 @@ $lang['txt_filename'] = 'Subir como (opcional)';
$lang['txt_overwrt'] = 'Sobrescribir arquivo existente';
$lang['lockedby'] = 'Bloqueado actualmente por';
$lang['lockexpire'] = 'O bloqueo remata o';
-$lang['js']['willexpire'] = 'O teu bloqueo para editares esta páxina vai caducar nun minuto.\nPara de evitar conflitos, emprega o botón de previsualización para reiniciares o contador do tempo de bloqueo.';
-$lang['js']['notsavedyet'] = "Perderanse os trocos non gardados.\nEstá certo de quereres continuar?";
-$lang['rssfailed'] = 'Houbo un erro ao tentar obter esta corrente RSS: ';
-$lang['nothingfound'] = 'Non se atopou nada.';
-$lang['mediaselect'] = 'Arquivos-Media';
-$lang['fileupload'] = 'Subida de Arquivos-Media';
-$lang['uploadsucc'] = 'Subida correcta';
-$lang['uploadfail'] = 'Erra na subida. Pode que sexa un problema de permisos?';
-$lang['uploadwrong'] = 'Subida denegada. Esta extensión de arquivo non está permitida!';
-$lang['uploadexist'] = 'Xa existe o arquivo. Non se fixo nada.';
-$lang['uploadbadcontent'] = 'O contido subido non concorda coa extensión do arquivo %s.';
-$lang['uploadspam'] = 'A subida foi bloqueada pola lista negra de correo-lixo.';
-$lang['uploadxss'] = 'A subida foi bloqueada por un posíbel contido malicioso.';
-$lang['uploadsize'] = 'O arquivo subido é grande de máis. (máx. %s)';
-$lang['deletesucc'] = 'O arquivo "%s" foi eliminado.';
-$lang['deletefail'] = '"%s" non puido ser eliminado - comproba os permisos.';
-$lang['mediainuse'] = 'O arquivo "%s" non foi eliminado - aínda está en uso.';
-$lang['namespaces'] = 'Nomes de espazos';
-$lang['mediafiles'] = 'Arquivos dispoñíbeis en';
+$lang['js']['willexpire'] = 'O teu bloqueo para editares esta páxina vai caducar nun minuto.\nPara de evitar conflitos, emprega o botón de previsualización para reiniciares o contador do tempo de bloqueo.';
+$lang['js']['notsavedyet'] = 'Perderanse os trocos non gardados.
+Está certo de quereres continuar?';
$lang['js']['searchmedia'] = 'Procurar ficheiros';
$lang['js']['keepopen'] = 'Manter a fiestra aberta na selección';
$lang['js']['hidedetails'] = 'Agochar Pormenores';
@@ -137,6 +122,35 @@ Sempre podes copiar e colar a ligazón.';
$lang['js']['linkwiz'] = 'Asistente de ligazóns';
$lang['js']['linkto'] = 'Ligazón para:';
$lang['js']['del_confirm'] = 'Estás certo de quereres eliminar os elementos seleccionados?';
+$lang['js']['restore_confirm'] = 'Realmente desexas restaurar esta versión?';
+$lang['js']['media_diff'] = 'Ver as diferencias:';
+$lang['js']['media_diff_both'] = 'Cara a Cara';
+$lang['js']['media_diff_opacity'] = 'Opacidade';
+$lang['js']['media_diff_portions'] = 'Porcións';
+$lang['js']['media_select'] = 'Selecciona arquivos...';
+$lang['js']['media_upload_btn'] = 'Subir';
+$lang['js']['media_done_btn'] = 'Feito';
+$lang['js']['media_drop'] = 'Solta aquí os arquivos a subir';
+$lang['js']['media_cancel'] = 'eliminar';
+$lang['js']['media_overwrt'] = 'Sobreescribir os arquivos existentes';
+$lang['rssfailed'] = 'Houbo un erro ao tentar obter esta corrente RSS: ';
+$lang['nothingfound'] = 'Non se atopou nada.';
+$lang['mediaselect'] = 'Arquivos-Media';
+$lang['fileupload'] = 'Subida de Arquivos-Media';
+$lang['uploadsucc'] = 'Subida correcta';
+$lang['uploadfail'] = 'Erra na subida. Pode que sexa un problema de permisos?';
+$lang['uploadwrong'] = 'Subida denegada. Esta extensión de arquivo non está permitida!';
+$lang['uploadexist'] = 'Xa existe o arquivo. Non se fixo nada.';
+$lang['uploadbadcontent'] = 'O contido subido non concorda coa extensión do arquivo %s.';
+$lang['uploadspam'] = 'A subida foi bloqueada pola lista negra de correo-lixo.';
+$lang['uploadxss'] = 'A subida foi bloqueada por un posíbel contido malicioso.';
+$lang['uploadsize'] = 'O arquivo subido é grande de máis. (máx. %s)';
+$lang['deletesucc'] = 'O arquivo "%s" foi eliminado.';
+$lang['deletefail'] = '"%s" non puido ser eliminado - comproba os permisos.';
+$lang['mediainuse'] = 'O arquivo "%s" non foi eliminado - aínda está en uso.';
+$lang['namespaces'] = 'Nomes de espazos';
+$lang['mediafiles'] = 'Arquivos dispoñíbeis en';
+$lang['accessdenied'] = 'Non tes permitido ver esta páxina.';
$lang['mediausage'] = 'Emprega a seguinte sintaxe para inserires unha referencia a este arquivo:';
$lang['mediaview'] = 'Ver arquivo orixinal';
$lang['mediaroot'] = 'raigaña';
@@ -152,6 +166,10 @@ $lang['current'] = 'actual';
$lang['yours'] = 'A túa Versión';
$lang['diff'] = 'Amosar diferenzas coa versión actual';
$lang['diff2'] = 'Amosar diferenzas entre as revisións seleccionadas';
+$lang['difflink'] = 'Enlazar a esta vista de comparación';
+$lang['diff_type'] = 'Ver diferenzas:';
+$lang['diff_inline'] = 'Por liña';
+$lang['diff_side'] = 'Cara a Cara';
$lang['line'] = 'Liña';
$lang['breadcrumb'] = 'Trazado';
$lang['youarehere'] = 'Estás aquí';
@@ -169,6 +187,10 @@ $lang['mail_changed'] = 'páxina mudada:';
$lang['mail_subscribe_list'] = 'páxinas mudadas en nome de espazo:';
$lang['mail_new_user'] = 'Novo usuario:';
$lang['mail_upload'] = 'arquivo subido:';
+$lang['changes_type'] = 'Ver cambios';
+$lang['pages_changes'] = 'Páxinas';
+$lang['media_changes'] = 'Arquivos-Media';
+$lang['both_changes'] = 'Ambos, páxinas e arquivos-media';
$lang['qb_bold'] = 'Texto Resaltado';
$lang['qb_italic'] = 'Texto en Cursiva';
$lang['qb_underl'] = 'Texto Subliñado';
@@ -209,6 +231,9 @@ $lang['img_copyr'] = 'Copyright';
$lang['img_format'] = 'Formato';
$lang['img_camera'] = 'Cámara';
$lang['img_keywords'] = 'Verbas chave';
+$lang['img_width'] = 'Ancho';
+$lang['img_height'] = 'Alto';
+$lang['img_manager'] = 'Ver no xestor de arquivos-media';
$lang['subscr_subscribe_success'] = 'Engadido %s á lista de subscrición para %s';
$lang['subscr_subscribe_error'] = 'Erro ao tentar engadir %s á lista de subscrición para %s';
$lang['subscr_subscribe_noaddress'] = 'Non hai enderezos asociados co teu inicio de sesión, non é posíbel engadirte á lista de subscrición';
@@ -252,21 +277,7 @@ $lang['i_pol0'] = 'Wiki Aberto (lectura, escritura, subida de arq
$lang['i_pol1'] = 'Wiki Público (lectura para todas as persoas, escritura e subida de arquivos para usuarios rexistrados)';
$lang['i_pol2'] = 'Wiki Fechado (lectura, escritura, subida de arquivos só para usuarios rexistrados)';
$lang['i_retry'] = 'Tentar de novo';
-$lang['mu_intro'] = 'Aquí podes subir varios arquivos de vez. Preme o botón Navegar para engadilos á cola. Preme en Subir cando remates.';
-$lang['mu_gridname'] = 'Nome de Arquivo';
-$lang['mu_gridsize'] = 'Tamaño';
-$lang['mu_gridstat'] = 'Estado';
-$lang['mu_namespace'] = 'Nome de Espazo';
-$lang['mu_browse'] = 'Navegar';
-$lang['mu_toobig'] = 'grande de máis';
-$lang['mu_ready'] = 'disposto para subir';
-$lang['mu_done'] = 'feito';
-$lang['mu_fail'] = 'fallou';
-$lang['mu_authfail'] = 'sesión expirada';
-$lang['mu_progress'] = '@PCT@% subido';
-$lang['mu_filetypes'] = 'Tipos de arquivo Permitidos';
-$lang['mu_info'] = 'arquivos subidos.';
-$lang['mu_lasterr'] = 'Último erro:';
+$lang['i_license'] = 'Por favor escolla a licenza para o contido:';
$lang['recent_global'] = 'Agora mesmo estás a ver os trocos no nome de espazo <b>%s</b>. Tamén podes <a href="%s">ver os trocos recentes no Wiki enteiro</a>.';
$lang['years'] = 'hai %d anos';
$lang['months'] = 'hai %d meses';
@@ -275,3 +286,28 @@ $lang['days'] = 'hai %d días';
$lang['hours'] = 'hai %d horas';
$lang['minutes'] = 'hai %d minutos';
$lang['seconds'] = 'hai %d segundos';
+$lang['wordblock'] = 'Non se gardaron os cambios porque conteñen texto bloqueado (spam).';
+$lang['media_uploadtab'] = 'Subir';
+$lang['media_searchtab'] = 'Buscar';
+$lang['media_file'] = 'Arquivo';
+$lang['media_viewtab'] = 'Ver';
+$lang['media_edittab'] = 'Editar';
+$lang['media_historytab'] = 'Histórico';
+$lang['media_list_thumbs'] = 'Miniaturas';
+$lang['media_list_rows'] = 'Filas';
+$lang['media_sort_name'] = 'Nome';
+$lang['media_sort_date'] = 'Data';
+$lang['media_namespaces'] = 'Escolla espazo';
+$lang['media_files'] = 'Arquivos en %s';
+$lang['media_upload'] = 'Subir a %s';
+$lang['media_search'] = 'Buscar en %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s en %s';
+$lang['media_edit'] = 'Editar %s';
+$lang['media_history'] = 'Historia de %s';
+$lang['media_meta_edited'] = 'datos meta editados';
+$lang['media_perm_read'] = 'Sentímolo, non tes permisos suficientes para ler arquivos.';
+$lang['media_perm_upload'] = 'Sentímolo, non tes permisos suficientes para subir arquivos.';
+$lang['media_update'] = 'Subir nova versión';
+$lang['media_restore'] = 'Restaurar esta versión';
+$lang['plugin_install_err'] = 'Extensión instalada correctamente. Re-nomea o directorio da extensión de \'%s\' a \'%s\'.';
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index f295e44a9..00eb4549b 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -45,7 +45,6 @@ $lang['btn_backtomedia'] = 'חזרה לבחירת קובץ מדיה';
$lang['btn_subscribe'] = 'מעקב אחרי שינוים';
$lang['btn_profile'] = 'עדכון הפרופיל';
$lang['btn_reset'] = 'איפוס';
-$lang['btn_resendpwd'] = 'שליחת ססמה חדשה';
$lang['btn_draft'] = 'עריכת טיוטה';
$lang['btn_recover'] = 'שחזור טיוטה';
$lang['btn_draftdel'] = 'מחיקת טיוטה';
@@ -80,7 +79,6 @@ $lang['profnoempty'] = 'השם וכתובת הדוא״ל לא יכול
$lang['profchanged'] = 'הפרופיל עודכן בהצלחה';
$lang['pwdforget'] = 'שכחת את הססמה שלך? ניתן לקבל חדשה';
$lang['resendna'] = 'הוויקי הזה אינו תומך בחידוש ססמה';
-$lang['resendpwd'] = 'שליחת ססמה חדשה עבור';
$lang['resendpwdmissing'] = 'עליך למלא את כל השדות, עמך הסליחה.';
$lang['resendpwdnouser'] = 'משתמש בשם זה לא נמצא במסד הנתונים, עמך הסליחה.';
$lang['resendpwdbadauth'] = 'קוד אימות זה אינו תקף. יש לוודא כי נעשה שימוש בקישור האימות המלא, עמך הסליחה.';
@@ -259,21 +257,6 @@ $lang['i_pol1'] = ' ויקי ציבורי (קריאה לכולם,
$lang['i_pol2'] = 'ויקי סגור (קריאה, כתיבה והעלאה למשתמשים רשומים בלבד)';
$lang['i_retry'] = 'ניסיון נוסף';
$lang['i_license'] = 'נא לבחור את הרישיון שיחול על התוכן שבוויקי שלך:';
-$lang['mu_intro'] = 'דרך כאן ניתן להעלות מספר קבצים בבת אחת. יש ללחוץ על לחצן החיפוש להוסיף אותם למחסנית. ניתן ללחוץ על העלאה לסיום.';
-$lang['mu_gridname'] = 'שם הקובץ';
-$lang['mu_gridsize'] = 'גודל';
-$lang['mu_gridstat'] = 'מצב';
-$lang['mu_namespace'] = 'מרחב שם';
-$lang['mu_browse'] = 'חיפוש';
-$lang['mu_toobig'] = 'גדול מדי';
-$lang['mu_ready'] = 'בהמתנה להעלאה';
-$lang['mu_done'] = 'הסתיים';
-$lang['mu_fail'] = 'נכשל';
-$lang['mu_authfail'] = 'תוקף ההפעלה פג';
-$lang['mu_progress'] = '@PCT@% הועלה';
-$lang['mu_filetypes'] = 'סוגי קבצים מורשים';
-$lang['mu_info'] = 'הקבצים הועלו';
-$lang['mu_lasterr'] = 'שגיאה אחרונה:';
$lang['recent_global'] = 'נכון לעכשיו מתנהל על ידיך מעקב אחר מרחב השם <b>%s</b>. כמו כן, באפשרותך <a href="%s">לצפות בשינויים האחרונים בוויקי כולו</a>.';
$lang['years'] = 'לפני %d שנים';
$lang['months'] = 'לפני %d חודשים';
diff --git a/inc/lang/hi/lang.php b/inc/lang/hi/lang.php
index 00e5589d8..893457066 100644
--- a/inc/lang/hi/lang.php
+++ b/inc/lang/hi/lang.php
@@ -59,7 +59,6 @@ $lang['regpwmail'] = 'आपकी डोकुविकी का
$lang['reghere'] = 'आपके पास अभी तक कोई खाता नहीं है? बस एक लें |';
$lang['profna'] = 'यह विकी प्रोफ़ाइल संशोधन का समर्थन नहीं करता |';
$lang['profnochange'] = 'कोई परिवर्तन नहीं, कुछ नहीं करना |';
-$lang['resendpwd'] = 'नवगुप्तशब्द भेजें';
$lang['resendpwdmissing'] = 'छमा करें, आपको सारे रिक्त स्थान भरने पड़ेंगे |';
$lang['resendpwdsuccess'] = 'आपका नवगुप्तशब्द ईमेल द्वारा सम्प्रेषित कर दिया गया है |';
$lang['txt_upload'] = 'अपलोड करने के लिए फ़ाइल चुनें';
@@ -116,10 +115,3 @@ $lang['i_installer'] = 'डोकुविकी इंस्टॉल
$lang['i_wikiname'] = 'विकी का नाम';
$lang['i_superuser'] = 'महाउपयोगकर्ता';
$lang['i_retry'] = 'पुनःप्रयास';
-$lang['mu_gridsize'] = 'आकार';
-$lang['mu_gridstat'] = 'स्थिति';
-$lang['mu_browse'] = 'ब्राउज़';
-$lang['mu_toobig'] = 'बहुत बड़ा';
-$lang['mu_ready'] = 'अपलोड करने के लिए तैयार';
-$lang['mu_done'] = 'पूर्ण';
-$lang['mu_fail'] = 'असफल';
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index ef10d7720..a0438d915 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -42,7 +42,6 @@ $lang['btn_backtomedia'] = 'Povratak na Mediafile izbornik';
$lang['btn_subscribe'] = 'Pretplati se na promjene dokumenta';
$lang['btn_profile'] = 'Ažuriraj profil';
$lang['btn_reset'] = 'Poništi promjene';
-$lang['btn_resendpwd'] = 'Pošalji novu lozinku';
$lang['btn_draft'] = 'Uredi nacrt dokumenta';
$lang['btn_recover'] = 'Vrati prijašnji nacrt dokumenta';
$lang['btn_draftdel'] = 'Obriši nacrt dokumenta';
@@ -77,7 +76,6 @@ $lang['profnoempty'] = 'Prazno korisničko ime ili email nisu dopušte
$lang['profchanged'] = 'Korisnički profil je uspješno izmijenjen.';
$lang['pwdforget'] = 'Izgubili ste lozinku? Zatražite novu';
$lang['resendna'] = 'Ovaj wiki ne podržava ponovno slanje lozinke emailom.';
-$lang['resendpwd'] = 'Poslati novu lozinku za';
$lang['resendpwdmissing'] = 'Ispunite sva polja.';
$lang['resendpwdnouser'] = 'Nije moguće pronaći korisnika.';
$lang['resendpwdbadauth'] = 'Neispravan autorizacijski kod. Provjerite da li ste koristili potpun potvrdni link.';
@@ -257,21 +255,6 @@ $lang['i_pol1'] = 'Javni Wiki (čitanje za sve, pisanje i učitav
$lang['i_pol2'] = 'Zatvoreni Wiki (čitanje, pisanje, učitavanje samo za registrirane korisnike)';
$lang['i_retry'] = 'Pokušaj ponovo';
$lang['i_license'] = 'Molim odaberite licencu pod kojom želite postavljati vaš sadržaj:';
-$lang['mu_intro'] = 'Ovdje možeš učitati više datoteka odjednom. Klikni gumb pregled te ih dodajte u red. Pritisnite učitaj kad ste gotovi.';
-$lang['mu_gridname'] = 'Naziv datoteke';
-$lang['mu_gridsize'] = 'Veličina';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Imenski prostor';
-$lang['mu_browse'] = 'Pregled';
-$lang['mu_toobig'] = 'prevelik';
-$lang['mu_ready'] = 'spremno za učitavanje';
-$lang['mu_done'] = 'gotovo';
-$lang['mu_fail'] = 'nije uspio';
-$lang['mu_authfail'] = 'sjednica istekla';
-$lang['mu_progress'] = '@PCT@% učitan';
-$lang['mu_filetypes'] = 'Dozvoljeni tipovi datoteka';
-$lang['mu_info'] = 'datoteke učitane.';
-$lang['mu_lasterr'] = 'Posljednja greška:';
$lang['recent_global'] = 'Trenutno gledate promjene unutar <b>%s</b> imenskog prostora. Također možete <a href="%s">vidjeti zadnje promjene cijelog wiki-a</a>';
$lang['years'] = '%d godina prije';
$lang['months'] = '%d mjeseci prije';
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index 23419a2bd..671b225f2 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -45,7 +45,6 @@ $lang['btn_backtomedia'] = 'Vissza a médiafájlok kezeléséhez';
$lang['btn_subscribe'] = 'Oldalváltozások-hírlevél feliratkozás';
$lang['btn_profile'] = 'Személyes beállítások';
$lang['btn_reset'] = 'Alaphelyzet';
-$lang['btn_resendpwd'] = 'Új jelszó küldése';
$lang['btn_draft'] = 'Piszkozat szerkesztése';
$lang['btn_recover'] = 'Piszkozat folytatása';
$lang['btn_draftdel'] = 'Piszkozat törlése';
@@ -80,7 +79,6 @@ $lang['profnoempty'] = 'A név és e-mail mező nem maradhat üresen!'
$lang['profchanged'] = 'A személyes beállítások változtatása megtörtént.';
$lang['pwdforget'] = 'Elfelejtetted a jelszavad? Itt kérhetsz újat';
$lang['resendna'] = 'Ez a wiki nem támogatja a jelszó újraküldést.';
-$lang['resendpwd'] = 'Új jelszó kiküldése ennek a felhasználónak';
$lang['resendpwdmissing'] = 'Sajnáljuk, az összes mezőt ki kell töltened.';
$lang['resendpwdnouser'] = 'Sajnáljuk, ilyen azonosítójú felhasználónk nem létezik.';
$lang['resendpwdbadauth'] = 'Sajnáljuk, ez a megerősítő kód nem helyes. Biztos, hogy a teljes megerősítés linket beírtad pontosan?';
@@ -262,21 +260,6 @@ $lang['i_pol1'] = 'Publikus Wiki (mindenki olvashatja, de csak re
$lang['i_pol2'] = 'Zárt Wiki (csak regisztrált felhasználók olvashatják, írhatják és tölthetnek fel fájlokat)';
$lang['i_retry'] = 'Újra';
$lang['i_license'] = 'Kérlek válassz licenszt a feltöltött tartalomhoz:';
-$lang['mu_intro'] = 'Itt több fájlt is fel tudsz tölteni egyszerre. Kattints a "Kiválaszt" gombra és add hozzá a listához. Nyomd meg a Feltöltés gombot, amikor elkészültél.';
-$lang['mu_gridname'] = 'Fájlnév';
-$lang['mu_gridsize'] = 'Méret';
-$lang['mu_gridstat'] = 'Állapot';
-$lang['mu_namespace'] = 'Névtér';
-$lang['mu_browse'] = 'Kiválaszt';
-$lang['mu_toobig'] = 'túl nagy';
-$lang['mu_ready'] = 'feltöltésre kész';
-$lang['mu_done'] = 'kész';
-$lang['mu_fail'] = 'hibás';
-$lang['mu_authfail'] = 'session lejárt';
-$lang['mu_progress'] = '@PCT@% feltöltve';
-$lang['mu_filetypes'] = 'Megengedett fájltípusok';
-$lang['mu_info'] = 'Fájlok feltöltve.';
-$lang['mu_lasterr'] = 'Utolsó hiba:';
$lang['recent_global'] = 'Jelenleg csak a <b>%s</b> névtér friss változásai látszanak. Megtekinthetők <a href="%s">a teljes wiki friss változásai</a> is.';
$lang['years'] = '%d évvel ezelőtt';
$lang['months'] = '%d hónappal ezelőtt';
diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php
index 8398f29f0..d7be1eff3 100644
--- a/inc/lang/ia/lang.php
+++ b/inc/lang/ia/lang.php
@@ -45,7 +45,6 @@ $lang['btn_backtomedia'] = 'Retornar al selection de files multimedia';
$lang['btn_subscribe'] = 'Gerer subscriptiones';
$lang['btn_profile'] = 'Actualisar profilo';
$lang['btn_reset'] = 'Reinitialisar';
-$lang['btn_resendpwd'] = 'Inviar nove contrasigno';
$lang['btn_draft'] = 'Modificar version provisori';
$lang['btn_recover'] = 'Recuperar version provisori';
$lang['btn_draftdel'] = 'Deler version provisori';
@@ -80,7 +79,6 @@ $lang['profnoempty'] = 'Un nomine o adresse de e-mail vacue non es per
$lang['profchanged'] = 'Actualisation del profilo de usator succedite.';
$lang['pwdforget'] = 'Contrasigno oblidate? Obtene un altere';
$lang['resendna'] = 'Iste wiki non supporta le invio de un nove contrasigno.';
-$lang['resendpwd'] = 'Inviar nove contrasigno pro';
$lang['resendpwdmissing'] = 'Es necessari completar tote le campos.';
$lang['resendpwdnouser'] = 'Iste usator non ha essite trovate in le base de datos.';
$lang['resendpwdbadauth'] = 'Iste codice de authentication non es valide. Assecura te que tu ha usate le ligamine de confirmation complete.';
@@ -257,21 +255,6 @@ $lang['i_pol0'] = 'Wiki aperte (lectura, scriptura, incargamento
$lang['i_pol1'] = 'Wiki public (lectura pro omnes, scriptura e incargamento pro usatores registrate)';
$lang['i_pol2'] = 'Wiki claudite (lectura, scriptura e incargamento solmente pro usatores registrate)';
$lang['i_retry'] = 'Reprobar';
-$lang['mu_intro'] = 'Hic tu pote incargar plure files insimul. Clicca super le button Navigar pro adder los al cauda. Preme Incargar quando tu ha finite.';
-$lang['mu_gridname'] = 'Nomine de file';
-$lang['mu_gridsize'] = 'Dimension';
-$lang['mu_gridstat'] = 'Stato';
-$lang['mu_namespace'] = 'Spatio de nomines';
-$lang['mu_browse'] = 'Navigar';
-$lang['mu_toobig'] = 'troppo grande';
-$lang['mu_ready'] = 'preste pro incargamento';
-$lang['mu_done'] = 'complete';
-$lang['mu_fail'] = 'fallite';
-$lang['mu_authfail'] = 'session expirate';
-$lang['mu_progress'] = '@PCT@% incargate';
-$lang['mu_filetypes'] = 'Typos de file permittite';
-$lang['mu_info'] = 'files incargate.';
-$lang['mu_lasterr'] = 'Ultime error:';
$lang['recent_global'] = 'Tu observa actualmente le modificationes intra le spatio de nomines <b>%s</b>. Tu pote etiam <a href="%s">vider le modificationes recente de tote le wiki</a>.';
$lang['years'] = '%d annos retro';
$lang['months'] = '%d menses retro';
diff --git a/inc/lang/id-ni/lang.php b/inc/lang/id-ni/lang.php
index 9c04f0259..1a4d03498 100644
--- a/inc/lang/id-ni/lang.php
+++ b/inc/lang/id-ni/lang.php
@@ -38,7 +38,6 @@ $lang['btn_backlink'] = 'Link fangawuli';
$lang['btn_backtomedia'] = 'Angawuli ba filianö Mediafile';
$lang['btn_profile'] = 'Famohouni pörofile';
$lang['btn_reset'] = 'Fawu\'a';
-$lang['btn_resendpwd'] = 'Fa\'ohe\'ö kode sibohou';
$lang['btn_draft'] = 'Fawu\'a wanura';
$lang['btn_draftdel'] = 'Heta zura';
$lang['btn_register'] = 'Fasura\'ö';
@@ -69,7 +68,6 @@ $lang['profnoempty'] = 'Lö tetehegö na lö hadöi töi ma imele.';
$lang['profchanged'] = 'Pörofile zangoguna\'ö no tebohouni.';
$lang['pwdforget'] = 'Hadia olifu\'ö kode? Fuli halö kode';
$lang['resendna'] = 'Lö tetehegi ba wiki da\'a wama\'ohe\'ö kode dua kali.';
-$lang['resendpwd'] = 'Tefa\'ohe\'ö kode sibahou khö';
$lang['resendpwdmissing'] = 'Bologö dödöu, si lö tola lö\'ö öfo\'ösi fefu nahia si tohöna.';
$lang['resendpwdnouser'] = 'Bologö dödöu, lö masöndra zangoguna da\'a ba database.';
$lang['resendpwdconfirm'] = 'No tefaohe\'ö link famaduhu\'ö ba imele.';
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index e8026acee..2302d4f6f 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -42,7 +42,6 @@ $lang['btn_subscribe'] = 'Ikuti Perubahan';
$lang['btn_unsubscribe'] = 'Berhenti Ikuti Perubahan';
$lang['btn_profile'] = 'Ubah Profil';
$lang['btn_reset'] = 'Reset';
-$lang['btn_resendpwd'] = 'Kirim password baru';
$lang['btn_draft'] = 'Edit draft';
$lang['btn_draftdel'] = 'Hapus draft';
$lang['btn_register'] = 'Daftar';
@@ -74,7 +73,6 @@ $lang['profnoempty'] = 'Mohon mengisikan nama atau alamat email.';
$lang['profchanged'] = 'Profil User berhasil diubah.';
$lang['pwdforget'] = 'Lupa Password? Dapatkan yang baru';
$lang['resendna'] = 'Wiki ini tidak mendukung pengiriman ulang password.';
-$lang['resendpwd'] = 'Kirim password baru untuk';
$lang['resendpwdmissing'] = 'Maaf, Anda harus mengisikan semua field.';
$lang['resendpwdnouser'] = 'Maaf, user ini tidak ditemukan.';
$lang['resendpwdbadauth'] = 'Maaf, kode autentikasi tidak valid. Pastikan Anda menggunakan keseluruhan link konfirmasi.';
@@ -197,14 +195,3 @@ $lang['i_pol0'] = 'Wiki Terbuka (baca, tulis, upload untuk semua
$lang['i_pol1'] = 'Wiki Publik (baca untuk semua orang, tulis dan upload untuk pengguna terdaftar)';
$lang['i_pol2'] = 'Wiki Privat (baca, tulis dan upload hanya untuk pengguna terdaftar)';
$lang['i_retry'] = 'Coba Lagi';
-$lang['mu_gridname'] = 'Nama file';
-$lang['mu_gridsize'] = 'Ukuran';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namaspace';
-$lang['mu_browse'] = 'Jelajah';
-$lang['mu_ready'] = 'Siap untuk uplod';
-$lang['mu_done'] = 'Selesai';
-$lang['mu_fail'] = 'Gagal';
-$lang['mu_authfail'] = 'sesi habis';
-$lang['mu_progress'] = '@PCT@% uploaded';
-$lang['mu_filetypes'] = 'Izinkan tipe file';
diff --git a/inc/lang/is/lang.php b/inc/lang/is/lang.php
index 0e281e58d..be20da6b3 100644
--- a/inc/lang/is/lang.php
+++ b/inc/lang/is/lang.php
@@ -47,7 +47,6 @@ $lang['btn_subscribe'] = 'Vakta';
$lang['btn_unsubscribe'] = 'Afvakta';
$lang['btn_profile'] = 'Uppfæra notanda';
$lang['btn_reset'] = 'Endurstilla';
-$lang['btn_resendpwd'] = 'Senda nýtt aðgangsorð með tölvupósti';
$lang['btn_draft'] = 'Breyta uppkasti';
$lang['btn_recover'] = 'Endurheimta uppkast';
$lang['btn_draftdel'] = 'Eyða uppkasti';
@@ -82,7 +81,6 @@ $lang['profnoempty'] = 'Það er ekki leyfilegt að skilja nafn og pó
$lang['profchanged'] = 'Notendaupplýsingum breytt';
$lang['pwdforget'] = 'Gleymt aðgangsorð? Fáðu nýtt';
$lang['resendna'] = 'Þessi wiki styður ekki endursendingar aðgangsorðs';
-$lang['resendpwd'] = 'Senda nýtt aðgangsorð fyrir';
$lang['resendpwdmissing'] = 'Afsakið, þú verður að út eyðublaðið allt';
$lang['resendpwdnouser'] = 'Afsakið, notandi finnst ekki.';
$lang['resendpwdbadauth'] = 'Afsakið, þessi sannvottunorð er ekki gild. Gakktu úr skugga um að þú notaðir að ljúka staðfesting hlekkur.';
@@ -185,10 +183,3 @@ $lang['img_format'] = 'Forsnið';
$lang['img_camera'] = 'Myndavél';
$lang['img_keywords'] = 'Lykilorðir';
$lang['i_retry'] = 'Reyna aftur';
-$lang['mu_gridsize'] = 'Stærð';
-$lang['mu_toobig'] = 'of stór';
-$lang['mu_ready'] = 'tilbúin til upphleðslu';
-$lang['mu_done'] = 'lokið';
-$lang['mu_fail'] = 'mistókst';
-$lang['mu_info'] = 'Skrár innhlaðnar.';
-$lang['mu_lasterr'] = 'Síðasta villa:';
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index 9f4d42004..eda33898b 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -48,7 +48,6 @@ $lang['btn_backtomedia'] = 'Torna alla selezione file';
$lang['btn_subscribe'] = 'Sottoscrivi modifiche';
$lang['btn_profile'] = 'Aggiorna profilo';
$lang['btn_reset'] = 'Annulla';
-$lang['btn_resendpwd'] = 'Invia nuova password';
$lang['btn_draft'] = 'Modifica bozza';
$lang['btn_recover'] = 'Ripristina bozza';
$lang['btn_draftdel'] = 'Elimina bozza';
@@ -83,7 +82,6 @@ $lang['profnoempty'] = 'Nome o indirizzo email vuoti non sono consenti
$lang['profchanged'] = 'Aggiornamento del profilo utente riuscito.';
$lang['pwdforget'] = 'Hai dimenticato la password? Richiedine una nuova';
$lang['resendna'] = 'Questo wiki non supporta l\'invio di nuove password.';
-$lang['resendpwd'] = 'Invia nuova password per';
$lang['resendpwdmissing'] = 'Devi riempire tutti i campi.';
$lang['resendpwdnouser'] = 'Impossibile trovare questo utente nel database.';
$lang['resendpwdbadauth'] = 'Spiacenti, questo codice di autorizzazione non è valido. Assicurati di aver usato il link completo di conferma.';
@@ -92,7 +90,7 @@ $lang['resendpwdsuccess'] = 'La nuova password è stata spedita via email.'
$lang['license'] = 'Ad eccezione da dove è diversamente indicato, il contenuto di questo wiki è soggetto alla seguente licenza:';
$lang['licenseok'] = 'Nota: modificando questa pagina accetti di rilasciare il contenuto sotto la seguente licenza:';
$lang['searchmedia'] = 'Cerca file di nome:';
-$lang['searchmedia_in'] = 'Cerca in &s';
+$lang['searchmedia_in'] = 'Cerca in %s';
$lang['txt_upload'] = 'Seleziona un file da caricare';
$lang['txt_filename'] = 'Carica come (opzionale)';
$lang['txt_overwrt'] = 'Sovrascrivi file esistente';
@@ -225,8 +223,8 @@ $lang['subscr_subscribe_error'] = 'Impossibile aggiungere %s alla lista di sotto
$lang['subscr_subscribe_noaddress'] = 'Non esiste alcun indirizzo associato al tuo account, non puoi essere aggiunto alla lista di sottoscrizioni';
$lang['subscr_unsubscribe_success'] = 'Rimosso %s dalla lista di sottoscrizioni %s';
$lang['subscr_unsubscribe_error'] = 'Impossibile rimuovere %s dalla lista di sottoscrizioni %s';
-$lang['subscr_already_subscribed'] = '% è già iscritto a %s';
-$lang['subscr_not_subscribed'] = '% non è iscritto a %s';
+$lang['subscr_already_subscribed'] = '%s è già iscritto a %s';
+$lang['subscr_not_subscribed'] = '%s non è iscritto a %s';
$lang['subscr_m_not_subscribed'] = 'Attualmente non sei iscritto alla pagina o categoria corrente';
$lang['subscr_m_new_header'] = 'Aggiungi sottoscrizione';
$lang['subscr_m_current_header'] = 'Sottoscrizioni attuali';
@@ -262,21 +260,6 @@ $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['mu_intro'] = 'Qui si possono caricare più di un file alla volta. Scegliere "Sfoglia..." per aggiungere file alla coda. Alla fine, fai click su "Invia file".';
-$lang['mu_gridname'] = 'Nome file';
-$lang['mu_gridsize'] = 'Dimensione';
-$lang['mu_gridstat'] = 'Stato';
-$lang['mu_namespace'] = 'Categoria';
-$lang['mu_browse'] = 'Sfoglia';
-$lang['mu_toobig'] = 'troppo grande';
-$lang['mu_ready'] = 'pronto per caricare';
-$lang['mu_done'] = 'completo';
-$lang['mu_fail'] = 'fallito';
-$lang['mu_authfail'] = 'sessione scaduta';
-$lang['mu_progress'] = '@PCT@% caricato';
-$lang['mu_filetypes'] = 'Tipi di file permessi';
-$lang['mu_info'] = 'file caricati.';
-$lang['mu_lasterr'] = 'Ultimo errore:';
$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';
diff --git a/inc/lang/ja/index.txt b/inc/lang/ja/index.txt
index b5fbac97d..b0447899d 100644
--- a/inc/lang/ja/index.txt
+++ b/inc/lang/ja/index.txt
@@ -1,4 +1,4 @@
-====== 索引 ======
+====== サイトマップ ======
[[doku>namespaces|名前空間]] に基づく、全ての文書の索引です。
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index 1eeb6bb73..057fa5a54 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -7,6 +7,7 @@
* @author Ikuo Obataya <i.obataya@gmail.com>
* @author Daniel Dupriest <kououken@gmail.com>
* @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ * @author Taisuke Shimamoto <dentostar@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -29,7 +30,7 @@ $lang['btn_revs'] = '以前のリビジョン';
$lang['btn_recent'] = '最近の変更';
$lang['btn_upload'] = 'アップロード';
$lang['btn_cancel'] = 'キャンセル';
-$lang['btn_index'] = '索引';
+$lang['btn_index'] = 'サイトマップ';
$lang['btn_secedit'] = '編集';
$lang['btn_login'] = 'ログイン';
$lang['btn_logout'] = 'ログアウト';
@@ -42,12 +43,14 @@ $lang['btn_backtomedia'] = 'メディアファイル選択に戻る';
$lang['btn_subscribe'] = '変更履歴配信の登録';
$lang['btn_profile'] = 'ユーザー情報の更新';
$lang['btn_reset'] = 'リセット';
-$lang['btn_resendpwd'] = 'パスワード再発行';
+$lang['btn_resendpwd'] = '新しいパスワードをセット';
$lang['btn_draft'] = 'ドラフトを編集';
$lang['btn_recover'] = 'ドラフトを復元';
$lang['btn_draftdel'] = 'ドラフトを削除';
$lang['btn_revert'] = '元に戻す';
$lang['btn_register'] = 'ユーザー登録';
+$lang['btn_apply'] = '適用';
+$lang['btn_media'] = 'メディアマネージャー';
$lang['loggedinas'] = 'ようこそ';
$lang['user'] = 'ユーザー名';
$lang['pass'] = 'パスワード';
@@ -77,7 +80,7 @@ $lang['profnoempty'] = 'ユーザー名とメールアドレスを入
$lang['profchanged'] = 'ユーザー情報は更新されました。';
$lang['pwdforget'] = 'パスワードをお忘れですか?パスワード再発行';
$lang['resendna'] = 'パスワードの再発行は出来ません。';
-$lang['resendpwd'] = '新しいパスワードを送信します:';
+$lang['resendpwd'] = '新しいパスワードをセット';
$lang['resendpwdmissing'] = '全ての項目を入力して下さい。';
$lang['resendpwdnouser'] = '入力されたユーザーが見つかりませんでした。';
$lang['resendpwdbadauth'] = '申し訳ありません。この確認コードは有効ではありません。メール内に記載されたリンクを確認してください。';
@@ -92,7 +95,7 @@ $lang['txt_filename'] = '名前を変更してアップロード(オ
$lang['txt_overwrt'] = '既存のファイルを上書き';
$lang['lockedby'] = 'この文書は次のユーザによってロックされています';
$lang['lockexpire'] = 'ロック期限:';
-$lang['js']['willexpire'] = '編集中の文書はロック期限を過ぎようとしています。このままロックする場合は、一度文書の確認を行って期限をリセットしてください。';
+$lang['js']['willexpire'] = '編集中の文書はロック期限を過ぎようとしています。このままロックする場合は、一度文書の確認を行って期限をリセットしてください。';
$lang['js']['notsavedyet'] = '変更は保存されません。このまま処理を続けてよろしいですか?';
$lang['js']['searchmedia'] = 'ファイル検索';
$lang['js']['keepopen'] = '選択中はウィンドウを閉じない';
@@ -123,9 +126,20 @@ $lang['js']['nosmblinks'] = 'ウィンドウズの共有フォルダへリ
$lang['js']['linkwiz'] = 'リンクウィザード';
$lang['js']['linkto'] = 'リンク先:';
$lang['js']['del_confirm'] = '選択した項目を本当に削除しますか?';
+$lang['js']['restore_confirm'] = '本当にこのバージョンを復元しますか?';
+$lang['js']['media_diff'] = '差分の表示方法:';
+$lang['js']['media_diff_both'] = '並べて表示';
+$lang['js']['media_diff_opacity'] = '重ねて透過表示';
+$lang['js']['media_diff_portions'] = '重ねて切替表示';
+$lang['js']['media_select'] = 'ファイルを選択...';
+$lang['js']['media_upload_btn'] = 'アップロード';
+$lang['js']['media_done_btn'] = '完了';
+$lang['js']['media_drop'] = 'ここにファイルをドロップするとアップロードします';
+$lang['js']['media_cancel'] = '削除';
+$lang['js']['media_overwrt'] = '既存のファイルを上書きする';
$lang['rssfailed'] = 'RSSの取得に失敗しました:';
$lang['nothingfound'] = '該当文書はありませんでした。';
-$lang['mediaselect'] = 'メディアファイルを選択';
+$lang['mediaselect'] = 'メディアファイル';
$lang['fileupload'] = 'メディアファイルをアップロード';
$lang['uploadsucc'] = 'アップロード完了';
$lang['uploadfail'] = 'アップロードに失敗しました。権限がありません。';
@@ -172,11 +186,20 @@ $lang['external_edit'] = '外部編集';
$lang['summary'] = '編集の概要';
$lang['noflash'] = 'この内容を表示するためには <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> が必要です。';
$lang['download'] = 'この部分をダウンロード';
+$lang['tools'] = 'ツール';
+$lang['user_tools'] = 'ユーザ用ツール';
+$lang['site_tools'] = 'サイト用ツール';
+$lang['page_tools'] = 'ページ用ツール';
+$lang['skip_to_content'] = '内容へ移動';
$lang['mail_newpage'] = '文書の追加:';
$lang['mail_changed'] = '文書の変更:';
$lang['mail_subscribe_list'] = '名前空間内でページが変更:';
$lang['mail_new_user'] = '新規ユーザー:';
$lang['mail_upload'] = 'ファイルのアップロード:';
+$lang['changes_type'] = '表示する変更のタイプ:';
+$lang['pages_changes'] = 'ページの変更';
+$lang['media_changes'] = 'メディアファイルの変更';
+$lang['both_changes'] = 'ページとメディアファイルの変更';
$lang['qb_bold'] = '太字';
$lang['qb_italic'] = '斜体';
$lang['qb_underl'] = '下線';
@@ -217,6 +240,9 @@ $lang['img_copyr'] = '著作権';
$lang['img_format'] = 'フォーマット';
$lang['img_camera'] = '使用カメラ';
$lang['img_keywords'] = 'キーワード';
+$lang['img_width'] = '幅';
+$lang['img_height'] = '高さ';
+$lang['img_manager'] = 'メディアマネージャーで閲覧';
$lang['subscr_subscribe_success'] = '%sが%sの購読リストに登録されました。';
$lang['subscr_subscribe_error'] = '%sを%sの購読リストへの追加に失敗しました。';
$lang['subscr_subscribe_noaddress'] = 'あなたのログインに対応するアドレスがないため、購読リストへ追加することができません。';
@@ -259,21 +285,6 @@ $lang['i_pol1'] = 'パブリック Wiki(閲覧は全ての人
$lang['i_pol2'] = 'クローズド Wiki (登録ユーザーにのみ使用を許可)';
$lang['i_retry'] = '再試行';
$lang['i_license'] = 'あなたが作成したコンテンツが属するライセンスを選択してください:';
-$lang['mu_intro'] = '複数のファイルを一度にアップロードできます。ブラウズボタンをクリックしてファイルを追加してください。追加したら、アップロードボタンをクリックしてください。';
-$lang['mu_gridname'] = 'ファイル名';
-$lang['mu_gridsize'] = 'サイズ';
-$lang['mu_gridstat'] = 'ステータス';
-$lang['mu_namespace'] = '名前空間';
-$lang['mu_browse'] = 'ブラウズ';
-$lang['mu_toobig'] = '大きすぎます';
-$lang['mu_ready'] = 'アップロードできます';
-$lang['mu_done'] = '完了';
-$lang['mu_fail'] = '失敗';
-$lang['mu_authfail'] = 'セッション期限切れ';
-$lang['mu_progress'] = '@PCT@% アップロード完了';
-$lang['mu_filetypes'] = '使用できるファイル形式';
-$lang['mu_info'] = 'ファイルアップロード完了';
-$lang['mu_lasterr'] = '直近のエラー:';
$lang['recent_global'] = '現在、<b>%s</b> 名前空間内の変更点を閲覧中です。<a href="%s">Wiki全体の最近の変更点を確認する</a>ことも可能です。';
$lang['years'] = '%d年前';
$lang['months'] = '%dカ月前';
@@ -283,3 +294,27 @@ $lang['hours'] = '%d時間前';
$lang['minutes'] = '%d分前';
$lang['seconds'] = '%d秒前';
$lang['wordblock'] = 'スパムと認識されるテキストが含まれているため、変更は保存されませんでした。';
+$lang['media_uploadtab'] = 'アップロード';
+$lang['media_searchtab'] = '検索';
+$lang['media_file'] = 'ファイル';
+$lang['media_viewtab'] = '詳細';
+$lang['media_edittab'] = '編集';
+$lang['media_historytab'] = '履歴';
+$lang['media_list_thumbs'] = 'サムネイル';
+$lang['media_list_rows'] = '行';
+$lang['media_sort_name'] = '名前';
+$lang['media_sort_date'] = '日付';
+$lang['media_namespaces'] = '名前空間を選択';
+$lang['media_files'] = '%s 内のファイル';
+$lang['media_upload'] = '%s にアップロード';
+$lang['media_search'] = '%s 内で検索';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s at %s';
+$lang['media_edit'] = '%s を編集';
+$lang['media_history'] = '%s の履歴';
+$lang['media_meta_edited'] = 'メタデータが編集されました';
+$lang['media_perm_read'] = 'ファイルを閲覧する権限がありません。';
+$lang['media_perm_upload'] = 'ファイルをアップロードする権限がありません。';
+$lang['media_update'] = '新しいバージョンをアップロード';
+$lang['media_restore'] = 'このバージョンを復元';
+$lang['plugin_install_err'] = 'プラグインが正しくインストールされませんでした。プラグインのディレクトリ名を \'%s\' から \'%s\' に変更してください。';
diff --git a/inc/lang/ja/resetpwd.txt b/inc/lang/ja/resetpwd.txt
new file mode 100644
index 000000000..a414af991
--- /dev/null
+++ b/inc/lang/ja/resetpwd.txt
@@ -0,0 +1,3 @@
+====== 新しいパスワードをセット ======
+
+このWikiでの、あなたのアカウント用の新しいパスワードを入力して下さい \ No newline at end of file
diff --git a/inc/lang/kk/lang.php b/inc/lang/kk/lang.php
index f9ea0bced..3ff5ae455 100644
--- a/inc/lang/kk/lang.php
+++ b/inc/lang/kk/lang.php
@@ -38,7 +38,6 @@ $lang['btn_backtomedia'] = 'Медиафайлды таңдауға қай
$lang['btn_subscribe'] = 'Жазылуларды басқару';
$lang['btn_profile'] = 'Профильді жаңарту';
$lang['btn_reset'] = 'Түсіру';
-$lang['btn_resendpwd'] = 'Жаңа құпиясөзді жіберу';
$lang['btn_draft'] = 'Шимайды өңдеу';
$lang['btn_recover'] = 'Шимайды қайтару';
$lang['btn_draftdel'] = 'Шимайды өшіру';
@@ -73,7 +72,6 @@ $lang['profnoempty'] = 'Бос есім не email рұқсат еті
$lang['profchanged'] = 'Пайдаланушы профилі сәтті жаңартылған.';
$lang['pwdforget'] = 'Құпиясөзіңізді ұмыттыңызба? Жаңадан біреуін алыңыз';
$lang['resendna'] = 'Бұл wiki құпиясөзді қайта жіберуді қолдамайды.';
-$lang['resendpwd'] = 'Келесіге жаңа құпиясөзді жіберу ';
$lang['resendpwdmissing'] = 'Кешіріңіз, барлық тармақтары толтыруыңыз керек.';
$lang['resendpwdnouser'] = 'Кешіріңіз, бұл пайдаланушыны дерекқорымызда тапқан жоқпыз.';
$lang['resendpwdbadauth'] = 'Кешіріңіз, бұл түпнұсқалық коды бұрыс. Толық растау сілтемені пайдалануыңызды тексеріңіз.';
@@ -82,7 +80,7 @@ $lang['resendpwdsuccess'] = 'Сіздің жаңа құпиясөзіңіз
$lang['license'] = 'Басқаша көрсетілген болмаса, бұл wiki-дің мазмұны келесі лицензия бойынша беріледі:';
$lang['licenseok'] = 'Ескерту: бұл бетті өңдеуіңізбен мазмұныңыз келесі лицензия бойынша беруге келесесіз:';
$lang['searchmedia'] = 'Іздеу файлдың атауы:';
-$lang['searchmedia_in'] = '%-мен іздеу:';
+$lang['searchmedia_in'] = '%s-мен іздеу:';
$lang['txt_upload'] = 'Еңгізетін файлды таңдау';
$lang['txt_filename'] = 'Келесідей еңгізу (қалауынша)';
$lang['txt_overwrt'] = 'Бар файлды қайта жазу';
diff --git a/inc/lang/km/lang.php b/inc/lang/km/lang.php
index 68587e90f..6a5fa223f 100644
--- a/inc/lang/km/lang.php
+++ b/inc/lang/km/lang.php
@@ -39,7 +39,6 @@ $lang['btn_subscribe'] = 'ដាក់ដំណឹងផ្លស់ប្ត
$lang['btn_unsubscribe'] = 'ដកដំណឹងផ្លស់ប្តូរ';
$lang['btn_profile'] = 'កែប្រវត្តិរូប';
$lang['btn_reset'] = 'កមណត់ឡើងរិញ';
-$lang['btn_resendpwd'] = 'ផ្ញើពាក្សសម្ងាត់';
$lang['btn_draft'] = 'កែគំរោង';
$lang['btn_recover'] = 'ស្រោះគំរោងឡើង';
$lang['btn_draftdel'] = 'លុបគំរោង';
@@ -76,7 +75,6 @@ $lang['profchanged'] = 'ប្រវត្តិរូបអ្នកប្រ
$lang['pwdforget'] = 'ភ្លិចពាក្សសម្ងាត់ យកមួយទាត។';
$lang['resendna'] = 'វីគីនេះមិនឧបរំផ្ញើពាក្សសម្ងាតម្ដងទៀតទេ។';
-$lang['resendpwd'] = 'ផ្ញើពាក្សសម្ងាតឲ្យ';
$lang['resendpwdmissing'] = 'សុំអាទោស​ អ្នកត្រវបំពេញវាល។';
$lang['resendpwdnouser'] = 'សុំអាទោស​ យាងរកអ្នកប្រើមិនឃើងទេ។';
$lang['resendpwdbadauth'] = 'សុំអាទោស​ រហស្សលេខអនុញ្ញាតពំអាចប្រើបានទេ។ ខ្សែបន្ត';
diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php
index 91825c797..84fdb3c48 100644
--- a/inc/lang/ko/lang.php
+++ b/inc/lang/ko/lang.php
@@ -8,6 +8,7 @@
* @author dongnak@gmail.com
* @author Song Younghwan <purluno@gmail.com>
* @author Seung-Chul Yoo <dryoo@live.com>
+ * @author erial2@gmail.com
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -43,13 +44,15 @@ $lang['btn_backtomedia'] = '미디어 파일 선택으로 돌아가기';
$lang['btn_subscribe'] = '구독 신청';
$lang['btn_profile'] = '개인정보 변경';
$lang['btn_reset'] = '초기화';
-$lang['btn_resendpwd'] = '새 패스워드 보내기';
+$lang['btn_resendpwd'] = '새 암호 설정';
$lang['btn_draft'] = '문서초안 편집';
$lang['btn_recover'] = '문서초안 복구';
$lang['btn_draftdel'] = '문서초안 삭제';
$lang['btn_revert'] = '복원';
$lang['btn_register'] = '등록';
-$lang['loggedinas'] = '다음 사용자로 로그인';
+$lang['btn_apply'] = '적용';
+$lang['btn_media'] = '미디어 관리';
+$lang['loggedinas'] = '다른 사용자로 로그인';
$lang['user'] = '사용자';
$lang['pass'] = '패스워드';
$lang['newpass'] = '새로운 패스워드';
@@ -78,7 +81,7 @@ $lang['profnoempty'] = '이름이나 이메일 주소가 비었습니
$lang['profchanged'] = '개인정보 변경이 성공했습니다.';
$lang['pwdforget'] = '패스워드를 잊어버린 경우 새로 발급받을 수 있습니다.';
$lang['resendna'] = '이 위키는 패스워드 재발급을 지원하지 않습니다.';
-$lang['resendpwd'] = '새로운 패스워드를 보냅니다.';
+$lang['resendpwd'] = '새 암호 다음으로 전송 : ';
$lang['resendpwdmissing'] = '새로운 패스워드를 입력해야햡니다.';
$lang['resendpwdnouser'] = '등록된 사용자가 아닙니다. 다시 확인 바랍니다.';
$lang['resendpwdbadauth'] = '인증 코드가 틀립니다. 잘못된 링크인지 확인 바랍니다.';
@@ -93,7 +96,7 @@ $lang['txt_filename'] = '업로드 파일 이름을 입력합니다.(
$lang['txt_overwrt'] = '새로운 파일로 이전 파일을 교체합니다.';
$lang['lockedby'] = '현재 잠금 사용자';
$lang['lockexpire'] = '잠금 해제 시간';
-$lang['js']['willexpire'] = '잠시 후 편집 잠금이 해제됩니다.\n편집 충돌을 피하려면 미리보기를 눌러 잠금 시간을 다시 설정하기 바랍니다.';
+$lang['js']['willexpire'] = '잠시 후 편집 잠금이 해제됩니다.\n편집 충돌을 피하려면 미리보기를 눌러 잠금 시간을 다시 설정하기 바랍니다.';
$lang['js']['notsavedyet'] = '저장하지 않은 변경은 지워집니다.
계속하시겠습니까?';
$lang['js']['searchmedia'] = '파일 찾기';
@@ -125,6 +128,17 @@ $lang['js']['nosmblinks'] = '윈도우 공유 파일과의 연결은 MS 인
$lang['js']['linkwiz'] = '링크 마법사';
$lang['js']['linkto'] = '다음으로 연결:';
$lang['js']['del_confirm'] = '정말로 선택된 항목(들)을 삭제하시겠습니까?';
+$lang['js']['restore_confirm'] = '정말 이 버전으로 되돌리시겠습니까?';
+$lang['js']['media_diff'] = '차이점 보기 :';
+$lang['js']['media_diff_both'] = '나란히 보기';
+$lang['js']['media_diff_opacity'] = '겹쳐 보기';
+$lang['js']['media_diff_portions'] = '쪼개 보기';
+$lang['js']['media_select'] = '파일 선택';
+$lang['js']['media_upload_btn'] = '업로드';
+$lang['js']['media_done_btn'] = '완료';
+$lang['js']['media_drop'] = '업로드할 파일을 끌어넣으세요';
+$lang['js']['media_cancel'] = '삭제';
+$lang['js']['media_overwrt'] = '이미있는 파일 덮어쓰기';
$lang['rssfailed'] = 'feed 가져오기 실패: ';
$lang['nothingfound'] = '아무 것도 없습니다.';
$lang['mediaselect'] = '미디어 파일 선택';
@@ -174,11 +188,20 @@ $lang['external_edit'] = '외부 편집기';
$lang['summary'] = '편집 요약';
$lang['noflash'] = '이 컨텐츠를 표시하기 위해서 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>이 필요합니다.';
$lang['download'] = '조각 다운로드';
+$lang['tools'] = '도구';
+$lang['user_tools'] = '사용자 도구';
+$lang['site_tools'] = '사이트 도구';
+$lang['page_tools'] = '페이지 도구';
+$lang['skip_to_content'] = '컨텐츠 넘기기';
$lang['mail_newpage'] = '페이지 추가:';
$lang['mail_changed'] = '페이지 변경:';
$lang['mail_subscribe_list'] = '네임스페이스에서 변경된 페이지:';
$lang['mail_new_user'] = '새로운 사용자:';
$lang['mail_upload'] = '파일 첨부:';
+$lang['changes_type'] = '차이점 보기';
+$lang['pages_changes'] = '페이지';
+$lang['media_changes'] = '미디어 파일';
+$lang['both_changes'] = '미디어 파일과 페이지 양쪽';
$lang['qb_bold'] = '굵은 글';
$lang['qb_italic'] = '이탤릭체 글';
$lang['qb_underl'] = '밑줄 그어진 글';
@@ -219,6 +242,9 @@ $lang['img_copyr'] = '저작권';
$lang['img_format'] = '포맷';
$lang['img_camera'] = '카메라';
$lang['img_keywords'] = '키워드';
+$lang['img_width'] = '너비';
+$lang['img_height'] = '높이';
+$lang['img_manager'] = '미디어 관리자에서 보기';
$lang['subscr_subscribe_success'] = '%s을(를) 구독목록 %s에 추가하였습니다';
$lang['subscr_subscribe_error'] = '%s을(를) 구독목록 %s에 추가하는데 실패했습니다';
$lang['subscr_subscribe_noaddress'] = '등록된 주소가 없기 때문에 구독목록에 등록되지 않았습니다';
@@ -237,6 +263,7 @@ $lang['subscr_style_digest'] = '각 페이지의 변화를 요약 (매 %.2f
$lang['subscr_style_list'] = '마지막 이메일 이후 변화된 페이지의 목록 (매 %.2f 일 마다)';
$lang['authmodfailed'] = '잘못된 사용자 인증 설정입니다. 관리자에게 문의하기 바랍니다.';
$lang['authtempfail'] = '사용자 인증이 일시적으로 불가능합니다. 만일 계속해서 문제가 발생하면 관리자에게 문의하기 바랍니다.';
+$lang['authpwdexpire'] = '현재 암호를 설정하신지 %d 일이 지났습니다. 새로 설정해주시기 바랍니다.';
$lang['i_chooselang'] = '사용하는 언어를 선택합니다.';
$lang['i_installer'] = 'DokuWiki 설치';
$lang['i_wikiname'] = '위키 이름';
@@ -262,21 +289,6 @@ $lang['i_pol1'] = '공개형 위키 (누구나 읽을 수 있지
$lang['i_pol2'] = '폐쇄형 위키 (등록된 사용자만 읽기/쓰기/업로드가 가능합니다.)';
$lang['i_retry'] = '다시 시도';
$lang['i_license'] = '내용의 배포를 위한 라이센스를 선택하세요.';
-$lang['mu_intro'] = '여러 파일을 한번에 업로드할 수 있습니다. 파일 목록에 추가하려면 "찾기" 버튼을 클릭합니다. 파일 목록 추가 작업이 끝나면 "업로드" 버튼을 클릭하기 바랍니다. ';
-$lang['mu_gridname'] = '파일명';
-$lang['mu_gridsize'] = '크기';
-$lang['mu_gridstat'] = '상태';
-$lang['mu_namespace'] = '네임스페이스';
-$lang['mu_browse'] = '찾기';
-$lang['mu_toobig'] = '업로드 가능 크기를 초과했습니다.';
-$lang['mu_ready'] = '업로드가 가능합니다.';
-$lang['mu_done'] = '업로드가 완료되었습니다.';
-$lang['mu_fail'] = '업로드가 실패했습니다.';
-$lang['mu_authfail'] = '세션 기간이 종료되었습니다.';
-$lang['mu_progress'] = '@PCT@% 업로드되었습니다.';
-$lang['mu_filetypes'] = '허용된 파일타입';
-$lang['mu_info'] = '업로드 되었습니다.';
-$lang['mu_lasterr'] = '마지막 에러:';
$lang['recent_global'] = '<b>%s</b> 네임스페이스를 구독중입니다. <a href="%s">전체위키 변경사항 </a>도 보실수 있습니다.';
$lang['years'] = '%d 년 전';
$lang['months'] = '%d 개월 전';
@@ -286,3 +298,27 @@ $lang['hours'] = '%d 시간 전';
$lang['minutes'] = '%d 분 전';
$lang['seconds'] = '%d 초 전';
$lang['wordblock'] = '스팸 문구를 포함하고 있어서 저장되지 않았습니다.';
+$lang['media_uploadtab'] = '업로드';
+$lang['media_searchtab'] = '검색';
+$lang['media_file'] = '파일';
+$lang['media_viewtab'] = '보기';
+$lang['media_edittab'] = '수정';
+$lang['media_historytab'] = '변경사항';
+$lang['media_list_thumbs'] = '썸네일';
+$lang['media_list_rows'] = '목록';
+$lang['media_sort_name'] = '이름';
+$lang['media_sort_date'] = '날짜';
+$lang['media_namespaces'] = '네임스페이스 선택';
+$lang['media_files'] = '%s 의 파일';
+$lang['media_upload'] = '%s 에 업로드';
+$lang['media_search'] = '%s 를 검색';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s 의 %s';
+$lang['media_edit'] = '%s 수정';
+$lang['media_history'] = '%s 변경사항';
+$lang['media_meta_edited'] = '메타데이터 수정됨';
+$lang['media_perm_read'] = '죄송합니다, 이 파일을 읽을 권한이 없습니다.';
+$lang['media_perm_upload'] = '죄송합니다. 파일을 업로드할 권한이 없습니다.';
+$lang['media_update'] = '새 버전 올리기';
+$lang['media_restore'] = '이 버전으로 되돌리기';
+$lang['plugin_install_err'] = '플러그인 설치가 비정상적으로 이뤄졌습니다. 플러그인 디렉토리 \'%s\'를 \'%s\'로 변경하십시오.';
diff --git a/inc/lang/ko/resetpwd.txt b/inc/lang/ko/resetpwd.txt
new file mode 100644
index 000000000..b84674b82
--- /dev/null
+++ b/inc/lang/ko/resetpwd.txt
@@ -0,0 +1,3 @@
+====== 새 암호 설정 ======
+
+이 위키의 계정의 새 암호를 입력해주세요. \ No newline at end of file
diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php
index fd34a4ef8..3970f453a 100644
--- a/inc/lang/la/lang.php
+++ b/inc/lang/la/lang.php
@@ -44,7 +44,6 @@ $lang['btn_backtomedia'] = 'Ad media redire';
$lang['btn_subscribe'] = 'Custodire';
$lang['btn_profile'] = 'Tabellam nouare';
$lang['btn_reset'] = 'Abrogare';
-$lang['btn_resendpwd'] = 'Tesseram nouam cursu interretiali petere';
$lang['btn_draft'] = 'Propositum recensere';
$lang['btn_recover'] = 'Propositum reficere';
$lang['btn_draftdel'] = 'Propositum delere';
@@ -79,7 +78,6 @@ $lang['profnoempty'] = 'Omnes campi complendi sunt.';
$lang['profchanged'] = 'Tabella Sodalis feliciter nouatur';
$lang['pwdforget'] = 'Tesseram amisistine? Nouam petere';
$lang['resendna'] = 'Tesseram non mutare potest.';
-$lang['resendpwd'] = 'Tesseram mitte';
$lang['resendpwdmissing'] = 'Omnes campi complendi sunt.';
$lang['resendpwdnouser'] = 'In tabellis Sodalium nomen non inuentum est.';
$lang['resendpwdbadauth'] = 'Tesseram non legitima est.';
@@ -222,7 +220,7 @@ $lang['subscr_subscribe_noaddress'] = 'Cursus interretialis tuus deest, sic in i
$lang['subscr_unsubscribe_success'] = 'A subscriptione %s deletur quod %s';
$lang['subscr_unsubscribe_error'] = 'Error delendi %s a subscriptione quod %s';
$lang['subscr_already_subscribed'] = '%s iam subscriptus\a est in %s';
-$lang['subscr_not_subscribed'] = '%s non subscriptus\a est in %n';
+$lang['subscr_not_subscribed'] = '%s non subscriptus\a est in %s';
$lang['subscr_m_not_subscribed'] = 'Non hanc paginam uel genus subscribere potes.';
$lang['subscr_m_new_header'] = 'Subscriptionem addere';
$lang['subscr_m_current_header'] = 'haec subscriptio:';
@@ -256,21 +254,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['mu_intro'] = 'Plura documenta uno tempore onerare potes.';
-$lang['mu_gridname'] = 'Documenti nomen';
-$lang['mu_gridsize'] = 'Pondus';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Genus';
-$lang['mu_browse'] = 'Euoluere';
-$lang['mu_toobig'] = 'Ponderosius';
-$lang['mu_ready'] = 'Aptus ad onerandum';
-$lang['mu_done'] = 'Perfectum';
-$lang['mu_fail'] = 'Error';
-$lang['mu_authfail'] = 'Sessio exit';
-$lang['mu_progress'] = '@PCT@% oneratum';
-$lang['mu_filetypes'] = 'Genera documenti apta facere';
-$lang['mu_info'] = 'Documenta onerare';
-$lang['mu_lasterr'] = 'Extremus error:';
$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';
diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php
index 191a9bab5..e6409b7ff 100644
--- a/inc/lang/lb/lang.php
+++ b/inc/lang/lb/lang.php
@@ -37,7 +37,6 @@ $lang['btn_backlink'] = 'Linker zeréck';
$lang['btn_backtomedia'] = 'Zeréck bei d\'Auswiel vun de Mediadateien';
$lang['btn_profile'] = 'Profil aktualiséieren';
$lang['btn_reset'] = 'Zerécksetzen';
-$lang['btn_resendpwd'] = 'Nei Passwuert schécken';
$lang['btn_draft'] = 'Entworf änneren';
$lang['btn_recover'] = 'Entworf zeréckhuelen';
$lang['btn_draftdel'] = 'Entworf läschen';
@@ -71,7 +70,6 @@ $lang['profnoempty'] = 'En eidele Numm oder Emailadress ass net erlaab
$lang['profchanged'] = 'Benotzerprofil erfollegräicht aktualiséiert.';
$lang['pwdforget'] = 'Passwuert vergiess? Fro der e Neit';
$lang['resendna'] = 'Dëse Wiki ënnerstëtzt net d\'Neiverschécke vu Passwieder.';
-$lang['resendpwd'] = 'Nei Passwuert schécke fir';
$lang['resendpwdmissing'] = 'Du muss all Felder ausfëllen.';
$lang['resendpwdnouser'] = 'Kann dëse Benotzer net an der Datebank fannen.';
$lang['resendpwdbadauth'] = 'Den "Auth"-Code ass ongëlteg. Kuck no obs de dee ganze Konfirmationslink benotzt hues.';
@@ -189,24 +187,9 @@ $lang['i_pol0'] = 'Oppene Wiki (liese, schreiwen an eroplueden fi
$lang['i_pol1'] = 'Ëffentleche Wiki (liesen fir jidfereen, schreiwen an eroplueden fir registréiert Benotzer)';
$lang['i_pol2'] = 'Zouene Wiki (liesen, schreiwen, eroplueden nëmme fir registréiert Benotzer)';
$lang['i_retry'] = 'Nach eng Kéier probéieren';
-$lang['mu_intro'] = 'Hei kanns de méi Dateie mateneen eroplueden. Klick op den Duerchsiche-Knäppchen fir se an d\'Schlaang ze setzen. Dréck op Eroplueden wanns de fäerdeg bass.';
-$lang['mu_gridname'] = 'Dateinumm';
-$lang['mu_gridsize'] = 'Gréisst';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namespace';
-$lang['mu_browse'] = 'Duerchsichen';
-$lang['mu_toobig'] = 'ze grouss';
-$lang['mu_ready'] = 'prett fir eropzelueden';
-$lang['mu_done'] = 'fäerdeg';
-$lang['mu_fail'] = 'feelgeschloen';
-$lang['mu_authfail'] = 'Sessioun ofgelaf';
-$lang['mu_progress'] = '@PCT@% eropgelueden';
-$lang['mu_filetypes'] = 'Erlaabten Dateitypen';
-$lang['mu_info'] = 'Dateien eropgelueden.';
-$lang['mu_lasterr'] = 'Leschte Feeler:';
$lang['recent_global'] = 'Du kucks am Moment d\'Ännerungen innerhalb vum <b>%s</b> Namespace. Du kanns och <a href="%s">d\'Kierzilech Ännerungen vum ganze Wiki kucken</a>.';
$lang['years'] = 'virun %d Joer';
-$lang['months'] = 'virun % Méint';
+$lang['months'] = 'virun %d Méint';
$lang['weeks'] = 'virun %d Wochen';
$lang['days'] = 'virun %d Deeg';
$lang['hours'] = 'virun %d Stonnen';
diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php
index d14a0695a..13ff8c305 100644
--- a/inc/lang/lt/lang.php
+++ b/inc/lang/lt/lang.php
@@ -43,7 +43,6 @@ $lang['btn_subscribe'] = 'Užsisakyti keitimų prenumeratą';
$lang['btn_unsubscribe'] = 'Atsisakyti keitimų prenumeratos';
$lang['btn_profile'] = 'Atnaujinti profilį';
$lang['btn_reset'] = 'Atstata';
-$lang['btn_resendpwd'] = 'Išsiųsti naują slaptažodį';
$lang['btn_draft'] = 'Redaguoti juodraštį';
$lang['btn_recover'] = 'Atkurti juodraštį';
$lang['btn_draftdel'] = 'Šalinti juodraštį';
@@ -77,7 +76,6 @@ $lang['profnoempty'] = 'Tuščias vardo arba el. pašto adreso laukas
$lang['profchanged'] = 'Vartotojo profilis sėkmingai atnaujintas.';
$lang['pwdforget'] = 'Pamiršote slaptažodį? Gaukite naują';
$lang['resendna'] = 'Ši vikisvetainė neleidžia persiųsti slaptažodžių.';
-$lang['resendpwd'] = 'Atsiųsti naują slaptažodį';
$lang['resendpwdmissing'] = 'Jūs turite užpildyti visus laukus.';
$lang['resendpwdnouser'] = 'Tokio vartotojo nėra duomenų bazėje.';
$lang['resendpwdbadauth'] = 'Atsiprašome, bet šis tapatybės nustatymo kodas netinkamas. Įsitikinkite, kad panaudojote pilną patvirtinimo nuorodą.';
@@ -190,14 +188,3 @@ $lang['i_wikiname'] = 'Wiki vardas';
$lang['i_enableacl'] = 'Įjungti ACL (rekomenduojama)';
$lang['i_superuser'] = 'Supervartotojas';
$lang['i_problems'] = 'Instaliavimo metu buvo klaidų, kurios pateiktos žemiau. Tęsti negalima, kol nebus pašalintos priežastys.';
-$lang['mu_gridname'] = 'Failo vardas';
-$lang['mu_gridsize'] = 'Dydis';
-$lang['mu_gridstat'] = 'Statusas';
-$lang['mu_namespace'] = 'Vardų sritis';
-$lang['mu_browse'] = 'Browse';
-$lang['mu_toobig'] = 'perdidelis';
-$lang['mu_ready'] = 'paruošta įkrovimui';
-$lang['mu_done'] = 'užbaigta';
-$lang['mu_fail'] = 'nepavyko';
-$lang['mu_authfail'] = 'sesija nutraukta';
-$lang['mu_filetypes'] = 'Leidžiami failų tipai';
diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php
index 205d2e56d..b02e7f471 100644
--- a/inc/lang/lv/lang.php
+++ b/inc/lang/lv/lang.php
@@ -39,7 +39,6 @@ $lang['btn_backtomedia'] = 'Atpakaļ uz mēdiju failu izvēli';
$lang['btn_subscribe'] = 'Abonēt izmaiņu paziņojumus';
$lang['btn_profile'] = 'Labot savu profilu';
$lang['btn_reset'] = 'Atsaukt izmaiņas';
-$lang['btn_resendpwd'] = 'Nosūtīt jaunu paroli';
$lang['btn_draft'] = 'Labot melnrakstu';
$lang['btn_recover'] = 'Atjaunot melnrakstu';
$lang['btn_draftdel'] = 'Dzēst melnrakstu';
@@ -76,7 +75,6 @@ $lang['profnoempty'] = 'Bez vārda vai e-pasta adreses nevar.';
$lang['profchanged'] = 'Profils veiksmīgi izlabots.';
$lang['pwdforget'] = 'Aizmirsi paroli? Saņem jaunu';
$lang['resendna'] = 'Paroļu izsūtīšanu nepiedāvāju.';
-$lang['resendpwd'] = 'Nosūtīt jaunu paroli lietotājam';
$lang['resendpwdmissing'] = 'Atvaino, jāizpilda visas ailes.';
$lang['resendpwdnouser'] = 'Atvaino, tāda lietotāja nav.';
$lang['resendpwdbadauth'] = 'Atvaino, šis autorizācijas kods nav derīgs. Pārliecinies, ka lietoji pilnu apstiprināšanas adresi.';
@@ -123,7 +121,6 @@ Protams, ka vari saiti kopēt un iespraust citā programmā.';
$lang['js']['linkwiz'] = 'Saišu vednis';
$lang['js']['linkto'] = 'Saite uz: ';
$lang['js']['del_confirm'] = 'Dzēst šo šķirkli?';
-$lang['js']['mu_btn'] = 'Augšuplādēt uzreiz vairākus failus.';
$lang['js']['restore_confirm'] = 'Tiešām atjaunot šo versiju';
$lang['js']['media_diff'] = 'Skatīt atšķirību';
$lang['js']['media_diff_both'] = 'Blakus';
@@ -248,9 +245,9 @@ $lang['subscr_m_unsubscribe'] = 'Atteikties no abonēšanas';
$lang['subscr_m_subscribe'] = 'Abonēt';
$lang['subscr_m_receive'] = 'Saņemt';
$lang['subscr_style_every'] = 'vēstuli par katru izmaiņu';
-$lang['subscr_style_digest'] = 'kopsavilkumu par katru lapu';
-$lang['subscr_style_list'] = 'kopš pēdējās vēstules notikušo labojumu sarakstu';
-$lang['authmodfailed'] = 'Aplami konfigurēta lietotāju autentifikācija. Lūdzo ziņo Wiki administratoram.';
+$lang['subscr_style_digest'] = 'kopsavilkumu par katru lapu (reizi %.2f dienās)';
+$lang['subscr_style_list'] = 'kopš pēdējās vēstules notikušo labojumu sarakstu (reizi %.2f dienās)';
+$lang['authmodfailed'] = 'Aplami konfigurēta lietotāju autentifikācija. Lūdzu ziņo Wiki administratoram.';
$lang['authtempfail'] = 'Lietotāju autentifikācija pašlaik nedarbojas. Ja tas turpinās ilgstoši, lūduz ziņo Wiki administratoram.';
$lang['i_chooselang'] = 'Izvēlies valodu';
$lang['i_installer'] = 'DokuWiki instalētājs';
@@ -275,25 +272,10 @@ $lang['i_pol1'] = 'Publisks Wiki (lasa ikviens, raksta un augšup
$lang['i_pol2'] = 'Slēgts Wiki (raksta, lasa un augšupielādē tikai reģistrēti lietotāji)';
$lang['i_retry'] = 'Atkārtot';
$lang['i_license'] = 'Ar kādu licenci saturs tiks publicēts:';
-$lang['mu_intro'] = 'Šeit var augšupielādēt uzreiz vairāku failus. Uzklikšķini Pārlūkot pogai, lai tos ieliktu rindā. Nospied Augšupielādēt, kad rinda sastādīta.';
-$lang['mu_gridname'] = 'Faila vārds';
-$lang['mu_gridsize'] = 'Izmērs';
-$lang['mu_gridstat'] = 'Statuss';
-$lang['mu_namespace'] = 'Nodaļa';
-$lang['mu_browse'] = 'Pārlūkot';
-$lang['mu_toobig'] = 'par lielu';
-$lang['mu_ready'] = 'gatavs augšupielādei';
-$lang['mu_done'] = 'pabeigts';
-$lang['mu_fail'] = 'neizdevās';
-$lang['mu_authfail'] = 'sesijas laiks iztecējis';
-$lang['mu_progress'] = '@PCT@% augšupielādēts';
-$lang['mu_filetypes'] = 'Atļautie failu tipi';
-$lang['mu_info'] = 'faili ir augšupielādēti.';
-$lang['mu_lasterr'] = 'Pēdējā ķļūda.';
$lang['recent_global'] = 'Tu skati izmaiņas nodaļā <b>%s</b>. Ir iespējams <a href="%s">skatīt jaunākos grozījums visā viki</a>. ';
$lang['years'] = 'pirms %d gadiem';
$lang['months'] = 'pirms %d mēnešiem';
-$lang['weeks'] = 'pirms % nedēļām';
+$lang['weeks'] = 'pirms %d nedēļām';
$lang['days'] = 'pirms %d dienām';
$lang['hours'] = 'pirms %d stundām';
$lang['minutes'] = 'pirms %d minūtēm';
@@ -310,16 +292,16 @@ $lang['media_list_rows'] = 'Rindas';
$lang['media_sort_name'] = 'Nosaukums';
$lang['media_sort_date'] = 'Datums';
$lang['media_namespaces'] = 'Norādīt nodaļu';
-$lang['media_files'] = 'Faili nodaļā s%';
-$lang['media_upload'] = 'Augšuplādēt nodaļā s%';
-$lang['media_search'] = 'Meklēt nodaļā s%';
-$lang['media_view'] = 's%';
-$lang['media_viewold'] = 's% nodaļā s%';
+$lang['media_files'] = 'Faili nodaļā %s';
+$lang['media_upload'] = 'Augšuplādēt nodaļā %s';
+$lang['media_search'] = 'Meklēt nodaļā %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s nodaļā %s';
$lang['media_edit'] = 'Labot %s';
-$lang['media_history'] = 's% vēsture';
+$lang['media_history'] = '%s vēsture';
$lang['media_meta_edited'] = 'metadati laboti';
$lang['media_perm_read'] = 'Atvainojiet, jums nav tiesību skatīt failus. ';
$lang['media_perm_upload'] = 'Atvainojiet, jums nav tiesību augšupielādēt. ';
$lang['media_update'] = 'Augšupielādēt jaunu versiju';
$lang['media_restore'] = 'Atjaunot šo versiju';
-$lang['plugin_install_err'] = 'Modulis aplami instalēts. Pārdēvē moduļa direktoriju s% par s%.';
+$lang['plugin_install_err'] = 'Modulis aplami instalēts. Pārdēvē moduļa direktoriju %s par %s.';
diff --git a/inc/lang/mk/lang.php b/inc/lang/mk/lang.php
index ca4a746cd..62400063c 100644
--- a/inc/lang/mk/lang.php
+++ b/inc/lang/mk/lang.php
@@ -42,7 +42,6 @@ $lang['btn_backtomedia'] = 'Назад до изборот за медиа
$lang['btn_subscribe'] = 'Менаџирај претплати';
$lang['btn_profile'] = 'Ажурирај профил';
$lang['btn_reset'] = 'Ресет';
-$lang['btn_resendpwd'] = 'Испрати нов пасворд';
$lang['btn_draft'] = 'Уреди скица';
$lang['btn_recover'] = 'Поврати скица';
$lang['btn_draftdel'] = 'Избриши скица';
@@ -77,7 +76,6 @@ $lang['profnoempty'] = 'Празно име или адреса за
$lang['profchanged'] = 'Корисничкиот профил е успешно ажуриран.';
$lang['pwdforget'] = 'Ја заборавивте лозинката? Добијте нова';
$lang['resendna'] = 'Ова вики не поддржува повторно испраќање на лозинка.';
-$lang['resendpwd'] = 'Испрати нова лозинка за';
$lang['resendpwdmissing'] = 'Жалам, морате да ги пополните сите полиња.';
$lang['resendpwdnouser'] = 'Жалам, таков корисник не постои во нашата база со податоци.';
$lang['resendpwdbadauth'] = 'Жалам, овај код за валидација не е валиден. Проверете повторно дали ја искористивте целосната врска за потврда.';
@@ -223,20 +221,6 @@ $lang['i_pol0'] = 'Отвори вики (читај, запиш
$lang['i_pol1'] = 'Јавно вики (читај за сите, запиши и качи за регистрирани корисници)';
$lang['i_pol2'] = 'Затворено вики (читај, запиши, качи само за регистрирани корисници)';
$lang['i_retry'] = 'Пробај повторно';
-$lang['mu_intro'] = 'Овде можете да прикачите повеќе датотеки од еднаш. Кликнете на копчето за пребарување за да ги додадете во редица. Притиснете на качи кога е готово.';
-$lang['mu_gridname'] = 'Име на датотека';
-$lang['mu_gridsize'] = 'Големина';
-$lang['mu_gridstat'] = 'Состојба';
-$lang['mu_browse'] = 'Пребарај';
-$lang['mu_toobig'] = 'премногу голема';
-$lang['mu_ready'] = 'спремна за качување';
-$lang['mu_done'] = 'комплетно';
-$lang['mu_fail'] = 'неуспешно';
-$lang['mu_authfail'] = 'сесијата истече';
-$lang['mu_progress'] = '@PCT@% качено';
-$lang['mu_filetypes'] = 'Дозволено типови на датотеки';
-$lang['mu_info'] = 'качени датотеки.';
-$lang['mu_lasterr'] = 'Последна грешка: ';
$lang['years'] = 'пред %d години';
$lang['months'] = 'пред %d месеци';
$lang['weeks'] = 'пред %d недели';
diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php
index 63fda3e5a..32781e6d4 100644
--- a/inc/lang/mr/lang.php
+++ b/inc/lang/mr/lang.php
@@ -44,14 +44,16 @@ $lang['btn_back'] = 'मागॆ';
$lang['btn_backlink'] = 'येथे काय जोडले आहे';
$lang['btn_backtomedia'] = 'परत माध्यम फाइल निवडीकड़े';
$lang['btn_subscribe'] = 'पृष्ठाच्या बदलांची पुरवणी (फीड) लावा ';
-$lang['btn_unsubscribe'] = 'पृष्ठाच्या बदलांची पुरवणी (फीड) बंद करा';
$lang['btn_profile'] = 'प्रोफाइल अद्ययावत करा';
$lang['btn_reset'] = 'रिसेट';
-$lang['btn_resendpwd'] = 'कृपया परवलीचा नवीन शब्द माझ्या इमेल पत्त्यावर पाठविणे.';
+$lang['btn_resendpwd'] = 'नवीन पासवर्ड';
$lang['btn_draft'] = 'प्रत संपादन';
$lang['btn_recover'] = 'प्रत परत मिळवा';
$lang['btn_draftdel'] = 'प्रत रद्द';
+$lang['btn_revert'] = 'पुनर्स्थापन';
$lang['btn_register'] = 'नोंदणी';
+$lang['btn_apply'] = 'लागू';
+$lang['btn_media'] = 'मिडिया व्यवस्थापक';
$lang['loggedinas'] = 'लॉगिन नाव';
$lang['user'] = 'वापरकर्ता';
$lang['pass'] = 'परवलीचा शब्द';
@@ -82,20 +84,58 @@ $lang['profchanged'] = 'सदस्याची प्रोफाइ
$lang['pwdforget'] = 'परवलीचा शब्द विसरला आहे का? नविन मागवा.';
$lang['resendna'] = 'ह्या विकी मधे परवलीचा शब्द परत पाथाव्न्याची सुविधा नाही.';
$lang['resendpwd'] = 'नविन परवली इच्छुक';
-$lang['resendpwdmissing'] = 'कृपया सर्व रकाने भरा.';
+$lang['resendpwdmissing'] = 'माफ करा, पण सर्व जागा भरल्या पाहिजेत.';
$lang['resendpwdnouser'] = 'माफ़ करा, हा सदस्य आमच्या माहितिसंग्रहात सापडला नाही.';
$lang['resendpwdbadauth'] = 'माफ़ करा, हा अधिकार कोड बरोबर नाही. कृपया आपण पूर्ण शिकामोर्तबाची लिंक वापरल्याची खात्री करा.';
$lang['resendpwdconfirm'] = 'शिक्कामोर्तबाची लिंक ईमेल द्वारा पाठवली आहे.';
$lang['resendpwdsuccess'] = 'शिक्कामोर्तबाची लिंक ईमेल द्वारा पाठवली आहे.';
$lang['license'] = 'विशिष्ठ नोंद केलि नसल्यास ह्या विकी वरील सर्व मजकूर खालील लायसन्स मधे मोडतो : ';
$lang['licenseok'] = 'नोंद : हे पृष्ठ संपादित केल्यास तुम्ही तुमचे योगदान खालील लायसन्स अंतर्गत येइल : ';
+$lang['searchmedia'] = 'फाईल शोधा:';
+$lang['searchmedia_in'] = '%s मधे शोधा';
$lang['txt_upload'] = 'अपलोड करण्याची फाइल निवडा';
$lang['txt_filename'] = 'अपलोड उर्फ़ ( वैकल्पिक )';
$lang['txt_overwrt'] = 'अस्तित्वात असलेल्या फाइलवरच सुरक्षित करा.';
$lang['lockedby'] = 'सध्या लॉक करणारा :';
$lang['lockexpire'] = 'सध्या लॉक करणारा :';
-$lang['js']['willexpire'] = 'हे पृष्ठ संपादित करण्यासाठी मिळालेले लॉक एखाद्या मिनिटात संपणार आहे.\n चुका होऊ नयेत म्हणुन कृपया प्रीव्यू बटन दाबुन लॉक ची वेळ पुन्हा चालू करा.';
-$lang['js']['notsavedyet'] = "सुरक्षित न केलेले बदल नष्ट होतील. नक्की करू का ?";
+$lang['js']['willexpire'] = 'हे पृष्ठ संपादित करण्यासाठी मिळालेले लॉक एखाद्या मिनिटात संपणार आहे.\n चुका होऊ नयेत म्हणुन कृपया प्रीव्यू बटन दाबुन लॉक ची वेळ पुन्हा चालू करा.';
+$lang['js']['notsavedyet'] = 'सुरक्षित न केलेले बदल नष्ट होतील. नक्की करू का ?';
+$lang['js']['searchmedia'] = 'फाईल्ससाठी शोधा';
+$lang['js']['keepopen'] = 'निवड केल्यावर विण्डो उघडी ठेवा';
+$lang['js']['hidedetails'] = 'सविस्तर मजकूर लपवा';
+$lang['js']['mediatitle'] = 'लिंक सेटिंग';
+$lang['js']['mediadisplay'] = 'लिंकचा प्रकार';
+$lang['js']['mediaalign'] = 'जुळवणी';
+$lang['js']['mediasize'] = 'प्रतिमेचा आकार';
+$lang['js']['mediatarget'] = 'लिंकचे लक्ष्य';
+$lang['js']['mediaclose'] = 'बंद';
+$lang['js']['mediadisplayimg'] = 'प्रतिमा दाखवा.';
+$lang['js']['mediadisplaylnk'] = 'फक्त लिंक दाखवा.';
+$lang['js']['mediasmall'] = 'लहान आवृत्ती';
+$lang['js']['mediamedium'] = 'माध्यम आवृत्ती';
+$lang['js']['medialarge'] = 'मोठी आवृत्ती';
+$lang['js']['mediaoriginal'] = 'मूळ आवृत्ती';
+$lang['js']['medialnk'] = 'सविस्तर माहितीकडेची लिंक';
+$lang['js']['mediadirect'] = 'मूळ मजकुराकडे थेट लिंक';
+$lang['js']['medianolnk'] = 'लिंक नको';
+$lang['js']['medianolink'] = 'प्रतिमा लिंक करू नका';
+$lang['js']['medialeft'] = 'प्रतिमा डाव्या बाजूला जुळवून घ्या.';
+$lang['js']['mediaright'] = 'प्रतिमा उजव्या बाजूला जुळवून घ्या.';
+$lang['js']['mediacenter'] = 'प्रतिमा मध्यभागी जुळवून घ्या.';
+$lang['js']['medianoalign'] = 'जुळवाजुळव वापरू नका.';
+$lang['js']['nosmblinks'] = 'विन्डोज़ शेअर ला लिंक केल्यास ते फक्त मायक्रोसॉफ़्ट इन्टरनेट एक्स्प्लोरर वरच चालते. तरी तुम्ही लिंक कॉपी करू शकता.';
+$lang['js']['linkwiz'] = 'लिंक जादूगार';
+$lang['js']['linkto'] = 'याला लिंक करा:';
+$lang['js']['del_confirm'] = 'निवडलेल्या गोष्टी नक्की नष्ट करू का ?';
+$lang['js']['restore_confirm'] = 'हि आवृत्ती खरोखर पुनर्स्थापित करू का?';
+$lang['js']['media_diff'] = 'फरक बघू:';
+$lang['js']['media_diff_both'] = 'बाजूबाजूला';
+$lang['js']['media_diff_portions'] = 'स्वाईप';
+$lang['js']['media_select'] = 'फाईल निवड...';
+$lang['js']['media_upload_btn'] = 'अपलोड';
+$lang['js']['media_done_btn'] = 'झालं';
+$lang['js']['media_drop'] = 'अपलोड करण्यासाठी इथे फाईल टाका';
+$lang['js']['media_cancel'] = 'काढा';
$lang['rssfailed'] = 'ही पुरवणी आणण्यात काही चूक झाली:';
$lang['nothingfound'] = 'काही सापडला नाही.';
$lang['mediaselect'] = 'दृकश्राव्य फाइल';
@@ -113,9 +153,7 @@ $lang['deletefail'] = '%s ही फाइल नष्ट करू
$lang['mediainuse'] = '%s ही फाइल नष्ट केली नाही - ती अजुन वापरात आहे.';
$lang['namespaces'] = 'नेमस्पेस';
$lang['mediafiles'] = 'मध्ये उपलब्ध असलेल्या फाइल';
-$lang['js']['keepopen'] = 'निवड केल्यावर विण्डो उघडी ठेवा';
-$lang['js']['hidedetails'] = 'सविस्तर मजकूर लपवा';
-$lang['js']['nosmblinks'] = 'विन्डोज़ शेअर ला लिंक केल्यास ते फक्त मायक्रोसॉफ़्ट इन्टरनेट एक्स्प्लोरर वरच चालते. तरी तुम्ही लिंक कॉपी करू शकता.';
+$lang['accessdenied'] = 'तुम्हाला हे पान बघायची परवानगी नाही.';
$lang['mediausage'] = 'ह्या फाइलचा संदर्भ देण्यासाठी खालील सिन्टॅक्स वापरा :';
$lang['mediaview'] = 'मूळ फाइल बघू ';
$lang['mediaroot'] = 'रूट';
@@ -131,6 +169,10 @@ $lang['current'] = 'चालू';
$lang['yours'] = 'तुमची आवृत्ति';
$lang['diff'] = 'सध्याच्या आवृत्तिंशी फरक दाखवा';
$lang['diff2'] = 'निवडलेल्या आवृत्तिंमधील फरक दाखवा';
+$lang['difflink'] = 'ह्या तुलना दृष्टीकोनाला लिंक करा';
+$lang['diff_type'] = 'फरक बघू:';
+$lang['diff_inline'] = 'एका ओळीत';
+$lang['diff_side'] = 'बाजूबाजूला';
$lang['line'] = 'ओळ';
$lang['breadcrumb'] = 'मागमूस';
$lang['youarehere'] = 'तुम्ही इथे आहात';
@@ -142,10 +184,21 @@ $lang['restored'] = 'जुनी आवृत्ति पुन
$lang['external_edit'] = 'बाहेरून संपादित';
$lang['summary'] = 'सारांश बदला';
$lang['noflash'] = 'ही माहिती दाखवण्यासाठी <a href="http://www.adobe.com/products/flashplayer/">अडोब फ्लॅश प्लेअर</a> ची गरज आहे.';
+$lang['download'] = 'तुकडा डाउनलोड करा';
+$lang['tools'] = 'साधने';
+$lang['user_tools'] = 'युजरची साधने';
+$lang['site_tools'] = 'साईटची साधने';
+$lang['page_tools'] = 'पानाची साधने';
+$lang['skip_to_content'] = 'सरळ मजकुराकडे ';
$lang['mail_newpage'] = 'पृष्ठ जोडले : ';
$lang['mail_changed'] = 'पृष्ठ बदलले : ';
+$lang['mail_subscribe_list'] = 'ह्या नेमस्पेस नाढे बदललेली पाने:';
$lang['mail_new_user'] = 'नवीन सदस्य : ';
$lang['mail_upload'] = 'फाइल अपलोड केली : ';
+$lang['changes_type'] = 'ह्याचे बदल बघू';
+$lang['pages_changes'] = 'पाने';
+$lang['media_changes'] = 'मिडिया फाईल';
+$lang['both_changes'] = 'पाने आणि मिडिया फाईल दोन्ही';
$lang['qb_bold'] = 'ठळक मजकूर';
$lang['qb_italic'] = 'तिरका मजकूर';
$lang['qb_underl'] = 'अधोरेखित मजकूर';
@@ -156,6 +209,11 @@ $lang['qb_h2'] = 'दुसर्या पातळीचे
$lang['qb_h3'] = 'तिसर्या पातळीचे शीर्षक';
$lang['qb_h4'] = 'चवथ्या पातळीचे शीर्षक';
$lang['qb_h5'] = 'पाचव्या पातळीचे शीर्षक';
+$lang['qb_h'] = 'शीर्षक';
+$lang['qb_hs'] = 'शीर्षक निवड';
+$lang['qb_hplus'] = 'उंच शीर्षक';
+$lang['qb_hminus'] = 'खालचं शीर्षक';
+$lang['qb_hequal'] = 'समान लेवलचे शीर्षक';
$lang['qb_link'] = 'अंतर्गत लिंक';
$lang['qb_extlink'] = 'बाह्य लिंक';
$lang['qb_hr'] = 'आडवी पट्टी';
@@ -165,7 +223,7 @@ $lang['qb_media'] = 'प्रतिमा आणि इतर फ
$lang['qb_sig'] = 'स्वाक्षरी टाका';
$lang['qb_smileys'] = 'स्माइली';
$lang['qb_chars'] = 'ख़ास चिन्ह';
-$lang['js']['del_confirm'] = 'निवडलेल्या गोष्टी नक्की नष्ट करू का ?';
+$lang['upperns'] = 'ह्यावरच्या नेमस्पेसकडे उडी मारा';
$lang['admin_register'] = 'नवीन सदस्य';
$lang['metaedit'] = 'मेटाडेटा बदला';
$lang['metasaveerr'] = 'मेटाडेटा सुरक्षित झाला नाही';
@@ -181,11 +239,9 @@ $lang['img_copyr'] = 'कॉपीराइट';
$lang['img_format'] = 'प्रकार';
$lang['img_camera'] = 'कॅमेरा';
$lang['img_keywords'] = 'मुख्य शब्द';
-$lang['subscribe_success'] = '%s ला %s च्या पुरवणिसाठि नोंदवले';
-$lang['subscribe_error'] = '%s ला %s च्या पुरवणिसाठि नोंदवताना चूक झाली';
-$lang['subscribe_noaddress'] = 'तुमच्या लॉगिनशी सम्बंधित कुठलाही पत्ता नाही , त्यामुळे पुरवणिसाठि नोंद केली जाऊ शकत नाही';
-$lang['unsubscribe_success'] = '%s ला %s च्या पुरवणी यादी मधून काढून टाकले';
-$lang['unsubscribe_error'] = '%s ला %s च्या पुरवणी यादी मधून काढून टाकण्यात चूक झाली';
+$lang['img_width'] = 'रुंदी';
+$lang['img_height'] = 'उंची';
+$lang['img_manager'] = 'मिडिया व्यवस्थापकात बघू';
$lang['authmodfailed'] = 'सदस्य अधिकृत करण्याची व्यवस्था चुकीची आहे. कृपया तुमच्या विकीच्या व्यवस्थापकाशी सम्पर्क साधा.';
$lang['authtempfail'] = 'सदस्य अधिकृत करण्याची सुविधा सध्या चालू नाही. सतत हा मजकूर दिसल्यास कृपया तुमच्या विकीच्या व्यवस्थापकाशी सम्पर्क साधा.';
$lang['i_chooselang'] = 'तुमची भाषा निवडा';
@@ -209,17 +265,4 @@ $lang['i_pol0'] = 'मुक्त विकी ( सर्वा
$lang['i_pol1'] = 'सार्वजनिक विकी ( सर्वांना वाचण्याची मुभा , लेखन व अपलोडची परवानगी फक्त नोंदणीकृत सदस्यांना )';
$lang['i_pol2'] = 'बंदिस्त विकी ( वाचन , लेखन व अपलोडची परवानगी फक्त नोंदणीकृत सदस्यांना ) ';
$lang['i_retry'] = 'पुन्हा प्रयत्न';
-$lang['mu_intro'] = 'इथे तुम्ही एकापेक्षा अधिक फाइल अपलोड करू शकता. ब्राउझ च्या बटणावर क्लिक करून त्याना लिस्ट मधे टाका. सगळ्या टाकुन झाल्यावर अपलोड च्या बटणावर क्लिक करा.';
-$lang['mu_gridname'] = 'फाइल नाम';
-$lang['mu_gridsize'] = 'साइज';
-$lang['mu_gridstat'] = 'स्थिति';
-$lang['mu_namespace'] = 'नेमस्पेस';
-$lang['mu_browse'] = 'ब्राउझ';
-$lang['mu_toobig'] = 'अति मोठे';
-$lang['mu_ready'] = 'अपलोडसाठी तयार';
-$lang['mu_done'] = 'पूर्ण';
-$lang['mu_fail'] = 'अयशस्वी';
-$lang['mu_authfail'] = 'सेशन संपला';
-$lang['mu_progress'] = '@PCT@% अपलोड झाले';
-$lang['mu_filetypes'] = 'मान्य फाइल टाइप';
$lang['recent_global'] = 'तुम्ही सध्या <b>%s</b> या नेमस्पेस मधील बदल पाहात आहात.तुम्ही <a href="%s">पूर्ण विकी मधले बदल </a> सुद्धा पाहू शकता.';
diff --git a/inc/lang/ms/lang.php b/inc/lang/ms/lang.php
new file mode 100644
index 000000000..92dc86b5a
--- /dev/null
+++ b/inc/lang/ms/lang.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * ms language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesMs.php?view=co
+ * @author Markos
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Sunting halaman ini';
+$lang['btn_source'] = 'Lihat sumber';
+$lang['btn_show'] = 'Baca';
+$lang['btn_create'] = 'Cipta halaman';
+$lang['btn_search'] = 'Cari';
+$lang['btn_save'] = 'Simpan';
+$lang['btn_preview'] = 'Pratonton';
+$lang['btn_top'] = 'Balik ke mula';
+$lang['btn_newer'] = '<< lebih kini';
+$lang['btn_older'] = 'lebih awal >>';
+$lang['btn_revs'] = 'Sejarah';
+$lang['btn_recent'] = 'Perubahan Terkini';
+$lang['btn_upload'] = 'Unggah (upload)';
+$lang['btn_cancel'] = 'Batal';
+$lang['btn_secedit'] = 'Sunting';
+$lang['btn_login'] = 'Masuk';
+$lang['btn_logout'] = 'Keluar';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Kemaskini';
+$lang['btn_delete'] = 'Hapus';
+$lang['btn_back'] = 'Balik';
+$lang['btn_backlink'] = 'Pautan ke halaman ini';
+$lang['btn_backtomedia'] = 'Balik ke rangkaian pilihan fail media';
+$lang['btn_subscribe'] = 'Pantau';
+$lang['btn_profile'] = 'Kemaskinikan profil';
+$lang['btn_reset'] = 'Batalkan suntingan';
+$lang['btn_resendpwd'] = 'Emel kata laluan baru';
+$lang['btn_draft'] = 'Sunting draf';
+$lang['btn_recover'] = 'Pulihkan draf';
+$lang['btn_draftdel'] = 'Hapuskan draf';
+$lang['btn_revert'] = 'Pulihkan';
+$lang['btn_register'] = 'Daftaran';
+$lang['btn_apply'] = 'Simpan';
+$lang['btn_media'] = 'Manager media';
+$lang['loggedinas'] = 'Log masuk sebagai';
+$lang['user'] = 'Nama pengguna';
+$lang['pass'] = 'Kata laluan';
+$lang['newpass'] = 'Kata laluan baru';
+$lang['oldpass'] = 'Kata laluan lama';
+$lang['passchk'] = 'sekali lagi';
+$lang['remember'] = 'Sentiasa ingati kata laluan saya.';
+$lang['fullname'] = 'Nama sebenar';
+$lang['email'] = 'E-mel';
+$lang['profile'] = 'Profil pengguna';
+$lang['badlogin'] = 'Maaf, ralat log masuk. Nama pengguna atau kata laluan salah.';
+$lang['minoredit'] = 'Suntingan Kecil';
+$lang['draftdate'] = 'Draf automatik disimpan pada';
+$lang['nosecedit'] = 'Halaman ini telah bertukar pada waktu sementara dan info bahagian ini telah luput. Seluruh halaman telah disarat.';
+$lang['regmissing'] = 'Maaf, semua medan mesti diisi';
+$lang['reguexists'] = 'Maaf, nama pengguna yang dimasukkan telah diguna. Sila pilih nama yang lain.';
+$lang['regsuccess'] = 'Akaun pengguna telah dicipta dan kata laluan telah dikirim kepada e-mel anda.';
+$lang['regsuccess2'] = 'Akaun pegguna telah dicipta.';
+$lang['regbadmail'] = 'Format alamat e-mel tidak sah. Sila masukkan semula ataupun kosongkan sahaja medan tersebut.';
+$lang['regbadpass'] = 'Kedua-dua kata laluan tidak sama. Sila masukkan semula.';
+$lang['regpwmail'] = 'Kata laluan Dokuwiki anda';
+$lang['reghere'] = 'Belum mendaftar akaun? Dapat akaun baru';
+$lang['profna'] = 'Wiki ini tidak menyokong modifikasi profil';
+$lang['profnoempty'] = 'Medan nama pengguna atau e-mel yang kosong tidak dibenarkan.';
+$lang['profchanged'] = 'Profil pengguna telah dikemaskini.';
+$lang['pwdforget'] = 'Terlupa kata laluan? Dapatkan yang baru';
+$lang['resendpwd'] = 'Kirimkan kata laluan baru untuk';
+$lang['resendpwdmissing'] = 'Maaf, semua medan perlu diisi.';
+$lang['resendpwdnouser'] = 'Maaf, nama pengguna ini tidak dapat dicari dalam database kami.';
+$lang['resendpwdbadauth'] = 'Maaf, kod authorasi ini tidak sah. Semak bahawa anda telah menggunakan seluruh pautan pengesahan yang dikirim.';
+$lang['resendpwdconfirm'] = 'Pautan pengesahan telah dikirimkan ke e-mel anda.';
+$lang['resendpwdsuccess'] = 'Kata laluan baru telah dikirimkan ke e-mel anda.';
+$lang['license'] = 'Selain daripada yang dinyata, isi wiki ini disediakan dengan lesen berikut:';
+$lang['licenseok'] = 'Perhatian: Dengan menyunting halaman ini, anda setuju untuk isi-isi anda dilesen menggunakan lesen berikut:';
+$lang['searchmedia'] = 'Cari nama fail:';
+$lang['searchmedia_in'] = 'Cari di %s';
+$lang['txt_upload'] = 'Pilih fail untuk diunggah';
+$lang['txt_filename'] = 'Unggah fail dengan nama (tidak wajib)';
+$lang['txt_overwrt'] = 'Timpa fail sekarang';
+$lang['lockedby'] = 'Halaman ini telah di';
+$lang['fileupload'] = 'Muat naik fail';
+$lang['uploadsucc'] = 'Pemuatan naik berjaya';
+$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['summary'] = 'Paparan';
diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php
index 97e2dde5c..82ca389f7 100644
--- a/inc/lang/ne/lang.php
+++ b/inc/lang/ne/lang.php
@@ -40,7 +40,6 @@ $lang['btn_subscribe'] = 'पृष्ठ परिवर्तन ग
$lang['btn_unsubscribe'] = 'पृष्ठ परिवर्तन अग्राह्य गर्नुहोस्';
$lang['btn_profile'] = 'प्रोफाइल अध्यावधिक गर्नुहोस् ';
$lang['btn_reset'] = 'पूर्वरुपमा फर्काउनुहोस';
-$lang['btn_resendpwd'] = 'नयाँ प्रवेश शव्द(पासवर्ड) पठाउनुहोस् ';
$lang['btn_draft'] = ' ड्राफ्ट सम्पादन गर्नुहोस् ';
$lang['btn_recover'] = 'पहिलेको ड्राफ्ट हासिल गर्नुहोस ';
$lang['btn_draftdel'] = ' ड्राफ्ट मेटाउनुहोस् ';
@@ -75,7 +74,6 @@ $lang['profchanged'] = 'प्रयोगकर्ताको प्
$lang['pwdforget'] = 'आफ्नो पासवर्ड भुल्नु भयो ? नयाँ हासिल गर्नुहोस् ';
$lang['resendna'] = 'यो विकिबाट प्रवेशशव्द पठाउन समर्थित छैन ।';
$lang['resendpwd'] = 'नयाँ प्रवेशशव्द पठाउनुहोस् ';
-$lang['resendpwdmissing'] = 'माफ गर्नुहोस् , तपाईले सबै ठाउ भर्नुपर्छ। ';
$lang['resendpwdnouser'] = 'माफ गर्नुहोस्, हाम्रो डेटावेसमा यो प्रयोगकर्ता भेटिएन ।';
$lang['resendpwdbadauth'] = 'माफ गर्नुहोस् , यो अनुमति चिन्ह गलत छ। तपाईले पूरै जानकारी लिङ्क प्रयोग गर्नु पर्नेछ। ';
$lang['resendpwdconfirm'] = 'तपाईको इमेलमा कन्फरमेशन लिङ्क पठाइएको छ। ';
@@ -200,17 +198,4 @@ $lang['i_pol0'] = 'खुल्ला विकि (पठन,
$lang['i_pol1'] = 'Public विकि (पठन सवैका लागि,लेखन र अपलोड दर्ता गरिएका प्रयपगकर्ताका लागि ) ';
$lang['i_pol2'] = 'बन्द विकि (पठन , लेखन, अपलोड ) दर्ता भएका प्रयोगकर्ताका लागि मात्र ।';
$lang['i_retry'] = 'पुन: प्रयास गर्नुहोस् ';
-$lang['mu_intro'] = 'तपाईले धेरै वटा फाइलहरु एकै पटक अपलोड गर्न सक्नुहुन्छ । browse थिच्नुहोस् अनि सुचीमा थप्नुहोस् । सकिएपछि अपलोड थिछ्चुहोस् ।';
-$lang['mu_gridname'] = 'फाइलनाम ';
-$lang['mu_gridsize'] = 'आकार';
-$lang['mu_gridstat'] = 'स्थिति';
-$lang['mu_namespace'] = 'नेमस्पेस';
-$lang['mu_browse'] = 'Browse';
-$lang['mu_toobig'] = 'धेरै ठूलो';
-$lang['mu_ready'] = 'अपलोडको लागि तयार';
-$lang['mu_done'] = 'पूरा';
-$lang['mu_fail'] = 'असफल';
-$lang['mu_authfail'] = 'सत्र सकियो ';
-$lang['mu_progress'] = '@PCT@% अपलोड भयो ';
-$lang['mu_filetypes'] = 'समर्थित फाइल प्रकार';
$lang['recent_global'] = 'तपाई अहिले <b>%s</b> नेमस्पेस भित्र भएका परिवर्तन हेर्दैहुनुहुन्छ। तपाई <a href="%s">पुरै विकिमा भएको परिवर्तन हेर्न सक्नुहुन्छ</a>.';
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 62d23b0d2..4644f5e5d 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -15,6 +15,7 @@
* @author Marijn Hofstra <hofstra.m@gmail.com>
* @author Timon Van Overveldt <timonvo@gmail.com>
* @author Jeroen
+ * @author Ricardo Guijt <ricardoguijt@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -50,7 +51,6 @@ $lang['btn_backtomedia'] = 'Terug naar Bestandsselectie';
$lang['btn_subscribe'] = 'Inschrijven wijzigingen';
$lang['btn_profile'] = 'Profiel aanpassen';
$lang['btn_reset'] = 'Wissen';
-$lang['btn_resendpwd'] = 'Stuur een nieuw wachtwoord';
$lang['btn_draft'] = 'Bewerk concept';
$lang['btn_recover'] = 'Herstel concept';
$lang['btn_draftdel'] = 'Verwijder concept';
@@ -87,7 +87,6 @@ $lang['profnoempty'] = 'Een lege gebruikersnaam of e-mailadres is niet
$lang['profchanged'] = 'Gebruikersprofiel succesvol aangepast';
$lang['pwdforget'] = 'Je wachtwoord vergeten? Vraag een nieuw wachtwoord aan';
$lang['resendna'] = 'Deze wiki ondersteunt het verzenden van wachtwoorden niet';
-$lang['resendpwd'] = 'Stuur een nieuw wachtwoord voor';
$lang['resendpwdmissing'] = 'Sorry, je moet alle velden invullen.';
$lang['resendpwdnouser'] = 'Sorry, we kunnen deze gebruikersnaam niet vinden in onze database.';
$lang['resendpwdbadauth'] = 'Sorry, deze authentiecatiecode is niet geldig. Controleer of je de volledige bevestigings-link hebt gebruikt.';
@@ -138,8 +137,11 @@ $lang['js']['restore_confirm'] = 'Werkelijk deze versie terugzetten?';
$lang['js']['media_diff'] = 'Verschillen bekijken:';
$lang['js']['media_diff_both'] = 'Naast elkaar';
$lang['js']['media_diff_opacity'] = 'Doorschijnend';
+$lang['js']['media_diff_portions'] = 'Swipe';
$lang['js']['media_select'] = 'Selecteer bestanden';
+$lang['js']['media_upload_btn'] = 'Uploaden';
$lang['js']['media_done_btn'] = 'Klaar';
+$lang['js']['media_drop'] = 'Sleep bestanden hierheen om ze te uploaden';
$lang['js']['media_cancel'] = 'Verwijderen';
$lang['js']['media_overwrt'] = 'Bestaande bestanden overschrijven';
$lang['rssfailed'] = 'Er is een fout opgetreden bij het ophalen van de feed: ';
@@ -196,6 +198,7 @@ $lang['mail_changed'] = 'pagina aangepast:';
$lang['mail_subscribe_list'] = 'Pagina\'s veranderd in namespace:';
$lang['mail_new_user'] = 'nieuwe gebruiker:';
$lang['mail_upload'] = 'bestand geüpload:';
+$lang['changes_type'] = 'Bekijk wijzigingen van';
$lang['pages_changes'] = 'Pagina\'s';
$lang['media_changes'] = 'Media bestanden';
$lang['both_changes'] = 'Zowel pagina\'s als media bestanden';
@@ -282,21 +285,6 @@ $lang['i_pol1'] = 'Publieke wiki (lezen voor iedereen, schrijven
$lang['i_pol2'] = 'Besloten wiki (lezen, schrijven en uploaden alleen voor geregistreerde gebruikers)';
$lang['i_retry'] = 'Opnieuw';
$lang['i_license'] = 'Kies a.u.b. een licentie die u voor uw inhoud wilt gebruiken:';
-$lang['mu_intro'] = 'Hiier kun je meerdere bestanden tegelijk uploaden. Klik de blader-knop om ze aan de lijst toe te voegen. Klik Upload als je klaar bent.';
-$lang['mu_gridname'] = 'Bestandsnaam';
-$lang['mu_gridsize'] = 'Grootte';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namespace';
-$lang['mu_browse'] = 'Blader';
-$lang['mu_toobig'] = 'te groot';
-$lang['mu_ready'] = 'Klaar om te uploaden';
-$lang['mu_done'] = 'klaar';
-$lang['mu_fail'] = 'mislukt';
-$lang['mu_authfail'] = 'sessie beëindigd';
-$lang['mu_progress'] = '@PCT@% geüpload';
-$lang['mu_filetypes'] = 'Toegestane bestandstypes';
-$lang['mu_info'] = 'bestanden geüpload.';
-$lang['mu_lasterr'] = 'Laatste foutmelding:';
$lang['recent_global'] = 'Je bekijkt momenteel de wijzigingen binnen de <b>%s</b> namespace. Je kunt ook de <a href="%s">recente wijzigingen van de hele wiki</a> bekijken.';
$lang['years'] = '%d jaar geleden';
$lang['months'] = '%d maand geleden';
@@ -306,22 +294,27 @@ $lang['hours'] = '%d uren geleden';
$lang['minutes'] = '%d minuten geleden';
$lang['seconds'] = '%d seconden geleden';
$lang['wordblock'] = 'Uw wijziging is niet opgeslagen omdat deze niet-toegestane tekst bevat (spam).';
+$lang['media_uploadtab'] = 'Uploaden';
$lang['media_searchtab'] = 'Zoeken';
$lang['media_file'] = 'Bestand';
$lang['media_viewtab'] = 'Beeld';
$lang['media_edittab'] = 'Bewerken';
$lang['media_historytab'] = 'Geschiedenis';
+$lang['media_list_thumbs'] = 'Miniatuurweergaven';
$lang['media_list_rows'] = 'Regels';
$lang['media_sort_name'] = 'Naam';
$lang['media_sort_date'] = 'Datum';
$lang['media_namespaces'] = 'Kies naamruimte';
$lang['media_files'] = 'Bestanden in %s';
+$lang['media_upload'] = 'Upload naar %s';
$lang['media_search'] = 'Zoeken in %s';
$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s bij %s';
$lang['media_edit'] = '%s bewerken';
$lang['media_history'] = 'Geschiedenis van %s';
$lang['media_meta_edited'] = 'Metagegevens bewerkt';
$lang['media_perm_read'] = 'Sorry, u heeft niet voldoende rechten om bestanden te lezen.';
$lang['media_perm_upload'] = 'Sorry, u heeft niet voldoende rechten om bestanden te uploaden.';
+$lang['media_update'] = 'Upload nieuwe versie';
$lang['media_restore'] = 'Deze versie terugzetten';
$lang['plugin_install_err'] = 'Plugin is juist geinstalleerd. Hernoem plugin map \'%s\' naar \'%s\'.';
diff --git a/inc/lang/no/admin.txt b/inc/lang/no/admin.txt
index 99289a18b..765177fb3 100644
--- a/inc/lang/no/admin.txt
+++ b/inc/lang/no/admin.txt
@@ -1,3 +1,3 @@
====== Administrasjon ======
-Nedenfor finner du en liste over administrative oppgaver tilgjengelig i DokuWiki.
+Nedenfor finner du en liste over administrative oppgaver i DokuWiki.
diff --git a/inc/lang/no/adminplugins.txt b/inc/lang/no/adminplugins.txt
index 091ae4d7e..df78672d7 100644
--- a/inc/lang/no/adminplugins.txt
+++ b/inc/lang/no/adminplugins.txt
@@ -1 +1 @@
-====== Ekstra tillegg ====== \ No newline at end of file
+====== Ekstra programtillegg ====== \ No newline at end of file
diff --git a/inc/lang/no/conflict.txt b/inc/lang/no/conflict.txt
index 855034685..49961d0df 100644
--- a/inc/lang/no/conflict.txt
+++ b/inc/lang/no/conflict.txt
@@ -1,6 +1,6 @@
====== Det finnes en nyere versjon ======
-Det fins en nyere versjon av dokumentet du har redigert. Dette kan skje når en annen bruker redigerer dokumentet samtidig med deg.
+Det fins en nyere utgave av dokumentet du har redigert. Dette kan skje når en annen bruker redigerer dokumentet samtidig med deg.
Legg nøye merke til forskjellene som vises under, og velg deretter hvilken versjon du vil beholde. Om du velger ''**Lagre**'', så kommer din versjon til å lagres. Velg ''**Avbryt**'' for å beholde den nyeste versjonen (ikke din).
diff --git a/inc/lang/no/denied.txt b/inc/lang/no/denied.txt
index 4f8c9a188..6e7f1f28b 100644
--- a/inc/lang/no/denied.txt
+++ b/inc/lang/no/denied.txt
@@ -1,3 +1,3 @@
====== Adgang forbudt ======
-Adgang forbudt. Kanskje du har glemt å logge deg inn?
+Beklager, men du har ikke rettigheter til dette. Kanskje du har glemt å logge inn?
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index 88d21b536..97ef741ef 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -17,6 +17,7 @@
* @author Erik Pedersen <erik.pedersen@shaw.ca>
* @author Rune Rasmussen syntaxerror.no@gmail.com
* @author Jon Bøe <jonmagneboe@hotmail.com>
+ * @author Egil Hansen <egil@rosetta.no>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -26,7 +27,7 @@ $lang['singlequoteopening'] = '‘';
$lang['singlequoteclosing'] = '’';
$lang['apostrophe'] = '\'';
$lang['btn_edit'] = 'Rediger denne siden';
-$lang['btn_source'] = 'Vis kildetekst';
+$lang['btn_source'] = 'Vis kildekode';
$lang['btn_show'] = 'Vis siden';
$lang['btn_create'] = 'Lag denne siden';
$lang['btn_search'] = 'Søk';
@@ -49,10 +50,9 @@ $lang['btn_delete'] = 'Slett';
$lang['btn_back'] = 'Tilbake';
$lang['btn_backlink'] = 'Tilbakelenker';
$lang['btn_backtomedia'] = 'Tilbake til valg av mediafil';
-$lang['btn_subscribe'] = 'Abonner på endringer';
+$lang['btn_subscribe'] = 'Abonnér på endringer';
$lang['btn_profile'] = 'Oppdater profil';
$lang['btn_reset'] = 'Tilbakestill';
-$lang['btn_resendpwd'] = 'Send nytt passord';
$lang['btn_draft'] = 'Rediger kladd';
$lang['btn_recover'] = 'Gjennvinn kladd';
$lang['btn_draftdel'] = 'Slett kladd';
@@ -86,28 +86,27 @@ $lang['reghere'] = 'Har du ikke en konto ennå? Lag deg en';
$lang['profna'] = 'Denne wikien støtter ikke profilendringer';
$lang['profnochange'] = 'Ingen endringer, ingenting å gjøre.';
$lang['profnoempty'] = 'Tomt navn- eller e-postfelt er ikke tillatt.';
-$lang['profchanged'] = 'Brukerprofil ble vellykket oppdatert.';
-$lang['pwdforget'] = 'Glemt ditt passord? Få deg et nytt';
-$lang['resendna'] = 'Denne wikien støtter ikke nyutsending.';
-$lang['resendpwd'] = 'Send nytt passord for';
+$lang['profchanged'] = 'Brukerprofilen ble vellykket oppdatert.';
+$lang['pwdforget'] = 'Glemt passordet ditt? Få deg et nytt';
+$lang['resendna'] = 'Denne wikien støtter ikke nyutsending av passord.';
$lang['resendpwdmissing'] = 'Beklager, du må fylle inn alle felt.';
$lang['resendpwdnouser'] = 'Beklager, vi kan ikke finne denne brukeren i vår database.';
$lang['resendpwdbadauth'] = 'Beklager, denne autorisasjonskoden er ikke gyldig. Sjekk at du brukte hele bekreftelseslenken.';
$lang['resendpwdconfirm'] = 'En bekreftelseslenke er blitt sendt på e-post.';
$lang['resendpwdsuccess'] = 'Ditt nye passord er blitt sendt på e-post.';
-$lang['license'] = 'Der annet ikke er særskilt beskrevet, er innholdet på denne wiki regulert av følgende lisens:';
-$lang['licenseok'] = 'Merk: Ved å endre på denne siden godtar du at ditt innhold blir regulert av følgende lisens:';
+$lang['license'] = 'Der annet ikke er angitt, er innholdet på denne wiki utgitt under følgende lisens:';
+$lang['licenseok'] = 'Merk: Ved å endre på denne siden godtar du at ditt innhold utgis under følgende lisens:';
$lang['searchmedia'] = 'Søk filnavn';
$lang['searchmedia_in'] = 'Søk i %s';
$lang['txt_upload'] = 'Velg fil som skal lastes opp';
$lang['txt_filename'] = 'Skriv inn wikinavn (alternativt)';
$lang['txt_overwrt'] = 'Overskriv eksisterende fil';
-$lang['lockedby'] = 'Stengt av';
-$lang['lockexpire'] = 'Avstengningen opphører';
-$lang['js']['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å opphøre.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.';
-$lang['js']['notsavedyet'] = 'Ulagrede endringer vil gå tapt.
+$lang['lockedby'] = 'Låst av';
+$lang['lockexpire'] = 'Låsingen utløper';
+$lang['js']['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å utløpe.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.';
+$lang['js']['notsavedyet'] = 'Ulagrede endringer vil gå tapt!
Vil du fortsette?';
-$lang['js']['searchmedia'] = 'Søk for filer';
+$lang['js']['searchmedia'] = 'Søk etter filer';
$lang['js']['keepopen'] = 'Hold vindu åpent ved valg';
$lang['js']['hidedetails'] = 'Skjul detaljer';
$lang['js']['mediatitle'] = 'Lenkeinnstillinger';
@@ -117,16 +116,16 @@ $lang['js']['mediasize'] = 'Bildestørrelse';
$lang['js']['mediatarget'] = 'Lenkemål';
$lang['js']['mediaclose'] = 'Lukk';
$lang['js']['mediainsert'] = 'Sett inn';
-$lang['js']['mediadisplayimg'] = 'Vis bilde';
-$lang['js']['mediadisplaylnk'] = 'Vis bare lenken';
+$lang['js']['mediadisplayimg'] = 'Vis bilde.';
+$lang['js']['mediadisplaylnk'] = 'Vis bare lenken.';
$lang['js']['mediasmall'] = 'Liten versjon';
$lang['js']['mediamedium'] = 'Medium versjon';
$lang['js']['medialarge'] = 'Stor versjon';
$lang['js']['mediaoriginal'] = 'Original versjon';
-$lang['js']['medialnk'] = 'Lenke til detaljeside';
+$lang['js']['medialnk'] = 'Lenke til detaljside';
$lang['js']['mediadirect'] = 'Direktelenke til original';
$lang['js']['medianolnk'] = 'Ingen lenke';
-$lang['js']['medianolink'] = 'Ikke lenk bilde';
+$lang['js']['medianolink'] = 'Ikke lenk bildet';
$lang['js']['medialeft'] = 'Venstrejuster bilde';
$lang['js']['mediaright'] = 'Høyrejuster bilde';
$lang['js']['mediacenter'] = 'Midtstill bilde';
@@ -165,13 +164,13 @@ $lang['mediainuse'] = 'Filen "%s" har ikke biltt slettet - den er for
$lang['namespaces'] = 'Navnerom';
$lang['mediafiles'] = 'Tilgjengelige filer i';
$lang['accessdenied'] = 'Du har ikke tilgang til å se denne siden';
-$lang['mediausage'] = 'Bruk følgende syntaks til å refferer til denne filen:';
+$lang['mediausage'] = 'Bruk følgende syntaks til å referere til denne filen:';
$lang['mediaview'] = 'Vis original fil';
$lang['mediaroot'] = 'rot';
$lang['mediaupload'] = 'Last opp en fil til gjeldende navnerom her. For å opprette undernavnerom, før dem opp før filnavn i "Last opp som" adskilt med kolon.';
$lang['mediaextchange'] = 'Filendelse endret fra .%s til .%s!';
$lang['reference'] = 'Referanser for';
-$lang['ref_inuse'] = 'Denne filen kan ikke slettes fordi den er fortsatt i bruk av følgende sider:';
+$lang['ref_inuse'] = 'Denne filen kan ikke slettes fordi den er fortsatt i bruk på følgende sider:';
$lang['ref_hidden'] = 'Noen referanser er på sider du ikke har tilgang til å lese';
$lang['hits'] = 'Treff';
$lang['quickhits'] = 'Matchende wikinavn';
@@ -187,7 +186,7 @@ $lang['diff_side'] = 'Side ved side';
$lang['line'] = 'Linje';
$lang['breadcrumb'] = 'Spor';
$lang['youarehere'] = 'Du er her';
-$lang['lastmod'] = 'Sist modifisert';
+$lang['lastmod'] = 'Sist endret';
$lang['by'] = 'av';
$lang['deleted'] = 'fjernet';
$lang['created'] = 'opprettet';
@@ -258,15 +257,15 @@ $lang['subscr_not_subscribed'] = '%s abonnerer ikke på %s';
$lang['subscr_m_not_subscribed'] = 'Du abonnerer ikke på denne sida eller dette navnerommet';
$lang['subscr_m_new_header'] = 'Legg til abonnement';
$lang['subscr_m_current_header'] = 'Gjeldende abonnementer';
-$lang['subscr_m_unsubscribe'] = 'Avmeld';
-$lang['subscr_m_subscribe'] = 'Påmeld';
+$lang['subscr_m_unsubscribe'] = 'Stoppe abonnement';
+$lang['subscr_m_subscribe'] = 'Abonnere på';
$lang['subscr_m_receive'] = 'Motta';
$lang['subscr_style_every'] = 'e-post for alle endringer';
$lang['subscr_style_digest'] = 'e-post med sammendrag av endringer for hver side (%.2f dager mellom hver)';
$lang['subscr_style_list'] = 'liste med sider som er endra siden forrige e-post (%.2f dager mellom hver)';
$lang['authmodfailed'] = 'Feilkonfigurert brukerautorisasjon. Vennligst innformer Wiki-admin.';
$lang['authtempfail'] = 'Brukerautorisasjon er midlertidig utilgjengelig. Om dette vedvarer, vennligst informer Wiki-admin.';
-$lang['i_chooselang'] = 'Velg ditt språk';
+$lang['i_chooselang'] = 'Velg språk';
$lang['i_installer'] = 'DokuWiki-installasjon';
$lang['i_wikiname'] = 'Wikinavn';
$lang['i_enableacl'] = 'Aktiver ACL (anbefalt)';
@@ -276,7 +275,7 @@ $lang['i_modified'] = 'For sikkerhets skyld vil dette skriptet bare v
Du bør enten pakke ut filene på nytt fra den nedlastede pakken, eller konsultere den komplette
<a href="http://dokuwiki.org/install">Dokuwiki-installasjonsinstruksen</a>';
$lang['i_funcna'] = 'PHP-funksjonen <code>%s</code> er ikke tilgjengelig. Kanskje din leverandør har deaktivert den av noen grunn?';
-$lang['i_phpver'] = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
+$lang['i_phpver'] = 'Din PHP versjon <code>%s</code> er lavere enn kravet <code>%s</code>. Du må oppgradere PHP installasjonen. ';
$lang['i_permfail'] = '<code>%s</code> er ikke skrivbar for DokuWiki. Du må fikse rettighetene for denne mappen!';
$lang['i_confexists'] = '<code>%s</code> eksisterer allerede';
$lang['i_writeerr'] = 'Kunne ikke opprette <code>%s</code>. Du må sjekke mappe-/filrettigheter og opprette filen manuelt.';
@@ -292,21 +291,6 @@ $lang['i_pol1'] = 'Offentlig Wiki (les for alle, skriving og oppl
$lang['i_pol2'] = 'Lukket Wiki (les, skriv og opplasting bare for registrerte brukere)';
$lang['i_retry'] = 'Prøv igjen';
$lang['i_license'] = 'Velg lisens som du vil legge ut innholdet under:';
-$lang['mu_intro'] = 'Her kan du laste opp flere filer samtidig. Klikk på utforsk-knappen for å legge dem til i køen. Klikk på "last opp" når du er ferdig med å velge filene. ';
-$lang['mu_gridname'] = 'Filnavn';
-$lang['mu_gridsize'] = 'Størrelse';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Navnerom (Namespace)';
-$lang['mu_browse'] = 'Utforsk';
-$lang['mu_toobig'] = 'for stor';
-$lang['mu_ready'] = 'klar for opplasting';
-$lang['mu_done'] = 'komplett';
-$lang['mu_fail'] = 'feilet';
-$lang['mu_authfail'] = 'sesjonen har utløpt';
-$lang['mu_progress'] = '@PCT@% lastet opp';
-$lang['mu_filetypes'] = 'Tillatte filtyper';
-$lang['mu_info'] = 'filer lastet opp.';
-$lang['mu_lasterr'] = 'Siste feilen:';
$lang['recent_global'] = 'Du ser nå på endringene i navnerommet <b>%s</b>. Du kan også<a href="%s">se på nylig foretatte endringer for hele wikien</a>.';
$lang['years'] = '%d år siden';
$lang['months'] = '%d måneder siden';
@@ -333,10 +317,10 @@ $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 fila.';
+$lang['media_history'] = 'Dette er de tidligere versjonene av filen.';
$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.';
$lang['media_update'] = 'Last opp ny versjon';
$lang['media_restore'] = 'Gjenopprett denne versjonen';
-$lang['plugin_install_err'] = 'Tillegget ble feil installert. Skift navn på mappa \'%s\' til \'%s\'.';
+$lang['plugin_install_err'] = 'Tillegget ble feil installert. Skift navn på mappen \'%s\' til \'%s\'.';
diff --git a/inc/lang/no/newpage.txt b/inc/lang/no/newpage.txt
index f712998d2..86cad00ed 100644
--- a/inc/lang/no/newpage.txt
+++ b/inc/lang/no/newpage.txt
@@ -1,3 +1,3 @@
====== Dette emnet har ikke noe innhold ======
-Du har klikket på en lenke til et emne som ikke finnes ennå. Du kan skape det gjennom å klikke på ''**Lag denne siden**''.
+Du har klikket på en lenke til et emne som ikke finnes ennå. Du kan opprette det ved å klikke på ''**Lag denne siden**''.
diff --git a/inc/lang/no/pwconfirm.txt b/inc/lang/no/pwconfirm.txt
index 9b8a0ab3e..36163c6e7 100644
--- a/inc/lang/no/pwconfirm.txt
+++ b/inc/lang/no/pwconfirm.txt
@@ -3,7 +3,7 @@ Hei @FULLNAME@!
Noen har bedt om nytt passord for din @TITLE@ innlogging
på @DOKUWIKIURL@
-Om du ikke bad om nytt passord kan du bare overse denne e-posten.
+Om du ikke ba om nytt passord kan du bare overse denne e-posten.
For å bekrefte at forespørselen virkelig kom fra deg kan du bruke
følgende lenke:
diff --git a/inc/lang/no/recent.txt b/inc/lang/no/recent.txt
index d9357b1a4..857013c32 100644
--- a/inc/lang/no/recent.txt
+++ b/inc/lang/no/recent.txt
@@ -1,5 +1,5 @@
====== Siste nytt ======
-Følgende sider/dokumenter har nylig blitt oppdatert.
+Følgende sider har nylig blitt oppdatert.
diff --git a/inc/lang/no/register.txt b/inc/lang/no/register.txt
index 1ce95c44d..160e47364 100644
--- a/inc/lang/no/register.txt
+++ b/inc/lang/no/register.txt
@@ -1,4 +1,4 @@
====== Registrer deg som bruker ======
-Angi all informasjon som det blir spurt om nedenfor for å skape en ny brukerkonto for denne wiki. Vær spesielt nøye med å angi en **gyldig e-postadresse** - ditt passord vil bli sendt til den e-postadressen du angir. Brukernavnet må være et gyldig [[doku>pagename|sidenavn]].
+Angi all informasjon som det blir spurt om nedenfor for å lage en ny brukerkonto for denne wikien. Vær spesielt nøye med å angi en **gyldig e-postadresse** - ditt passord vil bli sendt til den e-postadressen du angir. Brukernavnet må være et gyldig [[doku>pagename|sidenavn]].
diff --git a/inc/lang/no/showrev.txt b/inc/lang/no/showrev.txt
index 556896437..06514f2bd 100644
--- a/inc/lang/no/showrev.txt
+++ b/inc/lang/no/showrev.txt
@@ -1,2 +1,2 @@
-**Dette er en gammel revisjon av dokumentet!**
+**Dette er en gammel utgave av dokumentet!**
----
diff --git a/inc/lang/no/subscr_form.txt b/inc/lang/no/subscr_form.txt
index c3df69e02..f62b25bec 100644
--- a/inc/lang/no/subscr_form.txt
+++ b/inc/lang/no/subscr_form.txt
@@ -1,3 +1,3 @@
====== Administrere abonnement ======
-Denne sida lar deg administrere abonnementene dine for denne sida og dette navnerommet. \ No newline at end of file
+Denne siden lar deg administrere abonnementene dine for denne siden og dette navnerommet. \ No newline at end of file
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index a6fc3d52e..3bde240d9 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -12,6 +12,7 @@
* @author maros <dobrimaros@yahoo.pl>
* @author Grzegorz Widła <dzesdzes@gmail.com>
* @author Łukasz Chmaj <teachmeter@gmail.com>
+ * @author Begina Felicysym <begina.felicysym@wp.eu>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -47,12 +48,13 @@ $lang['btn_backtomedia'] = 'Powrót do wyboru pliku';
$lang['btn_subscribe'] = 'Subskrybuj zmiany';
$lang['btn_profile'] = 'Aktualizuj profil';
$lang['btn_reset'] = 'Resetuj';
-$lang['btn_resendpwd'] = 'Prześlij nowe hasło';
$lang['btn_draft'] = 'Edytuj szkic';
$lang['btn_recover'] = 'Przywróć szkic';
$lang['btn_draftdel'] = 'Usuń szkic';
$lang['btn_revert'] = 'Przywróć';
$lang['btn_register'] = 'Zarejestruj się!';
+$lang['btn_apply'] = 'Zastosuj';
+$lang['btn_media'] = 'Menadżer multimediów';
$lang['loggedinas'] = 'Zalogowany jako';
$lang['user'] = 'Użytkownik';
$lang['pass'] = 'Hasło';
@@ -82,7 +84,6 @@ $lang['profnoempty'] = 'Pusta nazwa lub adres e-mail nie dozwolone.';
$lang['profchanged'] = 'Zaktualizowano profil użytkownika.';
$lang['pwdforget'] = 'Nie pamiętasz hasła? Zdobądź nowe!';
$lang['resendna'] = 'To wiki nie pozwala na powtórne przesyłanie hasła.';
-$lang['resendpwd'] = 'Prześlij nowe hasło dla';
$lang['resendpwdmissing'] = 'Wypełnij wszystkie pola.';
$lang['resendpwdnouser'] = 'Nie można znaleźć tego użytkownika w bazie danych.';
$lang['resendpwdbadauth'] = 'Błędny kod autoryzacji! Upewnij się, że użyłeś(aś) właściwego odnośnika.';
@@ -97,7 +98,7 @@ $lang['txt_filename'] = 'Nazwa pliku (opcjonalnie)';
$lang['txt_overwrt'] = 'Nadpisać istniejący plik?';
$lang['lockedby'] = 'Aktualnie zablokowane przez';
$lang['lockexpire'] = 'Blokada wygasa';
-$lang['willexpire'] = 'Za minutę Twoja blokada tej strony wygaśnie.\nW celu uniknięcia konfliktów wyświetl podgląd aby odnowić blokadę.';
+$lang['js']['willexpire'] = 'Twoja blokada edycji tej strony wygaśnie w ciągu minuty. \nW celu uniknięcia konfliktów użyj przycisku podglądu aby odnowić blokadę.';
$lang['js']['notsavedyet'] = 'Nie zapisane zmiany zostaną utracone.
Czy na pewno kontynuować?';
$lang['js']['searchmedia'] = 'Szukaj plików';
@@ -129,6 +130,17 @@ Możesz skopiować odnośnik.';
$lang['js']['linkwiz'] = 'Tworzenie odnośników';
$lang['js']['linkto'] = 'Link do';
$lang['js']['del_confirm'] = 'Czy na pewno usunąć?';
+$lang['js']['restore_confirm'] = 'Naprawdę przywrócić tą wersję?';
+$lang['js']['media_diff'] = 'Pokaż różnice:';
+$lang['js']['media_diff_both'] = 'Obok siebie';
+$lang['js']['media_diff_opacity'] = 'Przezroczystość';
+$lang['js']['media_diff_portions'] = 'Przesunięcie';
+$lang['js']['media_select'] = 'Wybierz pliki...';
+$lang['js']['media_upload_btn'] = 'Przesłanie plików';
+$lang['js']['media_done_btn'] = 'Zrobione';
+$lang['js']['media_drop'] = 'Upuść tutaj pliki do przesłania';
+$lang['js']['media_cancel'] = 'usuń';
+$lang['js']['media_overwrt'] = 'Nadpisz istniejące pliki';
$lang['rssfailed'] = 'Wystąpił błąd przy pobieraniu tych danych: ';
$lang['nothingfound'] = 'Nic nie znaleziono.';
$lang['mediaselect'] = 'Wysyłanie pliku';
@@ -178,11 +190,20 @@ $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.';
$lang['download'] = 'Pobierz zrzut';
+$lang['tools'] = 'Narzędzia';
+$lang['user_tools'] = 'Narzędzia użytkownika';
+$lang['site_tools'] = 'Narzędzia witryny';
+$lang['page_tools'] = 'Narzędzia strony';
+$lang['skip_to_content'] = 'przejście do zawartości';
$lang['mail_newpage'] = 'Strona dodana:';
$lang['mail_changed'] = 'Strona zmieniona:';
$lang['mail_subscribe_list'] = 'Zmienione strony w katalogu:';
$lang['mail_new_user'] = 'Nowy użytkownik:';
$lang['mail_upload'] = 'Umieszczono plik:';
+$lang['changes_type'] = 'Zobacz zmiany';
+$lang['pages_changes'] = 'Strony';
+$lang['media_changes'] = 'Pliki multimediów';
+$lang['both_changes'] = 'Zarówno strony jak i pliki multimediów';
$lang['qb_bold'] = 'Pogrubienie';
$lang['qb_italic'] = 'Pochylenie';
$lang['qb_underl'] = 'Podkreślenie';
@@ -223,6 +244,9 @@ $lang['img_copyr'] = 'Prawa autorskie';
$lang['img_format'] = 'Format';
$lang['img_camera'] = 'Aparat';
$lang['img_keywords'] = 'Słowa kluczowe';
+$lang['img_width'] = 'Szerokość';
+$lang['img_height'] = 'Wysokość';
+$lang['img_manager'] = 'Zobacz w menadżerze multimediów';
$lang['subscr_subscribe_success'] = 'Dodano %s do listy subskrypcji %s';
$lang['subscr_subscribe_error'] = 'Błąd podczas dodawania %s do listy subskrypcji %s';
$lang['subscr_subscribe_noaddress'] = 'Brak adresu skojarzonego z twoim loginem, nie możesz zostać dodany(a) do listy subskrypcji';
@@ -264,21 +288,6 @@ $lang['i_pol1'] = 'Publiczne Wiki (odczyt dla wszystkich, zapis i
$lang['i_pol2'] = 'Zamknięte Wiki (odczyt, zapis i dodawanie plików tylko dla zarejestrowanych użytkowników)';
$lang['i_retry'] = 'Spróbuj ponownie';
$lang['i_license'] = 'Wybierz licencję, na warunkach której chcesz udostępniać treści:';
-$lang['mu_intro'] = 'Możesz tutaj wysłać wiele plików na raz. Kliknij przycisk "Przeglądaj" aby dodać je do kolejki. Kliknij "Wyślij" gdy skończysz.';
-$lang['mu_gridname'] = 'Nazwa pliku';
-$lang['mu_gridsize'] = 'Rozmiar';
-$lang['mu_gridstat'] = 'Stan';
-$lang['mu_namespace'] = 'Katalog';
-$lang['mu_browse'] = 'Przeglądaj';
-$lang['mu_toobig'] = 'za duży';
-$lang['mu_ready'] = 'gotowy do wysłania';
-$lang['mu_done'] = 'zakończono';
-$lang['mu_fail'] = 'nie powiodło się';
-$lang['mu_authfail'] = 'sesja wygasła';
-$lang['mu_progress'] = '@PCT@% wysłano';
-$lang['mu_filetypes'] = 'Dozwolone typy plików';
-$lang['mu_info'] = 'wysłanych plików.';
-$lang['mu_lasterr'] = 'Ostatni błąd:';
$lang['recent_global'] = 'W tej chwili przeglądasz zmiany w katalogu <b>%s</b>. Możesz przejrzeć także <a href="%s">zmiany w całym wiki</a>.';
$lang['years'] = '%d lat temu';
$lang['months'] = '%d miesięcy temu';
@@ -288,3 +297,27 @@ $lang['hours'] = '%d godzin temu';
$lang['minutes'] = '%d minut temu';
$lang['seconds'] = '%d sekund temu';
$lang['wordblock'] = 'Twoje ustawienia nie zostały zapisane ponieważ zawierają niedozwoloną treść (spam).';
+$lang['media_uploadtab'] = 'Przesyłanie plików';
+$lang['media_searchtab'] = 'Szukaj';
+$lang['media_file'] = 'Plik';
+$lang['media_viewtab'] = 'Widok';
+$lang['media_edittab'] = 'Zmiana';
+$lang['media_historytab'] = 'Historia';
+$lang['media_list_thumbs'] = 'Miniatury';
+$lang['media_list_rows'] = 'Wiersze';
+$lang['media_sort_name'] = 'Nazwa';
+$lang['media_sort_date'] = 'Data';
+$lang['media_namespaces'] = 'Wybierz przestrzeń nazw';
+$lang['media_files'] = 'Pliki w %s';
+$lang['media_upload'] = 'Przesyłanie plików na %s';
+$lang['media_search'] = 'Znajdź w %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s na %s';
+$lang['media_edit'] = 'Zmień %s';
+$lang['media_history'] = 'Historia dla %s';
+$lang['media_meta_edited'] = 'zmienione metadane';
+$lang['media_perm_read'] = 'Przepraszamy, nie masz wystarczających uprawnień do odczytu plików.';
+$lang['media_perm_upload'] = 'Przepraszamy, nie masz wystarczających uprawnień do przesyłania plików.';
+$lang['media_update'] = 'Prześlij nową wersję';
+$lang['media_restore'] = 'Odtwórz tą wersję';
+$lang['plugin_install_err'] = 'Wtyczka zainstalowana nieprawidłowo. Zmień nazwę katalogu wtyczki \'%s\' na \'%s\'.';
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index 066b3acaa..d6dc8f96b 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -54,7 +54,6 @@ $lang['btn_backtomedia'] = 'Voltar à seleção do arquivo de mídia';
$lang['btn_subscribe'] = 'Monitorar alterações';
$lang['btn_profile'] = 'Atualizar o perfil';
$lang['btn_reset'] = 'Limpar';
-$lang['btn_resendpwd'] = 'Envie-me uma nova senha';
$lang['btn_draft'] = 'Editar o rascunho';
$lang['btn_recover'] = 'Recuperar o rascunho';
$lang['btn_draftdel'] = 'Excluir o rascunho';
@@ -89,7 +88,6 @@ $lang['profnoempty'] = 'Não são permitidos nomes ou endereços de e-
$lang['profchanged'] = 'O perfil do usuário foi atualizado com sucesso.';
$lang['pwdforget'] = 'Esqueceu sua senha? Solicite outra';
$lang['resendna'] = 'Esse wiki não tem suporte para o reenvio de senhas.';
-$lang['resendpwd'] = 'Enviar a nova senha para';
$lang['resendpwdmissing'] = 'Desculpe, você deve preencher todos os campos.';
$lang['resendpwdnouser'] = 'Desculpe, não foi possível encontrar esse usuário no nosso banco de dados.';
$lang['resendpwdbadauth'] = 'Desculpe, esse código de autorização é inválido. Certifique-se de que você usou o link de confirmação inteiro.';
@@ -235,8 +233,8 @@ $lang['subscr_subscribe_error'] = 'Ocorreu um erro na adição de %s à lista de
$lang['subscr_subscribe_noaddress'] = 'Como não há nenhum endereço associado ao seu usuário, você não pode ser adicionado à lista de monitoramento';
$lang['subscr_unsubscribe_success'] = '%s foi removido da lista de monitoramento de %s';
$lang['subscr_unsubscribe_error'] = 'Ocorreu um erro na remoção de %s da lista de monitoramentos de %s';
-$lang['subscr_already_subscribed'] = '%s já está monitorando s%';
-$lang['subscr_not_subscribed'] = 's% não está monitorando s%';
+$lang['subscr_already_subscribed'] = '%s já está monitorando %s';
+$lang['subscr_not_subscribed'] = '%s não está monitorando %s';
$lang['subscr_m_not_subscribed'] = 'Você não está monitorando nem a página atual nem o espaço de nomes.';
$lang['subscr_m_new_header'] = 'Adicionar monitoramento';
$lang['subscr_m_current_header'] = 'Monitoramentos atuais';
@@ -271,21 +269,6 @@ $lang['i_pol1'] = 'Wiki público (leitura por todos, escrita e en
$lang['i_pol2'] = 'Wiki fechado (leitura, escrita e envio de arquivos somente por usuários registrados)';
$lang['i_retry'] = 'Tentar novamente';
$lang['i_license'] = 'Por favor escolha a licença que voce deseja utilizar para seu conteúdo:';
-$lang['mu_intro'] = 'Aqui você pode enviar vários arquivos de uma só vez. Clique no botão de navegação e adicione-os à fila. Pressione Enviar quando estiver pronto.';
-$lang['mu_gridname'] = 'Nome do arquivo';
-$lang['mu_gridsize'] = 'Tamanho';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Espaço de nomes';
-$lang['mu_browse'] = 'Navegar';
-$lang['mu_toobig'] = 'muito grande';
-$lang['mu_ready'] = 'pronto para enviar';
-$lang['mu_done'] = 'completo';
-$lang['mu_fail'] = 'falhou';
-$lang['mu_authfail'] = 'a sessão expirou';
-$lang['mu_progress'] = '@PCT@% enviado';
-$lang['mu_filetypes'] = 'Tipos de arquivo permitidos';
-$lang['mu_info'] = 'arquivos enviados.';
-$lang['mu_lasterr'] = 'Erro mais recente:';
$lang['recent_global'] = 'Você está observando as alterações dentro do espaço de nomes <b>%s</b>. Também é possível ver as <a href="%s">modificações recentes no wiki inteiro</a>.';
$lang['years'] = '%d anos atrás';
$lang['months'] = '%d meses atrás';
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 3c3a8d9da..a0b0f57e8 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -45,7 +45,6 @@ $lang['btn_backtomedia'] = 'Voltar à Selecção de Media';
$lang['btn_subscribe'] = 'Subscrever Alterações';
$lang['btn_profile'] = 'Actualizar Perfil';
$lang['btn_reset'] = 'Limpar';
-$lang['btn_resendpwd'] = 'Enviar nova senha';
$lang['btn_draft'] = 'Editar rascunho';
$lang['btn_recover'] = 'Recuperar rascunho';
$lang['btn_draftdel'] = 'Apagar rascunho';
@@ -86,7 +85,6 @@ $lang['profchanged'] = 'Perfil do utilizador actualizado com sucesso.'
$lang['pwdforget'] = 'Esqueceu a sua senha? Pedir nova senha';
$lang['resendna'] = 'Este wiki não suporta reenvio de senhas.';
-$lang['resendpwd'] = 'Enviar nova senha para';
$lang['resendpwdmissing'] = 'É preciso preencher todos os campos.';
$lang['resendpwdnouser'] = 'Não foi possível encontrar este utilizador.';
$lang['resendpwdbadauth'] = 'O código de autenticação não é válido. Por favor, assegure-se de que o link de confirmação está completo.';
@@ -161,7 +159,7 @@ $lang['mediaroot'] = 'root';
$lang['mediaupload'] = 'Carregar ficheiros para o grupo actual aqui. Para criar sub-grupos: escrever o nome do sub-grupo seguido de : antes do nome do ficheiro no campo "Carregar como".';
$lang['mediaextchange'] = 'Extensão alterada de .%s para .%s!';
$lang['reference'] = 'Referências para';
-$lang['ref_inuse'] = 'O ficheiro "%s" não pode ser removido, porque está ainda a ser usado nestes documentos:';
+$lang['ref_inuse'] = 'O ficheiro não pode ser removido, porque está ainda a ser usado nestes documentos:';
$lang['ref_hidden'] = 'Algumas referências estão em documentos para os quais não tem permissão para ler';
$lang['hits'] = 'Resultados';
$lang['quickhits'] = 'Documentos encontrados';
@@ -278,21 +276,6 @@ $lang['i_pol1'] = 'Wiki Público (ler para todos, escrever e carr
$lang['i_pol2'] = 'Wiki Fechado (ler, escrever e carregar somente para utilizadores inscritos)';
$lang['i_retry'] = 'Repetir';
$lang['i_license'] = 'Por favor escolha a licença sob a qual quer colocar o seu conteúdo:';
-$lang['mu_intro'] = 'Aqui podes enviar múltiplos ficheiros de uma vez. Clique no botão de navegação para adicioná-los na fila. Premir upload quando pronto.';
-$lang['mu_gridname'] = 'Nome do ficheiro';
-$lang['mu_gridsize'] = 'Tamanho';
-$lang['mu_gridstat'] = 'Estado';
-$lang['mu_namespace'] = 'Espaço de Nomes';
-$lang['mu_browse'] = 'Navegar';
-$lang['mu_toobig'] = 'demasiado grande';
-$lang['mu_ready'] = 'pronto para upload';
-$lang['mu_done'] = 'completo';
-$lang['mu_fail'] = 'falhou';
-$lang['mu_authfail'] = 'sessão expirada';
-$lang['mu_progress'] = '@PCT@% transferido';
-$lang['mu_filetypes'] = 'Tipos de Ficheiros Permitidos';
-$lang['mu_info'] = 'Ficheiros carregados.';
-$lang['mu_lasterr'] = 'Último erro:';
$lang['recent_global'] = 'Você está a observar as alterações dentro do espaço de nomes <b>%s</b>. Também é possível ver as <a href="%s">modificações recentes no wiki inteiro</a>.';
$lang['years'] = '%d anos atrás';
$lang['months'] = '%d meses atrás';
diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php
index 91f8ebb97..41727e521 100644
--- a/inc/lang/ro/lang.php
+++ b/inc/lang/ro/lang.php
@@ -8,6 +8,8 @@
* @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
* @author Emanuel-Emeric Andraşi <em.andrasi@mandrivausers.ro>
* @author Marius OLAR <olarmariusalex@gmail.com>
+ * @author Marius Olar <olarmariusalex@yahoo.com>
+ * @author Emanuel-Emeric Andrași <em.andrasi@mandrivausers.ro>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -43,7 +45,7 @@ $lang['btn_backtomedia'] = 'Înapoi la Selecţia Mediafile';
$lang['btn_subscribe'] = 'Subscrie Modificarea Paginii';
$lang['btn_profile'] = 'Actualizează Profil';
$lang['btn_reset'] = 'Resetează';
-$lang['btn_resendpwd'] = 'Trimite parola nouă';
+$lang['btn_resendpwd'] = 'Setează o parolă nouă';
$lang['btn_draft'] = 'Editează schiţă';
$lang['btn_recover'] = 'Recuperează schiţă';
$lang['btn_draftdel'] = 'Şterge schiţă';
@@ -80,7 +82,7 @@ $lang['profnoempty'] = 'Nu sunt admise numele sau adresa de email neco
$lang['profchanged'] = 'Profilul de utilizator a fost actualizat succes.';
$lang['pwdforget'] = 'Parola uitată? Luaţi una nouă';
$lang['resendna'] = 'Această wiki nu suportă retrimiterea parolei.';
-$lang['resendpwd'] = 'Trimite parola nouă pentru';
+$lang['resendpwd'] = 'Setează o parolă nouă pentru';
$lang['resendpwdmissing'] = 'Ne pare rău, trebuie completate toate câmpurile.';
$lang['resendpwdnouser'] = 'Ne pare rău, acest utilizator nu poate fi găsit în baza de date.';
$lang['resendpwdbadauth'] = 'Ne pare rău, acest cod de autorizare nu este corect. Verificaţi dacă aţi folosit tot link-ul de confirmare.';
@@ -187,6 +189,11 @@ $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.';
$lang['download'] = 'Bloc descărcări';
+$lang['tools'] = 'Unelte';
+$lang['user_tools'] = 'Unelte utilizator';
+$lang['site_tools'] = 'Unelte Site';
+$lang['page_tools'] = 'Unelte Pagină';
+$lang['skip_to_content'] = 'sari la conținut';
$lang['mail_newpage'] = 'pagina adăugată:';
$lang['mail_changed'] = 'page schimbată:';
$lang['mail_subscribe_list'] = 'pagini modificate în spaţiul de nume:';
@@ -257,6 +264,7 @@ $lang['subscr_style_digest'] = 'digerează email la schimbări pentru fiecare
$lang['subscr_style_list'] = 'lista paginilor schimbate de la ultimul email (la fiecare %.2f zile)';
$lang['authmodfailed'] = 'Configuraţia autentificării utilizatorului este eronată. Anunţaţi Wiki Admin-ul.';
$lang['authtempfail'] = 'Autentificarea utilizatorului este temporar indisponibilă. Anunţaţi Wiki Admin-ul.';
+$lang['authpwdexpire'] = 'Parola vă va expira în %d zile, ar trebui să o schimbați curând.';
$lang['i_chooselang'] = 'Alegeţi limba';
$lang['i_installer'] = 'DokuWiki Installer';
$lang['i_wikiname'] = 'Numele Wiki';
@@ -280,21 +288,6 @@ $lang['i_pol1'] = 'Wiki Deschisă (citeste oricine, scrie şi în
$lang['i_pol2'] = 'Wiki Închisă (citeşte, scrie şi încarcă doar utilizatorul înregistrat)';
$lang['i_retry'] = 'Încearcă din nou';
$lang['i_license'] = 'Vă rugăm alegeţi licenţa sub care doriţi să vă licenţiaţi materialul:';
-$lang['mu_intro'] = 'Aici poţi încărca mai multe fişiere simultan. Apasă butonul Răsfoieşte pentru a le adăuga. Apasă Încarcă când ai terminat.';
-$lang['mu_gridname'] = 'Numele fişierului';
-$lang['mu_gridsize'] = 'Mărime';
-$lang['mu_gridstat'] = 'Stare';
-$lang['mu_namespace'] = 'Spaţiu de nume';
-$lang['mu_browse'] = 'Răsfoieşte';
-$lang['mu_toobig'] = 'prea mare';
-$lang['mu_ready'] = 'pregătit pentru încărcare';
-$lang['mu_done'] = 'complet';
-$lang['mu_fail'] = 'eşuat';
-$lang['mu_authfail'] = 'sesiunea a expirat';
-$lang['mu_progress'] = '@PCT@% încărcat';
-$lang['mu_filetypes'] = 'Tipuri de fişiere permise';
-$lang['mu_info'] = 'fişiere încărcate';
-$lang['mu_lasterr'] = 'Ultima eroare:';
$lang['recent_global'] = 'Acum vizualizaţi modificările în interiorul numelui de spaţiu <b>%s</b>. De asemenea puteţi <a href="%s">vizualiza modificările recente ale întregului wiki</a>.';
$lang['years'] = 'acum %d ani';
$lang['months'] = 'acum %d luni';
diff --git a/inc/lang/ro/resetpwd.txt b/inc/lang/ro/resetpwd.txt
new file mode 100644
index 000000000..2eb8052f1
--- /dev/null
+++ b/inc/lang/ro/resetpwd.txt
@@ -0,0 +1,3 @@
+====== Setează parolă nouă ======
+
+Vă rugăm să introduceți o nouă parolă pentru contul dvs. pe acest wiki. \ No newline at end of file
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index eda838451..94af441b7 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -19,15 +19,15 @@
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
* @author Ladyko Andrey <fylh@succexy.spb.ru>
* @author Eugene <windy.wanderer@gmail.com>
+ * @author Johnny Utah <pcpa@cyberpunk.su>
*/
$lang['encoding'] = ' utf-8';
$lang['direction'] = 'ltr';
-$lang['doublequoteopening'] = '«'; //&ldquo;
-$lang['doublequoteclosing'] = '»'; //&rdquo;
-$lang['singlequoteopening'] = '„'; //&lsquo;
-$lang['singlequoteclosing'] = '“'; //&rsquo;
-$lang['apostrophe'] = '’'; //&rsquo;
-
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
+$lang['singlequoteopening'] = '„';
+$lang['singlequoteclosing'] = '“';
+$lang['apostrophe'] = '’';
$lang['btn_edit'] = 'Править страницу';
$lang['btn_source'] = 'Показать исходный текст';
$lang['btn_show'] = 'Показать страницу';
@@ -55,7 +55,6 @@ $lang['btn_backtomedia'] = 'Вернуться к выбору медиа
$lang['btn_subscribe'] = 'Подписаться (все правки)';
$lang['btn_profile'] = 'Профиль';
$lang['btn_reset'] = 'Сброс';
-$lang['btn_resendpwd'] = 'Выслать новый пароль';
$lang['btn_draft'] = 'Править черновик';
$lang['btn_recover'] = 'Восстановить черновик';
$lang['btn_draftdel'] = 'Удалить черновик';
@@ -63,7 +62,6 @@ $lang['btn_revert'] = 'Восстановить';
$lang['btn_register'] = 'Зарегистрироваться';
$lang['btn_apply'] = 'Применить';
$lang['btn_media'] = 'Media Manager';
-
$lang['loggedinas'] = 'Зашли как';
$lang['user'] = 'Логин';
$lang['pass'] = 'Пароль';
@@ -78,7 +76,6 @@ $lang['badlogin'] = 'Извините, неверное имя по
$lang['minoredit'] = 'Небольшие изменения';
$lang['draftdate'] = 'Черновик сохранён';
$lang['nosecedit'] = 'За это время страница была изменена и информация о секции устарела. Загружена полная версия страницы.';
-
$lang['regmissing'] = 'Извините, вам следует заполнить все поля.';
$lang['reguexists'] = 'Извините, пользователь с таким логином уже существует.';
$lang['regsuccess'] = 'Пользователь создан, пароль выслан на адрес электронной почты.';
@@ -88,24 +85,19 @@ $lang['regbadmail'] = 'Данный вами адрес электр
$lang['regbadpass'] = 'Два введённых пароля не идентичны. Пожалуйста, попробуйте ещё раз.';
$lang['regpwmail'] = 'Ваш пароль для системы «ДокуВики»';
$lang['reghere'] = 'У вас ещё нет аккаунта? Зарегистрируйтесь';
-
$lang['profna'] = 'Данная вики не поддерживает изменение профиля';
$lang['profnochange'] = 'Изменений не было внесено, профиль не обновлён.';
$lang['profnoempty'] = 'Логин и адрес электронной почты не могут быть пустыми.';
$lang['profchanged'] = 'Профиль пользователя успешно обновлён.';
-
$lang['pwdforget'] = 'Забыли пароль? Получите новый';
$lang['resendna'] = 'Данная вики не поддерживает повторную отправку пароля.';
-$lang['resendpwd'] = 'Выслать пароль для';
$lang['resendpwdmissing'] = 'Вы должны заполнить все поля формы.';
$lang['resendpwdnouser'] = 'Пользователь с таким логином не обнаружен в нашей базе данных.';
$lang['resendpwdbadauth'] = 'Извините, неверный код авторизации. Убедитесь, что вы полностью скопировали ссылку. ';
$lang['resendpwdconfirm'] = 'Ссылка для подтверждения пароля была выслана по электронной почте. ';
$lang['resendpwdsuccess'] = 'Ваш новый пароль был выслан по электронной почте.';
-
$lang['license'] = 'За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:';
$lang['licenseok'] = 'Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии:';
-
$lang['searchmedia'] = 'Поиск по имени файла:';
$lang['searchmedia_in'] = 'Поиск в %s';
$lang['txt_upload'] = 'Выберите файл для загрузки';
@@ -113,7 +105,7 @@ $lang['txt_filename'] = 'Введите имя файла в вики (
$lang['txt_overwrt'] = 'Перезаписать существующий файл';
$lang['lockedby'] = 'В данный момент заблокирован';
$lang['lockexpire'] = 'Блокировка истекает в';
-$lang['js']['willexpire'] = 'Ваша блокировка редактирования этой страницы истекает в течение минуты.\nЧтобы избежать конфликтов и сбросить таймер блокировки, нажмите кнопку просмотра.';
+$lang['js']['willexpire'] = 'Ваша блокировка этой страницы на редактирование истекает в течении минуты.\nЧтобы предотвратить конфликты используйте кнопку "Просмотр" для сброса таймера блокировки.';
$lang['js']['notsavedyet'] = 'Несохранённые изменения будут потеряны. Вы действительно хотите продолжить?';
$lang['js']['searchmedia'] = 'Поиск файлов';
$lang['js']['keepopen'] = 'Не закрывать окно после выбора';
@@ -143,22 +135,19 @@ $lang['js']['nosmblinks'] = 'Ссылка на сетевые катало
$lang['js']['linkwiz'] = 'Мастер ссылок';
$lang['js']['linkto'] = 'Ссылка на:';
$lang['js']['del_confirm'] = 'Вы на самом деле желаете удалить выбранное?';
-$lang['js']['willexpire'] = 'Ваша блокировка этой страницы на редактирование истекает в течении минуты.\nЧтобы предотвратить конфликты используйте кнопку "Просмотр" для сброса таймера блокировки.';
-$lang['js']['restore_confirm'] = 'Действительно восстановить эту версию?';
-$lang['js']['media_diff'] = 'Просмотр отличий:';
-$lang['js']['media_diff_both'] = 'Рядом';
-$lang['js']['media_diff_opacity'] = 'Наложением';
+$lang['js']['restore_confirm'] = 'Действительно восстановить эту версию?';
+$lang['js']['media_diff'] = 'Просмотр отличий:';
+$lang['js']['media_diff_both'] = 'Рядом';
+$lang['js']['media_diff_opacity'] = 'Наложением';
$lang['js']['media_diff_portions'] = 'Частями';
-$lang['js']['media_select'] = 'Выбрать файлы…';
-$lang['js']['media_upload_btn'] = 'Загрузить';
-$lang['js']['media_done_btn'] = 'Готово';
-$lang['js']['media_drop'] = 'Переместите файлы сюда для загрузки';
-$lang['js']['media_cancel'] = 'отменить';
-$lang['js']['media_overwrt'] = 'Перезаписать существующие файлы';
-
+$lang['js']['media_select'] = 'Выбрать файлы…';
+$lang['js']['media_upload_btn'] = 'Загрузить';
+$lang['js']['media_done_btn'] = 'Готово';
+$lang['js']['media_drop'] = 'Переместите файлы сюда для загрузки';
+$lang['js']['media_cancel'] = 'отменить';
+$lang['js']['media_overwrt'] = 'Перезаписать существующие файлы';
$lang['rssfailed'] = 'Произошла ошибка при получении следующей новостной ленты: ';
$lang['nothingfound'] = 'Ничего не найдено.';
-
$lang['mediaselect'] = 'Выбор медиафайла';
$lang['fileupload'] = 'Загрузка медиафайла';
$lang['uploadsucc'] = 'Загрузка произведена успешно';
@@ -183,7 +172,6 @@ $lang['mediaextchange'] = 'Расширение изменилось: с
$lang['reference'] = 'Ссылки для';
$lang['ref_inuse'] = 'Этот файл не может быть удалён, так как он используется на следующих страницах:';
$lang['ref_hidden'] = 'Некоторые ссылки находятся на страницах, на чтение которых у вас нет прав доступа';
-
$lang['hits'] = 'соответствий';
$lang['quickhits'] = 'Соответствия в названиях страниц';
$lang['toc'] = 'Содержание';
@@ -207,18 +195,20 @@ $lang['external_edit'] = 'внешнее изменение';
$lang['summary'] = 'Сводка изменений';
$lang['noflash'] = 'Для просмотра этого содержимого требуется <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
$lang['download'] = 'Скачать код';
-
+$lang['tools'] = 'Инструменты';
+$lang['user_tools'] = 'Инструменты пользователя';
+$lang['site_tools'] = 'Инструменты сайта';
+$lang['page_tools'] = 'Инструменты страницы';
+$lang['skip_to_content'] = 'Перейти к содержанию';
$lang['mail_newpage'] = 'страница добавлена:';
$lang['mail_changed'] = 'страница изменена:';
$lang['mail_subscribe_list'] = 'изменились страницы в пространстве имён:';
$lang['mail_new_user'] = 'новый пользователь:';
$lang['mail_upload'] = 'файл закачан:';
-
$lang['changes_type'] = 'Посмотреть изменения';
$lang['pages_changes'] = 'Страниц';
$lang['media_changes'] = 'Медиа файлов';
$lang['both_changes'] = 'И страниц и медиа файлов';
-
$lang['qb_bold'] = 'Полужирный';
$lang['qb_italic'] = 'Курсив';
$lang['qb_underl'] = 'Подчёркнутый';
@@ -243,11 +233,8 @@ $lang['qb_media'] = 'Добавить изображения или
$lang['qb_sig'] = 'Вставить подпись';
$lang['qb_smileys'] = 'Смайлики';
$lang['qb_chars'] = 'Специальные символы';
-
$lang['upperns'] = 'Перейти в родительское пространство имён';
-
$lang['admin_register'] = 'Добавить пользователя';
-
$lang['metaedit'] = 'Править метаданные';
$lang['metasaveerr'] = 'Ошибка записи метаданных';
$lang['metasaveok'] = 'Метаданные сохранены';
@@ -265,30 +252,24 @@ $lang['img_keywords'] = 'Ключевые слова';
$lang['img_width'] = 'Ширина';
$lang['img_height'] = 'Высота';
$lang['img_manager'] = 'Просмотр в media manager';
-
-$lang['subscr_subscribe_success'] = 'Добавлен %s в подписку на %s';
-$lang['subscr_subscribe_error'] = 'Невозможно добавить %s в подписку на %s';
+$lang['subscr_subscribe_success'] = 'Добавлен %s в подписку на %s';
+$lang['subscr_subscribe_error'] = 'Невозможно добавить %s в подписку на %s';
$lang['subscr_subscribe_noaddress'] = 'Нет адреса электронной почты, сопоставленного с вашей учётной записью. Вы не можете подписаться на рассылку';
$lang['subscr_unsubscribe_success'] = 'Удалён %s из подписки на %s';
-$lang['subscr_unsubscribe_error'] = 'Ошибка удаления %s из подписки на %s';
-$lang['subscr_already_subscribed'] = '%s уже подписан на %s';
-$lang['subscr_not_subscribed'] = '%s не подписан на %s';
-// Manage page for subscriptions
-$lang['subscr_m_not_subscribed'] = 'Вы не подписаны на текущую страницу или пространство имён.';
-$lang['subscr_m_new_header'] = 'Добавить подписку';
-$lang['subscr_m_current_header'] = 'Текущие подписки';
-$lang['subscr_m_unsubscribe'] = 'Отменить подписку';
-$lang['subscr_m_subscribe'] = 'Подписаться';
-$lang['subscr_m_receive'] = 'Получить';
-$lang['subscr_style_every'] = 'уведомлять о каждом изменении';
-$lang['subscr_style_digest'] = 'сводка изменений по каждой странице';
-$lang['subscr_style_list'] = 'перечислять изменившиеся страницы с прошлого уведомления';
-
-/* auth.class language support */
+$lang['subscr_unsubscribe_error'] = 'Ошибка удаления %s из подписки на %s';
+$lang['subscr_already_subscribed'] = '%s уже подписан на %s';
+$lang['subscr_not_subscribed'] = '%s не подписан на %s';
+$lang['subscr_m_not_subscribed'] = 'Вы не подписаны на текущую страницу или пространство имён.';
+$lang['subscr_m_new_header'] = 'Добавить подписку';
+$lang['subscr_m_current_header'] = 'Текущие подписки';
+$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'] = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом своему администратору вики.';
-
-/* installer strings */
$lang['i_chooselang'] = 'Выберите свой язык/Choose your language';
$lang['i_installer'] = 'Установка «ДокуВики»';
$lang['i_wikiname'] = 'Название вики';
@@ -314,23 +295,6 @@ $lang['i_pol1'] = 'Общедоступная вики (чтен
$lang['i_pol2'] = 'Закрытая вики (чтение, запись и загрузка файлов только для зарегистрированных пользователей)';
$lang['i_retry'] = 'Повторить попытку';
$lang['i_license'] = 'Пожалуйста, выберите тип лицензии для своей вики:';
-
-$lang['mu_intro'] = 'Здесь вы можете загрузить несколько файлов сразу. Кликните на «обзор», чтобы добавить их в список. Нажмите «загрузить», когда будете готовы.';
-$lang['mu_gridname'] = 'Имя файла';
-$lang['mu_gridsize'] = 'Размер';
-$lang['mu_gridstat'] = 'Статус';
-$lang['mu_namespace'] = 'Пространство имён';
-$lang['mu_browse'] = 'Обзор';
-$lang['mu_toobig'] = 'слишком большой';
-$lang['mu_ready'] = 'готово к загрузке';
-$lang['mu_done'] = 'завершено';
-$lang['mu_fail'] = 'провалено';
-$lang['mu_authfail'] = 'истекло время сессии';
-$lang['mu_progress'] = '@PCT@% загружено';
-$lang['mu_filetypes'] = 'Допустимые типы файлов';
-$lang['mu_info'] = 'файлов загружено.';
-$lang['mu_lasterr'] = 'Последняя ошибка:';
-
$lang['recent_global'] = 'Вы просматриваете изменения в пространстве имён <b>%s</b>. Вы можете также <a href="%s">просмотреть недавние изменения во всей вики</a>.';
$lang['years'] = '%d лет назад';
$lang['months'] = '%d месяц(ев) назад';
@@ -339,24 +303,29 @@ $lang['days'] = '%d дней назад';
$lang['hours'] = '%d час(ов) назад';
$lang['minutes'] = '%d минут назад';
$lang['seconds'] = '%d секунд назад';
-
$lang['wordblock'] = 'Ваши изменения не сохранены, поскольку они содержат блокируемые слова (спам).';
-
$lang['media_uploadtab'] = 'Загрузка';
$lang['media_searchtab'] = 'Поиск';
+$lang['media_file'] = 'Файл';
$lang['media_viewtab'] = 'Просмотр';
$lang['media_edittab'] = 'Правка';
$lang['media_historytab'] = 'История';
+$lang['media_list_thumbs'] = 'Миниатюры';
+$lang['media_list_rows'] = 'Строки';
$lang['media_sort_name'] = 'Сортировка по имени';
$lang['media_sort_date'] = 'Сортировка по дате';
+$lang['media_namespaces'] = 'Выберите каталог';
+$lang['media_files'] = 'Файлы в %s';
$lang['media_upload'] = 'Загрузка в пространство имён <strong>%s</strong>.';
$lang['media_search'] = 'Поиск в пространстве имён <strong>%s</strong>.';
$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s в %s
+';
$lang['media_edit'] = 'Правка %s';
+$lang['media_history'] = 'История %s';
$lang['media_meta_edited'] = 'метаданные изменены';
$lang['media_perm_read'] = 'Извините, у Вас недостаточно прав для чтения файлов.';
$lang['media_perm_upload'] = 'Извините, у Вас недостаточно прав для загрузки файлов.';
$lang['media_update'] = 'Загрузить новую версию';
$lang['media_restore'] = 'Восстановить эту версию';
-
-$lang['plugin_install_err'] = "Плагин установлен некорректно. Переименуйте папку плагина из '%s' в '%s'.";
+$lang['plugin_install_err'] = 'Плагин установлен некорректно. Переименуйте папку плагина из \'%s\' в \'%s\'.';
diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php
index c0d45da58..85e899b06 100644
--- a/inc/lang/sk/lang.php
+++ b/inc/lang/sk/lang.php
@@ -38,11 +38,10 @@ $lang['btn_update'] = 'Aktualizovať';
$lang['btn_delete'] = 'Zmazať';
$lang['btn_back'] = 'Späť';
$lang['btn_backlink'] = 'Spätné odkazy';
-$lang['btn_backtomedia'] = 'Späť na výber média';
+$lang['btn_backtomedia'] = 'Späť na výber súboru';
$lang['btn_subscribe'] = 'Sledovať zmeny';
$lang['btn_profile'] = 'Aktualizovať profil';
$lang['btn_reset'] = 'Zrušiť';
-$lang['btn_resendpwd'] = 'Poslať nové heslo';
$lang['btn_draft'] = 'Upraviť koncept';
$lang['btn_recover'] = 'Obnoviť koncept';
$lang['btn_draftdel'] = 'Zmazať koncept';
@@ -79,7 +78,6 @@ $lang['profnoempty'] = 'Prázdne meno alebo mailová adresa nie sú po
$lang['profchanged'] = 'Užívateľský účet úspešne zmenený.';
$lang['pwdforget'] = 'Zabudli ste heslo? Získajte nové!';
$lang['resendna'] = 'Táto wiki nepodporuje opätovné zasielanie hesla.';
-$lang['resendpwd'] = 'Pošli nové heslo pre';
$lang['resendpwdmissing'] = 'Prepáčte, musíte vyplniť všetky polia.';
$lang['resendpwdnouser'] = 'Prepáčte, nemôžeme nájsť zadaného užívateľa v databáze.';
$lang['resendpwdbadauth'] = 'Prepáčte, tento autorizačný kód nie je platný. Uistite sa, či ste použili celý autorizačný odkaz.';
@@ -139,8 +137,8 @@ $lang['js']['media_cancel'] = 'odstrániť';
$lang['js']['media_overwrt'] = 'Prepísať existujúce súbory';
$lang['rssfailed'] = 'Nastala chyba pri vytváraní tohto RSS: ';
$lang['nothingfound'] = 'Nič nenájdené.';
-$lang['mediaselect'] = 'Výber dokumentu';
-$lang['fileupload'] = 'Nahrávanie dokumentu';
+$lang['mediaselect'] = 'Výber súboru';
+$lang['fileupload'] = 'Nahrávanie súboru';
$lang['uploadsucc'] = 'Prenos prebehol v poriadku';
$lang['uploadfail'] = 'Chyba pri nahrávaní. Možno kvôli zle nastaveným právam?';
$lang['uploadwrong'] = 'Prenos súboru s takouto príponou nie je dovolený.';
@@ -193,7 +191,7 @@ $lang['mail_new_user'] = 'nový užívateľ:';
$lang['mail_upload'] = 'nahraný súbor:';
$lang['changes_type'] = 'Prehľad zmien';
$lang['pages_changes'] = 'Stránok';
-$lang['media_changes'] = 'Média súborov';
+$lang['media_changes'] = 'Súbory';
$lang['both_changes'] = 'Stránok spolu s média súbormi';
$lang['qb_bold'] = 'Tučné';
$lang['qb_italic'] = 'Kurzíva';
@@ -278,21 +276,6 @@ $lang['i_pol1'] = 'Verejná Wiki (čítanie pre každého, zápis
$lang['i_pol2'] = 'Uzatvorená Wiki (čítanie, zápis a nahrávanie len pre registrovaných užívateľov)';
$lang['i_retry'] = 'Skúsiť znovu';
$lang['i_license'] = 'Vyberte licenciu, pod ktorou chcete uložiť váš obsah:';
-$lang['mu_intro'] = 'Na tomto mieste môžete nahrávať viac súborov súčasne. Tlačidlom Prehľadávať pridáte súbory do zoznamu. Tlačidlom Nahrať vykonáte prenos súborov.';
-$lang['mu_gridname'] = 'Názov súboru';
-$lang['mu_gridsize'] = 'Veľkosť';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Menný priestor';
-$lang['mu_browse'] = 'Prehľadávať';
-$lang['mu_toobig'] = 'príliš veľký';
-$lang['mu_ready'] = 'pripravený na nahratie';
-$lang['mu_done'] = 'dokončený';
-$lang['mu_fail'] = 'neúspešný';
-$lang['mu_authfail'] = 'spojenie stratilo platnosť';
-$lang['mu_progress'] = '@PCT@% nahraných';
-$lang['mu_filetypes'] = 'Povolené typy súborov';
-$lang['mu_info'] = 'nahraných súborov.';
-$lang['mu_lasterr'] = 'Posledná chyba:';
$lang['recent_global'] = 'Práve prehliadate zmeny v mennom priestore <b>%s</b>. Môžete si tiež pozrieť <a href="%s">aktuálne zmeny celej wiki</a>.';
$lang['years'] = 'pred %d rokmi';
$lang['months'] = 'pred %d mesiacmi';
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index 9acf13504..b34ab67e4 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -43,11 +43,13 @@ $lang['btn_backtomedia'] = 'Nazaj na izbiro predstavnih datotek';
$lang['btn_subscribe'] = 'Urejanje naročnin';
$lang['btn_profile'] = 'Posodobi profil';
$lang['btn_reset'] = 'Ponastavi';
-$lang['btn_resendpwd'] = 'Pošlji novo geslo';
$lang['btn_draft'] = 'Uredi osnutek';
$lang['btn_recover'] = 'Obnovi osnutek';
$lang['btn_draftdel'] = 'Izbriši osnutek';
$lang['btn_revert'] = 'Povrni';
+$lang['btn_register'] = 'Prijava';
+$lang['btn_apply'] = 'Uveljavi';
+$lang['btn_media'] = 'Urejevalnik predstavnih vsebin';
$lang['loggedinas'] = 'Prijava kot';
$lang['user'] = 'Uporabniško ime';
$lang['pass'] = 'Geslo';
@@ -57,7 +59,6 @@ $lang['passchk'] = 'Ponovi novo geslo';
$lang['remember'] = 'Zapomni si me';
$lang['fullname'] = 'Pravo ime';
$lang['email'] = 'Elektronski naslov';
-$lang['register'] = 'Vpis računa';
$lang['profile'] = 'Uporabniški profil';
$lang['badlogin'] = 'Uporabniško ime ali geslo je napačno.';
$lang['minoredit'] = 'Manjše spremembe';
@@ -72,13 +73,12 @@ $lang['regbadmail'] = 'Videti je, da je naveden elektronski naslov ne
$lang['regbadpass'] = 'Gesli nista enaki. Poskusite znova.';
$lang['regpwmail'] = 'Geslo za DokuWiki';
$lang['reghere'] = 'Nimate še računa? Vpišite se za nov račun.';
-$lang['profna'] = 'Wiki ne podpira spreminjanja profila.';
+$lang['profna'] = 'DokuWiki ne podpira spreminjanja profila.';
$lang['profnochange'] = 'Brez sprememb.';
$lang['profnoempty'] = 'Prazno polje elektronskega naslova ali imena ni dovoljeno.';
$lang['profchanged'] = 'Uporabniški profil je uspešno posodobljen.';
$lang['pwdforget'] = 'Ali ste pozabili geslo? Pridobite si novo geslo.';
-$lang['resendna'] = 'Wiki ne podpira možnosti ponovnega pošiljanja gesel.';
-$lang['resendpwd'] = 'Pošlji novo geslo za';
+$lang['resendna'] = 'DokuWiki ne podpira možnosti ponovnega pošiljanja gesel.';
$lang['resendpwdmissing'] = 'Izpolniti je treba vsa polja.';
$lang['resendpwdnouser'] = 'Podanega uporabniškega imena v podatkovni zbirki ni mogoče najti.';
$lang['resendpwdbadauth'] = 'Koda za overitev ni prava. Prepričajte se, da ste uporabili celotno povezavo za potrditev.';
@@ -93,7 +93,7 @@ $lang['txt_filename'] = 'Pošlji z imenom (izborno)';
$lang['txt_overwrt'] = 'Prepiši obstoječo datoteko';
$lang['lockedby'] = 'Trenutno je zaklenjeno s strani';
$lang['lockexpire'] = 'Zaklep preteče ob';
-$lang['js']['willexpire'] = 'Zaklep za urejevanje bo pretekel čez eno minuto.\nV izogib sporom, uporabite predogled, da se merilnik časa za zaklep ponastavi.';
+$lang['js']['willexpire'] = 'Zaklep za urejevanje bo pretekel čez eno minuto.\nV izogib sporom, uporabite predogled, da se merilnik časa za zaklep ponastavi.';
$lang['js']['notsavedyet'] = 'Neshranjene spremembe bodo izgubljene.';
$lang['js']['searchmedia'] = 'Poišči datoteke';
$lang['js']['keepopen'] = 'Od izbiri ohrani okno odprto';
@@ -123,6 +123,16 @@ $lang['js']['nosmblinks'] = 'Povezovanje do souporabnih datotek sistema Win
$lang['js']['linkwiz'] = 'Čarovnik za povezave';
$lang['js']['linkto'] = 'Poveži na:';
$lang['js']['del_confirm'] = 'Ali naj se res izbrišejo izbrani predmeti?';
+$lang['js']['restore_confirm'] = 'Ali naj se koda obnovi na to različico?';
+$lang['js']['media_diff'] = 'Razlike:';
+$lang['js']['media_diff_both'] = 'Eno ob drugem';
+$lang['js']['media_diff_opacity'] = 'Prosojno';
+$lang['js']['media_select'] = 'Izbor datotek ...';
+$lang['js']['media_upload_btn'] = 'Naloži';
+$lang['js']['media_done_btn'] = 'Končano';
+$lang['js']['media_drop'] = 'Spusti datoteke za nalaganje.';
+$lang['js']['media_cancel'] = 'odstrani';
+$lang['js']['media_overwrt'] = 'Prepiši obstoječe datoteke';
$lang['rssfailed'] = 'Prišlo je do napake med pridobivanjem vira: ';
$lang['nothingfound'] = 'Ni najdenih predmetov.';
$lang['mediaselect'] = 'Predstavne datoteke';
@@ -157,6 +167,9 @@ $lang['yours'] = 'Vaša različica';
$lang['diff'] = 'Pokaži razlike s trenutno različico';
$lang['diff2'] = 'Pokaži razlike med izbranimi različicami.';
$lang['difflink'] = 'Poveži s tem pogledom primerjave.';
+$lang['diff_type'] = 'Razlike:';
+$lang['diff_inline'] = 'V besedilu';
+$lang['diff_side'] = 'Eno ob drugem';
$lang['line'] = 'Vrstica';
$lang['breadcrumb'] = 'Sled';
$lang['youarehere'] = 'Trenutno dejavna stran';
@@ -169,11 +182,20 @@ $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>';
$lang['download'] = 'Naloži izrezek';
+$lang['tools'] = 'Orodja';
+$lang['user_tools'] = 'Uporabniška orodja';
+$lang['site_tools'] = 'Orodja spletišča';
+$lang['page_tools'] = 'Orodja strani';
+$lang['skip_to_content'] = 'preskoči na vsebino';
$lang['mail_newpage'] = '[DokuWiki] stran dodana:';
$lang['mail_changed'] = '[DokuWiki] stran spremenjena:';
$lang['mail_subscribe_list'] = 'strani s spremenjenim imenom:';
$lang['mail_new_user'] = 'nov uporabnik:';
$lang['mail_upload'] = 'naložena datoteka:';
+$lang['changes_type'] = 'Poglej spremembe';
+$lang['pages_changes'] = 'Strani';
+$lang['media_changes'] = 'Predstavne datoteke';
+$lang['both_changes'] = 'Strani in predstavne datoteke';
$lang['qb_bold'] = 'Krepko besedilo';
$lang['qb_italic'] = 'Ležeče besedilo';
$lang['qb_underl'] = 'Podčrtano besedilo';
@@ -214,6 +236,9 @@ $lang['img_copyr'] = 'Avtorska pravica';
$lang['img_format'] = 'Zapis';
$lang['img_camera'] = 'Fotoaparat';
$lang['img_keywords'] = 'Ključne besede';
+$lang['img_width'] = 'Širina';
+$lang['img_height'] = 'Višina';
+$lang['img_manager'] = 'Poglej v urejevalniku predstavnih vsebin';
$lang['subscr_subscribe_success'] = 'Uporabniški račun %s je dodan na seznam naročnin na %s';
$lang['subscr_subscribe_error'] = 'Napaka med dodajanjem %s na seznam naročnin na %s';
$lang['subscr_subscribe_noaddress'] = 'S trenutnimi prijavnimi podatki ni povezanega elektronskega naslova, zato uporabniškega računa ni mogoče dodati na seznam naročnikov.';
@@ -254,21 +279,6 @@ $lang['i_pol1'] = 'Javni Wiki (branje za vse, zapis in nalaganje
$lang['i_pol2'] = 'Zaprt Wiki (berejo in urejajo lahko le prijavljeni uporabniki)';
$lang['i_retry'] = 'Ponovni poskus';
$lang['i_license'] = 'Izbor dovoljenja objave vsebine:';
-$lang['mu_intro'] = 'Naložiti je mogoče več datotek hkrati. S klikom na gumb "Prebrskaj", jih je mogoče dodati v vrsto. S klikom na povezavo "naloži" bodo datoteke poslane na strežnik.';
-$lang['mu_gridname'] = 'Ime datoteke';
-$lang['mu_gridsize'] = 'Velikost';
-$lang['mu_gridstat'] = 'Stanje';
-$lang['mu_namespace'] = 'Imenski prostor';
-$lang['mu_browse'] = 'Prebrskaj';
-$lang['mu_toobig'] = 'prevelika datoteka';
-$lang['mu_ready'] = 'pripravljena na pošiljanje';
-$lang['mu_done'] = 'končano';
-$lang['mu_fail'] = 'ni uspelo';
-$lang['mu_authfail'] = 'seja je potekla';
-$lang['mu_progress'] = '@PCT@% je poslano';
-$lang['mu_filetypes'] = 'Dovoljene vrste datotek';
-$lang['mu_info'] = 'poslanih datotek.';
-$lang['mu_lasterr'] = 'Zadnja napaka:';
$lang['recent_global'] = 'Trenutno so prikazane spremembe znotraj imenskega prostora <b>%s</b>. Mogoče si je ogledati tudi spremembe <a href="%s">celotnega sistema Wiki</a>.';
$lang['years'] = '%d let nazaj';
$lang['months'] = '%d mesecev nazaj';
@@ -278,3 +288,27 @@ $lang['hours'] = '%d ur nazaj';
$lang['minutes'] = '%d minut nazaj';
$lang['seconds'] = '%d sekund nazaj';
$lang['wordblock'] = 'Spremembe niso shranjene, ker je v vsebini navedeno neželeno besedilo (spam).';
+$lang['media_uploadtab'] = 'Naloži';
+$lang['media_searchtab'] = 'Poišči';
+$lang['media_file'] = 'Datoteka';
+$lang['media_viewtab'] = 'Pogled';
+$lang['media_edittab'] = 'Uredi';
+$lang['media_historytab'] = 'Zgodovina';
+$lang['media_list_thumbs'] = 'Sličice';
+$lang['media_list_rows'] = 'Vrstice';
+$lang['media_sort_name'] = 'Ime';
+$lang['media_sort_date'] = 'Datum';
+$lang['media_namespaces'] = 'Izbor imenskega prostora';
+$lang['media_files'] = 'Datoteke v %s';
+$lang['media_upload'] = 'Naloži v %s';
+$lang['media_search'] = 'Poišči v %s';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s pri %s';
+$lang['media_edit'] = 'Uredi %s';
+$lang['media_history'] = 'Zgodovina %s';
+$lang['media_meta_edited'] = 'metapodatki so urejeni';
+$lang['media_perm_read'] = 'Ni ustreznih dovoljenj za branje datotek.';
+$lang['media_perm_upload'] = 'Ni ustreznih dovoljenj za nalaganje datotek.';
+$lang['media_update'] = 'Naloži novo različico';
+$lang['media_restore'] = 'Obnovi to različico';
+$lang['plugin_install_err'] = 'Vstavek ni pravilno nameščen. Preimenujte mapo vstavka\'%s\' v \'%s\'.';
diff --git a/inc/lang/sl/locked.txt b/inc/lang/sl/locked.txt
index d51e940b7..cc693d3fa 100644
--- a/inc/lang/sl/locked.txt
+++ b/inc/lang/sl/locked.txt
@@ -1,3 +1,3 @@
====== Stran je zaklenjena ======
-Stran je zaklenjenjena za urejanje. Počakati je treba, da zaklep strani poteče.
+Stran je zaklenjena za urejanje. Počakati je treba, da zaklep strani poteče.
diff --git a/inc/lang/sl/stopwords.txt b/inc/lang/sl/stopwords.txt
index 5d61539e7..8eed2daa6 100644
--- a/inc/lang/sl/stopwords.txt
+++ b/inc/lang/sl/stopwords.txt
@@ -1,7 +1,7 @@
# To je seznam besed, ki jih ustvarjalnik kazala prezre. Seznam je sestavljen iz
-# besede, ki so zapisane vsaka v svoji vrstici. Datoteka mora biti zapisana s konnim
-# UNIX znakom vrstice. Besede kraje od treh znakov so iz kazala izloene samodejno
-# zaradi preglednosti. Seznam se s bo s asom spreminjal in dopolnjeval.
+# besede, ki so zapisane vsaka v svoji vrstici. Datoteka mora biti zapisana s končnim
+# UNIX znakom vrstice. Besede krajše od treh znakov so iz kazala izločene samodejno
+# zaradi preglednosti. Seznam se s bo s časom spreminjal in dopolnjeval.
moja
moje
moji
diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php
index 87d0f30b5..0e56b89d9 100644
--- a/inc/lang/sq/lang.php
+++ b/inc/lang/sq/lang.php
@@ -44,7 +44,6 @@ $lang['btn_backtomedia'] = 'Mbrapa tek Përzgjedhja e Media-ve';
$lang['btn_subscribe'] = 'Menaxho Abonimet';
$lang['btn_profile'] = 'Përditëso Profilin';
$lang['btn_reset'] = 'Rivendos';
-$lang['btn_resendpwd'] = 'Dërgo fjalëkalim të ri';
$lang['btn_draft'] = 'Redakto skicën';
$lang['btn_recover'] = 'Rekupero skicën';
$lang['btn_draftdel'] = 'Fshi skicën';
@@ -79,7 +78,6 @@ $lang['profnoempty'] = 'Një emër bosh ose adresë email-i bosh nuk l
$lang['profchanged'] = 'Profili i përdoruesit u përditësua me sukses.';
$lang['pwdforget'] = 'E harruat fjalëkalimin? Merni një të ri';
$lang['resendna'] = 'Ky wiki nuk e lejon ridërgimin e fjalëkalimeve.';
-$lang['resendpwd'] = 'Dërgo një fjalëkalim të ri për';
$lang['resendpwdmissing'] = 'Na vjen keq, duhet t\'i plotësoni të gjitha fushat.';
$lang['resendpwdnouser'] = 'Na vjen keq, nuk mund ta gjejmë këtë përdorues në bazën tonë të të dhënave.';
$lang['resendpwdbadauth'] = 'Na vjen keq, ky kod autorizimi nuk është i vlefshëm. Sigurohuni që përdoret linkun e plotë të konfirmimit.';
@@ -232,21 +230,6 @@ $lang['i_pol0'] = 'Wiki i Hapur (lexim, shkrim, ngarkim për këd
$lang['i_pol1'] = 'Wiki Publike (lexim për këdo, shkrim dhe ngarkim për përdoruesit e regjistruar)';
$lang['i_pol2'] = 'Wiki e Mbyllur (lexim, shkrim, ngarkim vetëm për përdoruesit e regjistruar)';
$lang['i_retry'] = 'Provo Përsëri';
-$lang['mu_intro'] = 'Këtu mund të ngarkoni disa skedarë njëkohësisht. Klikoni butonin e shfletuesit për t\'i shtuar ata në radhë. Klikoni Ngarko kur të keni mbaruar.';
-$lang['mu_gridname'] = 'Emri Skedari';
-$lang['mu_gridsize'] = 'Madhësia';
-$lang['mu_gridstat'] = 'Statusi';
-$lang['mu_namespace'] = 'Hapësira Emrit';
-$lang['mu_browse'] = 'Shfleto';
-$lang['mu_toobig'] = 'shumë i/e madhe';
-$lang['mu_ready'] = 'gati për ngarkim';
-$lang['mu_done'] = 'përfundoi';
-$lang['mu_fail'] = 'dështoi';
-$lang['mu_authfail'] = 'sesioni skadoi';
-$lang['mu_progress'] = '@PCT@% u ngarkua';
-$lang['mu_filetypes'] = 'Tipet e Skedarëve të Lejuar';
-$lang['mu_info'] = 'skedarët e ngarkuar';
-$lang['mu_lasterr'] = 'Gabimi i fundit:';
$lang['recent_global'] = 'Momentalisht jeni duke parë ndryshimet brenda hapësirës së emrit <b>%s</b>. Gjithashtu mund <a href="%s">të shihni ndryshimet më të fundit në të gjithë wiki-n</a>.';
$lang['years'] = '%d vite më parë';
$lang['months'] = '%d muaj më parë';
diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php
index 22bcf4e33..a53f14ac9 100644
--- a/inc/lang/sr/lang.php
+++ b/inc/lang/sr/lang.php
@@ -41,7 +41,6 @@ $lang['btn_backtomedia'] = 'Врати се на избор медијск
$lang['btn_subscribe'] = 'Пријави се на измене';
$lang['btn_profile'] = 'Ажурирај профил';
$lang['btn_reset'] = 'Поништи';
-$lang['btn_resendpwd'] = 'Пошаљи нову лозинку';
$lang['btn_draft'] = 'Измени нацрт';
$lang['btn_recover'] = 'Опорави нацрт';
$lang['btn_draftdel'] = 'Обриши нацрт';
@@ -76,7 +75,6 @@ $lang['profnoempty'] = 'Није дозвољено оставити
$lang['profchanged'] = 'Кориснички профил је ажуриран.';
$lang['pwdforget'] = 'Заборавили сте лозинку? Направите нову';
$lang['resendna'] = 'Овај вики не дозвољава слање лозинки.';
-$lang['resendpwd'] = 'Пошаљи нову лозинку за';
$lang['resendpwdmissing'] = 'Жао ми је, сва поља морају бити попуњена.';
$lang['resendpwdnouser'] = 'Жао ми је, овај корисник не постоји у нашој бази.';
$lang['resendpwdbadauth'] = 'Жао ми је, потврдни код није исправан. Проверите да ли сте користили комплетан потврдни линк.';
@@ -254,21 +252,6 @@ $lang['i_pol1'] = 'Јавни вики (читање за све,
$lang['i_pol2'] = 'Затворени вики (читање, писање и слање датотека само за регистроване кориснике)';
$lang['i_retry'] = 'Понови';
$lang['i_license'] = 'Молимо вас, одаберите лиценцу под коју желите да ставите свој садржај:';
-$lang['mu_intro'] = 'Одавде можете послати више датотека одједном. Кликните на дугме Тражи да бисте додали датотеке на листу. Када завршите са одабирањем кликните на Пошаљи.';
-$lang['mu_gridname'] = 'Назив датотеке';
-$lang['mu_gridsize'] = 'Величина';
-$lang['mu_gridstat'] = 'Статус';
-$lang['mu_namespace'] = 'Именски простор';
-$lang['mu_browse'] = 'Тражи';
-$lang['mu_toobig'] = 'превелико';
-$lang['mu_ready'] = 'спремно за слање';
-$lang['mu_done'] = 'завршено';
-$lang['mu_fail'] = 'није успело';
-$lang['mu_authfail'] = 'сесија је истекла';
-$lang['mu_progress'] = '@PCT@% послато';
-$lang['mu_filetypes'] = 'Дозвољени типови датотека';
-$lang['mu_info'] = 'Фајлови послати';
-$lang['mu_lasterr'] = 'Последња грешка:';
$lang['recent_global'] = 'Тренутно пратите промене у именском простору <b>%s</b>. Такође, можете пратити <a href="%s">прмене на целом викију</a>.';
$lang['years'] = 'Пре %d година';
$lang['months'] = 'Пре %d месеци';
diff --git a/inc/lang/sv/lang.php b/inc/lang/sv/lang.php
index 943509fed..0c8f3276d 100644
--- a/inc/lang/sv/lang.php
+++ b/inc/lang/sv/lang.php
@@ -52,7 +52,6 @@ $lang['btn_backtomedia'] = 'Tillbaka till val av Mediafil';
$lang['btn_subscribe'] = 'Prenumerera på ändringar';
$lang['btn_profile'] = 'Uppdatera profil';
$lang['btn_reset'] = 'Återställ';
-$lang['btn_resendpwd'] = 'Skicka nytt lösenord';
$lang['btn_draft'] = 'Redigera utkast';
$lang['btn_recover'] = 'Återskapa utkast';
$lang['btn_draftdel'] = 'Radera utkast';
@@ -87,7 +86,6 @@ $lang['profnoempty'] = 'Namn och e-postadress måste fyllas i.';
$lang['profchanged'] = 'Användarprofilen uppdaterad.';
$lang['pwdforget'] = 'Glömt ditt lösenord? Ordna ett nytt';
$lang['resendna'] = 'Den här wikin stödjer inte utskick av lösenord.';
-$lang['resendpwd'] = 'Skicka nytt lösenord för';
$lang['resendpwdmissing'] = 'Du måste fylla i alla fält.';
$lang['resendpwdnouser'] = 'Den här användaren hittas inte i databasen.';
$lang['resendpwdbadauth'] = 'Den här verifieringskoden är inte giltig. Kontrollera att du använde hela verifieringslänken.';
@@ -256,21 +254,6 @@ $lang['i_pol0'] = 'Öppen wiki (alla får läsa, skriva och ladda
$lang['i_pol1'] = 'Publik wiki (alla får läsa, registrerade användare för skriva och ladda upp filer)';
$lang['i_pol2'] = 'Sluten wiki (endast registrerade användare får läsa, skriva och ladda upp filer)';
$lang['i_retry'] = 'Försök igen';
-$lang['mu_intro'] = 'Här kan du ladda upp flera filer på en gång. Klicka på bläddra-knappen för att lägga till dem i kön. Tryck på ladda upp när du är klar.';
-$lang['mu_gridname'] = 'Filnamn';
-$lang['mu_gridsize'] = 'Storlek';
-$lang['mu_gridstat'] = 'Status';
-$lang['mu_namespace'] = 'Namnrymd';
-$lang['mu_browse'] = 'Bläddra';
-$lang['mu_toobig'] = 'för stor';
-$lang['mu_ready'] = 'redo att ladda upp';
-$lang['mu_done'] = 'komplett';
-$lang['mu_fail'] = 'misslyckades';
-$lang['mu_authfail'] = 'sessionen över tid';
-$lang['mu_progress'] = '@PCT@% uppladdade';
-$lang['mu_filetypes'] = 'Tillåtna filtyper';
-$lang['mu_info'] = 'filerna uppladdade.';
-$lang['mu_lasterr'] = 'Senaste fel:';
$lang['recent_global'] = 'Du bevakar ändringar i namnrymden <b>%s</b>. Du kan också titta på <a href="%s">senaste ändringar för hela wikin</a>.';
$lang['years'] = '%d år sedan';
$lang['months'] = '%d månader sedan';
diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php
index 0d0613961..c9d526436 100644
--- a/inc/lang/th/lang.php
+++ b/inc/lang/th/lang.php
@@ -48,7 +48,6 @@ $lang['btn_subscribe'] = 'เฝ้าดู';
$lang['btn_unsubscribe'] = 'เลิกเฝ้าดู';
$lang['btn_profile'] = 'แก้ข้อมูลผู้ใช้';
$lang['btn_reset'] = 'เริ่มใหม่';
-$lang['btn_resendpwd'] = 'ลืมรหัส ส่งให้ใหม่ทางอีเมล';
$lang['btn_draft'] = 'แก้ไขเอกสารฉบับร่าง';
$lang['btn_recover'] = 'กู้คืนเอกสารฉบับร่าง';
$lang['btn_draftdel'] = 'ลบเอกสารฉบับร่าง';
@@ -83,7 +82,6 @@ $lang['profnoempty'] = 'ไม่อนุญาติให้เว
$lang['profchanged'] = 'ปรับปรุงข้อมูลส่วนตัวผู้ใช้สำเร็จ';
$lang['pwdforget'] = 'ลืมรหัสผ่านหรือ? เอาอันใหม่สิ';
$lang['resendna'] = 'วิกินี้ไม่รองรับการส่งรหัสผ่านซ้ำ';
-$lang['resendpwd'] = 'ส่งรหัสผ่านใหม่ให้กับ';
$lang['resendpwdmissing'] = 'ขออภัย, คุณต้องกรอกทุกช่อง';
$lang['resendpwdnouser'] = 'ขออภัย, เราไม่พบผู้ใช้คนนี้ในฐานข้อมูลของเรา';
$lang['resendpwdbadauth'] = 'ขออภัย, รหัสนี้ยังใช้ไม่ได้ กรุณาตรวจสอบว่าคุณกดลิ้งค์ยืนยันแล้ว';
@@ -221,21 +219,6 @@ $lang['i_pol0'] = 'วิกิเปิดกว้าง (ใ
$lang['i_pol1'] = 'วิกิสาธารณะ (ทุกคนอ่านได้, เขียน และ อัพโหลดเฉพาะผู้ใช้ที่ลงทะเบียนแล้ว)';
$lang['i_pol2'] = 'วิกิภายใน (อ่าน, เขียน, อัพโหลด สำหรับผู้ใช้ที่ลงทะเบียนแล้วเท่านั้น)';
$lang['i_retry'] = 'ลองใหม่';
-$lang['mu_intro'] = 'ที่นี่คุณสามารถอัพโหลดหลายๆไฟล์ได้พร้อมๆกัน คลิ๊กปุ่มบราวซ์เพื่อเพิ่มมันเข้าไปในคิว กดปุ่มอัพโหลดเมื่อเสร็จแล้ว';
-$lang['mu_gridname'] = 'ชื่อไฟล์';
-$lang['mu_gridsize'] = 'ขนาด';
-$lang['mu_gridstat'] = 'สถานะ';
-$lang['mu_namespace'] = 'เนมสเปซ';
-$lang['mu_browse'] = 'เรียกดู';
-$lang['mu_toobig'] = 'ใหญ่ไป';
-$lang['mu_ready'] = 'พร้อมอัปโหลด';
-$lang['mu_done'] = 'เสร็จสิ้น';
-$lang['mu_fail'] = 'ล้มเหลว';
-$lang['mu_authfail'] = 'วาระหมดอายุ';
-$lang['mu_progress'] = '@PCT@% อัปโหลดแล้ว';
-$lang['mu_filetypes'] = 'ชนิดแฟ้มที่อนุญาต';
-$lang['mu_info'] = 'แฟ้มอัปโหลดแล้ว';
-$lang['mu_lasterr'] = 'ผิดพลาดล่าสุด:';
$lang['years'] = '%d ปีก่อน';
$lang['months'] = '%d เดือนก่อน';
$lang['weeks'] = '%d สัปดาห์ก่อน';
diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php
index 94b1c951a..77518ac36 100644
--- a/inc/lang/tr/lang.php
+++ b/inc/lang/tr/lang.php
@@ -43,7 +43,6 @@ $lang['btn_backtomedia'] = 'Çokluortam dosyası seçimine dön';
$lang['btn_subscribe'] = 'Sayfa Değişikliklerini Bildir';
$lang['btn_profile'] = 'Kullanıcı Bilgilerini Güncelle';
$lang['btn_reset'] = 'Sıfırla';
-$lang['btn_resendpwd'] = 'Yeni parola gönder';
$lang['btn_draft'] = 'Taslağı düzenle';
$lang['btn_recover'] = 'Taslağı geri yükle';
$lang['btn_draftdel'] = 'Taslağı sil';
@@ -78,7 +77,6 @@ $lang['profnoempty'] = 'Boş isim veya e-posta adresine izin verilmiyo
$lang['profchanged'] = 'Kullanıcı bilgileri başarıyla değiştirildi.';
$lang['pwdforget'] = 'Parolanızı mı unuttunuz? Yeni bir parola alın';
$lang['resendna'] = 'Bu wiki parolayı tekrar göndermeyi desteklememektedir.';
-$lang['resendpwd'] = 'Yeni parolayı gönder:';
$lang['resendpwdmissing'] = 'Üzgünüz, tüm alanları doldurmalısınız.';
$lang['resendpwdnouser'] = 'Üzgünüz, veritabanımızda bu kullanıcıyı bulamadık.';
$lang['resendpwdbadauth'] = 'Üzgünüz, bu doğrulama kodu doğru değil. Doğrulama linkini tam olarak kullandığınıza emin olun.';
@@ -234,17 +232,4 @@ $lang['i_pol0'] = 'Tamamen Açık Wiki (herkes okuyabilir, yazabi
$lang['i_pol1'] = 'Açık Wiki (herkes okuyabilir, ancak sadece üye olanlar yazabilir ve dosya yükleyebilir)';
$lang['i_pol2'] = 'Kapalı Wiki (sadece üye olanlar okuyabilir, yazabilir ve dosya yükleyebilir)';
$lang['i_retry'] = 'Tekrar Dene';
-$lang['mu_intro'] = 'Burada birden fazla dosyayı bir seferde yükleyebilirsiniz. Sıraya eklemek için Gözat butonuna tıklayın. Bitince yükleye tıklayın';
-$lang['mu_gridname'] = 'Dosya Adı';
-$lang['mu_gridsize'] = 'Boyutu';
-$lang['mu_gridstat'] = 'Durumu';
-$lang['mu_namespace'] = 'Namespace';
-$lang['mu_browse'] = 'Gözat';
-$lang['mu_toobig'] = 'çok büyük';
-$lang['mu_ready'] = 'yüklenmeye hazır';
-$lang['mu_done'] = 'tamamlandı';
-$lang['mu_fail'] = 'başarısız';
-$lang['mu_authfail'] = 'oturum zaman aşımına uğradı';
-$lang['mu_progress'] = '@PCT@% yüklendi';
-$lang['mu_filetypes'] = 'İzin verilen Dosya Türleri';
$lang['recent_global'] = '<b>%s</b> namespace\'i içerisinde yapılan değişiklikleri görüntülemektesiniz. Wiki\'deki tüm değişiklikleri de <a href="%s">bu adresten</a> görebilirsiniz. ';
diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php
index 22d61c9bf..28756e2a1 100644
--- a/inc/lang/uk/lang.php
+++ b/inc/lang/uk/lang.php
@@ -44,7 +44,6 @@ $lang['btn_backtomedia'] = 'Назад до вибору медіа-фай
$lang['btn_subscribe'] = 'Підписатися';
$lang['btn_profile'] = 'Оновити профіль';
$lang['btn_reset'] = 'Очистити';
-$lang['btn_resendpwd'] = 'Надіслати новий пароль';
$lang['btn_draft'] = 'Редагувати чернетку';
$lang['btn_recover'] = 'Відновити чернетку';
$lang['btn_draftdel'] = 'Знищити чернетку';
@@ -79,7 +78,6 @@ $lang['profnoempty'] = 'Ім’я або e-mail не можуть бу
$lang['profchanged'] = 'Профіль успішно змінено.';
$lang['pwdforget'] = 'Забули пароль? Отримайте новий';
$lang['resendna'] = 'Ця Вікі не підтримує повторне відправлення пароля.';
-$lang['resendpwd'] = 'Надіслати пароль для';
$lang['resendpwdmissing'] = 'Необхідно заповнити усі поля.';
$lang['resendpwdnouser'] = 'Такий користувач не існує.';
$lang['resendpwdbadauth'] = 'Код автентифікації невірний. Перевірте, чи ви використали повне посилання для підтвердження.';
@@ -263,21 +261,6 @@ $lang['i_pol1'] = 'Публічна Вікі (читання дл
$lang['i_pol2'] = 'Закрита Вікі (читання, запис та завантаження тільки для зареєстрованих користувачів)';
$lang['i_retry'] = 'Повторити';
$lang['i_license'] = 'Будь ласка, виберіть тип ліцензії, під якою Ві бажаєте опублікувати матеріал:';
-$lang['mu_intro'] = 'Тут ви можете завантажити одночасно кілька файлів. Натисніть кнопку "Вибрати", щоб додати файли в чергу. Після закінчення натисніть кнопку "Завантажити"';
-$lang['mu_gridname'] = 'Ім’я файлу';
-$lang['mu_gridsize'] = 'Розмір';
-$lang['mu_gridstat'] = 'Статус';
-$lang['mu_namespace'] = 'Простір імен';
-$lang['mu_browse'] = 'Вибрати';
-$lang['mu_toobig'] = 'надто великий';
-$lang['mu_ready'] = 'готовий до завантаження';
-$lang['mu_done'] = 'закінчено';
-$lang['mu_fail'] = 'невдале';
-$lang['mu_authfail'] = 'закінчено термін дії сесії';
-$lang['mu_progress'] = 'Завантаження @PCT@%';
-$lang['mu_filetypes'] = 'Дозволені типи файлів';
-$lang['mu_info'] = 'Файли завантажено';
-$lang['mu_lasterr'] = 'Остання помилка:';
$lang['recent_global'] = 'Ви переглядаєте зміни в межах простору імен <b>%s</b>. Також можна <a href="%s">переглянути зміни в межах усієї Вікі</a>.';
$lang['years'] = '%d років тому';
$lang['months'] = '%d місяців тому';
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index a46869d6c..bbbbb71a6 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -45,12 +45,13 @@ $lang['btn_backtomedia'] = '重新選擇圖檔';
$lang['btn_subscribe'] = '訂閱更動通知';
$lang['btn_profile'] = '更新個人資料';
$lang['btn_reset'] = '資料重設';
-$lang['btn_resendpwd'] = '寄新密碼';
$lang['btn_draft'] = '編輯草稿';
$lang['btn_recover'] = '復原草稿';
$lang['btn_draftdel'] = '捨棄草稿';
$lang['btn_revert'] = '復原';
$lang['btn_register'] = '註冊';
+$lang['btn_apply'] = '套用';
+$lang['btn_media'] = '多媒體管理器';
$lang['loggedinas'] = '登入為';
$lang['user'] = '帳號';
$lang['pass'] = '密碼';
@@ -80,7 +81,6 @@ $lang['profnoempty'] = '帳號或 email 地址不可空白!';
$lang['profchanged'] = '個人資料已成功更新囉。';
$lang['pwdforget'] = '忘記密碼了?索取新密碼!';
$lang['resendna'] = '本維基不開放重寄密碼';
-$lang['resendpwd'] = '寄新密碼給';
$lang['resendpwdmissing'] = '抱歉,您必須填寫所有欄位。';
$lang['resendpwdnouser'] = '抱歉,資料庫內找不到這個使用者';
$lang['resendpwdbadauth'] = '抱歉,認證碼無效。請確認您使用了完整的確認連結。';
@@ -95,7 +95,7 @@ $lang['txt_filename'] = '請輸入要存在維基內的檔案名稱 (
$lang['txt_overwrt'] = '是否要覆蓋原有檔案';
$lang['lockedby'] = '目前已被下列人員鎖定';
$lang['lockexpire'] = '預計解除鎖定於';
-$lang['js']['willexpire'] = '本頁的編輯鎖定將在一分鐘內到期。要避免發生衝突,請按「預覽」鍵重設鎖定計時。';
+$lang['js']['willexpire'] = '本頁的編輯鎖定將在一分鐘內到期。要避免發生衝突,請按「預覽」鍵重設鎖定計時。';
$lang['js']['notsavedyet'] = '未儲存的變更將會遺失,繼續嗎?';
$lang['js']['searchmedia'] = '搜尋檔案';
$lang['js']['keepopen'] = '選擇時保持視窗開啟';
@@ -126,6 +126,17 @@ $lang['js']['nosmblinks'] = '只有在 Microsoft IE 下才能執行「連
$lang['js']['linkwiz'] = '建立連結精靈';
$lang['js']['linkto'] = '連結至:';
$lang['js']['del_confirm'] = '確定刪除選取的項目?';
+$lang['js']['restore_confirm'] = '確定還原到這個版本?';
+$lang['js']['media_diff'] = '檢視差異:';
+$lang['js']['media_diff_both'] = '並排';
+$lang['js']['media_diff_opacity'] = '重疊';
+$lang['js']['media_diff_portions'] = '滑動';
+$lang['js']['media_select'] = '選擇檔案…';
+$lang['js']['media_upload_btn'] = '上傳';
+$lang['js']['media_done_btn'] = '完成';
+$lang['js']['media_drop'] = '拖拉檔案到此上傳';
+$lang['js']['media_cancel'] = '刪除';
+$lang['js']['media_overwrt'] = '覆蓋已存在的檔案';
$lang['rssfailed'] = '擷取 RSS 饋送檔時發生錯誤:';
$lang['nothingfound'] = '沒找到任何結果。';
$lang['mediaselect'] = '媒體檔案';
@@ -180,6 +191,10 @@ $lang['mail_changed'] = '變更的頁面:';
$lang['mail_subscribe_list'] = '命名空間中更動的頁面:';
$lang['mail_new_user'] = '新使用者:';
$lang['mail_upload'] = '已上傳檔案:';
+$lang['changes_type'] = '檢視最近更新類型';
+$lang['pages_changes'] = '頁面';
+$lang['media_changes'] = '多媒體檔案';
+$lang['both_changes'] = '頁面和多媒體檔案';
$lang['qb_bold'] = '粗體';
$lang['qb_italic'] = '斜體';
$lang['qb_underl'] = '底線';
@@ -220,6 +235,9 @@ $lang['img_copyr'] = '版權';
$lang['img_format'] = '格式';
$lang['img_camera'] = '相機';
$lang['img_keywords'] = '關鍵字';
+$lang['img_width'] = '寬度';
+$lang['img_height'] = '高度';
+$lang['img_manager'] = '在多媒體管理器中檢視';
$lang['subscr_subscribe_success'] = '已將 %s 加入至 %s 的訂閱列表';
$lang['subscr_subscribe_error'] = '將 %s 加入至 %s 的訂閱列表時發生錯誤';
$lang['subscr_subscribe_noaddress'] = '沒有與您登入相關的地址,無法將您加入訂閱列表';
@@ -262,21 +280,6 @@ $lang['i_pol1'] = '公開的維基 (任何人可讀取,註冊
$lang['i_pol2'] = '封閉的維基 (只有註冊使用者可讀取、寫入、上傳)';
$lang['i_retry'] = '重試';
$lang['i_license'] = '請選擇您想要的內容發布許可協議:';
-$lang['mu_intro'] = '您可以在這裡一次上傳多個檔案。按下瀏覽按鈕加入檔案,然後按上傳按鈕開始上傳。';
-$lang['mu_gridname'] = '檔案名稱';
-$lang['mu_gridsize'] = '檔案大小';
-$lang['mu_gridstat'] = '狀態';
-$lang['mu_namespace'] = '命名空間';
-$lang['mu_browse'] = '瀏覽';
-$lang['mu_toobig'] = '太大';
-$lang['mu_ready'] = '準備上傳';
-$lang['mu_done'] = '完成';
-$lang['mu_fail'] = '失敗';
-$lang['mu_authfail'] = '作業階段逾時';
-$lang['mu_progress'] = '@PCT@% 已上傳';
-$lang['mu_filetypes'] = '接受的檔案類型';
-$lang['mu_info'] = '檔案已上傳。';
-$lang['mu_lasterr'] = '最新一筆錯誤紀錄:';
$lang['recent_global'] = '您正在閱讀命名空間: <b>%s</b> 中的變更。您亦可觀看整個維基的<a href="%s">最近更新</a>。';
$lang['years'] = '%d 年前';
$lang['months'] = '%d 個月前';
@@ -286,3 +289,27 @@ $lang['hours'] = '%d 個小時前';
$lang['minutes'] = '%d 分鐘前';
$lang['seconds'] = '%s 秒鐘前';
$lang['wordblock'] = '您的更改沒有被儲存,因为它包含被阻擋的文字 (垃圾訊息)。';
+$lang['media_uploadtab'] = '上傳';
+$lang['media_searchtab'] = '搜尋';
+$lang['media_file'] = '檔案';
+$lang['media_viewtab'] = '檢視';
+$lang['media_edittab'] = '編輯';
+$lang['media_historytab'] = '歷史紀錄';
+$lang['media_list_thumbs'] = '縮圖';
+$lang['media_list_rows'] = '列表';
+$lang['media_sort_name'] = '名稱';
+$lang['media_sort_date'] = '日期';
+$lang['media_namespaces'] = '選擇命名空間';
+$lang['media_files'] = '在 %s 中的檔案';
+$lang['media_upload'] = '上傳至 %s';
+$lang['media_search'] = '在 %s 中搜尋';
+$lang['media_view'] = '%s';
+$lang['media_viewold'] = '%s 在 %s';
+$lang['media_edit'] = '編輯 %s';
+$lang['media_history'] = '%s 的歷史紀錄';
+$lang['media_meta_edited'] = '元資料已編輯';
+$lang['media_perm_read'] = '抱歉,您沒有足夠權限讀取檔案';
+$lang['media_perm_upload'] = '抱歉,您沒有足夠權限上傳檔案。';
+$lang['media_update'] = '上傳新的版本';
+$lang['media_restore'] = '還原這個版本';
+$lang['plugin_install_err'] = '插件安裝錯誤。將插件目錄 "%s" 重新命名為 "%s"';
diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php
index 6e6dff6f4..9d125ce44 100644
--- a/inc/lang/zh/lang.php
+++ b/inc/lang/zh/lang.php
@@ -14,6 +14,7 @@
* @author Hiphen Lee <jacob.b.leung@gmail.com>
* @author caii, patent agent in China <zhoucaiqi@gmail.com>
* @author lainme993@gmail.com
+ * @author Shuo-Ting Jian <shoting@gmail.com>
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
@@ -49,7 +50,6 @@ $lang['btn_backtomedia'] = '返回到媒体文件选择工具';
$lang['btn_subscribe'] = '订阅本页更改';
$lang['btn_profile'] = '更新个人信息';
$lang['btn_reset'] = '重设';
-$lang['btn_resendpwd'] = '发送新密码';
$lang['btn_draft'] = '编辑草稿';
$lang['btn_recover'] = '恢复草稿';
$lang['btn_draftdel'] = '删除草稿';
@@ -86,7 +86,6 @@ $lang['profnoempty'] = '不允许使用空的用户名或邮件地址
$lang['profchanged'] = '用户信息更新成功。';
$lang['pwdforget'] = '忘记密码?立即获取新密码';
$lang['resendna'] = '本维基不支持二次发送密码。';
-$lang['resendpwd'] = '发送新密码给';
$lang['resendpwdmissing'] = '对不起,您必须填写所有的区域。';
$lang['resendpwdnouser'] = '对不起,在我们的用户数据中找不到该用户。';
$lang['resendpwdbadauth'] = '对不起,该认证码错误。请使用完整的确认链接。';
@@ -289,21 +288,7 @@ $lang['i_pol1'] = '公共的维基(任何人都有读的权限
$lang['i_pol2'] = '关闭的维基(只有注册用户才有读、写、上传的权限)';
$lang['i_retry'] = '重试';
$lang['i_license'] = '请选择您希望的内容发布许可协议:';
-$lang['mu_intro'] = '您可以在此一次上传多个文件。点按浏览按钮添加文件到上传队列中,先好后按上传钮。';
-$lang['mu_gridname'] = '文件名';
-$lang['mu_gridsize'] = '大小';
-$lang['mu_gridstat'] = '状态';
-$lang['mu_namespace'] = '名称空间';
-$lang['mu_browse'] = '浏览';
-$lang['mu_toobig'] = '过大';
-$lang['mu_ready'] = '准备好上传';
-$lang['mu_done'] = '完成';
-$lang['mu_fail'] = '失败';
-$lang['mu_authfail'] = '会话过期';
-$lang['mu_progress'] = '@PCT@% 上传完成';
-$lang['mu_filetypes'] = '允许的文件类型';
-$lang['mu_info'] = '文件已上传。';
-$lang['mu_lasterr'] = '最后一个错误:';
+
$lang['recent_global'] = '您当前看到的是<b>%s</b> 名称空间的变动。你还可以在<a href="%s">查看整个维基的近期变动</a>。';
$lang['years'] = '%d年前';
$lang['months'] = '%d月前';
@@ -315,18 +300,22 @@ $lang['seconds'] = '%d秒前';
$lang['wordblock'] = '您的更改没有被保存,因为它包含被屏蔽的文字(垃圾信息)。';
$lang['media_uploadtab'] = '上传';
$lang['media_searchtab'] = '搜索';
+$lang['media_file'] = '文件';
$lang['media_viewtab'] = '查看';
$lang['media_edittab'] = '编辑';
$lang['media_historytab'] = '历史';
-$lang['media_thumbsview'] = '缩略图';
-$lang['media_listview'] = '列表';
-$lang['media_sort'] = '排序';
+$lang['media_list_thumbs'] = '缩图';
+$lang['media_list_rows'] = '列表';
$lang['media_sort_name'] = '按名称';
$lang['media_sort_date'] = '按日期';
+$lang['media_namespaces'] = '选择命名空间';
+$lang['media_files'] = '在 %s 中的文件';
$lang['media_upload'] = '上传到 <strong>%s</strong> 命名空间。';
$lang['media_search'] = '在 <strong>%s</strong> 命名空间中搜索。';
-$lang['media_edit'] = '编辑';
-$lang['media_history'] = '这些是文件的旧版本。';
+$lang['media_view'] = '%s 在 %s';
+$lang['media_viewold'] = '%s ';
+$lang['media_edit'] = '编辑 %s';
+$lang['media_history'] = '%s 的历史纪录';
$lang['media_meta_edited'] = '元数据已编辑';
$lang['media_perm_read'] = '抱歉,您没有足够权限读取这些文件。';
$lang['media_perm_upload'] = '抱歉,您没有足够权限来上传文件。';
diff --git a/inc/load.php b/inc/load.php
index b5cfd4273..0572b5760 100644
--- a/inc/load.php
+++ b/inc/load.php
@@ -77,10 +77,13 @@ function load_autoload($name){
'Sitemapper' => DOKU_INC.'inc/Sitemapper.php',
'PassHash' => DOKU_INC.'inc/PassHash.class.php',
'Mailer' => DOKU_INC.'inc/Mailer.class.php',
+ 'RemoteAPI' => DOKU_INC.'inc/remote.php',
+ 'RemoteAPICore' => DOKU_INC.'inc/RemoteAPICore.php',
'DokuWiki_Action_Plugin' => DOKU_PLUGIN.'action.php',
'DokuWiki_Admin_Plugin' => DOKU_PLUGIN.'admin.php',
'DokuWiki_Syntax_Plugin' => DOKU_PLUGIN.'syntax.php',
+ 'DokuWiki_Remote_Plugin' => DOKU_PLUGIN.'remote.php',
);
@@ -90,7 +93,7 @@ function load_autoload($name){
}
// Plugin loading
- if(preg_match('/^(helper|syntax|action|admin|renderer)_plugin_([^_]+)(?:_([^_]+))?$/',
+ if(preg_match('/^(helper|syntax|action|admin|renderer|remote)_plugin_([^_]+)(?:_([^_]+))?$/',
$name, $m)) {
//try to load the wanted plugin file
// include, but be silent. Maybe some other autoloader has an idea
diff --git a/inc/mail.php b/inc/mail.php
index 01b2895e1..bec0c5b10 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -106,7 +106,7 @@ function _mail_send_action($data) {
// discard mail request if no recipients are available
if(trim($to) === '' && trim($cc) === '' && trim($bcc) === '') return false;
-
+
// end additional code to support event ... original mail_send() code from here
if(defined('MAILHEADER_ASCIIONLY')){
@@ -208,9 +208,9 @@ function mail_encode_address($string,$header='',$names=true){
if(!utf8_isASCII($text)){
// put the quotes outside as in =?UTF-8?Q?"Elan Ruusam=C3=A4e"?= vs "=?UTF-8?Q?Elan Ruusam=C3=A4e?="
if (preg_match('/^"(.+)"$/', $text, $matches)) {
- $text = '"=?UTF-8?Q?'.mail_quotedprintable_encode($matches[1], 0).'?="';
+ $text = '"=?UTF-8?Q?'.mail_quotedprintable_encode($matches[1], 0).'?="';
} else {
- $text = '=?UTF-8?Q?'.mail_quotedprintable_encode($text, 0).'?=';
+ $text = '=?UTF-8?Q?'.mail_quotedprintable_encode($text, 0).'?=';
}
// additionally the space character should be encoded as =20 (or each
// word QP encoded separately).
diff --git a/inc/media.php b/inc/media.php
index 4e014877b..66984e957 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -108,7 +108,7 @@ function media_metaform($id,$auth){
$src = mediaFN($id);
// output
- $form = new Doku_Form(array('action' => media_managerURL(array('tab_details' => 'view')),
+ $form = new Doku_Form(array('action' => media_managerURL(array('tab_details' => 'view'), '&'),
'class' => 'meta'));
$form->addHidden('img', $id);
$form->addHidden('mediado', 'save');
@@ -175,10 +175,10 @@ define('DOKU_MEDIA_EMPTY_NS', 8);
*
* @author Andreas Gohr <andi@splitbrain.org>
* @return int One of: 0,
- DOKU_MEDIA_DELETED,
- DOKU_MEDIA_DELETED | DOKU_MEDIA_EMPTY_NS,
- DOKU_MEDIA_NOT_AUTH,
- DOKU_MEDIA_INUSE
+ * DOKU_MEDIA_DELETED,
+ * DOKU_MEDIA_DELETED | DOKU_MEDIA_EMPTY_NS,
+ * DOKU_MEDIA_NOT_AUTH,
+ * DOKU_MEDIA_INUSE
*/
function media_delete($id,$auth){
global $lang;
@@ -230,16 +230,18 @@ function media_upload_xhr($ns,$auth){
$id = $_GET['qqfile'];
list($ext,$mime,$dl) = mimetype($id);
$input = fopen("php://input", "r");
- $temp = tmpfile();
- $realSize = stream_copy_to_stream($input, $temp);
- fclose($input);
- if ($realSize != (int)$_SERVER["CONTENT_LENGTH"]) return false;
if (!($tmp = io_mktmpdir())) return false;
$path = $tmp.'/'.md5($id);
$target = fopen($path, "w");
- fseek($temp, 0, SEEK_SET);
- stream_copy_to_stream($temp, $target);
+ $realSize = stream_copy_to_stream($input, $target);
fclose($target);
+ fclose($input);
+ if ($realSize != (int)$_SERVER["CONTENT_LENGTH"]){
+ unlink($target);
+ unlink($path);
+ return false;
+ }
+
$res = media_save(
array('name' => $path,
'mime' => $mime,
@@ -332,7 +334,7 @@ function media_save($file, $id, $ow, $auth, $move) {
global $lang, $conf;
// get filename
- $id = cleanID($id,false,true);
+ $id = cleanID($id);
$fn = mediaFN($id);
// get filetype regexp
@@ -751,7 +753,7 @@ function media_tab_search($ns,$auth=null) {
echo '<div class="search">'.NL;
media_searchform($ns, $query, true);
- if ($do == 'searchlist') {
+ if ($do == 'searchlist' || $query) {
media_searchlist($query,$ns,$auth,true,_media_get_sort_type());
}
echo '</div>'.NL;
@@ -824,6 +826,7 @@ function media_preview($image, $auth, $rev=false, $meta=false) {
$size = media_image_preview_size($image, $rev, $meta);
if ($size) {
+ global $lang;
echo '<div class="image">';
$more = array();
@@ -837,7 +840,10 @@ function media_preview($image, $auth, $rev=false, $meta=false) {
$more['w'] = $size[0];
$more['h'] = $size[1];
$src = ml($image, $more);
+
+ echo '<a href="'.$src.'" target="_blank" title="'.$lang['mediaview'].'">';
echo '<img src="'.$src.'" alt="" style="max-width: '.$size[0].'px;" />';
+ echo '</a>';
echo '</div>'.NL;
}
@@ -1104,6 +1110,7 @@ function media_file_diff($image, $l_rev, $r_rev, $ns, $auth, $fromajax){
list($l_head, $r_head) = html_diff_head($l_rev, $r_rev, $image, true);
?>
+ <div class="table">
<table>
<tr>
<th><?php echo $l_head; ?></th>
@@ -1171,6 +1178,7 @@ function media_file_diff($image, $l_rev, $r_rev, $ns, $auth, $fromajax){
echo '</tr>'.NL;
echo '</table>'.NL;
+ echo '</div>'.NL;
if ($is_img && !$fromajax) echo '</div>';
}
@@ -1344,7 +1352,7 @@ function media_printfile($item,$auth,$jump,$display_namespace=false){
$info .= filesize_h($item['size']);
// output
- echo '<div class="'.$zebra.'"'.$jump.'>'.NL;
+ echo '<div class="'.$zebra.'"'.$jump.' title="'.hsc($item['id']).'">'.NL;
if (!$display_namespace) {
echo '<a name="h_:'.$item['id'].'" class="'.$class.'">'.hsc($file).'</a> ';
} else {
@@ -1358,7 +1366,7 @@ function media_printfile($item,$auth,$jump,$display_namespace=false){
'alt="'.$lang['mediaview'].'" title="'.$lang['mediaview'].'" class="btn" /></a>';
// mediamanager button
- $link = wl('',array('do'=>'media','image'=>$item['id']));
+ $link = wl('',array('do'=>'media','image'=>$item['id'],'ns'=>getNS($item['id'])));
echo ' <a href="'.$link.'" target="_blank"><img src="'.DOKU_BASE.'lib/images/mediamanager.png" '.
'alt="'.$lang['btn_media'].'" title="'.$lang['btn_media'].'" class="btn" /></a>';
@@ -1405,7 +1413,7 @@ function media_printfile_thumbs($item,$auth,$jump=false,$display_namespace=false
$file = utf8_decodeFN($item['file']);
// output
- echo '<li><dl>'.NL;
+ echo '<li><dl title="'.hsc($item['id']).'">'.NL;
echo '<dt>';
if($item['isimg']) {
@@ -1668,7 +1676,7 @@ function media_nstree_item($item){
$ret = '';
if (!($_REQUEST['do'] == 'media'))
$ret .= '<a href="'.DOKU_BASE.'lib/exe/mediamanager.php?ns='.idfilter($item['id']).'" class="idx_dir">';
- else $ret .= '<a href="'.media_managerURL(array('ns' => idfilter($item['id']), 'tab_files' => 'files'))
+ else $ret .= '<a href="'.media_managerURL(array('ns' => idfilter($item['id'], false), 'tab_files' => 'files'))
.'" class="idx_dir">';
$ret .= $item['label'];
$ret .= '</a>';
@@ -1772,7 +1780,7 @@ function media_crop_image($file, $ext, $w, $h=0){
$local = getCacheName($file,'.media.'.$cw.'x'.$ch.'.crop.'.$ext);
$mtime = @filemtime($local); // 0 if not exists
- if( $mtime > filemtime($file) ||
+ if( $mtime > @filemtime($file) ||
media_crop_imageIM($ext,$file,$info[0],$info[1],$local,$cw,$ch,$cx,$cy) ||
media_resize_imageGD($ext,$file,$cw,$ch,$local,$cw,$ch,$cx,$cy) ){
if($conf['fperm']) chmod($local, $conf['fperm']);
diff --git a/inc/pageutils.php b/inc/pageutils.php
index c355d4894..c94d14624 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -92,7 +92,7 @@ function getID($param='id',$clean=true){
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $raw_id The pageid to clean
* @param boolean $ascii Force ASCII
- * @param boolean $media Allow leading or trailing _ for media files
+ * @param boolean $media DEPRECATED
*/
function cleanID($raw_id,$ascii=false,$media=false){
global $conf;
@@ -132,7 +132,7 @@ function cleanID($raw_id,$ascii=false,$media=false){
//clean up
$id = preg_replace($sepcharpat,$sepchar,$id);
$id = preg_replace('#:+#',':',$id);
- $id = ($media ? trim($id,':.-') : trim($id,':._-'));
+ $id = trim($id,':._-');
$id = preg_replace('#:[:\._\-]+#',':',$id);
$id = preg_replace('#[:\._\-]+:#',':',$id);
@@ -213,9 +213,9 @@ function sectionID($title,&$check) {
if(is_array($check)){
// make sure tiles are unique
if (!array_key_exists ($title,$check)) {
- $check[$title] = 0;
+ $check[$title] = 0;
} else {
- $title .= ++ $check[$title];
+ $title .= ++ $check[$title];
}
}
diff --git a/inc/parser/metadata.php b/inc/parser/metadata.php
index 136c37531..8bfdc3b9c 100644
--- a/inc/parser/metadata.php
+++ b/inc/parser/metadata.php
@@ -455,16 +455,16 @@ class Doku_Renderer_metadata extends Doku_Renderer {
global $conf;
$isImage = false;
- if (is_null($title)){
+ if (is_array($title)){
+ if($title['title']) return '['.$title['title'].']';
+ } else if (is_null($title) || trim($title)==''){
if (useHeading('content') && $id){
$heading = p_get_first_heading($id,METADATA_DONT_RENDER);
if ($heading) return $heading;
}
return $default;
- } else if (is_string($title)){
+ } else {
return $title;
- } else if (is_array($title)){
- if($title['title']) return '['.$title['title'].']';
}
}
diff --git a/inc/parser/parser.php b/inc/parser/parser.php
index 68d4e4569..cf132ce97 100644
--- a/inc/parser/parser.php
+++ b/inc/parser/parser.php
@@ -929,7 +929,7 @@ class Doku_Parser_Mode_windowssharelink extends Doku_Parser_Mode {
var $pattern;
function preConnect() {
- $this->pattern = "\\\\\\\\\w+?(?:\\\\[\w$]+)+";
+ $this->pattern = "\\\\\\\\\w+?(?:\\\\[\w-$]+)+";
}
function connectTo($mode) {
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index ea1756803..4345b494f 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -29,7 +29,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
var $doc = ''; // will contain the whole document
var $toc = array(); // will contain the Table of Contents
- private $sectionedits = array(); // A stack of section edit data
+ var $sectionedits = array(); // A stack of section edit data
var $headers = array();
var $footnotes = array();
@@ -566,6 +566,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
function internallink($id, $name = NULL, $search=NULL,$returnonly=false,$linktype='content') {
global $conf;
global $ID;
+ global $INFO;
$params = '';
$parts = explode('?', $id, 2);
@@ -610,7 +611,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$link['pre'] = '';
$link['suf'] = '';
// highlight link to current page
- if ($id == $ID) {
+ if ($id == $INFO['id']) {
$link['pre'] = '<span class="curid">';
$link['suf'] = '</span>';
}
@@ -807,7 +808,6 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
//markup non existing files
if (!$exists) {
$link['class'] .= ' wikilink2';
- $link['url'] = media_managerURL(array('tab_details' => 'view', 'image' => $src, 'ns' => getNS($src)), '&');
}
//output formatted
diff --git a/inc/plugincontroller.class.php b/inc/plugincontroller.class.php
index 734331c94..208d7dae9 100644
--- a/inc/plugincontroller.class.php
+++ b/inc/plugincontroller.class.php
@@ -137,6 +137,7 @@ class Doku_Plugin_Controller {
// the plugin was disabled by rc2009-01-26
// disabling mechanism was changed back very soon again
// to keep everything simple we just skip the plugin completely
+ continue;
} elseif (@file_exists(DOKU_PLUGIN.$plugin.'/disabled')) {
// treat this as a default disabled plugin(over-rideable by the plugin manager)
// deprecated 2011-09-10 (usage of disabled files)
diff --git a/inc/remote.php b/inc/remote.php
new file mode 100644
index 000000000..2ef28afd2
--- /dev/null
+++ b/inc/remote.php
@@ -0,0 +1,253 @@
+<?php
+
+if (!defined('DOKU_INC')) die();
+
+class RemoteException extends Exception {}
+class RemoteAccessDeniedException extends RemoteException {}
+
+/**
+ * This class provides information about remote access to the wiki.
+ *
+ * == Types of methods ==
+ * There are two types of remote methods. The first is the core methods.
+ * These are always available and provided by dokuwiki.
+ * The other is plugin methods. These are provided by remote plugins.
+ *
+ * == Information structure ==
+ * The information about methods will be given in an array with the following structure:
+ * array(
+ * 'method.remoteName' => array(
+ * 'args' => array(
+ * 'type eg. string|int|...|date|file',
+ * )
+ * 'name' => 'method name in class',
+ * 'return' => 'type',
+ * 'public' => 1/0 - method bypass default group check (used by login)
+ * ['doc' = 'method documentation'],
+ * )
+ * )
+ *
+ * plugin names are formed the following:
+ * core methods begin by a 'dokuwiki' or 'wiki' followed by a . and the method name itself.
+ * i.e.: dokuwiki.version or wiki.getPage
+ *
+ * plugin methods are formed like 'plugin.<plugin name>.<method name>'.
+ * i.e.: plugin.clock.getTime or plugin.clock_gmt.getTime
+ *
+ * @throws RemoteException
+ */
+class RemoteAPI {
+
+ /**
+ * @var RemoteAPICore
+ */
+ private $coreMethods = null;
+
+ /**
+ * @var array remote methods provided by dokuwiki plugins - will be filled lazy via
+ * {@see RemoteAPI#getPluginMethods}
+ */
+ private $pluginMethods = null;
+
+ /**
+ * @var array contains custom calls to the api. Plugins can use the XML_CALL_REGISTER event.
+ * The data inside is 'custom.call.something' => array('plugin name', 'remote method name')
+ *
+ * The remote method name is the same as in the remote name returned by _getMethods().
+ */
+ private $pluginCustomCalls = null;
+
+ private $dateTransformation;
+ private $fileTransformation;
+
+ public function __construct() {
+ $this->dateTransformation = array($this, 'dummyTransformation');
+ $this->fileTransformation = array($this, 'dummyTransformation');
+ }
+
+ /**
+ * Get all available methods with remote access.
+ *
+ * @return array with information to all available methods
+ */
+ public function getMethods() {
+ return array_merge($this->getCoreMethods(), $this->getPluginMethods());
+ }
+
+ /**
+ * call a method via remote api.
+ *
+ * @param string $method name of the method to call.
+ * @param array $args arguments to pass to the given method
+ * @return mixed result of method call, must be a primitive type.
+ */
+ public function call($method, $args = array()) {
+ if ($args === null) {
+ $args = array();
+ }
+ list($type, $pluginName, $call) = explode('.', $method, 3);
+ if ($type === 'plugin') {
+ return $this->callPlugin($pluginName, $method, $args);
+ }
+ if ($this->coreMethodExist($method)) {
+ return $this->callCoreMethod($method, $args);
+ }
+ return $this->callCustomCallPlugin($method, $args);
+ }
+
+ private function coreMethodExist($name) {
+ $coreMethods = $this->getCoreMethods();
+ return array_key_exists($name, $coreMethods);
+ }
+
+ private function callCustomCallPlugin($method, $args) {
+ $customCalls = $this->getCustomCallPlugins();
+ if (!array_key_exists($method, $customCalls)) {
+ throw new RemoteException('Method does not exist', -32603);
+ }
+ $customCall = $customCalls[$method];
+ return $this->callPlugin($customCall[0], $customCall[1], $args);
+ }
+
+ private function getCustomCallPlugins() {
+ if ($this->pluginCustomCalls === null) {
+ $data = array();
+ trigger_event('RPC_CALL_ADD', $data);
+ $this->pluginCustomCalls = $data;
+ }
+ return $this->pluginCustomCalls;
+ }
+
+ private function callPlugin($pluginName, $method, $args) {
+ $plugin = plugin_load('remote', $pluginName);
+ $methods = $this->getPluginMethods();
+ if (!$plugin) {
+ throw new RemoteException('Method does not exist', -32603);
+ }
+ $this->checkAccess($methods[$method]);
+ $name = $this->getMethodName($methods, $method);
+ return call_user_func_array(array($plugin, $name), $args);
+ }
+
+ private function callCoreMethod($method, $args) {
+ $coreMethods = $this->getCoreMethods();
+ $this->checkAccess($coreMethods[$method]);
+ if (!isset($coreMethods[$method])) {
+ throw new RemoteException('Method does not exist', -32603);
+ }
+ $this->checkArgumentLength($coreMethods[$method], $args);
+ return call_user_func_array(array($this->coreMethods, $this->getMethodName($coreMethods, $method)), $args);
+ }
+
+ private function checkAccess($methodMeta) {
+ if (!isset($methodMeta['public'])) {
+ $this->forceAccess();
+ } else{
+ if ($methodMeta['public'] == '0') {
+ $this->forceAccess();
+ }
+ }
+ }
+
+ private function checkArgumentLength($method, $args) {
+ if (count($method['args']) < count($args)) {
+ throw new RemoteException('Method does not exist - wrong parameter count.', -32603);
+ }
+ }
+
+ private function getMethodName($methodMeta, $method) {
+ if (isset($methodMeta[$method]['name'])) {
+ return $methodMeta[$method]['name'];
+ }
+ $method = explode('.', $method);
+ return $method[count($method)-1];
+ }
+
+ /**
+ * @return bool true if the current user has access to remote api.
+ */
+ public function hasAccess() {
+ global $conf;
+ global $USERINFO;
+ if (!$conf['remote']) {
+ return false;
+ }
+ if(!$conf['useacl']) {
+ return true;
+ }
+ if(trim($conf['remoteuser']) == '') {
+ return true;
+ }
+
+ return auth_isMember($conf['remoteuser'], $_SERVER['REMOTE_USER'], (array) $USERINFO['grps']);
+ }
+
+ /**
+ * @throws RemoteException On denied access.
+ * @return void
+ */
+ public function forceAccess() {
+ if (!$this->hasAccess()) {
+ throw new RemoteAccessDeniedException('server error. not authorized to call method', -32604);
+ }
+ }
+
+ /**
+ * @return array all plugin methods.
+ */
+ public function getPluginMethods() {
+ if ($this->pluginMethods === null) {
+ $this->pluginMethods = array();
+ $plugins = plugin_list('remote');
+
+ foreach ($plugins as $pluginName) {
+ $plugin = plugin_load('remote', $pluginName);
+ if (!is_subclass_of($plugin, 'DokuWiki_Remote_Plugin')) {
+ throw new RemoteException("Plugin $pluginName does not implement DokuWiki_Remote_Plugin");
+ }
+
+ $methods = $plugin->_getMethods();
+ foreach ($methods as $method => $meta) {
+ $this->pluginMethods["plugin.$pluginName.$method"] = $meta;
+ }
+ }
+ }
+ return $this->pluginMethods;
+ }
+
+ /**
+ * @param RemoteAPICore $apiCore this parameter is used for testing. Here you can pass a non-default RemoteAPICore
+ * instance. (for mocking)
+ * @return array all core methods.
+ */
+ public function getCoreMethods($apiCore = null) {
+ if ($this->coreMethods === null) {
+ if ($apiCore === null) {
+ $this->coreMethods = new RemoteAPICore($this);
+ } else {
+ $this->coreMethods = $apiCore;
+ }
+ }
+ return $this->coreMethods->__getRemoteInfo();
+ }
+
+ public function toFile($data) {
+ return call_user_func($this->fileTransformation, $data);
+ }
+
+ public function toDate($data) {
+ return call_user_func($this->dateTransformation, $data);
+ }
+
+ public function dummyTransformation($data) {
+ return $data;
+ }
+
+ public function setDateTransformation($dateTransformation) {
+ $this->dateTransformation = $dateTransformation;
+ }
+
+ public function setFileTransformation($fileTransformation) {
+ $this->fileTransformation = $fileTransformation;
+ }
+}
diff --git a/inc/template.php b/inc/template.php
index c70e407d6..ab6aa925f 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -23,6 +23,31 @@ function template($tpl){
return DOKU_INC.'lib/tpl/default/'.$tpl;
}
+
+/**
+ * Convenience function to access template dir from local FS
+ *
+ * This replaces the deprecated DOKU_TPLINC constant
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_incdir(){
+ global $conf;
+ return DOKU_INC.'lib/tpl/'.$conf['template'].'/';
+}
+
+/**
+ * Convenience function to access template dir from web
+ *
+ * This replaces the deprecated DOKU_TPL constant
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_basedir(){
+ global $conf;
+ return DOKU_BASE.'lib/tpl/'.$conf['template'].'/';
+}
+
/**
* Print the content
*
@@ -969,10 +994,11 @@ function tpl_img($maxwidth=0,$maxheight=0,$link=true,$params=null){
/**
* Default action for TPL_IMG_DISPLAY
*/
-function _tpl_img_action($data, $param=NULL) {
+function _tpl_img_action($data, $param=null) {
+ global $lang;
$p = buildAttributes($data['params']);
- if($data['url']) print '<a href="'.hsc($data['url']).'">';
+ if($data['url']) print '<a href="'.hsc($data['url']).'" title="'.$lang['mediaview'].'">';
print '<img '.$p.'/>';
if($data['url']) print '</a>';
return true;
@@ -986,8 +1012,6 @@ function _tpl_img_action($data, $param=NULL) {
*/
function tpl_indexerWebBug(){
global $ID;
- global $INFO;
- if(!$INFO['exists']) return false;
$p = array();
$p['src'] = DOKU_BASE.'lib/exe/indexer.php?id='.rawurlencode($ID).
@@ -1033,7 +1057,7 @@ function tpl_getConf($id){
*/
function tpl_loadConfig(){
- $file = DOKU_TPLINC.'/conf/default.php';
+ $file = tpl_incdir().'/conf/default.php';
$conf = array();
if (!@file_exists($file)) return false;
@@ -1054,7 +1078,7 @@ function tpl_getLang($id){
static $lang = array();
if (count($lang) === 0){
- $path = DOKU_TPLINC.'lang/';
+ $path = tpl_incdir().'lang/';
$lang = array();
@@ -1206,12 +1230,13 @@ function tpl_mediaFileDetails($image, $rev){
list($ext,$mime,$dl) = mimetype($image,false);
$class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
$class = 'select mediafile mf_'.$class;
- $tabTitle = '<strong class="'.$class.'">'.$image.'</strong>';
+ $tabTitle = '<strong class="'.$class.'"><a href="'.ml($image).'" title="'.$lang['mediaview'].'">'.$image.'</a>'.'</strong>';
if ($opened_tab === 'view' && $rev) {
printf($lang['media_viewold'], $tabTitle, dformat($rev));
} else {
printf($lang['media_' . $opened_tab], $tabTitle);
}
+
echo '</h3></div>'.NL;
echo '<div class="panelContent">'.NL;
@@ -1261,6 +1286,7 @@ function tpl_actiondropdown($empty='',$button='&gt;'){
global $auth;
echo '<form action="' . DOKU_SCRIPT . '" method="post" 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().'" />';
@@ -1268,36 +1294,42 @@ function tpl_actiondropdown($empty='',$button='&gt;'){
echo '<select name="do" class="edit quickselect">';
echo '<option value="">'.$empty.'</option>';
- echo '<optgroup label=" &mdash; ">';
+ echo '<optgroup label="'.$lang['page_tools'].'">';
$act = tpl_get_action('edit');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
- $act = tpl_get_action('revisions');
+ $act = tpl_get_action('revert');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
- $act = tpl_get_action('revert');
+ $act = tpl_get_action('revisions');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
$act = tpl_get_action('backlink');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
- echo '</optgroup>';
- echo '<optgroup label=" &mdash; ">';
+ $act = tpl_get_action('subscribe');
+ if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+ echo '</optgroup>';
+
+ echo '<optgroup label="'.$lang['site_tools'].'">';
$act = tpl_get_action('recent');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+ $act = tpl_get_action('media');
+ if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+
$act = tpl_get_action('index');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
echo '</optgroup>';
- echo '<optgroup label=" &mdash; ">';
+ echo '<optgroup label="'.$lang['user_tools'].'">';
$act = tpl_get_action('login');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
- $act = tpl_get_action('profile');
+ $act = tpl_get_action('register');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
- $act = tpl_get_action('subscribe');
+ $act = tpl_get_action('profile');
if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
$act = tpl_get_action('admin');
@@ -1306,6 +1338,7 @@ function tpl_actiondropdown($empty='',$button='&gt;'){
echo '</select>';
echo '<input type="submit" value="'.$button.'" />';
+ echo '</div>';
echo '</form>';
}
@@ -1315,31 +1348,33 @@ function tpl_actiondropdown($empty='',$button='&gt;'){
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $img - print image? (|button|badge)
* @param bool $return - when true don't print, but return HTML
+ * @param bool $wrap - wrap in div with class="license"?
*/
-function tpl_license($img='badge',$imgonly=false,$return=false){
+function tpl_license($img='badge',$imgonly=false,$return=false,$wrap=true){
global $license;
global $conf;
global $lang;
if(!$conf['license']) return '';
if(!is_array($license[$conf['license']])) return '';
$lic = $license[$conf['license']];
+ $target = ($conf['target']['extern']) ? ' target="'.$conf['target']['extern'].'"' : '';
- $out = '<div class="license">';
+ $out = '';
+ if($wrap) $out .= '<div class="license">';
if($img){
$src = license_img($img);
if($src){
- $out .= '<a href="'.$lic['url'].'" rel="license"';
- if($conf['target']['extern']) $out .= ' target="'.$conf['target']['extern'].'"';
- $out .= '><img src="'.DOKU_BASE.$src.'" class="medialeft lic'.$img.'" alt="'.$lic['name'].'" /></a> ';
+ $out .= '<a href="'.$lic['url'].'" rel="license"'.$target;
+ $out .= '><img src="'.DOKU_BASE.$src.'" alt="'.$lic['name'].'" /></a>';
+ if(!$imgonly) $out .= ' ';
}
}
if(!$imgonly) {
- $out .= $lang['license'];
- $out .= ' <a href="'.$lic['url'].'" rel="license" class="urlextern"';
- if($conf['target']['extern']) $out .= ' target="'.$conf['target']['extern'].'"';
+ $out .= $lang['license'].' ';
+ $out .= '<a href="'.$lic['url'].'" rel="license" class="urlextern"'.$target;
$out .= '>'.$lic['name'].'</a>';
}
- $out .= '</div>';
+ if($wrap) $out .= '</div>';
if($return) return $out;
echo $out;
@@ -1354,9 +1389,12 @@ function tpl_license($img='badge',$imgonly=false,$return=false){
*/
function tpl_include_page($pageid,$print=true){
global $ID;
- $oldid = $ID;
+ global $TOC;
+ $oldid = $ID;
+ $oldtoc = $TOC;
$html = p_wiki_xhtml($pageid,'',false);
- $ID = $oldid;
+ $ID = $oldid;
+ $TOC = $oldtoc;
if(!$print) return $html;
echo $html;
@@ -1445,24 +1483,93 @@ function tpl_flush(){
flush();
}
+/**
+ * Tries to find a ressource file in the given locations.
+ *
+ * If a given location starts with a colon it is assumed to be a media
+ * file, otherwise it is assumed to be relative to the current template
+ *
+ * @param array $search locations to look at
+ * @param bool $abs if to use absolute URL
+ * @param arrayref $imginfo filled with getimagesize()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_getMediaFile($search, $abs=false, &$imginfo=null){
+ // loop through candidates until a match was found:
+ foreach($search as $img){
+ if(substr($img,0,1) == ':'){
+ $file = mediaFN($img);
+ $ismedia = true;
+ }else{
+ $file = tpl_incdir().$img;
+ $ismedia = false;
+ }
+
+ if(file_exists($file)) break;
+ }
+
+ // fetch image data if requested
+ if(!is_null($imginfo)){
+ $imginfo = getimagesize($file);
+ }
+
+ // build URL
+ if($ismedia){
+ $url = ml($img, '', true, '', $abs);
+ }else{
+ $url = tpl_basedir().$img;
+ if($abs) $url = DOKU_URL.substr($url, strlen(DOKU_REL));
+ }
+
+ return $url;
+}
/**
- * Returns icon from data/media root directory if it exists, otherwise
- * the one in the template's image directory.
+ * PHP include a file
+ *
+ * either from the conf directory if it exists, otherwise use
+ * file in the template's root directory.
+ *
+ * The function honours config cascade settings and looks for the given
+ * file next to the ´main´ config files, in the order protected, local,
+ * default.
+ *
+ * Note: no escaping or sanity checking is done here. Never pass user input
+ * to this function!
*
- * @param bool $abs - if to use absolute URL
- * @param string $fileName - file name of icon
* @author Anika Henke <anika@selfthinker.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
*/
-function tpl_getFavicon($abs=false, $fileName='favicon.ico') {
- if (file_exists(mediaFN($fileName))) {
- return ml($fileName, '', true, '', $abs);
+function tpl_includeFile($file){
+ global $config_cascade;
+ foreach (array('protected','local','default') as $config_group) {
+ if (empty($config_cascade['main'][$config_group])) continue;
+ foreach ($config_cascade['main'][$config_group] as $conf_file) {
+ $dir = dirname($conf_file);
+ if(file_exists("$dir/$file")){
+ include("$dir/$file");
+ return;
+ }
+ }
}
- if($abs) {
- return DOKU_URL.substr(DOKU_TPL.'images/'.$fileName, strlen(DOKU_REL));
+ // still here? try the template dir
+ $file = tpl_incdir().$file;
+ if(file_exists($file)){
+ include($file);
}
- return DOKU_TPL.'images/'.$fileName;
+}
+
+/**
+ * Returns icon from data/media root directory if it exists, otherwise
+ * the one in the template's image directory.
+ *
+ * @deprecated Use tpl_getMediaFile() instead
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+function tpl_getFavicon($abs=false, $fileName='favicon.ico') {
+ $look = array(":wiki:$fileName", ":$fileName", "images/$fileName");
+ return tpl_getMediaFile($look, $abs);
}
/**
@@ -1478,14 +1585,17 @@ function tpl_favicon($types=array('favicon')) {
foreach ($types as $type) {
switch($type) {
case 'favicon':
- $return .= '<link rel="shortcut icon" href="'.tpl_getFavicon().'" />'.NL;
+ $look = array(':wiki:favicon.ico', ':favicon.ico', 'images/favicon.ico');
+ $return .= '<link rel="shortcut icon" href="'.tpl_getMediaFile($look).'" />'.NL;
break;
case 'mobile':
- $return .= '<link rel="apple-touch-icon" href="'.tpl_getFavicon(false, 'apple-touch-icon.png').'" />'.NL;
+ $look = array(':wiki:apple-touch-icon.png', ':apple-touch-icon.png', 'images/apple-touch-icon.ico');
+ $return .= '<link rel="apple-touch-icon" href="'.tpl_getMediaFile($look).'" />'.NL;
break;
case 'generic':
// ideal world solution, which doesn't work in any browser yet
- $return .= '<link rel="icon" href="'.tpl_getFavicon(false, 'icon.svg').'" type="image/svg+xml" />'.NL;
+ $look = array(':wiki:favicon.svg', ':favicon.svg', 'images/favicon.svg');
+ $return .= '<link rel="icon" href="'.tpl_getMediaFile($look).'" type="image/svg+xml" />'.NL;
break;
}
}
diff --git a/inc/toolbar.php b/inc/toolbar.php
index 02172510e..b588d4477 100644
--- a/inc/toolbar.php
+++ b/inc/toolbar.php
@@ -243,7 +243,7 @@ function toolbar_signature(){
global $INFO;
$sig = $conf['signature'];
- $sig = strftime($sig);
+ $sig = dformat(null,$sig);
$sig = str_replace('@USER@',$_SERVER['REMOTE_USER'],$sig);
$sig = str_replace('@NAME@',$INFO['userinfo']['name'],$sig);
$sig = str_replace('@MAIL@',$INFO['userinfo']['mail'],$sig);
diff --git a/inc/utf8.php b/inc/utf8.php
index 9d0d17f78..54986e14e 100644
--- a/inc/utf8.php
+++ b/inc/utf8.php
@@ -526,7 +526,7 @@ if(!function_exists('utf8_decode_numeric')){
if(!class_exists('utf8_entity_decoder')){
class utf8_entity_decoder {
var $table;
- function utf8_entity_decoder() {
+ function __construct() {
$table = get_html_translation_table(HTML_ENTITIES);
$table = array_flip($table);
$this->table = array_map(array(&$this,'makeutf8'), $table);