mirror of
https://github.com/YunoHost-Apps/dokuwiki_ynh.git
synced 2024-09-03 18:26:20 +02:00
Update source to 'Ponder Stibbons' version.
This commit is contained in:
parent
8a5c76c1b9
commit
a36d1df3dc
839 changed files with 21349 additions and 16632 deletions
|
@ -4,7 +4,7 @@ at http://www.dokuwiki.org/
|
||||||
For Installation Instructions see
|
For Installation Instructions see
|
||||||
http://www.dokuwiki.org/install
|
http://www.dokuwiki.org/install
|
||||||
|
|
||||||
DokuWiki - 2004-2013 (c) Andreas Gohr <andi@splitbrain.org>
|
DokuWiki - 2004-2014 (c) Andreas Gohr <andi@splitbrain.org>
|
||||||
and the DokuWiki Community
|
and the DokuWiki Community
|
||||||
See COPYING and file headers for license info
|
See COPYING and file headers for license info
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
2013-12-08 "Binky"
|
2014-05-05 "Ponder Stibbons"
|
||||||
|
|
340
sources/bin/gittool.php
Executable file
340
sources/bin/gittool.php
Executable file
|
@ -0,0 +1,340 @@
|
||||||
|
#!/usr/bin/php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if('cli' != php_sapi_name()) die();
|
||||||
|
ini_set('memory_limit', '128M');
|
||||||
|
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__).'/../').'/');
|
||||||
|
define('NOSESSION', 1);
|
||||||
|
require_once(DOKU_INC.'inc/init.php');
|
||||||
|
|
||||||
|
$GitToolCLI = new GitToolCLI();
|
||||||
|
|
||||||
|
array_shift($argv);
|
||||||
|
$command = array_shift($argv);
|
||||||
|
|
||||||
|
switch($command) {
|
||||||
|
case '':
|
||||||
|
case 'help':
|
||||||
|
$GitToolCLI->cmd_help();
|
||||||
|
break;
|
||||||
|
case 'clone':
|
||||||
|
$GitToolCLI->cmd_clone($argv);
|
||||||
|
break;
|
||||||
|
case 'install':
|
||||||
|
$GitToolCLI->cmd_install($argv);
|
||||||
|
break;
|
||||||
|
case 'repo':
|
||||||
|
case 'repos':
|
||||||
|
$GitToolCLI->cmd_repos();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$GitToolCLI->cmd_git($command, $argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Easily manage DokuWiki git repositories
|
||||||
|
*
|
||||||
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
|
*/
|
||||||
|
class GitToolCLI {
|
||||||
|
private $color = true;
|
||||||
|
|
||||||
|
public function cmd_help() {
|
||||||
|
echo <<<EOF
|
||||||
|
Usage: gittool.php <command> [parameters]
|
||||||
|
|
||||||
|
Manage git repositories for DokuWiki and its plugins and templates.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
|
||||||
|
$> ./bin/gittool.php clone gallery template:ach
|
||||||
|
$> ./bin/gittool.php repos
|
||||||
|
$> ./bin/gittool.php origin -v
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
|
||||||
|
help
|
||||||
|
This help screen
|
||||||
|
|
||||||
|
clone <extensions>
|
||||||
|
Tries to install a known plugin or template (prefix with template:) via
|
||||||
|
git. Uses the DokuWiki.org plugin repository to find the proper git
|
||||||
|
repository. Multiple extensions can be given as parameters
|
||||||
|
|
||||||
|
install <extensions>
|
||||||
|
The same as clone, but when no git source repository can be found, the
|
||||||
|
extension is installed via download
|
||||||
|
|
||||||
|
repos
|
||||||
|
Lists all git repositories found in this DokuWiki installation
|
||||||
|
|
||||||
|
<any>
|
||||||
|
Any unknown commands are assumed to be arguments to git and will be
|
||||||
|
executed in all repositories found within this DokuWiki installation
|
||||||
|
|
||||||
|
EOF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tries to install the given extensions using git clone
|
||||||
|
*
|
||||||
|
* @param $extensions
|
||||||
|
*/
|
||||||
|
public function cmd_clone($extensions) {
|
||||||
|
$errors = array();
|
||||||
|
$succeeded = array();
|
||||||
|
|
||||||
|
foreach($extensions as $ext) {
|
||||||
|
$repo = $this->getSourceRepo($ext);
|
||||||
|
|
||||||
|
if(!$repo) {
|
||||||
|
$this->msg_error("could not find a repository for $ext");
|
||||||
|
$errors[] = $ext;
|
||||||
|
} else {
|
||||||
|
if($this->cloneExtension($ext, $repo)) {
|
||||||
|
$succeeded[] = $ext;
|
||||||
|
} else {
|
||||||
|
$errors[] = $ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\n";
|
||||||
|
if($succeeded) $this->msg_success('successfully cloned the following extensions: '.join(', ', $succeeded));
|
||||||
|
if($errors) $this->msg_error('failed to clone the following extensions: '.join(', ', $errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tries to install the given extensions using git clone with fallback to install
|
||||||
|
*
|
||||||
|
* @param $extensions
|
||||||
|
*/
|
||||||
|
public function cmd_install($extensions) {
|
||||||
|
$errors = array();
|
||||||
|
$succeeded = array();
|
||||||
|
|
||||||
|
foreach($extensions as $ext) {
|
||||||
|
$repo = $this->getSourceRepo($ext);
|
||||||
|
|
||||||
|
if(!$repo) {
|
||||||
|
$this->msg_info("could not find a repository for $ext");
|
||||||
|
if($this->downloadExtension($ext)) {
|
||||||
|
$succeeded[] = $ext;
|
||||||
|
} else {
|
||||||
|
$errors[] = $ext;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if($this->cloneExtension($ext, $repo)) {
|
||||||
|
$succeeded[] = $ext;
|
||||||
|
} else {
|
||||||
|
$errors[] = $ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\n";
|
||||||
|
if($succeeded) $this->msg_success('successfully installed the following extensions: '.join(', ', $succeeded));
|
||||||
|
if($errors) $this->msg_error('failed to install the following extensions: '.join(', ', $errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the given git command in every repository
|
||||||
|
*
|
||||||
|
* @param $cmd
|
||||||
|
* @param $arg
|
||||||
|
*/
|
||||||
|
public function cmd_git($cmd, $arg) {
|
||||||
|
$repos = $this->findRepos();
|
||||||
|
|
||||||
|
$shell = array_merge(array('git', $cmd), $arg);
|
||||||
|
$shell = array_map('escapeshellarg', $shell);
|
||||||
|
$shell = join(' ', $shell);
|
||||||
|
|
||||||
|
foreach($repos as $repo) {
|
||||||
|
if(!@chdir($repo)) {
|
||||||
|
$this->msg_error("Could not change into $repo");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\n";
|
||||||
|
$this->msg_info("executing $shell in $repo");
|
||||||
|
$ret = 0;
|
||||||
|
system($shell, $ret);
|
||||||
|
|
||||||
|
if($ret == 0) {
|
||||||
|
$this->msg_success("git succeeded in $repo");
|
||||||
|
} else {
|
||||||
|
$this->msg_error("git failed in $repo");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simply lists the repositories
|
||||||
|
*/
|
||||||
|
public function cmd_repos() {
|
||||||
|
$repos = $this->findRepos();
|
||||||
|
foreach($repos as $repo) {
|
||||||
|
echo "$repo\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install extension from the given download URL
|
||||||
|
*
|
||||||
|
* @param string $ext
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function downloadExtension($ext) {
|
||||||
|
/** @var helper_plugin_extension_extension $plugin */
|
||||||
|
$plugin = plugin_load('helper', 'extension_extension');
|
||||||
|
if(!$ext) die("extension plugin not available, can't continue");
|
||||||
|
$plugin->setExtension($ext);
|
||||||
|
|
||||||
|
$url = $plugin->getDownloadURL();
|
||||||
|
if(!$url) {
|
||||||
|
$this->msg_error("no download URL for $ext");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ok = false;
|
||||||
|
try {
|
||||||
|
$this->msg_info("installing $ext via download from $url");
|
||||||
|
$ok = $plugin->installFromURL($url);
|
||||||
|
} catch(Exception $e) {
|
||||||
|
$this->msg_error($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if($ok) {
|
||||||
|
$this->msg_success("installed $ext via download");
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
$this->msg_success("failed to install $ext via download");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clones the extension from the given repository
|
||||||
|
*
|
||||||
|
* @param string $ext
|
||||||
|
* @param string $repo
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function cloneExtension($ext, $repo) {
|
||||||
|
if(substr($ext, 0, 9) == 'template:') {
|
||||||
|
$target = fullpath(tpl_incdir().'../'.substr($ext, 9));
|
||||||
|
} else {
|
||||||
|
$target = DOKU_PLUGIN.$ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->msg_info("cloning $ext from $repo to $target");
|
||||||
|
$ret = 0;
|
||||||
|
system("git clone $repo $target", $ret);
|
||||||
|
if($ret === 0) {
|
||||||
|
$this->msg_success("cloning of $ext succeeded");
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
$this->msg_error("cloning of $ext failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all git repositories in this DokuWiki install
|
||||||
|
*
|
||||||
|
* Looks in root, template and plugin directories only.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function findRepos() {
|
||||||
|
$this->msg_info('Looking for .git directories');
|
||||||
|
$data = array_merge(
|
||||||
|
glob(DOKU_INC.'.git', GLOB_ONLYDIR),
|
||||||
|
glob(DOKU_PLUGIN.'*/.git', GLOB_ONLYDIR),
|
||||||
|
glob(fullpath(tpl_incdir().'../').'/*/.git', GLOB_ONLYDIR)
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!$data) {
|
||||||
|
$this->msg_error('Found no .git directories');
|
||||||
|
} else {
|
||||||
|
$this->msg_success('Found '.count($data).' .git directories');
|
||||||
|
}
|
||||||
|
$data = array_map('fullpath', array_map('dirname', $data));
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the repository for the given extension
|
||||||
|
*
|
||||||
|
* @param $extension
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
private function getSourceRepo($extension) {
|
||||||
|
/** @var helper_plugin_extension_extension $ext */
|
||||||
|
$ext = plugin_load('helper', 'extension_extension');
|
||||||
|
if(!$ext) die("extension plugin not available, can't continue");
|
||||||
|
$ext->setExtension($extension);
|
||||||
|
|
||||||
|
$repourl = $ext->getSourcerepoURL();
|
||||||
|
if(!$repourl) return false;
|
||||||
|
|
||||||
|
// match github repos
|
||||||
|
if(preg_match('/github\.com\/([^\/]+)\/([^\/]+)/i', $repourl, $m)) {
|
||||||
|
$user = $m[1];
|
||||||
|
$repo = $m[2];
|
||||||
|
return 'https://github.com/'.$user.'/'.$repo.'.git';
|
||||||
|
}
|
||||||
|
|
||||||
|
// match gitorious repos
|
||||||
|
if(preg_match('/gitorious.org\/([^\/]+)\/([^\/]+)?/i', $repourl, $m)) {
|
||||||
|
$user = $m[1];
|
||||||
|
$repo = $m[2];
|
||||||
|
if(!$repo) $repo = $user;
|
||||||
|
|
||||||
|
return 'https://git.gitorious.org/'.$user.'/'.$repo.'.git';
|
||||||
|
}
|
||||||
|
|
||||||
|
// match bitbucket repos - most people seem to use mercurial there though
|
||||||
|
if(preg_match('/bitbucket\.org\/([^\/]+)\/([^\/]+)/i', $repourl, $m)) {
|
||||||
|
$user = $m[1];
|
||||||
|
$repo = $m[2];
|
||||||
|
return 'https://bitbucket.org/'.$user.'/'.$repo.'.git';
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print an error message
|
||||||
|
*
|
||||||
|
* @param $string
|
||||||
|
*/
|
||||||
|
private function msg_error($string) {
|
||||||
|
if($this->color) echo "\033[31m"; // red
|
||||||
|
echo "E: $string\n";
|
||||||
|
if($this->color) echo "\033[37m"; // reset
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print a success message
|
||||||
|
*
|
||||||
|
* @param $string
|
||||||
|
*/
|
||||||
|
private function msg_success($string) {
|
||||||
|
if($this->color) echo "\033[32m"; // green
|
||||||
|
echo "S: $string\n";
|
||||||
|
if($this->color) echo "\033[37m"; // reset
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print an info message
|
||||||
|
*
|
||||||
|
* @param $string
|
||||||
|
*/
|
||||||
|
private function msg_info($string) {
|
||||||
|
if($this->color) echo "\033[36m"; // cyan
|
||||||
|
echo "I: $string\n";
|
||||||
|
if($this->color) echo "\033[37m"; // reset
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,7 +15,7 @@ require_once DOKU_INC.'inc/cliopts.php';
|
||||||
function usage($show_examples = false) {
|
function usage($show_examples = false) {
|
||||||
print "Usage: striplangs.php [-h [-x]] [-e] [-k lang1[,lang2]..[,langN]]
|
print "Usage: striplangs.php [-h [-x]] [-e] [-k lang1[,lang2]..[,langN]]
|
||||||
|
|
||||||
Removes all languages from the instalation, besides the ones
|
Removes all languages from the installation, besides the ones
|
||||||
after the -k option. English language is never removed!
|
after the -k option. English language is never removed!
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#
|
#
|
||||||
# Order does matter!
|
# Order does matter!
|
||||||
#
|
#
|
||||||
# You can use HTML entities here, but it is not recomended because it may break
|
# You can use HTML entities here, but it is not recommended because it may break
|
||||||
# non-HTML renderers. Use UTF-8 chars directly instead.
|
# non-HTML renderers. Use UTF-8 chars directly instead.
|
||||||
|
|
||||||
<-> ↔
|
<-> ↔
|
||||||
|
|
|
@ -24,12 +24,13 @@ amazon.de http://www.amazon.de/exec/obidos/ASIN/{URL}/splitbrain-21/
|
||||||
amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/
|
amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/
|
||||||
paypal https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=
|
paypal https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=
|
||||||
phpfn http://www.php.net/{NAME}
|
phpfn http://www.php.net/{NAME}
|
||||||
coral http://{HOST}.{PORT}.nyud.net:8090/{PATH}?{QUERY}
|
coral http://{HOST}.{PORT}.nyud.net:8090{PATH}?{QUERY}
|
||||||
freecache http://freecache.org/{NAME}
|
freecache http://freecache.org/{NAME}
|
||||||
sb http://www.splitbrain.org/go/
|
sb http://www.splitbrain.org/go/
|
||||||
skype skype:{NAME}
|
skype skype:{NAME}
|
||||||
google.de http://www.google.de/search?q=
|
google.de http://www.google.de/search?q=
|
||||||
go http://www.google.com/search?q={URL}&btnI=lucky
|
go http://www.google.com/search?q={URL}&btnI=lucky
|
||||||
|
user :user:{NAME}
|
||||||
|
|
||||||
# To support VoIP/SIP links
|
# To support VoIP/SIP links
|
||||||
callto callto://{NAME}
|
callto callto://{NAME}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* following contents:
|
* following contents:
|
||||||
* fieldname - Where data will be saved (EXIF or IPTC field)
|
* fieldname - Where data will be saved (EXIF or IPTC field)
|
||||||
* label - key to lookup in the $lang var, if not found printed as is
|
* label - key to lookup in the $lang var, if not found printed as is
|
||||||
* htmltype - 'text' or 'textarea'
|
* htmltype - 'text', 'textarea' or 'date'
|
||||||
* lookups - array additional fields to lookup the data (EXIF or IPTC fields)
|
* lookups - array additional fields to lookup the data (EXIF or IPTC fields)
|
||||||
*
|
*
|
||||||
* The fields are not ordered continously to make inserting additional items
|
* The fields are not ordered continously to make inserting additional items
|
||||||
|
|
|
@ -13,6 +13,9 @@ swf application/x-shockwave-flash
|
||||||
mp3 audio/mpeg
|
mp3 audio/mpeg
|
||||||
ogg audio/ogg
|
ogg audio/ogg
|
||||||
wav audio/wav
|
wav audio/wav
|
||||||
|
webm video/webm
|
||||||
|
ogv video/ogg
|
||||||
|
mp4 video/mp4
|
||||||
|
|
||||||
tgz !application/octet-stream
|
tgz !application/octet-stream
|
||||||
tar !application/x-gtar
|
tar !application/x-gtar
|
||||||
|
|
|
@ -4,8 +4,9 @@
|
||||||
* from changes by the extention manager. These settings will override any local settings.
|
* from changes by the extention manager. These settings will override any local settings.
|
||||||
* It is not recommended to change this file, as it is overwritten on DokuWiki upgrades.
|
* It is not recommended to change this file, as it is overwritten on DokuWiki upgrades.
|
||||||
*/
|
*/
|
||||||
$plugins['acl'] = 1;
|
$plugins['acl'] = 1;
|
||||||
$plugins['plugin'] = 1;
|
$plugins['authplain'] = 1;
|
||||||
$plugins['config'] = 1;
|
$plugins['extension'] = 1;
|
||||||
$plugins['usermanager'] = 1;
|
$plugins['config'] = 1;
|
||||||
$plugins['revert'] = 1;
|
$plugins['usermanager'] = 1;
|
||||||
|
$plugins['template:dokuwiki'] = 1; // not a plugin, but this should not be uninstalled either
|
||||||
|
|
|
@ -2,6 +2,164 @@
|
||||||
# but were removed later. An up to date DokuWiki should not have any of
|
# but were removed later. An up to date DokuWiki should not have any of
|
||||||
# the files installed
|
# the files installed
|
||||||
|
|
||||||
|
# removed in 2014-05-05
|
||||||
|
lib/images/fileicons/audio.png
|
||||||
|
lib/plugins/acl/lang/hi/lang.php
|
||||||
|
lib/plugins/acl/lang/id-ni/lang.php
|
||||||
|
lib/plugins/acl/lang/lb/lang.php
|
||||||
|
lib/plugins/acl/lang/ms/lang.php
|
||||||
|
lib/plugins/authad/lang/lv/settings.php
|
||||||
|
lib/plugins/authldap/lang/lv/settings.php
|
||||||
|
lib/plugins/authmysql/lang/fi/settings.php
|
||||||
|
lib/plugins/authmysql/lang/lv/settings.php
|
||||||
|
lib/plugins/authpgsql/lang/fi/settings.php
|
||||||
|
lib/plugins/authpgsql/lang/it/settings.php
|
||||||
|
lib/plugins/authpgsql/lang/lv/settings.php
|
||||||
|
lib/plugins/authpgsql/lang/pl/settings.php
|
||||||
|
lib/plugins/config/lang/hr/lang.php
|
||||||
|
lib/plugins/config/lang/id/lang.php
|
||||||
|
lib/plugins/config/lang/kk/lang.php
|
||||||
|
lib/plugins/config/lang/lb/lang.php
|
||||||
|
lib/plugins/config/lang/mk/lang.php
|
||||||
|
lib/plugins/config/lang/ms/lang.php
|
||||||
|
lib/plugins/config/lang/vi/lang.php
|
||||||
|
lib/plugins/plugin/admin.php
|
||||||
|
lib/plugins/plugin/classes/ap_delete.class.php
|
||||||
|
lib/plugins/plugin/classes/ap_download.class.php
|
||||||
|
lib/plugins/plugin/classes/ap_enable.class.php
|
||||||
|
lib/plugins/plugin/classes/ap_info.class.php
|
||||||
|
lib/plugins/plugin/classes/ap_manage.class.php
|
||||||
|
lib/plugins/plugin/classes/ap_update.class.php
|
||||||
|
lib/plugins/plugin/lang/af/lang.php
|
||||||
|
lib/plugins/plugin/lang/ar/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ar/lang.php
|
||||||
|
lib/plugins/plugin/lang/bg/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/bg/lang.php
|
||||||
|
lib/plugins/plugin/lang/ca-valencia/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ca-valencia/lang.php
|
||||||
|
lib/plugins/plugin/lang/ca/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ca/lang.php
|
||||||
|
lib/plugins/plugin/lang/cs/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/cs/lang.php
|
||||||
|
lib/plugins/plugin/lang/da/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/da/lang.php
|
||||||
|
lib/plugins/plugin/lang/de-informal/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/de-informal/lang.php
|
||||||
|
lib/plugins/plugin/lang/de/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/de/lang.php
|
||||||
|
lib/plugins/plugin/lang/el/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/el/lang.php
|
||||||
|
lib/plugins/plugin/lang/en/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/en/lang.php
|
||||||
|
lib/plugins/plugin/lang/eo/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/eo/lang.php
|
||||||
|
lib/plugins/plugin/lang/es/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/es/lang.php
|
||||||
|
lib/plugins/plugin/lang/et/lang.php
|
||||||
|
lib/plugins/plugin/lang/eu/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/eu/lang.php
|
||||||
|
lib/plugins/plugin/lang/fa/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/fa/lang.php
|
||||||
|
lib/plugins/plugin/lang/fi/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/fi/lang.php
|
||||||
|
lib/plugins/plugin/lang/fr/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/fr/lang.php
|
||||||
|
lib/plugins/plugin/lang/gl/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/gl/lang.php
|
||||||
|
lib/plugins/plugin/lang/he/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/he/lang.php
|
||||||
|
lib/plugins/plugin/lang/hi/lang.php
|
||||||
|
lib/plugins/plugin/lang/hr/lang.php
|
||||||
|
lib/plugins/plugin/lang/hu/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/hu/lang.php
|
||||||
|
lib/plugins/plugin/lang/ia/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ia/lang.php
|
||||||
|
lib/plugins/plugin/lang/id-ni/lang.php
|
||||||
|
lib/plugins/plugin/lang/id/lang.php
|
||||||
|
lib/plugins/plugin/lang/is/lang.php
|
||||||
|
lib/plugins/plugin/lang/it/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/it/lang.php
|
||||||
|
lib/plugins/plugin/lang/ja/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ja/lang.php
|
||||||
|
lib/plugins/plugin/lang/kk/lang.php
|
||||||
|
lib/plugins/plugin/lang/ko/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ko/lang.php
|
||||||
|
lib/plugins/plugin/lang/la/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/la/lang.php
|
||||||
|
lib/plugins/plugin/lang/lb/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/lb/lang.php
|
||||||
|
lib/plugins/plugin/lang/lt/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/lt/lang.php
|
||||||
|
lib/plugins/plugin/lang/lv/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/lv/lang.php
|
||||||
|
lib/plugins/plugin/lang/mk/lang.php
|
||||||
|
lib/plugins/plugin/lang/mr/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/mr/lang.php
|
||||||
|
lib/plugins/plugin/lang/ms/lang.php
|
||||||
|
lib/plugins/plugin/lang/ne/lang.php
|
||||||
|
lib/plugins/plugin/lang/nl/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/nl/lang.php
|
||||||
|
lib/plugins/plugin/lang/no/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/no/lang.php
|
||||||
|
lib/plugins/plugin/lang/pl/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/pl/lang.php
|
||||||
|
lib/plugins/plugin/lang/pt-br/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/pt-br/lang.php
|
||||||
|
lib/plugins/plugin/lang/pt/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/pt/lang.php
|
||||||
|
lib/plugins/plugin/lang/ro/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ro/lang.php
|
||||||
|
lib/plugins/plugin/lang/ru/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/ru/lang.php
|
||||||
|
lib/plugins/plugin/lang/sk/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/sk/lang.php
|
||||||
|
lib/plugins/plugin/lang/sl/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/sl/lang.php
|
||||||
|
lib/plugins/plugin/lang/sq/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/sq/lang.php
|
||||||
|
lib/plugins/plugin/lang/sr/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/sr/lang.php
|
||||||
|
lib/plugins/plugin/lang/sv/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/sv/lang.php
|
||||||
|
lib/plugins/plugin/lang/th/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/th/lang.php
|
||||||
|
lib/plugins/plugin/lang/tr/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/tr/lang.php
|
||||||
|
lib/plugins/plugin/lang/uk/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/uk/lang.php
|
||||||
|
lib/plugins/plugin/lang/vi/lang.php
|
||||||
|
lib/plugins/plugin/lang/zh-tw/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/zh-tw/lang.php
|
||||||
|
lib/plugins/plugin/lang/zh/admin_plugin.txt
|
||||||
|
lib/plugins/plugin/lang/zh/lang.php
|
||||||
|
lib/plugins/plugin/plugin.info.txt
|
||||||
|
lib/plugins/plugin/style.css
|
||||||
|
lib/plugins/popularity/lang/et/lang.php
|
||||||
|
lib/plugins/popularity/lang/hr/lang.php
|
||||||
|
lib/plugins/popularity/lang/id/lang.php
|
||||||
|
lib/plugins/popularity/lang/kk/lang.php
|
||||||
|
lib/plugins/popularity/lang/lb/lang.php
|
||||||
|
lib/plugins/popularity/lang/mk/lang.php
|
||||||
|
lib/plugins/popularity/lang/ms/lang.php
|
||||||
|
lib/plugins/popularity/lang/vi/lang.php
|
||||||
|
lib/plugins/revert/lang/af/lang.php
|
||||||
|
lib/plugins/revert/lang/hi/lang.php
|
||||||
|
lib/plugins/revert/lang/hr/lang.php
|
||||||
|
lib/plugins/revert/lang/id-ni/lang.php
|
||||||
|
lib/plugins/revert/lang/id/lang.php
|
||||||
|
lib/plugins/revert/lang/kk/lang.php
|
||||||
|
lib/plugins/revert/lang/lb/lang.php
|
||||||
|
lib/plugins/revert/lang/lt/lang.php
|
||||||
|
lib/plugins/revert/lang/mk/lang.php
|
||||||
|
lib/plugins/revert/lang/ms/lang.php
|
||||||
|
lib/plugins/revert/lang/vi/lang.php
|
||||||
|
lib/plugins/usermanager/lang/hi/lang.php
|
||||||
|
lib/plugins/usermanager/lang/hr/lang.php
|
||||||
|
lib/plugins/usermanager/lang/id-ni/lang.php
|
||||||
|
lib/plugins/usermanager/lang/lb/lang.php
|
||||||
|
lib/plugins/usermanager/lang/ms/lang.php
|
||||||
|
lib/plugins/usermanager/lang/vi/lang.php
|
||||||
|
|
||||||
# removed in 2013-11-18
|
# removed in 2013-11-18
|
||||||
lib/images/arrow_down.gif
|
lib/images/arrow_down.gif
|
||||||
lib/images/arrow_up.gif
|
lib/images/arrow_up.gif
|
||||||
|
|
|
@ -6,7 +6,7 @@ Read the [[doku>manual|DokuWiki Manual]] to unleash the full power of DokuWiki.
|
||||||
|
|
||||||
===== Download =====
|
===== Download =====
|
||||||
|
|
||||||
DokuWiki is available at http://www.splitbrain.org/go/dokuwiki
|
DokuWiki is available at http://download.dokuwiki.org/
|
||||||
|
|
||||||
|
|
||||||
===== Read More =====
|
===== Read More =====
|
||||||
|
@ -24,7 +24,7 @@ All documentation and additional information besides the [[syntax|syntax descrip
|
||||||
**Installing DokuWiki**
|
**Installing DokuWiki**
|
||||||
|
|
||||||
* [[doku>requirements|System Requirements]]
|
* [[doku>requirements|System Requirements]]
|
||||||
* [[http://www.splitbrain.org/go/dokuwiki|Download DokuWiki]] :!:
|
* [[http://download.dokuwiki.org/|Download DokuWiki]] :!:
|
||||||
* [[doku>changes|Change Log]]
|
* [[doku>changes|Change Log]]
|
||||||
* [[doku>Install|How to install or upgrade]] :!:
|
* [[doku>Install|How to install or upgrade]] :!:
|
||||||
* [[doku>config|Configuration]]
|
* [[doku>config|Configuration]]
|
||||||
|
@ -50,7 +50,7 @@ All documentation and additional information besides the [[syntax|syntax descrip
|
||||||
* [[doku>mailinglist|Join the mailing list]]
|
* [[doku>mailinglist|Join the mailing list]]
|
||||||
* [[http://forum.dokuwiki.org|Check out the user forum]]
|
* [[http://forum.dokuwiki.org|Check out the user forum]]
|
||||||
* [[doku>irc|Talk to other users in the IRC channel]]
|
* [[doku>irc|Talk to other users in the IRC channel]]
|
||||||
* [[http://bugs.splitbrain.org/index.php?project=1|Submit bugs and feature wishes]]
|
* [[https://github.com/splitbrain/dokuwiki/issues|Submit bugs and feature wishes]]
|
||||||
* [[http://www.wikimatrix.org/forum/viewforum.php?id=10|Share your experiences in the WikiMatrix forum]]
|
* [[http://www.wikimatrix.org/forum/viewforum.php?id=10|Share your experiences in the WikiMatrix forum]]
|
||||||
* [[doku>thanks|Some humble thanks]]
|
* [[doku>thanks|Some humble thanks]]
|
||||||
|
|
||||||
|
|
|
@ -121,9 +121,9 @@ By using four or more dashes, you can make a horizontal line:
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
===== Images and Other Files =====
|
===== Media Files =====
|
||||||
|
|
||||||
You can include external and internal [[doku>images]] with curly brackets. Optionally you can specify the size of them.
|
You can include external and internal [[doku>images|images, videos and audio files]] with curly brackets. Optionally you can specify the size of them.
|
||||||
|
|
||||||
Real size: {{wiki:dokuwiki-128.png}}
|
Real size: {{wiki:dokuwiki-128.png}}
|
||||||
|
|
||||||
|
@ -157,10 +157,31 @@ Of course, you can add a title (displayed as a tooltip by most browsers), too.
|
||||||
|
|
||||||
{{ wiki:dokuwiki-128.png |This is the caption}}
|
{{ wiki:dokuwiki-128.png |This is the caption}}
|
||||||
|
|
||||||
If you specify a filename (external or internal) that is not an image (''gif, jpeg, png''), then it will be displayed as a link instead.
|
|
||||||
|
|
||||||
For linking an image to another page see [[#Image Links]] above.
|
For linking an image to another page see [[#Image Links]] above.
|
||||||
|
|
||||||
|
==== Supported Media Formats ====
|
||||||
|
|
||||||
|
DokuWiki can embed the following media formats directly.
|
||||||
|
|
||||||
|
| Image | ''gif'', ''jpg'', ''png'' |
|
||||||
|
| Video | ''webm'', ''ogv'', ''mp4'' |
|
||||||
|
| Audio | ''ogg'', ''mp3'', ''wav'' |
|
||||||
|
| Flash | ''swf'' |
|
||||||
|
|
||||||
|
If you specify a filename that is not a supported media format, then it will be displayed as a link instead.
|
||||||
|
|
||||||
|
==== Fallback Formats ====
|
||||||
|
|
||||||
|
Unfortunately not all browsers understand all video and audio formats. To mitigate the problem, you can upload your file in different formats for maximum browser compatibility.
|
||||||
|
|
||||||
|
For example consider this embedded mp4 video:
|
||||||
|
|
||||||
|
{{video.mp4|A funny video}}
|
||||||
|
|
||||||
|
When you upload a ''video.webm'' and ''video.ogv'' next to the referenced ''video.mp4'', DokuWiki will automatically add them as alternatives so that one of the three files is understood by your browser.
|
||||||
|
|
||||||
|
Additionally DokuWiki supports a "poster" image which will be shown before the video has started. That image needs to have the same filename as the video and be either a jpg or png file. In the example above a ''video.jpg'' file would work.
|
||||||
|
|
||||||
===== Lists =====
|
===== Lists =====
|
||||||
|
|
||||||
Dokuwiki supports ordered and unordered lists. To create a list item, indent your text by two spaces and use a ''*'' for unordered lists or a ''-'' for ordered ones.
|
Dokuwiki supports ordered and unordered lists. To create a list item, indent your text by two spaces and use a ''*'' for unordered lists or a ''-'' for ordered ones.
|
||||||
|
@ -427,25 +448,25 @@ PHP example:
|
||||||
|
|
||||||
<code>
|
<code>
|
||||||
<php>
|
<php>
|
||||||
echo 'A logo generated by PHP:';
|
echo 'The PHP version: ';
|
||||||
echo '<img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" />';
|
echo phpversion();
|
||||||
echo '(generated inline HTML)';
|
echo ' (generated inline HTML)';
|
||||||
</php>
|
</php>
|
||||||
<PHP>
|
<PHP>
|
||||||
echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
|
echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
|
||||||
echo '<td><img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" /></td>';
|
echo '<td>'.phpversion().'</td>';
|
||||||
echo '</tr></table>';
|
echo '</tr></table>';
|
||||||
</PHP>
|
</PHP>
|
||||||
</code>
|
</code>
|
||||||
|
|
||||||
<php>
|
<php>
|
||||||
echo 'A logo generated by PHP:';
|
echo 'The PHP version: ';
|
||||||
echo '<img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" />';
|
echo phpversion();
|
||||||
echo '(inline HTML)';
|
echo ' (inline HTML)';
|
||||||
</php>
|
</php>
|
||||||
<PHP>
|
<PHP>
|
||||||
echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
|
echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
|
||||||
echo '<td><img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" /></td>';
|
echo '<td>'.phpversion().'</td>';
|
||||||
echo '</tr></table>';
|
echo '</tr></table>';
|
||||||
</PHP>
|
</PHP>
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// update message version
|
// update message version
|
||||||
$updateVersion = 43;
|
$updateVersion = 44;
|
||||||
|
|
||||||
// xdebug_start_profiling();
|
// xdebug_start_profiling();
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,19 @@ require_once(DOKU_INC.'inc/init.php');
|
||||||
//close session
|
//close session
|
||||||
session_write_close();
|
session_write_close();
|
||||||
|
|
||||||
|
//feed disabled?
|
||||||
|
if(!actionOK('rss')) {
|
||||||
|
http_status(404);
|
||||||
|
echo '<error>RSS feed is disabled.</error>';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
// get params
|
// get params
|
||||||
$opt = rss_parseOptions();
|
$opt = rss_parseOptions();
|
||||||
|
|
||||||
// the feed is dynamic - we need a cache for each combo
|
// the feed is dynamic - we need a cache for each combo
|
||||||
// (but most people just use the default feed so it's still effective)
|
// (but most people just use the default feed so it's still effective)
|
||||||
$cache = getCacheName(join('', array_values($opt)).$_SERVER['REMOTE_USER'], '.feed');
|
$key = join('', array_values($opt)).'$'.$_SERVER['REMOTE_USER'].'$'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'];
|
||||||
$key = join('', array_values($opt)).$_SERVER['REMOTE_USER'];
|
|
||||||
$cache = new cache($key, '.feed');
|
$cache = new cache($key, '.feed');
|
||||||
|
|
||||||
// prepare cache depends
|
// prepare cache depends
|
||||||
|
@ -135,12 +141,10 @@ function rss_parseOptions() {
|
||||||
|
|
||||||
$opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none');
|
$opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none');
|
||||||
|
|
||||||
$type = valid_input_set(
|
$type = $INPUT->valid(
|
||||||
'type', array(
|
'type',
|
||||||
'rss', 'rss2', 'atom', 'atom1', 'rss1',
|
array( 'rss', 'rss2', 'atom', 'atom1', 'rss1'),
|
||||||
'default' => $conf['rss_type']
|
$conf['rss_type']
|
||||||
),
|
|
||||||
$_REQUEST
|
|
||||||
);
|
);
|
||||||
switch($type) {
|
switch($type) {
|
||||||
case 'rss':
|
case 'rss':
|
||||||
|
@ -182,7 +186,7 @@ function rss_parseOptions() {
|
||||||
function rss_buildItems(&$rss, &$data, $opt) {
|
function rss_buildItems(&$rss, &$data, $opt) {
|
||||||
global $conf;
|
global $conf;
|
||||||
global $lang;
|
global $lang;
|
||||||
/* @var auth_basic $auth */
|
/* @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
|
|
||||||
$eventData = array(
|
$eventData = array(
|
||||||
|
@ -293,18 +297,19 @@ function rss_buildItems(&$rss, &$data, $opt) {
|
||||||
case 'diff':
|
case 'diff':
|
||||||
case 'htmldiff':
|
case 'htmldiff':
|
||||||
if($ditem['media']) {
|
if($ditem['media']) {
|
||||||
$revs = getRevisions($id, 0, 1, 8192, true);
|
$medialog = new MediaChangeLog($id);
|
||||||
|
$revs = $medialog->getRevisions(0, 1);
|
||||||
$rev = $revs[0];
|
$rev = $revs[0];
|
||||||
$src_r = '';
|
$src_r = '';
|
||||||
$src_l = '';
|
$src_l = '';
|
||||||
|
|
||||||
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)), 300)) {
|
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)), 300)) {
|
||||||
$more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id));
|
$more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
|
||||||
$src_r = ml($id, $more);
|
$src_r = ml($id, $more, true, '&', true);
|
||||||
}
|
}
|
||||||
if($rev && $size = media_image_preview_size($id, $rev, new JpegMeta(mediaFN($id, $rev)), 300)) {
|
if($rev && $size = media_image_preview_size($id, $rev, new JpegMeta(mediaFN($id, $rev)), 300)) {
|
||||||
$more = 'rev='.$rev.'&w='.$size[0].'&h='.$size[1];
|
$more = 'rev='.$rev.'&w='.$size[0].'&h='.$size[1];
|
||||||
$src_l = ml($id, $more);
|
$src_l = ml($id, $more, true, '&', true);
|
||||||
}
|
}
|
||||||
$content = '';
|
$content = '';
|
||||||
if($src_r) {
|
if($src_r) {
|
||||||
|
@ -318,7 +323,8 @@ function rss_buildItems(&$rss, &$data, $opt) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
require_once(DOKU_INC.'inc/DifferenceEngine.php');
|
require_once(DOKU_INC.'inc/DifferenceEngine.php');
|
||||||
$revs = getRevisions($id, 0, 1);
|
$pagelog = new PageChangeLog($id);
|
||||||
|
$revs = $pagelog->getRevisions(0, 1);
|
||||||
$rev = $revs[0];
|
$rev = $revs[0];
|
||||||
|
|
||||||
if($rev) {
|
if($rev) {
|
||||||
|
@ -347,8 +353,8 @@ function rss_buildItems(&$rss, &$data, $opt) {
|
||||||
case 'html':
|
case 'html':
|
||||||
if($ditem['media']) {
|
if($ditem['media']) {
|
||||||
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) {
|
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) {
|
||||||
$more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id));
|
$more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
|
||||||
$src = ml($id, $more);
|
$src = ml($id, $more, true, '&', true);
|
||||||
$content = '<img src="'.$src.'" alt="'.$id.'" />';
|
$content = '<img src="'.$src.'" alt="'.$id.'" />';
|
||||||
} else {
|
} else {
|
||||||
$content = '';
|
$content = '';
|
||||||
|
@ -378,8 +384,8 @@ function rss_buildItems(&$rss, &$data, $opt) {
|
||||||
default:
|
default:
|
||||||
if($ditem['media']) {
|
if($ditem['media']) {
|
||||||
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) {
|
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) {
|
||||||
$more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id));
|
$more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
|
||||||
$src = ml($id, $more);
|
$src = ml($id, $more, true, '&', true);
|
||||||
$content = '<img src="'.$src.'" alt="'.$id.'" />';
|
$content = '<img src="'.$src.'" alt="'.$id.'" />';
|
||||||
} else {
|
} else {
|
||||||
$content = '';
|
$content = '';
|
||||||
|
|
|
@ -15,8 +15,8 @@ class EmailAddressValidator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check email address validity
|
* Check email address validity
|
||||||
* @param strEmailAddress Email address to be checked
|
* @param string $strEmailAddress Email address to be checked
|
||||||
* @return True if email is valid, false if not
|
* @return bool True if email is valid, false if not
|
||||||
*/
|
*/
|
||||||
public function check_email_address($strEmailAddress) {
|
public function check_email_address($strEmailAddress) {
|
||||||
|
|
||||||
|
@ -82,8 +82,8 @@ class EmailAddressValidator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks email section before "@" symbol for validity
|
* Checks email section before "@" symbol for validity
|
||||||
* @param strLocalPortion Text to be checked
|
* @param string $strLocalPortion Text to be checked
|
||||||
* @return True if local portion is valid, false if not
|
* @return bool True if local portion is valid, false if not
|
||||||
*/
|
*/
|
||||||
protected function check_local_portion($strLocalPortion) {
|
protected function check_local_portion($strLocalPortion) {
|
||||||
// Local portion can only be from 1 to 64 characters, inclusive.
|
// Local portion can only be from 1 to 64 characters, inclusive.
|
||||||
|
@ -113,8 +113,8 @@ class EmailAddressValidator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks email section after "@" symbol for validity
|
* Checks email section after "@" symbol for validity
|
||||||
* @param strDomainPortion Text to be checked
|
* @param string $strDomainPortion Text to be checked
|
||||||
* @return True if domain portion is valid, false if not
|
* @return bool True if domain portion is valid, false if not
|
||||||
*/
|
*/
|
||||||
protected function check_domain_portion($strDomainPortion) {
|
protected function check_domain_portion($strDomainPortion) {
|
||||||
// Total domain can only be from 1 to 255 characters, inclusive
|
// Total domain can only be from 1 to 255 characters, inclusive
|
||||||
|
@ -172,10 +172,10 @@ class EmailAddressValidator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check given text length is between defined bounds
|
* Check given text length is between defined bounds
|
||||||
* @param strText Text to be checked
|
* @param string $strText Text to be checked
|
||||||
* @param intMinimum Minimum acceptable length
|
* @param int $intMinimum Minimum acceptable length
|
||||||
* @param intMaximum Maximum acceptable length
|
* @param int $intMaximum Maximum acceptable length
|
||||||
* @return True if string is within bounds (inclusive), false if not
|
* @return bool True if string is within bounds (inclusive), false if not
|
||||||
*/
|
*/
|
||||||
protected function check_text_length($strText, $intMinimum, $intMaximum) {
|
protected function check_text_length($strText, $intMinimum, $intMaximum) {
|
||||||
// Minimum and maximum are both inclusive
|
// Minimum and maximum are both inclusive
|
||||||
|
|
|
@ -254,7 +254,13 @@ class HTTPClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// add SSL stream prefix if needed - needs SSL support in PHP
|
// add SSL stream prefix if needed - needs SSL support in PHP
|
||||||
if($port == 443 || $this->proxy_ssl) $server = 'ssl://'.$server;
|
if($port == 443 || $this->proxy_ssl) {
|
||||||
|
if(!in_array('ssl', stream_get_transports())) {
|
||||||
|
$this->status = -200;
|
||||||
|
$this->error = 'This PHP version does not support SSL - cannot connect to server';
|
||||||
|
}
|
||||||
|
$server = 'ssl://'.$server;
|
||||||
|
}
|
||||||
|
|
||||||
// prepare headers
|
// prepare headers
|
||||||
$headers = $this->headers;
|
$headers = $this->headers;
|
||||||
|
@ -304,11 +310,18 @@ class HTTPClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// try establish a CONNECT tunnel for SSL
|
// try establish a CONNECT tunnel for SSL
|
||||||
if($this->_ssltunnel($socket, $request_url)){
|
try {
|
||||||
// no keep alive for tunnels
|
if($this->_ssltunnel($socket, $request_url)){
|
||||||
$this->keep_alive = false;
|
// no keep alive for tunnels
|
||||||
// tunnel is authed already
|
$this->keep_alive = false;
|
||||||
if(isset($headers['Proxy-Authentication'])) unset($headers['Proxy-Authentication']);
|
// tunnel is authed already
|
||||||
|
if(isset($headers['Proxy-Authentication'])) unset($headers['Proxy-Authentication']);
|
||||||
|
}
|
||||||
|
} catch (HTTPClientException $e) {
|
||||||
|
$this->status = $e->getCode();
|
||||||
|
$this->error = $e->getMessage();
|
||||||
|
fclose($socket);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// keep alive?
|
// keep alive?
|
||||||
|
@ -363,7 +376,7 @@ class HTTPClient {
|
||||||
|
|
||||||
// get Status
|
// get Status
|
||||||
if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m))
|
if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m))
|
||||||
throw new HTTPClientException('Server returned bad answer');
|
throw new HTTPClientException('Server returned bad answer '.$r_headers);
|
||||||
|
|
||||||
$this->status = $m[2];
|
$this->status = $m[2];
|
||||||
|
|
||||||
|
@ -526,6 +539,7 @@ class HTTPClient {
|
||||||
*
|
*
|
||||||
* @param resource &$socket
|
* @param resource &$socket
|
||||||
* @param string &$requesturl
|
* @param string &$requesturl
|
||||||
|
* @throws HTTPClientException when a tunnel is needed but could not be established
|
||||||
* @return bool true if a tunnel was established
|
* @return bool true if a tunnel was established
|
||||||
*/
|
*/
|
||||||
function _ssltunnel(&$socket, &$requesturl){
|
function _ssltunnel(&$socket, &$requesturl){
|
||||||
|
@ -538,7 +552,7 @@ class HTTPClient {
|
||||||
$request = "CONNECT {$requestinfo['host']}:{$requestinfo['port']} HTTP/1.0".HTTP_NL;
|
$request = "CONNECT {$requestinfo['host']}:{$requestinfo['port']} HTTP/1.0".HTTP_NL;
|
||||||
$request .= "Host: {$requestinfo['host']}".HTTP_NL;
|
$request .= "Host: {$requestinfo['host']}".HTTP_NL;
|
||||||
if($this->proxy_user) {
|
if($this->proxy_user) {
|
||||||
'Proxy-Authorization Basic '.base64_encode($this->proxy_user.':'.$this->proxy_pass).HTTP_NL;
|
$request .= 'Proxy-Authorization: Basic '.base64_encode($this->proxy_user.':'.$this->proxy_pass).HTTP_NL;
|
||||||
}
|
}
|
||||||
$request .= HTTP_NL;
|
$request .= HTTP_NL;
|
||||||
|
|
||||||
|
@ -559,7 +573,8 @@ class HTTPClient {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
throw new HTTPClientException('Failed to establish secure proxy connection', -150);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -15,6 +15,8 @@ class Input {
|
||||||
public $post;
|
public $post;
|
||||||
/** @var GetInput Access $_GET parameters */
|
/** @var GetInput Access $_GET parameters */
|
||||||
public $get;
|
public $get;
|
||||||
|
/** @var ServerInput Access $_SERVER parameters */
|
||||||
|
public $server;
|
||||||
|
|
||||||
protected $access;
|
protected $access;
|
||||||
|
|
||||||
|
@ -25,6 +27,7 @@ class Input {
|
||||||
$this->access = &$_REQUEST;
|
$this->access = &$_REQUEST;
|
||||||
$this->post = new PostInput();
|
$this->post = new PostInput();
|
||||||
$this->get = new GetInput();
|
$this->get = new GetInput();
|
||||||
|
$this->server = new ServerInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -140,6 +143,26 @@ class Input {
|
||||||
return (string) $this->access[$name];
|
return (string) $this->access[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access a request parameter and make sure it is has a valid value
|
||||||
|
*
|
||||||
|
* Please note that comparisons to the valid values are not done typesafe (request vars
|
||||||
|
* are always strings) however the function will return the correct type from the $valids
|
||||||
|
* array when an match was found.
|
||||||
|
*
|
||||||
|
* @param string $name Parameter name
|
||||||
|
* @param array $valids Array of valid values
|
||||||
|
* @param mixed $default Default to return if parameter isn't set or not valid
|
||||||
|
* @return null|mixed
|
||||||
|
*/
|
||||||
|
public function valid($name, $valids, $default = null) {
|
||||||
|
if(!isset($this->access[$name])) return $default;
|
||||||
|
if(is_array($this->access[$name])) return $default; // we don't allow arrays
|
||||||
|
$found = array_search($this->access[$name], $valids);
|
||||||
|
if($found !== false) return $valids[$found]; // return the valid value for type safety
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Access a request parameter as bool
|
* Access a request parameter as bool
|
||||||
*
|
*
|
||||||
|
@ -260,3 +283,18 @@ class GetInput extends Input {
|
||||||
$_REQUEST[$name] = $value;
|
$_REQUEST[$name] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal class used for $_SERVER access in Input class
|
||||||
|
*/
|
||||||
|
class ServerInput extends Input {
|
||||||
|
protected $access;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the $access array, remove subclass members
|
||||||
|
*/
|
||||||
|
function __construct() {
|
||||||
|
$this->access = &$_SERVER;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -2929,7 +2929,8 @@ class JpegMeta {
|
||||||
$length = strlen($data) - $pos;
|
$length = strlen($data) - $pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
return substr($data, $pos, $length);
|
$rv = substr($data, $pos, $length);
|
||||||
|
return $rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
|
|
|
@ -39,6 +39,8 @@ class Mailer {
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$server = parse_url(DOKU_URL, PHP_URL_HOST);
|
$server = parse_url(DOKU_URL, PHP_URL_HOST);
|
||||||
if(strpos($server,'.') === false) $server = $server.'.localhost';
|
if(strpos($server,'.') === false) $server = $server.'.localhost';
|
||||||
|
@ -53,7 +55,7 @@ class Mailer {
|
||||||
|
|
||||||
// add some default headers for mailfiltering FS#2247
|
// add some default headers for mailfiltering FS#2247
|
||||||
$this->setHeader('X-Mailer', 'DokuWiki');
|
$this->setHeader('X-Mailer', 'DokuWiki');
|
||||||
$this->setHeader('X-DokuWiki-User', $_SERVER['REMOTE_USER']);
|
$this->setHeader('X-DokuWiki-User', $INPUT->server->str('REMOTE_USER'));
|
||||||
$this->setHeader('X-DokuWiki-Title', $conf['title']);
|
$this->setHeader('X-DokuWiki-Title', $conf['title']);
|
||||||
$this->setHeader('X-DokuWiki-Server', $server);
|
$this->setHeader('X-DokuWiki-Server', $server);
|
||||||
$this->setHeader('X-Auto-Response-Suppress', 'OOF');
|
$this->setHeader('X-Auto-Response-Suppress', 'OOF');
|
||||||
|
@ -181,6 +183,9 @@ class Mailer {
|
||||||
public function setBody($text, $textrep = null, $htmlrep = null, $html = null, $wrap = true) {
|
public function setBody($text, $textrep = null, $htmlrep = null, $html = null, $wrap = true) {
|
||||||
global $INFO;
|
global $INFO;
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$htmlrep = (array)$htmlrep;
|
$htmlrep = (array)$htmlrep;
|
||||||
$textrep = (array)$textrep;
|
$textrep = (array)$textrep;
|
||||||
|
|
||||||
|
@ -218,24 +223,24 @@ class Mailer {
|
||||||
$cip = gethostsbyaddrs($ip);
|
$cip = gethostsbyaddrs($ip);
|
||||||
$trep = array(
|
$trep = array(
|
||||||
'DATE' => dformat(),
|
'DATE' => dformat(),
|
||||||
'BROWSER' => $_SERVER['HTTP_USER_AGENT'],
|
'BROWSER' => $INPUT->server->str('HTTP_USER_AGENT'),
|
||||||
'IPADDRESS' => $ip,
|
'IPADDRESS' => $ip,
|
||||||
'HOSTNAME' => $cip,
|
'HOSTNAME' => $cip,
|
||||||
'TITLE' => $conf['title'],
|
'TITLE' => $conf['title'],
|
||||||
'DOKUWIKIURL' => DOKU_URL,
|
'DOKUWIKIURL' => DOKU_URL,
|
||||||
'USER' => $_SERVER['REMOTE_USER'],
|
'USER' => $INPUT->server->str('REMOTE_USER'),
|
||||||
'NAME' => $INFO['userinfo']['name'],
|
'NAME' => $INFO['userinfo']['name'],
|
||||||
'MAIL' => $INFO['userinfo']['mail'],
|
'MAIL' => $INFO['userinfo']['mail'],
|
||||||
);
|
);
|
||||||
$trep = array_merge($trep, (array)$textrep);
|
$trep = array_merge($trep, (array)$textrep);
|
||||||
$hrep = array(
|
$hrep = array(
|
||||||
'DATE' => '<i>'.hsc(dformat()).'</i>',
|
'DATE' => '<i>'.hsc(dformat()).'</i>',
|
||||||
'BROWSER' => hsc($_SERVER['HTTP_USER_AGENT']),
|
'BROWSER' => hsc($INPUT->server->str('HTTP_USER_AGENT')),
|
||||||
'IPADDRESS' => '<code>'.hsc($ip).'</code>',
|
'IPADDRESS' => '<code>'.hsc($ip).'</code>',
|
||||||
'HOSTNAME' => '<code>'.hsc($cip).'</code>',
|
'HOSTNAME' => '<code>'.hsc($cip).'</code>',
|
||||||
'TITLE' => hsc($conf['title']),
|
'TITLE' => hsc($conf['title']),
|
||||||
'DOKUWIKIURL' => '<a href="'.DOKU_URL.'">'.DOKU_URL.'</a>',
|
'DOKUWIKIURL' => '<a href="'.DOKU_URL.'">'.DOKU_URL.'</a>',
|
||||||
'USER' => hsc($_SERVER['REMOTE_USER']),
|
'USER' => hsc($INPUT->server->str('REMOTE_USER')),
|
||||||
'NAME' => hsc($INFO['userinfo']['name']),
|
'NAME' => hsc($INFO['userinfo']['name']),
|
||||||
'MAIL' => '<a href="mailto:"'.hsc($INFO['userinfo']['mail']).'">'.
|
'MAIL' => '<a href="mailto:"'.hsc($INFO['userinfo']['mail']).'">'.
|
||||||
hsc($INFO['userinfo']['mail']).'</a>',
|
hsc($INFO['userinfo']['mail']).'</a>',
|
||||||
|
@ -277,7 +282,7 @@ class Mailer {
|
||||||
/**
|
/**
|
||||||
* Add the To: recipients
|
* Add the To: recipients
|
||||||
*
|
*
|
||||||
* @see setAddress
|
* @see cleanAddress
|
||||||
* @param string|array $address Multiple adresses separated by commas or as array
|
* @param string|array $address Multiple adresses separated by commas or as array
|
||||||
*/
|
*/
|
||||||
public function to($address) {
|
public function to($address) {
|
||||||
|
@ -287,7 +292,7 @@ class Mailer {
|
||||||
/**
|
/**
|
||||||
* Add the Cc: recipients
|
* Add the Cc: recipients
|
||||||
*
|
*
|
||||||
* @see setAddress
|
* @see cleanAddress
|
||||||
* @param string|array $address Multiple adresses separated by commas or as array
|
* @param string|array $address Multiple adresses separated by commas or as array
|
||||||
*/
|
*/
|
||||||
public function cc($address) {
|
public function cc($address) {
|
||||||
|
@ -297,7 +302,7 @@ class Mailer {
|
||||||
/**
|
/**
|
||||||
* Add the Bcc: recipients
|
* Add the Bcc: recipients
|
||||||
*
|
*
|
||||||
* @see setAddress
|
* @see cleanAddress
|
||||||
* @param string|array $address Multiple adresses separated by commas or as array
|
* @param string|array $address Multiple adresses separated by commas or as array
|
||||||
*/
|
*/
|
||||||
public function bcc($address) {
|
public function bcc($address) {
|
||||||
|
@ -310,7 +315,7 @@ class Mailer {
|
||||||
* This is set to $conf['mailfrom'] when not specified so you shouldn't need
|
* This is set to $conf['mailfrom'] when not specified so you shouldn't need
|
||||||
* to call this function
|
* to call this function
|
||||||
*
|
*
|
||||||
* @see setAddress
|
* @see cleanAddress
|
||||||
* @param string $address from address
|
* @param string $address from address
|
||||||
*/
|
*/
|
||||||
public function from($address) {
|
public function from($address) {
|
||||||
|
@ -333,9 +338,9 @@ class Mailer {
|
||||||
* for headers. Addresses may not contain Non-ASCII data!
|
* for headers. Addresses may not contain Non-ASCII data!
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* setAddress("föö <foo@bar.com>, me@somewhere.com","TBcc");
|
* cc("föö <foo@bar.com>, me@somewhere.com","TBcc");
|
||||||
*
|
*
|
||||||
* @param string|array $address Multiple adresses separated by commas or as array
|
* @param string|array $addresses Multiple adresses separated by commas or as array
|
||||||
* @return bool|string the prepared header (can contain multiple lines)
|
* @return bool|string the prepared header (can contain multiple lines)
|
||||||
*/
|
*/
|
||||||
public function cleanAddress($addresses) {
|
public function cleanAddress($addresses) {
|
||||||
|
@ -522,7 +527,7 @@ class Mailer {
|
||||||
|
|
||||||
// clean up addresses
|
// clean up addresses
|
||||||
if(empty($this->headers['From'])) $this->from($conf['mailfrom']);
|
if(empty($this->headers['From'])) $this->from($conf['mailfrom']);
|
||||||
$addrs = array('To', 'From', 'Cc', 'Bcc');
|
$addrs = array('To', 'From', 'Cc', 'Bcc', 'Reply-To', 'Sender');
|
||||||
foreach($addrs as $addr) {
|
foreach($addrs as $addr) {
|
||||||
if(isset($this->headers[$addr])) {
|
if(isset($this->headers[$addr])) {
|
||||||
$this->headers[$addr] = $this->cleanAddress($this->headers[$addr]);
|
$this->headers[$addr] = $this->cleanAddress($this->headers[$addr]);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
/**
|
/**
|
||||||
* Increased whenever the API is changed
|
* Increased whenever the API is changed
|
||||||
*/
|
*/
|
||||||
define('DOKU_API_VERSION', 8);
|
define('DOKU_API_VERSION', 9);
|
||||||
|
|
||||||
class RemoteAPICore {
|
class RemoteAPICore {
|
||||||
|
|
||||||
|
@ -24,6 +24,10 @@ class RemoteAPICore {
|
||||||
'return' => 'int',
|
'return' => 'int',
|
||||||
'doc' => 'Tries to login with the given credentials and sets auth cookies.',
|
'doc' => 'Tries to login with the given credentials and sets auth cookies.',
|
||||||
'public' => '1'
|
'public' => '1'
|
||||||
|
), 'dokuwiki.logoff' => array(
|
||||||
|
'args' => array(),
|
||||||
|
'return' => 'int',
|
||||||
|
'doc' => 'Tries to logoff by expiring auth cookies and the associated PHP session.'
|
||||||
), 'dokuwiki.getPagelist' => array(
|
), 'dokuwiki.getPagelist' => array(
|
||||||
'args' => array('string', 'array'),
|
'args' => array('string', 'array'),
|
||||||
'return' => 'array',
|
'return' => 'array',
|
||||||
|
@ -374,7 +378,8 @@ class RemoteAPICore {
|
||||||
throw new RemoteException('The requested page does not exist', 121);
|
throw new RemoteException('The requested page does not exist', 121);
|
||||||
}
|
}
|
||||||
|
|
||||||
$info = getRevisionInfo($id, $time, 1024);
|
$pagelog = new PageChangeLog($id, 1024);
|
||||||
|
$info = $pagelog->getRevisionInfo($time);
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'name' => $id,
|
'name' => $id,
|
||||||
|
@ -646,11 +651,12 @@ class RemoteAPICore {
|
||||||
throw new RemoteException('Empty page ID', 131);
|
throw new RemoteException('Empty page ID', 131);
|
||||||
}
|
}
|
||||||
|
|
||||||
$revisions = getRevisions($id, $first, $conf['recent']+1);
|
$pagelog = new PageChangeLog($id);
|
||||||
|
$revisions = $pagelog->getRevisions($first, $conf['recent']+1);
|
||||||
|
|
||||||
if(count($revisions)==0 && $first!=0) {
|
if(count($revisions)==0 && $first!=0) {
|
||||||
$first=0;
|
$first=0;
|
||||||
$revisions = getRevisions($id, $first, $conf['recent']+1);
|
$revisions = $pagelog->getRevisions($first, $conf['recent']+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(count($revisions)>0 && $first==0) {
|
if(count($revisions)>0 && $first==0) {
|
||||||
|
@ -672,7 +678,8 @@ class RemoteAPICore {
|
||||||
// case this can lead to less pages being returned than
|
// case this can lead to less pages being returned than
|
||||||
// specified via $conf['recent']
|
// specified via $conf['recent']
|
||||||
if($time){
|
if($time){
|
||||||
$info = getRevisionInfo($id, $time, 1024);
|
$pagelog->setChunkSize(1024);
|
||||||
|
$info = $pagelog->getRevisionInfo($time);
|
||||||
if(!empty($info)) {
|
if(!empty($info)) {
|
||||||
$data['user'] = $info['user'];
|
$data['user'] = $info['user'];
|
||||||
$data['ip'] = $info['ip'];
|
$data['ip'] = $info['ip'];
|
||||||
|
@ -767,6 +774,17 @@ class RemoteAPICore {
|
||||||
return $ok;
|
return $ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function logoff(){
|
||||||
|
global $conf;
|
||||||
|
global $auth;
|
||||||
|
if(!$conf['useacl']) return 0;
|
||||||
|
if(!$auth) return 0;
|
||||||
|
|
||||||
|
auth_logoff();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
private function resolvePageId($id) {
|
private function resolvePageId($id) {
|
||||||
$id = cleanID($id);
|
$id = cleanID($id);
|
||||||
if(empty($id)) {
|
if(empty($id)) {
|
||||||
|
|
|
@ -131,9 +131,9 @@ class Sitemapper {
|
||||||
|
|
||||||
$encoded_sitemap_url = urlencode(wl('', array('do' => 'sitemap'), true, '&'));
|
$encoded_sitemap_url = urlencode(wl('', array('do' => 'sitemap'), true, '&'));
|
||||||
$ping_urls = array(
|
$ping_urls = array(
|
||||||
'google' => 'http://www.google.com/webmasters/sitemaps/ping?sitemap='.$encoded_sitemap_url,
|
'google' => 'http://www.google.com/webmasters/sitemaps/ping?sitemap='.$encoded_sitemap_url,
|
||||||
'yahoo' => 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=dokuwiki&url='.$encoded_sitemap_url,
|
|
||||||
'microsoft' => 'http://www.bing.com/webmaster/ping.aspx?siteMap='.$encoded_sitemap_url,
|
'microsoft' => 'http://www.bing.com/webmaster/ping.aspx?siteMap='.$encoded_sitemap_url,
|
||||||
|
'yandex' => 'http://blogs.yandex.ru/pings/?status=success&url='.$encoded_sitemap_url
|
||||||
);
|
);
|
||||||
|
|
||||||
$data = array('ping_urls' => $ping_urls,
|
$data = array('ping_urls' => $ping_urls,
|
||||||
|
|
|
@ -114,7 +114,7 @@ class Tar {
|
||||||
$header = $this->parseHeader($read);
|
$header = $this->parseHeader($read);
|
||||||
if(!is_array($header)) continue;
|
if(!is_array($header)) continue;
|
||||||
|
|
||||||
$this->skipbytes(ceil($header['size'] / 512) * 512, 1);
|
$this->skipbytes(ceil($header['size'] / 512) * 512);
|
||||||
$result[] = $header;
|
$result[] = $header;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ function act_dispatch(){
|
||||||
global $ID;
|
global $ID;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
global $QUERY;
|
global $QUERY;
|
||||||
|
/* @var Input $INPUT */
|
||||||
global $INPUT;
|
global $INPUT;
|
||||||
global $lang;
|
global $lang;
|
||||||
global $conf;
|
global $conf;
|
||||||
|
@ -94,7 +95,7 @@ function act_dispatch(){
|
||||||
|
|
||||||
// user profile changes
|
// user profile changes
|
||||||
if (in_array($ACT, array('profile','profile_delete'))) {
|
if (in_array($ACT, array('profile','profile_delete'))) {
|
||||||
if(!$_SERVER['REMOTE_USER']) {
|
if(!$INPUT->server->str('REMOTE_USER')) {
|
||||||
$ACT = 'login';
|
$ACT = 'login';
|
||||||
} else {
|
} else {
|
||||||
switch ($ACT) {
|
switch ($ACT) {
|
||||||
|
@ -190,7 +191,7 @@ function act_dispatch(){
|
||||||
unset($evt);
|
unset($evt);
|
||||||
|
|
||||||
// when action 'show', the intial not 'show' and POST, do a redirect
|
// when action 'show', the intial not 'show' and POST, do a redirect
|
||||||
if($ACT == 'show' && $preact != 'show' && strtolower($_SERVER['REQUEST_METHOD']) == 'post'){
|
if($ACT == 'show' && $preact != 'show' && strtolower($INPUT->server->str('REQUEST_METHOD')) == 'post'){
|
||||||
act_redirect($ID,$preact);
|
act_redirect($ID,$preact);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,6 +415,8 @@ function act_revert($act){
|
||||||
global $ID;
|
global $ID;
|
||||||
global $REV;
|
global $REV;
|
||||||
global $lang;
|
global $lang;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
// FIXME $INFO['writable'] currently refers to the attic version
|
// FIXME $INFO['writable'] currently refers to the attic version
|
||||||
// global $INFO;
|
// global $INFO;
|
||||||
// if (!$INFO['writable']) {
|
// if (!$INFO['writable']) {
|
||||||
|
@ -445,7 +448,7 @@ function act_revert($act){
|
||||||
session_write_close();
|
session_write_close();
|
||||||
|
|
||||||
// when done, show current page
|
// when done, show current page
|
||||||
$_SERVER['REQUEST_METHOD'] = 'post'; //should force a redirect
|
$INPUT->server->set('REQUEST_METHOD','post'); //should force a redirect
|
||||||
$REV = '';
|
$REV = '';
|
||||||
return 'show';
|
return 'show';
|
||||||
}
|
}
|
||||||
|
@ -493,17 +496,20 @@ function act_redirect_execute($opts){
|
||||||
function act_auth($act){
|
function act_auth($act){
|
||||||
global $ID;
|
global $ID;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
//already logged in?
|
//already logged in?
|
||||||
if(isset($_SERVER['REMOTE_USER']) && $act=='login'){
|
if($INPUT->server->has('REMOTE_USER') && $act=='login'){
|
||||||
return 'show';
|
return 'show';
|
||||||
}
|
}
|
||||||
|
|
||||||
//handle logout
|
//handle logout
|
||||||
if($act=='logout'){
|
if($act=='logout'){
|
||||||
$lockedby = checklock($ID); //page still locked?
|
$lockedby = checklock($ID); //page still locked?
|
||||||
if($lockedby == $_SERVER['REMOTE_USER'])
|
if($lockedby == $INPUT->server->str('REMOTE_USER')){
|
||||||
unlock($ID); //try to unlock
|
unlock($ID); //try to unlock
|
||||||
|
}
|
||||||
|
|
||||||
// do the logout stuff
|
// do the logout stuff
|
||||||
auth_logoff();
|
auth_logoff();
|
||||||
|
@ -697,7 +703,7 @@ function act_sitemap($act) {
|
||||||
|
|
||||||
// Send file
|
// Send file
|
||||||
//use x-sendfile header to pass the delivery to compatible webservers
|
//use x-sendfile header to pass the delivery to compatible webservers
|
||||||
if (http_sendfile($sitemap)) exit;
|
http_sendfile($sitemap);
|
||||||
|
|
||||||
readfile($sitemap);
|
readfile($sitemap);
|
||||||
exit;
|
exit;
|
||||||
|
@ -719,10 +725,11 @@ function act_subscription($act){
|
||||||
global $lang;
|
global $lang;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
global $ID;
|
global $ID;
|
||||||
|
/* @var Input $INPUT */
|
||||||
global $INPUT;
|
global $INPUT;
|
||||||
|
|
||||||
// subcriptions work for logged in users only
|
// subcriptions work for logged in users only
|
||||||
if(!$_SERVER['REMOTE_USER']) return 'show';
|
if(!$INPUT->server->str('REMOTE_USER')) return 'show';
|
||||||
|
|
||||||
// get and preprocess data.
|
// get and preprocess data.
|
||||||
$params = array();
|
$params = array();
|
||||||
|
@ -733,7 +740,7 @@ function act_subscription($act){
|
||||||
}
|
}
|
||||||
|
|
||||||
// any action given? if not just return and show the subscription page
|
// any action given? if not just return and show the subscription page
|
||||||
if(!$params['action'] || !checkSecurityToken()) return $act;
|
if(empty($params['action']) || !checkSecurityToken()) return $act;
|
||||||
|
|
||||||
// Handle POST data, may throw exception.
|
// Handle POST data, may throw exception.
|
||||||
trigger_event('ACTION_HANDLE_SUBSCRIBE', $params, 'subscription_handle_post');
|
trigger_event('ACTION_HANDLE_SUBSCRIBE', $params, 'subscription_handle_post');
|
||||||
|
@ -745,9 +752,9 @@ function act_subscription($act){
|
||||||
// Perform action.
|
// Perform action.
|
||||||
$sub = new Subscription();
|
$sub = new Subscription();
|
||||||
if($action == 'unsubscribe'){
|
if($action == 'unsubscribe'){
|
||||||
$ok = $sub->remove($target, $_SERVER['REMOTE_USER'], $style);
|
$ok = $sub->remove($target, $INPUT->server->str('REMOTE_USER'), $style);
|
||||||
}else{
|
}else{
|
||||||
$ok = $sub->add($target, $_SERVER['REMOTE_USER'], $style);
|
$ok = $sub->add($target, $INPUT->server->str('REMOTE_USER'), $style);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($ok) {
|
if($ok) {
|
||||||
|
@ -776,6 +783,8 @@ function act_subscription($act){
|
||||||
function subscription_handle_post(&$params) {
|
function subscription_handle_post(&$params) {
|
||||||
global $INFO;
|
global $INFO;
|
||||||
global $lang;
|
global $lang;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// Get and validate parameters.
|
// Get and validate parameters.
|
||||||
if (!isset($params['target'])) {
|
if (!isset($params['target'])) {
|
||||||
|
@ -806,7 +815,7 @@ function subscription_handle_post(&$params) {
|
||||||
}
|
}
|
||||||
if ($is === false) {
|
if ($is === false) {
|
||||||
throw new Exception(sprintf($lang['subscr_not_subscribed'],
|
throw new Exception(sprintf($lang['subscr_not_subscribed'],
|
||||||
$_SERVER['REMOTE_USER'],
|
$INPUT->server->str('REMOTE_USER'),
|
||||||
prettyprint_id($target)));
|
prettyprint_id($target)));
|
||||||
}
|
}
|
||||||
// subscription_set deletes a subscription if style = null.
|
// subscription_set deletes a subscription if style = null.
|
||||||
|
|
|
@ -131,6 +131,8 @@ function auth_setup() {
|
||||||
function auth_loadACL() {
|
function auth_loadACL() {
|
||||||
global $config_cascade;
|
global $config_cascade;
|
||||||
global $USERINFO;
|
global $USERINFO;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
if(!is_readable($config_cascade['acl']['default'])) return array();
|
if(!is_readable($config_cascade['acl']['default'])) return array();
|
||||||
|
|
||||||
|
@ -145,10 +147,10 @@ function auth_loadACL() {
|
||||||
// substitute user wildcard first (its 1:1)
|
// substitute user wildcard first (its 1:1)
|
||||||
if(strstr($line, '%USER%')){
|
if(strstr($line, '%USER%')){
|
||||||
// if user is not logged in, this ACL line is meaningless - skip it
|
// if user is not logged in, this ACL line is meaningless - skip it
|
||||||
if (!isset($_SERVER['REMOTE_USER'])) continue;
|
if (!$INPUT->server->has('REMOTE_USER')) continue;
|
||||||
|
|
||||||
$id = str_replace('%USER%',cleanID($_SERVER['REMOTE_USER']),$id);
|
$id = str_replace('%USER%',cleanID($INPUT->server->str('REMOTE_USER')),$id);
|
||||||
$rest = str_replace('%USER%',auth_nameencode($_SERVER['REMOTE_USER']),$rest);
|
$rest = str_replace('%USER%',auth_nameencode($INPUT->server->str('REMOTE_USER')),$rest);
|
||||||
}
|
}
|
||||||
|
|
||||||
// substitute group wildcard (its 1:m)
|
// substitute group wildcard (its 1:m)
|
||||||
|
@ -217,6 +219,8 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
|
||||||
global $lang;
|
global $lang;
|
||||||
/* @var DokuWiki_Auth_Plugin $auth */
|
/* @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$sticky ? $sticky = true : $sticky = false; //sanity check
|
$sticky ? $sticky = true : $sticky = false; //sanity check
|
||||||
|
|
||||||
|
@ -226,7 +230,7 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
|
||||||
//usual login
|
//usual login
|
||||||
if($auth->checkPass($user, $pass)) {
|
if($auth->checkPass($user, $pass)) {
|
||||||
// make logininfo globally available
|
// make logininfo globally available
|
||||||
$_SERVER['REMOTE_USER'] = $user;
|
$INPUT->server->set('REMOTE_USER', $user);
|
||||||
$secret = auth_cookiesalt(!$sticky, true); //bind non-sticky to session
|
$secret = auth_cookiesalt(!$sticky, true); //bind non-sticky to session
|
||||||
auth_setCookie($user, auth_encrypt($pass, $secret), $sticky);
|
auth_setCookie($user, auth_encrypt($pass, $secret), $sticky);
|
||||||
return true;
|
return true;
|
||||||
|
@ -253,7 +257,7 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
|
||||||
) {
|
) {
|
||||||
|
|
||||||
// he has session, cookie and browser right - let him in
|
// he has session, cookie and browser right - let him in
|
||||||
$_SERVER['REMOTE_USER'] = $user;
|
$INPUT->server->set('REMOTE_USER', $user);
|
||||||
$USERINFO = $session['info']; //FIXME move all references to session
|
$USERINFO = $session['info']; //FIXME move all references to session
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -288,7 +292,10 @@ function auth_validateToken($token) {
|
||||||
}
|
}
|
||||||
// still here? trust the session data
|
// still here? trust the session data
|
||||||
global $USERINFO;
|
global $USERINFO;
|
||||||
$_SERVER['REMOTE_USER'] = $_SESSION[DOKU_COOKIE]['auth']['user'];
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
|
$INPUT->server->set('REMOTE_USER',$_SESSION[DOKU_COOKIE]['auth']['user']);
|
||||||
$USERINFO = $_SESSION[DOKU_COOKIE]['auth']['info'];
|
$USERINFO = $_SESSION[DOKU_COOKIE]['auth']['info'];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -321,11 +328,14 @@ function auth_createToken() {
|
||||||
* @return string a MD5 sum of various browser headers
|
* @return string a MD5 sum of various browser headers
|
||||||
*/
|
*/
|
||||||
function auth_browseruid() {
|
function auth_browseruid() {
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$ip = clientIP(true);
|
$ip = clientIP(true);
|
||||||
$uid = '';
|
$uid = '';
|
||||||
$uid .= $_SERVER['HTTP_USER_AGENT'];
|
$uid .= $INPUT->server->str('HTTP_USER_AGENT');
|
||||||
$uid .= $_SERVER['HTTP_ACCEPT_ENCODING'];
|
$uid .= $INPUT->server->str('HTTP_ACCEPT_ENCODING');
|
||||||
$uid .= $_SERVER['HTTP_ACCEPT_CHARSET'];
|
$uid .= $INPUT->server->str('HTTP_ACCEPT_CHARSET');
|
||||||
$uid .= substr($ip, 0, strpos($ip, '.'));
|
$uid .= substr($ip, 0, strpos($ip, '.'));
|
||||||
$uid = strtolower($uid);
|
$uid = strtolower($uid);
|
||||||
return md5($uid);
|
return md5($uid);
|
||||||
|
@ -511,6 +521,8 @@ function auth_logoff($keepbc = false) {
|
||||||
global $USERINFO;
|
global $USERINFO;
|
||||||
/* @var DokuWiki_Auth_Plugin $auth */
|
/* @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// make sure the session is writable (it usually is)
|
// make sure the session is writable (it usually is)
|
||||||
@session_start();
|
@session_start();
|
||||||
|
@ -523,16 +535,11 @@ function auth_logoff($keepbc = false) {
|
||||||
unset($_SESSION[DOKU_COOKIE]['auth']['info']);
|
unset($_SESSION[DOKU_COOKIE]['auth']['info']);
|
||||||
if(!$keepbc && isset($_SESSION[DOKU_COOKIE]['bc']))
|
if(!$keepbc && isset($_SESSION[DOKU_COOKIE]['bc']))
|
||||||
unset($_SESSION[DOKU_COOKIE]['bc']);
|
unset($_SESSION[DOKU_COOKIE]['bc']);
|
||||||
if(isset($_SERVER['REMOTE_USER']))
|
$INPUT->server->remove('REMOTE_USER');
|
||||||
unset($_SERVER['REMOTE_USER']);
|
|
||||||
$USERINFO = null; //FIXME
|
$USERINFO = null; //FIXME
|
||||||
|
|
||||||
$cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
|
$cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
|
||||||
if(version_compare(PHP_VERSION, '5.2.0', '>')) {
|
setcookie(DOKU_COOKIE, '', time() - 600000, $cookieDir, '', ($conf['securecookie'] && is_ssl()), true);
|
||||||
setcookie(DOKU_COOKIE, '', time() - 600000, $cookieDir, '', ($conf['securecookie'] && is_ssl()), true);
|
|
||||||
} else {
|
|
||||||
setcookie(DOKU_COOKIE, '', time() - 600000, $cookieDir, '', ($conf['securecookie'] && is_ssl()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if($auth) $auth->logOff();
|
if($auth) $auth->logOff();
|
||||||
}
|
}
|
||||||
|
@ -557,13 +564,16 @@ function auth_ismanager($user = null, $groups = null, $adminonly = false) {
|
||||||
global $USERINFO;
|
global $USERINFO;
|
||||||
/* @var DokuWiki_Auth_Plugin $auth */
|
/* @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
|
|
||||||
if(!$auth) return false;
|
if(!$auth) return false;
|
||||||
if(is_null($user)) {
|
if(is_null($user)) {
|
||||||
if(!isset($_SERVER['REMOTE_USER'])) {
|
if(!$INPUT->server->has('REMOTE_USER')) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
$user = $_SERVER['REMOTE_USER'];
|
$user = $INPUT->server->str('REMOTE_USER');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(is_null($groups)) {
|
if(is_null($groups)) {
|
||||||
|
@ -655,23 +665,47 @@ function auth_isMember($memberlist, $user, array $groups) {
|
||||||
function auth_quickaclcheck($id) {
|
function auth_quickaclcheck($id) {
|
||||||
global $conf;
|
global $conf;
|
||||||
global $USERINFO;
|
global $USERINFO;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
# if no ACL is used always return upload rights
|
# if no ACL is used always return upload rights
|
||||||
if(!$conf['useacl']) return AUTH_UPLOAD;
|
if(!$conf['useacl']) return AUTH_UPLOAD;
|
||||||
return auth_aclcheck($id, $_SERVER['REMOTE_USER'], $USERINFO['grps']);
|
return auth_aclcheck($id, $INPUT->server->str('REMOTE_USER'), $USERINFO['grps']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum rights a user has for
|
* Returns the maximum rights a user has for the given ID or its namespace
|
||||||
* the given ID or its namespace
|
|
||||||
*
|
*
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
*
|
* @triggers AUTH_ACL_CHECK
|
||||||
* @param string $id page ID (needs to be resolved and cleaned)
|
* @param string $id page ID (needs to be resolved and cleaned)
|
||||||
* @param string $user Username
|
* @param string $user Username
|
||||||
* @param array|null $groups Array of groups the user is in
|
* @param array|null $groups Array of groups the user is in
|
||||||
* @return int permission level
|
* @return int permission level
|
||||||
*/
|
*/
|
||||||
function auth_aclcheck($id, $user, $groups) {
|
function auth_aclcheck($id, $user, $groups) {
|
||||||
|
$data = array(
|
||||||
|
'id' => $id,
|
||||||
|
'user' => $user,
|
||||||
|
'groups' => $groups
|
||||||
|
);
|
||||||
|
|
||||||
|
return trigger_event('AUTH_ACL_CHECK', $data, 'auth_aclcheck_cb');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* default ACL check method
|
||||||
|
*
|
||||||
|
* DO NOT CALL DIRECTLY, use auth_aclcheck() instead
|
||||||
|
*
|
||||||
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
|
* @param array $data event data
|
||||||
|
* @return int permission level
|
||||||
|
*/
|
||||||
|
function auth_aclcheck_cb($data) {
|
||||||
|
$id =& $data['id'];
|
||||||
|
$user =& $data['user'];
|
||||||
|
$groups =& $data['groups'];
|
||||||
|
|
||||||
global $conf;
|
global $conf;
|
||||||
global $AUTH_ACL;
|
global $AUTH_ACL;
|
||||||
/* @var DokuWiki_Auth_Plugin $auth */
|
/* @var DokuWiki_Auth_Plugin $auth */
|
||||||
|
@ -823,6 +857,12 @@ function auth_nameencode($name, $skip_group = false) {
|
||||||
return $cache[$name][$skip_group];
|
return $cache[$name][$skip_group];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* callback encodes the matches
|
||||||
|
*
|
||||||
|
* @param array $matches first complete match, next matching subpatterms
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function auth_nameencode_callback($matches) {
|
function auth_nameencode_callback($matches) {
|
||||||
return '%'.dechex(ord(substr($matches[1],-1)));
|
return '%'.dechex(ord(substr($matches[1],-1)));
|
||||||
}
|
}
|
||||||
|
@ -1034,18 +1074,18 @@ function updateprofile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if($conf['profileconfirm']) {
|
if($conf['profileconfirm']) {
|
||||||
if(!$auth->checkPass($_SERVER['REMOTE_USER'], $INPUT->post->str('oldpass'))) {
|
if(!$auth->checkPass($INPUT->server->str('REMOTE_USER'), $INPUT->post->str('oldpass'))) {
|
||||||
msg($lang['badpassconfirm'], -1);
|
msg($lang['badpassconfirm'], -1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($result = $auth->triggerUserMod('modify', array($_SERVER['REMOTE_USER'], $changes))) {
|
if($result = $auth->triggerUserMod('modify', array($INPUT->server->str('REMOTE_USER'), $changes))) {
|
||||||
// update cookie and session with the changed data
|
// update cookie and session with the changed data
|
||||||
if($changes['pass']) {
|
if($changes['pass']) {
|
||||||
list( /*user*/, $sticky, /*pass*/) = auth_getCookie();
|
list( /*user*/, $sticky, /*pass*/) = auth_getCookie();
|
||||||
$pass = auth_encrypt($changes['pass'], auth_cookiesalt(!$sticky, true));
|
$pass = auth_encrypt($changes['pass'], auth_cookiesalt(!$sticky, true));
|
||||||
auth_setCookie($_SERVER['REMOTE_USER'], $pass, (bool) $sticky);
|
auth_setCookie($INPUT->server->str('REMOTE_USER'), $pass, (bool) $sticky);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1053,6 +1093,11 @@ function updateprofile() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete the current logged-in user
|
||||||
|
*
|
||||||
|
* @return bool true on success, false on any error
|
||||||
|
*/
|
||||||
function auth_deleteprofile(){
|
function auth_deleteprofile(){
|
||||||
global $conf;
|
global $conf;
|
||||||
global $lang;
|
global $lang;
|
||||||
|
@ -1076,13 +1121,13 @@ function auth_deleteprofile(){
|
||||||
}
|
}
|
||||||
|
|
||||||
if($conf['profileconfirm']) {
|
if($conf['profileconfirm']) {
|
||||||
if(!$auth->checkPass($_SERVER['REMOTE_USER'], $INPUT->post->str('oldpass'))) {
|
if(!$auth->checkPass($INPUT->server->str('REMOTE_USER'), $INPUT->post->str('oldpass'))) {
|
||||||
msg($lang['badpassconfirm'], -1);
|
msg($lang['badpassconfirm'], -1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$deleted[] = $_SERVER['REMOTE_USER'];
|
$deleted[] = $INPUT->server->str('REMOTE_USER');
|
||||||
if($auth->triggerUserMod('delete', array($deleted))) {
|
if($auth->triggerUserMod('delete', array($deleted))) {
|
||||||
// force and immediate logout including removing the sticky cookie
|
// force and immediate logout including removing the sticky cookie
|
||||||
auth_logoff();
|
auth_logoff();
|
||||||
|
@ -1286,11 +1331,8 @@ function auth_setCookie($user, $pass, $sticky) {
|
||||||
$cookie = base64_encode($user).'|'.((int) $sticky).'|'.base64_encode($pass);
|
$cookie = base64_encode($user).'|'.((int) $sticky).'|'.base64_encode($pass);
|
||||||
$cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
|
$cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
|
||||||
$time = $sticky ? (time() + 60 * 60 * 24 * 365) : 0; //one year
|
$time = $sticky ? (time() + 60 * 60 * 24 * 365) : 0; //one year
|
||||||
if(version_compare(PHP_VERSION, '5.2.0', '>')) {
|
setcookie(DOKU_COOKIE, $cookie, $time, $cookieDir, '', ($conf['securecookie'] && is_ssl()), true);
|
||||||
setcookie(DOKU_COOKIE, $cookie, $time, $cookieDir, '', ($conf['securecookie'] && is_ssl()), true);
|
|
||||||
} else {
|
|
||||||
setcookie(DOKU_COOKIE, $cookie, $time, $cookieDir, '', ($conf['securecookie'] && is_ssl()));
|
|
||||||
}
|
|
||||||
// set session
|
// set session
|
||||||
$_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
|
$_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
|
||||||
$_SESSION[DOKU_COOKIE]['auth']['pass'] = sha1($pass);
|
$_SESSION[DOKU_COOKIE]['auth']['pass'] = sha1($pass);
|
||||||
|
|
|
@ -8,16 +8,25 @@
|
||||||
|
|
||||||
if(!defined('DOKU_INC')) die('meh.');
|
if(!defined('DOKU_INC')) die('meh.');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic handling of caching
|
||||||
|
*/
|
||||||
class cache {
|
class cache {
|
||||||
var $key = ''; // primary identifier for this item
|
public $key = ''; // primary identifier for this item
|
||||||
var $ext = ''; // file ext for cache data, secondary identifier for this item
|
public $ext = ''; // file ext for cache data, secondary identifier for this item
|
||||||
var $cache = ''; // cache file name
|
public $cache = ''; // cache file name
|
||||||
var $depends = array(); // array containing cache dependency information,
|
public $depends = array(); // array containing cache dependency information,
|
||||||
// used by _useCache to determine cache validity
|
// used by _useCache to determine cache validity
|
||||||
|
|
||||||
var $_event = ''; // event to be triggered during useCache
|
var $_event = ''; // event to be triggered during useCache
|
||||||
|
var $_time;
|
||||||
|
var $_nocache = false; // if set to true, cache will not be used or stored
|
||||||
|
|
||||||
function cache($key,$ext) {
|
/**
|
||||||
|
* @param string $key primary identifier
|
||||||
|
* @param string $ext file extension
|
||||||
|
*/
|
||||||
|
public function cache($key,$ext) {
|
||||||
$this->key = $key;
|
$this->key = $key;
|
||||||
$this->ext = $ext;
|
$this->ext = $ext;
|
||||||
$this->cache = getCacheName($key,$ext);
|
$this->cache = getCacheName($key,$ext);
|
||||||
|
@ -26,7 +35,7 @@ class cache {
|
||||||
/**
|
/**
|
||||||
* public method to determine whether the cache can be used
|
* public method to determine whether the cache can be used
|
||||||
*
|
*
|
||||||
* to assist in cetralisation of event triggering and calculation of cache statistics,
|
* to assist in centralisation of event triggering and calculation of cache statistics,
|
||||||
* don't override this function override _useCache()
|
* don't override this function override _useCache()
|
||||||
*
|
*
|
||||||
* @param array $depends array of cache dependencies, support dependecies:
|
* @param array $depends array of cache dependencies, support dependecies:
|
||||||
|
@ -36,7 +45,7 @@ class cache {
|
||||||
*
|
*
|
||||||
* @return bool true if cache can be used, false otherwise
|
* @return bool true if cache can be used, false otherwise
|
||||||
*/
|
*/
|
||||||
function useCache($depends=array()) {
|
public function useCache($depends=array()) {
|
||||||
$this->depends = $depends;
|
$this->depends = $depends;
|
||||||
$this->_addDependencies();
|
$this->_addDependencies();
|
||||||
|
|
||||||
|
@ -55,12 +64,15 @@ class cache {
|
||||||
* age - expire cache if older than age (seconds)
|
* age - expire cache if older than age (seconds)
|
||||||
* files - expire cache if any file in this array was updated more recently than the cache
|
* files - expire cache if any file in this array was updated more recently than the cache
|
||||||
*
|
*
|
||||||
|
* Note that this function needs to be public as it is used as callback for the event handler
|
||||||
|
*
|
||||||
* can be overridden
|
* can be overridden
|
||||||
*
|
*
|
||||||
* @return bool see useCache()
|
* @return bool see useCache()
|
||||||
*/
|
*/
|
||||||
function _useCache() {
|
public function _useCache() {
|
||||||
|
|
||||||
|
if ($this->_nocache) return false; // caching turned off
|
||||||
if (!empty($this->depends['purge'])) return false; // purge requested?
|
if (!empty($this->depends['purge'])) return false; // purge requested?
|
||||||
if (!($this->_time = @filemtime($this->cache))) return false; // cache exists?
|
if (!($this->_time = @filemtime($this->cache))) return false; // cache exists?
|
||||||
|
|
||||||
|
@ -83,7 +95,7 @@ class cache {
|
||||||
* it should not remove any existing dependencies and
|
* it should not remove any existing dependencies and
|
||||||
* it should only overwrite a dependency when the new value is more stringent than the old
|
* it should only overwrite a dependency when the new value is more stringent than the old
|
||||||
*/
|
*/
|
||||||
function _addDependencies() {
|
protected function _addDependencies() {
|
||||||
global $INPUT;
|
global $INPUT;
|
||||||
if ($INPUT->has('purge')) $this->depends['purge'] = true; // purge requested
|
if ($INPUT->has('purge')) $this->depends['purge'] = true; // purge requested
|
||||||
}
|
}
|
||||||
|
@ -94,7 +106,7 @@ class cache {
|
||||||
* @param bool $clean true to clean line endings, false to leave line endings alone
|
* @param bool $clean true to clean line endings, false to leave line endings alone
|
||||||
* @return string cache contents
|
* @return string cache contents
|
||||||
*/
|
*/
|
||||||
function retrieveCache($clean=true) {
|
public function retrieveCache($clean=true) {
|
||||||
return io_readFile($this->cache, $clean);
|
return io_readFile($this->cache, $clean);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,14 +116,16 @@ class cache {
|
||||||
* @param string $data the data to be cached
|
* @param string $data the data to be cached
|
||||||
* @return bool true on success, false otherwise
|
* @return bool true on success, false otherwise
|
||||||
*/
|
*/
|
||||||
function storeCache($data) {
|
public function storeCache($data) {
|
||||||
|
if ($this->_nocache) return false;
|
||||||
|
|
||||||
return io_savefile($this->cache, $data);
|
return io_savefile($this->cache, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remove any cached data associated with this cache instance
|
* remove any cached data associated with this cache instance
|
||||||
*/
|
*/
|
||||||
function removeCache() {
|
public function removeCache() {
|
||||||
@unlink($this->cache);
|
@unlink($this->cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,7 +136,7 @@ class cache {
|
||||||
* @param bool $success result of this cache use attempt
|
* @param bool $success result of this cache use attempt
|
||||||
* @return bool pass-thru $success value
|
* @return bool pass-thru $success value
|
||||||
*/
|
*/
|
||||||
function _stats($success) {
|
protected function _stats($success) {
|
||||||
global $conf;
|
global $conf;
|
||||||
static $stats = null;
|
static $stats = null;
|
||||||
static $file;
|
static $file;
|
||||||
|
@ -157,14 +171,23 @@ class cache {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parser caching
|
||||||
|
*/
|
||||||
class cache_parser extends cache {
|
class cache_parser extends cache {
|
||||||
|
|
||||||
var $file = ''; // source file for cache
|
public $file = ''; // source file for cache
|
||||||
var $mode = ''; // input mode (represents the processing the input file will undergo)
|
public $mode = ''; // input mode (represents the processing the input file will undergo)
|
||||||
|
|
||||||
var $_event = 'PARSER_CACHE_USE';
|
var $_event = 'PARSER_CACHE_USE';
|
||||||
|
|
||||||
function cache_parser($id, $file, $mode) {
|
/**
|
||||||
|
*
|
||||||
|
* @param string $id page id
|
||||||
|
* @param string $file source file for cache
|
||||||
|
* @param string $mode input mode
|
||||||
|
*/
|
||||||
|
public function cache_parser($id, $file, $mode) {
|
||||||
if ($id) $this->page = $id;
|
if ($id) $this->page = $id;
|
||||||
$this->file = $file;
|
$this->file = $file;
|
||||||
$this->mode = $mode;
|
$this->mode = $mode;
|
||||||
|
@ -172,24 +195,25 @@ class cache_parser extends cache {
|
||||||
parent::cache($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode);
|
parent::cache($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _useCache() {
|
/**
|
||||||
|
* method contains cache use decision logic
|
||||||
|
*
|
||||||
|
* @return bool see useCache()
|
||||||
|
*/
|
||||||
|
public function _useCache() {
|
||||||
|
|
||||||
if (!@file_exists($this->file)) return false; // source exists?
|
if (!@file_exists($this->file)) return false; // source exists?
|
||||||
return parent::_useCache();
|
return parent::_useCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
function _addDependencies() {
|
protected function _addDependencies() {
|
||||||
global $conf, $config_cascade;
|
|
||||||
|
|
||||||
$this->depends['age'] = isset($this->depends['age']) ?
|
|
||||||
min($this->depends['age'],$conf['cachetime']) : $conf['cachetime'];
|
|
||||||
|
|
||||||
// parser cache file dependencies ...
|
// parser cache file dependencies ...
|
||||||
$files = array($this->file, // ... source
|
$files = array($this->file, // ... source
|
||||||
DOKU_INC.'inc/parser/parser.php', // ... parser
|
DOKU_INC.'inc/parser/parser.php', // ... parser
|
||||||
DOKU_INC.'inc/parser/handler.php', // ... handler
|
DOKU_INC.'inc/parser/handler.php', // ... handler
|
||||||
);
|
);
|
||||||
$files = array_merge($files, getConfigFiles('main')); // ... wiki settings
|
$files = array_merge($files, getConfigFiles('main')); // ... wiki settings
|
||||||
|
|
||||||
$this->depends['files'] = !empty($this->depends['files']) ? array_merge($files, $this->depends['files']) : $files;
|
$this->depends['files'] = !empty($this->depends['files']) ? array_merge($files, $this->depends['files']) : $files;
|
||||||
parent::_addDependencies();
|
parent::_addDependencies();
|
||||||
|
@ -197,8 +221,17 @@ class cache_parser extends cache {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Caching of data of renderer
|
||||||
|
*/
|
||||||
class cache_renderer extends cache_parser {
|
class cache_renderer extends cache_parser {
|
||||||
function _useCache() {
|
|
||||||
|
/**
|
||||||
|
* method contains cache use decision logic
|
||||||
|
*
|
||||||
|
* @return bool see useCache()
|
||||||
|
*/
|
||||||
|
public function _useCache() {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
if (!parent::_useCache()) return false;
|
if (!parent::_useCache()) return false;
|
||||||
|
@ -231,7 +264,19 @@ class cache_renderer extends cache_parser {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _addDependencies() {
|
protected function _addDependencies() {
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
// default renderer cache file 'age' is dependent on 'cachetime' setting, two special values:
|
||||||
|
// -1 : do not cache (should not be overridden)
|
||||||
|
// 0 : cache never expires (can be overridden) - no need to set depends['age']
|
||||||
|
if ($conf['cachetime'] == -1) {
|
||||||
|
$this->_nocache = true;
|
||||||
|
return;
|
||||||
|
} elseif ($conf['cachetime'] > 0) {
|
||||||
|
$this->depends['age'] = isset($this->depends['age']) ?
|
||||||
|
min($this->depends['age'],$conf['cachetime']) : $conf['cachetime'];
|
||||||
|
}
|
||||||
|
|
||||||
// renderer cache file dependencies ...
|
// renderer cache file dependencies ...
|
||||||
$files = array(
|
$files = array(
|
||||||
|
@ -253,18 +298,39 @@ class cache_renderer extends cache_parser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Caching of parser instructions
|
||||||
|
*/
|
||||||
class cache_instructions extends cache_parser {
|
class cache_instructions extends cache_parser {
|
||||||
|
|
||||||
function cache_instructions($id, $file) {
|
/**
|
||||||
|
* @param string $id page id
|
||||||
|
* @param string $file source file for cache
|
||||||
|
*/
|
||||||
|
public function cache_instructions($id, $file) {
|
||||||
parent::cache_parser($id, $file, 'i');
|
parent::cache_parser($id, $file, 'i');
|
||||||
}
|
}
|
||||||
|
|
||||||
function retrieveCache($clean=true) {
|
/**
|
||||||
|
* retrieve the cached data
|
||||||
|
*
|
||||||
|
* @param bool $clean true to clean line endings, false to leave line endings alone
|
||||||
|
* @return string cache contents
|
||||||
|
*/
|
||||||
|
public function retrieveCache($clean=true) {
|
||||||
$contents = io_readFile($this->cache, false);
|
$contents = io_readFile($this->cache, false);
|
||||||
return !empty($contents) ? unserialize($contents) : array();
|
return !empty($contents) ? unserialize($contents) : array();
|
||||||
}
|
}
|
||||||
|
|
||||||
function storeCache($instructions) {
|
/**
|
||||||
|
* cache $instructions
|
||||||
|
*
|
||||||
|
* @param string $instructions the instruction to be cached
|
||||||
|
* @return bool true on success, false otherwise
|
||||||
|
*/
|
||||||
|
public function storeCache($instructions) {
|
||||||
|
if ($this->_nocache) return false;
|
||||||
|
|
||||||
return io_savefile($this->cache,serialize($instructions));
|
return io_savefile($this->cache,serialize($instructions));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,8 @@ function parseChangelogLine($line) {
|
||||||
*/
|
*/
|
||||||
function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
|
function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
|
||||||
global $conf, $INFO;
|
global $conf, $INFO;
|
||||||
|
/** @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// check for special flags as keys
|
// check for special flags as keys
|
||||||
if (!is_array($flags)) { $flags = array(); }
|
if (!is_array($flags)) { $flags = array(); }
|
||||||
|
@ -65,7 +67,7 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
|
||||||
|
|
||||||
if(!$date) $date = time(); //use current time if none supplied
|
if(!$date) $date = time(); //use current time if none supplied
|
||||||
$remote = (!$flagExternalEdit)?clientIP(true):'127.0.0.1';
|
$remote = (!$flagExternalEdit)?clientIP(true):'127.0.0.1';
|
||||||
$user = (!$flagExternalEdit)?$_SERVER['REMOTE_USER']:'';
|
$user = (!$flagExternalEdit)?$INPUT->server->str('REMOTE_USER'):'';
|
||||||
|
|
||||||
$strip = array("\t", "\n");
|
$strip = array("\t", "\n");
|
||||||
$logline = array(
|
$logline = array(
|
||||||
|
@ -117,12 +119,14 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
|
||||||
*/
|
*/
|
||||||
function addMediaLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
|
function addMediaLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/** @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$id = cleanid($id);
|
$id = cleanid($id);
|
||||||
|
|
||||||
if(!$date) $date = time(); //use current time if none supplied
|
if(!$date) $date = time(); //use current time if none supplied
|
||||||
$remote = clientIP(true);
|
$remote = clientIP(true);
|
||||||
$user = $_SERVER['REMOTE_USER'];
|
$user = $INPUT->server->str('REMOTE_USER');
|
||||||
|
|
||||||
$strip = array("\t", "\n");
|
$strip = array("\t", "\n");
|
||||||
$logline = array(
|
$logline = array(
|
||||||
|
@ -333,6 +337,665 @@ function _handleRecent($line,$ns,$flags,&$seen){
|
||||||
return $recent;
|
return $recent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ChangeLog
|
||||||
|
* methods for handling of changelog of pages or media files
|
||||||
|
*/
|
||||||
|
abstract class ChangeLog {
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
protected $id;
|
||||||
|
/** @var int */
|
||||||
|
protected $chunk_size;
|
||||||
|
/** @var array */
|
||||||
|
protected $cache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param string $id page id
|
||||||
|
* @param int $chunk_size maximum block size read from file
|
||||||
|
*/
|
||||||
|
public function __construct($id, $chunk_size = 8192) {
|
||||||
|
global $cache_revinfo;
|
||||||
|
|
||||||
|
$this->cache =& $cache_revinfo;
|
||||||
|
if(!isset($this->cache[$id])) {
|
||||||
|
$this->cache[$id] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->id = $id;
|
||||||
|
$this->setChunkSize($chunk_size);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set chunk size for file reading
|
||||||
|
* Chunk size zero let read whole file at once
|
||||||
|
*
|
||||||
|
* @param int $chunk_size maximum block size read from file
|
||||||
|
*/
|
||||||
|
public function setChunkSize($chunk_size) {
|
||||||
|
if(!is_numeric($chunk_size)) $chunk_size = 0;
|
||||||
|
|
||||||
|
$this->chunk_size = (int) max($chunk_size, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns path to changelog
|
||||||
|
*
|
||||||
|
* @return string path to file
|
||||||
|
*/
|
||||||
|
abstract protected function getChangelogFilename();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns path to current page/media
|
||||||
|
*
|
||||||
|
* @return string path to file
|
||||||
|
*/
|
||||||
|
abstract protected function getFilename();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the changelog information for a specific page id and revision (timestamp)
|
||||||
|
*
|
||||||
|
* Adjacent changelog lines are optimistically parsed and cached to speed up
|
||||||
|
* consecutive calls to getRevisionInfo. For large changelog files, only the chunk
|
||||||
|
* containing the requested changelog line is read.
|
||||||
|
*
|
||||||
|
* @param int $rev revision timestamp
|
||||||
|
* @return bool|array false or array with entries:
|
||||||
|
* - date: unix timestamp
|
||||||
|
* - ip: IPv4 address (127.0.0.1)
|
||||||
|
* - type: log line type
|
||||||
|
* - id: page id
|
||||||
|
* - user: user name
|
||||||
|
* - sum: edit summary (or action reason)
|
||||||
|
* - extra: extra data (varies by line type)
|
||||||
|
*
|
||||||
|
* @author Ben Coburn <btcoburn@silicodon.net>
|
||||||
|
* @author Kate Arzamastseva <pshns@ukr.net>
|
||||||
|
*/
|
||||||
|
public function getRevisionInfo($rev) {
|
||||||
|
$rev = max($rev, 0);
|
||||||
|
|
||||||
|
// check if it's already in the memory cache
|
||||||
|
if(isset($this->cache[$this->id]) && isset($this->cache[$this->id][$rev])) {
|
||||||
|
return $this->cache[$this->id][$rev];
|
||||||
|
}
|
||||||
|
|
||||||
|
//read lines from changelog
|
||||||
|
list($fp, $lines) = $this->readloglines($rev);
|
||||||
|
if($fp) {
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
if(empty($lines)) return false;
|
||||||
|
|
||||||
|
// parse and cache changelog lines
|
||||||
|
foreach($lines as $value) {
|
||||||
|
$tmp = parseChangelogLine($value);
|
||||||
|
if($tmp !== false) {
|
||||||
|
$this->cache[$this->id][$tmp['date']] = $tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!isset($this->cache[$this->id][$rev])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $this->cache[$this->id][$rev];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a list of page revisions numbers
|
||||||
|
*
|
||||||
|
* Does not guarantee that the revision exists in the attic,
|
||||||
|
* only that a line with the date exists in the changelog.
|
||||||
|
* By default the current revision is skipped.
|
||||||
|
*
|
||||||
|
* The current revision is automatically skipped when the page exists.
|
||||||
|
* See $INFO['meta']['last_change'] for the current revision.
|
||||||
|
* A negative $first let read the current revision too.
|
||||||
|
*
|
||||||
|
* For efficiency, the log lines are parsed and cached for later
|
||||||
|
* calls to getRevisionInfo. Large changelog files are read
|
||||||
|
* backwards in chunks until the requested number of changelog
|
||||||
|
* lines are recieved.
|
||||||
|
*
|
||||||
|
* @param int $first skip the first n changelog lines
|
||||||
|
* @param int $num number of revisions to return
|
||||||
|
* @return array with the revision timestamps
|
||||||
|
*
|
||||||
|
* @author Ben Coburn <btcoburn@silicodon.net>
|
||||||
|
* @author Kate Arzamastseva <pshns@ukr.net>
|
||||||
|
*/
|
||||||
|
public function getRevisions($first, $num) {
|
||||||
|
$revs = array();
|
||||||
|
$lines = array();
|
||||||
|
$count = 0;
|
||||||
|
|
||||||
|
$num = max($num, 0);
|
||||||
|
if($num == 0) {
|
||||||
|
return $revs;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($first < 0) {
|
||||||
|
$first = 0;
|
||||||
|
} else if(@file_exists($this->getFilename())) {
|
||||||
|
// skip current revision if the page exists
|
||||||
|
$first = max($first + 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$file = $this->getChangelogFilename();
|
||||||
|
|
||||||
|
if(!@file_exists($file)) {
|
||||||
|
return $revs;
|
||||||
|
}
|
||||||
|
if(filesize($file) < $this->chunk_size || $this->chunk_size == 0) {
|
||||||
|
// read whole file
|
||||||
|
$lines = file($file);
|
||||||
|
if($lines === false) {
|
||||||
|
return $revs;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// read chunks backwards
|
||||||
|
$fp = fopen($file, 'rb'); // "file pointer"
|
||||||
|
if($fp === false) {
|
||||||
|
return $revs;
|
||||||
|
}
|
||||||
|
fseek($fp, 0, SEEK_END);
|
||||||
|
$tail = ftell($fp);
|
||||||
|
|
||||||
|
// chunk backwards
|
||||||
|
$finger = max($tail - $this->chunk_size, 0);
|
||||||
|
while($count < $num + $first) {
|
||||||
|
$nl = $this->getNewlinepointer($fp, $finger);
|
||||||
|
|
||||||
|
// was the chunk big enough? if not, take another bite
|
||||||
|
if($nl > 0 && $tail <= $nl) {
|
||||||
|
$finger = max($finger - $this->chunk_size, 0);
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
$finger = $nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read chunk
|
||||||
|
$chunk = '';
|
||||||
|
$read_size = max($tail - $finger, 0); // found chunk size
|
||||||
|
$got = 0;
|
||||||
|
while($got < $read_size && !feof($fp)) {
|
||||||
|
$tmp = @fread($fp, max(min($this->chunk_size, $read_size - $got), 0));
|
||||||
|
if($tmp === false) {
|
||||||
|
break;
|
||||||
|
} //error state
|
||||||
|
$got += strlen($tmp);
|
||||||
|
$chunk .= $tmp;
|
||||||
|
}
|
||||||
|
$tmp = explode("\n", $chunk);
|
||||||
|
array_pop($tmp); // remove trailing newline
|
||||||
|
|
||||||
|
// combine with previous chunk
|
||||||
|
$count += count($tmp);
|
||||||
|
$lines = array_merge($tmp, $lines);
|
||||||
|
|
||||||
|
// next chunk
|
||||||
|
if($finger == 0) {
|
||||||
|
break;
|
||||||
|
} // already read all the lines
|
||||||
|
else {
|
||||||
|
$tail = $finger;
|
||||||
|
$finger = max($tail - $this->chunk_size, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
// skip parsing extra lines
|
||||||
|
$num = max(min(count($lines) - $first, $num), 0);
|
||||||
|
if ($first > 0 && $num > 0) { $lines = array_slice($lines, max(count($lines) - $first - $num, 0), $num); }
|
||||||
|
else if($first > 0 && $num == 0) { $lines = array_slice($lines, 0, max(count($lines) - $first, 0)); }
|
||||||
|
else if($first == 0 && $num > 0) { $lines = array_slice($lines, max(count($lines) - $num, 0)); }
|
||||||
|
|
||||||
|
// handle lines in reverse order
|
||||||
|
for($i = count($lines) - 1; $i >= 0; $i--) {
|
||||||
|
$tmp = parseChangelogLine($lines[$i]);
|
||||||
|
if($tmp !== false) {
|
||||||
|
$this->cache[$this->id][$tmp['date']] = $tmp;
|
||||||
|
$revs[] = $tmp['date'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $revs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the nth revision left or right handside for a specific page id and revision (timestamp)
|
||||||
|
*
|
||||||
|
* For large changelog files, only the chunk containing the
|
||||||
|
* reference revision $rev is read and sometimes a next chunck.
|
||||||
|
*
|
||||||
|
* Adjacent changelog lines are optimistically parsed and cached to speed up
|
||||||
|
* consecutive calls to getRevisionInfo.
|
||||||
|
*
|
||||||
|
* @param int $rev revision timestamp used as startdate (doesn't need to be revisionnumber)
|
||||||
|
* @param int $direction give position of returned revision with respect to $rev; positive=next, negative=prev
|
||||||
|
* @return bool|int
|
||||||
|
* timestamp of the requested revision
|
||||||
|
* otherwise false
|
||||||
|
*/
|
||||||
|
public function getRelativeRevision($rev, $direction) {
|
||||||
|
$rev = max($rev, 0);
|
||||||
|
$direction = (int) $direction;
|
||||||
|
|
||||||
|
//no direction given or last rev, so no follow-up
|
||||||
|
if(!$direction || ($direction > 0 && $this->isCurrentRevision($rev))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//get lines from changelog
|
||||||
|
list($fp, $lines, $head, $tail, $eof) = $this->readloglines($rev);
|
||||||
|
if(empty($lines)) return false;
|
||||||
|
|
||||||
|
// look for revisions later/earlier then $rev, when founded count till the wanted revision is reached
|
||||||
|
// also parse and cache changelog lines for getRevisionInfo().
|
||||||
|
$revcounter = 0;
|
||||||
|
$relativerev = false;
|
||||||
|
$checkotherchunck = true; //always runs once
|
||||||
|
while(!$relativerev && $checkotherchunck) {
|
||||||
|
$tmp = array();
|
||||||
|
//parse in normal or reverse order
|
||||||
|
$count = count($lines);
|
||||||
|
if($direction > 0) {
|
||||||
|
$start = 0;
|
||||||
|
$step = 1;
|
||||||
|
} else {
|
||||||
|
$start = $count - 1;
|
||||||
|
$step = -1;
|
||||||
|
}
|
||||||
|
for($i = $start; $i >= 0 && $i < $count; $i = $i + $step) {
|
||||||
|
$tmp = parseChangelogLine($lines[$i]);
|
||||||
|
if($tmp !== false) {
|
||||||
|
$this->cache[$this->id][$tmp['date']] = $tmp;
|
||||||
|
//look for revs older/earlier then reference $rev and select $direction-th one
|
||||||
|
if(($direction > 0 && $tmp['date'] > $rev) || ($direction < 0 && $tmp['date'] < $rev)) {
|
||||||
|
$revcounter++;
|
||||||
|
if($revcounter == abs($direction)) {
|
||||||
|
$relativerev = $tmp['date'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//true when $rev is found, but not the wanted follow-up.
|
||||||
|
$checkotherchunck = $fp
|
||||||
|
&& ($tmp['date'] == $rev || ($revcounter > 0 && !$relativerev))
|
||||||
|
&& !(($tail == $eof && $direction > 0) || ($head == 0 && $direction < 0));
|
||||||
|
|
||||||
|
if($checkotherchunck) {
|
||||||
|
list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, $direction);
|
||||||
|
|
||||||
|
if(empty($lines)) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($fp) {
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $relativerev;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns revisions around rev1 and rev2
|
||||||
|
* When available it returns $max entries for each revision
|
||||||
|
*
|
||||||
|
* @param int $rev1 oldest revision timestamp
|
||||||
|
* @param int $rev2 newest revision timestamp (0 looks up last revision)
|
||||||
|
* @param int $max maximum number of revisions returned
|
||||||
|
* @return array with two arrays with revisions surrounding rev1 respectively rev2
|
||||||
|
*/
|
||||||
|
public function getRevisionsAround($rev1, $rev2, $max = 50) {
|
||||||
|
$max = floor(abs($max) / 2)*2 + 1;
|
||||||
|
$rev1 = max($rev1, 0);
|
||||||
|
$rev2 = max($rev2, 0);
|
||||||
|
|
||||||
|
if($rev2) {
|
||||||
|
if($rev2 < $rev1) {
|
||||||
|
$rev = $rev2;
|
||||||
|
$rev2 = $rev1;
|
||||||
|
$rev1 = $rev;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//empty right side means a removed page. Look up last revision.
|
||||||
|
$revs = $this->getRevisions(-1, 1);
|
||||||
|
$rev2 = $revs[0];
|
||||||
|
}
|
||||||
|
//collect revisions around rev2
|
||||||
|
list($revs2, $allrevs, $fp, $lines, $head, $tail) = $this->retrieveRevisionsAround($rev2, $max);
|
||||||
|
|
||||||
|
if(empty($revs2)) return array(array(), array());
|
||||||
|
|
||||||
|
//collect revisions around rev1
|
||||||
|
$index = array_search($rev1, $allrevs);
|
||||||
|
if($index === false) {
|
||||||
|
//no overlapping revisions
|
||||||
|
list($revs1,,,,,) = $this->retrieveRevisionsAround($rev1, $max);
|
||||||
|
if(empty($revs1)) $revs1 = array();
|
||||||
|
} else {
|
||||||
|
//revisions overlaps, reuse revisions around rev2
|
||||||
|
$revs1 = $allrevs;
|
||||||
|
while($head > 0) {
|
||||||
|
for($i = count($lines) - 1; $i >= 0; $i--) {
|
||||||
|
$tmp = parseChangelogLine($lines[$i]);
|
||||||
|
if($tmp !== false) {
|
||||||
|
$this->cache[$this->id][$tmp['date']] = $tmp;
|
||||||
|
$revs1[] = $tmp['date'];
|
||||||
|
$index++;
|
||||||
|
|
||||||
|
if($index > floor($max / 2)) break 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, -1);
|
||||||
|
}
|
||||||
|
sort($revs1);
|
||||||
|
//return wanted selection
|
||||||
|
$revs1 = array_slice($revs1, max($index - floor($max/2), 0), $max);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(array_reverse($revs1), array_reverse($revs2));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns lines from changelog.
|
||||||
|
* If file larger than $chuncksize, only chunck is read that could contain $rev.
|
||||||
|
*
|
||||||
|
* @param int $rev revision timestamp
|
||||||
|
* @return array(fp, array(changeloglines), $head, $tail, $eof)|bool
|
||||||
|
* returns false when not succeed. fp only defined for chuck reading, needs closing.
|
||||||
|
*/
|
||||||
|
protected function readloglines($rev) {
|
||||||
|
$file = $this->getChangelogFilename();
|
||||||
|
|
||||||
|
if(!@file_exists($file)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fp = null;
|
||||||
|
$head = 0;
|
||||||
|
$tail = 0;
|
||||||
|
$eof = 0;
|
||||||
|
|
||||||
|
if(filesize($file) < $this->chunk_size || $this->chunk_size == 0) {
|
||||||
|
// read whole file
|
||||||
|
$lines = file($file);
|
||||||
|
if($lines === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// read by chunk
|
||||||
|
$fp = fopen($file, 'rb'); // "file pointer"
|
||||||
|
if($fp === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$head = 0;
|
||||||
|
fseek($fp, 0, SEEK_END);
|
||||||
|
$eof = ftell($fp);
|
||||||
|
$tail = $eof;
|
||||||
|
|
||||||
|
// find chunk
|
||||||
|
while($tail - $head > $this->chunk_size) {
|
||||||
|
$finger = $head + floor(($tail - $head) / 2.0);
|
||||||
|
$finger = $this->getNewlinepointer($fp, $finger);
|
||||||
|
$tmp = fgets($fp);
|
||||||
|
if($finger == $head || $finger == $tail) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$tmp = parseChangelogLine($tmp);
|
||||||
|
$finger_rev = $tmp['date'];
|
||||||
|
|
||||||
|
if($finger_rev > $rev) {
|
||||||
|
$tail = $finger;
|
||||||
|
} else {
|
||||||
|
$head = $finger;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($tail - $head < 1) {
|
||||||
|
// cound not find chunk, assume requested rev is missing
|
||||||
|
fclose($fp);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lines = $this->readChunk($fp, $head, $tail);
|
||||||
|
}
|
||||||
|
return array(
|
||||||
|
$fp,
|
||||||
|
$lines,
|
||||||
|
$head,
|
||||||
|
$tail,
|
||||||
|
$eof
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read chunk and return array with lines of given chunck.
|
||||||
|
* Has no check if $head and $tail are really at a new line
|
||||||
|
*
|
||||||
|
* @param $fp resource filepointer
|
||||||
|
* @param $head int start point chunck
|
||||||
|
* @param $tail int end point chunck
|
||||||
|
* @return array lines read from chunck
|
||||||
|
*/
|
||||||
|
protected function readChunk($fp, $head, $tail) {
|
||||||
|
$chunk = '';
|
||||||
|
$chunk_size = max($tail - $head, 0); // found chunk size
|
||||||
|
$got = 0;
|
||||||
|
fseek($fp, $head);
|
||||||
|
while($got < $chunk_size && !feof($fp)) {
|
||||||
|
$tmp = @fread($fp, max(min($this->chunk_size, $chunk_size - $got), 0));
|
||||||
|
if($tmp === false) { //error state
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$got += strlen($tmp);
|
||||||
|
$chunk .= $tmp;
|
||||||
|
}
|
||||||
|
$lines = explode("\n", $chunk);
|
||||||
|
array_pop($lines); // remove trailing newline
|
||||||
|
return $lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set pointer to first new line after $finger and return its position
|
||||||
|
*
|
||||||
|
* @param resource $fp filepointer
|
||||||
|
* @param $finger int a pointer
|
||||||
|
* @return int pointer
|
||||||
|
*/
|
||||||
|
protected function getNewlinepointer($fp, $finger) {
|
||||||
|
fseek($fp, $finger);
|
||||||
|
$nl = $finger;
|
||||||
|
if($finger > 0) {
|
||||||
|
fgets($fp); // slip the finger forward to a new line
|
||||||
|
$nl = ftell($fp);
|
||||||
|
}
|
||||||
|
return $nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether given revision is the current page
|
||||||
|
*
|
||||||
|
* @param int $rev timestamp of current page
|
||||||
|
* @return bool true if $rev is current revision, otherwise false
|
||||||
|
*/
|
||||||
|
public function isCurrentRevision($rev) {
|
||||||
|
return $rev == @filemtime($this->getFilename());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the next lines of the changelog of the chunck before head or after tail
|
||||||
|
*
|
||||||
|
* @param resource $fp filepointer
|
||||||
|
* @param int $head position head of last chunk
|
||||||
|
* @param int $tail position tail of last chunk
|
||||||
|
* @param int $direction positive forward, negative backward
|
||||||
|
* @return array with entries:
|
||||||
|
* - $lines: changelog lines of readed chunk
|
||||||
|
* - $head: head of chunk
|
||||||
|
* - $tail: tail of chunk
|
||||||
|
*/
|
||||||
|
protected function readAdjacentChunk($fp, $head, $tail, $direction) {
|
||||||
|
if(!$fp) return array(array(), $head, $tail);
|
||||||
|
|
||||||
|
if($direction > 0) {
|
||||||
|
//read forward
|
||||||
|
$head = $tail;
|
||||||
|
$tail = $head + floor($this->chunk_size * (2 / 3));
|
||||||
|
$tail = $this->getNewlinepointer($fp, $tail);
|
||||||
|
} else {
|
||||||
|
//read backward
|
||||||
|
$tail = $head;
|
||||||
|
$head = max($tail - $this->chunk_size, 0);
|
||||||
|
while(true) {
|
||||||
|
$nl = $this->getNewlinepointer($fp, $head);
|
||||||
|
// was the chunk big enough? if not, take another bite
|
||||||
|
if($nl > 0 && $tail <= $nl) {
|
||||||
|
$head = max($head - $this->chunk_size, 0);
|
||||||
|
} else {
|
||||||
|
$head = $nl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//load next chunck
|
||||||
|
$lines = $this->readChunk($fp, $head, $tail);
|
||||||
|
return array($lines, $head, $tail);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collect the $max revisions near to the timestamp $rev
|
||||||
|
*
|
||||||
|
* @param int $rev revision timestamp
|
||||||
|
* @param int $max maximum number of revisions to be returned
|
||||||
|
* @return bool|array
|
||||||
|
* return array with entries:
|
||||||
|
* - $requestedrevs: array of with $max revision timestamps
|
||||||
|
* - $revs: all parsed revision timestamps
|
||||||
|
* - $fp: filepointer only defined for chuck reading, needs closing.
|
||||||
|
* - $lines: non-parsed changelog lines before the parsed revisions
|
||||||
|
* - $head: position of first readed changelogline
|
||||||
|
* - $lasttail: position of end of last readed changelogline
|
||||||
|
* otherwise false
|
||||||
|
*/
|
||||||
|
protected function retrieveRevisionsAround($rev, $max) {
|
||||||
|
//get lines from changelog
|
||||||
|
list($fp, $lines, $starthead, $starttail, $eof) = $this->readloglines($rev);
|
||||||
|
if(empty($lines)) return false;
|
||||||
|
|
||||||
|
//parse chunk containing $rev, and read forward more chunks until $max/2 is reached
|
||||||
|
$head = $starthead;
|
||||||
|
$tail = $starttail;
|
||||||
|
$revs = array();
|
||||||
|
$aftercount = $beforecount = 0;
|
||||||
|
while(count($lines) > 0) {
|
||||||
|
foreach($lines as $line) {
|
||||||
|
$tmp = parseChangelogLine($line);
|
||||||
|
if($tmp !== false) {
|
||||||
|
$this->cache[$this->id][$tmp['date']] = $tmp;
|
||||||
|
$revs[] = $tmp['date'];
|
||||||
|
if($tmp['date'] >= $rev) {
|
||||||
|
//count revs after reference $rev
|
||||||
|
$aftercount++;
|
||||||
|
if($aftercount == 1) $beforecount = count($revs);
|
||||||
|
}
|
||||||
|
//enough revs after reference $rev?
|
||||||
|
if($aftercount > floor($max / 2)) break 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//retrieve next chunk
|
||||||
|
list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, 1);
|
||||||
|
}
|
||||||
|
if($aftercount == 0) return false;
|
||||||
|
|
||||||
|
$lasttail = $tail;
|
||||||
|
|
||||||
|
//read additional chuncks backward until $max/2 is reached and total number of revs is equal to $max
|
||||||
|
$lines = array();
|
||||||
|
$i = 0;
|
||||||
|
if($aftercount > 0) {
|
||||||
|
$head = $starthead;
|
||||||
|
$tail = $starttail;
|
||||||
|
while($head > 0) {
|
||||||
|
list($lines, $head, $tail) = $this->readAdjacentChunk($fp, $head, $tail, -1);
|
||||||
|
|
||||||
|
for($i = count($lines) - 1; $i >= 0; $i--) {
|
||||||
|
$tmp = parseChangelogLine($lines[$i]);
|
||||||
|
if($tmp !== false) {
|
||||||
|
$this->cache[$this->id][$tmp['date']] = $tmp;
|
||||||
|
$revs[] = $tmp['date'];
|
||||||
|
$beforecount++;
|
||||||
|
//enough revs before reference $rev?
|
||||||
|
if($beforecount > max(floor($max / 2), $max - $aftercount)) break 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort($revs);
|
||||||
|
|
||||||
|
//keep only non-parsed lines
|
||||||
|
$lines = array_slice($lines, 0, $i);
|
||||||
|
//trunk desired selection
|
||||||
|
$requestedrevs = array_slice($revs, -$max, $max);
|
||||||
|
|
||||||
|
return array($requestedrevs, $revs, $fp, $lines, $head, $lasttail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class PageChangelog handles changelog of a wiki page
|
||||||
|
*/
|
||||||
|
class PageChangelog extends ChangeLog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns path to changelog
|
||||||
|
*
|
||||||
|
* @return string path to file
|
||||||
|
*/
|
||||||
|
protected function getChangelogFilename() {
|
||||||
|
return metaFN($this->id, '.changes');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns path to current page/media
|
||||||
|
*
|
||||||
|
* @return string path to file
|
||||||
|
*/
|
||||||
|
protected function getFilename() {
|
||||||
|
return wikiFN($this->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class MediaChangelog handles changelog of a media file
|
||||||
|
*/
|
||||||
|
class MediaChangelog extends ChangeLog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns path to changelog
|
||||||
|
*
|
||||||
|
* @return string path to file
|
||||||
|
*/
|
||||||
|
protected function getChangelogFilename() {
|
||||||
|
return mediaMetaFN($this->id, '.changes');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns path to current page/media
|
||||||
|
*
|
||||||
|
* @return string path to file
|
||||||
|
*/
|
||||||
|
protected function getFilename() {
|
||||||
|
return mediaFN($this->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the changelog information for a specific page id
|
* Get the changelog information for a specific page id
|
||||||
* and revision (timestamp). Adjacent changelog lines
|
* and revision (timestamp). Adjacent changelog lines
|
||||||
|
@ -341,88 +1004,18 @@ function _handleRecent($line,$ns,$flags,&$seen){
|
||||||
* changelog files, only the chunk containing the
|
* changelog files, only the chunk containing the
|
||||||
* requested changelog line is read.
|
* requested changelog line is read.
|
||||||
*
|
*
|
||||||
|
* @deprecated 20-11-2013
|
||||||
|
*
|
||||||
* @author Ben Coburn <btcoburn@silicodon.net>
|
* @author Ben Coburn <btcoburn@silicodon.net>
|
||||||
* @author Kate Arzamastseva <pshns@ukr.net>
|
* @author Kate Arzamastseva <pshns@ukr.net>
|
||||||
*/
|
*/
|
||||||
function getRevisionInfo($id, $rev, $chunk_size=8192, $media=false) {
|
function getRevisionInfo($id, $rev, $chunk_size = 8192, $media = false) {
|
||||||
global $cache_revinfo;
|
if($media) {
|
||||||
$cache =& $cache_revinfo;
|
$changelog = new MediaChangeLog($id, $chunk_size);
|
||||||
if (!isset($cache[$id])) { $cache[$id] = array(); }
|
|
||||||
$rev = max($rev, 0);
|
|
||||||
|
|
||||||
// check if it's already in the memory cache
|
|
||||||
if (isset($cache[$id]) && isset($cache[$id][$rev])) {
|
|
||||||
return $cache[$id][$rev];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($media) {
|
|
||||||
$file = mediaMetaFN($id, '.changes');
|
|
||||||
} else {
|
} else {
|
||||||
$file = metaFN($id, '.changes');
|
$changelog = new PageChangeLog($id, $chunk_size);
|
||||||
}
|
}
|
||||||
if (!@file_exists($file)) { return false; }
|
return $changelog->getRevisionInfo($rev);
|
||||||
if (filesize($file)<$chunk_size || $chunk_size==0) {
|
|
||||||
// read whole file
|
|
||||||
$lines = file($file);
|
|
||||||
if ($lines===false) { return false; }
|
|
||||||
} else {
|
|
||||||
// read by chunk
|
|
||||||
$fp = fopen($file, 'rb'); // "file pointer"
|
|
||||||
if ($fp===false) { return false; }
|
|
||||||
$head = 0;
|
|
||||||
fseek($fp, 0, SEEK_END);
|
|
||||||
$tail = ftell($fp);
|
|
||||||
$finger = 0;
|
|
||||||
$finger_rev = 0;
|
|
||||||
|
|
||||||
// find chunk
|
|
||||||
while ($tail-$head>$chunk_size) {
|
|
||||||
$finger = $head+floor(($tail-$head)/2.0);
|
|
||||||
fseek($fp, $finger);
|
|
||||||
fgets($fp); // slip the finger forward to a new line
|
|
||||||
$finger = ftell($fp);
|
|
||||||
$tmp = fgets($fp); // then read at that location
|
|
||||||
$tmp = parseChangelogLine($tmp);
|
|
||||||
$finger_rev = $tmp['date'];
|
|
||||||
if ($finger==$head || $finger==$tail) { break; }
|
|
||||||
if ($finger_rev>$rev) {
|
|
||||||
$tail = $finger;
|
|
||||||
} else {
|
|
||||||
$head = $finger;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($tail-$head<1) {
|
|
||||||
// cound not find chunk, assume requested rev is missing
|
|
||||||
fclose($fp);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// read chunk
|
|
||||||
$chunk = '';
|
|
||||||
$chunk_size = max($tail-$head, 0); // found chunk size
|
|
||||||
$got = 0;
|
|
||||||
fseek($fp, $head);
|
|
||||||
while ($got<$chunk_size && !feof($fp)) {
|
|
||||||
$tmp = @fread($fp, max($chunk_size-$got, 0));
|
|
||||||
if ($tmp===false) { break; } //error state
|
|
||||||
$got += strlen($tmp);
|
|
||||||
$chunk .= $tmp;
|
|
||||||
}
|
|
||||||
$lines = explode("\n", $chunk);
|
|
||||||
array_pop($lines); // remove trailing newline
|
|
||||||
fclose($fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parse and cache changelog lines
|
|
||||||
foreach ($lines as $value) {
|
|
||||||
$tmp = parseChangelogLine($value);
|
|
||||||
if ($tmp!==false) {
|
|
||||||
$cache[$id][$tmp['date']] = $tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!isset($cache[$id][$rev])) { return false; }
|
|
||||||
return $cache[$id][$rev];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -443,106 +1036,16 @@ function getRevisionInfo($id, $rev, $chunk_size=8192, $media=false) {
|
||||||
* backwards in chunks until the requested number of changelog
|
* backwards in chunks until the requested number of changelog
|
||||||
* lines are recieved.
|
* lines are recieved.
|
||||||
*
|
*
|
||||||
|
* @deprecated 20-11-2013
|
||||||
|
*
|
||||||
* @author Ben Coburn <btcoburn@silicodon.net>
|
* @author Ben Coburn <btcoburn@silicodon.net>
|
||||||
* @author Kate Arzamastseva <pshns@ukr.net>
|
* @author Kate Arzamastseva <pshns@ukr.net>
|
||||||
*/
|
*/
|
||||||
function getRevisions($id, $first, $num, $chunk_size=8192, $media=false) {
|
function getRevisions($id, $first, $num, $chunk_size = 8192, $media = false) {
|
||||||
global $cache_revinfo;
|
if($media) {
|
||||||
$cache =& $cache_revinfo;
|
$changelog = new MediaChangeLog($id, $chunk_size);
|
||||||
if (!isset($cache[$id])) { $cache[$id] = array(); }
|
|
||||||
|
|
||||||
$revs = array();
|
|
||||||
$lines = array();
|
|
||||||
$count = 0;
|
|
||||||
if ($media) {
|
|
||||||
$file = mediaMetaFN($id, '.changes');
|
|
||||||
} else {
|
} else {
|
||||||
$file = metaFN($id, '.changes');
|
$changelog = new PageChangeLog($id, $chunk_size);
|
||||||
}
|
}
|
||||||
$num = max($num, 0);
|
return $changelog->getRevisions($first, $num);
|
||||||
if ($num == 0) { return $revs; }
|
|
||||||
|
|
||||||
$chunk_size = max($chunk_size, 0);
|
|
||||||
if ($first<0) {
|
|
||||||
$first = 0;
|
|
||||||
} else if (!$media && @file_exists(wikiFN($id)) || $media && @file_exists(mediaFN($id))) {
|
|
||||||
// skip current revision if the page exists
|
|
||||||
$first = max($first+1, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!@file_exists($file)) { return $revs; }
|
|
||||||
if (filesize($file)<$chunk_size || $chunk_size==0) {
|
|
||||||
// read whole file
|
|
||||||
$lines = file($file);
|
|
||||||
if ($lines===false) { return $revs; }
|
|
||||||
} else {
|
|
||||||
// read chunks backwards
|
|
||||||
$fp = fopen($file, 'rb'); // "file pointer"
|
|
||||||
if ($fp===false) { return $revs; }
|
|
||||||
fseek($fp, 0, SEEK_END);
|
|
||||||
$tail = ftell($fp);
|
|
||||||
|
|
||||||
// chunk backwards
|
|
||||||
$finger = max($tail-$chunk_size, 0);
|
|
||||||
while ($count<$num+$first) {
|
|
||||||
fseek($fp, $finger);
|
|
||||||
$nl = $finger;
|
|
||||||
if ($finger>0) {
|
|
||||||
fgets($fp); // slip the finger forward to a new line
|
|
||||||
$nl = ftell($fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// was the chunk big enough? if not, take another bite
|
|
||||||
if($nl > 0 && $tail <= $nl){
|
|
||||||
$finger = max($finger-$chunk_size, 0);
|
|
||||||
continue;
|
|
||||||
}else{
|
|
||||||
$finger = $nl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// read chunk
|
|
||||||
$chunk = '';
|
|
||||||
$read_size = max($tail-$finger, 0); // found chunk size
|
|
||||||
$got = 0;
|
|
||||||
while ($got<$read_size && !feof($fp)) {
|
|
||||||
$tmp = @fread($fp, max($read_size-$got, 0));
|
|
||||||
if ($tmp===false) { break; } //error state
|
|
||||||
$got += strlen($tmp);
|
|
||||||
$chunk .= $tmp;
|
|
||||||
}
|
|
||||||
$tmp = explode("\n", $chunk);
|
|
||||||
array_pop($tmp); // remove trailing newline
|
|
||||||
|
|
||||||
// combine with previous chunk
|
|
||||||
$count += count($tmp);
|
|
||||||
$lines = array_merge($tmp, $lines);
|
|
||||||
|
|
||||||
// next chunk
|
|
||||||
if ($finger==0) { break; } // already read all the lines
|
|
||||||
else {
|
|
||||||
$tail = $finger;
|
|
||||||
$finger = max($tail-$chunk_size, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose($fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// skip parsing extra lines
|
|
||||||
$num = max(min(count($lines)-$first, $num), 0);
|
|
||||||
if ($first>0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$first-$num, 0), $num); }
|
|
||||||
else if ($first>0 && $num==0) { $lines = array_slice($lines, 0, max(count($lines)-$first, 0)); }
|
|
||||||
else if ($first==0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$num, 0)); }
|
|
||||||
|
|
||||||
// handle lines in reverse order
|
|
||||||
for ($i = count($lines)-1; $i >= 0; $i--) {
|
|
||||||
$tmp = parseChangelogLine($lines[$i]);
|
|
||||||
if ($tmp!==false) {
|
|
||||||
$cache[$id][$tmp['date']] = $tmp;
|
|
||||||
$revs[] = $tmp['date'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $revs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -74,9 +74,9 @@ class Doku_Cli_Opts {
|
||||||
/**
|
/**
|
||||||
* <?php ?>
|
* <?php ?>
|
||||||
* @see http://www.sitepoint.com/article/php-command-line-1/3
|
* @see http://www.sitepoint.com/article/php-command-line-1/3
|
||||||
* @param string executing file name - this MUST be passed the __FILE__ constant
|
* @param string $bin_file executing file name - this MUST be passed the __FILE__ constant
|
||||||
* @param string short options
|
* @param string $short_options short options
|
||||||
* @param array (optional) long options
|
* @param array $long_options (optional) long options
|
||||||
* @return Doku_Cli_Opts_Container or Doku_Cli_Opts_Error
|
* @return Doku_Cli_Opts_Container or Doku_Cli_Opts_Error
|
||||||
*/
|
*/
|
||||||
function & getOptions($bin_file, $short_options, $long_options = null) {
|
function & getOptions($bin_file, $short_options, $long_options = null) {
|
||||||
|
@ -233,12 +233,12 @@ class Doku_Cli_Opts {
|
||||||
* Parse short option
|
* Parse short option
|
||||||
*
|
*
|
||||||
* @param string $arg Argument
|
* @param string $arg Argument
|
||||||
* @param string[] $short_options Available short options
|
* @param string $short_options Available short options
|
||||||
* @param string[][] &$opts
|
* @param string[][] &$opts
|
||||||
* @param string[] &$args
|
* @param string[] &$args
|
||||||
*
|
*
|
||||||
* @access private
|
* @access private
|
||||||
* @return void
|
* @return void|Doku_Cli_Opts_Error
|
||||||
*/
|
*/
|
||||||
function _parseShortOption($arg, $short_options, &$opts, &$args) {
|
function _parseShortOption($arg, $short_options, &$opts, &$args) {
|
||||||
$len = strlen($arg);
|
$len = strlen($arg);
|
||||||
|
@ -324,7 +324,7 @@ class Doku_Cli_Opts {
|
||||||
* @param string[] &$args
|
* @param string[] &$args
|
||||||
*
|
*
|
||||||
* @access private
|
* @access private
|
||||||
* @return void|PEAR_Error
|
* @return void|Doku_Cli_Opts_Error
|
||||||
*/
|
*/
|
||||||
function _parseLongOption($arg, $long_options, &$opts, &$args) {
|
function _parseLongOption($arg, $long_options, &$opts, &$args) {
|
||||||
@list($opt, $opt_arg) = explode('=', $arg, 2);
|
@list($opt, $opt_arg) = explode('=', $arg, 2);
|
||||||
|
@ -402,7 +402,7 @@ class Doku_Cli_Opts {
|
||||||
* Will take care on register_globals and register_argc_argv ini directives
|
* Will take care on register_globals and register_argc_argv ini directives
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @return mixed the $argv PHP array or PEAR error if not registered
|
* @return array|Doku_Cli_Opts_Error the $argv PHP array or PEAR error if not registered
|
||||||
*/
|
*/
|
||||||
function readPHPArgv() {
|
function readPHPArgv() {
|
||||||
global $argv;
|
global $argv;
|
||||||
|
@ -421,10 +421,19 @@ class Doku_Cli_Opts {
|
||||||
return $argv;
|
return $argv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $code
|
||||||
|
* @param $msg
|
||||||
|
* @return Doku_Cli_Opts_Error
|
||||||
|
*/
|
||||||
function raiseError($code, $msg) {
|
function raiseError($code, $msg) {
|
||||||
return new Doku_Cli_Opts_Error($code, $msg);
|
return new Doku_Cli_Opts_Error($code, $msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $obj
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
function isError($obj) {
|
function isError($obj) {
|
||||||
return is_a($obj, 'Doku_Cli_Opts_Error');
|
return is_a($obj, 'Doku_Cli_Opts_Error');
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,15 +56,18 @@ function stripctl($string) {
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function getSecurityToken() {
|
function getSecurityToken() {
|
||||||
return PassHash::hmac('md5', session_id().$_SERVER['REMOTE_USER'], auth_cookiesalt());
|
/** @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
return PassHash::hmac('md5', session_id().$INPUT->server->str('REMOTE_USER'), auth_cookiesalt());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check the secret CSRF token
|
* Check the secret CSRF token
|
||||||
*/
|
*/
|
||||||
function checkSecurityToken($token = null) {
|
function checkSecurityToken($token = null) {
|
||||||
|
/** @var Input $INPUT */
|
||||||
global $INPUT;
|
global $INPUT;
|
||||||
if(empty($_SERVER['REMOTE_USER'])) return true; // no logged in user, no need for a check
|
if(!$INPUT->server->str('REMOTE_USER')) return true; // no logged in user, no need for a check
|
||||||
|
|
||||||
if(is_null($token)) $token = $INPUT->str('sectok');
|
if(is_null($token)) $token = $INPUT->str('sectok');
|
||||||
if(getSecurityToken() != $token) {
|
if(getSecurityToken() != $token) {
|
||||||
|
@ -93,14 +96,16 @@ function formSecurityToken($print = true) {
|
||||||
*/
|
*/
|
||||||
function basicinfo($id, $htmlClient=true){
|
function basicinfo($id, $htmlClient=true){
|
||||||
global $USERINFO;
|
global $USERINFO;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// set info about manager/admin status.
|
// set info about manager/admin status.
|
||||||
$info['isadmin'] = false;
|
$info['isadmin'] = false;
|
||||||
$info['ismanager'] = false;
|
$info['ismanager'] = false;
|
||||||
if(isset($_SERVER['REMOTE_USER'])) {
|
if($INPUT->server->has('REMOTE_USER')) {
|
||||||
$info['userinfo'] = $USERINFO;
|
$info['userinfo'] = $USERINFO;
|
||||||
$info['perm'] = auth_quickaclcheck($id);
|
$info['perm'] = auth_quickaclcheck($id);
|
||||||
$info['client'] = $_SERVER['REMOTE_USER'];
|
$info['client'] = $INPUT->server->str('REMOTE_USER');
|
||||||
|
|
||||||
if($info['perm'] == AUTH_ADMIN) {
|
if($info['perm'] == AUTH_ADMIN) {
|
||||||
$info['isadmin'] = true;
|
$info['isadmin'] = true;
|
||||||
|
@ -111,7 +116,7 @@ function basicinfo($id, $htmlClient=true){
|
||||||
|
|
||||||
// if some outside auth were used only REMOTE_USER is set
|
// if some outside auth were used only REMOTE_USER is set
|
||||||
if(!$info['userinfo']['name']) {
|
if(!$info['userinfo']['name']) {
|
||||||
$info['userinfo']['name'] = $_SERVER['REMOTE_USER'];
|
$info['userinfo']['name'] = $INPUT->server->str('REMOTE_USER');
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -140,6 +145,8 @@ function pageinfo() {
|
||||||
global $REV;
|
global $REV;
|
||||||
global $RANGE;
|
global $RANGE;
|
||||||
global $lang;
|
global $lang;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$info = basicinfo($ID);
|
$info = basicinfo($ID);
|
||||||
|
|
||||||
|
@ -148,19 +155,20 @@ function pageinfo() {
|
||||||
$info['id'] = $ID;
|
$info['id'] = $ID;
|
||||||
$info['rev'] = $REV;
|
$info['rev'] = $REV;
|
||||||
|
|
||||||
if(isset($_SERVER['REMOTE_USER'])) {
|
if($INPUT->server->has('REMOTE_USER')) {
|
||||||
$sub = new Subscription();
|
$sub = new Subscription();
|
||||||
$info['subscribed'] = $sub->user_subscription();
|
$info['subscribed'] = $sub->user_subscription();
|
||||||
} else {
|
} else {
|
||||||
$info['subscribed'] = false;
|
$info['subscribed'] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$info['locked'] = checklock($ID);
|
$info['locked'] = checklock($ID);
|
||||||
$info['filepath'] = fullpath(wikiFN($ID));
|
$info['filepath'] = fullpath(wikiFN($ID));
|
||||||
$info['exists'] = @file_exists($info['filepath']);
|
$info['exists'] = @file_exists($info['filepath']);
|
||||||
|
$info['currentrev'] = @filemtime($info['filepath']);
|
||||||
if($REV) {
|
if($REV) {
|
||||||
//check if current revision was meant
|
//check if current revision was meant
|
||||||
if($info['exists'] && (@filemtime($info['filepath']) == $REV)) {
|
if($info['exists'] && ($info['currentrev'] == $REV)) {
|
||||||
$REV = '';
|
$REV = '';
|
||||||
} elseif($RANGE) {
|
} elseif($RANGE) {
|
||||||
//section editing does not work with old revisions!
|
//section editing does not work with old revisions!
|
||||||
|
@ -187,13 +195,14 @@ function pageinfo() {
|
||||||
$info['meta'] = p_get_metadata($ID);
|
$info['meta'] = p_get_metadata($ID);
|
||||||
|
|
||||||
//who's the editor
|
//who's the editor
|
||||||
|
$pagelog = new PageChangeLog($ID, 1024);
|
||||||
if($REV) {
|
if($REV) {
|
||||||
$revinfo = getRevisionInfo($ID, $REV, 1024);
|
$revinfo = $pagelog->getRevisionInfo($REV);
|
||||||
} else {
|
} else {
|
||||||
if(is_array($info['meta']['last_change'])) {
|
if(!empty($info['meta']['last_change']) && is_array($info['meta']['last_change'])) {
|
||||||
$revinfo = $info['meta']['last_change'];
|
$revinfo = $info['meta']['last_change'];
|
||||||
} else {
|
} else {
|
||||||
$revinfo = getRevisionInfo($ID, $info['lastmod'], 1024);
|
$revinfo = $pagelog->getRevisionInfo($info['lastmod']);
|
||||||
// cache most recent changelog line in metadata if missing and still valid
|
// cache most recent changelog line in metadata if missing and still valid
|
||||||
if($revinfo !== false) {
|
if($revinfo !== false) {
|
||||||
$info['meta']['last_change'] = $revinfo;
|
$info['meta']['last_change'] = $revinfo;
|
||||||
|
@ -355,11 +364,14 @@ function breadcrumbs() {
|
||||||
*/
|
*/
|
||||||
function idfilter($id, $ue = true) {
|
function idfilter($id, $ue = true) {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
if($conf['useslash'] && $conf['userewrite']) {
|
if($conf['useslash'] && $conf['userewrite']) {
|
||||||
$id = strtr($id, ':', '/');
|
$id = strtr($id, ':', '/');
|
||||||
} elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' &&
|
} elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' &&
|
||||||
$conf['userewrite'] &&
|
$conf['userewrite'] &&
|
||||||
strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') === false
|
strpos($INPUT->server->str('SERVER_SOFTWARE'), 'Microsoft-IIS') === false
|
||||||
) {
|
) {
|
||||||
$id = strtr($id, ':', ';');
|
$id = strtr($id, ':', ';');
|
||||||
}
|
}
|
||||||
|
@ -587,6 +599,8 @@ function checkwordblock($text = '') {
|
||||||
global $SUM;
|
global $SUM;
|
||||||
global $conf;
|
global $conf;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
if(!$conf['usewordblock']) return false;
|
if(!$conf['usewordblock']) return false;
|
||||||
|
|
||||||
|
@ -619,9 +633,9 @@ function checkwordblock($text = '') {
|
||||||
if(count($re) && preg_match('#('.join('|', $re).')#si', $text, $matches)) {
|
if(count($re) && preg_match('#('.join('|', $re).')#si', $text, $matches)) {
|
||||||
// prepare event data
|
// prepare event data
|
||||||
$data['matches'] = $matches;
|
$data['matches'] = $matches;
|
||||||
$data['userinfo']['ip'] = $_SERVER['REMOTE_ADDR'];
|
$data['userinfo']['ip'] = $INPUT->server->str('REMOTE_ADDR');
|
||||||
if($_SERVER['REMOTE_USER']) {
|
if($INPUT->server->str('REMOTE_USER')) {
|
||||||
$data['userinfo']['user'] = $_SERVER['REMOTE_USER'];
|
$data['userinfo']['user'] = $INPUT->server->str('REMOTE_USER');
|
||||||
$data['userinfo']['name'] = $INFO['userinfo']['name'];
|
$data['userinfo']['name'] = $INFO['userinfo']['name'];
|
||||||
$data['userinfo']['mail'] = $INFO['userinfo']['mail'];
|
$data['userinfo']['mail'] = $INFO['userinfo']['mail'];
|
||||||
}
|
}
|
||||||
|
@ -647,12 +661,17 @@ function checkwordblock($text = '') {
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function clientIP($single = false) {
|
function clientIP($single = false) {
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$ip = array();
|
$ip = array();
|
||||||
$ip[] = $_SERVER['REMOTE_ADDR'];
|
$ip[] = $INPUT->server->str('REMOTE_ADDR');
|
||||||
if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
|
if($INPUT->server->str('HTTP_X_FORWARDED_FOR')) {
|
||||||
$ip = array_merge($ip, explode(',', str_replace(' ', '', $_SERVER['HTTP_X_FORWARDED_FOR'])));
|
$ip = array_merge($ip, explode(',', str_replace(' ', '', $INPUT->server->str('HTTP_X_FORWARDED_FOR'))));
|
||||||
if(!empty($_SERVER['HTTP_X_REAL_IP']))
|
}
|
||||||
$ip = array_merge($ip, explode(',', str_replace(' ', '', $_SERVER['HTTP_X_REAL_IP'])));
|
if($INPUT->server->str('HTTP_X_REAL_IP')) {
|
||||||
|
$ip = array_merge($ip, explode(',', str_replace(' ', '', $INPUT->server->str('HTTP_X_REAL_IP'))));
|
||||||
|
}
|
||||||
|
|
||||||
// some IPv4/v6 regexps borrowed from Feyd
|
// some IPv4/v6 regexps borrowed from Feyd
|
||||||
// see: http://forums.devnetwork.net/viewtopic.php?f=38&t=53479
|
// see: http://forums.devnetwork.net/viewtopic.php?f=38&t=53479
|
||||||
|
@ -711,16 +730,18 @@ function clientIP($single = false) {
|
||||||
* @link http://www.brainhandles.com/2007/10/15/detecting-mobile-browsers/#code
|
* @link http://www.brainhandles.com/2007/10/15/detecting-mobile-browsers/#code
|
||||||
*/
|
*/
|
||||||
function clientismobile() {
|
function clientismobile() {
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) return true;
|
if($INPUT->server->has('HTTP_X_WAP_PROFILE')) return true;
|
||||||
|
|
||||||
if(preg_match('/wap\.|\.wap/i', $_SERVER['HTTP_ACCEPT'])) return true;
|
if(preg_match('/wap\.|\.wap/i', $INPUT->server->str('HTTP_ACCEPT'))) return true;
|
||||||
|
|
||||||
if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
|
if(!$INPUT->server->has('HTTP_USER_AGENT')) return false;
|
||||||
|
|
||||||
$uamatches = 'midp|j2me|avantg|docomo|novarra|palmos|palmsource|240x320|opwv|chtml|pda|windows ce|mmp\/|blackberry|mib\/|symbian|wireless|nokia|hand|mobi|phone|cdm|up\.b|audio|SIE\-|SEC\-|samsung|HTC|mot\-|mitsu|sagem|sony|alcatel|lg|erics|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|\d\d\di|moto';
|
$uamatches = 'midp|j2me|avantg|docomo|novarra|palmos|palmsource|240x320|opwv|chtml|pda|windows ce|mmp\/|blackberry|mib\/|symbian|wireless|nokia|hand|mobi|phone|cdm|up\.b|audio|SIE\-|SEC\-|samsung|HTC|mot\-|mitsu|sagem|sony|alcatel|lg|erics|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|\d\d\di|moto';
|
||||||
|
|
||||||
if(preg_match("/$uamatches/i", $_SERVER['HTTP_USER_AGENT'])) return true;
|
if(preg_match("/$uamatches/i", $INPUT->server->str('HTTP_USER_AGENT'))) return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -760,6 +781,9 @@ function gethostsbyaddrs($ips) {
|
||||||
*/
|
*/
|
||||||
function checklock($id) {
|
function checklock($id) {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$lock = wikiLockFN($id);
|
$lock = wikiLockFN($id);
|
||||||
|
|
||||||
//no lockfile
|
//no lockfile
|
||||||
|
@ -772,8 +796,8 @@ function checklock($id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//my own lock
|
//my own lock
|
||||||
list($ip, $session) = explode("\n", io_readFile($lock));
|
@list($ip, $session) = explode("\n", io_readFile($lock));
|
||||||
if($ip == $_SERVER['REMOTE_USER'] || $ip == clientIP() || $session == session_id()) {
|
if($ip == $INPUT->server->str('REMOTE_USER') || $ip == clientIP() || $session == session_id()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -787,14 +811,16 @@ function checklock($id) {
|
||||||
*/
|
*/
|
||||||
function lock($id) {
|
function lock($id) {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
if($conf['locktime'] == 0) {
|
if($conf['locktime'] == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$lock = wikiLockFN($id);
|
$lock = wikiLockFN($id);
|
||||||
if($_SERVER['REMOTE_USER']) {
|
if($INPUT->server->str('REMOTE_USER')) {
|
||||||
io_saveFile($lock, $_SERVER['REMOTE_USER']);
|
io_saveFile($lock, $INPUT->server->str('REMOTE_USER'));
|
||||||
} else {
|
} else {
|
||||||
io_saveFile($lock, clientIP()."\n".session_id());
|
io_saveFile($lock, clientIP()."\n".session_id());
|
||||||
}
|
}
|
||||||
|
@ -808,10 +834,13 @@ function lock($id) {
|
||||||
* @return bool true if a lock was removed
|
* @return bool true if a lock was removed
|
||||||
*/
|
*/
|
||||||
function unlock($id) {
|
function unlock($id) {
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
$lock = wikiLockFN($id);
|
$lock = wikiLockFN($id);
|
||||||
if(@file_exists($lock)) {
|
if(@file_exists($lock)) {
|
||||||
list($ip, $session) = explode("\n", io_readFile($lock));
|
@list($ip, $session) = explode("\n", io_readFile($lock));
|
||||||
if($ip == $_SERVER['REMOTE_USER'] || $ip == clientIP() || $session == session_id()) {
|
if($ip == $INPUT->server->str('REMOTE_USER') || $ip == clientIP() || $session == session_id()) {
|
||||||
@unlink($lock);
|
@unlink($lock);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -937,6 +966,8 @@ function parsePageTemplate(&$data) {
|
||||||
|
|
||||||
global $USERINFO;
|
global $USERINFO;
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// replace placeholders
|
// replace placeholders
|
||||||
$file = noNS($id);
|
$file = noNS($id);
|
||||||
|
@ -968,7 +999,7 @@ function parsePageTemplate(&$data) {
|
||||||
utf8_ucfirst($page),
|
utf8_ucfirst($page),
|
||||||
utf8_ucwords($page),
|
utf8_ucwords($page),
|
||||||
utf8_strtoupper($page),
|
utf8_strtoupper($page),
|
||||||
$_SERVER['REMOTE_USER'],
|
$INPUT->server->str('REMOTE_USER'),
|
||||||
$USERINFO['name'],
|
$USERINFO['name'],
|
||||||
$USERINFO['mail'],
|
$USERINFO['mail'],
|
||||||
$conf['dformat'],
|
$conf['dformat'],
|
||||||
|
@ -1049,6 +1080,9 @@ function saveWikiText($id, $text, $summary, $minor = false) {
|
||||||
global $conf;
|
global $conf;
|
||||||
global $lang;
|
global $lang;
|
||||||
global $REV;
|
global $REV;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// ignore if no changes were made
|
// ignore if no changes were made
|
||||||
if($text == rawWiki($id, '')) {
|
if($text == rawWiki($id, '')) {
|
||||||
return;
|
return;
|
||||||
|
@ -1059,8 +1093,9 @@ function saveWikiText($id, $text, $summary, $minor = false) {
|
||||||
$wasRemoved = (trim($text) == ''); // check for empty or whitespace only
|
$wasRemoved = (trim($text) == ''); // check for empty or whitespace only
|
||||||
$wasCreated = !@file_exists($file);
|
$wasCreated = !@file_exists($file);
|
||||||
$wasReverted = ($REV == true);
|
$wasReverted = ($REV == true);
|
||||||
|
$pagelog = new PageChangeLog($id, 1024);
|
||||||
$newRev = false;
|
$newRev = false;
|
||||||
$oldRev = getRevisions($id, -1, 1, 1024); // from changelog
|
$oldRev = $pagelog->getRevisions(-1, 1); // from changelog
|
||||||
$oldRev = (int) (empty($oldRev) ? 0 : $oldRev[0]);
|
$oldRev = (int) (empty($oldRev) ? 0 : $oldRev[0]);
|
||||||
if(!@file_exists(wikiFN($id, $old)) && @file_exists($file) && $old >= $oldRev) {
|
if(!@file_exists(wikiFN($id, $old)) && @file_exists($file) && $old >= $oldRev) {
|
||||||
// add old revision to the attic if missing
|
// add old revision to the attic if missing
|
||||||
|
@ -1111,7 +1146,7 @@ function saveWikiText($id, $text, $summary, $minor = false) {
|
||||||
$type = DOKU_CHANGE_TYPE_CREATE;
|
$type = DOKU_CHANGE_TYPE_CREATE;
|
||||||
} else if($wasRemoved) {
|
} else if($wasRemoved) {
|
||||||
$type = DOKU_CHANGE_TYPE_DELETE;
|
$type = DOKU_CHANGE_TYPE_DELETE;
|
||||||
} else if($minor && $conf['useacl'] && $_SERVER['REMOTE_USER']) {
|
} else if($minor && $conf['useacl'] && $INPUT->server->str('REMOTE_USER')) {
|
||||||
$type = DOKU_CHANGE_TYPE_MINOR_EDIT;
|
$type = DOKU_CHANGE_TYPE_MINOR_EDIT;
|
||||||
} //minor edits only for logged in users
|
} //minor edits only for logged in users
|
||||||
|
|
||||||
|
@ -1140,7 +1175,6 @@ function saveWikiText($id, $text, $summary, $minor = false) {
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
*/
|
*/
|
||||||
function saveOldRevision($id) {
|
function saveOldRevision($id) {
|
||||||
global $conf;
|
|
||||||
$oldf = wikiFN($id);
|
$oldf = wikiFN($id);
|
||||||
if(!@file_exists($oldf)) return '';
|
if(!@file_exists($oldf)) return '';
|
||||||
$date = filemtime($oldf);
|
$date = filemtime($oldf);
|
||||||
|
@ -1164,6 +1198,8 @@ function saveOldRevision($id) {
|
||||||
*/
|
*/
|
||||||
function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace = array()) {
|
function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace = array()) {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// decide if there is something to do, eg. whom to mail
|
// decide if there is something to do, eg. whom to mail
|
||||||
if($who == 'admin') {
|
if($who == 'admin') {
|
||||||
|
@ -1172,7 +1208,7 @@ function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace =
|
||||||
$to = $conf['notify'];
|
$to = $conf['notify'];
|
||||||
} elseif($who == 'subscribers') {
|
} elseif($who == 'subscribers') {
|
||||||
if(!actionOK('subscribe')) return false; //subscribers enabled?
|
if(!actionOK('subscribe')) return false; //subscribers enabled?
|
||||||
if($conf['useacl'] && $_SERVER['REMOTE_USER'] && $minor) return false; //skip minors
|
if($conf['useacl'] && $INPUT->server->str('REMOTE_USER') && $minor) return false; //skip minors
|
||||||
$data = array('id' => $id, 'addresslist' => '', 'self' => false);
|
$data = array('id' => $id, 'addresslist' => '', 'self' => false);
|
||||||
trigger_event(
|
trigger_event(
|
||||||
'COMMON_NOTIFY_ADDRESSLIST', $data,
|
'COMMON_NOTIFY_ADDRESSLIST', $data,
|
||||||
|
@ -1197,10 +1233,13 @@ function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace =
|
||||||
* @author Todd Augsburger <todd@rollerorgans.com>
|
* @author Todd Augsburger <todd@rollerorgans.com>
|
||||||
*/
|
*/
|
||||||
function getGoogleQuery() {
|
function getGoogleQuery() {
|
||||||
if(!isset($_SERVER['HTTP_REFERER'])) {
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
|
if(!$INPUT->server->has('HTTP_REFERER')) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
$url = parse_url($_SERVER['HTTP_REFERER']);
|
$url = parse_url($INPUT->server->str('HTTP_REFERER'));
|
||||||
|
|
||||||
// only handle common SEs
|
// only handle common SEs
|
||||||
if(!preg_match('/(google|bing|yahoo|ask|duckduckgo|babylon|aol|yandex)/',$url['host'])) return '';
|
if(!preg_match('/(google|bing|yahoo|ask|duckduckgo|babylon|aol|yandex)/',$url['host'])) return '';
|
||||||
|
@ -1230,8 +1269,9 @@ function getGoogleQuery() {
|
||||||
/**
|
/**
|
||||||
* Return the human readable size of a file
|
* Return the human readable size of a file
|
||||||
*
|
*
|
||||||
* @param int $size A file size
|
* @param int $size A file size
|
||||||
* @param int $dec A number of decimal places
|
* @param int $dec A number of decimal places
|
||||||
|
* @return string human readable size
|
||||||
* @author Martin Benjamin <b.martin@cybernet.ch>
|
* @author Martin Benjamin <b.martin@cybernet.ch>
|
||||||
* @author Aidan Lister <aidan@php.net>
|
* @author Aidan Lister <aidan@php.net>
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
|
@ -1362,12 +1402,16 @@ function php_to_byte($v) {
|
||||||
$l = substr($v, -1);
|
$l = substr($v, -1);
|
||||||
$ret = substr($v, 0, -1);
|
$ret = substr($v, 0, -1);
|
||||||
switch(strtoupper($l)) {
|
switch(strtoupper($l)) {
|
||||||
|
/** @noinspection PhpMissingBreakStatementInspection */
|
||||||
case 'P':
|
case 'P':
|
||||||
$ret *= 1024;
|
$ret *= 1024;
|
||||||
|
/** @noinspection PhpMissingBreakStatementInspection */
|
||||||
case 'T':
|
case 'T':
|
||||||
$ret *= 1024;
|
$ret *= 1024;
|
||||||
|
/** @noinspection PhpMissingBreakStatementInspection */
|
||||||
case 'G':
|
case 'G':
|
||||||
$ret *= 1024;
|
$ret *= 1024;
|
||||||
|
/** @noinspection PhpMissingBreakStatementInspection */
|
||||||
case 'M':
|
case 'M':
|
||||||
$ret *= 1024;
|
$ret *= 1024;
|
||||||
case 'K':
|
case 'K':
|
||||||
|
@ -1415,37 +1459,135 @@ function shorten($keep, $short, $max, $min = 9, $char = '…') {
|
||||||
* Return the users realname or e-mail address for use
|
* Return the users realname or e-mail address for use
|
||||||
* in page footer and recent changes pages
|
* in page footer and recent changes pages
|
||||||
*
|
*
|
||||||
|
* @param string|bool $username or false when currently logged-in user should be used
|
||||||
|
* @param bool $textonly true returns only plain text, true allows returning html
|
||||||
|
* @return string html or plain text(not escaped) of formatted user name
|
||||||
|
*
|
||||||
* @author Andy Webber <dokuwiki AT andywebber DOT com>
|
* @author Andy Webber <dokuwiki AT andywebber DOT com>
|
||||||
*/
|
*/
|
||||||
function editorinfo($username) {
|
function editorinfo($username, $textonly = false) {
|
||||||
global $conf;
|
return userlink($username, $textonly);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns users realname w/o link
|
||||||
|
*
|
||||||
|
* @param string|bool $username or false when currently logged-in user should be used
|
||||||
|
* @param bool $textonly true returns only plain text, true allows returning html
|
||||||
|
* @return string html or plain text(not escaped) of formatted user name
|
||||||
|
*
|
||||||
|
* @triggers COMMON_USER_LINK
|
||||||
|
*/
|
||||||
|
function userlink($username = null, $textonly = false) {
|
||||||
|
global $conf, $INFO;
|
||||||
|
/** @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
|
/** @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
switch($conf['showuseras']) {
|
// prepare initial event data
|
||||||
case 'username':
|
$data = array(
|
||||||
case 'email':
|
'username' => $username, // the unique user name
|
||||||
case 'email_link':
|
'name' => '',
|
||||||
if($auth) $info = $auth->getUserData($username);
|
'link' => array( //setting 'link' to false disables linking
|
||||||
break;
|
'target' => '',
|
||||||
default:
|
'pre' => '',
|
||||||
return hsc($username);
|
'suf' => '',
|
||||||
}
|
'style' => '',
|
||||||
|
'more' => '',
|
||||||
if(isset($info) && $info) {
|
'url' => '',
|
||||||
switch($conf['showuseras']) {
|
'title' => '',
|
||||||
case 'username':
|
'class' => ''
|
||||||
return hsc($info['name']);
|
),
|
||||||
case 'email':
|
'userlink' => '', // formatted user name as will be returned
|
||||||
return obfuscate($info['mail']);
|
'textonly' => $textonly
|
||||||
case 'email_link':
|
);
|
||||||
$mail = obfuscate($info['mail']);
|
if($username === null) {
|
||||||
return '<a href="mailto:'.$mail.'">'.$mail.'</a>';
|
$data['username'] = $username = $INPUT->server->str('REMOTE_USER');
|
||||||
default:
|
if($textonly){
|
||||||
return hsc($username);
|
$data['name'] = $INFO['userinfo']['name']. ' (' . $INPUT->server->str('REMOTE_USER') . ')';
|
||||||
|
}else {
|
||||||
|
$data['name'] = '<bdi>' . hsc($INFO['userinfo']['name']) . '</bdi> (<bdi>' . hsc($INPUT->server->str('REMOTE_USER')) . '</bdi>)';
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return hsc($username);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$evt = new Doku_Event('COMMON_USER_LINK', $data);
|
||||||
|
if($evt->advise_before(true)) {
|
||||||
|
if(empty($data['name'])) {
|
||||||
|
if($conf['showuseras'] == 'loginname') {
|
||||||
|
$data['name'] = $textonly ? $data['username'] : hsc($data['username']);
|
||||||
|
} else {
|
||||||
|
if($auth) $info = $auth->getUserData($username);
|
||||||
|
if(isset($info) && $info) {
|
||||||
|
switch($conf['showuseras']) {
|
||||||
|
case 'username':
|
||||||
|
case 'username_link':
|
||||||
|
$data['name'] = $textonly ? $info['name'] : hsc($info['name']);
|
||||||
|
break;
|
||||||
|
case 'email':
|
||||||
|
case 'email_link':
|
||||||
|
$data['name'] = obfuscate($info['mail']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var Doku_Renderer_xhtml $xhtml_renderer */
|
||||||
|
static $xhtml_renderer = null;
|
||||||
|
|
||||||
|
if(!$data['textonly'] && empty($data['link']['url'])) {
|
||||||
|
|
||||||
|
if(in_array($conf['showuseras'], array('email_link', 'username_link'))) {
|
||||||
|
if(!isset($info)) {
|
||||||
|
if($auth) $info = $auth->getUserData($username);
|
||||||
|
}
|
||||||
|
if(isset($info) && $info) {
|
||||||
|
if($conf['showuseras'] == 'email_link') {
|
||||||
|
$data['link']['url'] = 'mailto:' . obfuscate($info['mail']);
|
||||||
|
} else {
|
||||||
|
if(is_null($xhtml_renderer)) {
|
||||||
|
$xhtml_renderer = p_get_renderer('xhtml');
|
||||||
|
}
|
||||||
|
if(empty($xhtml_renderer->interwiki)) {
|
||||||
|
$xhtml_renderer->interwiki = getInterwiki();
|
||||||
|
}
|
||||||
|
$shortcut = 'user';
|
||||||
|
$exists = null;
|
||||||
|
$data['link']['url'] = $xhtml_renderer->_resolveInterWiki($shortcut, $username, $exists);
|
||||||
|
$data['link']['class'] .= ' interwiki iw_user';
|
||||||
|
if($exists !== null) {
|
||||||
|
if($exists) {
|
||||||
|
$data['link']['class'] .= ' wikilink1';
|
||||||
|
} else {
|
||||||
|
$data['link']['class'] .= ' wikilink2';
|
||||||
|
$data['link']['rel'] = 'nofollow';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$data['textonly'] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$data['textonly'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($data['textonly']) {
|
||||||
|
$data['userlink'] = $data['name'];
|
||||||
|
} else {
|
||||||
|
$data['link']['name'] = $data['name'];
|
||||||
|
if(is_null($xhtml_renderer)) {
|
||||||
|
$xhtml_renderer = p_get_renderer('xhtml');
|
||||||
|
}
|
||||||
|
$data['userlink'] = $xhtml_renderer->_formatLink($data['link']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$evt->advise_after();
|
||||||
|
unset($evt);
|
||||||
|
|
||||||
|
return $data['userlink'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1518,6 +1660,9 @@ function is_mem_available($mem, $bytes = 1048576) {
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
*/
|
*/
|
||||||
function send_redirect($url) {
|
function send_redirect($url) {
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
//are there any undisplayed messages? keep them in session for display
|
//are there any undisplayed messages? keep them in session for display
|
||||||
global $MSG;
|
global $MSG;
|
||||||
if(isset($MSG) && count($MSG) && !defined('NOSESSION')) {
|
if(isset($MSG) && count($MSG) && !defined('NOSESSION')) {
|
||||||
|
@ -1531,7 +1676,7 @@ function send_redirect($url) {
|
||||||
|
|
||||||
// work around IE bug
|
// work around IE bug
|
||||||
// http://www.ianhoar.com/2008/11/16/internet-explorer-6-and-redirected-anchor-links/
|
// http://www.ianhoar.com/2008/11/16/internet-explorer-6-and-redirected-anchor-links/
|
||||||
list($url, $hash) = explode('#', $url);
|
@list($url, $hash) = explode('#', $url);
|
||||||
if($hash) {
|
if($hash) {
|
||||||
if(strpos($url, '?')) {
|
if(strpos($url, '?')) {
|
||||||
$url = $url.'&#'.$hash;
|
$url = $url.'&#'.$hash;
|
||||||
|
@ -1541,9 +1686,9 @@ function send_redirect($url) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if running on IIS < 6 with CGI-PHP
|
// check if running on IIS < 6 with CGI-PHP
|
||||||
if(isset($_SERVER['SERVER_SOFTWARE']) && isset($_SERVER['GATEWAY_INTERFACE']) &&
|
if($INPUT->server->has('SERVER_SOFTWARE') && $INPUT->server->has('GATEWAY_INTERFACE') &&
|
||||||
(strpos($_SERVER['GATEWAY_INTERFACE'], 'CGI') !== false) &&
|
(strpos($INPUT->server->str('GATEWAY_INTERFACE'), 'CGI') !== false) &&
|
||||||
(preg_match('|^Microsoft-IIS/(\d)\.\d$|', trim($_SERVER['SERVER_SOFTWARE']), $matches)) &&
|
(preg_match('|^Microsoft-IIS/(\d)\.\d$|', trim($INPUT->server->str('SERVER_SOFTWARE')), $matches)) &&
|
||||||
$matches[1] < 6
|
$matches[1] < 6
|
||||||
) {
|
) {
|
||||||
header('Refresh: 0;url='.$url);
|
header('Refresh: 0;url='.$url);
|
||||||
|
@ -1630,4 +1775,13 @@ function set_doku_pref($pref, $val) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Strips source mapping declarations from given text #601
|
||||||
|
*
|
||||||
|
* @param &string $text reference to the CSS or JavaScript code to clean
|
||||||
|
*/
|
||||||
|
function stripsourcemaps(&$text){
|
||||||
|
$text = preg_replace('/^(\/\/|\/\*)[@#]\s+sourceMappingURL=.*?(\*\/)?$/im', '\\1\\2', $text);
|
||||||
|
}
|
||||||
|
|
||||||
//Setup VIM: ex: et ts=2 :
|
//Setup VIM: ex: et ts=2 :
|
||||||
|
|
|
@ -237,13 +237,14 @@ function getConfigFiles($type) {
|
||||||
* check if the given action was disabled in config
|
* check if the given action was disabled in config
|
||||||
*
|
*
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
|
* @param string $action
|
||||||
* @returns boolean true if enabled, false if disabled
|
* @returns boolean true if enabled, false if disabled
|
||||||
*/
|
*/
|
||||||
function actionOK($action){
|
function actionOK($action){
|
||||||
static $disabled = null;
|
static $disabled = null;
|
||||||
if(is_null($disabled) || defined('SIMPLE_TEST')){
|
if(is_null($disabled) || defined('SIMPLE_TEST')){
|
||||||
global $conf;
|
global $conf;
|
||||||
/** @var auth_basic $auth */
|
/** @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
|
|
||||||
// prepare disabled actions array and handle legacy options
|
// prepare disabled actions array and handle legacy options
|
||||||
|
|
|
@ -8,15 +8,18 @@
|
||||||
|
|
||||||
if(!defined('DOKU_INC')) die('meh.');
|
if(!defined('DOKU_INC')) die('meh.');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event
|
||||||
|
*/
|
||||||
class Doku_Event {
|
class Doku_Event {
|
||||||
|
|
||||||
// public properties
|
// public properties
|
||||||
var $name = ''; // READONLY event name, objects must register against this name to see the event
|
public $name = ''; // READONLY event name, objects must register against this name to see the event
|
||||||
var $data = null; // READWRITE data relevant to the event, no standardised format (YET!)
|
public $data = null; // READWRITE data relevant to the event, no standardised format (YET!)
|
||||||
var $result = null; // READWRITE the results of the event action, only relevant in "_AFTER" advise
|
public $result = null; // READWRITE the results of the event action, only relevant in "_AFTER" advise
|
||||||
// event handlers may modify this if they are preventing the default action
|
// event handlers may modify this if they are preventing the default action
|
||||||
// to provide the after event handlers with event results
|
// to provide the after event handlers with event results
|
||||||
var $canPreventDefault = true; // READONLY if true, event handlers can prevent the events default action
|
public $canPreventDefault = true; // READONLY if true, event handlers can prevent the events default action
|
||||||
|
|
||||||
// private properties, event handlers can effect these through the provided methods
|
// private properties, event handlers can effect these through the provided methods
|
||||||
var $_default = true; // whether or not to carry out the default action associated with the event
|
var $_default = true; // whether or not to carry out the default action associated with the event
|
||||||
|
@ -32,6 +35,13 @@ class Doku_Event {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function __toString() {
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* advise functions
|
* advise functions
|
||||||
*
|
*
|
||||||
|
@ -47,7 +57,8 @@ class Doku_Event {
|
||||||
* $evt->advise_after();
|
* $evt->advise_after();
|
||||||
* unset($evt);
|
* unset($evt);
|
||||||
*
|
*
|
||||||
* @return results of processing the event, usually $this->_default
|
* @param bool $enablePreventDefault
|
||||||
|
* @return bool results of processing the event, usually $this->_default
|
||||||
*/
|
*/
|
||||||
function advise_before($enablePreventDefault=true) {
|
function advise_before($enablePreventDefault=true) {
|
||||||
global $EVENT_HANDLER;
|
global $EVENT_HANDLER;
|
||||||
|
@ -73,14 +84,21 @@ class Doku_Event {
|
||||||
* $this->_default, all of which may have been modified by the event handlers.
|
* $this->_default, all of which may have been modified by the event handlers.
|
||||||
* - advise all registered (<event>_AFTER) handlers that the event has taken place
|
* - advise all registered (<event>_AFTER) handlers that the event has taken place
|
||||||
*
|
*
|
||||||
* @return $event->results
|
* @param null|callable $action
|
||||||
|
* @param bool $enablePrevent
|
||||||
|
* @return mixed $event->results
|
||||||
* the value set by any <event>_before or <event> handlers if the default action is prevented
|
* the value set by any <event>_before or <event> handlers if the default action is prevented
|
||||||
* or the results of the default action (as modified by <event>_after handlers)
|
* or the results of the default action (as modified by <event>_after handlers)
|
||||||
* or NULL no action took place and no handler modified the value
|
* or NULL no action took place and no handler modified the value
|
||||||
*/
|
*/
|
||||||
function trigger($action=null, $enablePrevent=true) {
|
function trigger($action=null, $enablePrevent=true) {
|
||||||
|
|
||||||
if (!is_callable($action)) $enablePrevent = false;
|
if (!is_callable($action)) {
|
||||||
|
$enablePrevent = false;
|
||||||
|
if (!is_null($action)) {
|
||||||
|
trigger_error('The default action of '.$this.' is not null but also not callable. Maybe the method is not public?', E_USER_WARNING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->advise_before($enablePrevent) && is_callable($action)) {
|
if ($this->advise_before($enablePrevent) && is_callable($action)) {
|
||||||
if (is_array($action)) {
|
if (is_array($action)) {
|
||||||
|
@ -112,12 +130,15 @@ class Doku_Event {
|
||||||
function preventDefault() { $this->_default = false; }
|
function preventDefault() { $this->_default = false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the registration and execution of all events,
|
||||||
|
*/
|
||||||
class Doku_Event_Handler {
|
class Doku_Event_Handler {
|
||||||
|
|
||||||
// public properties: none
|
// public properties: none
|
||||||
|
|
||||||
// private properties
|
// private properties
|
||||||
var $_hooks = array(); // array of events and their registered handlers
|
protected $_hooks = array(); // array of events and their registered handlers
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_handler
|
* event_handler
|
||||||
|
@ -128,6 +149,7 @@ class Doku_Event_Handler {
|
||||||
function Doku_Event_Handler() {
|
function Doku_Event_Handler() {
|
||||||
|
|
||||||
// load action plugins
|
// load action plugins
|
||||||
|
/** @var DokuWiki_Action_Plugin $plugin */
|
||||||
$plugin = null;
|
$plugin = null;
|
||||||
$pluginlist = plugin_list('action');
|
$pluginlist = plugin_list('action');
|
||||||
|
|
||||||
|
@ -143,34 +165,47 @@ class Doku_Event_Handler {
|
||||||
*
|
*
|
||||||
* register a hook for an event
|
* register a hook for an event
|
||||||
*
|
*
|
||||||
* @param $event (string) name used by the event, (incl '_before' or '_after' for triggers)
|
* @param $event string name used by the event, (incl '_before' or '_after' for triggers)
|
||||||
* @param $obj (obj) object in whose scope method is to be executed,
|
* @param $advise string
|
||||||
|
* @param $obj object object in whose scope method is to be executed,
|
||||||
* if NULL, method is assumed to be a globally available function
|
* if NULL, method is assumed to be a globally available function
|
||||||
* @param $method (function) event handler function
|
* @param $method string event handler function
|
||||||
* @param $param (mixed) data passed to the event handler
|
* @param $param mixed data passed to the event handler
|
||||||
|
* @param $seq int sequence number for ordering hook execution (ascending)
|
||||||
*/
|
*/
|
||||||
function register_hook($event, $advise, $obj, $method, $param=null) {
|
function register_hook($event, $advise, $obj, $method, $param=null, $seq=0) {
|
||||||
$this->_hooks[$event.'_'.$advise][] = array($obj, $method, $param);
|
$seq = (int)$seq;
|
||||||
|
$doSort = !isset($this->_hooks[$event.'_'.$advise][$seq]);
|
||||||
|
$this->_hooks[$event.'_'.$advise][$seq][] = array($obj, $method, $param);
|
||||||
|
|
||||||
|
if ($doSort) {
|
||||||
|
ksort($this->_hooks[$event.'_'.$advise]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function process_event(&$event,$advise='') {
|
/**
|
||||||
|
* process the before/after event
|
||||||
|
*
|
||||||
|
* @param Doku_Event $event
|
||||||
|
* @param string $advise BEFORE or AFTER
|
||||||
|
*/
|
||||||
|
function process_event($event,$advise='') {
|
||||||
|
|
||||||
$evt_name = $event->name . ($advise ? '_'.$advise : '_BEFORE');
|
$evt_name = $event->name . ($advise ? '_'.$advise : '_BEFORE');
|
||||||
|
|
||||||
if (!empty($this->_hooks[$evt_name])) {
|
if (!empty($this->_hooks[$evt_name])) {
|
||||||
foreach ($this->_hooks[$evt_name] as $hook) {
|
foreach ($this->_hooks[$evt_name] as $sequenced_hooks) {
|
||||||
// list($obj, $method, $param) = $hook;
|
foreach ($sequenced_hooks as $hook) {
|
||||||
$obj =& $hook[0];
|
list($obj, $method, $param) = $hook;
|
||||||
$method = $hook[1];
|
|
||||||
$param = $hook[2];
|
|
||||||
|
|
||||||
if (is_null($obj)) {
|
if (is_null($obj)) {
|
||||||
$method($event, $param);
|
$method($event, $param);
|
||||||
} else {
|
} else {
|
||||||
$obj->$method($event, $param);
|
$obj->$method($event, $param);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$event->_continue) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$event->_continue) break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -181,12 +216,12 @@ class Doku_Event_Handler {
|
||||||
*
|
*
|
||||||
* function wrapper to process (create, trigger and destroy) an event
|
* function wrapper to process (create, trigger and destroy) an event
|
||||||
*
|
*
|
||||||
* @param $name (string) name for the event
|
* @param $name string name for the event
|
||||||
* @param $data (mixed) event data
|
* @param $data mixed event data
|
||||||
* @param $action (callback) (optional, default=NULL) default action, a php callback function
|
* @param $action callback (optional, default=NULL) default action, a php callback function
|
||||||
* @param $canPreventDefault (bool) (optional, default=true) can hooks prevent the default action
|
* @param $canPreventDefault bool (optional, default=true) can hooks prevent the default action
|
||||||
*
|
*
|
||||||
* @return (mixed) the event results value after all event processing is complete
|
* @return mixed the event results value after all event processing is complete
|
||||||
* by default this is the return value of the default action however
|
* by default this is the return value of the default action however
|
||||||
* it can be set or modified by event handler hooks
|
* it can be set or modified by event handler hooks
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -185,6 +185,8 @@ class HtmlDescribable {
|
||||||
*/
|
*/
|
||||||
var $descriptionTruncSize;
|
var $descriptionTruncSize;
|
||||||
|
|
||||||
|
var $description;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a formatted description field, depending on descriptionHtmlSyndicated and
|
* Returns a formatted description field, depending on descriptionHtmlSyndicated and
|
||||||
* $descriptionTruncSize properties
|
* $descriptionTruncSize properties
|
||||||
|
@ -222,7 +224,7 @@ class FeedHtmlField {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance of FeedHtmlField.
|
* Creates a new instance of FeedHtmlField.
|
||||||
* @param $string: if given, sets the rawFieldContent property
|
* @param string $parFieldContent: if given, sets the rawFieldContent property
|
||||||
*/
|
*/
|
||||||
function FeedHtmlField($parFieldContent) {
|
function FeedHtmlField($parFieldContent) {
|
||||||
if ($parFieldContent) {
|
if ($parFieldContent) {
|
||||||
|
@ -267,8 +269,14 @@ class FeedHtmlField {
|
||||||
* @author Kai Blankenhorn <kaib@bitfolge.de>
|
* @author Kai Blankenhorn <kaib@bitfolge.de>
|
||||||
*/
|
*/
|
||||||
class UniversalFeedCreator extends FeedCreator {
|
class UniversalFeedCreator extends FeedCreator {
|
||||||
|
/** @var FeedCreator */
|
||||||
var $_feed;
|
var $_feed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets format
|
||||||
|
*
|
||||||
|
* @param string $format
|
||||||
|
*/
|
||||||
function _setFormat($format) {
|
function _setFormat($format) {
|
||||||
switch (strtoupper($format)) {
|
switch (strtoupper($format)) {
|
||||||
|
|
||||||
|
@ -344,7 +352,7 @@ class UniversalFeedCreator extends FeedCreator {
|
||||||
* Creates a syndication feed based on the items previously added.
|
* Creates a syndication feed based on the items previously added.
|
||||||
*
|
*
|
||||||
* @see FeedCreator::addItem()
|
* @see FeedCreator::addItem()
|
||||||
* @param string format format the feed should comply to. Valid values are:
|
* @param string $format format the feed should comply to. Valid values are:
|
||||||
* "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS"
|
* "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS"
|
||||||
* @return string the contents of the feed.
|
* @return string the contents of the feed.
|
||||||
*/
|
*/
|
||||||
|
@ -358,10 +366,10 @@ class UniversalFeedCreator extends FeedCreator {
|
||||||
* header may be sent to redirect the use to the newly created file.
|
* header may be sent to redirect the use to the newly created file.
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*
|
*
|
||||||
* @param string format format the feed should comply to. Valid values are:
|
* @param string $format format the feed should comply to. Valid values are:
|
||||||
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS"
|
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS"
|
||||||
* @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
* @param string $filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
||||||
* @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.
|
* @param boolean $displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.
|
||||||
*/
|
*/
|
||||||
function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {
|
function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {
|
||||||
$this->_setFormat($format);
|
$this->_setFormat($format);
|
||||||
|
@ -376,10 +384,10 @@ class UniversalFeedCreator extends FeedCreator {
|
||||||
* before anything else, especially before you do the time consuming task to build the feed
|
* before anything else, especially before you do the time consuming task to build the feed
|
||||||
* (web fetching, for example).
|
* (web fetching, for example).
|
||||||
*
|
*
|
||||||
* @param string format format the feed should comply to. Valid values are:
|
* @param string $format format the feed should comply to. Valid values are:
|
||||||
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
|
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
|
||||||
* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
* @param string $filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
||||||
* @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
|
* @param int $timeout optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
|
||||||
*/
|
*/
|
||||||
function useCached($format="RSS0.91", $filename="", $timeout=3600) {
|
function useCached($format="RSS0.91", $filename="", $timeout=3600) {
|
||||||
$this->_setFormat($format);
|
$this->_setFormat($format);
|
||||||
|
@ -390,7 +398,7 @@ class UniversalFeedCreator extends FeedCreator {
|
||||||
/**
|
/**
|
||||||
* Outputs feed to the browser - needed for on-the-fly feed generation (like it is done in WordPress, etc.)
|
* Outputs feed to the browser - needed for on-the-fly feed generation (like it is done in WordPress, etc.)
|
||||||
*
|
*
|
||||||
* @param format string format the feed should comply to. Valid values are:
|
* @param $format string format the feed should comply to. Valid values are:
|
||||||
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
|
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
|
||||||
*/
|
*/
|
||||||
function outputFeed($format='RSS0.91') {
|
function outputFeed($format='RSS0.91') {
|
||||||
|
@ -422,7 +430,13 @@ class FeedCreator extends HtmlDescribable {
|
||||||
/**
|
/**
|
||||||
* Optional attributes of a feed.
|
* Optional attributes of a feed.
|
||||||
*/
|
*/
|
||||||
var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;
|
var $syndicationURL, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;
|
||||||
|
/**
|
||||||
|
* Optional attribute of a feed
|
||||||
|
*
|
||||||
|
* @var FeedImage
|
||||||
|
*/
|
||||||
|
var $image = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url of the external xsl stylesheet used to format the naked rss feed.
|
* The url of the external xsl stylesheet used to format the naked rss feed.
|
||||||
|
@ -430,13 +444,18 @@ class FeedCreator extends HtmlDescribable {
|
||||||
*/
|
*/
|
||||||
var $xslStyleSheet = "";
|
var $xslStyleSheet = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Style sheet for rss feed
|
||||||
|
*/
|
||||||
|
var $cssStyleSheet = "";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @access private
|
* @access private
|
||||||
|
* @var FeedItem[]
|
||||||
*/
|
*/
|
||||||
var $items = Array();
|
var $items = Array();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This feed's MIME content type.
|
* This feed's MIME content type.
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
|
@ -466,7 +485,7 @@ class FeedCreator extends HtmlDescribable {
|
||||||
/**
|
/**
|
||||||
* Adds an FeedItem to the feed.
|
* Adds an FeedItem to the feed.
|
||||||
*
|
*
|
||||||
* @param object FeedItem $item The FeedItem to add to the feed.
|
* @param FeedItem $item The FeedItem to add to the feed.
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
function addItem($item) {
|
function addItem($item) {
|
||||||
|
@ -482,8 +501,8 @@ class FeedCreator extends HtmlDescribable {
|
||||||
* If the string is already shorter than $length, it is returned unchanged.
|
* If the string is already shorter than $length, it is returned unchanged.
|
||||||
*
|
*
|
||||||
* @static
|
* @static
|
||||||
* @param string string A string to be truncated.
|
* @param string $string A string to be truncated.
|
||||||
* @param int length the maximum length the string should be truncated to
|
* @param int $length the maximum length the string should be truncated to
|
||||||
* @return string the truncated string
|
* @return string the truncated string
|
||||||
*/
|
*/
|
||||||
function iTrunc($string, $length) {
|
function iTrunc($string, $length) {
|
||||||
|
@ -527,8 +546,8 @@ class FeedCreator extends HtmlDescribable {
|
||||||
/**
|
/**
|
||||||
* Creates a string containing all additional elements specified in
|
* Creates a string containing all additional elements specified in
|
||||||
* $additionalElements.
|
* $additionalElements.
|
||||||
* @param elements array an associative array containing key => value pairs
|
* @param $elements array an associative array containing key => value pairs
|
||||||
* @param indentString string a string that will be inserted before every generated line
|
* @param $indentString string a string that will be inserted before every generated line
|
||||||
* @return string the XML tags corresponding to $additionalElements
|
* @return string the XML tags corresponding to $additionalElements
|
||||||
*/
|
*/
|
||||||
function _createAdditionalElements($elements, $indentString="") {
|
function _createAdditionalElements($elements, $indentString="") {
|
||||||
|
@ -541,6 +560,9 @@ class FeedCreator extends HtmlDescribable {
|
||||||
return $ae;
|
return $ae;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create elements for stylesheets
|
||||||
|
*/
|
||||||
function _createStylesheetReferences() {
|
function _createStylesheetReferences() {
|
||||||
$xml = "";
|
$xml = "";
|
||||||
if ($this->cssStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->cssStyleSheet."\" type=\"text/css\"?>\n";
|
if ($this->cssStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->cssStyleSheet."\" type=\"text/css\"?>\n";
|
||||||
|
@ -610,8 +632,8 @@ class FeedCreator extends HtmlDescribable {
|
||||||
* before anything else, especially before you do the time consuming task to build the feed
|
* before anything else, especially before you do the time consuming task to build the feed
|
||||||
* (web fetching, for example).
|
* (web fetching, for example).
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
* @param $filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
||||||
* @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
|
* @param $timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
|
||||||
*/
|
*/
|
||||||
function useCached($filename="", $timeout=3600) {
|
function useCached($filename="", $timeout=3600) {
|
||||||
$this->_timeout = $timeout;
|
$this->_timeout = $timeout;
|
||||||
|
@ -629,8 +651,8 @@ class FeedCreator extends HtmlDescribable {
|
||||||
* header may be sent to redirect the user to the newly created file.
|
* header may be sent to redirect the user to the newly created file.
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*
|
*
|
||||||
* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
* @param $filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
|
||||||
* @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.
|
* @param $displayContents boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.
|
||||||
*/
|
*/
|
||||||
function saveFeed($filename="", $displayContents=true) {
|
function saveFeed($filename="", $displayContents=true) {
|
||||||
if ($filename=="") {
|
if ($filename=="") {
|
||||||
|
@ -667,6 +689,7 @@ class FeedCreator extends HtmlDescribable {
|
||||||
* Usually, you won't need to use this.
|
* Usually, you won't need to use this.
|
||||||
*/
|
*/
|
||||||
class FeedDate {
|
class FeedDate {
|
||||||
|
/** @var int */
|
||||||
var $unix;
|
var $unix;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -726,7 +749,7 @@ class FeedDate {
|
||||||
/**
|
/**
|
||||||
* Gets the date stored in this FeedDate as an RFC 822 date.
|
* Gets the date stored in this FeedDate as an RFC 822 date.
|
||||||
*
|
*
|
||||||
* @return a date in RFC 822 format
|
* @return string a date in RFC 822 format
|
||||||
*/
|
*/
|
||||||
function rfc822() {
|
function rfc822() {
|
||||||
//return gmdate("r",$this->unix);
|
//return gmdate("r",$this->unix);
|
||||||
|
@ -738,7 +761,7 @@ class FeedDate {
|
||||||
/**
|
/**
|
||||||
* Gets the date stored in this FeedDate as an ISO 8601 date.
|
* Gets the date stored in this FeedDate as an ISO 8601 date.
|
||||||
*
|
*
|
||||||
* @return a date in ISO 8601 (RFC 3339) format
|
* @return string a date in ISO 8601 (RFC 3339) format
|
||||||
*/
|
*/
|
||||||
function iso8601() {
|
function iso8601() {
|
||||||
$date = gmdate("Y-m-d\TH:i:sO",$this->unix);
|
$date = gmdate("Y-m-d\TH:i:sO",$this->unix);
|
||||||
|
@ -751,7 +774,7 @@ class FeedDate {
|
||||||
/**
|
/**
|
||||||
* Gets the date stored in this FeedDate as unix time stamp.
|
* Gets the date stored in this FeedDate as unix time stamp.
|
||||||
*
|
*
|
||||||
* @return a date as a unix time stamp
|
* @return int a date as a unix time stamp
|
||||||
*/
|
*/
|
||||||
function unix() {
|
function unix() {
|
||||||
return $this->unix;
|
return $this->unix;
|
||||||
|
@ -777,7 +800,7 @@ class RSSCreator10 extends FeedCreator {
|
||||||
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
||||||
$feed.= $this->_createGeneratorComment();
|
$feed.= $this->_createGeneratorComment();
|
||||||
if ($this->cssStyleSheet=="") {
|
if ($this->cssStyleSheet=="") {
|
||||||
$cssStyleSheet = "http://www.w3.org/2000/08/w3c-synd/style.css";
|
$this->cssStyleSheet = "http://www.w3.org/2000/08/w3c-synd/style.css";
|
||||||
}
|
}
|
||||||
$feed.= $this->_createStylesheetReferences();
|
$feed.= $this->_createStylesheetReferences();
|
||||||
$feed.= "<rdf:RDF\n";
|
$feed.= "<rdf:RDF\n";
|
||||||
|
@ -1032,12 +1055,16 @@ class PIECreator01 extends FeedCreator {
|
||||||
$this->encoding = "utf-8";
|
$this->encoding = "utf-8";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build content
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function createFeed() {
|
function createFeed() {
|
||||||
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
||||||
$feed.= $this->_createStylesheetReferences();
|
$feed.= $this->_createStylesheetReferences();
|
||||||
$feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n";
|
$feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n";
|
||||||
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
|
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
|
||||||
$this->truncSize = 500;
|
$this->descriptionTruncSize = 500;
|
||||||
$feed.= " <subtitle>".$this->getDescription()."</subtitle>\n";
|
$feed.= " <subtitle>".$this->getDescription()."</subtitle>\n";
|
||||||
$feed.= " <link>".$this->link."</link>\n";
|
$feed.= " <link>".$this->link."</link>\n";
|
||||||
$icnt = count($this->items);
|
$icnt = count($this->items);
|
||||||
|
@ -1091,6 +1118,10 @@ class AtomCreator10 extends FeedCreator {
|
||||||
$this->encoding = "utf-8";
|
$this->encoding = "utf-8";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build content
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function createFeed() {
|
function createFeed() {
|
||||||
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
||||||
$feed.= $this->_createGeneratorComment();
|
$feed.= $this->_createGeneratorComment();
|
||||||
|
@ -1174,6 +1205,10 @@ class AtomCreator03 extends FeedCreator {
|
||||||
$this->encoding = "utf-8";
|
$this->encoding = "utf-8";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build content
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function createFeed() {
|
function createFeed() {
|
||||||
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
||||||
$feed.= $this->_createGeneratorComment();
|
$feed.= $this->_createGeneratorComment();
|
||||||
|
@ -1281,6 +1316,7 @@ class MBOXCreator extends FeedCreator {
|
||||||
*/
|
*/
|
||||||
function createFeed() {
|
function createFeed() {
|
||||||
$icnt = count($this->items);
|
$icnt = count($this->items);
|
||||||
|
$feed = "";
|
||||||
for ($i=0; $i<$icnt; $i++) {
|
for ($i=0; $i<$icnt; $i++) {
|
||||||
if ($this->items[$i]->author!="") {
|
if ($this->items[$i]->author!="") {
|
||||||
$from = $this->items[$i]->author;
|
$from = $this->items[$i]->author;
|
||||||
|
@ -1331,6 +1367,10 @@ class OPMLCreator extends FeedCreator {
|
||||||
$this->encoding = "utf-8";
|
$this->encoding = "utf-8";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build content
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function createFeed() {
|
function createFeed() {
|
||||||
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
|
||||||
$feed.= $this->_createGeneratorComment();
|
$feed.= $this->_createGeneratorComment();
|
||||||
|
@ -1441,6 +1481,7 @@ class HTMLCreator extends FeedCreator {
|
||||||
}
|
}
|
||||||
|
|
||||||
//set an openInNewWindow_token_to be inserted or not
|
//set an openInNewWindow_token_to be inserted or not
|
||||||
|
$targetInsert = "";
|
||||||
if ($this->openInNewWindow) {
|
if ($this->openInNewWindow) {
|
||||||
$targetInsert = " target='_blank'";
|
$targetInsert = " target='_blank'";
|
||||||
}
|
}
|
||||||
|
@ -1568,6 +1609,14 @@ class JSCreator extends HTMLCreator {
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
*/
|
*/
|
||||||
class DokuWikiFeedCreator extends UniversalFeedCreator{
|
class DokuWikiFeedCreator extends UniversalFeedCreator{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build content
|
||||||
|
*
|
||||||
|
* @param string $format
|
||||||
|
* @param string $encoding
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function createFeed($format = "RSS0.91",$encoding='iso-8859-15') {
|
function createFeed($format = "RSS0.91",$encoding='iso-8859-15') {
|
||||||
$this->_setFormat($format);
|
$this->_setFormat($format);
|
||||||
$this->_feed->encoding = $encoding;
|
$this->_feed->encoding = $encoding;
|
||||||
|
|
|
@ -15,13 +15,15 @@
|
||||||
*
|
*
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
* @author Ben Coburn <btcoburn@silicodon.net>
|
* @author Ben Coburn <btcoburn@silicodon.net>
|
||||||
|
* @author Gerry Weissbach <dokuwiki@gammaproduction.de>
|
||||||
* @param string $file local file to send
|
* @param string $file local file to send
|
||||||
* @param string $mime mime type of the file
|
* @param string $mime mime type of the file
|
||||||
* @param bool $dl set to true to force a browser download
|
* @param bool $dl set to true to force a browser download
|
||||||
* @param int $cache remaining cache time in seconds (-1 for $conf['cache'], 0 for no-cache)
|
* @param int $cache remaining cache time in seconds (-1 for $conf['cache'], 0 for no-cache)
|
||||||
* @param bool $public is this a public ressource or a private one?
|
* @param bool $public is this a public ressource or a private one?
|
||||||
|
* @param string $orig original file to send - the file name will be used for the Content-Disposition
|
||||||
*/
|
*/
|
||||||
function sendFile($file, $mime, $dl, $cache, $public = false) {
|
function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null) {
|
||||||
global $conf;
|
global $conf;
|
||||||
// send mime headers
|
// send mime headers
|
||||||
header("Content-Type: $mime");
|
header("Content-Type: $mime");
|
||||||
|
@ -62,15 +64,20 @@ function sendFile($file, $mime, $dl, $cache, $public = false) {
|
||||||
$fmtime = @filemtime($file);
|
$fmtime = @filemtime($file);
|
||||||
http_conditionalRequest($fmtime);
|
http_conditionalRequest($fmtime);
|
||||||
|
|
||||||
|
// Use the current $file if is $orig is not set.
|
||||||
|
if ( $orig == null ) {
|
||||||
|
$orig = $file;
|
||||||
|
}
|
||||||
|
|
||||||
//download or display?
|
//download or display?
|
||||||
if($dl) {
|
if($dl) {
|
||||||
header('Content-Disposition: attachment; filename="'.utf8_basename($file).'";');
|
header('Content-Disposition: attachment; filename="'.utf8_basename($orig).'";');
|
||||||
} else {
|
} else {
|
||||||
header('Content-Disposition: inline; filename="'.utf8_basename($file).'";');
|
header('Content-Disposition: inline; filename="'.utf8_basename($orig).'";');
|
||||||
}
|
}
|
||||||
|
|
||||||
//use x-sendfile header to pass the delivery to compatible webservers
|
//use x-sendfile header to pass the delivery to compatible webservers
|
||||||
if(http_sendfile($file)) exit;
|
http_sendfile($file);
|
||||||
|
|
||||||
// send file contents
|
// send file contents
|
||||||
$fp = @fopen($file, "rb");
|
$fp = @fopen($file, "rb");
|
||||||
|
|
|
@ -47,15 +47,11 @@ class Doku_Form {
|
||||||
* with up to four parameters is deprecated, instead the first parameter
|
* with up to four parameters is deprecated, instead the first parameter
|
||||||
* should be an array with parameters.
|
* should be an array with parameters.
|
||||||
*
|
*
|
||||||
* @param mixed $params Parameters for the HTML form element; Using the
|
* @param mixed $params Parameters for the HTML form element; Using the deprecated
|
||||||
* deprecated calling convention this is the ID
|
* calling convention this is the ID attribute of the form
|
||||||
* attribute of the form
|
* @param bool|string $action (optional, deprecated) submit URL, defaults to current page
|
||||||
* @param string $action (optional, deprecated) submit URL, defaults to
|
* @param bool|string $method (optional, deprecated) 'POST' or 'GET', default is POST
|
||||||
* current page
|
* @param bool|string $enctype (optional, deprecated) Encoding type of the data
|
||||||
* @param string $method (optional, deprecated) 'POST' or 'GET', default
|
|
||||||
* is POST
|
|
||||||
* @param string $enctype (optional, deprecated) Encoding type of the
|
|
||||||
* data
|
|
||||||
* @author Tom N Harris <tnharris@whoopdedo.org>
|
* @author Tom N Harris <tnharris@whoopdedo.org>
|
||||||
*/
|
*/
|
||||||
function Doku_Form($params, $action=false, $method=false, $enctype=false) {
|
function Doku_Form($params, $action=false, $method=false, $enctype=false) {
|
||||||
|
@ -176,7 +172,7 @@ class Doku_Form {
|
||||||
* Gets the position of the first of a type of element.
|
* Gets the position of the first of a type of element.
|
||||||
*
|
*
|
||||||
* @param string $type Element type to look for.
|
* @param string $type Element type to look for.
|
||||||
* @return array pseudo-element if found, false otherwise
|
* @return int position of element if found, otherwise false
|
||||||
* @author Tom N Harris <tnharris@whoopdedo.org>
|
* @author Tom N Harris <tnharris@whoopdedo.org>
|
||||||
*/
|
*/
|
||||||
function findElementByType($type) {
|
function findElementByType($type) {
|
||||||
|
@ -193,7 +189,7 @@ class Doku_Form {
|
||||||
* Gets the position of the element with an ID attribute.
|
* Gets the position of the element with an ID attribute.
|
||||||
*
|
*
|
||||||
* @param string $id ID of the element to find.
|
* @param string $id ID of the element to find.
|
||||||
* @return array pseudo-element if found, false otherwise
|
* @return int position of element if found, otherwise false
|
||||||
* @author Tom N Harris <tnharris@whoopdedo.org>
|
* @author Tom N Harris <tnharris@whoopdedo.org>
|
||||||
*/
|
*/
|
||||||
function findElementById($id) {
|
function findElementById($id) {
|
||||||
|
@ -211,7 +207,7 @@ class Doku_Form {
|
||||||
*
|
*
|
||||||
* @param string $name Attribute name.
|
* @param string $name Attribute name.
|
||||||
* @param string $value Attribute value.
|
* @param string $value Attribute value.
|
||||||
* @return array pseudo-element if found, false otherwise
|
* @return int position of element if found, otherwise false
|
||||||
* @author Tom N Harris <tnharris@whoopdedo.org>
|
* @author Tom N Harris <tnharris@whoopdedo.org>
|
||||||
*/
|
*/
|
||||||
function findElementByAttribute($name, $value) {
|
function findElementByAttribute($name, $value) {
|
||||||
|
@ -230,7 +226,7 @@ class Doku_Form {
|
||||||
* first (underflow) or last (overflow) element.
|
* first (underflow) or last (overflow) element.
|
||||||
*
|
*
|
||||||
* @param int $pos 0-based index
|
* @param int $pos 0-based index
|
||||||
* @return arrayreference pseudo-element
|
* @return array reference pseudo-element
|
||||||
* @author Tom N Harris <tnharris@whoopdedo.org>
|
* @author Tom N Harris <tnharris@whoopdedo.org>
|
||||||
*/
|
*/
|
||||||
function &getElementAt($pos) {
|
function &getElementAt($pos) {
|
||||||
|
@ -565,10 +561,11 @@ function form_makeListboxField($name, $values, $selected='', $label=null, $id=''
|
||||||
if (is_null($label)) $label = $name;
|
if (is_null($label)) $label = $name;
|
||||||
$options = array();
|
$options = array();
|
||||||
reset($values);
|
reset($values);
|
||||||
if (is_null($selected) || $selected == '')
|
if (is_null($selected) || $selected == '') {
|
||||||
$selected = array();
|
$selected = array();
|
||||||
elseif (!is_array($selected))
|
} elseif (!is_array($selected)) {
|
||||||
$selected = array($selected);
|
$selected = array($selected);
|
||||||
|
}
|
||||||
// FIXME: php doesn't know the difference between a string and an integer
|
// FIXME: php doesn't know the difference between a string and an integer
|
||||||
if (is_string(key($values))) {
|
if (is_string(key($values))) {
|
||||||
foreach ($values as $val=>$text) {
|
foreach ($values as $val=>$text) {
|
||||||
|
@ -576,11 +573,13 @@ function form_makeListboxField($name, $values, $selected='', $label=null, $id=''
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($values as $val) {
|
foreach ($values as $val) {
|
||||||
if (is_array($val))
|
$disabled = false;
|
||||||
@list($val,$text) = $val;
|
if (is_array($val)) {
|
||||||
else
|
@list($val,$text,$disabled) = $val;
|
||||||
|
} else {
|
||||||
$text = null;
|
$text = null;
|
||||||
$options[] = array($val,$text,in_array($val,$selected));
|
}
|
||||||
|
$options[] = array($val,$text,in_array($val,$selected),$disabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$elem = array('_elem'=>'listboxfield', '_options'=>$options, '_text'=>$label, '_class'=>$class,
|
$elem = array('_elem'=>'listboxfield', '_options'=>$options, '_text'=>$label, '_class'=>$class,
|
||||||
|
@ -934,11 +933,12 @@ function form_listboxfield($attrs) {
|
||||||
$s .= '<select '.buildAttributes($attrs,true).'>'.DOKU_LF;
|
$s .= '<select '.buildAttributes($attrs,true).'>'.DOKU_LF;
|
||||||
if (!empty($attrs['_options'])) {
|
if (!empty($attrs['_options'])) {
|
||||||
foreach ($attrs['_options'] as $opt) {
|
foreach ($attrs['_options'] as $opt) {
|
||||||
@list($value,$text,$select) = $opt;
|
@list($value,$text,$select,$disabled) = $opt;
|
||||||
$p = '';
|
$p = '';
|
||||||
if(is_null($text)) $text = $value;
|
if(is_null($text)) $text = $value;
|
||||||
$p .= ' value="'.formText($value).'"';
|
$p .= ' value="'.formText($value).'"';
|
||||||
if (!empty($select)) $p .= ' selected="selected"';
|
if (!empty($select)) $p .= ' selected="selected"';
|
||||||
|
if ($disabled) $p .= ' disabled="disabled"';
|
||||||
$s .= '<option'.$p.'>'.formText($text).'</option>';
|
$s .= '<option'.$p.'>'.formText($text).'</option>';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -72,8 +72,20 @@ function _ft_pageSearch(&$data) {
|
||||||
$pages = end($stack);
|
$pages = end($stack);
|
||||||
$pages_matched = array();
|
$pages_matched = array();
|
||||||
foreach(array_keys($pages) as $id){
|
foreach(array_keys($pages) as $id){
|
||||||
$text = utf8_strtolower(rawWiki($id));
|
$evdata = array(
|
||||||
if (strpos($text, $phrase) !== false) {
|
'id' => $id,
|
||||||
|
'phrase' => $phrase,
|
||||||
|
'text' => rawWiki($id)
|
||||||
|
);
|
||||||
|
$evt = new Doku_Event('FULLTEXT_PHRASE_MATCH',$evdata);
|
||||||
|
if ($evt->advise_before() && $evt->result !== true) {
|
||||||
|
$text = utf8_strtolower($evdata['text']);
|
||||||
|
if (strpos($text, $phrase) !== false) {
|
||||||
|
$evt->result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$evt->advise_after();
|
||||||
|
if ($evt->result === true) {
|
||||||
$pages_matched[$id] = 0; // phrase: always 0 hit
|
$pages_matched[$id] = 0; // phrase: always 0 hit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -333,7 +345,7 @@ function ft_snippet($id,$highlight){
|
||||||
$pre = min($pre,100-$post);
|
$pre = min($pre,100-$post);
|
||||||
} else if ($post>50) {
|
} else if ($post>50) {
|
||||||
$post = min($post, 100-$pre);
|
$post = min($post, 100-$pre);
|
||||||
} else {
|
} else if ($offset == 0) {
|
||||||
// both are less than 50, means the context is the whole string
|
// both are less than 50, means the context is the whole string
|
||||||
// make it so and break out of this loop - there is no need for the
|
// make it so and break out of this loop - there is no need for the
|
||||||
// complex snippet calculations
|
// complex snippet calculations
|
||||||
|
@ -354,12 +366,12 @@ function ft_snippet($id,$highlight){
|
||||||
}
|
}
|
||||||
|
|
||||||
// set $offset for next match attempt
|
// set $offset for next match attempt
|
||||||
// substract strlen to avoid splitting a potential search success,
|
// continue matching after the current match
|
||||||
// this is an approximation as the search pattern may match strings
|
// if the current match is not the longest possible match starting at the current offset
|
||||||
// of varying length and it will fail if the context snippet
|
// this prevents further matching of this snippet but for possible matches of length
|
||||||
// boundary breaks a matching string longer than the current match
|
// smaller than match length + context (at least 50 characters) this match is part of the context
|
||||||
$utf8_offset = $utf8_idx + $post;
|
$utf8_offset = $utf8_idx + $utf8_len;
|
||||||
$offset = $idx + strlen(utf8_substr($text,$utf8_idx,$post));
|
$offset = $idx + strlen(utf8_substr($text,$utf8_idx,$utf8_len));
|
||||||
$offset = utf8_correctIdx($text,$offset);
|
$offset = utf8_correctIdx($text,$offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ if(!defined('NL')) define('NL',"\n");
|
||||||
* @return string the HTML code of the link
|
* @return string the HTML code of the link
|
||||||
*/
|
*/
|
||||||
function html_wikilink($id,$name=null,$search=''){
|
function html_wikilink($id,$name=null,$search=''){
|
||||||
|
/** @var Doku_Renderer_xhtml $xhtml_renderer */
|
||||||
static $xhtml_renderer = null;
|
static $xhtml_renderer = null;
|
||||||
if(is_null($xhtml_renderer)){
|
if(is_null($xhtml_renderer)){
|
||||||
$xhtml_renderer = p_get_renderer('xhtml');
|
$xhtml_renderer = p_get_renderer('xhtml');
|
||||||
|
@ -64,6 +65,20 @@ function html_login(){
|
||||||
print '</div>'.NL;
|
print '</div>'.NL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Denied page content
|
||||||
|
*
|
||||||
|
* @return string html
|
||||||
|
*/
|
||||||
|
function html_denied() {
|
||||||
|
print p_locale_xhtml('denied');
|
||||||
|
|
||||||
|
if(!$_SERVER['REMOTE_USER']){
|
||||||
|
html_login();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* inserts section edit buttons if wanted or removes the markers
|
* inserts section edit buttons if wanted or removes the markers
|
||||||
*
|
*
|
||||||
|
@ -414,20 +429,23 @@ function html_revisions($first=0, $media_id = false){
|
||||||
global $conf;
|
global $conf;
|
||||||
global $lang;
|
global $lang;
|
||||||
$id = $ID;
|
$id = $ID;
|
||||||
|
if ($media_id) {
|
||||||
|
$id = $media_id;
|
||||||
|
$changelog = new MediaChangeLog($id);
|
||||||
|
} else {
|
||||||
|
$changelog = new PageChangeLog($id);
|
||||||
|
}
|
||||||
|
|
||||||
/* we need to get one additional log entry to be able to
|
/* we need to get one additional log entry to be able to
|
||||||
* decide if this is the last page or is there another one.
|
* decide if this is the last page or is there another one.
|
||||||
* see html_recent()
|
* see html_recent()
|
||||||
*/
|
*/
|
||||||
if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1);
|
|
||||||
else {
|
$revisions = $changelog->getRevisions($first, $conf['recent']+1);
|
||||||
$revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true);
|
|
||||||
$id = $media_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(count($revisions)==0 && $first!=0){
|
if(count($revisions)==0 && $first!=0){
|
||||||
$first=0;
|
$first=0;
|
||||||
if (!$media_id) $revisions = getRevisions($ID, $first, $conf['recent']+1);
|
$revisions = $changelog->getRevisions($first, $conf['recent']+1);
|
||||||
else $revisions = getRevisions($media_id, $first, $conf['recent']+1, 8192, true);
|
|
||||||
}
|
}
|
||||||
$hasNext = false;
|
$hasNext = false;
|
||||||
if (count($revisions)>$conf['recent']) {
|
if (count($revisions)>$conf['recent']) {
|
||||||
|
@ -486,15 +504,18 @@ function html_revisions($first=0, $media_id = false){
|
||||||
$form->addElement(form_makeCloseTag('span'));
|
$form->addElement(form_makeCloseTag('span'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$changelog->setChunkSize(1024);
|
||||||
|
|
||||||
$form->addElement(form_makeOpenTag('span', array('class' => 'user')));
|
$form->addElement(form_makeOpenTag('span', array('class' => 'user')));
|
||||||
if (!$media_id) $editor = $INFO['editor'];
|
if($media_id) {
|
||||||
else {
|
$revinfo = $changelog->getRevisionInfo(@filemtime(fullpath(mediaFN($id))));
|
||||||
$revinfo = getRevisionInfo($id, @filemtime(fullpath(mediaFN($id))), 1024, true);
|
if($revinfo['user']) {
|
||||||
if($revinfo['user']){
|
|
||||||
$editor = $revinfo['user'];
|
$editor = $revinfo['user'];
|
||||||
}else{
|
} else {
|
||||||
$editor = $revinfo['ip'];
|
$editor = $revinfo['ip'];
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$editor = $INFO['editor'];
|
||||||
}
|
}
|
||||||
$form->addElement((empty($editor))?('('.$lang['external_edit'].')'):editorinfo($editor));
|
$form->addElement((empty($editor))?('('.$lang['external_edit'].')'):editorinfo($editor));
|
||||||
$form->addElement(form_makeCloseTag('span'));
|
$form->addElement(form_makeCloseTag('span'));
|
||||||
|
@ -509,12 +530,11 @@ function html_revisions($first=0, $media_id = false){
|
||||||
|
|
||||||
foreach($revisions as $rev){
|
foreach($revisions as $rev){
|
||||||
$date = dformat($rev);
|
$date = dformat($rev);
|
||||||
if (!$media_id) {
|
$info = $changelog->getRevisionInfo($rev);
|
||||||
$info = getRevisionInfo($id,$rev,true);
|
if($media_id) {
|
||||||
$exists = page_exists($id,$rev);
|
$exists = @file_exists(mediaFN($id, $rev));
|
||||||
} else {
|
} else {
|
||||||
$info = getRevisionInfo($id,$rev,true,true);
|
$exists = page_exists($id, $rev);
|
||||||
$exists = @file_exists(mediaFN($id,$rev));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
|
if ($info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
|
||||||
|
@ -691,7 +711,7 @@ function html_recent($first=0, $show_changes='both'){
|
||||||
|
|
||||||
$form->addElement(form_makeOpenTag('div', array('class' => 'li')));
|
$form->addElement(form_makeOpenTag('div', array('class' => 'li')));
|
||||||
|
|
||||||
if ($recent['media']) {
|
if (!empty($recent['media'])) {
|
||||||
$form->addElement(media_printicon($recent['id']));
|
$form->addElement(media_printicon($recent['id']));
|
||||||
} else {
|
} else {
|
||||||
$icon = DOKU_BASE.'lib/images/fileicons/file.png';
|
$icon = DOKU_BASE.'lib/images/fileicons/file.png';
|
||||||
|
@ -705,7 +725,7 @@ function html_recent($first=0, $show_changes='both'){
|
||||||
$diff = false;
|
$diff = false;
|
||||||
$href = '';
|
$href = '';
|
||||||
|
|
||||||
if ($recent['media']) {
|
if (!empty($recent['media'])) {
|
||||||
$diff = (count(getRevisions($recent['id'], 0, 1, 8192, true)) && @file_exists(mediaFN($recent['id'])));
|
$diff = (count(getRevisions($recent['id'], 0, 1, 8192, true)) && @file_exists(mediaFN($recent['id'])));
|
||||||
if ($diff) {
|
if ($diff) {
|
||||||
$href = media_managerURL(array('tab_details' => 'history',
|
$href = media_managerURL(array('tab_details' => 'history',
|
||||||
|
@ -715,7 +735,7 @@ function html_recent($first=0, $show_changes='both'){
|
||||||
$href = wl($recent['id'],"do=diff", false, '&');
|
$href = wl($recent['id'],"do=diff", false, '&');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($recent['media'] && !$diff) {
|
if (!empty($recent['media']) && !$diff) {
|
||||||
$form->addElement('<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />');
|
$form->addElement('<img src="'.DOKU_BASE.'lib/images/blank.gif" width="15" height="11" alt="" />');
|
||||||
} else {
|
} else {
|
||||||
$form->addElement(form_makeOpenTag('a', array('class' => 'diff_link', 'href' => $href)));
|
$form->addElement(form_makeOpenTag('a', array('class' => 'diff_link', 'href' => $href)));
|
||||||
|
@ -729,7 +749,7 @@ function html_recent($first=0, $show_changes='both'){
|
||||||
$form->addElement(form_makeCloseTag('a'));
|
$form->addElement(form_makeCloseTag('a'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($recent['media']) {
|
if (!empty($recent['media'])) {
|
||||||
$href = media_managerURL(array('tab_details' => 'history',
|
$href = media_managerURL(array('tab_details' => 'history',
|
||||||
'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
|
'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
|
||||||
} else {
|
} else {
|
||||||
|
@ -745,7 +765,7 @@ function html_recent($first=0, $show_changes='both'){
|
||||||
)));
|
)));
|
||||||
$form->addElement(form_makeCloseTag('a'));
|
$form->addElement(form_makeCloseTag('a'));
|
||||||
|
|
||||||
if ($recent['media']) {
|
if (!empty($recent['media'])) {
|
||||||
$href = media_managerURL(array('tab_details' => 'view', 'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
|
$href = media_managerURL(array('tab_details' => 'view', 'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
|
||||||
$class = (file_exists(mediaFN($recent['id']))) ? 'wikilink1' : $class = 'wikilink2';
|
$class = (file_exists(mediaFN($recent['id']))) ? 'wikilink1' : $class = 'wikilink2';
|
||||||
$form->addElement(form_makeOpenTag('a', array('class' => $class, 'href' => $href)));
|
$form->addElement(form_makeOpenTag('a', array('class' => $class, 'href' => $href)));
|
||||||
|
@ -1008,10 +1028,15 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa
|
||||||
$ml_or_wl = $media ? 'ml' : 'wl';
|
$ml_or_wl = $media ? 'ml' : 'wl';
|
||||||
$l_minor = $r_minor = '';
|
$l_minor = $r_minor = '';
|
||||||
|
|
||||||
|
if($media) {
|
||||||
|
$changelog = new MediaChangeLog($id);
|
||||||
|
} else {
|
||||||
|
$changelog = new PageChangeLog($id);
|
||||||
|
}
|
||||||
if(!$l_rev){
|
if(!$l_rev){
|
||||||
$l_head = '—';
|
$l_head = '—';
|
||||||
}else{
|
}else{
|
||||||
$l_info = getRevisionInfo($id,$l_rev,true, $media);
|
$l_info = $changelog->getRevisionInfo($l_rev);
|
||||||
if($l_info['user']){
|
if($l_info['user']){
|
||||||
$l_user = '<bdi>'.editorinfo($l_info['user']).'</bdi>';
|
$l_user = '<bdi>'.editorinfo($l_info['user']).'</bdi>';
|
||||||
if(auth_ismanager()) $l_user .= ' <bdo dir="ltr">('.$l_info['ip'].')</bdo>';
|
if(auth_ismanager()) $l_user .= ' <bdo dir="ltr">('.$l_info['ip'].')</bdo>';
|
||||||
|
@ -1029,7 +1054,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa
|
||||||
}
|
}
|
||||||
|
|
||||||
if($r_rev){
|
if($r_rev){
|
||||||
$r_info = getRevisionInfo($id,$r_rev,true, $media);
|
$r_info = $changelog->getRevisionInfo($r_rev);
|
||||||
if($r_info['user']){
|
if($r_info['user']){
|
||||||
$r_user = '<bdi>'.editorinfo($r_info['user']).'</bdi>';
|
$r_user = '<bdi>'.editorinfo($r_info['user']).'</bdi>';
|
||||||
if(auth_ismanager()) $r_user .= ' <bdo dir="ltr">('.$r_info['ip'].')</bdo>';
|
if(auth_ismanager()) $r_user .= ' <bdo dir="ltr">('.$r_info['ip'].')</bdo>';
|
||||||
|
@ -1045,7 +1070,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa
|
||||||
$r_head_title.'</a></bdi>'.
|
$r_head_title.'</a></bdi>'.
|
||||||
$head_separator.$r_user.' '.$r_sum;
|
$head_separator.$r_user.' '.$r_sum;
|
||||||
}elseif($_rev = @filemtime($media_or_wikiFN($id))){
|
}elseif($_rev = @filemtime($media_or_wikiFN($id))){
|
||||||
$_info = getRevisionInfo($id,$_rev,true, $media);
|
$_info = $changelog->getRevisionInfo($_rev);
|
||||||
if($_info['user']){
|
if($_info['user']){
|
||||||
$_user = '<bdi>'.editorinfo($_info['user']).'</bdi>';
|
$_user = '<bdi>'.editorinfo($_info['user']).'</bdi>';
|
||||||
if(auth_ismanager()) $_user .= ' <bdo dir="ltr">('.$_info['ip'].')</bdo>';
|
if(auth_ismanager()) $_user .= ' <bdo dir="ltr">('.$_info['ip'].')</bdo>';
|
||||||
|
@ -1069,162 +1094,386 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = fa
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* show diff
|
* Show diff
|
||||||
|
* between current page version and provided $text
|
||||||
|
* or between the revisions provided via GET or POST
|
||||||
*
|
*
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
* @param string $text - compare with this text with most current version
|
* @param string $text when non-empty: compare with this text with most current version
|
||||||
* @param bool $intro - display the intro text
|
* @param bool $intro display the intro text
|
||||||
* @param string $type type of the diff (inline or sidebyside)
|
* @param string $type type of the diff (inline or sidebyside)
|
||||||
*/
|
*/
|
||||||
function html_diff($text='',$intro=true,$type=null){
|
function html_diff($text = '', $intro = true, $type = null) {
|
||||||
global $ID;
|
global $ID;
|
||||||
global $REV;
|
global $REV;
|
||||||
global $lang;
|
global $lang;
|
||||||
global $INPUT;
|
global $INPUT;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
|
$pagelog = new PageChangeLog($ID);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determine diff type
|
||||||
|
*/
|
||||||
if(!$type) {
|
if(!$type) {
|
||||||
$type = $INPUT->str('difftype');
|
$type = $INPUT->str('difftype');
|
||||||
if (empty($type)) {
|
if(empty($type)) {
|
||||||
$type = get_doku_pref('difftype', $type);
|
$type = get_doku_pref('difftype', $type);
|
||||||
if (empty($type) && $INFO['ismobile']) {
|
if(empty($type) && $INFO['ismobile']) {
|
||||||
$type = 'inline';
|
$type = 'inline';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($type != 'inline') $type = 'sidebyside';
|
if($type != 'inline') $type = 'sidebyside';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determine requested revision(s)
|
||||||
|
*/
|
||||||
// we're trying to be clever here, revisions to compare can be either
|
// we're trying to be clever here, revisions to compare can be either
|
||||||
// given as rev and rev2 parameters, with rev2 being optional. Or in an
|
// given as rev and rev2 parameters, with rev2 being optional. Or in an
|
||||||
// array in rev2.
|
// array in rev2.
|
||||||
$rev1 = $REV;
|
$rev1 = $REV;
|
||||||
|
|
||||||
$rev2 = $INPUT->ref('rev2');
|
$rev2 = $INPUT->ref('rev2');
|
||||||
if(is_array($rev2)){
|
if(is_array($rev2)) {
|
||||||
$rev1 = (int) $rev2[0];
|
$rev1 = (int) $rev2[0];
|
||||||
$rev2 = (int) $rev2[1];
|
$rev2 = (int) $rev2[1];
|
||||||
|
|
||||||
if(!$rev1){
|
if(!$rev1) {
|
||||||
$rev1 = $rev2;
|
$rev1 = $rev2;
|
||||||
unset($rev2);
|
unset($rev2);
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
$rev2 = $INPUT->int('rev2');
|
$rev2 = $INPUT->int('rev2');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determine left and right revision, its texts and the header
|
||||||
|
*/
|
||||||
$r_minor = '';
|
$r_minor = '';
|
||||||
$l_minor = '';
|
$l_minor = '';
|
||||||
|
|
||||||
if($text){ // compare text to the most current revision
|
if($text) { // compare text to the most current revision
|
||||||
$l_rev = '';
|
$l_rev = '';
|
||||||
$l_text = rawWiki($ID,'');
|
$l_text = rawWiki($ID, '');
|
||||||
$l_head = '<a class="wikilink1" href="'.wl($ID).'">'.
|
$l_head = '<a class="wikilink1" href="' . wl($ID) . '">' .
|
||||||
$ID.' '.dformat((int) @filemtime(wikiFN($ID))).'</a> '.
|
$ID . ' ' . dformat((int) @filemtime(wikiFN($ID))) . '</a> ' .
|
||||||
$lang['current'];
|
$lang['current'];
|
||||||
|
|
||||||
$r_rev = '';
|
$r_rev = '';
|
||||||
$r_text = cleanText($text);
|
$r_text = cleanText($text);
|
||||||
$r_head = $lang['yours'];
|
$r_head = $lang['yours'];
|
||||||
}else{
|
} else {
|
||||||
if($rev1 && isset($rev2) && $rev2){ // two specific revisions wanted
|
if($rev1 && isset($rev2) && $rev2) { // two specific revisions wanted
|
||||||
// make sure order is correct (older on the left)
|
// make sure order is correct (older on the left)
|
||||||
if($rev1 < $rev2){
|
if($rev1 < $rev2) {
|
||||||
$l_rev = $rev1;
|
$l_rev = $rev1;
|
||||||
$r_rev = $rev2;
|
$r_rev = $rev2;
|
||||||
}else{
|
} else {
|
||||||
$l_rev = $rev2;
|
$l_rev = $rev2;
|
||||||
$r_rev = $rev1;
|
$r_rev = $rev1;
|
||||||
}
|
}
|
||||||
}elseif($rev1){ // single revision given, compare to current
|
} elseif($rev1) { // single revision given, compare to current
|
||||||
$r_rev = '';
|
$r_rev = '';
|
||||||
$l_rev = $rev1;
|
$l_rev = $rev1;
|
||||||
}else{ // no revision was given, compare previous to current
|
} else { // no revision was given, compare previous to current
|
||||||
$r_rev = '';
|
$r_rev = '';
|
||||||
$revs = getRevisions($ID, 0, 1);
|
$revs = $pagelog->getRevisions(0, 1);
|
||||||
$l_rev = $revs[0];
|
$l_rev = $revs[0];
|
||||||
$REV = $l_rev; // store revision back in $REV
|
$REV = $l_rev; // store revision back in $REV
|
||||||
}
|
}
|
||||||
|
|
||||||
// when both revisions are empty then the page was created just now
|
// when both revisions are empty then the page was created just now
|
||||||
if(!$l_rev && !$r_rev){
|
if(!$l_rev && !$r_rev) {
|
||||||
$l_text = '';
|
$l_text = '';
|
||||||
}else{
|
} else {
|
||||||
$l_text = rawWiki($ID,$l_rev);
|
$l_text = rawWiki($ID, $l_rev);
|
||||||
}
|
}
|
||||||
$r_text = rawWiki($ID,$r_rev);
|
$r_text = rawWiki($ID, $r_rev);
|
||||||
|
|
||||||
list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev, null, false, $type == 'inline');
|
list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev, null, false, $type == 'inline');
|
||||||
}
|
}
|
||||||
|
|
||||||
$df = new Diff(explode("\n",$l_text),explode("\n",$r_text));
|
/*
|
||||||
|
* Build navigation
|
||||||
if($type == 'inline'){
|
*/
|
||||||
$tdf = new InlineDiffFormatter();
|
$l_nav = '';
|
||||||
} else {
|
$r_nav = '';
|
||||||
$tdf = new TableDiffFormatter();
|
if(!$text) {
|
||||||
|
list($l_nav, $r_nav) = html_diff_navigation($pagelog, $type, $l_rev, $r_rev);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Create diff object and the formatter
|
||||||
|
*/
|
||||||
|
$diff = new Diff(explode("\n", $l_text), explode("\n", $r_text));
|
||||||
|
|
||||||
|
if($type == 'inline') {
|
||||||
|
$diffformatter = new InlineDiffFormatter();
|
||||||
|
} else {
|
||||||
|
$diffformatter = new TableDiffFormatter();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Display intro
|
||||||
|
*/
|
||||||
if($intro) print p_locale_xhtml('diff');
|
if($intro) print p_locale_xhtml('diff');
|
||||||
|
|
||||||
if (!$text) {
|
/*
|
||||||
ptln('<div class="diffoptions">');
|
* Display type and exact reference
|
||||||
|
*/
|
||||||
|
if(!$text) {
|
||||||
|
ptln('<div class="diffoptions group">');
|
||||||
|
|
||||||
$form = new Doku_Form(array('action'=>wl()));
|
|
||||||
$form->addHidden('id',$ID);
|
$form = new Doku_Form(array('action' => wl()));
|
||||||
$form->addHidden('rev2[0]',$l_rev);
|
$form->addHidden('id', $ID);
|
||||||
$form->addHidden('rev2[1]',$r_rev);
|
$form->addHidden('rev2[0]', $l_rev);
|
||||||
$form->addHidden('do','diff');
|
$form->addHidden('rev2[1]', $r_rev);
|
||||||
$form->addElement(form_makeListboxField(
|
$form->addHidden('do', 'diff');
|
||||||
'difftype',
|
$form->addElement(
|
||||||
array(
|
form_makeListboxField(
|
||||||
'sidebyside' => $lang['diff_side'],
|
'difftype',
|
||||||
'inline' => $lang['diff_inline']),
|
array(
|
||||||
$type,
|
'sidebyside' => $lang['diff_side'],
|
||||||
$lang['diff_type'],
|
'inline' => $lang['diff_inline']
|
||||||
'','',
|
),
|
||||||
array('class'=>'quickselect')));
|
$type,
|
||||||
$form->addElement(form_makeButton('submit', 'diff','Go'));
|
$lang['diff_type'],
|
||||||
|
'', '',
|
||||||
|
array('class' => 'quickselect')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$form->addElement(form_makeButton('submit', 'diff', 'Go'));
|
||||||
$form->printForm();
|
$form->printForm();
|
||||||
|
|
||||||
$diffurl = wl($ID, array(
|
ptln('<p>');
|
||||||
'do' => 'diff',
|
// link to exactly this view FS#2835
|
||||||
'rev2[0]' => $l_rev,
|
echo html_diff_navigationlink($type, 'difflink', $l_rev, $r_rev ? $r_rev : $INFO['currentrev']);
|
||||||
'rev2[1]' => $r_rev,
|
ptln('</p>');
|
||||||
'difftype' => $type,
|
|
||||||
));
|
ptln('</div>'); // .diffoptions
|
||||||
ptln('<p><a class="wikilink1" href="'.$diffurl.'">'.$lang['difflink'].'</a></p>');
|
|
||||||
ptln('</div>');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display diff view table
|
||||||
|
*/
|
||||||
?>
|
?>
|
||||||
<div class="table">
|
<div class="table">
|
||||||
<table class="diff diff_<?php echo $type?>">
|
<table class="diff diff_<?php echo $type ?>">
|
||||||
<?php if ($type == 'inline') { ?>
|
|
||||||
<tr>
|
<?php
|
||||||
<th class="diff-lineheader">-</th><th <?php echo $l_minor?>>
|
//navigation and header
|
||||||
<?php echo $l_head?>
|
if($type == 'inline') {
|
||||||
</th>
|
if(!$text) { ?>
|
||||||
</tr>
|
<tr>
|
||||||
<tr>
|
<td class="diff-lineheader">-</td>
|
||||||
<th class="diff-lineheader">+</th><th <?php echo $r_minor?>>
|
<td class="diffnav"><?php echo $l_nav ?></td>
|
||||||
<?php echo $r_head?>
|
</tr>
|
||||||
</th>
|
<tr>
|
||||||
</tr>
|
<th class="diff-lineheader">-</th>
|
||||||
<?php } else { ?>
|
<th <?php echo $l_minor ?>>
|
||||||
<tr>
|
<?php echo $l_head ?>
|
||||||
<th colspan="2" <?php echo $l_minor?>>
|
</th>
|
||||||
<?php echo $l_head?>
|
</tr>
|
||||||
</th>
|
<?php } ?>
|
||||||
<th colspan="2" <?php echo $r_minor?>>
|
<tr>
|
||||||
<?php echo $r_head?>
|
<td class="diff-lineheader">+</td>
|
||||||
</th>
|
<td class="diffnav"><?php echo $r_nav ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php }
|
<tr>
|
||||||
echo html_insert_softbreaks($tdf->format($df)); ?>
|
<th class="diff-lineheader">+</th>
|
||||||
|
<th <?php echo $r_minor ?>>
|
||||||
|
<?php echo $r_head ?>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<?php } else {
|
||||||
|
if(!$text) { ?>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="diffnav"><?php echo $l_nav ?></td>
|
||||||
|
<td colspan="2" class="diffnav"><?php echo $r_nav ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php } ?>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2" <?php echo $l_minor ?>>
|
||||||
|
<?php echo $l_head ?>
|
||||||
|
</th>
|
||||||
|
<th colspan="2" <?php echo $r_minor ?>>
|
||||||
|
<?php echo $r_head ?>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<?php }
|
||||||
|
|
||||||
|
//diff view
|
||||||
|
echo html_insert_softbreaks($diffformatter->format($diff)); ?>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create html for revision navigation
|
||||||
|
*
|
||||||
|
* @param PageChangeLog $pagelog changelog object of current page
|
||||||
|
* @param string $type inline vs sidebyside
|
||||||
|
* @param int $l_rev left revision timestamp
|
||||||
|
* @param int $r_rev right revision timestamp
|
||||||
|
* @return string[] html of left and right navigation elements
|
||||||
|
*/
|
||||||
|
function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) {
|
||||||
|
global $INFO, $ID;
|
||||||
|
|
||||||
|
// last timestamp is not in changelog, retrieve timestamp from metadata
|
||||||
|
// note: when page is removed, the metadata timestamp is zero
|
||||||
|
$r_rev = $r_rev ? $r_rev : $INFO['meta']['last_change']['date'];
|
||||||
|
|
||||||
|
//retrieve revisions with additional info
|
||||||
|
list($l_revs, $r_revs) = $pagelog->getRevisionsAround($l_rev, $r_rev);
|
||||||
|
$l_revisions = array();
|
||||||
|
if(!$l_rev) {
|
||||||
|
$l_revisions[0] = array(0, "", false); //no left revision given, add dummy
|
||||||
|
}
|
||||||
|
foreach($l_revs as $rev) {
|
||||||
|
$info = $pagelog->getRevisionInfo($rev);
|
||||||
|
$l_revisions[$rev] = array(
|
||||||
|
$rev,
|
||||||
|
dformat($info['date']) . ' ' . editorinfo($info['user'], true) . ' ' . $info['sum'],
|
||||||
|
$r_rev ? $rev >= $r_rev : false //disable?
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$r_revisions = array();
|
||||||
|
if(!$r_rev) {
|
||||||
|
$r_revisions[0] = array(0, "", false); //no right revision given, add dummy
|
||||||
|
}
|
||||||
|
foreach($r_revs as $rev) {
|
||||||
|
$info = $pagelog->getRevisionInfo($rev);
|
||||||
|
$r_revisions[$rev] = array(
|
||||||
|
$rev,
|
||||||
|
dformat($info['date']) . ' ' . editorinfo($info['user'], true) . ' ' . $info['sum'],
|
||||||
|
$rev <= $l_rev //disable?
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//determine previous/next revisions
|
||||||
|
$l_index = array_search($l_rev, $l_revs);
|
||||||
|
$l_prev = $l_revs[$l_index + 1];
|
||||||
|
$l_next = $l_revs[$l_index - 1];
|
||||||
|
if($r_rev) {
|
||||||
|
$r_index = array_search($r_rev, $r_revs);
|
||||||
|
$r_prev = $r_revs[$r_index + 1];
|
||||||
|
$r_next = $r_revs[$r_index - 1];
|
||||||
|
} else {
|
||||||
|
//removed page
|
||||||
|
if($l_next) {
|
||||||
|
$r_prev = $r_revs[0];
|
||||||
|
} else {
|
||||||
|
$r_prev = null;
|
||||||
|
}
|
||||||
|
$r_next = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Left side:
|
||||||
|
*/
|
||||||
|
$l_nav = '';
|
||||||
|
//move back
|
||||||
|
if($l_prev) {
|
||||||
|
$l_nav .= html_diff_navigationlink($type, 'diffbothprevrev', $l_prev, $r_prev);
|
||||||
|
$l_nav .= html_diff_navigationlink($type, 'diffprevrev', $l_prev, $r_rev);
|
||||||
|
}
|
||||||
|
//dropdown
|
||||||
|
$form = new Doku_Form(array('action' => wl()));
|
||||||
|
$form->addHidden('id', $ID);
|
||||||
|
$form->addHidden('difftype', $type);
|
||||||
|
$form->addHidden('rev2[1]', $r_rev);
|
||||||
|
$form->addHidden('do', 'diff');
|
||||||
|
$form->addElement(
|
||||||
|
form_makeListboxField(
|
||||||
|
'rev2[0]',
|
||||||
|
$l_revisions,
|
||||||
|
$l_rev,
|
||||||
|
'', '', '',
|
||||||
|
array('class' => 'quickselect')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$form->addElement(form_makeButton('submit', 'diff', 'Go'));
|
||||||
|
$l_nav .= $form->getForm();
|
||||||
|
//move forward
|
||||||
|
if($l_next && ($l_next < $r_rev || !$r_rev)) {
|
||||||
|
$l_nav .= html_diff_navigationlink($type, 'diffnextrev', $l_next, $r_rev);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Right side:
|
||||||
|
*/
|
||||||
|
$r_nav = '';
|
||||||
|
//move back
|
||||||
|
if($l_rev < $r_prev) {
|
||||||
|
$r_nav .= html_diff_navigationlink($type, 'diffprevrev', $l_rev, $r_prev);
|
||||||
|
}
|
||||||
|
//dropdown
|
||||||
|
$form = new Doku_Form(array('action' => wl()));
|
||||||
|
$form->addHidden('id', $ID);
|
||||||
|
$form->addHidden('rev2[0]', $l_rev);
|
||||||
|
$form->addHidden('difftype', $type);
|
||||||
|
$form->addHidden('do', 'diff');
|
||||||
|
$form->addElement(
|
||||||
|
form_makeListboxField(
|
||||||
|
'rev2[1]',
|
||||||
|
$r_revisions,
|
||||||
|
$r_rev,
|
||||||
|
'', '', '',
|
||||||
|
array('class' => 'quickselect')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$form->addElement(form_makeButton('submit', 'diff', 'Go'));
|
||||||
|
$r_nav .= $form->getForm();
|
||||||
|
//move forward
|
||||||
|
if($r_next) {
|
||||||
|
if($pagelog->isCurrentRevision($r_next)) {
|
||||||
|
$r_nav .= html_diff_navigationlink($type, 'difflastrev', $l_rev); //last revision is diff with current page
|
||||||
|
} else {
|
||||||
|
$r_nav .= html_diff_navigationlink($type, 'diffnextrev', $l_rev, $r_next);
|
||||||
|
}
|
||||||
|
$r_nav .= html_diff_navigationlink($type, 'diffbothnextrev', $l_next, $r_next);
|
||||||
|
}
|
||||||
|
return array($l_nav, $r_nav);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create html link to a diff defined by two revisions
|
||||||
|
*
|
||||||
|
* @param string $difftype display type
|
||||||
|
* @param string $linktype
|
||||||
|
* @param int $lrev oldest revision
|
||||||
|
* @param int $rrev newest revision or null for diff with current revision
|
||||||
|
* @return string html of link to a diff
|
||||||
|
*/
|
||||||
|
function html_diff_navigationlink($difftype, $linktype, $lrev, $rrev = null) {
|
||||||
|
global $ID, $lang;
|
||||||
|
if(!$rrev) {
|
||||||
|
$urlparam = array(
|
||||||
|
'do' => 'diff',
|
||||||
|
'rev' => $lrev,
|
||||||
|
'difftype' => $difftype,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$urlparam = array(
|
||||||
|
'do' => 'diff',
|
||||||
|
'rev2[0]' => $lrev,
|
||||||
|
'rev2[1]' => $rrev,
|
||||||
|
'difftype' => $difftype,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return '<a class="' . $linktype . '" href="' . wl($ID, $urlparam) . '" title="' . $lang[$linktype] . '">' .
|
||||||
|
'<span>' . $lang[$linktype] . '</span>' .
|
||||||
|
'</a>' . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert soft breaks in diff html
|
||||||
|
*
|
||||||
|
* @param $diffhtml
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function html_insert_softbreaks($diffhtml) {
|
function html_insert_softbreaks($diffhtml) {
|
||||||
// search the diff html string for both:
|
// search the diff html string for both:
|
||||||
// - html tags, so these can be ignored
|
// - html tags, so these can be ignored
|
||||||
|
@ -1232,6 +1481,12 @@ function html_insert_softbreaks($diffhtml) {
|
||||||
return preg_replace_callback('/<[^>]*>|[^<> ]{12,}/','html_softbreak_callback',$diffhtml);
|
return preg_replace_callback('/<[^>]*>|[^<> ]{12,}/','html_softbreak_callback',$diffhtml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* callback which adds softbreaks
|
||||||
|
*
|
||||||
|
* @param array $match array with first the complete match
|
||||||
|
* @return string the replacement
|
||||||
|
*/
|
||||||
function html_softbreak_callback($match){
|
function html_softbreak_callback($match){
|
||||||
// if match is an html tag, return it intact
|
// if match is an html tag, return it intact
|
||||||
if ($match[0]{0} == '<') return $match[0];
|
if ($match[0]{0} == '<') return $match[0];
|
||||||
|
@ -1343,7 +1598,7 @@ function html_updateprofile(){
|
||||||
global $conf;
|
global $conf;
|
||||||
global $INPUT;
|
global $INPUT;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
/** @var auth_basic $auth */
|
/** @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
|
|
||||||
print p_locale_xhtml('updateprofile');
|
print p_locale_xhtml('updateprofile');
|
||||||
|
@ -1517,6 +1772,7 @@ function html_edit(){
|
||||||
* Display the default edit form
|
* Display the default edit form
|
||||||
*
|
*
|
||||||
* Is the default action for HTML_EDIT_FORMSELECTION.
|
* Is the default action for HTML_EDIT_FORMSELECTION.
|
||||||
|
* @param mixed[] $param
|
||||||
*/
|
*/
|
||||||
function html_edit_form($param) {
|
function html_edit_form($param) {
|
||||||
global $TEXT;
|
global $TEXT;
|
||||||
|
@ -1559,7 +1815,7 @@ function html_minoredit(){
|
||||||
function html_debug(){
|
function html_debug(){
|
||||||
global $conf;
|
global $conf;
|
||||||
global $lang;
|
global $lang;
|
||||||
/** @var auth_basic $auth */
|
/** @var DokuWiki_Auth_Plugin $auth */
|
||||||
global $auth;
|
global $auth;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
|
|
||||||
|
@ -1634,6 +1890,17 @@ function html_debug(){
|
||||||
print_r($inis);
|
print_r($inis);
|
||||||
print '</pre>';
|
print '</pre>';
|
||||||
|
|
||||||
|
if (function_exists('apache_get_version')) {
|
||||||
|
$apache['version'] = apache_get_version();
|
||||||
|
|
||||||
|
if (function_exists('apache_get_modules')) {
|
||||||
|
$apache['modules'] = apache_get_modules();
|
||||||
|
}
|
||||||
|
print '<b>Apache</b><pre>';
|
||||||
|
print_r($apache);
|
||||||
|
print '</pre>';
|
||||||
|
}
|
||||||
|
|
||||||
print '</body></html>';
|
print '</body></html>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1698,12 +1965,12 @@ function html_admin(){
|
||||||
}
|
}
|
||||||
unset($menu['acl']);
|
unset($menu['acl']);
|
||||||
|
|
||||||
if($menu['plugin']){
|
if($menu['extension']){
|
||||||
ptln(' <li class="admin_plugin"><div class="li">'.
|
ptln(' <li class="admin_plugin"><div class="li">'.
|
||||||
'<a href="'.wl($ID, array('do' => 'admin','page' => 'plugin')).'">'.
|
'<a href="'.wl($ID, array('do' => 'admin','page' => 'extension')).'">'.
|
||||||
$menu['plugin']['prompt'].'</a></div></li>');
|
$menu['extension']['prompt'].'</a></div></li>');
|
||||||
}
|
}
|
||||||
unset($menu['plugin']);
|
unset($menu['extension']);
|
||||||
|
|
||||||
if($menu['config']){
|
if($menu['config']){
|
||||||
ptln(' <li class="admin_config"><div class="li">'.
|
ptln(' <li class="admin_config"><div class="li">'.
|
||||||
|
|
|
@ -64,12 +64,13 @@ function http_conditionalRequest($timestamp){
|
||||||
* Let the webserver send the given file via x-sendfile method
|
* Let the webserver send the given file via x-sendfile method
|
||||||
*
|
*
|
||||||
* @author Chris Smith <chris@jalakai.co.uk>
|
* @author Chris Smith <chris@jalakai.co.uk>
|
||||||
* @returns void or exits with previously header() commands executed
|
* @param string $file absolute path of file to send
|
||||||
|
* @returns void or exits with previous header() commands executed
|
||||||
*/
|
*/
|
||||||
function http_sendfile($file) {
|
function http_sendfile($file) {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
//use x-sendfile header to pass the delivery to compatible webservers
|
//use x-sendfile header to pass the delivery to compatible web servers
|
||||||
if($conf['xsendfile'] == 1){
|
if($conf['xsendfile'] == 1){
|
||||||
header("X-LIGHTTPD-send-file: $file");
|
header("X-LIGHTTPD-send-file: $file");
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
|
@ -79,12 +80,12 @@ function http_sendfile($file) {
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
exit;
|
exit;
|
||||||
}elseif($conf['xsendfile'] == 3){
|
}elseif($conf['xsendfile'] == 3){
|
||||||
|
// FS#2388 nginx just needs the relative path.
|
||||||
|
$file = DOKU_REL.substr($file, strlen(fullpath(DOKU_INC)) + 1);
|
||||||
header("X-Accel-Redirect: $file");
|
header("X-Accel-Redirect: $file");
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -92,7 +93,7 @@ function http_sendfile($file) {
|
||||||
*
|
*
|
||||||
* This function exits the running script
|
* This function exits the running script
|
||||||
*
|
*
|
||||||
* @param ressource $fh - file handle for an already open file
|
* @param resource $fh - file handle for an already open file
|
||||||
* @param int $size - size of the whole file
|
* @param int $size - size of the whole file
|
||||||
* @param int $mime - MIME type of the file
|
* @param int $mime - MIME type of the file
|
||||||
*
|
*
|
||||||
|
@ -204,7 +205,7 @@ function http_gzip_valid($uncompressed_file) {
|
||||||
*
|
*
|
||||||
* This function handles output of cacheable resource files. It ses the needed
|
* This function handles output of cacheable resource files. It ses the needed
|
||||||
* HTTP headers. If a useable cache is present, it is passed to the web server
|
* HTTP headers. If a useable cache is present, it is passed to the web server
|
||||||
* and the scrpt is terminated.
|
* and the script is terminated.
|
||||||
*/
|
*/
|
||||||
function http_cached($cache, $cache_ok) {
|
function http_cached($cache, $cache_ok) {
|
||||||
global $conf;
|
global $conf;
|
||||||
|
@ -223,7 +224,8 @@ function http_cached($cache, $cache_ok) {
|
||||||
header('Content-Encoding: gzip');
|
header('Content-Encoding: gzip');
|
||||||
readfile($cache.".gz");
|
readfile($cache.".gz");
|
||||||
} else {
|
} else {
|
||||||
if (!http_sendfile($cache)) readfile($cache);
|
http_sendfile($cache);
|
||||||
|
readfile($cache);
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
if(!defined('DOKU_INC')) die('meh.');
|
if(!defined('DOKU_INC')) die('meh.');
|
||||||
|
|
||||||
// Version tag used to force rebuild on upgrade
|
// Version tag used to force rebuild on upgrade
|
||||||
define('INDEXER_VERSION', 7);
|
define('INDEXER_VERSION', 8);
|
||||||
|
|
||||||
// set the minimum token length to use in the index (note, this doesn't apply to numeric tokens)
|
// set the minimum token length to use in the index (note, this doesn't apply to numeric tokens)
|
||||||
if (!defined('IDX_MINWORDLENGTH')) define('IDX_MINWORDLENGTH',2);
|
if (!defined('IDX_MINWORDLENGTH')) define('IDX_MINWORDLENGTH',2);
|
||||||
|
@ -215,6 +215,7 @@ class Doku_Indexer {
|
||||||
foreach (array_keys($words) as $wlen) {
|
foreach (array_keys($words) as $wlen) {
|
||||||
$word_idx = $this->getIndex('w', $wlen);
|
$word_idx = $this->getIndex('w', $wlen);
|
||||||
foreach ($words[$wlen] as $word => $freq) {
|
foreach ($words[$wlen] as $word => $freq) {
|
||||||
|
$word = (string)$word;
|
||||||
$wid = array_search($word, $word_idx, true);
|
$wid = array_search($word, $word_idx, true);
|
||||||
if ($wid === false) {
|
if ($wid === false) {
|
||||||
$wid = count($word_idx);
|
$wid = count($word_idx);
|
||||||
|
@ -269,8 +270,9 @@ class Doku_Indexer {
|
||||||
// Special handling for titles so the index file is simpler
|
// Special handling for titles so the index file is simpler
|
||||||
if (array_key_exists('title', $key)) {
|
if (array_key_exists('title', $key)) {
|
||||||
$value = $key['title'];
|
$value = $key['title'];
|
||||||
if (is_array($value))
|
if (is_array($value)) {
|
||||||
$value = $value[0];
|
$value = $value[0];
|
||||||
|
}
|
||||||
$this->saveIndexKey('title', '', $pid, $value);
|
$this->saveIndexKey('title', '', $pid, $value);
|
||||||
unset($key['title']);
|
unset($key['title']);
|
||||||
}
|
}
|
||||||
|
@ -298,20 +300,24 @@ class Doku_Indexer {
|
||||||
if ($val !== "") {
|
if ($val !== "") {
|
||||||
$id = array_search($val, $metawords, true);
|
$id = array_search($val, $metawords, true);
|
||||||
if ($id === false) {
|
if ($id === false) {
|
||||||
|
// didn't find $val, so we'll add it to the end of metawords and create a placeholder in metaidx
|
||||||
$id = count($metawords);
|
$id = count($metawords);
|
||||||
$metawords[$id] = $val;
|
$metawords[$id] = $val;
|
||||||
|
$metaidx[$id] = '';
|
||||||
$addwords = true;
|
$addwords = true;
|
||||||
}
|
}
|
||||||
// test if value is already in the index
|
// test if value is already in the index
|
||||||
if (isset($val_idx[$id]) && $val_idx[$id] <= 0)
|
if (isset($val_idx[$id]) && $val_idx[$id] <= 0){
|
||||||
$val_idx[$id] = 0;
|
$val_idx[$id] = 0;
|
||||||
else // else add it
|
} else { // else add it
|
||||||
$val_idx[$id] = 1;
|
$val_idx[$id] = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($addwords)
|
if ($addwords) {
|
||||||
$this->saveIndex($metaname.'_w', '', $metawords);
|
$this->saveIndex($metaname.'_w', '', $metawords);
|
||||||
|
}
|
||||||
$vals_changed = false;
|
$vals_changed = false;
|
||||||
foreach ($val_idx as $id => $action) {
|
foreach ($val_idx as $id => $action) {
|
||||||
if ($action == -1) {
|
if ($action == -1) {
|
||||||
|
@ -1212,17 +1218,18 @@ class Doku_Indexer {
|
||||||
* @author Tom N Harris <tnharris@whoopdedo.org>
|
* @author Tom N Harris <tnharris@whoopdedo.org>
|
||||||
*/
|
*/
|
||||||
protected function updateTuple($line, $id, $count) {
|
protected function updateTuple($line, $id, $count) {
|
||||||
$newLine = $line;
|
if ($line != ''){
|
||||||
if ($newLine !== '')
|
$line = preg_replace('/(^|:)'.preg_quote($id,'/').'\*\d*/', '', $line);
|
||||||
$newLine = preg_replace('/(^|:)'.preg_quote($id,'/').'\*\d*/', '', $newLine);
|
|
||||||
$newLine = trim($newLine, ':');
|
|
||||||
if ($count) {
|
|
||||||
if (strlen($newLine) > 0)
|
|
||||||
return "$id*$count:".$newLine;
|
|
||||||
else
|
|
||||||
return "$id*$count".$newLine;
|
|
||||||
}
|
}
|
||||||
return $newLine;
|
$line = trim($line, ':');
|
||||||
|
if ($count) {
|
||||||
|
if ($line) {
|
||||||
|
return "$id*$count:".$line;
|
||||||
|
} else {
|
||||||
|
return "$id*$count";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $line;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -102,15 +102,21 @@ function getVersion(){
|
||||||
function check(){
|
function check(){
|
||||||
global $conf;
|
global $conf;
|
||||||
global $INFO;
|
global $INFO;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
if ($INFO['isadmin'] || $INFO['ismanager']){
|
if ($INFO['isadmin'] || $INFO['ismanager']){
|
||||||
msg('DokuWiki version: '.getVersion(),1);
|
msg('DokuWiki version: '.getVersion(),1);
|
||||||
}
|
|
||||||
|
|
||||||
if(version_compare(phpversion(),'5.2.0','<')){
|
if(version_compare(phpversion(),'5.2.0','<')){
|
||||||
msg('Your PHP version is too old ('.phpversion().' vs. 5.2.0+ needed)',-1);
|
msg('Your PHP version is too old ('.phpversion().' vs. 5.2.0+ needed)',-1);
|
||||||
}else{
|
}else{
|
||||||
msg('PHP version '.phpversion(),1);
|
msg('PHP version '.phpversion(),1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(version_compare(phpversion(),'5.2.0','<')){
|
||||||
|
msg('Your PHP version is too old',-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$mem = (int) php_to_byte(ini_get('memory_limit'));
|
$mem = (int) php_to_byte(ini_get('memory_limit'));
|
||||||
|
@ -200,7 +206,7 @@ function check(){
|
||||||
}
|
}
|
||||||
|
|
||||||
if($INFO['userinfo']['name']){
|
if($INFO['userinfo']['name']){
|
||||||
msg('You are currently logged in as '.$_SERVER['REMOTE_USER'].' ('.$INFO['userinfo']['name'].')',0);
|
msg('You are currently logged in as '.$INPUT->server->str('REMOTE_USER').' ('.$INFO['userinfo']['name'].')',0);
|
||||||
msg('You are part of the groups '.join($INFO['userinfo']['grps'],', '),0);
|
msg('You are part of the groups '.join($INFO['userinfo']['grps'],', '),0);
|
||||||
}else{
|
}else{
|
||||||
msg('You are currently not logged in',0);
|
msg('You are currently not logged in',0);
|
||||||
|
@ -357,6 +363,9 @@ function dbg($msg,$hidden=false){
|
||||||
*/
|
*/
|
||||||
function dbglog($msg,$header=''){
|
function dbglog($msg,$header=''){
|
||||||
global $conf;
|
global $conf;
|
||||||
|
/* @var Input $INPUT */
|
||||||
|
global $INPUT;
|
||||||
|
|
||||||
// The debug log isn't automatically cleaned thus only write it when
|
// The debug log isn't automatically cleaned thus only write it when
|
||||||
// debugging has been enabled by the user.
|
// debugging has been enabled by the user.
|
||||||
if($conf['allowdebug'] !== 1) return;
|
if($conf['allowdebug'] !== 1) return;
|
||||||
|
@ -369,7 +378,7 @@ function dbglog($msg,$header=''){
|
||||||
$file = $conf['cachedir'].'/debug.log';
|
$file = $conf['cachedir'].'/debug.log';
|
||||||
$fh = fopen($file,'a');
|
$fh = fopen($file,'a');
|
||||||
if($fh){
|
if($fh){
|
||||||
fwrite($fh,date('H:i:s ').$_SERVER['REMOTE_ADDR'].': '.$msg."\n");
|
fwrite($fh,date('H:i:s ').$INPUT->server->str('REMOTE_ADDR').': '.$msg."\n");
|
||||||
fclose($fh);
|
fclose($fh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,18 +140,21 @@ if ($conf['gzip_output'] &&
|
||||||
}
|
}
|
||||||
|
|
||||||
// init session
|
// init session
|
||||||
if (!headers_sent() && !defined('NOSESSION')){
|
if(!headers_sent() && !defined('NOSESSION')) {
|
||||||
session_name("DokuWiki");
|
if(!defined('DOKU_SESSION_NAME')) define ('DOKU_SESSION_NAME', "DokuWiki");
|
||||||
$cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
|
if(!defined('DOKU_SESSION_LIFETIME')) define ('DOKU_SESSION_LIFETIME', 0);
|
||||||
if (version_compare(PHP_VERSION, '5.2.0', '>')) {
|
if(!defined('DOKU_SESSION_PATH')) {
|
||||||
session_set_cookie_params(0,$cookieDir,'',($conf['securecookie'] && is_ssl()),true);
|
$cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
|
||||||
}else{
|
define ('DOKU_SESSION_PATH', $cookieDir);
|
||||||
session_set_cookie_params(0,$cookieDir,'',($conf['securecookie'] && is_ssl()));
|
|
||||||
}
|
}
|
||||||
|
if(!defined('DOKU_SESSION_DOMAIN')) define ('DOKU_SESSION_DOMAIN', '');
|
||||||
|
|
||||||
|
session_name(DOKU_SESSION_NAME);
|
||||||
|
session_set_cookie_params(DOKU_SESSION_LIFETIME, DOKU_SESSION_PATH, DOKU_SESSION_DOMAIN, ($conf['securecookie'] && is_ssl()), true);
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
// load left over messages
|
// load left over messages
|
||||||
if(isset($_SESSION[DOKU_COOKIE]['msg'])){
|
if(isset($_SESSION[DOKU_COOKIE]['msg'])) {
|
||||||
$MSG = $_SESSION[DOKU_COOKIE]['msg'];
|
$MSG = $_SESSION[DOKU_COOKIE]['msg'];
|
||||||
unset($_SESSION[DOKU_COOKIE]['msg']);
|
unset($_SESSION[DOKU_COOKIE]['msg']);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +176,7 @@ if(function_exists('set_magic_quotes_runtime')) @set_magic_quotes_runtime(0);
|
||||||
$_REQUEST = array_merge($_GET,$_POST);
|
$_REQUEST = array_merge($_GET,$_POST);
|
||||||
|
|
||||||
// we don't want a purge URL to be digged
|
// we don't want a purge URL to be digged
|
||||||
if(isset($_REQUEST['purge']) && $_SERVER['HTTP_REFERER']) unset($_REQUEST['purge']);
|
if(isset($_REQUEST['purge']) && !empty($_SERVER['HTTP_REFERER'])) unset($_REQUEST['purge']);
|
||||||
|
|
||||||
// disable gzip if not available
|
// disable gzip if not available
|
||||||
if($conf['compression'] == 'bz2' && !function_exists('bzopen')){
|
if($conf['compression'] == 'bz2' && !function_exists('bzopen')){
|
||||||
|
@ -183,11 +186,6 @@ if($conf['compression'] == 'gz' && !function_exists('gzopen')){
|
||||||
$conf['compression'] = 0;
|
$conf['compression'] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fix dateformat for upgraders
|
|
||||||
if(strpos($conf['dformat'],'%') === false){
|
|
||||||
$conf['dformat'] = '%Y/%m/%d %H:%M';
|
|
||||||
}
|
|
||||||
|
|
||||||
// precalculate file creation modes
|
// precalculate file creation modes
|
||||||
init_creationmodes();
|
init_creationmodes();
|
||||||
|
|
||||||
|
@ -404,6 +402,10 @@ function remove_magic_quotes(&$array) {
|
||||||
* Returns the full absolute URL to the directory where
|
* Returns the full absolute URL to the directory where
|
||||||
* DokuWiki is installed in (includes a trailing slash)
|
* DokuWiki is installed in (includes a trailing slash)
|
||||||
*
|
*
|
||||||
|
* !! Can not access $_SERVER values through $INPUT
|
||||||
|
* !! here as this function is called before $INPUT is
|
||||||
|
* !! initialized.
|
||||||
|
*
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
*/
|
*/
|
||||||
function getBaseURL($abs=null){
|
function getBaseURL($abs=null){
|
||||||
|
@ -443,12 +445,12 @@ function getBaseURL($abs=null){
|
||||||
//split hostheader into host and port
|
//split hostheader into host and port
|
||||||
if(isset($_SERVER['HTTP_HOST'])){
|
if(isset($_SERVER['HTTP_HOST'])){
|
||||||
$parsed_host = parse_url('http://'.$_SERVER['HTTP_HOST']);
|
$parsed_host = parse_url('http://'.$_SERVER['HTTP_HOST']);
|
||||||
$host = $parsed_host['host'];
|
$host = isset($parsed_host['host']) ? $parsed_host['host'] : null;
|
||||||
$port = $parsed_host['port'];
|
$port = isset($parsed_host['port']) ? $parsed_host['port'] : null;
|
||||||
}elseif(isset($_SERVER['SERVER_NAME'])){
|
}elseif(isset($_SERVER['SERVER_NAME'])){
|
||||||
$parsed_host = parse_url('http://'.$_SERVER['SERVER_NAME']);
|
$parsed_host = parse_url('http://'.$_SERVER['SERVER_NAME']);
|
||||||
$host = $parsed_host['host'];
|
$host = isset($parsed_host['host']) ? $parsed_host['host'] : null;
|
||||||
$port = $parsed_host['port'];
|
$port = isset($parsed_host['port']) ? $parsed_host['port'] : null;
|
||||||
}else{
|
}else{
|
||||||
$host = php_uname('n');
|
$host = php_uname('n');
|
||||||
$port = '';
|
$port = '';
|
||||||
|
|
|
@ -367,8 +367,6 @@ function io_createNamespace($id, $ns_type='pages') {
|
||||||
* @author Andreas Gohr <andi@splitbrain.org>
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
*/
|
*/
|
||||||
function io_makeFileDir($file){
|
function io_makeFileDir($file){
|
||||||
global $conf;
|
|
||||||
|
|
||||||
$dir = dirname($file);
|
$dir = dirname($file);
|
||||||
if(!@is_dir($dir)){
|
if(!@is_dir($dir)){
|
||||||
io_mkdir_p($dir) || msg("Creating directory $dir failed",-1);
|
io_mkdir_p($dir) || msg("Creating directory $dir failed",-1);
|
||||||
|
@ -400,6 +398,56 @@ function io_mkdir_p($target){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively delete a directory
|
||||||
|
*
|
||||||
|
* @author Andreas Gohr <andi@splitbrain.org>
|
||||||
|
* @param string $path
|
||||||
|
* @param bool $removefiles defaults to false which will delete empty directories only
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function io_rmdir($path, $removefiles = false) {
|
||||||
|
if(!is_string($path) || $path == "") return false;
|
||||||
|
if(!file_exists($path)) return true; // it's already gone or was never there, count as success
|
||||||
|
|
||||||
|
if(is_dir($path) && !is_link($path)) {
|
||||||
|
$dirs = array();
|
||||||
|
$files = array();
|
||||||
|
|
||||||
|
if(!$dh = @opendir($path)) return false;
|
||||||
|
while(false !== ($f = readdir($dh))) {
|
||||||
|
if($f == '..' || $f == '.') continue;
|
||||||
|
|
||||||
|
// collect dirs and files first
|
||||||
|
if(is_dir("$path/$f") && !is_link("$path/$f")) {
|
||||||
|
$dirs[] = "$path/$f";
|
||||||
|
} else if($removefiles) {
|
||||||
|
$files[] = "$path/$f";
|
||||||
|
} else {
|
||||||
|
return false; // abort when non empty
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
|
||||||
|
// now traverse into directories first
|
||||||
|
foreach($dirs as $dir) {
|
||||||
|
if(!io_rmdir($dir, $removefiles)) return false; // abort on any error
|
||||||
|
}
|
||||||
|
|
||||||
|
// now delete files
|
||||||
|
foreach($files as $file) {
|
||||||
|
if(!@unlink($file)) return false; //abort on any error
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove self
|
||||||
|
return @rmdir($path);
|
||||||
|
} else if($removefiles) {
|
||||||
|
return @unlink($path);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a directory using FTP
|
* Creates a directory using FTP
|
||||||
*
|
*
|
||||||
|
|
3
sources/inc/lang/.htaccess
Normal file
3
sources/inc/lang/.htaccess
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
## no access to the lang directory
|
||||||
|
order allow,deny
|
||||||
|
deny from all
|
23
sources/inc/lang/af/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/af/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Afrikaans initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Renier Pretorius. */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['af'] = {
|
||||||
|
closeText: 'Selekteer',
|
||||||
|
prevText: 'Vorige',
|
||||||
|
nextText: 'Volgende',
|
||||||
|
currentText: 'Vandag',
|
||||||
|
monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
|
||||||
|
'Julie','Augustus','September','Oktober','November','Desember'],
|
||||||
|
monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
|
||||||
|
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
|
||||||
|
dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
|
||||||
|
dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
|
||||||
|
dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
|
||||||
|
weekHeader: 'Wk',
|
||||||
|
dateFormat: 'dd/mm/yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['af']);
|
||||||
|
});
|
|
@ -63,7 +63,7 @@ $lang['qb_extlink'] = 'Eksterne skakel';
|
||||||
$lang['qb_hr'] = 'Horisontale streep';
|
$lang['qb_hr'] = 'Horisontale streep';
|
||||||
$lang['qb_sig'] = 'Handtekening met datum';
|
$lang['qb_sig'] = 'Handtekening met datum';
|
||||||
$lang['admin_register'] = 'Skep gerus \'n rekening';
|
$lang['admin_register'] = 'Skep gerus \'n rekening';
|
||||||
$lang['img_backto'] = 'Terug na';
|
$lang['btn_img_backto'] = 'Terug na %s';
|
||||||
$lang['img_date'] = 'Datem';
|
$lang['img_date'] = 'Datem';
|
||||||
$lang['img_camera'] = 'Camera';
|
$lang['img_camera'] = 'Camera';
|
||||||
$lang['i_wikiname'] = 'Wiki Naam';
|
$lang['i_wikiname'] = 'Wiki Naam';
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== لا صلاحيات ======
|
====== لا صلاحيات ======
|
||||||
|
|
||||||
عذرا، ليس مصرح لك الاستمرار، لعلك نسيت تسجيل الدخول؟
|
عذرا، ليس مصرح لك الاستمرار
|
23
sources/inc/lang/ar/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/ar/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Arabic Translation for jQuery UI date picker plugin. */
|
||||||
|
/* Khaled Alhourani -- me@khaledalhourani.com */
|
||||||
|
/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['ar'] = {
|
||||||
|
closeText: 'إغلاق',
|
||||||
|
prevText: '<السابق',
|
||||||
|
nextText: 'التالي>',
|
||||||
|
currentText: 'اليوم',
|
||||||
|
monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
|
||||||
|
'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
|
||||||
|
monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
|
||||||
|
dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
|
||||||
|
dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
|
||||||
|
dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
|
||||||
|
weekHeader: 'أسبوع',
|
||||||
|
dateFormat: 'dd/mm/yy',
|
||||||
|
firstDay: 6,
|
||||||
|
isRTL: true,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['ar']);
|
||||||
|
});
|
|
@ -8,6 +8,7 @@
|
||||||
* @author Usama Akkad <uahello@gmail.com>
|
* @author Usama Akkad <uahello@gmail.com>
|
||||||
* @author uahello@gmail.com
|
* @author uahello@gmail.com
|
||||||
* @author Ahmad Abd-Elghany <tolpa1@gmail.com>
|
* @author Ahmad Abd-Elghany <tolpa1@gmail.com>
|
||||||
|
* @author alhajr <alhajr300@gmail.com>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'rtl';
|
$lang['direction'] = 'rtl';
|
||||||
|
@ -32,8 +33,8 @@ $lang['btn_upload'] = 'ارفع';
|
||||||
$lang['btn_cancel'] = 'ألغ';
|
$lang['btn_cancel'] = 'ألغ';
|
||||||
$lang['btn_index'] = 'خريطة موقع';
|
$lang['btn_index'] = 'خريطة موقع';
|
||||||
$lang['btn_secedit'] = 'حرر';
|
$lang['btn_secedit'] = 'حرر';
|
||||||
$lang['btn_login'] = 'لج';
|
$lang['btn_login'] = 'تسجيل الدخول';
|
||||||
$lang['btn_logout'] = 'اخرج';
|
$lang['btn_logout'] = 'خروج';
|
||||||
$lang['btn_admin'] = 'المدير';
|
$lang['btn_admin'] = 'المدير';
|
||||||
$lang['btn_update'] = 'حدّث';
|
$lang['btn_update'] = 'حدّث';
|
||||||
$lang['btn_delete'] = 'احذف';
|
$lang['btn_delete'] = 'احذف';
|
||||||
|
@ -238,7 +239,7 @@ $lang['admin_register'] = 'أضف مستخدما جديدا';
|
||||||
$lang['metaedit'] = 'تحرير البيانات الشمولية ';
|
$lang['metaedit'] = 'تحرير البيانات الشمولية ';
|
||||||
$lang['metasaveerr'] = 'فشلت كتابة البيانات الشمولية';
|
$lang['metasaveerr'] = 'فشلت كتابة البيانات الشمولية';
|
||||||
$lang['metasaveok'] = 'حُفظت البيانات الشمولية';
|
$lang['metasaveok'] = 'حُفظت البيانات الشمولية';
|
||||||
$lang['img_backto'] = 'عودة إلى';
|
$lang['btn_img_backto'] = 'عودة إلى %s';
|
||||||
$lang['img_title'] = 'العنوان';
|
$lang['img_title'] = 'العنوان';
|
||||||
$lang['img_caption'] = 'وصف';
|
$lang['img_caption'] = 'وصف';
|
||||||
$lang['img_date'] = 'التاريخ';
|
$lang['img_date'] = 'التاريخ';
|
||||||
|
@ -251,7 +252,7 @@ $lang['img_camera'] = 'الكمرا';
|
||||||
$lang['img_keywords'] = 'كلمات مفتاحية';
|
$lang['img_keywords'] = 'كلمات مفتاحية';
|
||||||
$lang['img_width'] = 'العرض';
|
$lang['img_width'] = 'العرض';
|
||||||
$lang['img_height'] = 'الإرتفاع';
|
$lang['img_height'] = 'الإرتفاع';
|
||||||
$lang['img_manager'] = 'اعرض في مدير الوسائط';
|
$lang['btn_mediaManager'] = 'اعرض في مدير الوسائط';
|
||||||
$lang['subscr_subscribe_success'] = 'اضيف %s لقائمة اشتراك %s';
|
$lang['subscr_subscribe_success'] = 'اضيف %s لقائمة اشتراك %s';
|
||||||
$lang['subscr_subscribe_error'] = 'خطأ في إضافة %s لقائمة اشتراك %s';
|
$lang['subscr_subscribe_error'] = 'خطأ في إضافة %s لقائمة اشتراك %s';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بولوجك، لا يمكن اضافتك لقائمة الاشتراك';
|
$lang['subscr_subscribe_noaddress'] = 'ليس هناك عنوان مرتبط بولوجك، لا يمكن اضافتك لقائمة الاشتراك';
|
||||||
|
@ -266,6 +267,8 @@ $lang['subscr_m_unsubscribe'] = 'ألغ الاشتراك';
|
||||||
$lang['subscr_m_subscribe'] = 'اشترك';
|
$lang['subscr_m_subscribe'] = 'اشترك';
|
||||||
$lang['subscr_m_receive'] = 'استقبال';
|
$lang['subscr_m_receive'] = 'استقبال';
|
||||||
$lang['subscr_style_every'] = 'بريدا على كل تغيير';
|
$lang['subscr_style_every'] = 'بريدا على كل تغيير';
|
||||||
|
$lang['subscr_style_digest'] = 'البريد الإلكتروني, ملخص للتغييرات لكل صفحة (كل يوم %.2f)';
|
||||||
|
$lang['subscr_style_list'] = 'قائمة بالصفحات التي تم تغييرها منذ آخر بريد الإلكتروني (كل يوم %.2f)';
|
||||||
$lang['authtempfail'] = 'تصريح المشترك غير متوفر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
|
$lang['authtempfail'] = 'تصريح المشترك غير متوفر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
|
||||||
$lang['authpwdexpire'] = 'ستنتهي صلاحية كلمة السر في %d . عليك بتغييرها سريعا.';
|
$lang['authpwdexpire'] = 'ستنتهي صلاحية كلمة السر في %d . عليك بتغييرها سريعا.';
|
||||||
$lang['i_chooselang'] = 'اختر لغتك';
|
$lang['i_chooselang'] = 'اختر لغتك';
|
||||||
|
@ -297,8 +300,12 @@ $lang['i_policy'] = 'تصريح ACL مبدئي';
|
||||||
$lang['i_pol0'] = 'ويكي مفتوحة؛ أي القراءة والكتابة والتحميل مسموحة للجميع';
|
$lang['i_pol0'] = 'ويكي مفتوحة؛ أي القراءة والكتابة والتحميل مسموحة للجميع';
|
||||||
$lang['i_pol1'] = 'ويكي عامة؛ أي القراءة للجميع ولكن الكتابة والتحميل للمشتركين المسجلين فقط';
|
$lang['i_pol1'] = 'ويكي عامة؛ أي القراءة للجميع ولكن الكتابة والتحميل للمشتركين المسجلين فقط';
|
||||||
$lang['i_pol2'] = 'ويكي مغلقة؛ أي القراءة والكتابة والتحميل للمشتركين المسجلين فقط';
|
$lang['i_pol2'] = 'ويكي مغلقة؛ أي القراءة والكتابة والتحميل للمشتركين المسجلين فقط';
|
||||||
|
$lang['i_allowreg'] = 'السماح للمستخدمين بتسجيل أنفسهم';
|
||||||
$lang['i_retry'] = 'إعادة المحاولة';
|
$lang['i_retry'] = 'إعادة المحاولة';
|
||||||
$lang['i_license'] = 'اختر الرخصة التي تريد وضع المحتوى تحتها:';
|
$lang['i_license'] = 'اختر الرخصة التي تريد وضع المحتوى تحتها:';
|
||||||
|
$lang['i_license_none'] = 'لا تظهر أية معلومات للترخيص';
|
||||||
|
$lang['i_pop_field'] = 'من فضلك، ساعدنا على تحسين تجربة دوكي ويكي:';
|
||||||
|
$lang['i_pop_label'] = 'مرة واحدة في شهر، إرسال بيانات استخدام المجهول للمطورين دوكي ويكي';
|
||||||
$lang['recent_global'] = 'انت تراقب حاليا التغييرات داخل نطاق <b>%s</b>. يمكنك أيضا <a href="%s">عرض أحدث تغييرات الويكي كلها</a>.';
|
$lang['recent_global'] = 'انت تراقب حاليا التغييرات داخل نطاق <b>%s</b>. يمكنك أيضا <a href="%s">عرض أحدث تغييرات الويكي كلها</a>.';
|
||||||
$lang['years'] = '%d سنة مضت';
|
$lang['years'] = '%d سنة مضت';
|
||||||
$lang['months'] = '%d شهرا مضى';
|
$lang['months'] = '%d شهرا مضى';
|
||||||
|
@ -331,3 +338,6 @@ $lang['media_perm_read'] = 'عفوا، لست مخولا بقراءة ال
|
||||||
$lang['media_perm_upload'] = 'عفوا، لست مخولا برفع الملفات.';
|
$lang['media_perm_upload'] = 'عفوا، لست مخولا برفع الملفات.';
|
||||||
$lang['media_update'] = 'ارفع إصدارا أحدث';
|
$lang['media_update'] = 'ارفع إصدارا أحدث';
|
||||||
$lang['media_restore'] = 'استرجع هذه النسخة';
|
$lang['media_restore'] = 'استرجع هذه النسخة';
|
||||||
|
$lang['currentns'] = 'مساحة الاسم الحالية';
|
||||||
|
$lang['searchresult'] = 'نتيجة البحث';
|
||||||
|
$lang['wikimarkup'] = 'علامات الوكي';
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== Müraciət qadağan edilmişdir ======
|
====== Müraciət qadağan edilmişdir ======
|
||||||
|
|
||||||
Sizin bu əməliyyat üçün kifayət qədər haqqınız yoxdur. Bəlkə, Siz sistemə oz istifadəçi adınız ilə girməyi unutmusunuz?
|
Sizin bu əməliyyat üçün kifayət qədər haqqınız yoxdur.
|
||||||
|
|
23
sources/inc/lang/az/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/az/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Jamil Najafov (necefov33@gmail.com). */
|
||||||
|
jQuery(function($) {
|
||||||
|
$.datepicker.regional['az'] = {
|
||||||
|
closeText: 'Bağla',
|
||||||
|
prevText: '<Geri',
|
||||||
|
nextText: 'İrəli>',
|
||||||
|
currentText: 'Bugün',
|
||||||
|
monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
|
||||||
|
'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
|
||||||
|
monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
|
||||||
|
'İyul','Avq','Sen','Okt','Noy','Dek'],
|
||||||
|
dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
|
||||||
|
dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
|
||||||
|
dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
|
||||||
|
weekHeader: 'Hf',
|
||||||
|
dateFormat: 'dd.mm.yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['az']);
|
||||||
|
});
|
|
@ -172,7 +172,7 @@ $lang['admin_register'] = 'İstifadəçi əlavə et';
|
||||||
$lang['metaedit'] = 'Meta-məlumatlarda düzəliş et';
|
$lang['metaedit'] = 'Meta-məlumatlarda düzəliş et';
|
||||||
$lang['metasaveerr'] = 'Meta-məlumatları yazan zamanı xəta';
|
$lang['metasaveerr'] = 'Meta-məlumatları yazan zamanı xəta';
|
||||||
$lang['metasaveok'] = 'Meta-məlumatlar yadda saxlandı';
|
$lang['metasaveok'] = 'Meta-məlumatlar yadda saxlandı';
|
||||||
$lang['img_backto'] = 'Qayıd';
|
$lang['btn_img_backto'] = 'Qayıd %s';
|
||||||
$lang['img_title'] = 'Başlıq';
|
$lang['img_title'] = 'Başlıq';
|
||||||
$lang['img_caption'] = 'İmza';
|
$lang['img_caption'] = 'İmza';
|
||||||
$lang['img_date'] = 'Tarix';
|
$lang['img_date'] = 'Tarix';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Отказан достъп ======
|
====== Отказан достъп ======
|
||||||
|
|
||||||
Нямате достатъчно права, за да продължите. Може би сте забравили да се впишете?
|
Нямате достатъчно права, за да продължите.
|
||||||
|
|
||||||
|
|
24
sources/inc/lang/bg/jquery.ui.datepicker.js
vendored
Normal file
24
sources/inc/lang/bg/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/* Bulgarian initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Stoyan Kyosev (http://svest.org). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['bg'] = {
|
||||||
|
closeText: 'затвори',
|
||||||
|
prevText: '<назад',
|
||||||
|
nextText: 'напред>',
|
||||||
|
nextBigText: '>>',
|
||||||
|
currentText: 'днес',
|
||||||
|
monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
|
||||||
|
'Юли','Август','Септември','Октомври','Ноември','Декември'],
|
||||||
|
monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
|
||||||
|
'Юли','Авг','Сеп','Окт','Нов','Дек'],
|
||||||
|
dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
|
||||||
|
dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
|
||||||
|
dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
|
||||||
|
weekHeader: 'Wk',
|
||||||
|
dateFormat: 'dd.mm.yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['bg']);
|
||||||
|
});
|
|
@ -1,20 +1,20 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bulgarian language file
|
|
||||||
*
|
|
||||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||||
|
*
|
||||||
* @author Nikolay Vladimirov <nikolay@vladimiroff.com>
|
* @author Nikolay Vladimirov <nikolay@vladimiroff.com>
|
||||||
* @author Viktor Usunov <usun0v@mail.bg>
|
* @author Viktor Usunov <usun0v@mail.bg>
|
||||||
* @author Kiril <neohidra@gmail.com>
|
* @author Kiril <neohidra@gmail.com>
|
||||||
|
* @author Ivan Peltekov <ivan.peltekov@abv.bg>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'ltr';
|
$lang['direction'] = 'ltr';
|
||||||
$lang['doublequoteopening'] = '"'; //“
|
$lang['doublequoteopening'] = '"';
|
||||||
$lang['doublequoteclosing'] = '"'; //”
|
$lang['doublequoteclosing'] = '"';
|
||||||
$lang['singlequoteopening'] = '‘'; //‘
|
$lang['singlequoteopening'] = '‘';
|
||||||
$lang['singlequoteclosing'] = '’'; //’
|
$lang['singlequoteclosing'] = '’';
|
||||||
$lang['apostrophe'] = '’'; //’
|
$lang['apostrophe'] = '’';
|
||||||
|
|
||||||
$lang['btn_edit'] = 'Редактиране';
|
$lang['btn_edit'] = 'Редактиране';
|
||||||
$lang['btn_source'] = 'Преглед на кода';
|
$lang['btn_source'] = 'Преглед на кода';
|
||||||
$lang['btn_show'] = 'Преглед на страницата';
|
$lang['btn_show'] = 'Преглед на страницата';
|
||||||
|
@ -50,7 +50,7 @@ $lang['btn_revert'] = 'Възстановяване';
|
||||||
$lang['btn_register'] = 'Регистриране';
|
$lang['btn_register'] = 'Регистриране';
|
||||||
$lang['btn_apply'] = 'Прилагане';
|
$lang['btn_apply'] = 'Прилагане';
|
||||||
$lang['btn_media'] = 'Диспечер на файлове';
|
$lang['btn_media'] = 'Диспечер на файлове';
|
||||||
|
$lang['btn_deleteuser'] = 'Изтриване на профила';
|
||||||
$lang['loggedinas'] = 'Вписани сте като';
|
$lang['loggedinas'] = 'Вписани сте като';
|
||||||
$lang['user'] = 'Потребител';
|
$lang['user'] = 'Потребител';
|
||||||
$lang['pass'] = 'Парола';
|
$lang['pass'] = 'Парола';
|
||||||
|
@ -62,10 +62,10 @@ $lang['fullname'] = 'Истинско име';
|
||||||
$lang['email'] = 'Електронна поща';
|
$lang['email'] = 'Електронна поща';
|
||||||
$lang['profile'] = 'Потребителски профил';
|
$lang['profile'] = 'Потребителски профил';
|
||||||
$lang['badlogin'] = 'Грешно потребителско име или парола.';
|
$lang['badlogin'] = 'Грешно потребителско име или парола.';
|
||||||
|
$lang['badpassconfirm'] = 'За съжаление паролата е грешна';
|
||||||
$lang['minoredit'] = 'Промените са незначителни';
|
$lang['minoredit'] = 'Промените са незначителни';
|
||||||
$lang['draftdate'] = 'Черновата е автоматично записана на'; // full dformat date will be added
|
$lang['draftdate'] = 'Черновата е автоматично записана на';
|
||||||
$lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.';
|
$lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.';
|
||||||
|
|
||||||
$lang['regmissing'] = 'Моля, попълнете всички полета.';
|
$lang['regmissing'] = 'Моля, попълнете всички полета.';
|
||||||
$lang['reguexists'] = 'Вече съществува потребител с избраното име.';
|
$lang['reguexists'] = 'Вече съществува потребител с избраното име.';
|
||||||
$lang['regsuccess'] = 'Потребителят е създаден, а паролата е пратена по електронната поща.';
|
$lang['regsuccess'] = 'Потребителят е създаден, а паролата е пратена по електронната поща.';
|
||||||
|
@ -75,12 +75,15 @@ $lang['regbadmail'] = 'Въведеният адрес изглежд
|
||||||
$lang['regbadpass'] = 'Двете въведени пароли не съвпадат, моля опитайте отново.';
|
$lang['regbadpass'] = 'Двете въведени пароли не съвпадат, моля опитайте отново.';
|
||||||
$lang['regpwmail'] = 'Паролата ви за DokuWiki';
|
$lang['regpwmail'] = 'Паролата ви за DokuWiki';
|
||||||
$lang['reghere'] = 'Все още нямате профил? Направете си';
|
$lang['reghere'] = 'Все още нямате профил? Направете си';
|
||||||
|
|
||||||
$lang['profna'] = 'Wiki-то не поддържа промяна на профила';
|
$lang['profna'] = 'Wiki-то не поддържа промяна на профила';
|
||||||
$lang['profnochange'] = 'Няма промени.';
|
$lang['profnochange'] = 'Няма промени.';
|
||||||
$lang['profnoempty'] = 'Въвеждането на име и ел. поща е задължително';
|
$lang['profnoempty'] = 'Въвеждането на име и имейл е задължително';
|
||||||
$lang['profchanged'] = 'Потребителският профил е обновен успешно.';
|
$lang['profchanged'] = 'Потребителският профил е обновен успешно.';
|
||||||
|
$lang['profnodelete'] = 'Изтриването на потребители в това wiki не е възможно';
|
||||||
|
$lang['profdeleteuser'] = 'Изтриване на профила';
|
||||||
|
$lang['profdeleted'] = 'Вашият профил е премахнат от това wiki ';
|
||||||
|
$lang['profconfdelete'] = 'Искам да изтрия профила си от това wiki. <br/> Веднъж изтрит, профилът не може да бъде възстановен!';
|
||||||
|
$lang['profconfdeletemissing'] = 'Не сте поставили отметка в кутията потвърждение';
|
||||||
$lang['pwdforget'] = 'Забравили сте паролата си? Получете нова';
|
$lang['pwdforget'] = 'Забравили сте паролата си? Получете нова';
|
||||||
$lang['resendna'] = 'Wiki-то не поддържа повторно пращане на паролата.';
|
$lang['resendna'] = 'Wiki-то не поддържа повторно пращане на паролата.';
|
||||||
$lang['resendpwd'] = 'Задаване на нова парола за';
|
$lang['resendpwd'] = 'Задаване на нова парола за';
|
||||||
|
@ -89,10 +92,8 @@ $lang['resendpwdnouser'] = 'Потребителят не е намере
|
||||||
$lang['resendpwdbadauth'] = 'Кодът за потвърждение е невалиден. Проверете дали сте използвали целия линк за потвърждение.';
|
$lang['resendpwdbadauth'] = 'Кодът за потвърждение е невалиден. Проверете дали сте използвали целия линк за потвърждение.';
|
||||||
$lang['resendpwdconfirm'] = 'Линк за потвърждение е пратен по електронната поща.';
|
$lang['resendpwdconfirm'] = 'Линк за потвърждение е пратен по електронната поща.';
|
||||||
$lang['resendpwdsuccess'] = 'Новата ви паролата е пратена по електронната поща.';
|
$lang['resendpwdsuccess'] = 'Новата ви паролата е пратена по електронната поща.';
|
||||||
|
|
||||||
$lang['license'] = 'Ако не е посочено друго, съдържанието на Wiki-то е лицензирано под следния лиценз:';
|
$lang['license'] = 'Ако не е посочено друго, съдържанието на Wiki-то е лицензирано под следния лиценз:';
|
||||||
$lang['licenseok'] = 'Бележка: Редактирайки страницата, Вие се съгласявате да лицензирате промените (които сте направили) под следния лиценз:';
|
$lang['licenseok'] = 'Бележка: Редактирайки страницата, Вие се съгласявате да лицензирате промените (които сте направили) под следния лиценз:';
|
||||||
|
|
||||||
$lang['searchmedia'] = 'Търсене на файл: ';
|
$lang['searchmedia'] = 'Търсене на файл: ';
|
||||||
$lang['searchmedia_in'] = 'Търсене в %s';
|
$lang['searchmedia_in'] = 'Търсене в %s';
|
||||||
$lang['txt_upload'] = 'Изберете файл за качване';
|
$lang['txt_upload'] = 'Изберете файл за качване';
|
||||||
|
@ -101,7 +102,6 @@ $lang['txt_overwrt'] = 'Презапиши съществуващит
|
||||||
$lang['maxuploadsize'] = 'Макс. размер за отделните файлове е %s.';
|
$lang['maxuploadsize'] = 'Макс. размер за отделните файлове е %s.';
|
||||||
$lang['lockedby'] = 'В момента е заключена от';
|
$lang['lockedby'] = 'В момента е заключена от';
|
||||||
$lang['lockexpire'] = 'Ще бъде отключена на';
|
$lang['lockexpire'] = 'Ще бъде отключена на';
|
||||||
|
|
||||||
$lang['js']['willexpire'] = 'Страницата ще бъде отключена за редактиране след минута.\nЗа предотвратяване на конфликти, ползвайте бутона "Преглед", за рестартиране на брояча за заключване.';
|
$lang['js']['willexpire'] = 'Страницата ще бъде отключена за редактиране след минута.\nЗа предотвратяване на конфликти, ползвайте бутона "Преглед", за рестартиране на брояча за заключване.';
|
||||||
$lang['js']['notsavedyet'] = 'Незаписаните промени ще бъдат загубени. Желаете ли да продължите?';
|
$lang['js']['notsavedyet'] = 'Незаписаните промени ще бъдат загубени. Желаете ли да продължите?';
|
||||||
$lang['js']['searchmedia'] = 'Търсене на файлове';
|
$lang['js']['searchmedia'] = 'Търсене на файлове';
|
||||||
|
@ -140,13 +140,11 @@ $lang['js']['media_diff_portions'] = 'По половинка';
|
||||||
$lang['js']['media_select'] = 'Изберете файлове...';
|
$lang['js']['media_select'] = 'Изберете файлове...';
|
||||||
$lang['js']['media_upload_btn'] = 'Качване';
|
$lang['js']['media_upload_btn'] = 'Качване';
|
||||||
$lang['js']['media_done_btn'] = 'Готово';
|
$lang['js']['media_done_btn'] = 'Готово';
|
||||||
$lang['js']['media_drop'] = 'Влачете и пуснете файливе тук, за да бъдат качени';
|
$lang['js']['media_drop'] = 'Влачете и пуснете файлове тук, за да бъдат качени';
|
||||||
$lang['js']['media_cancel'] = 'премахване';
|
$lang['js']['media_cancel'] = 'премахване';
|
||||||
$lang['js']['media_overwrt'] = 'Презапиши съществуващите файлове';
|
$lang['js']['media_overwrt'] = 'Презапиши съществуващите файлове';
|
||||||
|
|
||||||
$lang['rssfailed'] = 'Възникна грешка при получаването на емисията: ';
|
$lang['rssfailed'] = 'Възникна грешка при получаването на емисията: ';
|
||||||
$lang['nothingfound'] = 'Нищо не е открито.';
|
$lang['nothingfound'] = 'Нищо не е открито.';
|
||||||
|
|
||||||
$lang['mediaselect'] = 'Файлове';
|
$lang['mediaselect'] = 'Файлове';
|
||||||
$lang['fileupload'] = 'Качване на файлове';
|
$lang['fileupload'] = 'Качване на файлове';
|
||||||
$lang['uploadsucc'] = 'Качването е успешно';
|
$lang['uploadsucc'] = 'Качването е успешно';
|
||||||
|
@ -166,12 +164,11 @@ $lang['accessdenied'] = 'Нямате необходимите прав
|
||||||
$lang['mediausage'] = 'Ползвайте следния синтаксис, за да упоменете файла:';
|
$lang['mediausage'] = 'Ползвайте следния синтаксис, за да упоменете файла:';
|
||||||
$lang['mediaview'] = 'Преглед на оригиналния файл';
|
$lang['mediaview'] = 'Преглед на оригиналния файл';
|
||||||
$lang['mediaroot'] = 'root';
|
$lang['mediaroot'] = 'root';
|
||||||
$lang['mediaupload'] = 'Качете файл в текущото именно пространство. За създаване на подимено пространство, добавете име преди това на файла като ги разделите с двоеточие в полето "Качи като"';
|
$lang['mediaupload'] = 'Качете файл в текущото именно пространство. За създаване на подименно пространство, добавете име преди това на файла като ги разделите с двоеточие в полето "Качи като"';
|
||||||
$lang['mediaextchange'] = 'Разширението на файла е сменено от .%s на .%s!';
|
$lang['mediaextchange'] = 'Разширението на файла е сменено от .%s на .%s!';
|
||||||
$lang['reference'] = 'Връзки за';
|
$lang['reference'] = 'Връзки за';
|
||||||
$lang['ref_inuse'] = 'Файлът не може да бъде изтрит, защото все още се ползва от следните страници:';
|
$lang['ref_inuse'] = 'Файлът не може да бъде изтрит, защото все още се ползва от следните страници:';
|
||||||
$lang['ref_hidden'] = 'Някои връзки са към страници, които нямате права да четете';
|
$lang['ref_hidden'] = 'Някои връзки са към страници, които нямате права да четете';
|
||||||
|
|
||||||
$lang['hits'] = 'Съвпадения';
|
$lang['hits'] = 'Съвпадения';
|
||||||
$lang['quickhits'] = 'Съвпадащи имена на страници';
|
$lang['quickhits'] = 'Съвпадащи имена на страници';
|
||||||
$lang['toc'] = 'Съдържание';
|
$lang['toc'] = 'Съдържание';
|
||||||
|
@ -201,18 +198,15 @@ $lang['site_tools'] = 'Инструменти за сайта';
|
||||||
$lang['page_tools'] = 'Инструменти за страници';
|
$lang['page_tools'] = 'Инструменти за страници';
|
||||||
$lang['skip_to_content'] = 'към съдържанието';
|
$lang['skip_to_content'] = 'към съдържанието';
|
||||||
$lang['sidebar'] = 'Странична лента';
|
$lang['sidebar'] = 'Странична лента';
|
||||||
|
|
||||||
$lang['mail_newpage'] = 'добавена страница: ';
|
$lang['mail_newpage'] = 'добавена страница: ';
|
||||||
$lang['mail_changed'] = 'променена страница: ';
|
$lang['mail_changed'] = 'променена страница: ';
|
||||||
$lang['mail_subscribe_list'] = 'променени страници в именно пространство: ';
|
$lang['mail_subscribe_list'] = 'променени страници в именно пространство: ';
|
||||||
$lang['mail_new_user'] = 'нов потребител: ';
|
$lang['mail_new_user'] = 'нов потребител: ';
|
||||||
$lang['mail_upload'] = 'качен файл: ';
|
$lang['mail_upload'] = 'качен файл: ';
|
||||||
|
|
||||||
$lang['changes_type'] = 'Преглед на променените';
|
$lang['changes_type'] = 'Преглед на променените';
|
||||||
$lang['pages_changes'] = 'Страници';
|
$lang['pages_changes'] = 'Страници';
|
||||||
$lang['media_changes'] = 'Файлове';
|
$lang['media_changes'] = 'Файлове';
|
||||||
$lang['both_changes'] = 'Страници и файлове';
|
$lang['both_changes'] = 'Страници и файлове';
|
||||||
|
|
||||||
$lang['qb_bold'] = 'Удебелен текст';
|
$lang['qb_bold'] = 'Удебелен текст';
|
||||||
$lang['qb_italic'] = 'Курсив текст';
|
$lang['qb_italic'] = 'Курсив текст';
|
||||||
$lang['qb_underl'] = 'Подчертан текст';
|
$lang['qb_underl'] = 'Подчертан текст';
|
||||||
|
@ -237,15 +231,12 @@ $lang['qb_media'] = 'Добавяне на изображения
|
||||||
$lang['qb_sig'] = 'Вмъкване на подпис';
|
$lang['qb_sig'] = 'Вмъкване на подпис';
|
||||||
$lang['qb_smileys'] = 'Усмивчици';
|
$lang['qb_smileys'] = 'Усмивчици';
|
||||||
$lang['qb_chars'] = 'Специални знаци';
|
$lang['qb_chars'] = 'Специални знаци';
|
||||||
|
|
||||||
$lang['upperns'] = 'към майчиното именно пространство';
|
$lang['upperns'] = 'към майчиното именно пространство';
|
||||||
|
|
||||||
$lang['admin_register'] = 'Добавяне на нов потребител';
|
$lang['admin_register'] = 'Добавяне на нов потребител';
|
||||||
|
|
||||||
$lang['metaedit'] = 'Редактиране на метаданни';
|
$lang['metaedit'] = 'Редактиране на метаданни';
|
||||||
$lang['metasaveerr'] = 'Записването на метаданните се провали';
|
$lang['metasaveerr'] = 'Записването на метаданните се провали';
|
||||||
$lang['metasaveok'] = 'Метаданните са запазени успешно';
|
$lang['metasaveok'] = 'Метаданните са запазени успешно';
|
||||||
$lang['img_backto'] = 'Назад към';
|
$lang['btn_img_backto'] = 'Назад към %s';
|
||||||
$lang['img_title'] = 'Заглавие';
|
$lang['img_title'] = 'Заглавие';
|
||||||
$lang['img_caption'] = 'Надпис';
|
$lang['img_caption'] = 'Надпис';
|
||||||
$lang['img_date'] = 'Дата';
|
$lang['img_date'] = 'Дата';
|
||||||
|
@ -258,32 +249,26 @@ $lang['img_camera'] = 'Фотоапарат';
|
||||||
$lang['img_keywords'] = 'Ключови думи';
|
$lang['img_keywords'] = 'Ключови думи';
|
||||||
$lang['img_width'] = 'Ширина';
|
$lang['img_width'] = 'Ширина';
|
||||||
$lang['img_height'] = 'Височина';
|
$lang['img_height'] = 'Височина';
|
||||||
$lang['img_manager'] = 'Преглед в диспечера на файлове';
|
$lang['btn_mediaManager'] = 'Преглед в диспечера на файлове';
|
||||||
|
|
||||||
$lang['subscr_subscribe_success'] = '%s е добавен към списъка с абониралите се за %s';
|
$lang['subscr_subscribe_success'] = '%s е добавен към списъка с абониралите се за %s';
|
||||||
$lang['subscr_subscribe_error'] = 'Грешка при добавянето на %s към списъка с абониралите се за %s';
|
$lang['subscr_subscribe_error'] = 'Грешка при добавянето на %s към списъка с абониралите се за %s';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (на ел. поща) с профила ви.';
|
$lang['subscr_subscribe_noaddress'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (имейл) с профила ви.';
|
||||||
$lang['subscr_unsubscribe_success'] = '%s е премахнат от списъка с абониралите се за %s';
|
$lang['subscr_unsubscribe_success'] = '%s е премахнат от списъка с абониралите се за %s';
|
||||||
$lang['subscr_unsubscribe_error'] = 'Грешка при премахването на %s от списъка с абониралите се за %s';
|
$lang['subscr_unsubscribe_error'] = 'Грешка при премахването на %s от списъка с абониралите се за %s';
|
||||||
$lang['subscr_already_subscribed'] = '%s е вече абониран за %s';
|
$lang['subscr_already_subscribed'] = '%s е вече абониран за %s';
|
||||||
$lang['subscr_not_subscribed'] = '%s не е абониран за %s';
|
$lang['subscr_not_subscribed'] = '%s не е абониран за %s';
|
||||||
// Manage page for subscriptions
|
|
||||||
$lang['subscr_m_not_subscribed'] = 'Не сте абониран за текущата страницата или именно пространство.';
|
$lang['subscr_m_not_subscribed'] = 'Не сте абониран за текущата страницата или именно пространство.';
|
||||||
$lang['subscr_m_new_header'] = 'Добави абонамент';
|
$lang['subscr_m_new_header'] = 'Добави абонамент';
|
||||||
$lang['subscr_m_current_header'] = 'Текущи абонаменти';
|
$lang['subscr_m_current_header'] = 'Текущи абонаменти';
|
||||||
$lang['subscr_m_unsubscribe'] = 'Прекратяване на абонамента';
|
$lang['subscr_m_unsubscribe'] = 'Прекратяване на абонамента';
|
||||||
$lang['subscr_m_subscribe'] = 'Абониране';
|
$lang['subscr_m_subscribe'] = 'Абониране';
|
||||||
$lang['subscr_m_receive'] = 'Получаване';
|
$lang['subscr_m_receive'] = 'Получаване';
|
||||||
$lang['subscr_style_every'] = 'на ел. писмо при всяка промяна';
|
$lang['subscr_style_every'] = 'на имейл при всяка промяна';
|
||||||
$lang['subscr_style_digest'] = 'на ел. писмо с обобщение на промените във всяка страница (всеки %.2f дни)';
|
$lang['subscr_style_digest'] = 'на имейл с обобщение на промените във всяка страница (всеки %.2f дни)';
|
||||||
$lang['subscr_style_list'] = 'на списък с променените страници от последното ел. писмо (всеки %.2f дни)';
|
$lang['subscr_style_list'] = 'на списък с променените страници от последния имейл (всеки %.2f дни)';
|
||||||
|
|
||||||
/* auth.class language support */
|
|
||||||
$lang['authtempfail'] = 'Удостоверяването на потребители не е възможно за момента. Ако продължи дълго, моля уведомете администратора на Wiki страницата.';
|
$lang['authtempfail'] = 'Удостоверяването на потребители не е възможно за момента. Ако продължи дълго, моля уведомете администратора на Wiki страницата.';
|
||||||
$lang['authpwdexpire'] = 'Срока на паролата ви ще изтече след %d дни. Препорачително е да я смените по-скоро.';
|
$lang['authpwdexpire'] = 'Срока на паролата ви ще изтече след %d дни. Препоръчително е да я смените по-скоро.';
|
||||||
|
$lang['i_chooselang'] = 'Изберете вашия език';
|
||||||
/* installer strings */
|
|
||||||
$lang['i_chooselang'] = 'Изберете вашия изик';
|
|
||||||
$lang['i_installer'] = 'Инсталатор на DokuWiki';
|
$lang['i_installer'] = 'Инсталатор на DokuWiki';
|
||||||
$lang['i_wikiname'] = 'Име на Wiki-то';
|
$lang['i_wikiname'] = 'Име на Wiki-то';
|
||||||
$lang['i_enableacl'] = 'Ползване на списък за достъп (ACL) [препоръчително]';
|
$lang['i_enableacl'] = 'Ползване на списък за достъп (ACL) [препоръчително]';
|
||||||
|
@ -299,19 +284,18 @@ $lang['i_writeerr'] = '<code>%s</code> не можа да бъде с
|
||||||
$lang['i_badhash'] = 'Файлът dokuwiki.php не може да бъде разпознат или е променен (hash=<code>%s</code>)';
|
$lang['i_badhash'] = 'Файлът dokuwiki.php не може да бъде разпознат или е променен (hash=<code>%s</code>)';
|
||||||
$lang['i_badval'] = '<code>%s</code> - непозволена или празна стойност';
|
$lang['i_badval'] = '<code>%s</code> - непозволена или празна стойност';
|
||||||
$lang['i_success'] = 'Настройването приключи успешно. Вече можете да изтриете файла install.php. Продължете към <a href="doku.php?id=wiki:welcome">Вашето ново DokuWiki</a>.';
|
$lang['i_success'] = 'Настройването приключи успешно. Вече можете да изтриете файла install.php. Продължете към <a href="doku.php?id=wiki:welcome">Вашето ново DokuWiki</a>.';
|
||||||
|
|
||||||
$lang['i_failure'] = 'Възникнаха грешки при записването на файловете с настройки. Вероятно ще се наложи да ги поправите ръчно,
|
$lang['i_failure'] = 'Възникнаха грешки при записването на файловете с настройки. Вероятно ще се наложи да ги поправите ръчно,
|
||||||
за да можете да ползвате <a href="doku.php?id=wiki:welcome">Вашето ново DokuWiki</a>.';
|
за да можете да ползвате <a href="doku.php?id=wiki:welcome">Вашето ново DokuWiki</a>.';
|
||||||
$lang['i_policy'] = 'Първоначална политика за достъп';
|
$lang['i_policy'] = 'Първоначална политика за достъп';
|
||||||
$lang['i_pol0'] = 'Отворено Wiki (всеки може да чете, пише и качва)';
|
$lang['i_pol0'] = 'Отворено Wiki (всеки може да чете, пише и качва)';
|
||||||
$lang['i_pol1'] = 'Публично Wiki (всеки може да чете, само регистрирани пишат и качват)';
|
$lang['i_pol1'] = 'Публично Wiki (всеки може да чете, само регистрирани пишат и качват)';
|
||||||
$lang['i_pol2'] = 'Затворено Wiki (само регистрирани четат, пишат и качват)';
|
$lang['i_pol2'] = 'Затворено Wiki (само регистрирани четат, пишат и качват)';
|
||||||
|
$lang['i_allowreg'] = 'Разрешете на потребителите за се регистрират сами';
|
||||||
$lang['i_retry'] = 'Повторен опит';
|
$lang['i_retry'] = 'Повторен опит';
|
||||||
$lang['i_license'] = 'Моля, изберете лиценз под който желаете да публикувате съдържанието:';
|
$lang['i_license'] = 'Моля, изберете лиценз под който желаете да публикувате съдържанието:';
|
||||||
$lang['i_license_none'] = 'Без показване на информация относно лиценза';
|
$lang['i_license_none'] = 'Без показване на информация относно лиценза';
|
||||||
$lang['i_pop_field'] = 'Моля, помогнете за усъвършенстването на DokuWiki:';
|
$lang['i_pop_field'] = 'Моля, помогнете за усъвършенстването на DokuWiki:';
|
||||||
$lang['i_pop_label'] = 'Изпращане на анонимна информация до разработчиците на DokuWiki, веднъж седмично';
|
$lang['i_pop_label'] = 'Изпращане на анонимна информация до разработчиците на DokuWiki, веднъж седмично';
|
||||||
|
|
||||||
$lang['recent_global'] = 'В момента преглеждате промените в именно пространство <b>%s</b>. Може да прегледате и <a href="%s">промените в цялото Wiki</a>.';
|
$lang['recent_global'] = 'В момента преглеждате промените в именно пространство <b>%s</b>. Може да прегледате и <a href="%s">промените в цялото Wiki</a>.';
|
||||||
$lang['years'] = 'преди %d години';
|
$lang['years'] = 'преди %d години';
|
||||||
$lang['months'] = 'преди %d месеца';
|
$lang['months'] = 'преди %d месеца';
|
||||||
|
@ -320,9 +304,7 @@ $lang['days'] = 'преди %d дни';
|
||||||
$lang['hours'] = 'преди %d часа';
|
$lang['hours'] = 'преди %d часа';
|
||||||
$lang['minutes'] = 'преди %d минути';
|
$lang['minutes'] = 'преди %d минути';
|
||||||
$lang['seconds'] = 'преди %d секунди';
|
$lang['seconds'] = 'преди %d секунди';
|
||||||
|
|
||||||
$lang['wordblock'] = 'Направените от Вас промени не са съхранени, защото съдържат забранен текст (SPAM).';
|
$lang['wordblock'] = 'Направените от Вас промени не са съхранени, защото съдържат забранен текст (SPAM).';
|
||||||
|
|
||||||
$lang['media_uploadtab'] = 'Качване';
|
$lang['media_uploadtab'] = 'Качване';
|
||||||
$lang['media_searchtab'] = 'Търсене';
|
$lang['media_searchtab'] = 'Търсене';
|
||||||
$lang['media_file'] = 'Файл';
|
$lang['media_file'] = 'Файл';
|
||||||
|
@ -346,5 +328,5 @@ $lang['media_perm_read'] = 'За съжаление нямате дост
|
||||||
$lang['media_perm_upload'] = 'За съжаление нямате достатъчно права, за да можете да качите файла.';
|
$lang['media_perm_upload'] = 'За съжаление нямате достатъчно права, за да можете да качите файла.';
|
||||||
$lang['media_update'] = 'Качване на нова версия';
|
$lang['media_update'] = 'Качване на нова версия';
|
||||||
$lang['media_restore'] = 'Възстановяване на тази версия';
|
$lang['media_restore'] = 'Възстановяване на тази версия';
|
||||||
|
$lang['searchresult'] = 'Резултати от търсенето';
|
||||||
//Setup VIM: ex: et ts=2 :
|
$lang['plainhtml'] = 'Обикновен HTML';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Регистриране като нов потребител ======
|
====== Регистриране като нов потребител ======
|
||||||
|
|
||||||
Моля, попълнете всичките полета отдолу, за да бъде създаден нов профил. Уверете се, че въведеният **адрес на ел. поща е правилен**. Ако няма поле за парола, ще ви бъде изпратена такава на въведения адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на страница]].
|
Моля, попълнете всичките полета отдолу, за да бъде създаден нов профил. Уверете се, че въведеният **имейл адрес е правилен**. Ако няма поле за парола, ще ви бъде изпратена такава на въведения адрес. Потребителското име трябва да бъде валидно [[doku>pagename|име на страница]].
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== Пращане на нова парола ======
|
====== Пращане на нова парола ======
|
||||||
|
|
||||||
Моля, въведете потребителското си име във формата по-долу, ако желаете да получите нова парола. По ел. поща ще получите линк, с който да потвърдите.
|
Моля, въведете потребителското си име във формата по-долу, ако желаете да получите нова парола. Чрез имейл ще получите линк, с който да потвърдите.
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== অনুমতি অস্বীকার =====
|
====== অনুমতি অস্বীকার =====
|
||||||
|
|
||||||
দুঃখিত, আপনি কি এগিয়ে যেতে যথেষ্ট অধিকার নেই. সম্ভবত আপনি লগইন ভুলে গেছেন?
|
দুঃখিত, আপনি কি এগিয়ে যেতে যথেষ্ট অধিকার নেই.
|
|
@ -4,6 +4,8 @@
|
||||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||||
*
|
*
|
||||||
* @author Foysol <ragebot1125@gmail.com>
|
* @author Foysol <ragebot1125@gmail.com>
|
||||||
|
* @author ninetailz <ninetailz1125@gmail.com>
|
||||||
|
* @author Khan M. B. Asad <muhammad2017@gmail.com>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'itr';
|
$lang['direction'] = 'itr';
|
||||||
|
@ -25,3 +27,134 @@ $lang['btn_older'] = 'কম সাম্প্রতিক >>';
|
||||||
$lang['btn_revs'] = 'প্রাচীন সংশোধন';
|
$lang['btn_revs'] = 'প্রাচীন সংশোধন';
|
||||||
$lang['btn_recent'] = 'সাধিত পরিবর্তনসমূহ';
|
$lang['btn_recent'] = 'সাধিত পরিবর্তনসমূহ';
|
||||||
$lang['btn_upload'] = 'আপলোড করুন';
|
$lang['btn_upload'] = 'আপলোড করুন';
|
||||||
|
$lang['btn_cancel'] = 'বাতিল করা';
|
||||||
|
$lang['btn_index'] = 'সাইট ম্যাপ';
|
||||||
|
$lang['btn_secedit'] = 'সম্পাদন করা';
|
||||||
|
$lang['btn_login'] = 'লগইন';
|
||||||
|
$lang['btn_logout'] = 'লগ আউট';
|
||||||
|
$lang['btn_admin'] = 'অ্যাডমিন';
|
||||||
|
$lang['btn_update'] = 'আধুনিক করা';
|
||||||
|
$lang['btn_delete'] = 'মুছে ফেলা';
|
||||||
|
$lang['btn_back'] = 'পিছনে';
|
||||||
|
$lang['btn_backlink'] = 'ব্যাকলিঙ্কগুলি';
|
||||||
|
$lang['btn_backtomedia'] = 'পিছনে Mediafile নির্বাচনে যান';
|
||||||
|
$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['btn_deleteuser'] = 'আমার অ্যাকাউন্ট অপসারণ করুন';
|
||||||
|
$lang['loggedinas'] = 'লগ ইন';
|
||||||
|
$lang['user'] = 'ইউজারনেম';
|
||||||
|
$lang['pass'] = 'পাসওয়ার্ড';
|
||||||
|
$lang['newpass'] = 'নতুন পাসওয়ার্ড';
|
||||||
|
$lang['oldpass'] = 'বর্তমান পাসওয়ার্ড নিশ্চিত করুন';
|
||||||
|
$lang['passchk'] = 'আরো একবার';
|
||||||
|
$lang['remember'] = 'আমাকে মনে রেখো';
|
||||||
|
$lang['fullname'] = 'আমাকে মনে রেখো';
|
||||||
|
$lang['email'] = 'ই মেইল';
|
||||||
|
$lang['profile'] = 'ব্যবহারকারী প্রোফাইল';
|
||||||
|
$lang['badlogin'] = 'দুঃখিত, ব্যবহারকারীর নাম বা পাসওয়ার্ড ভুল ছিল.';
|
||||||
|
$lang['badpassconfirm'] = 'দুঃখিত, পাসওয়ার্ড ভুল ছিল';
|
||||||
|
$lang['minoredit'] = 'ক্ষুদ্র পরিবর্তনসমূহ';
|
||||||
|
$lang['draftdate'] = 'খসড়া উপর স্বতঃসংরক্ষণ';
|
||||||
|
$lang['nosecedit'] = 'পাতা ইতিমধ্যে পরিবর্তিত হয়েছিল, অধ্যায় তথ্যের পরিবর্তে পুরো পাতা লোড তারিখ সীমার বাইরে ছিল.
|
||||||
|
';
|
||||||
|
$lang['regmissing'] = 'দুঃখিত, আপনি সমস্ত ক্ষেত্রগুলি পূরণ করা আবশ্যক.';
|
||||||
|
$lang['reguexists'] = 'দুঃখিত, এই লগইন সঙ্গে একটি ব্যবহারকারী ইতিমধ্যেই বিদ্যমান.';
|
||||||
|
$lang['regsuccess'] = 'ব্যবহারকারী তৈরি করা হয়েছে এবং পাসওয়ার্ড ইমেইল করে পাঠানো হয়েছিল.';
|
||||||
|
$lang['regsuccess2'] = 'ব্যবহারকারী তৈরি করা হয়েছে.';
|
||||||
|
$lang['regmailfail'] = 'একটি ত্রুটি পাসওয়ার্ড মেইল পাঠানোর নেভিগেশন ছিল মনে হচ্ছে. অ্যাডমিন যোগাযোগ করুন!';
|
||||||
|
$lang['regbadmail'] = 'প্রদত্ত ইমেইল ঠিকানা সঠিক মনে হচ্ছে - আপনি এই একটি ত্রুটি মনে হলে, অ্যাডমিন যোগাযোগ';
|
||||||
|
$lang['regbadpass'] = 'দুটি প্রদত্ত পাসওয়ার্ড অভিন্ন নয়, আবার চেষ্টা করুন.';
|
||||||
|
$lang['regpwmail'] = 'আপনার DokuWiki পাসওয়ার্ড';
|
||||||
|
$lang['reghere'] = 'যদিও তোমার কোনো একাউন্ট নেই? শুধু একটি পেতে';
|
||||||
|
$lang['profna'] = 'এই উইকি প্রোফাইল পরিবর্তন সমর্থন করে না';
|
||||||
|
$lang['profnochange'] = 'এমন কোন পরিবর্তন, না কিছুই.';
|
||||||
|
$lang['profnoempty'] = 'একটি খালি নাম অথবা ইমেইল ঠিকানা অনুমোদিত নয়.';
|
||||||
|
$lang['profchanged'] = 'ইউজার প্রোফাইল সফলভাবে আপডেট.';
|
||||||
|
$lang['profnodelete'] = 'এই উইকি ব্যবহারকারী মুছে ফেলার সমর্থন করে না';
|
||||||
|
$lang['profdeleteuser'] = 'একাউন্ট মুছে দিন';
|
||||||
|
$lang['profdeleted'] = 'আপনার অ্যাকাউন্টটি এই উইকি থেকে মুছে ফেলা হয়েছে';
|
||||||
|
$lang['profconfdelete'] = 'আমি এই উইকি থেকে আমার অ্যাকাউন্ট অপসারণ করতে ইচ্ছুক. <br/> এই ক্রিয়াটি পূর্বাবস্থায় ফেরানো যায় না.';
|
||||||
|
$lang['profconfdeletemissing'] = 'নিশ্চিতকরণ চেক বক্স ticked না';
|
||||||
|
$lang['pwdforget'] = 'আপনার পাসওয়ার্ড ভুলে গেছেন? একটি নতুন পান';
|
||||||
|
$lang['resendna'] = 'এই উইকি পাসওয়ার্ড পুনরায় প্রেরণ সমর্থন করে না.';
|
||||||
|
$lang['resendpwd'] = 'জন্য সেট করুন নতুন পাসওয়ার্ড';
|
||||||
|
$lang['resendpwdmissing'] = 'দুঃখিত, আপনি সমস্ত ক্ষেত্রগুলি পূরণ করা আবশ্যক.';
|
||||||
|
$lang['resendpwdnouser'] = 'দুঃখিত, আমরা আমাদের ডাটাবেসের মধ্যে ব্যবহারকারীর খুঁজে পাচ্ছি না.';
|
||||||
|
$lang['resendpwdbadauth'] = 'দুঃখিত, এই auth কোড বৈধ নয়. আপনি সম্পূর্ণ কনফার্মেশন লিঙ্ক ব্যবহার নিশ্চিত করুন.';
|
||||||
|
$lang['resendpwdconfirm'] = 'একটি নিশ্চায়ন লিঙ্ক ইমেলের মাধ্যমে পাঠানো হয়েছে.';
|
||||||
|
$lang['resendpwdsuccess'] = 'আপনার নতুন পাসওয়ার্ড ইমেইলের মাধ্যমে পাঠানো হয়েছে.';
|
||||||
|
$lang['license'] = 'অন্যথায় নোট যেখানে ছাড়া, এই উইকি নেভিগেশন কন্টেন্ট নিম্নলিখিত লাইসেন্সের আওতায় লাইসেন্সকৃত:';
|
||||||
|
$lang['licenseok'] = 'দ্রষ্টব্য: আপনি নিম্নলিখিত লাইসেন্সের অধীনে আপনার বিষয়বস্তু লাইসেন্স সম্মত হন এই পৃষ্ঠার সম্পাদনার দ্বারা:';
|
||||||
|
$lang['searchmedia'] = 'অনুসন্ধান ফাইলের নাম:';
|
||||||
|
$lang['searchmedia_in'] = 'অনুসন্ধান %s -এ';
|
||||||
|
$lang['txt_upload'] = 'আপলোড করার জন্য নির্বাচন করুন ফাইল';
|
||||||
|
$lang['txt_filename'] = 'হিসাবে আপলোড করুন (ঐচ্ছিক)';
|
||||||
|
$lang['txt_overwrt'] = 'বিদ্যমান ফাইল মুছে যাবে';
|
||||||
|
$lang['maxuploadsize'] = 'সর্বোচ্চ আপলোড করুন. %s-ফাইলের প্রতি.';
|
||||||
|
$lang['lockedby'] = 'বর্তমানে দ্বারা লক';
|
||||||
|
$lang['lockexpire'] = 'তালা এ মেয়াদ শেষ';
|
||||||
|
$lang['js']['willexpire'] = 'এই পৃষ্ঠার সম্পাদনার জন্য আপনার লক এক মিনিটের মধ্যে মেয়াদ শেষ সম্পর্কে. \ দ্বন্দ্ব লক টাইমার রিসেট প্রিভিউ বাটন ব্যবহার এড়াতে.';
|
||||||
|
$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']['mediainsert'] = 'ঢোকান';
|
||||||
|
$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'] = 'উইন্ডোস শেয়ার এর সাথে সংযোগ সাধন কেবল মাইক্রোসফ্ট ইন্টারনেট এক্সপ্লোরারেই সম্ভব।\nতবে আপনি লিংকটি কপি পেস্ট করতেই পারেন।';
|
||||||
|
$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'] = 'ফিডটি জোগাড় করতে গিয়ে একটি ত্রুটি ঘটেছে:';
|
||||||
|
$lang['nothingfound'] = 'কিছু পাওয়া যায়নি।';
|
||||||
|
$lang['mediaselect'] = 'মিডিয়া ফাইল';
|
||||||
|
$lang['fileupload'] = 'মিডিয়া ফাইল আপলোড';
|
||||||
|
$lang['uploadsucc'] = 'আপলোড সফল';
|
||||||
|
$lang['uploadfail'] = 'আপলোড ব্যর্থ। অনুমতি জনিত ত্রুটি কী?';
|
||||||
|
$lang['uploadwrong'] = 'আপলোড প্রত্যাখ্যাত। এই ফাইল এক্সটেনশন অননুমোদিত।';
|
||||||
|
$lang['uploadexist'] = 'ফাইল ইতিমধ্যেই বিরাজমান। কিছু করা হয়নি।';
|
||||||
|
$lang['uploadbadcontent'] = 'আপলোডকৃত সামগ্রী %s ফাইল এক্সটেনশন এর সাথে মিলেনি।';
|
||||||
|
$lang['uploadspam'] = 'স্প্যাম ব্ল্যাকলিস্ট আপলোড আটকে দিয়েছে।';
|
||||||
|
$lang['uploadxss'] = 'সামগ্রীটি ক্ষতিকর ভেবে আপলোড আটকে দেয়া হয়েছে।';
|
||||||
|
$lang['uploadsize'] = 'আপলোডকৃত ফাইলটি বেশি বড়ো। (সর্বোচ্চ %s)';
|
||||||
|
$lang['deletesucc'] = '"%s" ফাইলটি মুছে ফেলা হয়েছে।';
|
||||||
|
$lang['deletefail'] = '"%s" ডিলিট করা যায়নি - অনুমতি আছে কি না দেখুন।';
|
||||||
|
$lang['mediainuse'] = '"%s" ফাইলটি মোছা হয়নি - এটি এখনো ব্যবহৃত হচ্ছে।';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Permís denegat ======
|
====== Permís denegat ======
|
||||||
|
|
||||||
Disculpe, pero no té permís per a continuar. ¿Haurà oblidat iniciar sessió?
|
Disculpe, pero no té permís per a continuar.
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ $lang['admin_register'] = 'Afegir nou usuari';
|
||||||
$lang['metaedit'] = 'Editar meta-senyes';
|
$lang['metaedit'] = 'Editar meta-senyes';
|
||||||
$lang['metasaveerr'] = 'Erro escrivint meta-senyes';
|
$lang['metasaveerr'] = 'Erro escrivint meta-senyes';
|
||||||
$lang['metasaveok'] = 'Meta-senyes guardades';
|
$lang['metasaveok'] = 'Meta-senyes guardades';
|
||||||
$lang['img_backto'] = 'Tornar a';
|
$lang['btn_img_backto'] = 'Tornar a %s';
|
||||||
$lang['img_title'] = 'Títul';
|
$lang['img_title'] = 'Títul';
|
||||||
$lang['img_caption'] = 'Subtítul';
|
$lang['img_caption'] = 'Subtítul';
|
||||||
$lang['img_date'] = 'Data';
|
$lang['img_date'] = 'Data';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Permís denegat ======
|
====== Permís denegat ======
|
||||||
|
|
||||||
No teniu prou drets per continuar. Potser us heu descuidat d'entrar?
|
No teniu prou drets per continuar.
|
||||||
|
|
||||||
|
|
23
sources/inc/lang/ca/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/ca/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
|
||||||
|
/* Writers: (joan.leon@gmail.com). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['ca'] = {
|
||||||
|
closeText: 'Tanca',
|
||||||
|
prevText: 'Anterior',
|
||||||
|
nextText: 'Següent',
|
||||||
|
currentText: 'Avui',
|
||||||
|
monthNames: ['gener','febrer','març','abril','maig','juny',
|
||||||
|
'juliol','agost','setembre','octubre','novembre','desembre'],
|
||||||
|
monthNamesShort: ['gen','feb','març','abr','maig','juny',
|
||||||
|
'jul','ag','set','oct','nov','des'],
|
||||||
|
dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
|
||||||
|
dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
|
||||||
|
dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
|
||||||
|
weekHeader: 'Set',
|
||||||
|
dateFormat: 'dd/mm/yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['ca']);
|
||||||
|
});
|
|
@ -228,7 +228,7 @@ $lang['admin_register'] = 'Afegeix nou usuari';
|
||||||
$lang['metaedit'] = 'Edita metadades';
|
$lang['metaedit'] = 'Edita metadades';
|
||||||
$lang['metasaveerr'] = 'No s\'han pogut escriure les metadades';
|
$lang['metasaveerr'] = 'No s\'han pogut escriure les metadades';
|
||||||
$lang['metasaveok'] = 'S\'han desat les metadades';
|
$lang['metasaveok'] = 'S\'han desat les metadades';
|
||||||
$lang['img_backto'] = 'Torna a';
|
$lang['btn_img_backto'] = 'Torna a %s';
|
||||||
$lang['img_title'] = 'Títol';
|
$lang['img_title'] = 'Títol';
|
||||||
$lang['img_caption'] = 'Peu d\'imatge';
|
$lang['img_caption'] = 'Peu d\'imatge';
|
||||||
$lang['img_date'] = 'Data';
|
$lang['img_date'] = 'Data';
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== Nepovolená akce ======
|
====== Nepovolená akce ======
|
||||||
|
|
||||||
Promiňte, ale nemáte dostatečná oprávnění k této činnosti. Možná jste se zapomněli přihlásit?
|
Promiňte, ale nemáte dostatečná oprávnění k této činnosti.
|
||||||
|
|
23
sources/inc/lang/cs/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/cs/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Czech initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Tomas Muller (tomas@tomas-muller.net). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['cs'] = {
|
||||||
|
closeText: 'Zavřít',
|
||||||
|
prevText: '<Dříve',
|
||||||
|
nextText: 'Později>',
|
||||||
|
currentText: 'Nyní',
|
||||||
|
monthNames: ['leden','únor','březen','duben','květen','červen',
|
||||||
|
'červenec','srpen','září','říjen','listopad','prosinec'],
|
||||||
|
monthNamesShort: ['led','úno','bře','dub','kvě','čer',
|
||||||
|
'čvc','srp','zář','říj','lis','pro'],
|
||||||
|
dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
|
||||||
|
dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
|
||||||
|
dayNamesMin: ['ne','po','út','st','čt','pá','so'],
|
||||||
|
weekHeader: 'Týd',
|
||||||
|
dateFormat: 'dd.mm.yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['cs']);
|
||||||
|
});
|
|
@ -16,6 +16,7 @@
|
||||||
* @author mkucera66@seznam.cz
|
* @author mkucera66@seznam.cz
|
||||||
* @author Zbyněk Křivka <krivka@fit.vutbr.cz>
|
* @author Zbyněk Křivka <krivka@fit.vutbr.cz>
|
||||||
* @author Gerrit Uitslag <klapinklapin@gmail.com>
|
* @author Gerrit Uitslag <klapinklapin@gmail.com>
|
||||||
|
* @author Petr Klíma <qaxi@seznam.cz>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'ltr';
|
$lang['direction'] = 'ltr';
|
||||||
|
@ -247,7 +248,7 @@ $lang['admin_register'] = 'Přidat nového uživatele';
|
||||||
$lang['metaedit'] = 'Upravit Metadata';
|
$lang['metaedit'] = 'Upravit Metadata';
|
||||||
$lang['metasaveerr'] = 'Chyba při zápisu metadat';
|
$lang['metasaveerr'] = 'Chyba při zápisu metadat';
|
||||||
$lang['metasaveok'] = 'Metadata uložena';
|
$lang['metasaveok'] = 'Metadata uložena';
|
||||||
$lang['img_backto'] = 'Zpět na';
|
$lang['btn_img_backto'] = 'Zpět na %s';
|
||||||
$lang['img_title'] = 'Titulek';
|
$lang['img_title'] = 'Titulek';
|
||||||
$lang['img_caption'] = 'Popis';
|
$lang['img_caption'] = 'Popis';
|
||||||
$lang['img_date'] = 'Datum';
|
$lang['img_date'] = 'Datum';
|
||||||
|
@ -260,7 +261,7 @@ $lang['img_camera'] = 'Typ fotoaparátu';
|
||||||
$lang['img_keywords'] = 'Klíčová slova';
|
$lang['img_keywords'] = 'Klíčová slova';
|
||||||
$lang['img_width'] = 'Šířka';
|
$lang['img_width'] = 'Šířka';
|
||||||
$lang['img_height'] = 'Výška';
|
$lang['img_height'] = 'Výška';
|
||||||
$lang['img_manager'] = 'Zobrazit ve správě médií';
|
$lang['btn_mediaManager'] = 'Zobrazit ve správě médií';
|
||||||
$lang['subscr_subscribe_success'] = '%s byl přihlášen do seznamu odběratelů %s';
|
$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_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ů.';
|
$lang['subscr_subscribe_noaddress'] = 'K Vašemu loginu neexistuje žádná adresa, nemohl jste být přihlášen do seznamu odběratelů.';
|
||||||
|
@ -299,6 +300,7 @@ $lang['i_policy'] = 'Úvodní politika ACL';
|
||||||
$lang['i_pol0'] = 'Otevřená wiki (čtení, zápis a upload pro všechny)';
|
$lang['i_pol0'] = 'Otevřená wiki (čtení, zápis a upload pro všechny)';
|
||||||
$lang['i_pol1'] = 'Veřejná wiki (čtení pro všechny, zápis a upload pro registrované uživatele)';
|
$lang['i_pol1'] = 'Veřejná wiki (čtení pro všechny, zápis a upload pro registrované uživatele)';
|
||||||
$lang['i_pol2'] = 'Uzavřená wiki (čtení, zápis a upload pouze pro registrované uživatele)';
|
$lang['i_pol2'] = 'Uzavřená wiki (čtení, zápis a upload pouze pro registrované uživatele)';
|
||||||
|
$lang['i_allowreg'] = 'Povol uživatelům registraci';
|
||||||
$lang['i_retry'] = 'Zkusit znovu';
|
$lang['i_retry'] = 'Zkusit znovu';
|
||||||
$lang['i_license'] = 'Vyberte prosím licenci obsahu:';
|
$lang['i_license'] = 'Vyberte prosím licenci obsahu:';
|
||||||
$lang['i_license_none'] = 'Nezobrazovat žádné licenční informace';
|
$lang['i_license_none'] = 'Nezobrazovat žádné licenční informace';
|
||||||
|
@ -336,3 +338,7 @@ $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_perm_upload'] = 'Bohužel, nemáte práva nahrávat soubory.';
|
||||||
$lang['media_update'] = 'Nahrát novou verzi';
|
$lang['media_update'] = 'Nahrát novou verzi';
|
||||||
$lang['media_restore'] = 'Obnovit tuto verzi';
|
$lang['media_restore'] = 'Obnovit tuto verzi';
|
||||||
|
$lang['currentns'] = 'Aktuální jmenný prostor';
|
||||||
|
$lang['searchresult'] = 'Výsledek hledání';
|
||||||
|
$lang['plainhtml'] = 'Čisté HTML';
|
||||||
|
$lang['wikimarkup'] = 'Wiki jazyk';
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== Adgang nægtet! ======
|
====== Adgang nægtet! ======
|
||||||
|
|
||||||
Du har ikke rettigheder til at fortsætte. Måske er du ikke logget ind.
|
Du har ikke rettigheder til at fortsætte.
|
||||||
|
|
23
sources/inc/lang/da/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/da/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Danish initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Jan Christensen ( deletestuff@gmail.com). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['da'] = {
|
||||||
|
closeText: 'Luk',
|
||||||
|
prevText: '<Forrige',
|
||||||
|
nextText: 'Næste>',
|
||||||
|
currentText: 'Idag',
|
||||||
|
monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
|
||||||
|
'Juli','August','September','Oktober','November','December'],
|
||||||
|
monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
|
||||||
|
'Jul','Aug','Sep','Okt','Nov','Dec'],
|
||||||
|
dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
|
||||||
|
dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
|
||||||
|
dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
|
||||||
|
weekHeader: 'Uge',
|
||||||
|
dateFormat: 'dd-mm-yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['da']);
|
||||||
|
});
|
|
@ -246,7 +246,7 @@ $lang['admin_register'] = 'Tilføj ny bruger';
|
||||||
$lang['metaedit'] = 'Rediger metadata';
|
$lang['metaedit'] = 'Rediger metadata';
|
||||||
$lang['metasaveerr'] = 'Skrivning af metadata fejlede';
|
$lang['metasaveerr'] = 'Skrivning af metadata fejlede';
|
||||||
$lang['metasaveok'] = 'Metadata gemt';
|
$lang['metasaveok'] = 'Metadata gemt';
|
||||||
$lang['img_backto'] = 'Tilbage til';
|
$lang['btn_img_backto'] = 'Tilbage til %s';
|
||||||
$lang['img_title'] = 'Titel';
|
$lang['img_title'] = 'Titel';
|
||||||
$lang['img_caption'] = 'Billedtekst';
|
$lang['img_caption'] = 'Billedtekst';
|
||||||
$lang['img_date'] = 'Dato';
|
$lang['img_date'] = 'Dato';
|
||||||
|
@ -259,7 +259,7 @@ $lang['img_camera'] = 'Kamera';
|
||||||
$lang['img_keywords'] = 'Emneord';
|
$lang['img_keywords'] = 'Emneord';
|
||||||
$lang['img_width'] = 'Bredde';
|
$lang['img_width'] = 'Bredde';
|
||||||
$lang['img_height'] = 'Højde';
|
$lang['img_height'] = 'Højde';
|
||||||
$lang['img_manager'] = 'Vis i Media Manager';
|
$lang['btn_mediaManager'] = 'Vis i Media Manager';
|
||||||
$lang['subscr_subscribe_success'] = 'Tilføjede %s til abonnement listen for %s';
|
$lang['subscr_subscribe_success'] = 'Tilføjede %s til abonnement listen for %s';
|
||||||
$lang['subscr_subscribe_error'] = 'Fejl ved tilføjelse af %s til abonnement listen for %s';
|
$lang['subscr_subscribe_error'] = 'Fejl ved tilføjelse af %s til abonnement listen for %s';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'Der er ikke nogen addresse forbundet til din bruger, så du kan ikke blive tilføjet til abonnement listen';
|
$lang['subscr_subscribe_noaddress'] = 'Der er ikke nogen addresse forbundet til din bruger, så du kan ikke blive tilføjet til abonnement listen';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Zugang verweigert ======
|
====== Zugang verweigert ======
|
||||||
|
|
||||||
Du hast nicht die erforderliche Berechtigung, um diese Aktion durchzuführen. Eventuell bist du nicht am Wiki angemeldet?
|
Du hast nicht die erforderliche Berechtigung, um diese Aktion durchzuführen.
|
||||||
|
|
||||||
|
|
23
sources/inc/lang/de-informal/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/de-informal/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* German initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Milian Wolff (mail@milianw.de). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['de'] = {
|
||||||
|
closeText: 'Schließen',
|
||||||
|
prevText: '<Zurück',
|
||||||
|
nextText: 'Vor>',
|
||||||
|
currentText: 'Heute',
|
||||||
|
monthNames: ['Januar','Februar','März','April','Mai','Juni',
|
||||||
|
'Juli','August','September','Oktober','November','Dezember'],
|
||||||
|
monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
|
||||||
|
'Jul','Aug','Sep','Okt','Nov','Dez'],
|
||||||
|
dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
|
||||||
|
dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
|
||||||
|
dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
|
||||||
|
weekHeader: 'KW',
|
||||||
|
dateFormat: 'dd.mm.yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['de']);
|
||||||
|
});
|
|
@ -251,7 +251,7 @@ $lang['admin_register'] = 'Neuen Benutzer anmelden';
|
||||||
$lang['metaedit'] = 'Metadaten bearbeiten';
|
$lang['metaedit'] = 'Metadaten bearbeiten';
|
||||||
$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
|
$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
|
||||||
$lang['metasaveok'] = 'Metadaten gesichert';
|
$lang['metasaveok'] = 'Metadaten gesichert';
|
||||||
$lang['img_backto'] = 'Zurück zu';
|
$lang['btn_img_backto'] = 'Zurück zu %s';
|
||||||
$lang['img_title'] = 'Titel';
|
$lang['img_title'] = 'Titel';
|
||||||
$lang['img_caption'] = 'Bildunterschrift';
|
$lang['img_caption'] = 'Bildunterschrift';
|
||||||
$lang['img_date'] = 'Datum';
|
$lang['img_date'] = 'Datum';
|
||||||
|
@ -264,7 +264,7 @@ $lang['img_camera'] = 'Kamera';
|
||||||
$lang['img_keywords'] = 'Schlagwörter';
|
$lang['img_keywords'] = 'Schlagwörter';
|
||||||
$lang['img_width'] = 'Breite';
|
$lang['img_width'] = 'Breite';
|
||||||
$lang['img_height'] = 'Höhe';
|
$lang['img_height'] = 'Höhe';
|
||||||
$lang['img_manager'] = 'Im Medien-Manager anzeigen';
|
$lang['btn_mediaManager'] = 'Im Medien-Manager anzeigen';
|
||||||
$lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementliste von %s hinzugefügt';
|
$lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementliste von %s hinzugefügt';
|
||||||
$lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementliste von %s';
|
$lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementliste von %s';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'In deinem Account ist keine E-Mail-Adresse hinterlegt. Dadurch kann die Seite nicht abonniert werden';
|
$lang['subscr_subscribe_noaddress'] = 'In deinem Account ist keine E-Mail-Adresse hinterlegt. Dadurch kann die Seite nicht abonniert werden';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Zugang verweigert ======
|
====== Zugang verweigert ======
|
||||||
|
|
||||||
Sie haben nicht die erforderliche Berechtigung, um diese Aktion durchzuführen. Eventuell sind Sie nicht am Wiki angemeldet?
|
Sie haben nicht die erforderliche Berechtigung, um diese Aktion durchzuführen.
|
||||||
|
|
||||||
|
|
23
sources/inc/lang/de/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/de/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* German initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Milian Wolff (mail@milianw.de). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['de'] = {
|
||||||
|
closeText: 'Schließen',
|
||||||
|
prevText: '<Zurück',
|
||||||
|
nextText: 'Vor>',
|
||||||
|
currentText: 'Heute',
|
||||||
|
monthNames: ['Januar','Februar','März','April','Mai','Juni',
|
||||||
|
'Juli','August','September','Oktober','November','Dezember'],
|
||||||
|
monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
|
||||||
|
'Jul','Aug','Sep','Okt','Nov','Dez'],
|
||||||
|
dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
|
||||||
|
dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
|
||||||
|
dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
|
||||||
|
weekHeader: 'KW',
|
||||||
|
dateFormat: 'dd.mm.yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['de']);
|
||||||
|
});
|
|
@ -23,6 +23,8 @@
|
||||||
* @author Pierre Corell <info@joomla-praxis.de>
|
* @author Pierre Corell <info@joomla-praxis.de>
|
||||||
* @author Mateng Schimmerlos <mateng@firemail.de>
|
* @author Mateng Schimmerlos <mateng@firemail.de>
|
||||||
* @author Benedikt Fey <spam@lifeisgoooood.de>
|
* @author Benedikt Fey <spam@lifeisgoooood.de>
|
||||||
|
* @author Joerg <scooter22@gmx.de>
|
||||||
|
* @author Simon <st103267@stud.uni-stuttgart.de>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'ltr';
|
$lang['direction'] = 'ltr';
|
||||||
|
@ -67,6 +69,8 @@ $lang['btn_register'] = 'Registrieren';
|
||||||
$lang['btn_apply'] = 'Übernehmen';
|
$lang['btn_apply'] = 'Übernehmen';
|
||||||
$lang['btn_media'] = 'Medien-Manager';
|
$lang['btn_media'] = 'Medien-Manager';
|
||||||
$lang['btn_deleteuser'] = 'Benutzerprofil löschen';
|
$lang['btn_deleteuser'] = 'Benutzerprofil löschen';
|
||||||
|
$lang['btn_img_backto'] = 'Zurück zu %s';
|
||||||
|
$lang['btn_mediaManager'] = 'Im Medien-Manager anzeigen';
|
||||||
$lang['loggedinas'] = 'Angemeldet als';
|
$lang['loggedinas'] = 'Angemeldet als';
|
||||||
$lang['user'] = 'Benutzername';
|
$lang['user'] = 'Benutzername';
|
||||||
$lang['pass'] = 'Passwort';
|
$lang['pass'] = 'Passwort';
|
||||||
|
@ -91,6 +95,7 @@ $lang['regbadmail'] = 'Die angegebene E-Mail-Adresse scheint ungülti
|
||||||
$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
|
$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
|
||||||
$lang['regpwmail'] = 'Ihr DokuWiki-Passwort';
|
$lang['regpwmail'] = 'Ihr DokuWiki-Passwort';
|
||||||
$lang['reghere'] = 'Sie haben noch keinen Zugang? Hier registrieren';
|
$lang['reghere'] = 'Sie haben noch keinen Zugang? Hier registrieren';
|
||||||
|
$lang['notloggedin'] = 'Haben Sie vergessen sich einzuloggen?';
|
||||||
$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
|
$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
|
||||||
$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
|
$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
|
||||||
$lang['profnoempty'] = 'Es muss ein Name und eine E-Mail-Adresse angegeben werden.';
|
$lang['profnoempty'] = 'Es muss ein Name und eine E-Mail-Adresse angegeben werden.';
|
||||||
|
@ -252,7 +257,6 @@ $lang['admin_register'] = 'Neuen Benutzer anmelden';
|
||||||
$lang['metaedit'] = 'Metadaten bearbeiten';
|
$lang['metaedit'] = 'Metadaten bearbeiten';
|
||||||
$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
|
$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
|
||||||
$lang['metasaveok'] = 'Metadaten gesichert';
|
$lang['metasaveok'] = 'Metadaten gesichert';
|
||||||
$lang['img_backto'] = 'Zurück zu';
|
|
||||||
$lang['img_title'] = 'Titel';
|
$lang['img_title'] = 'Titel';
|
||||||
$lang['img_caption'] = 'Bildunterschrift';
|
$lang['img_caption'] = 'Bildunterschrift';
|
||||||
$lang['img_date'] = 'Datum';
|
$lang['img_date'] = 'Datum';
|
||||||
|
@ -265,7 +269,6 @@ $lang['img_camera'] = 'Kamera';
|
||||||
$lang['img_keywords'] = 'Schlagwörter';
|
$lang['img_keywords'] = 'Schlagwörter';
|
||||||
$lang['img_width'] = 'Breite';
|
$lang['img_width'] = 'Breite';
|
||||||
$lang['img_height'] = 'Höhe';
|
$lang['img_height'] = 'Höhe';
|
||||||
$lang['img_manager'] = 'Im Medien-Manager anzeigen';
|
|
||||||
$lang['subscr_subscribe_success'] = '%s hat nun Änderungen der Seite %s abonniert';
|
$lang['subscr_subscribe_success'] = '%s hat nun Änderungen der Seite %s abonniert';
|
||||||
$lang['subscr_subscribe_error'] = '%s kann die Änderungen der Seite %s nicht abonnieren';
|
$lang['subscr_subscribe_error'] = '%s kann die Änderungen der Seite %s nicht abonnieren';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'Weil Ihre E-Mail-Adresse fehlt, können Sie das Thema nicht abonnieren';
|
$lang['subscr_subscribe_noaddress'] = 'Weil Ihre E-Mail-Adresse fehlt, können Sie das Thema nicht abonnieren';
|
||||||
|
@ -345,3 +348,4 @@ $lang['media_restore'] = 'Diese Version wiederherstellen';
|
||||||
$lang['currentns'] = 'Aktueller Namensraum';
|
$lang['currentns'] = 'Aktueller Namensraum';
|
||||||
$lang['searchresult'] = 'Suchergebnisse';
|
$lang['searchresult'] = 'Suchergebnisse';
|
||||||
$lang['plainhtml'] = 'HTML Klartext';
|
$lang['plainhtml'] = 'HTML Klartext';
|
||||||
|
$lang['wikimarkup'] = 'Wiki Markup';
|
||||||
|
|
|
@ -2,4 +2,3 @@
|
||||||
|
|
||||||
Συγγνώμη, αλλά δεν έχετε επαρκή δικαιώματα για την συγκεκριμένη ενέργεια.
|
Συγγνώμη, αλλά δεν έχετε επαρκή δικαιώματα για την συγκεκριμένη ενέργεια.
|
||||||
|
|
||||||
Μήπως παραλείψατε να συνδεθείτε;
|
|
||||||
|
|
23
sources/inc/lang/el/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/el/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Greek (el) initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Alex Cicovic (http://www.alexcicovic.com) */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['el'] = {
|
||||||
|
closeText: 'Κλείσιμο',
|
||||||
|
prevText: 'Προηγούμενος',
|
||||||
|
nextText: 'Επόμενος',
|
||||||
|
currentText: 'Τρέχων Μήνας',
|
||||||
|
monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
|
||||||
|
'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
|
||||||
|
monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
|
||||||
|
'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
|
||||||
|
dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
|
||||||
|
dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
|
||||||
|
dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
|
||||||
|
weekHeader: 'Εβδ',
|
||||||
|
dateFormat: 'dd/mm/yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['el']);
|
||||||
|
});
|
|
@ -11,6 +11,7 @@
|
||||||
* @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
|
* @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
|
||||||
* @author Constantinos Xanthopoulos <conx@xanthopoulos.info>
|
* @author Constantinos Xanthopoulos <conx@xanthopoulos.info>
|
||||||
* @author chris taklis <ctaklis@gmail.com>
|
* @author chris taklis <ctaklis@gmail.com>
|
||||||
|
* @author cross <cross1962@gmail.com>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'ltr';
|
$lang['direction'] = 'ltr';
|
||||||
|
@ -240,7 +241,7 @@ $lang['admin_register'] = 'Προσθήκη νέου χρήστη';
|
||||||
$lang['metaedit'] = 'Τροποποίηση metadata';
|
$lang['metaedit'] = 'Τροποποίηση metadata';
|
||||||
$lang['metasaveerr'] = 'Η αποθήκευση των metadata απέτυχε';
|
$lang['metasaveerr'] = 'Η αποθήκευση των metadata απέτυχε';
|
||||||
$lang['metasaveok'] = 'Επιτυχής αποθήκευση metadata';
|
$lang['metasaveok'] = 'Επιτυχής αποθήκευση metadata';
|
||||||
$lang['img_backto'] = 'Επιστροφή σε';
|
$lang['btn_img_backto'] = 'Επιστροφή σε %s';
|
||||||
$lang['img_title'] = 'Τίτλος';
|
$lang['img_title'] = 'Τίτλος';
|
||||||
$lang['img_caption'] = 'Λεζάντα';
|
$lang['img_caption'] = 'Λεζάντα';
|
||||||
$lang['img_date'] = 'Ημερομηνία';
|
$lang['img_date'] = 'Ημερομηνία';
|
||||||
|
@ -253,7 +254,7 @@ $lang['img_camera'] = 'Camera';
|
||||||
$lang['img_keywords'] = 'Λέξεις-κλειδιά';
|
$lang['img_keywords'] = 'Λέξεις-κλειδιά';
|
||||||
$lang['img_width'] = 'Πλάτος';
|
$lang['img_width'] = 'Πλάτος';
|
||||||
$lang['img_height'] = 'Ύψος';
|
$lang['img_height'] = 'Ύψος';
|
||||||
$lang['img_manager'] = 'Εμφάνιση στον διαχειριστή πολυμέσων';
|
$lang['btn_mediaManager'] = 'Εμφάνιση στον διαχειριστή πολυμέσων';
|
||||||
$lang['subscr_subscribe_success'] = 'Ο/η %s προστέθηκε στην λίστα ειδοποιήσεων για το %s';
|
$lang['subscr_subscribe_success'] = 'Ο/η %s προστέθηκε στην λίστα ειδοποιήσεων για το %s';
|
||||||
$lang['subscr_subscribe_error'] = 'Σφάλμα κατά την προσθήκη του/της %s στην λίστα ειδοποιήσεων για το %s';
|
$lang['subscr_subscribe_error'] = 'Σφάλμα κατά την προσθήκη του/της %s στην λίστα ειδοποιήσεων για το %s';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'Δεν υπάρχει διεύθυνση ταχυδρομείου συσχετισμένη με το όνομα χρήστη σας. Κατά συνέπεια δεν μπορείτε να προστεθείτε στην λίστα ειδοποιήσεων';
|
$lang['subscr_subscribe_noaddress'] = 'Δεν υπάρχει διεύθυνση ταχυδρομείου συσχετισμένη με το όνομα χρήστη σας. Κατά συνέπεια δεν μπορείτε να προστεθείτε στην λίστα ειδοποιήσεων';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Permission Denied ======
|
====== Permission Denied ======
|
||||||
|
|
||||||
Sorry, you don't have enough rights to continue. Perhaps you forgot to login?
|
Sorry, you don't have enough rights to continue.
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,8 @@ $lang['btn_register'] = 'Register';
|
||||||
$lang['btn_apply'] = 'Apply';
|
$lang['btn_apply'] = 'Apply';
|
||||||
$lang['btn_media'] = 'Media Manager';
|
$lang['btn_media'] = 'Media Manager';
|
||||||
$lang['btn_deleteuser'] = 'Remove My Account';
|
$lang['btn_deleteuser'] = 'Remove My Account';
|
||||||
|
$lang['btn_img_backto'] = 'Back to %s';
|
||||||
|
$lang['btn_mediaManager'] = 'View in media manager';
|
||||||
|
|
||||||
$lang['loggedinas'] = 'Logged in as';
|
$lang['loggedinas'] = 'Logged in as';
|
||||||
$lang['user'] = 'Username';
|
$lang['user'] = 'Username';
|
||||||
|
@ -191,6 +193,11 @@ $lang['difflink'] = 'Link to this comparison view';
|
||||||
$lang['diff_type'] = 'View differences:';
|
$lang['diff_type'] = 'View differences:';
|
||||||
$lang['diff_inline'] = 'Inline';
|
$lang['diff_inline'] = 'Inline';
|
||||||
$lang['diff_side'] = 'Side by Side';
|
$lang['diff_side'] = 'Side by Side';
|
||||||
|
$lang['diffprevrev'] = 'Previous revision';
|
||||||
|
$lang['diffnextrev'] = 'Next revision';
|
||||||
|
$lang['difflastrev'] = 'Last revision';
|
||||||
|
$lang['diffbothprevrev'] = 'Both sides previous revision';
|
||||||
|
$lang['diffbothnextrev'] = 'Both sides next revision';
|
||||||
$lang['line'] = 'Line';
|
$lang['line'] = 'Line';
|
||||||
$lang['breadcrumb'] = 'Trace';
|
$lang['breadcrumb'] = 'Trace';
|
||||||
$lang['youarehere'] = 'You are here';
|
$lang['youarehere'] = 'You are here';
|
||||||
|
@ -224,7 +231,7 @@ $lang['both_changes'] = 'Both pages and media files';
|
||||||
$lang['qb_bold'] = 'Bold Text';
|
$lang['qb_bold'] = 'Bold Text';
|
||||||
$lang['qb_italic'] = 'Italic Text';
|
$lang['qb_italic'] = 'Italic Text';
|
||||||
$lang['qb_underl'] = 'Underlined Text';
|
$lang['qb_underl'] = 'Underlined Text';
|
||||||
$lang['qb_code'] = 'Code Text';
|
$lang['qb_code'] = 'Monospaced Text';
|
||||||
$lang['qb_strike'] = 'Strike-through Text';
|
$lang['qb_strike'] = 'Strike-through Text';
|
||||||
$lang['qb_h1'] = 'Level 1 Headline';
|
$lang['qb_h1'] = 'Level 1 Headline';
|
||||||
$lang['qb_h2'] = 'Level 2 Headline';
|
$lang['qb_h2'] = 'Level 2 Headline';
|
||||||
|
@ -253,7 +260,6 @@ $lang['admin_register'] = 'Add new user';
|
||||||
$lang['metaedit'] = 'Edit Metadata';
|
$lang['metaedit'] = 'Edit Metadata';
|
||||||
$lang['metasaveerr'] = 'Writing metadata failed';
|
$lang['metasaveerr'] = 'Writing metadata failed';
|
||||||
$lang['metasaveok'] = 'Metadata saved';
|
$lang['metasaveok'] = 'Metadata saved';
|
||||||
$lang['img_backto'] = 'Back to';
|
|
||||||
$lang['img_title'] = 'Title';
|
$lang['img_title'] = 'Title';
|
||||||
$lang['img_caption'] = 'Caption';
|
$lang['img_caption'] = 'Caption';
|
||||||
$lang['img_date'] = 'Date';
|
$lang['img_date'] = 'Date';
|
||||||
|
@ -266,7 +272,6 @@ $lang['img_camera'] = 'Camera';
|
||||||
$lang['img_keywords'] = 'Keywords';
|
$lang['img_keywords'] = 'Keywords';
|
||||||
$lang['img_width'] = 'Width';
|
$lang['img_width'] = 'Width';
|
||||||
$lang['img_height'] = 'Height';
|
$lang['img_height'] = 'Height';
|
||||||
$lang['img_manager'] = 'View in media manager';
|
|
||||||
|
|
||||||
$lang['subscr_subscribe_success'] = 'Added %s to subscription list for %s';
|
$lang['subscr_subscribe_success'] = 'Added %s to subscription list for %s';
|
||||||
$lang['subscr_subscribe_error'] = 'Error adding %s to subscription list for %s';
|
$lang['subscr_subscribe_error'] = 'Error adding %s to subscription list for %s';
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== Administrado ======
|
====== Administrado ======
|
||||||
|
|
||||||
Sube vi povas trovi liston de administraj taskoj disponeblaj en DokuWiki.
|
Sube vi trovas liston de administraj taskoj haveblaj en DokuWiki.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
===== Eksteraj kromaĵoj =====
|
===== Aldonaj kromaĵoj =====
|
|
@ -1,4 +1,4 @@
|
||||||
====== Aliro malpermesita ======
|
====== Aliro malpermesita ======
|
||||||
|
|
||||||
Vi ne havas sufiĉajn rajtojn rigardi ĉi tiujn paĝojn. Eble vi forgesis identiĝi.
|
Vi ne havas sufiĉajn rajtojn daŭrigi.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
====== Diferencoj ======
|
====== Diferencoj ======
|
||||||
|
|
||||||
Ĉi tie vi povas vidi diferencojn inter la aktuala versio kaj la elektita revizio de la paĝo.
|
Tio montras diferencojn inter du versioj de la paĝo.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
====== Skiza dosiero troviĝis ======
|
====== Skiza dosiero troviĝis ======
|
||||||
|
|
||||||
Via lasta sekcio de redakto en tiu ĉi paĝo ne korekte kompletiĝis. DokuWiki aŭtomate konservis skizon dum vi laboris, kiun vi nun povas uzi por daŭrigi vian redaktadon. Sube vi povas vidi la datumaron, kiu konserviĝis el via lasta sekcio.
|
Via lasta redaktosesio en tiu ĉi paĝo ne ĝuste kompletiĝis. DokuWiki aŭtomate konservis skizon dum vi laboris, kiun vi nun povas uzi por daŭrigi vian redaktadon. Sube vi povas vidi la datumaron, kiu konserviĝis el via lasta sesio.
|
||||||
|
|
||||||
Bonvolu decidi ĉu vi volas //restarigi// vian perditan redakton, //forigi// la aŭtomate konservitan skizon aŭ //rezigni// pri la redakta procezo.
|
Bonvolu decidi ĉu vi volas //restarigi// vian perditan redakton, //forigi// la aŭtomate konservitan skizon aŭ //rezigni// pri la redakta procezo.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Redaktu paĝon kaj poste premu butonon titolitan '"Konservi'". Bonvolu tralegi la [[wiki:syntax|vikian sintakson]] por kompreni kiel vi povas krei paĝojn. Bonvolu redakti nur se vi planas **plibonigi** la enhavon de la paĝo. Se vi volas nur testi ion, bonvolu uzi specialan paĝon: [[wiki:playground|ludejo]].
|
Redaktu paĝon kaj poste premu butonon titolitan '"Konservi'". Bonvolu tralegi la [[wiki:syntax|vikian sintakson]] pri la formatigo. Bonvolu redakti **nur**, se vi povas **plibonigi** la enhavon de la paĝo. Se vi volas nur testi ion, bonvolu uzi specialan paĝon: [[playground:playground|sablokesto]].
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
**Vi laboras kun malnova revizio de la dokumento!** Se vi konservos ĝin, kreiĝos nova kuranta versio kun la sama enhavo.
|
**Vi laboras kun malnova revizio de la dokumento!** Se vi konservos ĝin, kreiĝos nova kuranta versio kun tiu enhavo.
|
||||||
----
|
----
|
||||||
|
|
23
sources/inc/lang/eo/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/eo/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Esperanto initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Olivier M. (olivierweb@ifrance.com). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['eo'] = {
|
||||||
|
closeText: 'Fermi',
|
||||||
|
prevText: '<Anta',
|
||||||
|
nextText: 'Sekv>',
|
||||||
|
currentText: 'Nuna',
|
||||||
|
monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
|
||||||
|
'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
|
||||||
|
monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
|
||||||
|
'Jul','Aŭg','Sep','Okt','Nov','Dec'],
|
||||||
|
dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
|
||||||
|
dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
|
||||||
|
dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
|
||||||
|
weekHeader: 'Sb',
|
||||||
|
dateFormat: 'dd/mm/yy',
|
||||||
|
firstDay: 0,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['eo']);
|
||||||
|
});
|
|
@ -37,13 +37,13 @@ $lang['btn_secedit'] = 'Redakti';
|
||||||
$lang['btn_login'] = 'Ensaluti';
|
$lang['btn_login'] = 'Ensaluti';
|
||||||
$lang['btn_logout'] = 'Elsaluti';
|
$lang['btn_logout'] = 'Elsaluti';
|
||||||
$lang['btn_admin'] = 'Administri';
|
$lang['btn_admin'] = 'Administri';
|
||||||
$lang['btn_update'] = 'Ĝisdatigi';
|
$lang['btn_update'] = 'Aktualigi';
|
||||||
$lang['btn_delete'] = 'Forigi';
|
$lang['btn_delete'] = 'Forigi';
|
||||||
$lang['btn_back'] = 'Retroiri';
|
$lang['btn_back'] = 'Retroiri';
|
||||||
$lang['btn_backlink'] = 'Retroligoj';
|
$lang['btn_backlink'] = 'Retroligoj';
|
||||||
$lang['btn_backtomedia'] = 'Retroiri al elekto de dosiero';
|
$lang['btn_backtomedia'] = 'Retroiri al elekto de dosiero';
|
||||||
$lang['btn_subscribe'] = 'Aliĝi al paĝaj modifoj';
|
$lang['btn_subscribe'] = 'Aliĝi al paĝaj modifoj';
|
||||||
$lang['btn_profile'] = 'Ĝisdatigi profilon';
|
$lang['btn_profile'] = 'Aktualigi profilon';
|
||||||
$lang['btn_reset'] = 'Rekomenci';
|
$lang['btn_reset'] = 'Rekomenci';
|
||||||
$lang['btn_resendpwd'] = 'Sendi novan pasvorton';
|
$lang['btn_resendpwd'] = 'Sendi novan pasvorton';
|
||||||
$lang['btn_draft'] = 'Redakti skizon';
|
$lang['btn_draft'] = 'Redakti skizon';
|
||||||
|
@ -53,7 +53,9 @@ $lang['btn_revert'] = 'Restarigi';
|
||||||
$lang['btn_register'] = 'Registriĝi';
|
$lang['btn_register'] = 'Registriĝi';
|
||||||
$lang['btn_apply'] = 'Apliki';
|
$lang['btn_apply'] = 'Apliki';
|
||||||
$lang['btn_media'] = 'Medio-administrilo';
|
$lang['btn_media'] = 'Medio-administrilo';
|
||||||
$lang['btn_deleteuser'] = 'Forigi mian aliĝon';
|
$lang['btn_deleteuser'] = 'Forigi mian konton';
|
||||||
|
$lang['btn_img_backto'] = 'Iri reen al %s';
|
||||||
|
$lang['btn_mediaManager'] = 'Rigardi en aŭdvidaĵ-administrilo';
|
||||||
$lang['loggedinas'] = 'Ensalutinta kiel';
|
$lang['loggedinas'] = 'Ensalutinta kiel';
|
||||||
$lang['user'] = 'Uzant-nomo';
|
$lang['user'] = 'Uzant-nomo';
|
||||||
$lang['pass'] = 'Pasvorto';
|
$lang['pass'] = 'Pasvorto';
|
||||||
|
@ -81,7 +83,7 @@ $lang['reghere'] = 'Se vi ne havas konton, vi povas akiri ĝin';
|
||||||
$lang['profna'] = 'Tiu ĉi vikio ne ebligas modifon en la profiloj.';
|
$lang['profna'] = 'Tiu ĉi vikio ne ebligas modifon en la profiloj.';
|
||||||
$lang['profnochange'] = 'Neniu ŝanĝo, nenio farinda.';
|
$lang['profnochange'] = 'Neniu ŝanĝo, nenio farinda.';
|
||||||
$lang['profnoempty'] = 'Malplena nomo aŭ retadreso ne estas permesata.';
|
$lang['profnoempty'] = 'Malplena nomo aŭ retadreso ne estas permesata.';
|
||||||
$lang['profchanged'] = 'La profilo de la uzanto sukcese ĝisdatiĝis.';
|
$lang['profchanged'] = 'La profilo de la uzanto sukcese aktualiĝis.';
|
||||||
$lang['profnodelete'] = 'Tiu ĉi vikio ne subtenas forigo de uzantoj';
|
$lang['profnodelete'] = 'Tiu ĉi vikio ne subtenas forigo de uzantoj';
|
||||||
$lang['profdeleteuser'] = 'Forigi aliĝon';
|
$lang['profdeleteuser'] = 'Forigi aliĝon';
|
||||||
$lang['profdeleted'] = 'Via uzant-aliĝo estis forigata de tiu ĉi vikio';
|
$lang['profdeleted'] = 'Via uzant-aliĝo estis forigata de tiu ĉi vikio';
|
||||||
|
@ -104,7 +106,7 @@ $lang['txt_filename'] = 'Alŝuti kiel (laŭvole)';
|
||||||
$lang['txt_overwrt'] = 'Anstataŭigi ekzistantan dosieron';
|
$lang['txt_overwrt'] = 'Anstataŭigi ekzistantan dosieron';
|
||||||
$lang['maxuploadsize'] = 'Alŝuto maks. %s po dosiero.';
|
$lang['maxuploadsize'] = 'Alŝuto maks. %s po dosiero.';
|
||||||
$lang['lockedby'] = 'Nune ŝlosita de';
|
$lang['lockedby'] = 'Nune ŝlosita de';
|
||||||
$lang['lockexpire'] = 'Ŝlosado ĉesos en';
|
$lang['lockexpire'] = 'Ŝlosado ĉesos je';
|
||||||
$lang['js']['willexpire'] = 'Vi povos redakti ĉi tiun paĝon post unu minuto.\nSe vi volas nuligi tempokontrolon de la ŝlosado, premu la butonon "Antaŭrigardi".';
|
$lang['js']['willexpire'] = 'Vi povos redakti ĉi tiun paĝon post unu minuto.\nSe vi volas nuligi tempokontrolon de la ŝlosado, premu la butonon "Antaŭrigardi".';
|
||||||
$lang['js']['notsavedyet'] = 'Ne konservitaj modifoj perdiĝos.
|
$lang['js']['notsavedyet'] = 'Ne konservitaj modifoj perdiĝos.
|
||||||
Ĉu vi certe volas daŭrigi la procezon?';
|
Ĉu vi certe volas daŭrigi la procezon?';
|
||||||
|
@ -184,6 +186,11 @@ $lang['difflink'] = 'Ligilo al kompara rigardo';
|
||||||
$lang['diff_type'] = 'Rigardi malsamojn:';
|
$lang['diff_type'] = 'Rigardi malsamojn:';
|
||||||
$lang['diff_inline'] = 'Samlinie';
|
$lang['diff_inline'] = 'Samlinie';
|
||||||
$lang['diff_side'] = 'Apude';
|
$lang['diff_side'] = 'Apude';
|
||||||
|
$lang['diffprevrev'] = 'Antaŭa revizio';
|
||||||
|
$lang['diffnextrev'] = 'Sekva revizio';
|
||||||
|
$lang['difflastrev'] = 'Lasta revizio';
|
||||||
|
$lang['diffbothprevrev'] = 'Sur ambaŭ flankoj antaŭa revizio';
|
||||||
|
$lang['diffbothnextrev'] = 'Sur ambaŭ flankoj sekva revizio';
|
||||||
$lang['line'] = 'Linio';
|
$lang['line'] = 'Linio';
|
||||||
$lang['breadcrumb'] = 'Paŝoj';
|
$lang['breadcrumb'] = 'Paŝoj';
|
||||||
$lang['youarehere'] = 'Vi estas ĉi tie';
|
$lang['youarehere'] = 'Vi estas ĉi tie';
|
||||||
|
@ -240,7 +247,6 @@ $lang['admin_register'] = 'Aldoni novan uzanton';
|
||||||
$lang['metaedit'] = 'Redakti metadatumaron';
|
$lang['metaedit'] = 'Redakti metadatumaron';
|
||||||
$lang['metasaveerr'] = 'La konservo de metadatumaro malsukcesis';
|
$lang['metasaveerr'] = 'La konservo de metadatumaro malsukcesis';
|
||||||
$lang['metasaveok'] = 'La metadatumaro konserviĝis';
|
$lang['metasaveok'] = 'La metadatumaro konserviĝis';
|
||||||
$lang['img_backto'] = 'Iri reen al';
|
|
||||||
$lang['img_title'] = 'Titolo';
|
$lang['img_title'] = 'Titolo';
|
||||||
$lang['img_caption'] = 'Priskribo';
|
$lang['img_caption'] = 'Priskribo';
|
||||||
$lang['img_date'] = 'Dato';
|
$lang['img_date'] = 'Dato';
|
||||||
|
@ -253,7 +259,6 @@ $lang['img_camera'] = 'Kamerao';
|
||||||
$lang['img_keywords'] = 'Ŝlosilvortoj';
|
$lang['img_keywords'] = 'Ŝlosilvortoj';
|
||||||
$lang['img_width'] = 'Larĝeco';
|
$lang['img_width'] = 'Larĝeco';
|
||||||
$lang['img_height'] = 'Alteco';
|
$lang['img_height'] = 'Alteco';
|
||||||
$lang['img_manager'] = 'Rigardi en aŭdvidaĵ-administrilo';
|
|
||||||
$lang['subscr_subscribe_success'] = 'Aldonis %s al la abonlisto por %s';
|
$lang['subscr_subscribe_success'] = 'Aldonis %s al la abonlisto por %s';
|
||||||
$lang['subscr_subscribe_error'] = 'Eraro dum aldono de %s al la abonlisto por %s';
|
$lang['subscr_subscribe_error'] = 'Eraro dum aldono de %s al la abonlisto por %s';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'Ne estas adreso ligita al via ensaluto, ne eblas aldoni vin al la abonlisto';
|
$lang['subscr_subscribe_noaddress'] = 'Ne estas adreso ligita al via ensaluto, ne eblas aldoni vin al la abonlisto';
|
||||||
|
@ -293,6 +298,7 @@ $lang['i_policy'] = 'Komenca ACL-a agordo';
|
||||||
$lang['i_pol0'] = 'Malferma Vikio (legi, skribi, alŝuti povas ĉiuj)';
|
$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_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_pol2'] = 'Ferma Vikio (legi, skribi, alŝuti nur povas registritaj uzantoj)';
|
||||||
|
$lang['i_allowreg'] = 'Permesi al uzantoj registri sin mem';
|
||||||
$lang['i_retry'] = 'Reprovi';
|
$lang['i_retry'] = 'Reprovi';
|
||||||
$lang['i_license'] = 'Bonvolu elekti la permesilon, sub kiun vi volas meti vian enhavon:';
|
$lang['i_license'] = 'Bonvolu elekti la permesilon, sub kiun vi volas meti vian enhavon:';
|
||||||
$lang['i_license_none'] = 'Ne montri licencinformojn';
|
$lang['i_license_none'] = 'Ne montri licencinformojn';
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
====== Permiso Denegado ======
|
====== Permiso Denegado ======
|
||||||
|
|
||||||
Lo siento, no tienes suficientes permisos para continuar. ¿Quizás has olvidado identificarte?
|
Lo siento, no tienes suficientes permisos para continuar.
|
||||||
|
|
||||||
|
|
23
sources/inc/lang/es/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/es/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
|
||||||
|
/* Traducido por Vester (xvester@gmail.com). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['es'] = {
|
||||||
|
closeText: 'Cerrar',
|
||||||
|
prevText: '<Ant',
|
||||||
|
nextText: 'Sig>',
|
||||||
|
currentText: 'Hoy',
|
||||||
|
monthNames: ['enero','febrero','marzo','abril','mayo','junio',
|
||||||
|
'julio','agosto','septiembre','octubre','noviembre','diciembre'],
|
||||||
|
monthNamesShort: ['ene','feb','mar','abr','may','jun',
|
||||||
|
'jul','ogo','sep','oct','nov','dic'],
|
||||||
|
dayNames: ['domingo','lunes','martes','miércoles','jueves','viernes','sábado'],
|
||||||
|
dayNamesShort: ['dom','lun','mar','mié','juv','vie','sáb'],
|
||||||
|
dayNamesMin: ['D','L','M','X','J','V','S'],
|
||||||
|
weekHeader: 'Sm',
|
||||||
|
dateFormat: 'dd/mm/yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['es']);
|
||||||
|
});
|
|
@ -31,6 +31,9 @@
|
||||||
* @author r0sk <r0sk10@gmail.com>
|
* @author r0sk <r0sk10@gmail.com>
|
||||||
* @author monica <may.dorado@gmail.com>
|
* @author monica <may.dorado@gmail.com>
|
||||||
* @author Antonio Bueno <atnbueno@gmail.com>
|
* @author Antonio Bueno <atnbueno@gmail.com>
|
||||||
|
* @author Juan De La Cruz <juann.dlc@gmail.com>
|
||||||
|
* @author Fernando <fdiezala@gmail.com>
|
||||||
|
* @author Eloy <ej.perezgomez@gmail.com>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'ltr';
|
$lang['direction'] = 'ltr';
|
||||||
|
@ -75,6 +78,8 @@ $lang['btn_register'] = 'Registrarse';
|
||||||
$lang['btn_apply'] = 'Aplicar';
|
$lang['btn_apply'] = 'Aplicar';
|
||||||
$lang['btn_media'] = 'Gestor de ficheros';
|
$lang['btn_media'] = 'Gestor de ficheros';
|
||||||
$lang['btn_deleteuser'] = 'Elimina Mi Cuenta';
|
$lang['btn_deleteuser'] = 'Elimina Mi Cuenta';
|
||||||
|
$lang['btn_img_backto'] = 'Volver a %s';
|
||||||
|
$lang['btn_mediaManager'] = 'Ver en el Administrador de medios';
|
||||||
$lang['loggedinas'] = 'Conectado como ';
|
$lang['loggedinas'] = 'Conectado como ';
|
||||||
$lang['user'] = 'Usuario';
|
$lang['user'] = 'Usuario';
|
||||||
$lang['pass'] = 'Contraseña';
|
$lang['pass'] = 'Contraseña';
|
||||||
|
@ -206,6 +211,11 @@ $lang['difflink'] = 'Enlace a la vista de comparación';
|
||||||
$lang['diff_type'] = 'Ver diferencias';
|
$lang['diff_type'] = 'Ver diferencias';
|
||||||
$lang['diff_inline'] = 'En línea';
|
$lang['diff_inline'] = 'En línea';
|
||||||
$lang['diff_side'] = 'Lado a lado';
|
$lang['diff_side'] = 'Lado a lado';
|
||||||
|
$lang['diffprevrev'] = 'Revisión previa';
|
||||||
|
$lang['diffnextrev'] = 'Próxima revisión';
|
||||||
|
$lang['difflastrev'] = 'Última revisión';
|
||||||
|
$lang['diffbothprevrev'] = 'Ambos lados, revisión anterior';
|
||||||
|
$lang['diffbothnextrev'] = 'Ambos lados, revisión siguiente';
|
||||||
$lang['line'] = 'Línea';
|
$lang['line'] = 'Línea';
|
||||||
$lang['breadcrumb'] = 'Traza';
|
$lang['breadcrumb'] = 'Traza';
|
||||||
$lang['youarehere'] = 'Estás aquí';
|
$lang['youarehere'] = 'Estás aquí';
|
||||||
|
@ -262,7 +272,6 @@ $lang['admin_register'] = 'Añadir nuevo usuario';
|
||||||
$lang['metaedit'] = 'Editar metadatos';
|
$lang['metaedit'] = 'Editar metadatos';
|
||||||
$lang['metasaveerr'] = 'La escritura de los metadatos ha fallado';
|
$lang['metasaveerr'] = 'La escritura de los metadatos ha fallado';
|
||||||
$lang['metasaveok'] = 'Los metadatos han sido guardados';
|
$lang['metasaveok'] = 'Los metadatos han sido guardados';
|
||||||
$lang['img_backto'] = 'Volver a';
|
|
||||||
$lang['img_title'] = 'Título';
|
$lang['img_title'] = 'Título';
|
||||||
$lang['img_caption'] = 'Epígrafe';
|
$lang['img_caption'] = 'Epígrafe';
|
||||||
$lang['img_date'] = 'Fecha';
|
$lang['img_date'] = 'Fecha';
|
||||||
|
@ -275,7 +284,6 @@ $lang['img_camera'] = 'Cámara';
|
||||||
$lang['img_keywords'] = 'Palabras claves';
|
$lang['img_keywords'] = 'Palabras claves';
|
||||||
$lang['img_width'] = 'Ancho';
|
$lang['img_width'] = 'Ancho';
|
||||||
$lang['img_height'] = 'Alto';
|
$lang['img_height'] = 'Alto';
|
||||||
$lang['img_manager'] = 'Ver en el Administrador de medios';
|
|
||||||
$lang['subscr_subscribe_success'] = 'Se agregó %s a las listas de suscripción para %s';
|
$lang['subscr_subscribe_success'] = 'Se agregó %s a las listas de suscripción para %s';
|
||||||
$lang['subscr_subscribe_error'] = 'Error al agregar %s a las listas de suscripción para %s';
|
$lang['subscr_subscribe_error'] = 'Error al agregar %s a las listas de suscripción para %s';
|
||||||
$lang['subscr_subscribe_noaddress'] = 'No hay dirección asociada con tu registro, no se puede agregarte a la lista de suscripción';
|
$lang['subscr_subscribe_noaddress'] = 'No hay dirección asociada con tu registro, no se puede agregarte a la lista de suscripción';
|
||||||
|
@ -321,13 +329,13 @@ $lang['i_license_none'] = 'No mostrar ninguna información sobre licencia
|
||||||
$lang['i_pop_field'] = 'Por favor, ayúdanos a mejorar la experiencia de DokuWiki:';
|
$lang['i_pop_field'] = 'Por favor, ayúdanos a mejorar la experiencia de DokuWiki:';
|
||||||
$lang['i_pop_label'] = 'Una vez al mes, enviar información anónima de uso de datos a los desarrolladores de DokuWiki';
|
$lang['i_pop_label'] = 'Una vez al mes, enviar información anónima de uso de datos a los desarrolladores de DokuWiki';
|
||||||
$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['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['years'] = 'hace %d años';
|
||||||
$lang['months'] = '%d meses atrás';
|
$lang['months'] = 'hace %d meses';
|
||||||
$lang['weeks'] = '%d semanas atrás';
|
$lang['weeks'] = 'hace %d semanas';
|
||||||
$lang['days'] = '%d días atrás';
|
$lang['days'] = 'hace %d días';
|
||||||
$lang['hours'] = '%d horas atrás';
|
$lang['hours'] = 'hace %d horas';
|
||||||
$lang['minutes'] = '%d minutos atrás';
|
$lang['minutes'] = 'hace %d minutos';
|
||||||
$lang['seconds'] = '%d segundos atrás';
|
$lang['seconds'] = 'hace %d segundos';
|
||||||
$lang['wordblock'] = 'Sus cambios no se han guardado porque contienen textos bloqueados (spam).';
|
$lang['wordblock'] = 'Sus cambios no se han guardado porque contienen textos bloqueados (spam).';
|
||||||
$lang['media_uploadtab'] = 'Cargar';
|
$lang['media_uploadtab'] = 'Cargar';
|
||||||
$lang['media_searchtab'] = 'Buscar';
|
$lang['media_searchtab'] = 'Buscar';
|
||||||
|
|
1
sources/inc/lang/et/adminplugins.txt
Normal file
1
sources/inc/lang/et/adminplugins.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
===== Täiendavad laiendused =====
|
|
@ -1,3 +1,4 @@
|
||||||
====== Sul pole ligipääsuluba ======
|
====== Sul pole ligipääsuluba ======
|
||||||
|
|
||||||
Kahju küll, aga sinu tublidusest ei piisa, et edasi liikuda, selleks on vastavaid õigusi vaja.
|
Kahju küll, aga sinu tublidusest ei piisa, et edasi liikuda.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
====== Sisukord ======
|
====== Sisukord ======
|
||||||
|
|
||||||
See siin on nimekiri kõigist saadaval olevatest lehtedest järjestatud [[doku>namespaces|alajaotuste]] järgi.
|
Alloleavs on loetletud kõik saada olevaist leheküljed, mis on järjestatud [[doku>namespaces|nimeruumi]]de alusel.
|
||||||
|
|
23
sources/inc/lang/et/jquery.ui.datepicker.js
vendored
Normal file
23
sources/inc/lang/et/jquery.ui.datepicker.js
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* Estonian initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['et'] = {
|
||||||
|
closeText: 'Sulge',
|
||||||
|
prevText: 'Eelnev',
|
||||||
|
nextText: 'Järgnev',
|
||||||
|
currentText: 'Täna',
|
||||||
|
monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
|
||||||
|
'Juuli','August','September','Oktoober','November','Detsember'],
|
||||||
|
monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
|
||||||
|
'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
|
||||||
|
dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
|
||||||
|
dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
|
||||||
|
dayNamesMin: ['P','E','T','K','N','R','L'],
|
||||||
|
weekHeader: 'näd',
|
||||||
|
dateFormat: 'dd.mm.yy',
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['et']);
|
||||||
|
});
|
|
@ -1,13 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Estonian language file
|
|
||||||
*
|
|
||||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||||
|
*
|
||||||
* @author Oliver S6ro <seem.iges@mail.ee>
|
* @author Oliver S6ro <seem.iges@mail.ee>
|
||||||
* @author Aari Juhanson <aari@vmg.vil.ee>
|
* @author Aari Juhanson <aari@vmg.vil.ee>
|
||||||
* @author Kaiko Kaur <kaiko@kultuur.edu.ee>
|
* @author Kaiko Kaur <kaiko@kultuur.edu.ee>
|
||||||
* @author kristian.kankainen@kuu.la
|
* @author kristian.kankainen@kuu.la
|
||||||
* @author Rivo Zängov <eraser@eraser.ee>
|
* @author Rivo Zängov <eraser@eraser.ee>
|
||||||
|
* @author Janar Leas <janarleas@gmail.com>
|
||||||
|
* @author Janar Leas <janar.leas@eesti.ee>
|
||||||
*/
|
*/
|
||||||
$lang['encoding'] = 'utf-8';
|
$lang['encoding'] = 'utf-8';
|
||||||
$lang['direction'] = 'ltr';
|
$lang['direction'] = 'ltr';
|
||||||
|
@ -43,11 +45,15 @@ $lang['btn_backtomedia'] = 'Tagasi faili valikusse';
|
||||||
$lang['btn_subscribe'] = 'Jälgi seda lehte (teated meilile)';
|
$lang['btn_subscribe'] = 'Jälgi seda lehte (teated meilile)';
|
||||||
$lang['btn_profile'] = 'Minu info';
|
$lang['btn_profile'] = 'Minu info';
|
||||||
$lang['btn_reset'] = 'Taasta';
|
$lang['btn_reset'] = 'Taasta';
|
||||||
|
$lang['btn_resendpwd'] = 'Sea uus salasõna';
|
||||||
$lang['btn_draft'] = 'Toimeta mustandit';
|
$lang['btn_draft'] = 'Toimeta mustandit';
|
||||||
$lang['btn_recover'] = 'Taata mustand';
|
$lang['btn_recover'] = 'Taata mustand';
|
||||||
$lang['btn_draftdel'] = 'Kustuta mustand';
|
$lang['btn_draftdel'] = 'Kustuta mustand';
|
||||||
$lang['btn_revert'] = 'Taasta';
|
$lang['btn_revert'] = 'Taasta';
|
||||||
$lang['btn_register'] = 'Registreeri uus kasutaja';
|
$lang['btn_register'] = 'Registreeri uus kasutaja';
|
||||||
|
$lang['btn_apply'] = 'Kinnita';
|
||||||
|
$lang['btn_media'] = 'Meedia haldur';
|
||||||
|
$lang['btn_deleteuser'] = 'Eemalda minu konto';
|
||||||
$lang['loggedinas'] = 'Logis sisse kui';
|
$lang['loggedinas'] = 'Logis sisse kui';
|
||||||
$lang['user'] = 'Kasutaja';
|
$lang['user'] = 'Kasutaja';
|
||||||
$lang['pass'] = 'Parool';
|
$lang['pass'] = 'Parool';
|
||||||
|
@ -59,8 +65,10 @@ $lang['fullname'] = 'Täielik nimi';
|
||||||
$lang['email'] = 'E-post';
|
$lang['email'] = 'E-post';
|
||||||
$lang['profile'] = 'Kasutaja info';
|
$lang['profile'] = 'Kasutaja info';
|
||||||
$lang['badlogin'] = 'Oops, Sinu kasutajanimi või parool oli vale.';
|
$lang['badlogin'] = 'Oops, Sinu kasutajanimi või parool oli vale.';
|
||||||
|
$lang['badpassconfirm'] = 'Väär salasõna';
|
||||||
$lang['minoredit'] = 'Ebaolulised muudatused';
|
$lang['minoredit'] = 'Ebaolulised muudatused';
|
||||||
$lang['draftdate'] = 'Mustand automaatselt salvestatud';
|
$lang['draftdate'] = 'Mustand automaatselt salvestatud';
|
||||||
|
$lang['nosecedit'] = 'Leht on vahepeal muutunud, jaotiste teave osutus aegunuks sestap laeti tervelehekülg.';
|
||||||
$lang['regmissing'] = 'Kõik väljad tuleb ära täita.';
|
$lang['regmissing'] = 'Kõik väljad tuleb ära täita.';
|
||||||
$lang['reguexists'] = 'Tegelikult on sellise nimega kasutaja juba olemas.';
|
$lang['reguexists'] = 'Tegelikult on sellise nimega kasutaja juba olemas.';
|
||||||
$lang['regsuccess'] = 'Kasutaja sai tehtud. Parool saadeti Sulle e-posti aadressil.';
|
$lang['regsuccess'] = 'Kasutaja sai tehtud. Parool saadeti Sulle e-posti aadressil.';
|
||||||
|
@ -76,21 +84,30 @@ $lang['profna'] = 'Viki ei toeta profiili muudatusi';
|
||||||
$lang['profnochange'] = 'Muutused puuduvad.';
|
$lang['profnochange'] = 'Muutused puuduvad.';
|
||||||
$lang['profnoempty'] = 'Tühi nimi ega meiliaadress pole lubatud.';
|
$lang['profnoempty'] = 'Tühi nimi ega meiliaadress pole lubatud.';
|
||||||
$lang['profchanged'] = 'Kasutaja info edukalt muudetud';
|
$lang['profchanged'] = 'Kasutaja info edukalt muudetud';
|
||||||
|
$lang['profnodelete'] = 'See wiki ei toeta kasutajate kustutamist';
|
||||||
|
$lang['profdeleteuser'] = 'Kustuta konto';
|
||||||
|
$lang['profdeleted'] = 'Sinu kasutajakonto on sellest wikist kustutatud';
|
||||||
|
$lang['profconfdelete'] = 'Soovin sellest wikist oma konnto eemaldada. <br/> See tegevus on taastamatu.';
|
||||||
|
$lang['profconfdeletemissing'] = 'Kinnituse valikkast märkimata.';
|
||||||
$lang['pwdforget'] = 'Unustasid parooli? Tee uus';
|
$lang['pwdforget'] = 'Unustasid parooli? Tee uus';
|
||||||
$lang['resendna'] = 'See wiki ei toeta parooli taassaatmist.';
|
$lang['resendna'] = 'See wiki ei toeta parooli taassaatmist.';
|
||||||
|
$lang['resendpwd'] = 'Sea uus salasõna';
|
||||||
$lang['resendpwdmissing'] = 'Khmm... Sa pead täitma kõik väljad.';
|
$lang['resendpwdmissing'] = 'Khmm... Sa pead täitma kõik väljad.';
|
||||||
$lang['resendpwdnouser'] = 'Aga sellist kasutajat ei ole.';
|
$lang['resendpwdnouser'] = 'Aga sellist kasutajat ei ole.';
|
||||||
$lang['resendpwdbadauth'] = 'See autentimiskood ei ole õige. Kontrolli, et kopeerisid terve lingi.';
|
$lang['resendpwdbadauth'] = 'See autentimiskood ei ole õige. Kontrolli, et kopeerisid terve lingi.';
|
||||||
$lang['resendpwdconfirm'] = 'Kinnituslink saadeti meilile.';
|
$lang['resendpwdconfirm'] = 'Kinnituslink saadeti meilile.';
|
||||||
$lang['resendpwdsuccess'] = 'Uus parool saadeti Sinu meilile.';
|
$lang['resendpwdsuccess'] = 'Uus parool saadeti Sinu meilile.';
|
||||||
|
$lang['license'] = 'Kus pole öeldud teisiti, kehtib selle wiki sisule järgmine leping:';
|
||||||
|
$lang['licenseok'] = 'Teadmiseks: Toimetades seda lehte, nõustud avaldama oma sisu järgmise lepingu alusel:';
|
||||||
$lang['searchmedia'] = 'Otsi failinime:';
|
$lang['searchmedia'] = 'Otsi failinime:';
|
||||||
$lang['searchmedia_in'] = 'Otsi %s';
|
$lang['searchmedia_in'] = 'Otsi %s';
|
||||||
$lang['txt_upload'] = 'Vali fail, mida üles laadida';
|
$lang['txt_upload'] = 'Vali fail, mida üles laadida';
|
||||||
$lang['txt_filename'] = 'Siseta oma Wikinimi (soovituslik)';
|
$lang['txt_filename'] = 'Siseta oma Wikinimi (soovituslik)';
|
||||||
$lang['txt_overwrt'] = 'Kirjutan olemasoleva faili üle';
|
$lang['txt_overwrt'] = 'Kirjutan olemasoleva faili üle';
|
||||||
|
$lang['maxuploadsize'] = 'Üleslaadimiseks lubatu enim %s faili kohta.';
|
||||||
$lang['lockedby'] = 'Praegu on selle lukustanud';
|
$lang['lockedby'] = 'Praegu on selle lukustanud';
|
||||||
$lang['lockexpire'] = 'Lukustus aegub';
|
$lang['lockexpire'] = 'Lukustus aegub';
|
||||||
$lang['js']['willexpire'] = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
|
$lang['js']['willexpire'] = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
|
||||||
$lang['js']['notsavedyet'] = 'Sul on seal salvestamata muudatusi, mis kohe kõige kaduva teed lähevad.
|
$lang['js']['notsavedyet'] = 'Sul on seal salvestamata muudatusi, mis kohe kõige kaduva teed lähevad.
|
||||||
Kas Sa ikka tahad edasi liikuda?';
|
Kas Sa ikka tahad edasi liikuda?';
|
||||||
$lang['js']['searchmedia'] = 'Otsi faile';
|
$lang['js']['searchmedia'] = 'Otsi faile';
|
||||||
|
@ -122,6 +139,17 @@ Siiski võid kopeerida ja asetada lingi.';
|
||||||
$lang['js']['linkwiz'] = 'Lingi nõustaja';
|
$lang['js']['linkwiz'] = 'Lingi nõustaja';
|
||||||
$lang['js']['linkto'] = 'Lingi:';
|
$lang['js']['linkto'] = 'Lingi:';
|
||||||
$lang['js']['del_confirm'] = 'Kas kustutame selle kirje?';
|
$lang['js']['del_confirm'] = 'Kas kustutame selle kirje?';
|
||||||
|
$lang['js']['restore_confirm'] = 'Tõesti taastad selle järgu?';
|
||||||
|
$lang['js']['media_diff'] = 'Vaatle erisusi:';
|
||||||
|
$lang['js']['media_diff_both'] = 'Kõrvuti';
|
||||||
|
$lang['js']['media_diff_opacity'] = 'Kuma läbi';
|
||||||
|
$lang['js']['media_diff_portions'] = 'Puhasta';
|
||||||
|
$lang['js']['media_select'] = 'Vali failid…';
|
||||||
|
$lang['js']['media_upload_btn'] = 'Lae üles';
|
||||||
|
$lang['js']['media_done_btn'] = 'Valmis';
|
||||||
|
$lang['js']['media_drop'] = 'Üleslaadimiseks viska failid siia';
|
||||||
|
$lang['js']['media_cancel'] = 'eemalda';
|
||||||
|
$lang['js']['media_overwrt'] = 'Asenda olemasolevad failid';
|
||||||
$lang['rssfailed'] = 'Sinu soovitud info ammutamisel tekkis viga: ';
|
$lang['rssfailed'] = 'Sinu soovitud info ammutamisel tekkis viga: ';
|
||||||
$lang['nothingfound'] = 'Oops, aga mitte muhvigi ei leitud.';
|
$lang['nothingfound'] = 'Oops, aga mitte muhvigi ei leitud.';
|
||||||
$lang['mediaselect'] = 'Hunnik faile';
|
$lang['mediaselect'] = 'Hunnik faile';
|
||||||
|
@ -131,6 +159,8 @@ $lang['uploadfail'] = 'Üleslaadimine läks nässu. Äkki pole Sa sel
|
||||||
$lang['uploadwrong'] = 'Ei saa Sa midagi üles laadida. Oops, aga seda tüüpi faili sul lihtsalt ei lubata üles laadida';
|
$lang['uploadwrong'] = 'Ei saa Sa midagi üles laadida. Oops, aga seda tüüpi faili sul lihtsalt ei lubata üles laadida';
|
||||||
$lang['uploadexist'] = 'Fail on juba olemas. Midagi ei muudetud.';
|
$lang['uploadexist'] = 'Fail on juba olemas. Midagi ei muudetud.';
|
||||||
$lang['uploadbadcontent'] = 'Üles laaditu ei sobinud %s faililaiendiga.';
|
$lang['uploadbadcontent'] = 'Üles laaditu ei sobinud %s faililaiendiga.';
|
||||||
|
$lang['uploadspam'] = 'Üleslaadimine tõrjuti rämpssisu vältija poolt.';
|
||||||
|
$lang['uploadxss'] = 'Üleslaadimine tõrjuti kahtlase sisu võimaluse tõttu';
|
||||||
$lang['uploadsize'] = 'Üles laaditud fail on liiga suur (maksimaalne suurus on %s).';
|
$lang['uploadsize'] = 'Üles laaditud fail on liiga suur (maksimaalne suurus on %s).';
|
||||||
$lang['deletesucc'] = 'Fail nimega "%s" sai kustutatud.';
|
$lang['deletesucc'] = 'Fail nimega "%s" sai kustutatud.';
|
||||||
$lang['deletefail'] = 'Faili nimega "%s" ei kustutatud (kontrolli õigusi).';
|
$lang['deletefail'] = 'Faili nimega "%s" ei kustutatud (kontrolli õigusi).';
|
||||||
|
@ -141,7 +171,7 @@ $lang['accessdenied'] = 'Ligipääs keelatud.';
|
||||||
$lang['mediausage'] = 'Kasuta järgmist kirjapilti sellele failile viitamaks:';
|
$lang['mediausage'] = 'Kasuta järgmist kirjapilti sellele failile viitamaks:';
|
||||||
$lang['mediaview'] = 'Vaata faili algsel kujul.';
|
$lang['mediaview'] = 'Vaata faili algsel kujul.';
|
||||||
$lang['mediaroot'] = 'juur';
|
$lang['mediaroot'] = 'juur';
|
||||||
$lang['mediaupload'] = 'Lae fail sellesse nimeruumi (kataloogi). Et tekitada veel alam nimeruum kasuta koolonit Wiki nimes.';
|
$lang['mediaupload'] = 'Lae fail sellesse nimeruumi (kataloogi). Loomaks täiendavaid alam-nimeruume, kasuta wiki-nime ja nimeruumide eraldamiseks koolonit.';
|
||||||
$lang['mediaextchange'] = 'Faili laiend .%s-st %s-ks!';
|
$lang['mediaextchange'] = 'Faili laiend .%s-st %s-ks!';
|
||||||
$lang['reference'] = 'Viited';
|
$lang['reference'] = 'Viited';
|
||||||
$lang['ref_inuse'] = 'Seda faili ei saa kustutada, sest teda kasutavad järgmised lehed:';
|
$lang['ref_inuse'] = 'Seda faili ei saa kustutada, sest teda kasutavad järgmised lehed:';
|
||||||
|
@ -155,6 +185,7 @@ $lang['diff'] = 'Näita erinevusi hetkel kehtiva versiooniga';
|
||||||
$lang['diff2'] = 'Näita valitud versioonide erinevusi';
|
$lang['diff2'] = 'Näita valitud versioonide erinevusi';
|
||||||
$lang['difflink'] = 'Lõlita võrdlemise vaatele';
|
$lang['difflink'] = 'Lõlita võrdlemise vaatele';
|
||||||
$lang['diff_type'] = 'Vaata erinevusi:';
|
$lang['diff_type'] = 'Vaata erinevusi:';
|
||||||
|
$lang['diff_inline'] = 'Jooksvalt';
|
||||||
$lang['diff_side'] = 'Kõrvuti';
|
$lang['diff_side'] = 'Kõrvuti';
|
||||||
$lang['line'] = 'Rida';
|
$lang['line'] = 'Rida';
|
||||||
$lang['breadcrumb'] = 'Käidud rada';
|
$lang['breadcrumb'] = 'Käidud rada';
|
||||||
|
@ -166,9 +197,22 @@ $lang['created'] = 'tekitatud';
|
||||||
$lang['restored'] = 'vana versioon taastatud (%s)';
|
$lang['restored'] = 'vana versioon taastatud (%s)';
|
||||||
$lang['external_edit'] = 'väline muutmine';
|
$lang['external_edit'] = 'väline muutmine';
|
||||||
$lang['summary'] = 'kokkuvõte muudatustest';
|
$lang['summary'] = 'kokkuvõte muudatustest';
|
||||||
|
$lang['noflash'] = 'Sele sisu vaatamisesks on vajalik <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Laiendus</a>.';
|
||||||
|
$lang['tools'] = 'Tööriistad';
|
||||||
|
$lang['user_tools'] = 'Kasutaja tarvikud';
|
||||||
|
$lang['site_tools'] = 'Lehe tööriistad';
|
||||||
|
$lang['page_tools'] = 'Lehekülje tarvikud';
|
||||||
|
$lang['skip_to_content'] = 'mine sisule';
|
||||||
|
$lang['sidebar'] = 'Külgriba';
|
||||||
$lang['mail_newpage'] = 'leht lisatud:';
|
$lang['mail_newpage'] = 'leht lisatud:';
|
||||||
$lang['mail_changed'] = 'leht muudetud';
|
$lang['mail_changed'] = 'leht muudetud';
|
||||||
|
$lang['mail_subscribe_list'] = 'muutunud leheküljed nimeruumis:';
|
||||||
$lang['mail_new_user'] = 'Uus kasutaja:';
|
$lang['mail_new_user'] = 'Uus kasutaja:';
|
||||||
|
$lang['mail_upload'] = 'üles laetud fail:';
|
||||||
|
$lang['changes_type'] = 'Näita mmutuseid';
|
||||||
|
$lang['pages_changes'] = 'Leheküljed';
|
||||||
|
$lang['media_changes'] = 'Meedia failid';
|
||||||
|
$lang['both_changes'] = 'Mõlemid, leheküljed ja meedia failid';
|
||||||
$lang['qb_bold'] = 'Rasvane kiri';
|
$lang['qb_bold'] = 'Rasvane kiri';
|
||||||
$lang['qb_italic'] = 'Kaldkiri';
|
$lang['qb_italic'] = 'Kaldkiri';
|
||||||
$lang['qb_underl'] = 'Alajoonega kiri';
|
$lang['qb_underl'] = 'Alajoonega kiri';
|
||||||
|
@ -193,11 +237,12 @@ $lang['qb_media'] = 'Lisa pilte ja muid faile';
|
||||||
$lang['qb_sig'] = 'Lisa allkiri!';
|
$lang['qb_sig'] = 'Lisa allkiri!';
|
||||||
$lang['qb_smileys'] = 'Emotikonid';
|
$lang['qb_smileys'] = 'Emotikonid';
|
||||||
$lang['qb_chars'] = 'Erisümbolid';
|
$lang['qb_chars'] = 'Erisümbolid';
|
||||||
|
$lang['upperns'] = 'mine ülemisse nimeruumi';
|
||||||
$lang['admin_register'] = 'Lisa kasutaja';
|
$lang['admin_register'] = 'Lisa kasutaja';
|
||||||
$lang['metaedit'] = 'Muuda lisainfot';
|
$lang['metaedit'] = 'Muuda lisainfot';
|
||||||
$lang['metasaveerr'] = 'Lisainfo salvestamine läks untsu.';
|
$lang['metasaveerr'] = 'Lisainfo salvestamine läks untsu.';
|
||||||
$lang['metasaveok'] = 'Lisainfo salvestatud';
|
$lang['metasaveok'] = 'Lisainfo salvestatud';
|
||||||
$lang['img_backto'] = 'Tagasi';
|
$lang['btn_img_backto'] = 'Tagasi %s';
|
||||||
$lang['img_title'] = 'Tiitel';
|
$lang['img_title'] = 'Tiitel';
|
||||||
$lang['img_caption'] = 'Kirjeldus';
|
$lang['img_caption'] = 'Kirjeldus';
|
||||||
$lang['img_date'] = 'Kuupäev';
|
$lang['img_date'] = 'Kuupäev';
|
||||||
|
@ -208,7 +253,26 @@ $lang['img_copyr'] = 'Autoriõigused';
|
||||||
$lang['img_format'] = 'Formaat';
|
$lang['img_format'] = 'Formaat';
|
||||||
$lang['img_camera'] = 'Kaamera';
|
$lang['img_camera'] = 'Kaamera';
|
||||||
$lang['img_keywords'] = 'Võtmesõnad';
|
$lang['img_keywords'] = 'Võtmesõnad';
|
||||||
|
$lang['img_width'] = 'Laius';
|
||||||
|
$lang['img_height'] = 'Kõrgus';
|
||||||
|
$lang['img_manager'] = 'Näita meediahalduris';
|
||||||
|
$lang['subscr_subscribe_success'] = '%s lisati %s tellijaks';
|
||||||
|
$lang['subscr_subscribe_error'] = 'Viga %s lisamisel %s tellijaks';
|
||||||
|
$lang['subscr_subscribe_noaddress'] = 'Sinu kasutajaga pole seotud ühtegi aadressi, seega ei saa sind tellijaks lisada';
|
||||||
|
$lang['subscr_unsubscribe_success'] = '%s eemaldati %s tellijatest';
|
||||||
|
$lang['subscr_unsubscribe_error'] = 'Viga %s eemaldamisel %s tellijatest';
|
||||||
|
$lang['subscr_already_subscribed'] = '%s on juba %s tellija';
|
||||||
|
$lang['subscr_not_subscribed'] = '%s pole %s tellija';
|
||||||
|
$lang['subscr_m_not_subscribed'] = 'Sina pole hetkel selle lehekülje ega nimeruumi tellija.';
|
||||||
|
$lang['subscr_m_new_header'] = 'Lisa tellimus';
|
||||||
|
$lang['subscr_m_current_header'] = 'Hetkel tellitud';
|
||||||
|
$lang['subscr_m_unsubscribe'] = 'Eemalda tellimus';
|
||||||
|
$lang['subscr_m_subscribe'] = 'Telli';
|
||||||
|
$lang['subscr_style_every'] = 'igast toimetamisest teavitab ekiri';
|
||||||
|
$lang['subscr_style_digest'] = 'kokkuvõte ekirjaga toimetamistest igal leheküljel (iga %.2f päeva järel)';
|
||||||
|
$lang['subscr_style_list'] = 'Peale viimast ekirja (iga %.2f päeva järel) toimetaud lehekülgede loend.';
|
||||||
$lang['authtempfail'] = 'Kasutajate autentimine on ajutiselt rivist väljas. Kui see olukord mõne aja jooksul ei parane, siis teavita sellest serveri haldajat.';
|
$lang['authtempfail'] = 'Kasutajate autentimine on ajutiselt rivist väljas. Kui see olukord mõne aja jooksul ei parane, siis teavita sellest serveri haldajat.';
|
||||||
|
$lang['authpwdexpire'] = 'Sinu salasõna aegub %päeva pärast, võiksid seda peatselt muuta.';
|
||||||
$lang['i_chooselang'] = 'Vali keel';
|
$lang['i_chooselang'] = 'Vali keel';
|
||||||
$lang['i_installer'] = 'DokuWiki paigaldaja';
|
$lang['i_installer'] = 'DokuWiki paigaldaja';
|
||||||
$lang['i_wikiname'] = 'Wiki nimi';
|
$lang['i_wikiname'] = 'Wiki nimi';
|
||||||
|
@ -218,9 +282,11 @@ $lang['i_problems'] = 'Paigaldaja leidis mõned vead, mis on allpool
|
||||||
$lang['i_modified'] = 'Õnnetuste vältimiseks läheb see skript käima ainult värskelt paigaldatud ja muutmata Dokuwiki peal.
|
$lang['i_modified'] = 'Õnnetuste vältimiseks läheb see skript käima ainult värskelt paigaldatud ja muutmata Dokuwiki peal.
|
||||||
Sa peaksid ilmselt kogu koodi uuesti lahti pakkima. Vaata ka <a href="http://dokuwiki.org/install">Dokuwiki installeerimis juhendit</a>';
|
Sa peaksid ilmselt kogu koodi uuesti lahti pakkima. Vaata ka <a href="http://dokuwiki.org/install">Dokuwiki installeerimis juhendit</a>';
|
||||||
$lang['i_funcna'] = 'PHP funktsiooni <code>%s</code> ei ole olemas.võibolla sinu serveri hooldaja on selle mingil põhjusel keelanud?';
|
$lang['i_funcna'] = 'PHP funktsiooni <code>%s</code> ei ole olemas.võibolla sinu serveri hooldaja on selle mingil põhjusel keelanud?';
|
||||||
|
$lang['i_phpver'] = 'Sinu PHP versioon <code>%s</code> on vanem nõutavast <code>%s</code>. Pead oma paigaldatud PHP-d uuendama.';
|
||||||
$lang['i_permfail'] = 'Dokuwiki ei saa kirjutada faili <code>%s</code>. Kontrolli serveris failide õigused üle.';
|
$lang['i_permfail'] = 'Dokuwiki ei saa kirjutada faili <code>%s</code>. Kontrolli serveris failide õigused üle.';
|
||||||
$lang['i_confexists'] = '<code>%s</code> on juba olemas';
|
$lang['i_confexists'] = '<code>%s</code> on juba olemas';
|
||||||
$lang['i_writeerr'] = 'Faili <code>%s</code> ei lubata tekitada. Kontrolli kataloogi ja faili õigusi.';
|
$lang['i_writeerr'] = 'Faili <code>%s</code> ei lubata tekitada. Kontrolli kataloogi ja faili õigusi.';
|
||||||
|
$lang['i_badhash'] = 'Tundmatu või muutunud dokuwiki.php (hash=<code>%s</code>)';
|
||||||
$lang['i_badval'] = '<code>%s</code> - lubamatu või tühi väärtus';
|
$lang['i_badval'] = '<code>%s</code> - lubamatu või tühi väärtus';
|
||||||
$lang['i_success'] = 'Seadistamine on õnnelikult lõpule viidud. Sa võid nüüd kustutada faili install.php. Alusta oma <a href="doku.php?id=wiki:welcome">uue DokuWiki</a> täitmist.';
|
$lang['i_success'] = 'Seadistamine on õnnelikult lõpule viidud. Sa võid nüüd kustutada faili install.php. Alusta oma <a href="doku.php?id=wiki:welcome">uue DokuWiki</a> täitmist.';
|
||||||
$lang['i_failure'] = 'Konfiguratsiooni faili kirjutamisel esines vigu. Võimalik, et pead need käsitsi parandama enne <a href="doku.php?id=wiki:welcome">uue DokuWiki</a> täitma asumist.';
|
$lang['i_failure'] = 'Konfiguratsiooni faili kirjutamisel esines vigu. Võimalik, et pead need käsitsi parandama enne <a href="doku.php?id=wiki:welcome">uue DokuWiki</a> täitma asumist.';
|
||||||
|
@ -228,4 +294,45 @@ $lang['i_policy'] = 'Wiki õiguste algne poliitika';
|
||||||
$lang['i_pol0'] = 'Avatud (lugemine, kirjutamine ja üleslaadimine kõigile lubatud)';
|
$lang['i_pol0'] = 'Avatud (lugemine, kirjutamine ja üleslaadimine kõigile lubatud)';
|
||||||
$lang['i_pol1'] = 'Avalikuks lugemiseks (lugeda saavad kõik, kirjutada ja üles laadida vaid registreeritud kasutajad)';
|
$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_pol2'] = 'Suletud (kõik õigused, kaasaarvatud lugemine on lubatud vaid registreeritud kasutajatele)';
|
||||||
|
$lang['i_allowreg'] = 'Luba kasutajail endid ise arvele võtta';
|
||||||
$lang['i_retry'] = 'Proovi uuesti';
|
$lang['i_retry'] = 'Proovi uuesti';
|
||||||
|
$lang['i_license'] = 'Vali leping, mille alusel wiki sisu avaldatakse:';
|
||||||
|
$lang['i_license_none'] = 'Ära näita mingit lepingu teavet';
|
||||||
|
$lang['i_pop_field'] = 'Aitake meil täiendada DokuWiki kasutuskogemsut:';
|
||||||
|
$lang['i_pop_label'] = 'Kord kuus, saada DokuWiki arendajatele anonüümseid kasutus andmeid.';
|
||||||
|
$lang['recent_global'] = 'Uurid hetkel nimeruumi <b>%s</b> muudatusi. Võid uurida ka <a href="%s">kogu selle wiki</a> muudatusi.';
|
||||||
|
$lang['years'] = '%d aasta eest';
|
||||||
|
$lang['months'] = '%d kuu eest';
|
||||||
|
$lang['weeks'] = '%d nädala eest';
|
||||||
|
$lang['days'] = '%d päeva eest';
|
||||||
|
$lang['hours'] = '%d tunni eest';
|
||||||
|
$lang['minutes'] = '%d minuti eest';
|
||||||
|
$lang['seconds'] = '%d sekundi eest';
|
||||||
|
$lang['wordblock'] = 'Sinu toimetus jäeti muutmata tõrjutud teksti tõttu (rämpspost?).';
|
||||||
|
$lang['media_uploadtab'] = 'Lae-↑ ';
|
||||||
|
$lang['media_searchtab'] = 'Otsi';
|
||||||
|
$lang['media_file'] = 'Fail';
|
||||||
|
$lang['media_viewtab'] = 'Vaata';
|
||||||
|
$lang['media_edittab'] = 'Toimeta';
|
||||||
|
$lang['media_historytab'] = 'Ajalugu';
|
||||||
|
$lang['media_list_thumbs'] = 'Pisipildid';
|
||||||
|
$lang['media_list_rows'] = 'Ridu';
|
||||||
|
$lang['media_sort_name'] = 'Nimi';
|
||||||
|
$lang['media_sort_date'] = 'Kuupäev';
|
||||||
|
$lang['media_namespaces'] = 'Vali nimeruum';
|
||||||
|
$lang['media_files'] = 'Failid %s-is';
|
||||||
|
$lang['media_upload'] = 'Lae %s-ssi';
|
||||||
|
$lang['media_search'] = 'Leia %s-st';
|
||||||
|
$lang['media_view'] = '%s';
|
||||||
|
$lang['media_viewold'] = '%s asub %s-s';
|
||||||
|
$lang['media_edit'] = 'Muuda %s-i';
|
||||||
|
$lang['media_history'] = '%s ajalugu';
|
||||||
|
$lang['media_meta_edited'] = 'toimetati päiseteavet';
|
||||||
|
$lang['media_perm_read'] = 'Sul pole piisavaid õigusi failide vaatamiseks';
|
||||||
|
$lang['media_perm_upload'] = 'Sul pole piisavaid õigusi failide üleslaadimiseks';
|
||||||
|
$lang['media_update'] = 'Lea üles uus järk';
|
||||||
|
$lang['media_restore'] = 'Ennista sellele järgule';
|
||||||
|
$lang['currentns'] = 'Hetke nimeruum';
|
||||||
|
$lang['searchresult'] = 'Otsingu tulemus';
|
||||||
|
$lang['plainhtml'] = 'Liht-HTML';
|
||||||
|
$lang['wikimarkup'] = 'Wiki märgistus';
|
||||||
|
|
3
sources/inc/lang/et/resetpwd.txt
Normal file
3
sources/inc/lang/et/resetpwd.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
====== Sea uus salasõna ======
|
||||||
|
|
||||||
|
Sisesta oma selle wiki kasutajale uus salasõna
|
21
sources/inc/lang/et/subscr_digest.txt
Normal file
21
sources/inc/lang/et/subscr_digest.txt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
Tere!
|
||||||
|
|
||||||
|
Wiki-s @TITLE@ toimetati lehekülge @PAGE@.
|
||||||
|
|
||||||
|
Muudatustest lähemalt:
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
@DIFF@
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
Endine: @OLDPAGE@
|
||||||
|
Uus: @NEWPAGE@
|
||||||
|
|
||||||
|
Lehekülje teavituste katkestamiseks, sisene wiki-sse aadressil @DOKUWIKIURL@
|
||||||
|
ja mine:
|
||||||
|
@SUBSCRIBE@
|
||||||
|
ning loobu lehekülje ja/või nimeruumi muudatuste teavitustest.
|
||||||
|
|
||||||
|
--
|
||||||
|
Selle e-kirja lõi DokuWiki aadressilt
|
||||||
|
@DOKUWIKIURL@
|
3
sources/inc/lang/et/subscr_form.txt
Normal file
3
sources/inc/lang/et/subscr_form.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
====== Tellimuste haldus ======
|
||||||
|
|
||||||
|
See lehekülg lubab sul hallata oma tellimusi antud leheküljele ja nimeruumile.
|
19
sources/inc/lang/et/subscr_list.txt
Normal file
19
sources/inc/lang/et/subscr_list.txt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Tere!
|
||||||
|
|
||||||
|
Wiki-s @TITLE@ toimetati nimeruumi @PAGE@.
|
||||||
|
Muudatustest lähemalt:
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
@DIFF@
|
||||||
|
--------------------------------------------------------
|
||||||
|
Endine: @OLDPAGE@
|
||||||
|
Uus: @NEWPAGE@
|
||||||
|
|
||||||
|
Lehekülje teavituste katkestamiseks, sisene wiki-sse aadressil @DOKUWIKIURL@
|
||||||
|
ja mine:
|
||||||
|
@SUBSCRIBE@
|
||||||
|
ning loobu lehekülje ja/või nimeruumi muudatuste teavitustest.
|
||||||
|
|
||||||
|
--
|
||||||
|
Selle e-kirja lõi DokuWiki aadressilt
|
||||||
|
@DOKUWIKIURL@
|
23
sources/inc/lang/et/subscr_single.txt
Normal file
23
sources/inc/lang/et/subscr_single.txt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
Tere!
|
||||||
|
|
||||||
|
Wiki-s @TITLE@ toimetati lehekülge @PAGE@.
|
||||||
|
Muudatustest lähemalt:
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
@DIFF@
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
Kuupäev : @DATE@
|
||||||
|
Kasutaja : @USER@
|
||||||
|
Kokkuvõte: @SUMMARY@
|
||||||
|
Endine: @OLDPAGE@
|
||||||
|
Uus: @NEWPAGE@
|
||||||
|
|
||||||
|
Lehekülje teavituste katkestamiseks, sisene wiki-sse aadressil @DOKUWIKIURL@
|
||||||
|
ja mine:
|
||||||
|
@SUBSCRIBE@
|
||||||
|
ning loobu lehekülje ja/või nimeruumi muudatuste teavitustest.
|
||||||
|
|
||||||
|
--
|
||||||
|
Selle e-kirja lõi DokuWiki aadressilt
|
||||||
|
@DOKUWIKIURL@
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue