summaryrefslogtreecommitdiff
path: root/lib/plugins
diff options
context:
space:
mode:
authorGerrit Uitslag <klapinklapin@gmail.com>2014-09-28 15:36:21 +0200
committerGerrit Uitslag <klapinklapin@gmail.com>2014-09-28 15:36:21 +0200
commit0c1b02bead38d5a58032a1c88cf3ca53bbc4a4d9 (patch)
treeb9cb574a1964f28dda648795010a5be056b80618 /lib/plugins
parent618191d008b98cb421694c541145c863d7b300ce (diff)
parentda9572711f54d13ce3c5506971154b0bc359723f (diff)
downloadrpg-0c1b02bead38d5a58032a1c88cf3ca53bbc4a4d9.tar.gz
rpg-0c1b02bead38d5a58032a1c88cf3ca53bbc4a4d9.tar.bz2
Merge remote-tracking branch 'origin/master' into FS#2697searchpagereadonly
Conflicts: inc/lang/hr/searchpage.txt inc/lang/ko/searchpage.txt
Diffstat (limited to 'lib/plugins')
-rw-r--r--lib/plugins/acl/admin.php16
-rw-r--r--lib/plugins/acl/lang/ar/lang.php4
-rw-r--r--lib/plugins/acl/lang/bg/lang.php4
-rw-r--r--lib/plugins/acl/lang/ca-valencia/lang.php4
-rw-r--r--lib/plugins/acl/lang/ca/lang.php4
-rw-r--r--lib/plugins/acl/lang/cs/lang.php4
-rw-r--r--lib/plugins/acl/lang/da/lang.php4
-rw-r--r--lib/plugins/acl/lang/de-informal/lang.php4
-rw-r--r--lib/plugins/acl/lang/de/lang.php4
-rw-r--r--lib/plugins/acl/lang/el/lang.php4
-rw-r--r--lib/plugins/acl/lang/en/lang.php4
-rw-r--r--lib/plugins/acl/lang/eo/lang.php4
-rw-r--r--lib/plugins/acl/lang/es/lang.php4
-rw-r--r--lib/plugins/acl/lang/et/help.txt9
-rw-r--r--lib/plugins/acl/lang/et/lang.php19
-rw-r--r--lib/plugins/acl/lang/eu/lang.php4
-rw-r--r--lib/plugins/acl/lang/fa/lang.php4
-rw-r--r--lib/plugins/acl/lang/fi/lang.php4
-rw-r--r--lib/plugins/acl/lang/fr/help.txt2
-rw-r--r--lib/plugins/acl/lang/fr/lang.php4
-rw-r--r--lib/plugins/acl/lang/gl/lang.php4
-rw-r--r--lib/plugins/acl/lang/he/lang.php4
-rw-r--r--lib/plugins/acl/lang/hr/lang.php9
-rw-r--r--lib/plugins/acl/lang/ia/lang.php4
-rw-r--r--lib/plugins/acl/lang/id/lang.php4
-rw-r--r--lib/plugins/acl/lang/is/lang.php4
-rw-r--r--lib/plugins/acl/lang/it/lang.php4
-rw-r--r--lib/plugins/acl/lang/ja/lang.php4
-rw-r--r--lib/plugins/acl/lang/kk/lang.php4
-rw-r--r--lib/plugins/acl/lang/ko/help.txt6
-rw-r--r--lib/plugins/acl/lang/ko/lang.php6
-rw-r--r--lib/plugins/acl/lang/la/lang.php4
-rw-r--r--lib/plugins/acl/lang/lt/lang.php4
-rw-r--r--lib/plugins/acl/lang/lv/lang.php8
-rw-r--r--lib/plugins/acl/lang/mk/lang.php4
-rw-r--r--lib/plugins/acl/lang/mr/lang.php4
-rw-r--r--lib/plugins/acl/lang/ne/lang.php4
-rw-r--r--lib/plugins/acl/lang/nl/lang.php4
-rw-r--r--lib/plugins/acl/lang/no/lang.php4
-rw-r--r--lib/plugins/acl/lang/pl/lang.php4
-rw-r--r--lib/plugins/acl/lang/pt-br/lang.php4
-rw-r--r--lib/plugins/acl/lang/pt/lang.php4
-rw-r--r--lib/plugins/acl/lang/ro/lang.php4
-rw-r--r--lib/plugins/acl/lang/ru/help.txt2
-rw-r--r--lib/plugins/acl/lang/ru/lang.php4
-rw-r--r--lib/plugins/acl/lang/sk/lang.php4
-rw-r--r--lib/plugins/acl/lang/sl/lang.php4
-rw-r--r--lib/plugins/acl/lang/sq/lang.php4
-rw-r--r--lib/plugins/acl/lang/sr/lang.php4
-rw-r--r--lib/plugins/acl/lang/sv/lang.php4
-rw-r--r--lib/plugins/acl/lang/th/lang.php9
-rw-r--r--lib/plugins/acl/lang/tr/lang.php4
-rw-r--r--lib/plugins/acl/lang/uk/lang.php4
-rw-r--r--lib/plugins/acl/lang/vi/lang.php4
-rw-r--r--lib/plugins/acl/lang/zh-tw/lang.php4
-rw-r--r--lib/plugins/acl/lang/zh/lang.php4
-rw-r--r--lib/plugins/acl/plugin.info.txt2
-rw-r--r--lib/plugins/auth.php5
-rw-r--r--lib/plugins/authad/action.php91
-rw-r--r--lib/plugins/authad/auth.php28
-rw-r--r--lib/plugins/authad/lang/ar/lang.php8
-rw-r--r--lib/plugins/authad/lang/cs/lang.php8
-rw-r--r--lib/plugins/authad/lang/de/lang.php8
-rw-r--r--lib/plugins/authad/lang/en/lang.php10
-rw-r--r--lib/plugins/authad/lang/eo/lang.php8
-rw-r--r--lib/plugins/authad/lang/es/lang.php8
-rw-r--r--lib/plugins/authad/lang/es/settings.php10
-rw-r--r--lib/plugins/authad/lang/fa/lang.php8
-rw-r--r--lib/plugins/authad/lang/fr/lang.php8
-rw-r--r--lib/plugins/authad/lang/hr/lang.php8
-rw-r--r--lib/plugins/authad/lang/hr/settings.php20
-rw-r--r--lib/plugins/authad/lang/hu/lang.php8
-rw-r--r--lib/plugins/authad/lang/hu/settings.php6
-rw-r--r--lib/plugins/authad/lang/ja/lang.php8
-rw-r--r--lib/plugins/authad/lang/ja/settings.php2
-rw-r--r--lib/plugins/authad/lang/ko/lang.php8
-rw-r--r--lib/plugins/authad/lang/lv/lang.php8
-rw-r--r--lib/plugins/authad/lang/lv/settings.php11
-rw-r--r--lib/plugins/authad/lang/nl/lang.php8
-rw-r--r--lib/plugins/authad/lang/no/settings.php9
-rw-r--r--lib/plugins/authad/lang/pl/settings.php1
-rw-r--r--lib/plugins/authad/lang/pt-br/lang.php8
-rw-r--r--lib/plugins/authad/lang/pt/lang.php8
-rw-r--r--lib/plugins/authad/lang/pt/settings.php5
-rw-r--r--lib/plugins/authad/lang/ru/lang.php8
-rw-r--r--lib/plugins/authad/lang/ru/settings.php2
-rw-r--r--lib/plugins/authad/lang/sl/settings.php3
-rw-r--r--lib/plugins/authad/lang/zh-tw/lang.php8
-rw-r--r--lib/plugins/authad/lang/zh-tw/settings.php2
-rw-r--r--lib/plugins/authad/lang/zh/lang.php8
-rw-r--r--lib/plugins/authad/plugin.info.txt2
-rw-r--r--lib/plugins/authldap/auth.php73
-rw-r--r--lib/plugins/authldap/lang/es/settings.php14
-rw-r--r--lib/plugins/authldap/lang/et/settings.php9
-rw-r--r--lib/plugins/authldap/lang/hr/settings.php27
-rw-r--r--lib/plugins/authldap/lang/hu/settings.php7
-rw-r--r--lib/plugins/authldap/lang/it/settings.php6
-rw-r--r--lib/plugins/authldap/lang/ja/settings.php9
-rw-r--r--lib/plugins/authldap/lang/ko/settings.php4
-rw-r--r--lib/plugins/authldap/lang/lv/settings.php9
-rw-r--r--lib/plugins/authldap/lang/no/settings.php9
-rw-r--r--lib/plugins/authldap/lang/ru/settings.php8
-rw-r--r--lib/plugins/authldap/lang/sl/settings.php2
-rw-r--r--lib/plugins/authldap/lang/tr/settings.php8
-rw-r--r--lib/plugins/authldap/lang/zh-tw/settings.php2
-rw-r--r--lib/plugins/authldap/plugin.info.txt2
-rw-r--r--lib/plugins/authmysql/auth.php188
-rw-r--r--lib/plugins/authmysql/lang/es/settings.php27
-rw-r--r--lib/plugins/authmysql/lang/fa/settings.php10
-rw-r--r--lib/plugins/authmysql/lang/hr/settings.php42
-rw-r--r--lib/plugins/authmysql/lang/hu/settings.php4
-rw-r--r--lib/plugins/authmysql/lang/it/settings.php29
-rw-r--r--lib/plugins/authmysql/lang/lv/settings.php10
-rw-r--r--lib/plugins/authmysql/lang/pl/settings.php2
-rw-r--r--lib/plugins/authmysql/lang/tr/settings.php41
-rw-r--r--lib/plugins/authmysql/plugin.info.txt2
-rw-r--r--lib/plugins/authpgsql/auth.php8
-rw-r--r--lib/plugins/authpgsql/lang/es/settings.php38
-rw-r--r--lib/plugins/authpgsql/lang/fa/settings.php8
-rw-r--r--lib/plugins/authpgsql/lang/hr/settings.php38
-rw-r--r--lib/plugins/authpgsql/lang/it/settings.php11
-rw-r--r--lib/plugins/authpgsql/lang/lv/settings.php9
-rw-r--r--lib/plugins/authpgsql/lang/pl/settings.php9
-rw-r--r--lib/plugins/authpgsql/lang/ru/settings.php2
-rw-r--r--lib/plugins/authpgsql/lang/tr/settings.php13
-rw-r--r--lib/plugins/authpgsql/plugin.info.txt2
-rw-r--r--lib/plugins/authplain/_test/escaping.test.php82
-rw-r--r--lib/plugins/authplain/auth.php36
-rw-r--r--lib/plugins/authplain/plugin.info.txt2
-rw-r--r--lib/plugins/config/lang/bg/lang.php4
-rw-r--r--lib/plugins/config/lang/de/lang.php2
-rw-r--r--lib/plugins/config/lang/en/lang.php10
-rw-r--r--lib/plugins/config/plugin.info.txt2
-rw-r--r--lib/plugins/config/settings/config.class.php152
-rw-r--r--lib/plugins/config/settings/config.metadata.php4
-rw-r--r--lib/plugins/extension/helper/extension.php48
-rw-r--r--lib/plugins/extension/helper/list.php23
-rw-r--r--lib/plugins/extension/helper/repository.php10
-rw-r--r--lib/plugins/extension/images/disabled.pngbin1486 -> 1396 bytes
-rw-r--r--lib/plugins/extension/images/enabled.pngbin1231 -> 1398 bytes
-rw-r--r--lib/plugins/extension/images/license.txt4
-rw-r--r--lib/plugins/extension/lang/cs/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/cs/lang.php57
-rw-r--r--lib/plugins/extension/lang/de/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/de/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/de/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/de/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/de/lang.php92
-rw-r--r--lib/plugins/extension/lang/en/lang.php4
-rw-r--r--lib/plugins/extension/lang/eo/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/eo/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/eo/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/eo/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/eo/lang.php87
-rw-r--r--lib/plugins/extension/lang/es/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/es/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/es/lang.php84
-rw-r--r--lib/plugins/extension/lang/fa/lang.php40
-rw-r--r--lib/plugins/extension/lang/fr/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/fr/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/fr/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/fr/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/fr/lang.php88
-rw-r--r--lib/plugins/extension/lang/hr/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/hr/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/hr/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/hr/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/hr/lang.php88
-rw-r--r--lib/plugins/extension/lang/hu/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/hu/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/hu/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/hu/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/hu/lang.php88
-rw-r--r--lib/plugins/extension/lang/it/lang.php43
-rw-r--r--lib/plugins/extension/lang/ja/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/ja/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/ja/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/ja/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/ja/lang.php89
-rw-r--r--lib/plugins/extension/lang/ko/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/ko/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/ko/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/ko/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/ko/lang.php89
-rw-r--r--lib/plugins/extension/lang/lv/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/lv/lang.php8
-rw-r--r--lib/plugins/extension/lang/nl/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/nl/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/nl/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/nl/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/nl/lang.php90
-rw-r--r--lib/plugins/extension/lang/pl/lang.php39
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/pt-br/lang.php75
-rw-r--r--lib/plugins/extension/lang/ru/lang.php68
-rw-r--r--lib/plugins/extension/lang/sk/lang.php58
-rw-r--r--lib/plugins/extension/lang/tr/lang.php60
-rw-r--r--lib/plugins/extension/lang/zh-tw/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/zh-tw/lang.php50
-rw-r--r--lib/plugins/extension/lang/zh/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/zh/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/zh/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/zh/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/zh/lang.php91
-rw-r--r--lib/plugins/extension/plugin.info.txt2
-rw-r--r--lib/plugins/info/plugin.info.txt2
-rw-r--r--lib/plugins/info/syntax.php4
-rw-r--r--lib/plugins/plugin/lang/cs/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/cs/lang.php66
-rw-r--r--lib/plugins/plugin/lang/el/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/el/lang.php58
-rw-r--r--lib/plugins/plugin/lang/fr/admin_plugin.txt4
-rw-r--r--lib/plugins/plugin/lang/fr/lang.php69
-rw-r--r--lib/plugins/plugin/lang/id/lang.php32
-rw-r--r--lib/plugins/plugin/lang/pl/admin_plugin.txt5
-rw-r--r--lib/plugins/plugin/lang/pl/lang.php63
-rw-r--r--lib/plugins/plugin/lang/sk/admin_plugin.txt4
-rw-r--r--lib/plugins/plugin/lang/sk/lang.php55
-rw-r--r--lib/plugins/plugin/lang/sl/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/sl/lang.php55
-rw-r--r--lib/plugins/plugin/lang/tr/admin_plugin.txt3
-rw-r--r--lib/plugins/plugin/lang/tr/lang.php55
-rw-r--r--lib/plugins/popularity/lang/hr/intro.txt7
-rw-r--r--lib/plugins/popularity/lang/hr/lang.php14
-rw-r--r--lib/plugins/popularity/lang/hr/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/lv/lang.php5
-rw-r--r--lib/plugins/popularity/lang/ru/intro.txt4
-rw-r--r--lib/plugins/popularity/lang/th/lang.php5
-rw-r--r--lib/plugins/popularity/plugin.info.txt2
-rw-r--r--lib/plugins/revert/admin.php3
-rw-r--r--lib/plugins/revert/lang/ar/lang.php1
-rw-r--r--lib/plugins/revert/lang/cs/lang.php3
-rw-r--r--lib/plugins/revert/lang/et/lang.php9
-rw-r--r--lib/plugins/revert/lang/hr/intro.txt3
-rw-r--r--lib/plugins/revert/lang/hr/lang.php16
-rw-r--r--lib/plugins/revert/lang/lv/lang.php5
-rw-r--r--lib/plugins/revert/lang/nl/intro.txt2
-rw-r--r--lib/plugins/revert/lang/nl/lang.php3
-rw-r--r--lib/plugins/revert/lang/no/lang.php1
-rw-r--r--lib/plugins/revert/lang/sv/lang.php1
-rw-r--r--lib/plugins/revert/lang/th/lang.php5
-rw-r--r--lib/plugins/revert/plugin.info.txt2
-rw-r--r--lib/plugins/syntax.php19
-rw-r--r--lib/plugins/usermanager/admin.php79
-rw-r--r--lib/plugins/usermanager/lang/bg/lang.php6
-rw-r--r--lib/plugins/usermanager/lang/cs/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/de-informal/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/de/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/en/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/en/lang.php1
-rw-r--r--lib/plugins/usermanager/lang/eo/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/es/lang.php15
-rw-r--r--lib/plugins/usermanager/lang/et/lang.php9
-rw-r--r--lib/plugins/usermanager/lang/fa/lang.php16
-rw-r--r--lib/plugins/usermanager/lang/fr/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/hr/add.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/delete.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/edit.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/import.txt9
-rw-r--r--lib/plugins/usermanager/lang/hr/intro.txt1
-rw-r--r--lib/plugins/usermanager/lang/hr/lang.php66
-rw-r--r--lib/plugins/usermanager/lang/hr/list.txt1
-rw-r--r--lib/plugins/usermanager/lang/hu/import.txt4
-rw-r--r--lib/plugins/usermanager/lang/it/lang.php14
-rw-r--r--lib/plugins/usermanager/lang/ja/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/ko/edit.txt2
-rw-r--r--lib/plugins/usermanager/lang/ko/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/ko/intro.txt2
-rw-r--r--lib/plugins/usermanager/lang/ko/lang.php2
-rw-r--r--lib/plugins/usermanager/lang/lv/import.txt9
-rw-r--r--lib/plugins/usermanager/lang/lv/lang.php5
-rw-r--r--lib/plugins/usermanager/lang/nl/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/nl/intro.txt2
-rw-r--r--lib/plugins/usermanager/lang/nl/lang.php3
-rw-r--r--lib/plugins/usermanager/lang/ru/import.txt8
-rw-r--r--lib/plugins/usermanager/lang/ru/lang.php5
-rw-r--r--lib/plugins/usermanager/lang/sk/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/th/lang.php5
-rw-r--r--lib/plugins/usermanager/lang/zh-tw/import.txt2
-rw-r--r--lib/plugins/usermanager/lang/zh-tw/lang.php11
-rw-r--r--lib/plugins/usermanager/lang/zh/import.txt2
-rw-r--r--lib/plugins/usermanager/plugin.info.txt2
285 files changed, 3191 insertions, 831 deletions
diff --git a/lib/plugins/acl/admin.php b/lib/plugins/acl/admin.php
index 6c7c28ff6..ebb097a04 100644
--- a/lib/plugins/acl/admin.php
+++ b/lib/plugins/acl/admin.php
@@ -268,7 +268,10 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
usort($data,array($this,'_tree_sort'));
$count = count($data);
if($count>0) for($i=1; $i<$count; $i++){
- if($data[$i-1]['id'] == $data[$i]['id'] && $data[$i-1]['type'] == $data[$i]['type']) unset($data[$i]);
+ if($data[$i-1]['id'] == $data[$i]['id'] && $data[$i-1]['type'] == $data[$i]['type']) {
+ unset($data[$i]);
+ $i++; // duplicate found, next $i can't be a duplicate, so skip forward one
+ }
}
return $data;
}
@@ -488,7 +491,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
function _html_list_acl($item){
$ret = '';
// what to display
- if($item['label']){
+ if(!empty($item['label'])){
$base = $item['label'];
}else{
$base = ':'.$item['id'];
@@ -496,8 +499,11 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
}
// highlight?
- if( ($item['type']== $this->current_item['type'] && $item['id'] == $this->current_item['id']))
+ if( ($item['type']== $this->current_item['type'] && $item['id'] == $this->current_item['id'])) {
$cl = ' cur';
+ } else {
+ $cl = '';
+ }
// namespace or page?
if($item['type']=='d'){
@@ -773,8 +779,8 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
}
echo '<select name="acl_t" class="edit">'.NL;
- echo ' <option value="__g__" class="aclgroup"'.$gsel.'>'.$this->getLang('acl_group').':</option>'.NL;
- echo ' <option value="__u__" class="acluser"'.$usel.'>'.$this->getLang('acl_user').':</option>'.NL;
+ echo ' <option value="__g__" class="aclgroup"'.$gsel.'>'.$this->getLang('acl_group').'</option>'.NL;
+ echo ' <option value="__u__" class="acluser"'.$usel.'>'.$this->getLang('acl_user').'</option>'.NL;
if (!empty($this->specials)) {
echo ' <optgroup label="&#160;">'.NL;
foreach($this->specials as $ug){
diff --git a/lib/plugins/acl/lang/ar/lang.php b/lib/plugins/acl/lang/ar/lang.php
index 4e44dab5f..89fe27a76 100644
--- a/lib/plugins/acl/lang/ar/lang.php
+++ b/lib/plugins/acl/lang/ar/lang.php
@@ -9,8 +9,8 @@
* @author uahello@gmail.com
*/
$lang['admin_acl'] = 'إدارة قوائم التحكم بالدخول';
-$lang['acl_group'] = 'مجموعة';
-$lang['acl_user'] = 'مستخدم';
+$lang['acl_group'] = 'مجموعة:';
+$lang['acl_user'] = 'مستخدم:';
$lang['acl_perms'] = 'ترخيص لـ';
$lang['page'] = 'صفحة';
$lang['namespace'] = 'فضاء التسمية';
diff --git a/lib/plugins/acl/lang/bg/lang.php b/lib/plugins/acl/lang/bg/lang.php
index 14e7d311c..648b91ef4 100644
--- a/lib/plugins/acl/lang/bg/lang.php
+++ b/lib/plugins/acl/lang/bg/lang.php
@@ -8,8 +8,8 @@
* @author Kiril <neohidra@gmail.com>
*/
$lang['admin_acl'] = 'Управление на списъците за достъп';
-$lang['acl_group'] = 'Група';
-$lang['acl_user'] = 'Потребител';
+$lang['acl_group'] = 'Група:';
+$lang['acl_user'] = 'Потребител:';
$lang['acl_perms'] = 'Права за';
$lang['page'] = 'Страница';
$lang['namespace'] = 'Именно пространство';
diff --git a/lib/plugins/acl/lang/ca-valencia/lang.php b/lib/plugins/acl/lang/ca-valencia/lang.php
index ef0ae92eb..bdfa7da22 100644
--- a/lib/plugins/acl/lang/ca-valencia/lang.php
+++ b/lib/plugins/acl/lang/ca-valencia/lang.php
@@ -8,8 +8,8 @@
* @author Bernat Arlandis <berarma@llenguaitecnologia.com>
*/
$lang['admin_acl'] = 'Gestor de les llistes de control d\'accés';
-$lang['acl_group'] = 'Grup';
-$lang['acl_user'] = 'Usuari';
+$lang['acl_group'] = 'Grup:';
+$lang['acl_user'] = 'Usuari:';
$lang['acl_perms'] = 'Permissos per a';
$lang['page'] = 'Pàgina';
$lang['namespace'] = 'Espai de noms';
diff --git a/lib/plugins/acl/lang/ca/lang.php b/lib/plugins/acl/lang/ca/lang.php
index 183db711b..bead981f0 100644
--- a/lib/plugins/acl/lang/ca/lang.php
+++ b/lib/plugins/acl/lang/ca/lang.php
@@ -10,8 +10,8 @@
* @author daniel@6temes.cat
*/
$lang['admin_acl'] = 'Gestió de la Llista de Control d\'Accés';
-$lang['acl_group'] = 'Grup';
-$lang['acl_user'] = 'Usuari';
+$lang['acl_group'] = 'Grup:';
+$lang['acl_user'] = 'Usuari:';
$lang['acl_perms'] = 'Permisos per a';
$lang['page'] = 'Pàgina';
$lang['namespace'] = 'Espai';
diff --git a/lib/plugins/acl/lang/cs/lang.php b/lib/plugins/acl/lang/cs/lang.php
index 8031612f7..497d53a4a 100644
--- a/lib/plugins/acl/lang/cs/lang.php
+++ b/lib/plugins/acl/lang/cs/lang.php
@@ -15,8 +15,8 @@
* @author mkucera66@seznam.cz
*/
$lang['admin_acl'] = 'Správa přístupových práv';
-$lang['acl_group'] = 'Skupina';
-$lang['acl_user'] = 'Uživatel';
+$lang['acl_group'] = 'Skupina:';
+$lang['acl_user'] = 'Uživatel:';
$lang['acl_perms'] = 'Práva pro';
$lang['page'] = 'Stránka';
$lang['namespace'] = 'Jmenný prostor';
diff --git a/lib/plugins/acl/lang/da/lang.php b/lib/plugins/acl/lang/da/lang.php
index 2558795fd..2f8086ac1 100644
--- a/lib/plugins/acl/lang/da/lang.php
+++ b/lib/plugins/acl/lang/da/lang.php
@@ -16,8 +16,8 @@
* @author Mikael Lyngvig <mikael@lyngvig.org>
*/
$lang['admin_acl'] = 'Rettighedsadministration';
-$lang['acl_group'] = 'Gruppe';
-$lang['acl_user'] = 'Bruger';
+$lang['acl_group'] = 'Gruppe:';
+$lang['acl_user'] = 'Bruger:';
$lang['acl_perms'] = 'Rettigheder for';
$lang['page'] = 'Dokument';
$lang['namespace'] = 'Navnerum';
diff --git a/lib/plugins/acl/lang/de-informal/lang.php b/lib/plugins/acl/lang/de-informal/lang.php
index 35df13dc0..6a04cc520 100644
--- a/lib/plugins/acl/lang/de-informal/lang.php
+++ b/lib/plugins/acl/lang/de-informal/lang.php
@@ -13,8 +13,8 @@
* @author Volker Bödker <volker@boedker.de>
*/
$lang['admin_acl'] = 'Zugangsverwaltung';
-$lang['acl_group'] = 'Gruppe';
-$lang['acl_user'] = 'Benutzer';
+$lang['acl_group'] = 'Gruppe:';
+$lang['acl_user'] = 'Benutzer:';
$lang['acl_perms'] = 'Rechte für';
$lang['page'] = 'Seite';
$lang['namespace'] = 'Namensraum';
diff --git a/lib/plugins/acl/lang/de/lang.php b/lib/plugins/acl/lang/de/lang.php
index 77de4b097..f25a2ea71 100644
--- a/lib/plugins/acl/lang/de/lang.php
+++ b/lib/plugins/acl/lang/de/lang.php
@@ -23,8 +23,8 @@
* @author Pierre Corell <info@joomla-praxis.de>
*/
$lang['admin_acl'] = 'Zugangsverwaltung';
-$lang['acl_group'] = 'Gruppe';
-$lang['acl_user'] = 'Benutzer';
+$lang['acl_group'] = 'Gruppe:';
+$lang['acl_user'] = 'Benutzer:';
$lang['acl_perms'] = 'Berechtigungen für';
$lang['page'] = 'Seite';
$lang['namespace'] = 'Namensraum';
diff --git a/lib/plugins/acl/lang/el/lang.php b/lib/plugins/acl/lang/el/lang.php
index dc4a9f034..09c8691e7 100644
--- a/lib/plugins/acl/lang/el/lang.php
+++ b/lib/plugins/acl/lang/el/lang.php
@@ -14,8 +14,8 @@
* @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
*/
$lang['admin_acl'] = 'Διαχείριση Δικαιωμάτων Πρόσβασης';
-$lang['acl_group'] = 'Ομάδα';
-$lang['acl_user'] = 'Χρήστης';
+$lang['acl_group'] = 'Ομάδα:';
+$lang['acl_user'] = 'Χρήστης:';
$lang['acl_perms'] = 'Δικαιώματα για';
$lang['page'] = 'Σελίδα';
$lang['namespace'] = 'Φάκελος';
diff --git a/lib/plugins/acl/lang/en/lang.php b/lib/plugins/acl/lang/en/lang.php
index 779614d32..0c8648974 100644
--- a/lib/plugins/acl/lang/en/lang.php
+++ b/lib/plugins/acl/lang/en/lang.php
@@ -9,8 +9,8 @@
*/
$lang['admin_acl'] = 'Access Control List Management';
-$lang['acl_group'] = 'Group';
-$lang['acl_user'] = 'User';
+$lang['acl_group'] = 'Group:';
+$lang['acl_user'] = 'User:';
$lang['acl_perms'] = 'Permissions for';
$lang['page'] = 'Page';
$lang['namespace'] = 'Namespace';
diff --git a/lib/plugins/acl/lang/eo/lang.php b/lib/plugins/acl/lang/eo/lang.php
index a5f607341..f65995408 100644
--- a/lib/plugins/acl/lang/eo/lang.php
+++ b/lib/plugins/acl/lang/eo/lang.php
@@ -12,8 +12,8 @@
* @author Robert Bogenschneider <bogi@uea.org>
*/
$lang['admin_acl'] = 'Administrado de Alirkontrola Listo (ACL)';
-$lang['acl_group'] = 'Grupo';
-$lang['acl_user'] = 'Uzanto';
+$lang['acl_group'] = 'Grupo:';
+$lang['acl_user'] = 'Uzanto:';
$lang['acl_perms'] = 'Rajtoj por';
$lang['page'] = 'Paĝo';
$lang['namespace'] = 'Nomspaco';
diff --git a/lib/plugins/acl/lang/es/lang.php b/lib/plugins/acl/lang/es/lang.php
index cf503d4d1..da0dc8e38 100644
--- a/lib/plugins/acl/lang/es/lang.php
+++ b/lib/plugins/acl/lang/es/lang.php
@@ -26,8 +26,8 @@
* @author Mercè López mercelz@gmail.com
*/
$lang['admin_acl'] = 'Administración de lista de control de acceso';
-$lang['acl_group'] = 'Grupo';
-$lang['acl_user'] = 'Usuario';
+$lang['acl_group'] = 'Grupo:';
+$lang['acl_user'] = 'Usuario:';
$lang['acl_perms'] = 'Permiso para';
$lang['page'] = 'Página';
$lang['namespace'] = 'Espacio de nombres';
diff --git a/lib/plugins/acl/lang/et/help.txt b/lib/plugins/acl/lang/et/help.txt
new file mode 100644
index 000000000..a2c8e9e95
--- /dev/null
+++ b/lib/plugins/acl/lang/et/help.txt
@@ -0,0 +1,9 @@
+=== Kiir-spikker: ===
+
+Käesoleval leheküljel saad oma wiki nimeruumidele ja lehekülgedele lisada ning eemaldada õigusi.
+ * Vasemas paanis on näidatud kõik saada olevad nimeruumid ja leheküljed.
+ * Ülal olev vorm laseb sul vaadelda ja muuta valitud rühma või kasutaja õigusi.
+ * Allolevas tabelis näidatakse kõiki hetkel sättestatud reegleid ligipääsudele.
+Saad seda kasutada reeglite hulgi muutmiseks või kustutamiseks
+
+Mõistmaks paremini DokuWiki ligipääsu halduse toimimist, võiks abiks olla [[doku>acl|ACL-i ametliku dokumentatsiooniga]] tutvumine. \ No newline at end of file
diff --git a/lib/plugins/acl/lang/et/lang.php b/lib/plugins/acl/lang/et/lang.php
index bc4c73a16..d1a047aff 100644
--- a/lib/plugins/acl/lang/et/lang.php
+++ b/lib/plugins/acl/lang/et/lang.php
@@ -1,21 +1,30 @@
<?php
+
/**
- * Estonian language file
- *
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Oliver S6ro <seem.iges@mail.ee>
* @author Aari Juhanson <aari@vmg.vil.ee>
* @author Kaiko Kaur <kaiko@kultuur.edu.ee>
* @author kristian.kankainen@kuu.la
* @author Rivo Zängov <eraser@eraser.ee>
+ * @author Janar Leas <janar.leas@eesti.ee>
*/
$lang['admin_acl'] = 'Ligipääsukontrolli nimekirja haldamine';
-$lang['acl_group'] = 'Grupp';
-$lang['acl_user'] = 'Kasutaja';
+$lang['acl_group'] = 'Rühm:';
+$lang['acl_user'] = 'Kasutaja:';
$lang['acl_perms'] = 'Lubatud';
$lang['page'] = 'leht';
-$lang['namespace'] = 'alajaotus';
+$lang['namespace'] = 'Nimeruum';
$lang['btn_select'] = 'Vali';
+$lang['p_user_ns'] = 'Kasutaja <b class="aclgroup">%s</b> omab nimeruumis <b class="aclns">%s</b>: <i>%s</i> järgmisi õigusi.';
+$lang['p_group_ns'] = 'Rühma <b class="aclgroup">%s</b> liikmed omavad nimeruumis <b class="aclns">%s</b>: <i>%s</i> järgmisi õigusi.';
+$lang['p_choose_id'] = 'Sisesta ülal-olevasse vormi <b>kasutaja või rühm</b> nägemaks leheküljele <b class="aclpage">%s</b> sätestatud volitusi.';
+$lang['p_choose_ns'] = 'Sisesta ülal-olevasse vormi <b>kasutaja või rühm</b> nägemaks nimeruumile <b class="aclpage">%s</b> sätestatud volitusi.';
+$lang['p_inherited'] = 'Teadmiseks: Neid õigusi pole eralti määratletud, vaid on päritud teistest rühmadest või ülemast nimeruumist.';
+$lang['p_isadmin'] = 'Teadmiseks: Valitud rühm või kasutaja omab alati kõiki õigusi, kuna nii on sätestanud ülemkasutaja.';
+$lang['p_include'] = 'Kõrgemad õigused hõlmavad alamaid. Õigus loomine, üleslaadida ja kustutada rakenduvad nimeruumidele, mitte lehekülgedele.';
+$lang['where'] = 'Lehekülg/nimeruum';
$lang['who'] = 'Kasutaja/Grupp';
$lang['perm'] = 'Õigused';
$lang['acl_perm0'] = 'Pole';
diff --git a/lib/plugins/acl/lang/eu/lang.php b/lib/plugins/acl/lang/eu/lang.php
index b9285ff36..f051523d9 100644
--- a/lib/plugins/acl/lang/eu/lang.php
+++ b/lib/plugins/acl/lang/eu/lang.php
@@ -6,8 +6,8 @@
* @author Zigor Astarbe <astarbe@gmail.com>
*/
$lang['admin_acl'] = 'Atzipen Kontrol Listaren Kudeaketa';
-$lang['acl_group'] = 'Taldea';
-$lang['acl_user'] = 'Erabiltzailea';
+$lang['acl_group'] = 'Taldea:';
+$lang['acl_user'] = 'Erabiltzailea:';
$lang['acl_perms'] = 'Baimenak honetarako:';
$lang['page'] = 'Orria';
$lang['namespace'] = 'Izen-espazioa';
diff --git a/lib/plugins/acl/lang/fa/lang.php b/lib/plugins/acl/lang/fa/lang.php
index 24bebaeaf..3564f6a39 100644
--- a/lib/plugins/acl/lang/fa/lang.php
+++ b/lib/plugins/acl/lang/fa/lang.php
@@ -12,8 +12,8 @@
* @author AmirH Hassaneini <mytechmix@gmail.com>
*/
$lang['admin_acl'] = 'مدیریت کنترل دسترسی‌ها';
-$lang['acl_group'] = 'گروه';
-$lang['acl_user'] = 'کاربر';
+$lang['acl_group'] = 'گروه:';
+$lang['acl_user'] = 'کاربر:';
$lang['acl_perms'] = 'مجوز برای';
$lang['page'] = 'صفحه';
$lang['namespace'] = 'فضای‌نام';
diff --git a/lib/plugins/acl/lang/fi/lang.php b/lib/plugins/acl/lang/fi/lang.php
index 50224dfb4..2dfc35801 100644
--- a/lib/plugins/acl/lang/fi/lang.php
+++ b/lib/plugins/acl/lang/fi/lang.php
@@ -9,8 +9,8 @@
* @author Sami Olmari <sami@olmari.fi>
*/
$lang['admin_acl'] = 'Käyttöoikeudet (ACL)';
-$lang['acl_group'] = 'Ryhmä';
-$lang['acl_user'] = 'Käyttäjä';
+$lang['acl_group'] = 'Ryhmä:';
+$lang['acl_user'] = 'Käyttäjä:';
$lang['acl_perms'] = 'Oikeudet';
$lang['page'] = 'Sivu';
$lang['namespace'] = 'Nimiavaruus';
diff --git a/lib/plugins/acl/lang/fr/help.txt b/lib/plugins/acl/lang/fr/help.txt
index 081978488..9fc2af665 100644
--- a/lib/plugins/acl/lang/fr/help.txt
+++ b/lib/plugins/acl/lang/fr/help.txt
@@ -6,6 +6,6 @@ Le panneau de gauche liste toutes les catégories et les pages disponibles.
Le formulaire ci-dessus permet d'afficher et de modifier les autorisations d'un utilisateur ou d'un groupe sélectionné.
-Dans le tableau ci-dessous, toutes les listes de contrôle d'accès (ACL) actuelles sont affichées. Vous pouvez l'utiliser pour supprimer ou modifier rapidement plusieurs contrôles d'accès.
+Le tableau ci-dessous présente toutes les listes de contrôle d'accès (ACL) actuelles. Vous pouvez l'utiliser pour supprimer ou modifier rapidement plusieurs contrôles d'accès.
La lecture de [[doku>fr:acl|la documentation officielle des contrôles d'accès]] pourra vous permettre de mieux comprendre le fonctionnement du contrôle d'accès dans DokuWiki.
diff --git a/lib/plugins/acl/lang/fr/lang.php b/lib/plugins/acl/lang/fr/lang.php
index dc17cf79e..9539c5be5 100644
--- a/lib/plugins/acl/lang/fr/lang.php
+++ b/lib/plugins/acl/lang/fr/lang.php
@@ -28,8 +28,8 @@
* @author Bruno Veilleux <bruno.vey@gmail.com>
*/
$lang['admin_acl'] = 'Gestion de la liste des contrôles d\'accès (ACL)';
-$lang['acl_group'] = 'Groupe';
-$lang['acl_user'] = 'Utilisateur';
+$lang['acl_group'] = 'Groupe:';
+$lang['acl_user'] = 'Utilisateur:';
$lang['acl_perms'] = 'Autorisations pour';
$lang['page'] = 'Page';
$lang['namespace'] = 'Catégorie';
diff --git a/lib/plugins/acl/lang/gl/lang.php b/lib/plugins/acl/lang/gl/lang.php
index 3325bfd07..74d2a7943 100644
--- a/lib/plugins/acl/lang/gl/lang.php
+++ b/lib/plugins/acl/lang/gl/lang.php
@@ -7,8 +7,8 @@
* @author Rodrigo Rega <rodrigorega@gmail.com>
*/
$lang['admin_acl'] = 'Xestión da Lista de Control de Acceso (ACL)';
-$lang['acl_group'] = 'Grupo';
-$lang['acl_user'] = 'Usuario';
+$lang['acl_group'] = 'Grupo:';
+$lang['acl_user'] = 'Usuario:';
$lang['acl_perms'] = 'Permisos para';
$lang['page'] = 'Páxina';
$lang['namespace'] = 'Nome de espazo';
diff --git a/lib/plugins/acl/lang/he/lang.php b/lib/plugins/acl/lang/he/lang.php
index 6716081eb..2369b8010 100644
--- a/lib/plugins/acl/lang/he/lang.php
+++ b/lib/plugins/acl/lang/he/lang.php
@@ -10,8 +10,8 @@
* @author Yaron Shahrabani <sh.yaron@gmail.com>
*/
$lang['admin_acl'] = 'ניהול רשימת בקרת גישות';
-$lang['acl_group'] = 'קבוצה';
-$lang['acl_user'] = 'משתמש';
+$lang['acl_group'] = 'קבוצה:';
+$lang['acl_user'] = 'משתמש:';
$lang['acl_perms'] = 'הרשאות עבור';
$lang['page'] = 'דף';
$lang['namespace'] = 'מרחב שמות';
diff --git a/lib/plugins/acl/lang/hr/lang.php b/lib/plugins/acl/lang/hr/lang.php
index 8c21f1b0b..b12966c84 100644
--- a/lib/plugins/acl/lang/hr/lang.php
+++ b/lib/plugins/acl/lang/hr/lang.php
@@ -1,14 +1,15 @@
<?php
+
/**
- * Croatian language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Branko Rihtman <theney@gmail.com>
* @author Dražen Odobašić <dodobasic@gmail.com>
* @author Dejan Igrec dejan.igrec@gmail.com
*/
$lang['admin_acl'] = 'Upravljanje listom kontrole pristupa';
-$lang['acl_group'] = 'Grupa';
-$lang['acl_user'] = 'Korisnik';
+$lang['acl_group'] = 'Grupa:';
+$lang['acl_user'] = 'Korisnik:';
$lang['acl_perms'] = 'Dozvole za';
$lang['page'] = 'Stranica';
$lang['namespace'] = 'Imenski prostor';
diff --git a/lib/plugins/acl/lang/ia/lang.php b/lib/plugins/acl/lang/ia/lang.php
index f7d076539..121424c47 100644
--- a/lib/plugins/acl/lang/ia/lang.php
+++ b/lib/plugins/acl/lang/ia/lang.php
@@ -6,8 +6,8 @@
* @author Martijn Dekker <martijn@inlv.org>
*/
$lang['admin_acl'] = 'Gestion de listas de controlo de accesso';
-$lang['acl_group'] = 'Gruppo';
-$lang['acl_user'] = 'Usator';
+$lang['acl_group'] = 'Gruppo:';
+$lang['acl_user'] = 'Usator:';
$lang['acl_perms'] = 'Permissiones pro';
$lang['page'] = 'Pagina';
$lang['namespace'] = 'Spatio de nomines';
diff --git a/lib/plugins/acl/lang/id/lang.php b/lib/plugins/acl/lang/id/lang.php
index 6f619c5ec..3b0ecf446 100644
--- a/lib/plugins/acl/lang/id/lang.php
+++ b/lib/plugins/acl/lang/id/lang.php
@@ -7,8 +7,8 @@
* @author Yustinus Waruwu <juswaruwu@gmail.com>
*/
$lang['admin_acl'] = 'Manajemen Daftar Pengendali Akses';
-$lang['acl_group'] = 'Grup';
-$lang['acl_user'] = 'User';
+$lang['acl_group'] = 'Grup:';
+$lang['acl_user'] = 'User:';
$lang['acl_perms'] = 'Ijin untuk';
$lang['page'] = 'Halaman';
$lang['namespace'] = 'Namespace';
diff --git a/lib/plugins/acl/lang/is/lang.php b/lib/plugins/acl/lang/is/lang.php
index b45faa80a..13ed7bfd7 100644
--- a/lib/plugins/acl/lang/is/lang.php
+++ b/lib/plugins/acl/lang/is/lang.php
@@ -6,8 +6,8 @@
* @author Ólafur Gunnlaugsson <oli@audiotools.com>
* @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
*/
-$lang['acl_group'] = 'Hópur';
-$lang['acl_user'] = 'Notandi';
+$lang['acl_group'] = 'Hópur:';
+$lang['acl_user'] = 'Notandi:';
$lang['page'] = 'Síða';
$lang['namespace'] = 'Nafnrými';
$lang['btn_select'] = 'Veldu';
diff --git a/lib/plugins/acl/lang/it/lang.php b/lib/plugins/acl/lang/it/lang.php
index ba2d0fd32..82827510f 100644
--- a/lib/plugins/acl/lang/it/lang.php
+++ b/lib/plugins/acl/lang/it/lang.php
@@ -17,8 +17,8 @@
* @author snarchio@gmail.com
*/
$lang['admin_acl'] = 'Gestione Lista Controllo Accessi (ACL)';
-$lang['acl_group'] = 'Gruppo';
-$lang['acl_user'] = 'Utente';
+$lang['acl_group'] = 'Gruppo:';
+$lang['acl_user'] = 'Utente:';
$lang['acl_perms'] = 'Permessi per';
$lang['page'] = 'Pagina';
$lang['namespace'] = 'Categoria';
diff --git a/lib/plugins/acl/lang/ja/lang.php b/lib/plugins/acl/lang/ja/lang.php
index 61fc1ea86..203ab96d2 100644
--- a/lib/plugins/acl/lang/ja/lang.php
+++ b/lib/plugins/acl/lang/ja/lang.php
@@ -12,8 +12,8 @@
* @author Satoshi Sahara <sahara.satoshi@gmail.com>
*/
$lang['admin_acl'] = 'アクセスコントロール管理';
-$lang['acl_group'] = 'グループ';
-$lang['acl_user'] = 'ユーザー';
+$lang['acl_group'] = 'グループ:';
+$lang['acl_user'] = 'ユーザー:';
$lang['acl_perms'] = '権限を追加';
$lang['page'] = '文書';
$lang['namespace'] = '名前空間';
diff --git a/lib/plugins/acl/lang/kk/lang.php b/lib/plugins/acl/lang/kk/lang.php
index f21b93132..28984fd6d 100644
--- a/lib/plugins/acl/lang/kk/lang.php
+++ b/lib/plugins/acl/lang/kk/lang.php
@@ -4,7 +4,7 @@
*
* @author Nurgozha Kaliaskarov astana08@gmail.com
*/
-$lang['acl_group'] = 'Группа';
-$lang['acl_user'] = 'Пайдаланушы';
+$lang['acl_group'] = 'Группа:';
+$lang['acl_user'] = 'Пайдаланушы:';
$lang['page'] = 'Бет';
$lang['acl_perm1'] = 'Оқу';
diff --git a/lib/plugins/acl/lang/ko/help.txt b/lib/plugins/acl/lang/ko/help.txt
index 9baeedbb9..80069b322 100644
--- a/lib/plugins/acl/lang/ko/help.txt
+++ b/lib/plugins/acl/lang/ko/help.txt
@@ -1,8 +1,8 @@
=== 빠른 도움말: ===
현재 문서에서 위키 이름공간과 문서에 대한 접근 권한을 추가하거나 삭제할 수 있습니다.
-* 왼쪽 영역에는 선택 가능한 이름공간과 문서 목록을 보여줍니다.
-* 위쪽 입력 양식에서 선택된 사용자와 그룹의 접근 권한을 보거나 바꿀 수 있습니다.
-* 아래 테이블에서 현재 설정된 모든 접근 제어 규칙을 볼 수 있으며, 즉시 여러 규칙을 삭제하거나 바꿀 수 있습니다.
+ * 왼쪽 영역에는 선택 가능한 이름공간과 문서 목록을 보여줍니다.
+ * 위쪽 입력 양식에서 선택된 사용자와 그룹의 접근 권한을 보거나 바꿀 수 있습니다.
+ * 아래 테이블에서 현재 설정된 모든 접근 제어 규칙을 볼 수 있으며, 즉시 여러 규칙을 삭제하거나 바꿀 수 있습니다.
도쿠위키에서 접근 제어가 어떻게 동작되는지 알아보려면 [[doku>ko:acl|ACL 공식 문서]]를 읽어보시기 바랍니다. \ No newline at end of file
diff --git a/lib/plugins/acl/lang/ko/lang.php b/lib/plugins/acl/lang/ko/lang.php
index 34b93a9f4..35563ff6c 100644
--- a/lib/plugins/acl/lang/ko/lang.php
+++ b/lib/plugins/acl/lang/ko/lang.php
@@ -15,8 +15,8 @@
* @author Garam <rowain8@gmail.com>
*/
$lang['admin_acl'] = '접근 제어 목록 관리';
-$lang['acl_group'] = '그룹';
-$lang['acl_user'] = '사용자';
+$lang['acl_group'] = '그룹:';
+$lang['acl_user'] = '사용자:';
$lang['acl_perms'] = '권한';
$lang['page'] = '문서';
$lang['namespace'] = '이름공간';
@@ -33,7 +33,7 @@ $lang['p_include'] = '더 높은 접근 권한은 하위를 포함
$lang['current'] = '현재 ACL 규칙';
$lang['where'] = '문서/이름공간';
$lang['who'] = '사용자/그룹';
-$lang['perm'] = '접근 권한';
+$lang['perm'] = '권한';
$lang['acl_perm0'] = '없음';
$lang['acl_perm1'] = '읽기';
$lang['acl_perm2'] = '편집';
diff --git a/lib/plugins/acl/lang/la/lang.php b/lib/plugins/acl/lang/la/lang.php
index 941de1f79..3779ba745 100644
--- a/lib/plugins/acl/lang/la/lang.php
+++ b/lib/plugins/acl/lang/la/lang.php
@@ -5,8 +5,8 @@
* @author Massimiliano Vassalli <vassalli.max@gmail.com>
*/
$lang['admin_acl'] = 'Administratio Indicis Custodiae Aditus';
-$lang['acl_group'] = 'Grex';
-$lang['acl_user'] = 'Sodalis';
+$lang['acl_group'] = 'Grex:';
+$lang['acl_user'] = 'Sodalis:';
$lang['acl_perms'] = 'Facultas:';
$lang['page'] = 'Pagina';
$lang['namespace'] = 'Genus';
diff --git a/lib/plugins/acl/lang/lt/lang.php b/lib/plugins/acl/lang/lt/lang.php
index f11944746..ef339177b 100644
--- a/lib/plugins/acl/lang/lt/lang.php
+++ b/lib/plugins/acl/lang/lt/lang.php
@@ -8,8 +8,8 @@
* @author Arunas Vaitekunas <aras@fan.lt>
*/
$lang['admin_acl'] = 'Priėjimo Kontrolės Sąrašų valdymas';
-$lang['acl_group'] = 'Grupė';
-$lang['acl_user'] = 'Vartotojas';
+$lang['acl_group'] = 'Grupė:';
+$lang['acl_user'] = 'Vartotojas:';
$lang['acl_perms'] = 'Leidimai';
$lang['page'] = 'Puslapis';
$lang['namespace'] = 'Pavadinimas';
diff --git a/lib/plugins/acl/lang/lv/lang.php b/lib/plugins/acl/lang/lv/lang.php
index f478b32c6..c0acdd733 100644
--- a/lib/plugins/acl/lang/lv/lang.php
+++ b/lib/plugins/acl/lang/lv/lang.php
@@ -1,13 +1,13 @@
<?php
+
/**
- * latvian language file
- *
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Aivars Miška <allefm@gmail.com>
*/
$lang['admin_acl'] = 'Piekļuves tiesību vadība';
-$lang['acl_group'] = 'Grupa';
-$lang['acl_user'] = 'Lietotājs';
+$lang['acl_group'] = 'Grupa:';
+$lang['acl_user'] = 'Lietotājs:';
$lang['acl_perms'] = 'Tiesības';
$lang['page'] = 'Lapa';
$lang['namespace'] = 'Nodaļa';
diff --git a/lib/plugins/acl/lang/mk/lang.php b/lib/plugins/acl/lang/mk/lang.php
index d576c3d1d..27f41e776 100644
--- a/lib/plugins/acl/lang/mk/lang.php
+++ b/lib/plugins/acl/lang/mk/lang.php
@@ -4,8 +4,8 @@
*
* @author Dimitar Talevski <dimi3.14@gmail.com>
*/
-$lang['acl_group'] = 'Група';
-$lang['acl_user'] = 'Корисник';
+$lang['acl_group'] = 'Група:';
+$lang['acl_user'] = 'Корисник:';
$lang['acl_perms'] = 'Пермисии за';
$lang['page'] = 'Страница';
$lang['btn_select'] = 'Избери';
diff --git a/lib/plugins/acl/lang/mr/lang.php b/lib/plugins/acl/lang/mr/lang.php
index 978df758a..1094ed768 100644
--- a/lib/plugins/acl/lang/mr/lang.php
+++ b/lib/plugins/acl/lang/mr/lang.php
@@ -8,8 +8,8 @@
* @author shantanoo@gmail.com
*/
$lang['admin_acl'] = 'Access Control List व्यवस्थापन';
-$lang['acl_group'] = 'गट';
-$lang['acl_user'] = 'सदस्य';
+$lang['acl_group'] = 'गट:';
+$lang['acl_user'] = 'सदस्य:';
$lang['acl_perms'] = 'परवानगी \'च्या साठी';
$lang['page'] = 'पान';
$lang['namespace'] = 'नेमस्पेस';
diff --git a/lib/plugins/acl/lang/ne/lang.php b/lib/plugins/acl/lang/ne/lang.php
index 5e6196a30..481b39ad2 100644
--- a/lib/plugins/acl/lang/ne/lang.php
+++ b/lib/plugins/acl/lang/ne/lang.php
@@ -8,8 +8,8 @@
* @author Saroj Dhakal<lotusnagarkot@yahoo.com>
*/
$lang['admin_acl'] = 'एक्सेस कन्ट्रोल लिस्ट व्यवस्थापन';
-$lang['acl_group'] = 'समूह';
-$lang['acl_user'] = 'प्रोगकर्ता';
+$lang['acl_group'] = 'समूह:';
+$lang['acl_user'] = 'प्रोगकर्ता:';
$lang['acl_perms'] = 'को लागि अनुमति';
$lang['page'] = 'पृष्ठ';
$lang['namespace'] = 'नेमस्पेस';
diff --git a/lib/plugins/acl/lang/nl/lang.php b/lib/plugins/acl/lang/nl/lang.php
index abb81ae06..a73d13344 100644
--- a/lib/plugins/acl/lang/nl/lang.php
+++ b/lib/plugins/acl/lang/nl/lang.php
@@ -23,8 +23,8 @@
* @author Remon <no@email.local>
*/
$lang['admin_acl'] = 'Toegangsrechten';
-$lang['acl_group'] = 'Groep';
-$lang['acl_user'] = 'Gebruiker';
+$lang['acl_group'] = 'Groep:';
+$lang['acl_user'] = 'Gebruiker:';
$lang['acl_perms'] = 'Permissies voor';
$lang['page'] = 'Pagina';
$lang['namespace'] = 'Namespace';
diff --git a/lib/plugins/acl/lang/no/lang.php b/lib/plugins/acl/lang/no/lang.php
index 82cdd5eef..b9664794d 100644
--- a/lib/plugins/acl/lang/no/lang.php
+++ b/lib/plugins/acl/lang/no/lang.php
@@ -20,8 +20,8 @@
* @author Egil Hansen <egil@rosetta.no>
*/
$lang['admin_acl'] = 'Administrasjon av lister for adgangskontroll (ACL)';
-$lang['acl_group'] = 'Gruppe';
-$lang['acl_user'] = 'Bruker';
+$lang['acl_group'] = 'Gruppe:';
+$lang['acl_user'] = 'Bruker:';
$lang['acl_perms'] = 'Rettigheter for';
$lang['page'] = 'Side';
$lang['namespace'] = 'Navnerom';
diff --git a/lib/plugins/acl/lang/pl/lang.php b/lib/plugins/acl/lang/pl/lang.php
index 42ce7fdaf..4fa4e8b9d 100644
--- a/lib/plugins/acl/lang/pl/lang.php
+++ b/lib/plugins/acl/lang/pl/lang.php
@@ -16,8 +16,8 @@
* @author Aoi Karasu <aoikarasu@gmail.com>
*/
$lang['admin_acl'] = 'Zarządzanie uprawnieniami';
-$lang['acl_group'] = 'Grupa';
-$lang['acl_user'] = 'Użytkownik';
+$lang['acl_group'] = 'Grupa:';
+$lang['acl_user'] = 'Użytkownik:';
$lang['acl_perms'] = 'Uprawnienia użytkownika';
$lang['page'] = 'Strona';
$lang['namespace'] = 'Katalog';
diff --git a/lib/plugins/acl/lang/pt-br/lang.php b/lib/plugins/acl/lang/pt-br/lang.php
index ef0ae6c8b..227927524 100644
--- a/lib/plugins/acl/lang/pt-br/lang.php
+++ b/lib/plugins/acl/lang/pt-br/lang.php
@@ -22,8 +22,8 @@
* @author Victor Westmann <victor.westmann@gmail.com>
*/
$lang['admin_acl'] = 'Administração da Lista de Controles de Acesso';
-$lang['acl_group'] = 'Grupo';
-$lang['acl_user'] = 'Usuário';
+$lang['acl_group'] = 'Grupo:';
+$lang['acl_user'] = 'Usuário:';
$lang['acl_perms'] = 'Permissões para';
$lang['page'] = 'Página';
$lang['namespace'] = 'Espaço de nomes';
diff --git a/lib/plugins/acl/lang/pt/lang.php b/lib/plugins/acl/lang/pt/lang.php
index 4c2114d67..aef174612 100644
--- a/lib/plugins/acl/lang/pt/lang.php
+++ b/lib/plugins/acl/lang/pt/lang.php
@@ -11,8 +11,8 @@
* @author José Campos zecarlosdecampos@gmail.com
*/
$lang['admin_acl'] = 'Gestão de ACLs';
-$lang['acl_group'] = 'Grupo';
-$lang['acl_user'] = 'Utilizador';
+$lang['acl_group'] = 'Grupo:';
+$lang['acl_user'] = 'Utilizador:';
$lang['acl_perms'] = 'Permissão para';
$lang['page'] = 'Documento';
$lang['namespace'] = 'Namespace';
diff --git a/lib/plugins/acl/lang/ro/lang.php b/lib/plugins/acl/lang/ro/lang.php
index 4d093216b..0d281f049 100644
--- a/lib/plugins/acl/lang/ro/lang.php
+++ b/lib/plugins/acl/lang/ro/lang.php
@@ -13,8 +13,8 @@
* @author Emanuel-Emeric Andrași <em.andrasi@mandrivausers.ro>
*/
$lang['admin_acl'] = 'Managementul Listei de Control a Accesului';
-$lang['acl_group'] = 'Grup';
-$lang['acl_user'] = 'Utilizator';
+$lang['acl_group'] = 'Grup:';
+$lang['acl_user'] = 'Utilizator:';
$lang['acl_perms'] = 'Autorizare pentru';
$lang['page'] = 'Pagina';
$lang['namespace'] = 'Spaţiu de nume';
diff --git a/lib/plugins/acl/lang/ru/help.txt b/lib/plugins/acl/lang/ru/help.txt
index ecb2fe3d0..e1b76c2c7 100644
--- a/lib/plugins/acl/lang/ru/help.txt
+++ b/lib/plugins/acl/lang/ru/help.txt
@@ -5,4 +5,4 @@
* Форма выше позволяет вам просмотреть и изменить права доступа для выбранного пользователя или группы.
* Текущие права доступа отображены в таблице ниже. Вы можете использовать её для быстрого удаления или изменения правил.
-Прочтение [[doku>acl|официальной документации по ACL]] может помочь вам в полном понимании работы управления правами доступа в «ДокуВики».
+Прочтение [[doku>acl|официальной документации по правам доступа]] может помочь вам в полном понимании работы управления правами доступа в «Докувики».
diff --git a/lib/plugins/acl/lang/ru/lang.php b/lib/plugins/acl/lang/ru/lang.php
index ff4740676..b49d216f9 100644
--- a/lib/plugins/acl/lang/ru/lang.php
+++ b/lib/plugins/acl/lang/ru/lang.php
@@ -19,8 +19,8 @@
* @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
*/
$lang['admin_acl'] = 'Управление списками контроля доступа';
-$lang['acl_group'] = 'Группа';
-$lang['acl_user'] = 'Пользователь';
+$lang['acl_group'] = 'Группа:';
+$lang['acl_user'] = 'Пользователь:';
$lang['acl_perms'] = 'Права доступа для';
$lang['page'] = 'Страница';
$lang['namespace'] = 'Пространство имён';
diff --git a/lib/plugins/acl/lang/sk/lang.php b/lib/plugins/acl/lang/sk/lang.php
index 51837d4b4..001218304 100644
--- a/lib/plugins/acl/lang/sk/lang.php
+++ b/lib/plugins/acl/lang/sk/lang.php
@@ -9,8 +9,8 @@
* @author Martin Michalek <michalek.dev@gmail.com>
*/
$lang['admin_acl'] = 'Správa zoznamu prístupových práv';
-$lang['acl_group'] = 'Skupina';
-$lang['acl_user'] = 'Užívateľ';
+$lang['acl_group'] = 'Skupina:';
+$lang['acl_user'] = 'Užívateľ:';
$lang['acl_perms'] = 'Práva pre';
$lang['page'] = 'Stránka';
$lang['namespace'] = 'Menný priestor';
diff --git a/lib/plugins/acl/lang/sl/lang.php b/lib/plugins/acl/lang/sl/lang.php
index 303b18cff..84c2088e8 100644
--- a/lib/plugins/acl/lang/sl/lang.php
+++ b/lib/plugins/acl/lang/sl/lang.php
@@ -9,8 +9,8 @@
* @author Matej Urbančič (mateju@svn.gnome.org)
*/
$lang['admin_acl'] = 'Upravljanje dostopa';
-$lang['acl_group'] = 'Skupina';
-$lang['acl_user'] = 'Uporabnik';
+$lang['acl_group'] = 'Skupina:';
+$lang['acl_user'] = 'Uporabnik:';
$lang['acl_perms'] = 'Dovoljenja za';
$lang['page'] = 'Stran';
$lang['namespace'] = 'Imenski prostor';
diff --git a/lib/plugins/acl/lang/sq/lang.php b/lib/plugins/acl/lang/sq/lang.php
index 30fc99bb0..3edd70947 100644
--- a/lib/plugins/acl/lang/sq/lang.php
+++ b/lib/plugins/acl/lang/sq/lang.php
@@ -5,8 +5,8 @@
* @author Leonard Elezi leonard.elezi@depinfo.info
*/
$lang['admin_acl'] = 'Menaxhimi i Listës së Kontrollit të Aksesit';
-$lang['acl_group'] = 'Grup';
-$lang['acl_user'] = 'Përdorues';
+$lang['acl_group'] = 'Grup:';
+$lang['acl_user'] = 'Përdorues:';
$lang['acl_perms'] = 'Të drejta për';
$lang['page'] = 'Faqe';
$lang['namespace'] = 'Hapësira e Emrit';
diff --git a/lib/plugins/acl/lang/sr/lang.php b/lib/plugins/acl/lang/sr/lang.php
index 20fbb0382..0a94418c7 100644
--- a/lib/plugins/acl/lang/sr/lang.php
+++ b/lib/plugins/acl/lang/sr/lang.php
@@ -9,8 +9,8 @@
* @author Miroslav Šolti <solti.miroslav@gmail.com>
*/
$lang['admin_acl'] = 'Управљање листом контроле приступа';
-$lang['acl_group'] = 'Група';
-$lang['acl_user'] = 'Корисник';
+$lang['acl_group'] = 'Група:';
+$lang['acl_user'] = 'Корисник:';
$lang['acl_perms'] = 'Дозволе за';
$lang['page'] = 'Страница';
$lang['namespace'] = 'Именски простор';
diff --git a/lib/plugins/acl/lang/sv/lang.php b/lib/plugins/acl/lang/sv/lang.php
index f226542e6..34c1c6624 100644
--- a/lib/plugins/acl/lang/sv/lang.php
+++ b/lib/plugins/acl/lang/sv/lang.php
@@ -18,8 +18,8 @@
* @author Smorkster Andersson smorkster@gmail.com
*/
$lang['admin_acl'] = 'Hantera behörighetslistan (ACL)';
-$lang['acl_group'] = 'Grupp';
-$lang['acl_user'] = 'Användare';
+$lang['acl_group'] = 'Grupp:';
+$lang['acl_user'] = 'Användare:';
$lang['acl_perms'] = 'Behörighet för';
$lang['page'] = 'Sida';
$lang['namespace'] = 'Namnrymd';
diff --git a/lib/plugins/acl/lang/th/lang.php b/lib/plugins/acl/lang/th/lang.php
index 472c33cdc..55b707b5c 100644
--- a/lib/plugins/acl/lang/th/lang.php
+++ b/lib/plugins/acl/lang/th/lang.php
@@ -1,15 +1,16 @@
<?php
+
/**
- * Thai language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Komgrit Niyomrath <n.komgrit@gmail.com>
* @author Kittithat Arnontavilas mrtomyum@gmail.com
* @author Kittithat Arnontavilas <mrtomyum@gmail.com>
* @author Thanasak Sompaisansin <jombthep@gmail.com>
*/
$lang['admin_acl'] = 'จัดการรายชื่อเพื่อควบคุมการเข้าถึง (Access Control List:ACL)';
-$lang['acl_group'] = 'กลุ่ม';
-$lang['acl_user'] = 'ผู้ใช้';
+$lang['acl_group'] = 'กลุ่ม:';
+$lang['acl_user'] = 'ผู้ใช้:';
$lang['acl_perms'] = 'สิทธิสำหรับ';
$lang['page'] = 'เพจ';
$lang['namespace'] = 'เนมสเปซ';
diff --git a/lib/plugins/acl/lang/tr/lang.php b/lib/plugins/acl/lang/tr/lang.php
index a9699a5f9..3c3e3dbc1 100644
--- a/lib/plugins/acl/lang/tr/lang.php
+++ b/lib/plugins/acl/lang/tr/lang.php
@@ -11,8 +11,8 @@
* @author farukerdemoncel@gmail.com
*/
$lang['admin_acl'] = 'Erişim Kontrol Listesi (ACL) Yönetimi';
-$lang['acl_group'] = 'Grup';
-$lang['acl_user'] = 'Kullanıcı';
+$lang['acl_group'] = 'Grup:';
+$lang['acl_user'] = 'Kullanıcı:';
$lang['acl_perms'] = 'Şunun için yetkiler:';
$lang['page'] = 'Sayfa';
$lang['namespace'] = 'Namespace';
diff --git a/lib/plugins/acl/lang/uk/lang.php b/lib/plugins/acl/lang/uk/lang.php
index 97c66d8a2..4d8b52e1b 100644
--- a/lib/plugins/acl/lang/uk/lang.php
+++ b/lib/plugins/acl/lang/uk/lang.php
@@ -11,8 +11,8 @@
* @author Ulrikhe Lukoie <lukoie@gmail>.com
*/
$lang['admin_acl'] = 'Керування списками контролю доступу';
-$lang['acl_group'] = 'Група';
-$lang['acl_user'] = 'Користувач';
+$lang['acl_group'] = 'Група:';
+$lang['acl_user'] = 'Користувач:';
$lang['acl_perms'] = 'Права доступу для';
$lang['page'] = 'Сторінка';
$lang['namespace'] = 'Простір імен';
diff --git a/lib/plugins/acl/lang/vi/lang.php b/lib/plugins/acl/lang/vi/lang.php
index 4fc3388ff..8ca888cae 100644
--- a/lib/plugins/acl/lang/vi/lang.php
+++ b/lib/plugins/acl/lang/vi/lang.php
@@ -6,8 +6,8 @@
* @author NukeViet <admin@nukeviet.vn>
*/
$lang['admin_acl'] = 'Quản lý danh sách quyền truy cập';
-$lang['acl_group'] = 'Nhóm';
-$lang['acl_user'] = 'Thành viên';
+$lang['acl_group'] = 'Nhóm:';
+$lang['acl_user'] = 'Thành viên:';
$lang['acl_perms'] = 'Cấp phép cho';
$lang['page'] = 'Trang';
$lang['namespace'] = 'Thư mục';
diff --git a/lib/plugins/acl/lang/zh-tw/lang.php b/lib/plugins/acl/lang/zh-tw/lang.php
index a56435318..c37727212 100644
--- a/lib/plugins/acl/lang/zh-tw/lang.php
+++ b/lib/plugins/acl/lang/zh-tw/lang.php
@@ -15,8 +15,8 @@
* @author Ichirou Uchiki <syaoranhinata@gmail.com>
*/
$lang['admin_acl'] = '管理存取控制表 (ACL)';
-$lang['acl_group'] = '群組';
-$lang['acl_user'] = '使用者';
+$lang['acl_group'] = '群組:';
+$lang['acl_user'] = '使用者:';
$lang['acl_perms'] = '設定權限於';
$lang['page'] = '頁面';
$lang['namespace'] = '分類名稱';
diff --git a/lib/plugins/acl/lang/zh/lang.php b/lib/plugins/acl/lang/zh/lang.php
index 029446cca..4294e6034 100644
--- a/lib/plugins/acl/lang/zh/lang.php
+++ b/lib/plugins/acl/lang/zh/lang.php
@@ -17,8 +17,8 @@
* @author Shuo-Ting Jian <shoting@gmail.com>
*/
$lang['admin_acl'] = '访问控制列表(ACL)管理器';
-$lang['acl_group'] = '组';
-$lang['acl_user'] = '用户';
+$lang['acl_group'] = '组:';
+$lang['acl_user'] = '用户:';
$lang['acl_perms'] = '许可给';
$lang['page'] = '页面';
$lang['namespace'] = '命名空间';
diff --git a/lib/plugins/acl/plugin.info.txt b/lib/plugins/acl/plugin.info.txt
index 029dc82e7..cb8fe7e8e 100644
--- a/lib/plugins/acl/plugin.info.txt
+++ b/lib/plugins/acl/plugin.info.txt
@@ -1,7 +1,7 @@
base acl
author Andreas Gohr
email andi@splitbrain.org
-date 2013-02-17
+date 2014-06-04
name ACL Manager
desc Manage Page Access Control Lists
url http://dokuwiki.org/plugin:acl
diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php
index b04735639..b38b591a3 100644
--- a/lib/plugins/auth.php
+++ b/lib/plugins/auth.php
@@ -229,14 +229,15 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
* at least these fields:
*
* name string full name of the user
- * mail string email addres of the user
+ * mail string email address of the user
* grps array list of groups the user is in
*
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $user the user name
+ * @param bool $requireGroups whether or not the returned data must include groups
* @return array containing user data or false
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
if(!$this->cando['external']) msg("no valid authorisation system in use", -1);
return false;
}
diff --git a/lib/plugins/authad/action.php b/lib/plugins/authad/action.php
index e69de29bb..97be9897e 100644
--- a/lib/plugins/authad/action.php
+++ b/lib/plugins/authad/action.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * DokuWiki Plugin addomain (Action Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+/**
+ * Class action_plugin_addomain
+ */
+class action_plugin_authad extends DokuWiki_Action_Plugin {
+
+ /**
+ * Registers a callback function for a given event
+ */
+ public function register(Doku_Event_Handler &$controller) {
+
+ $controller->register_hook('AUTH_LOGIN_CHECK', 'BEFORE', $this, 'handle_auth_login_check');
+ $controller->register_hook('HTML_LOGINFORM_OUTPUT', 'BEFORE', $this, 'handle_html_loginform_output');
+
+ }
+
+ /**
+ * Adds the selected domain as user postfix when attempting a login
+ *
+ * @param Doku_Event $event
+ * @param array $param
+ */
+ public function handle_auth_login_check(Doku_Event &$event, $param) {
+ global $INPUT;
+
+ /** @var auth_plugin_authad $auth */
+ global $auth;
+ if(!is_a($auth, 'auth_plugin_authad')) return; // AD not even used
+
+ if($INPUT->str('dom')) {
+ $usr = $auth->cleanUser($event->data['user']);
+ $dom = $auth->_userDomain($usr);
+ if(!$dom) {
+ $usr = "$usr@".$INPUT->str('dom');
+ }
+ $INPUT->post->set('u', $usr);
+ $event->data['user'] = $usr;
+ }
+ }
+
+ /**
+ * Shows a domain selection in the login form when more than one domain is configured
+ *
+ * @param Doku_Event $event
+ * @param array $param
+ */
+ public function handle_html_loginform_output(Doku_Event &$event, $param) {
+ global $INPUT;
+ /** @var auth_plugin_authad $auth */
+ global $auth;
+ if(!is_a($auth, 'auth_plugin_authad')) return; // AD not even used
+ $domains = $auth->_getConfiguredDomains();
+ if(count($domains) <= 1) return; // no choice at all
+
+ /** @var Doku_Form $form */
+ $form =& $event->data;
+
+ // any default?
+ $dom = '';
+ if($INPUT->has('u')) {
+ $usr = $auth->cleanUser($INPUT->str('u'));
+ $dom = $auth->_userDomain($usr);
+
+ // update user field value
+ if($dom) {
+ $usr = $auth->_userName($usr);
+ $pos = $form->findElementByAttribute('name', 'u');
+ $ele =& $form->getElementAt($pos);
+ $ele['value'] = $usr;
+ }
+ }
+
+ // add select box
+ $element = form_makeListboxField('dom', $domains, $dom, $this->getLang('domain'), '', 'block');
+ $pos = $form->findElementByAttribute('name', 'p');
+ $form->insertElement($pos + 1, $element);
+ }
+
+}
+
+// vim:ts=4:sw=4:et: \ No newline at end of file
diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index a0fec7b52..a3119dda6 100644
--- a/lib/plugins/authad/auth.php
+++ b/lib/plugins/authad/auth.php
@@ -177,9 +177,10 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
*
* @author James Van Lommel <james@nosq.com>
* @param string $user
+ * @param bool $requireGroups (optional) - ignored, groups are always supplied by this plugin
* @return array
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
global $conf;
global $lang;
global $ID;
@@ -512,6 +513,31 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
}
/**
+ * Returns a list of configured domains
+ *
+ * The default domain has an empty string as key
+ *
+ * @return array associative array(key => domain)
+ */
+ public function _getConfiguredDomains() {
+ $domains = array();
+ if(empty($this->conf['account_suffix'])) return $domains; // not configured yet
+
+ // add default domain, using the name from account suffix
+ $domains[''] = ltrim($this->conf['account_suffix'], '@');
+
+ // find additional domains
+ foreach($this->conf as $key => $val) {
+ if(is_array($val) && isset($val['account_suffix'])) {
+ $domains[$key] = ltrim($val['account_suffix'], '@');
+ }
+ }
+ ksort($domains);
+
+ return $domains;
+ }
+
+ /**
* Check provided user and userinfo for matching patterns
*
* The patterns are set up with $this->_constructPattern()
diff --git a/lib/plugins/authad/lang/ar/lang.php b/lib/plugins/authad/lang/ar/lang.php
new file mode 100644
index 000000000..e0ba7681a
--- /dev/null
+++ b/lib/plugins/authad/lang/ar/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamed Belhsine <b.mohamed897@gmail.com>
+ */
+$lang['domain'] = 'مجال تسجيل الدخول';
diff --git a/lib/plugins/authad/lang/cs/lang.php b/lib/plugins/authad/lang/cs/lang.php
new file mode 100644
index 000000000..8119d208a
--- /dev/null
+++ b/lib/plugins/authad/lang/cs/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['domain'] = 'Přihlašovací doména';
diff --git a/lib/plugins/authad/lang/de/lang.php b/lib/plugins/authad/lang/de/lang.php
new file mode 100644
index 000000000..eea511d1b
--- /dev/null
+++ b/lib/plugins/authad/lang/de/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+$lang['domain'] = 'Anmelde-Domäne';
diff --git a/lib/plugins/authad/lang/en/lang.php b/lib/plugins/authad/lang/en/lang.php
new file mode 100644
index 000000000..e2967d662
--- /dev/null
+++ b/lib/plugins/authad/lang/en/lang.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * English language file for addomain plugin
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+
+$lang['domain'] = 'Logon Domain';
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/authad/lang/eo/lang.php b/lib/plugins/authad/lang/eo/lang.php
new file mode 100644
index 000000000..be4abc123
--- /dev/null
+++ b/lib/plugins/authad/lang/eo/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Robert Bogenschneider <bogi@uea.org>
+ */
+$lang['domain'] = 'Ensaluta domajno';
diff --git a/lib/plugins/authad/lang/es/lang.php b/lib/plugins/authad/lang/es/lang.php
new file mode 100644
index 000000000..c5b242cba
--- /dev/null
+++ b/lib/plugins/authad/lang/es/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Juan De La Cruz <juann.dlc@gmail.com>
+ */
+$lang['domain'] = 'Dominio de inicio';
diff --git a/lib/plugins/authad/lang/es/settings.php b/lib/plugins/authad/lang/es/settings.php
index 98b78056b..970259c9c 100644
--- a/lib/plugins/authad/lang/es/settings.php
+++ b/lib/plugins/authad/lang/es/settings.php
@@ -5,11 +5,19 @@
*
* @author monica <may.dorado@gmail.com>
* @author Antonio Bueno <atnbueno@gmail.com>
+ * @author Juan De La Cruz <juann.dlc@gmail.com>
+ * @author Eloy <ej.perezgomez@gmail.com>
*/
-$lang['account_suffix'] = 'Su cuenta, sufijo. Ejem. <code> @ my.domain.org </ code>';
+$lang['account_suffix'] = 'Su cuenta, sufijo. Ejem. <code> @ my.domain.org </code>';
$lang['base_dn'] = 'Su base DN. Ejem. <code>DC=my,DC=dominio,DC=org</code>';
$lang['domain_controllers'] = 'Una lista separada por coma de los controladores de dominios. Ejem. <code>srv1.dominio.org,srv2.dominio.org</code>';
$lang['admin_username'] = 'Un usuario con privilegios de Active Directory con acceso a los datos de cualquier otro usuario. Opcional, pero es necesario para determinadas acciones como el envío de suscripciones de correos electrónicos.';
$lang['admin_password'] = 'La contraseña del usuario anterior.';
$lang['sso'] = 'En caso de inicio de sesión usará ¿Kerberos o NTLM?';
$lang['sso_charset'] = 'La codificación con que tu servidor web pasará el nombre de usuario Kerberos o NTLM. Si es UTF-8 o latin-1 dejar en blanco. Requiere la extensión iconv.';
+$lang['real_primarygroup'] = 'Resolver el grupo primario real en vez de asumir "Domain Users" (más lento)';
+$lang['use_ssl'] = '¿Usar conexión SSL? Si se usa, no habilitar TLS abajo.';
+$lang['use_tls'] = '¿Usar conexión TLS? Si se usa, no habilitar SSL arriba.';
+$lang['debug'] = 'Mostrar información adicional de depuración sobre los errores?';
+$lang['expirywarn'] = 'Días por adelantado para avisar al usuario de que contraseña expirará. 0 para deshabilitar.';
+$lang['additional'] = 'Una lista separada por comas de atributos AD adicionales a obtener de los datos de usuario. Usado por algunos plugins.';
diff --git a/lib/plugins/authad/lang/fa/lang.php b/lib/plugins/authad/lang/fa/lang.php
new file mode 100644
index 000000000..1ea73cfdb
--- /dev/null
+++ b/lib/plugins/authad/lang/fa/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Hamid <zarrabi@sharif.edu>
+ */
+$lang['domain'] = 'دامنه‌ی ورود';
diff --git a/lib/plugins/authad/lang/fr/lang.php b/lib/plugins/authad/lang/fr/lang.php
new file mode 100644
index 000000000..2de362e41
--- /dev/null
+++ b/lib/plugins/authad/lang/fr/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author ggallon <gwenael.gallon@mac.com>
+ */
+$lang['domain'] = 'Domaine de connexion';
diff --git a/lib/plugins/authad/lang/hr/lang.php b/lib/plugins/authad/lang/hr/lang.php
new file mode 100644
index 000000000..f750c91b5
--- /dev/null
+++ b/lib/plugins/authad/lang/hr/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['domain'] = 'Domena za prijavu';
diff --git a/lib/plugins/authad/lang/hr/settings.php b/lib/plugins/authad/lang/hr/settings.php
new file mode 100644
index 000000000..a024b10b7
--- /dev/null
+++ b/lib/plugins/authad/lang/hr/settings.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['account_suffix'] = 'Vaš sufiks korisničkog imena. Npr. <code>@my.domain.org</code>';
+$lang['base_dn'] = 'Vaš bazni DN. Npr. <code>DC=my,DC=domain,DC=org</code>';
+$lang['domain_controllers'] = 'Zarezom odvojena lista domenskih kontrolera. Npr. <code>srv1.domain.org,srv2.domain.org</code>';
+$lang['admin_username'] = 'Privilegirani korisnik Active Directory-a s pristupom svim korisničkim podacima. Opcionalno, ali potrebno za određene akcije kao što je slanje pretplatničkih poruka.';
+$lang['admin_password'] = 'Lozinka gore navedenoga korisnika.';
+$lang['sso'] = 'Da li će Single-Sign-On prijava biti korištena preko Kerberosa ili NTLM-a?';
+$lang['sso_charset'] = 'Znakovni set koji će se koristiti Kerberos ili NTLM pri slanju imena korisnika. Prazno za UTF-8 ili latin-1. Zahtjeva iconv ekstenziju.';
+$lang['real_primarygroup'] = 'Da li da se razluči stvarna primarna grupa umjesto pretpostavke da je to "Domain Users" (sporije !).';
+$lang['use_ssl'] = 'Koristi SSL vezu? Ako da, dolje ne koristi TLS!';
+$lang['use_tls'] = 'Koristi TLS vezu? Ako da, gore ne koristi SSL!';
+$lang['debug'] = 'Prikaži dodatni debug ispis u slučaju greške? ';
+$lang['expirywarn'] = 'Upozori korisnike o isteku lozinke ovoliko dana. 0 za onemogućavanje. ';
+$lang['additional'] = 'Zarezom odvojena lista dodatnih AD atributa koji se dohvaćaju iz korisničkih podataka. Koristi se u nekim dodatcima (plugin).';
diff --git a/lib/plugins/authad/lang/hu/lang.php b/lib/plugins/authad/lang/hu/lang.php
new file mode 100644
index 000000000..7bb6084b0
--- /dev/null
+++ b/lib/plugins/authad/lang/hu/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Marton Sebok <sebokmarton@gmail.com>
+ */
+$lang['domain'] = 'Bejelentkezési tartomány';
diff --git a/lib/plugins/authad/lang/hu/settings.php b/lib/plugins/authad/lang/hu/settings.php
index 05acbdc2d..be0592d68 100644
--- a/lib/plugins/authad/lang/hu/settings.php
+++ b/lib/plugins/authad/lang/hu/settings.php
@@ -11,11 +11,11 @@ $lang['base_dn'] = 'Bázis DN, pl. <code>DC=my,DC=domain,DC=org</c
$lang['domain_controllers'] = 'Tartománykezelők listája vesszővel elválasztva, pl. <code>srv1.domain.org,srv2.domain.org</code>.';
$lang['admin_username'] = 'Privilegizált AD felhasználó, aki az összes feéhasználó adatait elérheti. Elhagyható, de bizonyos funkciókhoz, például a feliratkozási e-mailek kiküldéséhez szükséges.';
$lang['admin_password'] = 'Ehhez tartozó jelszó.';
-$lang['sso'] = 'Single-Sign-On Kerberos-szal vagy NTML használata?';
+$lang['sso'] = 'Kerberos egyszeri bejelentkezés vagy NTLM használata?';
$lang['sso_charset'] = 'A webkiszolgáló karakterkészlete megfelel a Kerberos- és NTLM-felhasználóneveknek. Üres UTF-8 és Latin-1-hez. Szükséges az iconv bővítmény.';
$lang['real_primarygroup'] = 'A valódi elsődleges csoport feloldása a "Tartományfelhasználók" csoport használata helyett? (lassabb)';
$lang['use_ssl'] = 'SSL használata? Ha használjuk, tiltsuk le a TLS-t!';
$lang['use_tls'] = 'TLS használata? Ha használjuk, tiltsuk le az SSL-t!';
-$lang['debug'] = 'Debug-üzenetek megjelenítése?';
+$lang['debug'] = 'További hibakeresési üzenetek megjelenítése hiba esetén';
$lang['expirywarn'] = 'Felhasználók értesítése ennyi nappal a jelszavuk lejárata előtt. 0 a funkció kikapcsolásához.';
-$lang['additional'] = 'Vesszővel elválasztott lista a további AD attribútumok lekéréshez. Néhány plugin használhatja.';
+$lang['additional'] = 'Vesszővel elválasztott lista a további AD attribútumok lekéréséhez. Néhány bővítmény használhatja.';
diff --git a/lib/plugins/authad/lang/ja/lang.php b/lib/plugins/authad/lang/ja/lang.php
new file mode 100644
index 000000000..b40aa5da3
--- /dev/null
+++ b/lib/plugins/authad/lang/ja/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author PzF_X <jp_minecraft@yahoo.co.jp>
+ */
+$lang['domain'] = 'ログオン時のドメイン';
diff --git a/lib/plugins/authad/lang/ja/settings.php b/lib/plugins/authad/lang/ja/settings.php
index f308249ef..118e8348c 100644
--- a/lib/plugins/authad/lang/ja/settings.php
+++ b/lib/plugins/authad/lang/ja/settings.php
@@ -5,6 +5,7 @@
*
* @author Satoshi Sahara <sahara.satoshi@gmail.com>
* @author Hideaki SAWADA <chuno@live.jp>
+ * @author PzF_X <jp_minecraft@yahoo.co.jp>
*/
$lang['account_suffix'] = 'アカウントの接尾語。例:<code>@my.domain.org</code>';
$lang['base_dn'] = 'ベースDN。例:<code>DC=my,DC=domain,DC=org</code>';
@@ -12,6 +13,7 @@ $lang['domain_controllers'] = 'ドメインコントローラのカンマ区
$lang['admin_username'] = '全ユーザーデータへのアクセス権のある特権Active Directoryユーザー。任意ですが、メール通知の登録等の特定の動作に必要。';
$lang['admin_password'] = '上記ユーザーのパスワード';
$lang['sso'] = 'Kerberos か NTLM を使ったシングルサインオン(SSO)をしますか?';
+$lang['sso_charset'] = 'サーバーは空のUTF-8かLatin-1でKerberosかNTLMユーザネームを送信します。iconv拡張モジュールが必要です。';
$lang['real_primarygroup'] = '"Domain Users" を仮定する代わりに本当のプライマリグループを解決する(低速)';
$lang['use_ssl'] = 'SSL接続を使用しますか?使用した場合、下のSSLを有効にしないでください。';
$lang['use_tls'] = 'TLS接続を使用しますか?使用した場合、上のSSLを有効にしないでください。';
diff --git a/lib/plugins/authad/lang/ko/lang.php b/lib/plugins/authad/lang/ko/lang.php
new file mode 100644
index 000000000..5a2416b2c
--- /dev/null
+++ b/lib/plugins/authad/lang/ko/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['domain'] = '로그온 도메인';
diff --git a/lib/plugins/authad/lang/lv/lang.php b/lib/plugins/authad/lang/lv/lang.php
new file mode 100644
index 000000000..74becf756
--- /dev/null
+++ b/lib/plugins/authad/lang/lv/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['domain'] = 'Iežurnālēšanās domēns';
diff --git a/lib/plugins/authad/lang/lv/settings.php b/lib/plugins/authad/lang/lv/settings.php
new file mode 100644
index 000000000..5272d27d0
--- /dev/null
+++ b/lib/plugins/authad/lang/lv/settings.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['account_suffix'] = 'Jūsu konta sufikss. Piemēram, <code>@my.domain.org</code>';
+$lang['domain_controllers'] = 'Ar komatiem atdalīts domēna kontroleru saraksts. Piemēram, <code>srv1.domain.org,srv2.domain.org</code>';
+$lang['admin_password'] = 'Minētā lietotāja parole.';
+$lang['expirywarn'] = 'Cik dienas iepriekš brīdināt lietotāju par paroles termiņa beigām. Ierakstīt 0, lai atspējotu.';
diff --git a/lib/plugins/authad/lang/nl/lang.php b/lib/plugins/authad/lang/nl/lang.php
new file mode 100644
index 000000000..ea8419069
--- /dev/null
+++ b/lib/plugins/authad/lang/nl/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Rene <wllywlnt@yahoo.com>
+ */
+$lang['domain'] = 'Inlog Domein';
diff --git a/lib/plugins/authad/lang/no/settings.php b/lib/plugins/authad/lang/no/settings.php
new file mode 100644
index 000000000..bab5ce67d
--- /dev/null
+++ b/lib/plugins/authad/lang/no/settings.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Christopher Schive <chschive@frisurf.no>
+ */
+$lang['admin_password'] = 'Passordet til brukeren over.';
+$lang['expirywarn'] = 'Antall dager på forhånd brukeren varsles om at passordet utgår. 0 for å deaktivere.';
diff --git a/lib/plugins/authad/lang/pl/settings.php b/lib/plugins/authad/lang/pl/settings.php
index 4e397fc98..91cadca6f 100644
--- a/lib/plugins/authad/lang/pl/settings.php
+++ b/lib/plugins/authad/lang/pl/settings.php
@@ -5,6 +5,7 @@
*
* @author Tomasz Bosak <bosak.tomasz@gmail.com>
* @author Paweł Jan Czochański <czochanski@gmail.com>
+ * @author Mati <mackosa@wp.pl>
*/
$lang['account_suffix'] = 'Przyrostek twojej nazwy konta np. <code>@my.domain.org</code>';
$lang['base_dn'] = 'Twoje bazowe DN. Na przykład: <code>DC=my,DC=domain,DC=org</code>';
diff --git a/lib/plugins/authad/lang/pt-br/lang.php b/lib/plugins/authad/lang/pt-br/lang.php
new file mode 100644
index 000000000..5fa963d4e
--- /dev/null
+++ b/lib/plugins/authad/lang/pt-br/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Felipe Castro <fefcas@gmail.com>
+ */
+$lang['domain'] = 'Domínio de "Logon"';
diff --git a/lib/plugins/authad/lang/pt/lang.php b/lib/plugins/authad/lang/pt/lang.php
new file mode 100644
index 000000000..f307bc901
--- /dev/null
+++ b/lib/plugins/authad/lang/pt/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Paulo Silva <paulotsilva@yahoo.com>
+ */
+$lang['domain'] = 'Domínio de Início de Sessão';
diff --git a/lib/plugins/authad/lang/pt/settings.php b/lib/plugins/authad/lang/pt/settings.php
index 45eff5e96..dc60d7259 100644
--- a/lib/plugins/authad/lang/pt/settings.php
+++ b/lib/plugins/authad/lang/pt/settings.php
@@ -4,7 +4,12 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author André Neves <drakferion@gmail.com>
+ * @author Murilo <muriloricci@hotmail.com>
+ * @author Paulo Silva <paulotsilva@yahoo.com>
*/
+$lang['account_suffix'] = 'O sufixo da sua conta. Por exemplo, <code>@my.domain.org</code>';
+$lang['domain_controllers'] = 'Uma lista separada por vírgulas de Controladores de Domínio (AD DC). Ex.: <code>srv1.domain.org,srv2.domain.org</code>';
+$lang['admin_username'] = 'Um utilizador com privilégios na Active Directory que tenha acesso aos dados de todos os outros utilizadores. Opcional, mas necessário para certas ações como enviar emails de subscrição.';
$lang['admin_password'] = 'A senha para o utilizador acima.';
$lang['sso'] = 'Deve ser usado o Single-Sign-On via Kerberos ou NTLM?';
$lang['use_ssl'] = 'Usar ligação SSL? Se usada, não ative TLS abaixo.';
diff --git a/lib/plugins/authad/lang/ru/lang.php b/lib/plugins/authad/lang/ru/lang.php
new file mode 100644
index 000000000..6f3c03e39
--- /dev/null
+++ b/lib/plugins/authad/lang/ru/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ */
+$lang['domain'] = 'Домен';
diff --git a/lib/plugins/authad/lang/ru/settings.php b/lib/plugins/authad/lang/ru/settings.php
index e662300d7..c9c6d9f88 100644
--- a/lib/plugins/authad/lang/ru/settings.php
+++ b/lib/plugins/authad/lang/ru/settings.php
@@ -7,7 +7,9 @@
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
* @author Artur <ncuxxx@gmail.com>
* @author Erli Moen <evseev.jr@gmail.com>
+ * @author Владимир <id37736@yandex.ru>
*/
+$lang['account_suffix'] = 'Суффикс вашего аккаунта типа <code>@my.domain.org</code>';
$lang['domain_controllers'] = 'Список DNS-серверов, разделенных запятой. Например:<code>srv1.domain.org,srv2.domain.org</code>';
$lang['admin_password'] = 'Пароль для указанного пользователя.';
$lang['sso'] = 'Использовать SSO (Single-Sign-On) через Kerberos или NTLM?';
diff --git a/lib/plugins/authad/lang/sl/settings.php b/lib/plugins/authad/lang/sl/settings.php
index bae467d6d..5849ea431 100644
--- a/lib/plugins/authad/lang/sl/settings.php
+++ b/lib/plugins/authad/lang/sl/settings.php
@@ -4,5 +4,8 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author matej <mateju@svn.gnome.org>
+ * @author Jernej Vidmar <jernej.vidmar@vidmarboehm.com>
*/
+$lang['admin_password'] = 'Geslo zgoraj omenjenega uporabnika';
+$lang['use_tls'] = 'Uporabi TLS povezavo? Če da, ne vključi SSL povezave zgoraj.';
$lang['debug'] = 'Ali naj bodo prikazane dodatne podrobnosti napak?';
diff --git a/lib/plugins/authad/lang/zh-tw/lang.php b/lib/plugins/authad/lang/zh-tw/lang.php
new file mode 100644
index 000000000..6ad0947a2
--- /dev/null
+++ b/lib/plugins/authad/lang/zh-tw/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author June-Hao Hou <junehao@gmail.com>
+ */
+$lang['domain'] = '登入網域';
diff --git a/lib/plugins/authad/lang/zh-tw/settings.php b/lib/plugins/authad/lang/zh-tw/settings.php
index bd5d9413a..42cd8c96b 100644
--- a/lib/plugins/authad/lang/zh-tw/settings.php
+++ b/lib/plugins/authad/lang/zh-tw/settings.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author syaoranhinata@gmail.com
+ * @author June-Hao Hou <junehao@gmail.com>
*/
$lang['account_suffix'] = '您的帳號後綴。如: <code>@my.domain.org</code>';
$lang['base_dn'] = '您的基本識別名。如: <code>DC=my,DC=domain,DC=org</code>';
@@ -11,6 +12,7 @@ $lang['domain_controllers'] = '以逗號分隔的域名控制器列表。如
$lang['admin_username'] = 'Active Directory 的特權使用者,可以查看所有使用者的數據。(非必要,但對發送訂閱郵件等活動來說,這是必須的。)';
$lang['admin_password'] = '上述使用者的密碼。';
$lang['sso'] = '是否使用 Kerberos 或 NTLM 的單一登入系統 (Single-Sign-On)?';
+$lang['sso_charset'] = '你的網站伺服器傳遞 Kerberos 或 NTML 帳號名稱所用的語系編碼。空白表示 UTF-8 或 latin-1。此設定需要用到 iconv 套件。';
$lang['real_primarygroup'] = '是否視作真正的主要群組,而不是假設為網域使用者 (比較慢)';
$lang['use_ssl'] = '使用 SSL 連接嗎?如果要使用,請不要啟用下方的 TLS。';
$lang['use_tls'] = '使用 TLS 連接嗎?如果要使用,請不要啟用上方的 SSL。';
diff --git a/lib/plugins/authad/lang/zh/lang.php b/lib/plugins/authad/lang/zh/lang.php
new file mode 100644
index 000000000..2a05aa168
--- /dev/null
+++ b/lib/plugins/authad/lang/zh/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['domain'] = '登录域';
diff --git a/lib/plugins/authad/plugin.info.txt b/lib/plugins/authad/plugin.info.txt
index 3af1ddfbe..dc0629189 100644
--- a/lib/plugins/authad/plugin.info.txt
+++ b/lib/plugins/authad/plugin.info.txt
@@ -1,7 +1,7 @@
base authad
author Andreas Gohr
email andi@splitbrain.org
-date 2013-04-25
+date 2014-04-03
name Active Directory Auth Plugin
desc Provides user authentication against a Microsoft Active Directory
url http://www.dokuwiki.org/plugin:authad
diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php
index 6c3637e15..b22b82ecc 100644
--- a/lib/plugins/authldap/auth.php
+++ b/lib/plugins/authldap/auth.php
@@ -36,8 +36,8 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
return;
}
- // auth_ldap currently just handles authentication, so no
- // capabilities are set
+ // Add the capabilities to change the password
+ $this->cando['modPass'] = true;
}
/**
@@ -103,7 +103,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
return true;
} else {
// See if we can find the user
- $info = $this->getUserData($user, true);
+ $info = $this->_getUserData($user, true);
if(empty($info['dn'])) {
return false;
} else {
@@ -146,10 +146,19 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
* @author Steffen Schoch <schoch@dsb.net>
*
* @param string $user
+ * @param bool $requireGroups (optional) - ignored, groups are always supplied by this plugin
+ * @return array containing user data or false
+ */
+ public function getUserData($user, $requireGroups=true) {
+ return $this->_getUserData($user);
+ }
+
+ /**
+ * @param string $user
* @param bool $inbind authldap specific, true if in bind phase
* @return array containing user data or false
*/
- public function getUserData($user, $inbind = false) {
+ protected function _getUserData($user, $inbind = false) {
global $conf;
if(!$this->_openLDAP()) return false;
@@ -264,6 +273,62 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
}
/**
+ * Definition of the function modifyUser in order to modify the password
+ */
+
+ function modifyUser($user,$changes){
+
+ // open the connection to the ldap
+ if(!$this->_openLDAP()){
+ msg('LDAP cannot connect: '. htmlspecialchars(ldap_error($this->con)));
+ return false;
+ }
+
+ // find the information about the user, in particular the "dn"
+ $info = $this->getUserData($user,true);
+ if(empty($info['dn'])) {
+ msg('LDAP cannot find your user dn');
+ return false;
+ }
+ $dn = $info['dn'];
+
+ // find the old password of the user
+ list($loginuser,$loginsticky,$loginpass) = auth_getCookie();
+ if ($loginuser !== null) { // the user is currently logged in
+ $secret = auth_cookiesalt(!$loginsticky, true);
+ $pass = auth_decrypt($loginpass, $secret);
+
+ // bind with the ldap
+ if(!@ldap_bind($this->con, $dn, $pass)){
+ msg('LDAP user bind failed: '. htmlspecialchars($dn) .': '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
+ return false;
+ }
+ } elseif ($this->getConf('binddn') && $this->getConf('bindpw')) {
+ // we are changing the password on behalf of the user (eg: forgotten password)
+ // bind with the superuser ldap
+ if (!@ldap_bind($this->con, $this->getConf('binddn'), $this->getConf('bindpw'))){
+ $this->_debug('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
+ return false;
+ }
+ }
+ else {
+ return false; // no otherway
+ }
+
+ // Generate the salted hashed password for LDAP
+ $phash = new PassHash();
+ $hash = $phash->hash_ssha($changes['pass']);
+
+ // change the password
+ if(!@ldap_mod_replace($this->con, $dn,array('userpassword' => $hash))){
+ msg('LDAP mod replace failed: '. htmlspecialchars($dn) .': '.htmlspecialchars(ldap_error($this->con)));
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
* Most values in LDAP are case-insensitive
*
* @return bool
diff --git a/lib/plugins/authldap/lang/es/settings.php b/lib/plugins/authldap/lang/es/settings.php
index f8c3ad014..6991546d3 100644
--- a/lib/plugins/authldap/lang/es/settings.php
+++ b/lib/plugins/authldap/lang/es/settings.php
@@ -4,8 +4,22 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Antonio Bueno <atnbueno@gmail.com>
+ * @author Eloy <ej.perezgomez@gmail.com>
*/
+$lang['server'] = 'Tu servidor LDAP. Puede ser el nombre del host (<code>localhost</code>) o una URL completa (<code>ldap://server.tld:389</code>)';
+$lang['port'] = 'Servidor LDAP en caso de que no se diera la URL completa anteriormente.';
+$lang['usertree'] = 'Donde encontrar cuentas de usuario. Ej. <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree'] = 'Donde encontrar grupos de usuarios. Ej. <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter'] = 'Filtro LDAP para la busqueda de cuentas de usuario. P. E. <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter'] = 'Filtro LDAP para la busqueda de grupos. P. E. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version'] = 'La versión del protocolo a usar. Puede que necesites poner esto a <code>3</code>';
$lang['starttls'] = 'Usar conexiones TLS?';
+$lang['referrals'] = '¿Deben ser seguidas las referencias?';
+$lang['deref'] = '¿Cómo desreferenciar los alias?';
+$lang['bindpw'] = 'Contraseña del usuario de arriba.';
+$lang['userscope'] = 'Limitar ámbito de búsqueda para búsqueda de usuarios';
+$lang['groupscope'] = 'Limitar ámbito de búsqueda para búsqueda de grupos';
+$lang['groupkey'] = 'Pertenencia al grupo desde cualquier atributo de usuario (en lugar de grupos AD estándar) p.e., grupo a partir departamento o número de teléfono';
$lang['debug'] = 'Mostrar información adicional para depuración de errores';
$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
diff --git a/lib/plugins/authldap/lang/et/settings.php b/lib/plugins/authldap/lang/et/settings.php
new file mode 100644
index 000000000..f4933b6bf
--- /dev/null
+++ b/lib/plugins/authldap/lang/et/settings.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Janar Leas <janar.leas@eesti.ee>
+ */
+$lang['grouptree'] = 'Kus kohast kasutaja rühmi otsida. Nt. <code>ou=Rühm, dc=server, dc=tld</code>';
+$lang['groupscope'] = 'Piiritle otsingu ulatus rühma otsinguga';
diff --git a/lib/plugins/authldap/lang/hr/settings.php b/lib/plugins/authldap/lang/hr/settings.php
new file mode 100644
index 000000000..cb8df7218
--- /dev/null
+++ b/lib/plugins/authldap/lang/hr/settings.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['server'] = 'Vaš LDAP server. Upišite ili naziv računala (<code>localhost</code>) ili puni URL (<code>ldap://server.tld:389</code>)';
+$lang['port'] = 'LDAP server port, ako gore nije specificiran puni URL.';
+$lang['usertree'] = 'Gdje da nađem korisničke prijave. Npr. <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree'] = 'Gdje da nađem korisničke grupe. Npr. <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter'] = 'LDAP filter za pretragu korisničkih prijava. Npr. <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter'] = 'LDAP filter za pretragu grupa. Npr. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version'] = 'Protokol koji se koristi. Možda će te trebati postaviti na <code>3</code>';
+$lang['starttls'] = 'Korisni TLS vezu?';
+$lang['referrals'] = 'Da li da slijedim uputnice?';
+$lang['deref'] = 'Kako da razlikujem aliase?';
+$lang['binddn'] = 'DN opcionalnog korisnika ako anonimni korisnik nije dovoljan. Npr. <code>cn=admin, dc=my, dc=home</code>';
+$lang['bindpw'] = 'Lozinka gore navedenog korisnika';
+$lang['userscope'] = 'Ograniči područje za pretragu korisnika';
+$lang['groupscope'] = 'Ograniči područje za pretragu grupa';
+$lang['groupkey'] = 'Članstvo grupa iz svih atributa korisnika (umjesto standardnih AD grupa) npr. grupa iz odjela ili telefonskog broja';
+$lang['debug'] = 'Prikaži dodatne informacije u slučaju greške';
+$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
+$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
+$lang['deref_o_2'] = 'LDAP_DEREF_FINDING';
+$lang['deref_o_3'] = 'LDAP_DEREF_ALWAYS';
diff --git a/lib/plugins/authldap/lang/hu/settings.php b/lib/plugins/authldap/lang/hu/settings.php
index 041f82755..1e6608dab 100644
--- a/lib/plugins/authldap/lang/hu/settings.php
+++ b/lib/plugins/authldap/lang/hu/settings.php
@@ -4,9 +4,10 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Marton Sebok <sebokmarton@gmail.com>
+ * @author Marina Vladi <deldadam@gmail.com>
*/
-$lang['server'] = 'LDAP-szerver. Hosztnév (<code>localhost</code>) vagy abszolút URL portszámmal (<code>ldap://server.tld:389</code>)';
-$lang['port'] = 'LDAP-szerver port, ha nem URL lett megadva';
+$lang['server'] = 'LDAP-szerver. Kiszolgálónév (<code>localhost</code>) vagy teljes URL-cím (<code>ldap://server.tld:389</code>)';
+$lang['port'] = 'LDAP-kiszolgáló portja, ha URL-cím nem lett megadva';
$lang['usertree'] = 'Hol találom a felhasználókat? Pl. <code>ou=People, dc=server, dc=tld</code>';
$lang['grouptree'] = 'Hol találom a csoportokat? Pl. <code>ou=Group, dc=server, dc=tld</code>';
$lang['userfilter'] = 'LDAP szűrő a felhasználók kereséséhez, pl. <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
@@ -20,7 +21,7 @@ $lang['bindpw'] = 'Ehhez tartozó jelszó.';
$lang['userscope'] = 'A keresési tartomány korlátozása erre a felhasználókra való keresésnél';
$lang['groupscope'] = 'A keresési tartomány korlátozása erre a csoportokra való keresésnél';
$lang['groupkey'] = 'Csoport meghatározása a következő attribútumból (az alapértelmezett AD csoporttagság helyett), pl. a szervezeti egység vagy a telefonszám';
-$lang['debug'] = 'Debug-üzenetek megjelenítése?';
+$lang['debug'] = 'Továbi hibakeresési információk megjelenítése hiba esetén';
$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
$lang['deref_o_2'] = 'LDAP_DEREF_FINDING';
diff --git a/lib/plugins/authldap/lang/it/settings.php b/lib/plugins/authldap/lang/it/settings.php
index eba7cde6e..858c694b8 100644
--- a/lib/plugins/authldap/lang/it/settings.php
+++ b/lib/plugins/authldap/lang/it/settings.php
@@ -5,6 +5,7 @@
*
* @author Edmondo Di Tucci <snarchio@gmail.com>
* @author Claudio Lanconelli <lancos@libero.it>
+ * @author Francesco <francesco.cavalli@hotmail.com>
*/
$lang['server'] = 'Il tuo server LDAP. Inserire o l\'hostname (<code>localhost</code>) oppure un URL completo (<code>ldap://server.tld:389</code>)';
$lang['port'] = 'Porta del server LDAP se non è stato fornito un URL completo più sopra.';
@@ -14,6 +15,11 @@ $lang['userfilter'] = 'Filtro per cercare l\'account utente LDAP. Eg.
$lang['groupfilter'] = 'Filtro per cercare i gruppi LDAP. Eg. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
$lang['version'] = 'Versione protocollo da usare. Pu<code>3</code>';
$lang['starttls'] = 'Usare la connessione TSL?';
+$lang['deref'] = 'Come differenziare un alias?';
$lang['userscope'] = 'Limita il contesto di ricerca per la ricerca degli utenti';
$lang['groupscope'] = 'Limita il contesto di ricerca per la ricerca dei gruppi';
$lang['debug'] = 'In caso di errori mostra ulteriori informazioni di debug';
+$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
+$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
+$lang['deref_o_2'] = 'LDAP_DEREF_FINDING';
+$lang['deref_o_3'] = 'LDAP_DEREF_ALWAYS';
diff --git a/lib/plugins/authldap/lang/ja/settings.php b/lib/plugins/authldap/lang/ja/settings.php
index 6dec9a576..6cff0ea67 100644
--- a/lib/plugins/authldap/lang/ja/settings.php
+++ b/lib/plugins/authldap/lang/ja/settings.php
@@ -6,8 +6,9 @@
* @author Satoshi Sahara <sahara.satoshi@gmail.com>
* @author Hideaki SAWADA <sawadakun@live.jp>
* @author Hideaki SAWADA <chuno@live.jp>
+ * @author PzF_X <jp_minecraft@yahoo.co.jp>
*/
-$lang['server'] = 'LDAPサーバー。ホスト名(<code>localhost</code)又は完全修飾URL(<code>ldap://server.tld:389</code>)';
+$lang['server'] = 'LDAPサーバー。ホスト名(<code>localhost</code>)又は完全修飾URL(<code>ldap://server.tld:389</code>)';
$lang['port'] = '上記が完全修飾URLでない場合、LDAPサーバーポート';
$lang['usertree'] = 'ユーザーアカウントを探す場所。例:<code>ou=People, dc=server, dc=tld</code>';
$lang['grouptree'] = 'ユーザーグループを探す場所。例:<code>ou=Group, dc=server, dc=tld</code>';
@@ -15,8 +16,14 @@ $lang['userfilter'] = 'ユーザーアカウントを探すためのL
$lang['groupfilter'] = 'グループを探すLDAP抽出条件。例:<code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
$lang['version'] = '使用するプロトコルのバージョン。<code>3</code>を設定する必要がある場合があります。';
$lang['starttls'] = 'TLS接続を使用しますか?';
+$lang['referrals'] = '紹介に従いますか?';
+$lang['deref'] = 'どのように間接参照のエイリアスにしますか?';
$lang['binddn'] = '匿名バインドでは不十分な場合、オプションバインドユーザーのDN。例:<code>cn=admin, dc=my, dc=home</code>';
$lang['bindpw'] = '上記ユーザーのパスワード';
+$lang['userscope'] = 'ユーザー検索の範囲を限定させる';
+$lang['groupscope'] = 'グループ検索の範囲を限定させる';
+$lang['groupkey'] = 'ユーザー属性をグループのメンバーシップから設定します(代わりに標準のADグループ)。
+例えば、部署や電話番号などです。';
$lang['debug'] = 'エラーに関して追加のデバッグ情報を表示する。';
$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
diff --git a/lib/plugins/authldap/lang/ko/settings.php b/lib/plugins/authldap/lang/ko/settings.php
index ae8dc7ab6..e663ba063 100644
--- a/lib/plugins/authldap/lang/ko/settings.php
+++ b/lib/plugins/authldap/lang/ko/settings.php
@@ -13,8 +13,8 @@ $lang['userfilter'] = '사용자 계정을 찾을 LDAP 필터. 예를
$lang['groupfilter'] = '그룹을 찾을 LDAP 필터. 예를 들어 <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
$lang['version'] = '사용할 프로토콜 버전. <code>3</code>으로 설정해야 할 수도 있습니다';
$lang['starttls'] = 'TLS 연결을 사용하겠습니까?';
-$lang['referrals'] = '참고(referrals)를 허용하겠습니까? ';
-$lang['deref'] = '어떻게 별명을 간접 참고하겠습니까?';
+$lang['referrals'] = '참조(referrals)를 허용하겠습니까? ';
+$lang['deref'] = '어떻게 별명을 간접 참조하겠습니까?';
$lang['binddn'] = '익명 바인드가 충분하지 않으면 선택적인 바인드 사용자의 DN. 예를 들어 <code>cn=admin, dc=my, dc=home</code>';
$lang['bindpw'] = '위 사용자의 비밀번호';
$lang['userscope'] = '사용자 검색에 대한 검색 범위 제한';
diff --git a/lib/plugins/authldap/lang/lv/settings.php b/lib/plugins/authldap/lang/lv/settings.php
new file mode 100644
index 000000000..90986e4f1
--- /dev/null
+++ b/lib/plugins/authldap/lang/lv/settings.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['starttls'] = 'Lietot TLS savienojumus?';
+$lang['bindpw'] = 'Lietotāja parole';
diff --git a/lib/plugins/authldap/lang/no/settings.php b/lib/plugins/authldap/lang/no/settings.php
new file mode 100644
index 000000000..6bedb2991
--- /dev/null
+++ b/lib/plugins/authldap/lang/no/settings.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Christopher Schive <chschive@frisurf.no>
+ */
+$lang['port'] = 'LDAP serverport dersom ingen full URL var gitt over.';
+$lang['starttls'] = 'Bruke TLS-forbindelser?';
diff --git a/lib/plugins/authldap/lang/ru/settings.php b/lib/plugins/authldap/lang/ru/settings.php
index 2b93e0fd4..5677e06a3 100644
--- a/lib/plugins/authldap/lang/ru/settings.php
+++ b/lib/plugins/authldap/lang/ru/settings.php
@@ -6,6 +6,14 @@
* @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
* @author Erli Moen <evseev.jr@gmail.com>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Владимир <id37736@yandex.ru>
*/
+$lang['starttls'] = 'Использовать TLS подключения?';
$lang['deref'] = 'Как расшифровывать псевдонимы?';
$lang['bindpw'] = 'Пароль для указанного пользователя.';
+$lang['debug'] = 'Показывать дополнительную отладочную информацию при ошибках';
+$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
+$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
+$lang['deref_o_2'] = 'LDAP_DEREF_FINDING';
+$lang['deref_o_3'] = 'LDAP_DEREF_ALWAYS';
diff --git a/lib/plugins/authldap/lang/sl/settings.php b/lib/plugins/authldap/lang/sl/settings.php
index f180226fc..f63070390 100644
--- a/lib/plugins/authldap/lang/sl/settings.php
+++ b/lib/plugins/authldap/lang/sl/settings.php
@@ -4,5 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author matej <mateju@svn.gnome.org>
+ * @author Jernej Vidmar <jernej.vidmar@vidmarboehm.com>
*/
$lang['starttls'] = 'Ali naj se uporabijo povezave TLS?';
+$lang['bindpw'] = 'Geslo uporabnika zgoraj';
diff --git a/lib/plugins/authldap/lang/tr/settings.php b/lib/plugins/authldap/lang/tr/settings.php
new file mode 100644
index 000000000..843b7ef9c
--- /dev/null
+++ b/lib/plugins/authldap/lang/tr/settings.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author ilker rifat kapaç <irifat@gmail.com>
+ */
+$lang['bindpw'] = 'Üstteki kullanıcının şifresi';
diff --git a/lib/plugins/authldap/lang/zh-tw/settings.php b/lib/plugins/authldap/lang/zh-tw/settings.php
index 7e35ef632..e3d85cb87 100644
--- a/lib/plugins/authldap/lang/zh-tw/settings.php
+++ b/lib/plugins/authldap/lang/zh-tw/settings.php
@@ -1,4 +1,5 @@
<?php
+
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
@@ -19,7 +20,6 @@ $lang['userscope'] = '限制使用者搜索的範圍';
$lang['groupscope'] = '限制群組搜索的範圍';
$lang['groupkey'] = '以其他使用者屬性 (而非標準 AD 群組) 來把使用者分組,例如以部門或電話號碼分類';
$lang['debug'] = '有錯誤時,顯示額外除錯資訊';
-
$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
$lang['deref_o_2'] = 'LDAP_DEREF_FINDING';
diff --git a/lib/plugins/authldap/plugin.info.txt b/lib/plugins/authldap/plugin.info.txt
index 0d0b13f65..964fbb994 100644
--- a/lib/plugins/authldap/plugin.info.txt
+++ b/lib/plugins/authldap/plugin.info.txt
@@ -1,7 +1,7 @@
base authldap
author Andreas Gohr
email andi@splitbrain.org
-date 2013-04-19
+date 2014-05-18
name LDAP Auth Plugin
desc Provides user authentication against an LDAP server
url http://www.dokuwiki.org/plugin:authldap
diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php
index 1e6e6a4a9..95c62f636 100644
--- a/lib/plugins/authmysql/auth.php
+++ b/lib/plugins/authmysql/auth.php
@@ -21,6 +21,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
/** @var int database subrevision */
protected $dbsub = 0;
+ /** @var array cache to avoid re-reading user info data */
+ protected $cacheUserInfo = array();
+
/**
* Constructor
*
@@ -157,10 +160,11 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$result = $this->_queryDB($sql);
if($result !== false && count($result) == 1) {
- if($this->getConf('forwardClearPass') == 1)
+ if($this->getConf('forwardClearPass') == 1) {
$rc = true;
- else
+ } else {
$rc = auth_verifyPassword($pass, $result[0]['pass']);
+ }
}
$this->_closeDB();
}
@@ -174,16 +178,23 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
* @param string $user user login to get data for
+ * @param bool $requireGroups when true, group membership information should be included in the returned array;
+ * when false, it maybe included, but is not required by the caller
* @return array|bool
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
+ if($this->_cacheExists($user, $requireGroups)) {
+ return $this->cacheUserInfo[$user];
+ }
+
if($this->_openDB()) {
$this->_lockTables("READ");
- $info = $this->_getUserInfo($user);
+ $info = $this->_getUserInfo($user, $requireGroups);
$this->_unlockTables();
$this->_closeDB();
- } else
+ } else {
$info = false;
+ }
return $info;
}
@@ -209,12 +220,14 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
global $conf;
if($this->_openDB()) {
- if(($info = $this->_getUserInfo($user)) !== false)
+ if(($info = $this->_getUserInfo($user)) !== false) {
return false; // user already exists
+ }
// set defaultgroup if no groups were given
- if($grps == null)
+ if($grps == null) {
$grps = array($conf['defaultgroup']);
+ }
$this->_lockTables("WRITE");
$pwd = $this->getConf('forwardClearPass') ? $pwd : auth_cryptPassword($pwd);
@@ -234,17 +247,17 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* The dataset update will be rejected if the user name should be changed
* to an already existing one.
*
- * The password must be provides unencrypted. Pasword cryption is done
+ * The password must be provided unencrypted. Pasword encryption is done
* automatically if configured.
*
- * If one or more groups could't be updated, an error would be set. In
+ * If one or more groups can't be updated, an error will be set. In
* this case the dataset might already be changed and we can't rollback
- * the changes. Transactions would be really usefull here.
+ * the changes. Transactions would be really useful here.
*
* modifyUser() may be called without SQL statements defined that are
* needed to change group membership (for example if only the user profile
- * should be modified). In this case we asure that we don't touch groups
- * even $changes['grps'] is set by mistake.
+ * should be modified). In this case we assure that we don't touch groups
+ * even when $changes['grps'] is set by mistake.
*
* @author Chris Smith <chris@jalakai.co.uk>
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
@@ -256,27 +269,30 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
public function modifyUser($user, $changes) {
$rc = false;
- if(!is_array($changes) || !count($changes))
+ if(!is_array($changes) || !count($changes)) {
return true; // nothing to change
+ }
if($this->_openDB()) {
$this->_lockTables("WRITE");
- if(($uid = $this->_getUserID($user))) {
- $rc = $this->_updateUserInfo($changes, $uid);
+ $rc = $this->_updateUserInfo($user, $changes);
- if($rc && isset($changes['grps']) && $this->cando['modGroups']) {
- $groups = $this->_getGroups($user);
- $grpadd = array_diff($changes['grps'], $groups);
- $grpdel = array_diff($groups, $changes['grps']);
+ if($rc && isset($changes['grps']) && $this->cando['modGroups']) {
+ $groups = $this->_getGroups($user);
+ $grpadd = array_diff($changes['grps'], $groups);
+ $grpdel = array_diff($groups, $changes['grps']);
- foreach($grpadd as $group)
- if(($this->_addUserToGroup($user, $group, 1)) == false)
- $rc = false;
+ foreach($grpadd as $group) {
+ if(($this->_addUserToGroup($user, $group, 1)) == false) {
+ $rc = false;
+ }
+ }
- foreach($grpdel as $group)
- if(($this->_delUserFromGroup($user, $group)) == false)
- $rc = false;
+ foreach($grpdel as $group) {
+ if(($this->_delUserFromGroup($user, $group)) == false) {
+ $rc = false;
+ }
}
}
@@ -304,8 +320,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
if(is_array($users) && count($users)) {
$this->_lockTables("WRITE");
foreach($users as $user) {
- if($this->_delUser($user))
+ if($this->_delUser($user)) {
$count++;
+ }
}
$this->_unlockTables();
}
@@ -367,9 +384,11 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$result = $this->_queryDB($sql);
if(!empty($result)) {
- foreach($result as $user)
- if(($info = $this->_getUserInfo($user['user'])))
+ foreach($result as $user) {
+ if(($info = $this->_getUserInfo($user['user']))) {
$out[$user['user']] = $info;
+ }
+ }
}
$this->_unlockTables();
@@ -466,7 +485,10 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql = str_replace('%{user}', $this->_escape($user), $sql);
$sql = str_replace('%{gid}', $this->_escape($gid), $sql);
$sql = str_replace('%{group}', $this->_escape($group), $sql);
- if($this->_modifyDB($sql) !== false) return true;
+ if($this->_modifyDB($sql) !== false) {
+ $this->_flushUserInfoCache($user);
+ return true;
+ }
if($newgroup) { // remove previously created group on error
$sql = str_replace('%{gid}', $this->_escape($gid), $this->getConf('delGroup'));
@@ -501,6 +523,10 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql = str_replace('%{gid}', $this->_escape($gid), $sql);
$sql = str_replace('%{group}', $this->_escape($group), $sql);
$rc = $this->_modifyDB($sql) == 0 ? true : false;
+
+ if ($rc) {
+ $this->_flushUserInfoCache($user);
+ }
}
}
return $rc;
@@ -526,8 +552,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$result = $this->_queryDB($sql);
if($result !== false && count($result)) {
- foreach($result as $row)
+ foreach($result as $row) {
$groups[] = $row['group'];
+ }
}
return $groups;
}
@@ -590,6 +617,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
}
if($gid !== false){
+ $this->_flushUserInfoCache($user);
return true;
} else {
/* remove the new user and all group relations if a group can't
@@ -614,7 +642,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
- * @param string $user user whose id is desired
+ * @param string $user username of the user to be deleted
* @return bool
*/
protected function _delUser($user) {
@@ -626,16 +654,96 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql = str_replace('%{uid}', $this->_escape($uid), $this->getConf('delUser'));
$sql = str_replace('%{user}', $this->_escape($user), $sql);
$this->_modifyDB($sql);
+ $this->_flushUserInfoCache($user);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Flush cached user information
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $user username of the user whose data is to be removed from the cache
+ * if null, empty the whole cache
+ * @return none
+ */
+ protected function _flushUserInfoCache($user=null) {
+ if (is_null($user)) {
+ $this->cacheUserInfo = array();
+ } else {
+ unset($this->cacheUserInfo[$user]);
+ }
+ }
+
+ /**
+ * Quick lookup to see if a user's information has been cached
+ *
+ * This test does not need a database connection or read lock
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $user username to be looked up in the cache
+ * @param bool $requireGroups true, if cached info should include group memberships
+ *
+ * @return bool existence of required user information in the cache
+ */
+ protected function _cacheExists($user, $requireGroups=true) {
+ if (isset($this->cacheUserInfo[$user])) {
+ if (!is_array($this->cacheUserInfo[$user])) {
+ return true; // user doesn't exist
+ }
+
+ if (!$requireGroups || isset($this->cacheUserInfo[$user]['grps'])) {
return true;
}
}
+
return false;
}
/**
- * getUserInfo
+ * Get a user's information
+ *
+ * The database connection must already be established for this function to work.
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $user username of the user whose information is being reterieved
+ * @param bool $requireGroups true if group memberships should be included
+ * @param bool $useCache true if ok to return cached data & to cache returned data
+ *
+ * @return mixed false|array false if the user doesn't exist
+ * array containing user information if user does exist
+ */
+ protected function _getUserInfo($user, $requireGroups=true, $useCache=true) {
+ $info = null;
+
+ if ($useCache && isset($this->cacheUserInfo[$user])) {
+ $info = $this->cacheUserInfo[$user];
+ }
+
+ if (is_null($info)) {
+ $info = $this->_retrieveUserInfo($user);
+ }
+
+ if (($requireGroups == true) && $info && !isset($info['grps'])) {
+ $info['grps'] = $this->_getGroups($user);
+ }
+
+ if ($useCache) {
+ $this->cacheUserInfo[$user] = $info;
+ }
+
+ return $info;
+ }
+
+ /**
+ * retrieveUserInfo
*
- * Gets the data for a specific user The database connection
+ * Gets the data for a specific user. The database connection
* must already be established for this function to work.
* Otherwise it will return 'false'.
*
@@ -644,12 +752,11 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* @param string $user user's nick to get data for
* @return bool|array false on error, user info on success
*/
- protected function _getUserInfo($user) {
+ protected function _retrieveUserInfo($user) {
$sql = str_replace('%{user}', $this->_escape($user), $this->getConf('getUserInfo'));
$result = $this->_queryDB($sql);
if($result !== false && count($result)) {
$info = $result[0];
- $info['grps'] = $this->_getGroups($user);
return $info;
}
return false;
@@ -666,20 +773,26 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* The database connection has already to be established for this
* function to work. Otherwise it will return 'false'.
*
- * The password will be crypted if necessary.
+ * The password will be encrypted if necessary.
*
+ * @param string $user user's nick being updated
* @param array $changes array of items to change as pairs of item and value
* @param mixed $uid user id of dataset to change, must be unique in DB
* @return bool true on success or false on error
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*/
- protected function _updateUserInfo($changes, $uid) {
+ protected function _updateUserInfo($user, $changes) {
$sql = $this->getConf('updateUser')." ";
$cnt = 0;
$err = 0;
if($this->dbcon) {
+ $uid = $this->_getUserID($user);
+ if ($uid === false) {
+ return false;
+ }
+
foreach($changes as $item => $value) {
if($item == 'user') {
if(($this->_getUserID($changes['user']))) {
@@ -707,6 +820,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
$sql .= " ".str_replace('%{uid}', $uid, $this->getConf('UpdateTarget'));
if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp.
$this->_modifyDB($sql);
+ $this->_flushUserInfoCache($user);
}
return true;
}
diff --git a/lib/plugins/authmysql/lang/es/settings.php b/lib/plugins/authmysql/lang/es/settings.php
index 64d422102..b82620fc6 100644
--- a/lib/plugins/authmysql/lang/es/settings.php
+++ b/lib/plugins/authmysql/lang/es/settings.php
@@ -4,9 +4,36 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Antonio Bueno <atnbueno@gmail.com>
+ * @author Eloy <ej.perezgomez@gmail.com>
+ * @author Antonio Castilla <antoniocastilla@trazoide.com>
*/
$lang['server'] = 'Tu servidor MySQL';
$lang['user'] = 'Nombre de usuario MySQL';
+$lang['password'] = 'Contraseña para el usuario de arriba.';
$lang['database'] = 'Base de datos a usar';
$lang['charset'] = 'Codificación usada en la base de datos';
$lang['debug'] = 'Mostrar información adicional para depuración de errores';
+$lang['forwardClearPass'] = 'Enviar las contraseñas de usuario comotexto plano a las siguientes sentencias de SQL, en lugar de utilizar la opción passcrypt';
+$lang['TablesToLock'] = 'Lista separada por comasde las tablas a bloquear durante operaciones de escritura';
+$lang['checkPass'] = 'Sentencia SQL para verificar las contraseñas';
+$lang['getUserInfo'] = 'Sentencia SQL para obtener información del usuario';
+$lang['getGroups'] = 'Sentencia SQL para obtener la pertenencia a grupos de un usuario';
+$lang['getUsers'] = 'Sentencia SQL para listar todos los usuarios';
+$lang['FilterLogin'] = 'Cláusula SQL para filtrar usuarios por su nombre de usuario';
+$lang['FilterName'] = 'Cláusula SQL para filtrar usuarios por su nombre completo';
+$lang['FilterEmail'] = 'Cláusula SQL para filtrar usuarios por su dirección de correo electrónico';
+$lang['FilterGroup'] = 'Cláusula SQL para filtrar usuarios por su pertenencia a grupos';
+$lang['SortOrder'] = 'Cláusula SQL para ordenar usuarios';
+$lang['addUser'] = 'Sentencia SQL para agregar un nuevo usuario';
+$lang['addGroup'] = 'Sentencia SQL para agregar un nuevo grupo';
+$lang['addUserGroup'] = 'Sentencia SQL para agregar un usuario a un grupo existente';
+$lang['delGroup'] = 'Sentencia SQL para eliminar un grupo';
+$lang['getUserID'] = 'Sentencia SQL para obtener la clave primaria de un usuario';
+$lang['delUser'] = 'Sentencia SQL para eliminar un usuario';
+$lang['delUserRefs'] = 'Sentencia SQL para eliminar un usuario de todos los grupos';
+$lang['updateUser'] = 'Sentencia SQL para actualizar un perfil de usuario';
+$lang['delUserGroup'] = 'Sentencia SQL para eliminar un usuario de un grupo dado';
+$lang['getGroupID'] = 'Sentencia SQL para obtener la clave principal de un grupo dado';
+$lang['debug_o_0'] = 'ninguno';
+$lang['debug_o_1'] = 'sólo errores';
+$lang['debug_o_2'] = 'todas las consultas SQL';
diff --git a/lib/plugins/authmysql/lang/fa/settings.php b/lib/plugins/authmysql/lang/fa/settings.php
new file mode 100644
index 000000000..68ad5ce83
--- /dev/null
+++ b/lib/plugins/authmysql/lang/fa/settings.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ */
+$lang['server'] = 'سرور MySQL';
+$lang['user'] = 'نام کاربری MySQL';
+$lang['database'] = 'پایگاه داده مورد استفاده';
diff --git a/lib/plugins/authmysql/lang/hr/settings.php b/lib/plugins/authmysql/lang/hr/settings.php
new file mode 100644
index 000000000..af9966999
--- /dev/null
+++ b/lib/plugins/authmysql/lang/hr/settings.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['server'] = 'Vaš MySQL server';
+$lang['user'] = 'MySQL korisničko ime';
+$lang['password'] = 'Lozinka gore navedenog korisnika';
+$lang['database'] = 'Baza koja se koristi';
+$lang['charset'] = 'Znakovni set koji se koristi u bazi';
+$lang['debug'] = 'Prikaz dodatnih debug informacija';
+$lang['forwardClearPass'] = 'Proslijedi korisničku lozinku kao čisti tekst u SQL upitu niže, umjesto korištenja passcrypt opcije';
+$lang['TablesToLock'] = 'Zarezom odvojena lista tabela koje trebaju biti zaključane pri operacijama pisanja';
+$lang['checkPass'] = 'SQL izraz za provjeru lozinki';
+$lang['getUserInfo'] = 'SQL izraz za dohvaćanje informacija o korisniku';
+$lang['getGroups'] = 'SQL izraz za dohvaćanje članstva u grupama';
+$lang['getUsers'] = 'SQL izraz za ispis svih korisnika';
+$lang['FilterLogin'] = 'SQL izraz za izdvajanje korisnika po korisničkom imenu';
+$lang['FilterName'] = 'SQL izraz za izdvajanje korisnika po punom imenu';
+$lang['FilterEmail'] = 'SQL izraz za izdvajanje korisnika po adresi e-pošte';
+$lang['FilterGroup'] = 'SQL izraz za izdvajanje korisnika po članstvu u grupama';
+$lang['SortOrder'] = 'SQL izraz za sortiranje korisnika';
+$lang['addUser'] = 'SQL izraz za dodavanje novih korisnika';
+$lang['addGroup'] = 'SQL izraz za dodavanje novih grupa';
+$lang['addUserGroup'] = 'SQL izraz za dodavanje korisnika u postojeću grupu';
+$lang['delGroup'] = 'SQL izraz za uklanjanje grupe';
+$lang['getUserID'] = 'SQL izraz za dobivanje primarnog ključa korisnika';
+$lang['delUser'] = 'SQL izraz za brisanje korisnika';
+$lang['delUserRefs'] = 'SQL izraz za uklanjanje korisnika iz grupe';
+$lang['updateUser'] = 'SQL izraz za ažuriranje korisničkog profila';
+$lang['UpdateLogin'] = 'UPDATE izraz za ažuriranje korisničkog imena';
+$lang['UpdatePass'] = 'UPDATE izraz za ažuriranje korisničke lozinke';
+$lang['UpdateEmail'] = 'UPDATE izraz za ažuriranje korisničke email adrese';
+$lang['UpdateName'] = 'UPDATE izraz za ažuriranje punog imena korisnika';
+$lang['UpdateTarget'] = 'Limit izraz za identificiranje korisnika pri ažuriranju';
+$lang['delUserGroup'] = 'SQL izraz za uklanjanje korisnika iz zadane grupe';
+$lang['getGroupID'] = 'SQL izraz za dobivanje primarnoga ključa zadane grupe';
+$lang['debug_o_0'] = 'ništa';
+$lang['debug_o_1'] = 'u slučaju greške';
+$lang['debug_o_2'] = 'svi SQL upiti';
diff --git a/lib/plugins/authmysql/lang/hu/settings.php b/lib/plugins/authmysql/lang/hu/settings.php
index 5936203fa..cf7b26bb9 100644
--- a/lib/plugins/authmysql/lang/hu/settings.php
+++ b/lib/plugins/authmysql/lang/hu/settings.php
@@ -6,8 +6,8 @@
* @author Marton Sebok <sebokmarton@gmail.com>
* @author Marina Vladi <deldadam@gmail.com>
*/
-$lang['server'] = 'MySQL-szerver';
-$lang['user'] = 'MySQL felhasználónév';
+$lang['server'] = 'MySQL-kiszolgáló';
+$lang['user'] = 'MySQL-felhasználónév';
$lang['password'] = 'Fenti felhasználó jelszava';
$lang['database'] = 'Adatbázis';
$lang['charset'] = 'Az adatbázisban használt karakterkészlet';
diff --git a/lib/plugins/authmysql/lang/it/settings.php b/lib/plugins/authmysql/lang/it/settings.php
index e493ec7e9..10c0de96f 100644
--- a/lib/plugins/authmysql/lang/it/settings.php
+++ b/lib/plugins/authmysql/lang/it/settings.php
@@ -4,5 +4,34 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Claudio Lanconelli <lancos@libero.it>
+ * @author Mirko <malisan.mirko@gmail.com>
+ * @author Francesco <francesco.cavalli@hotmail.com>
*/
+$lang['server'] = 'Il tuo server MySQL';
+$lang['user'] = 'User name di MySQL';
+$lang['database'] = 'Database da usare';
+$lang['charset'] = 'Set di caratteri usato nel database';
$lang['debug'] = 'Mostra ulteriori informazioni di debug';
+$lang['TablesToLock'] = 'Lista, separata da virgola, delle tabelle che devono essere bloccate in scrittura';
+$lang['checkPass'] = 'Istruzione SQL per il controllo password';
+$lang['getUserInfo'] = 'Istruzione SQL per recuperare le informazioni utente';
+$lang['getUsers'] = 'Istruzione SQL per listare tutti gli utenti';
+$lang['FilterLogin'] = 'Istruzione SQL per per filtrare gli utenti in funzione del "login name"';
+$lang['SortOrder'] = 'Istruzione SQL per ordinare gli utenti';
+$lang['addUser'] = 'Istruzione SQL per aggiungere un nuovo utente';
+$lang['addGroup'] = 'Istruzione SQL per aggiungere un nuovo gruppo';
+$lang['addUserGroup'] = 'Istruzione SQL per aggiungere un utente ad un gruppo esistente';
+$lang['delGroup'] = 'Istruzione SQL per imuovere un gruppo';
+$lang['getUserID'] = 'Istruzione SQL per recuperare la primary key di un utente';
+$lang['delUser'] = 'Istruzione SQL per cancellare un utente';
+$lang['delUserRefs'] = 'Istruzione SQL per rimuovere un utente da tutti i gruppi';
+$lang['updateUser'] = 'Istruzione SQL per aggiornare il profilo utente';
+$lang['UpdateLogin'] = 'Clausola per aggiornare il "login name" dell\'utente';
+$lang['UpdatePass'] = 'Clausola per aggiornare la password utente';
+$lang['UpdateEmail'] = 'Clausola per aggiornare l\'email utente';
+$lang['UpdateName'] = 'Clausola per aggiornare il nome completo';
+$lang['delUserGroup'] = 'Istruzione SQL per rimuovere un utente da un dato gruppo';
+$lang['getGroupID'] = 'Istruzione SQL per avere la primary key di un dato gruppo';
+$lang['debug_o_0'] = 'Nulla';
+$lang['debug_o_1'] = 'Solo in errore';
+$lang['debug_o_2'] = 'Tutte le query SQL';
diff --git a/lib/plugins/authmysql/lang/lv/settings.php b/lib/plugins/authmysql/lang/lv/settings.php
new file mode 100644
index 000000000..8550363c9
--- /dev/null
+++ b/lib/plugins/authmysql/lang/lv/settings.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['user'] = 'MySQL lietotāja vārds';
+$lang['password'] = 'Lietotāja parole';
+$lang['delUser'] = 'SQL pieprasījums lietotāja dzēšanai';
diff --git a/lib/plugins/authmysql/lang/pl/settings.php b/lib/plugins/authmysql/lang/pl/settings.php
index 88cbd5d6f..9dc798ee0 100644
--- a/lib/plugins/authmysql/lang/pl/settings.php
+++ b/lib/plugins/authmysql/lang/pl/settings.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Paweł Jan Czochański <czochanski@gmail.com>
+ * @author Mati <mackosa@wp.pl>
*/
$lang['server'] = 'Twój server MySQL';
$lang['user'] = 'Nazwa użytkownika MySQL';
@@ -12,3 +13,4 @@ $lang['database'] = 'Używana baza danych';
$lang['charset'] = 'Zestaw znaków uzyty w bazie danych';
$lang['debug'] = 'Wyświetlaj dodatkowe informacje do debugowania.';
$lang['checkPass'] = 'Zapytanie SQL wykorzystywane do sprawdzania haseł.';
+$lang['debug_o_2'] = 'wszystkie zapytania SQL';
diff --git a/lib/plugins/authmysql/lang/tr/settings.php b/lib/plugins/authmysql/lang/tr/settings.php
new file mode 100644
index 000000000..ca6a7c6ad
--- /dev/null
+++ b/lib/plugins/authmysql/lang/tr/settings.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author ilker rifat kapaç <irifat@gmail.com>
+ * @author İlker R. Kapaç <irifat@gmail.com>
+ */
+$lang['server'] = 'Sizin MySQL sunucunuz';
+$lang['user'] = 'MySQL kullanıcısının adı';
+$lang['password'] = 'Üstteki kullanıcı için şifre';
+$lang['database'] = 'Kullanılacak veritabanı';
+$lang['charset'] = 'Veritabanında kullanılacak karakter seti';
+$lang['debug'] = 'İlave hata ayıklama bilgisini görüntüle';
+$lang['checkPass'] = 'Şifreleri kontrol eden SQL ifadesi';
+$lang['getUserInfo'] = 'Kullanıcı bilgilerini getiren SQL ifadesi';
+$lang['getGroups'] = 'Kullanıcının grup üyeliklerini getiren SQL ifadesi';
+$lang['getUsers'] = 'Tüm kullanıcıları listeleyen SQL ifadesi';
+$lang['FilterLogin'] = 'Kullanıcıları giriş yaptıkları isimlere göre süzmek için SQL şartı';
+$lang['FilterName'] = 'Kullanıcıları tam isimlerine göre süzmek için SQL şartı';
+$lang['FilterEmail'] = 'Kullanıcıları e-posta adreslerine göre süzmek için SQL şartı';
+$lang['FilterGroup'] = 'Kullanıcıları üye oldukları grup isimlerine göre süzmek için SQL şartı';
+$lang['SortOrder'] = 'Kullanıcıları sıralamak için SQL şartı';
+$lang['addUser'] = 'Yeni bir kullanıcı ekleyen SQL ifadesi';
+$lang['addGroup'] = 'Yeni bir grup ekleyen SQL ifadesi';
+$lang['addUserGroup'] = 'Varolan gruba yeni bir kullanıcı ekleyen SQL ifadesi';
+$lang['delGroup'] = 'Grup silen SQL ifadesi';
+$lang['getUserID'] = 'Kullanıcının birincil anahtarını getiren SQL ifadesi';
+$lang['delUser'] = 'Kullanıcı silen SQL ifadesi';
+$lang['delUserRefs'] = 'Kullanıcıyı tüm gruplardan çıkartan SQL ifadesi';
+$lang['updateUser'] = 'Kullanıcı profilini güncelleyen SQL ifadesi';
+$lang['UpdateLogin'] = 'Kullanıcının giriş yaptığı ismi güncelleyen, güncelleme şartı';
+$lang['UpdatePass'] = 'Kullanıcının şifresini güncelleyen, güncelleme şartı';
+$lang['UpdateEmail'] = 'Kullanıcının e-posta adresini güncelleyen, güncelleme şartı';
+$lang['UpdateName'] = 'Kullanıcının tam adını güncelleyen, güncelleme şartı';
+$lang['UpdateTarget'] = 'Güncelleme esnasında kullanıcıyı belirleyen, sınır şartı';
+$lang['delUserGroup'] = 'Kullanıcıyı verilen gruptan silen SQL ifadesi';
+$lang['getGroupID'] = 'Verilen grubun birincil anahtarını getiren SQL ifadesi';
+$lang['debug_o_0'] = 'hiçbiri';
+$lang['debug_o_1'] = 'sadece hata olduğunda';
+$lang['debug_o_2'] = 'tüm SQL sorguları';
diff --git a/lib/plugins/authmysql/plugin.info.txt b/lib/plugins/authmysql/plugin.info.txt
index 3e889d11e..fa00fccf4 100644
--- a/lib/plugins/authmysql/plugin.info.txt
+++ b/lib/plugins/authmysql/plugin.info.txt
@@ -1,7 +1,7 @@
base authmysql
author Andreas Gohr
email andi@splitbrain.org
-date 2013-02-16
+date 2014-02-15
name MYSQL Auth Plugin
desc Provides user authentication against a MySQL database
url http://www.dokuwiki.org/plugin:authmysql
diff --git a/lib/plugins/authpgsql/auth.php b/lib/plugins/authpgsql/auth.php
index e51b39858..99f3ed443 100644
--- a/lib/plugins/authpgsql/auth.php
+++ b/lib/plugins/authpgsql/auth.php
@@ -160,7 +160,7 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
$result = $this->_queryDB($sql);
foreach($result as $user)
- if(($info = $this->_getUserInfo($user['user'])))
+ if(($info = $this->_getCachedUserInfo($user['user'])))
$out[$user['user']] = $info;
$this->_unlockTables();
@@ -212,7 +212,10 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
$sql = str_replace('%{user}', addslashes($user), $sql);
$sql = str_replace('%{gid}', addslashes($gid), $sql);
$sql = str_replace('%{group}', addslashes($group), $sql);
- if($this->_modifyDB($sql) !== false) return true;
+ if($this->_modifyDB($sql) !== false) {
+ $this->_flushUserInfoCache($user);
+ return true;
+ }
if($newgroup) { // remove previously created group on error
$sql = str_replace('%{gid}', addslashes($gid), $this->conf['delGroup']);
@@ -267,6 +270,7 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
}
if($gid !== false){
+ $this->_flushUserInfoCache($user);
return true;
} else {
/* remove the new user and all group relations if a group can't
diff --git a/lib/plugins/authpgsql/lang/es/settings.php b/lib/plugins/authpgsql/lang/es/settings.php
new file mode 100644
index 000000000..abfb00d38
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/es/settings.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Antonio Bueno <atnbueno@gmail.com>
+ * @author Antonio Castilla <antoniocastilla@trazoide.com>
+ * @author pokesakura <pokesakura@gmail.com>
+ */
+$lang['server'] = 'Su servidor PostgreSQL';
+$lang['port'] = 'Puerto de su servidor PostgreSQL';
+$lang['user'] = 'Nombre de usuario PostgreSQL';
+$lang['password'] = 'Contraseña del usuario indicado';
+$lang['database'] = 'Base de datos a usar';
+$lang['debug'] = 'Muestra la información de depuración adicional';
+$lang['forwardClearPass'] = 'Pasar las contraseñas de usuario en texto plano a las siguientes sentencias de SQL, en lugar de utilizar la opción passcrypt';
+$lang['checkPass'] = 'Sentencia SQL para el control de las contraseñas';
+$lang['getUserInfo'] = 'Sentencia SQL para recuperar información del usuario';
+$lang['getGroups'] = 'Sentencia SQL para recuperar la pertenencia a grupos de un usuario';
+$lang['getUsers'] = 'Sentencia SQL para enumerar todos los usuarios';
+$lang['FilterLogin'] = 'Sentencia SQL para filtrar a los usuarios por su login';
+$lang['FilterName'] = 'Sentencia SQL para filtrar a los usuarios por su nombre completo';
+$lang['FilterEmail'] = 'Sentencia SQL para filtrar a los usuarios por su correo electrónico';
+$lang['FilterGroup'] = 'Sentencia SQL para filtrar a los usuarios por su membresía en un grupo';
+$lang['SortOrder'] = 'Sentencia SQL para ordenar a los usuarios';
+$lang['addUser'] = 'Sentencia de SQL para agregar un nuevo usuario';
+$lang['addGroup'] = 'Sentencia de SQL para agregar un nuevo grupo';
+$lang['addUserGroup'] = 'Sentencia SQL para agregar un usuario a un grupo existente';
+$lang['delGroup'] = 'Instrucción SQL para eliminar un grupo';
+$lang['getUserID'] = 'Sentencia SQL para obtener la clave principal de un usuario';
+$lang['delUser'] = 'Sentencia SQL para eliminar un usuario';
+$lang['delUserRefs'] = 'Sentencia SQL para remover a un usuario de su memebresia en todos los grupos';
+$lang['updateUser'] = 'Sentencia SQL para actualizar los datos del usuario';
+$lang['UpdateLogin'] = 'Sentencia de actualizacion para el login del usuario';
+$lang['UpdatePass'] = 'Sentencia de actualizacion para el password del usuario';
+$lang['UpdateEmail'] = 'Sentencia de actualizacion del correo electrónico del usuario';
+$lang['UpdateName'] = 'Sentencia de actualizacion del nombre completo del usuario';
+$lang['getGroupID'] = 'Sentencia SQL para obtener la clave principal de un grupo dado';
diff --git a/lib/plugins/authpgsql/lang/fa/settings.php b/lib/plugins/authpgsql/lang/fa/settings.php
new file mode 100644
index 000000000..813493967
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/fa/settings.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ */
+$lang['database'] = 'پایگاه داده مورد استفاده';
diff --git a/lib/plugins/authpgsql/lang/hr/settings.php b/lib/plugins/authpgsql/lang/hr/settings.php
new file mode 100644
index 000000000..7ae4cec77
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/hr/settings.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['server'] = 'Vaš PostgreSQL server';
+$lang['port'] = 'Port vašeg PostgreSQL servera';
+$lang['user'] = 'PostgreSQL korisničko ime';
+$lang['password'] = 'Lozinka gore navedenoga korisnika';
+$lang['database'] = 'Baza koja se koristi';
+$lang['debug'] = 'Prikaz dodatnih dijagnostičkih informacija';
+$lang['forwardClearPass'] = 'Proslijed lozinku kao običan tekst u SQL izrazima koji slijede, umjesto korištenja passcrypt opcije';
+$lang['checkPass'] = 'SQL izraz za provjeru lozinke';
+$lang['getUserInfo'] = 'SQL izraz za dohvat korisničkih informacija';
+$lang['getGroups'] = 'SQL izraz za dohvat korisničkog članstva u grupama';
+$lang['getUsers'] = 'SQL izraz za ispis svih korisnika';
+$lang['FilterLogin'] = 'SQL izraz za filtriranje korisnika po korisničkom imenu';
+$lang['FilterName'] = 'SQL izraz za filtriranje korisnika po punom imenu';
+$lang['FilterEmail'] = 'SQL izraz za filtriranje korisnika po email adresi';
+$lang['FilterGroup'] = 'SQL izraz za filtriranje korisnika po članstvu u grupama';
+$lang['SortOrder'] = 'SQL izraz za sortiranje korisnika';
+$lang['addUser'] = 'SQL izraz za dodavanje novog korisnika';
+$lang['addGroup'] = 'SQL izraz za dodavanje nove grupe';
+$lang['addUserGroup'] = 'SQL izraz za dodavanje korisnika u postojeću grupu';
+$lang['delGroup'] = 'SQL izraz za brisanje grupe';
+$lang['getUserID'] = 'SQL izraz za dohvaćanje primarnog ključa korisnika';
+$lang['delUser'] = 'SQL izraz za brisanje korisnika';
+$lang['delUserRefs'] = 'SQL izraz za uklanjanje korisnika iz svih grupa';
+$lang['updateUser'] = 'SQL izraz za ažuriranje korisničkog profila';
+$lang['UpdateLogin'] = 'UPDATE izraz za ažuriranje korisničkog imena';
+$lang['UpdatePass'] = 'UPDATE izraz za ažuriranje korisničke lozinke';
+$lang['UpdateEmail'] = 'UPDATE izraz za ažuriranje korisničke email adrese';
+$lang['UpdateName'] = 'UPDATE izraz za ažuriranje korisničkog punog imena';
+$lang['UpdateTarget'] = 'Limitirajući izraz za identificiranje korisnika pri ažuriranju';
+$lang['delUserGroup'] = 'SQL izraz za uklanjanje korisnika iz navedenih grupa';
+$lang['getGroupID'] = 'SQL izraz za dobivanje primarnog ključa navedene grupe';
diff --git a/lib/plugins/authpgsql/lang/it/settings.php b/lib/plugins/authpgsql/lang/it/settings.php
new file mode 100644
index 000000000..baf40a468
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/it/settings.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Francesco <francesco.cavalli@hotmail.com>
+ */
+$lang['server'] = 'Il tuo server PostgreSQL ';
+$lang['port'] = 'La porta del tuo server PostgreSQL ';
+$lang['user'] = 'Lo username PostgreSQL';
+$lang['database'] = 'Database da usare';
diff --git a/lib/plugins/authpgsql/lang/lv/settings.php b/lib/plugins/authpgsql/lang/lv/settings.php
new file mode 100644
index 000000000..889b9566c
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/lv/settings.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['password'] = 'Lietotāja parole';
+$lang['delUser'] = 'SQL pieprasījums lietotāja dzēšanai';
diff --git a/lib/plugins/authpgsql/lang/pl/settings.php b/lib/plugins/authpgsql/lang/pl/settings.php
new file mode 100644
index 000000000..25a2afd4f
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/pl/settings.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mati <mackosa@wp.pl>
+ */
+$lang['server'] = 'Twój serwer PostgreSQL';
+$lang['database'] = 'Baza danych do użycia';
diff --git a/lib/plugins/authpgsql/lang/ru/settings.php b/lib/plugins/authpgsql/lang/ru/settings.php
index 48dd2a87c..65cbce8df 100644
--- a/lib/plugins/authpgsql/lang/ru/settings.php
+++ b/lib/plugins/authpgsql/lang/ru/settings.php
@@ -5,12 +5,14 @@
*
* @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
*/
$lang['server'] = 'Ваш PostgreSQL-сервер';
$lang['port'] = 'Порт вашего PostgreSQL-сервера';
$lang['user'] = 'Имя пользователя PostgreSQL';
$lang['password'] = 'Пароль для указанного пользователя.';
$lang['database'] = 'Имя базы данных';
+$lang['debug'] = 'Отображать дополнительную отладочную информацию';
$lang['checkPass'] = 'Выражение SQL, осуществляющее проверку пароля';
$lang['getUserInfo'] = 'Выражение SQL, осуществляющее извлечение информации о пользователе';
$lang['getGroups'] = 'Выражение SQL, осуществляющее извлечение информации о членстве пользователе в группах';
diff --git a/lib/plugins/authpgsql/lang/tr/settings.php b/lib/plugins/authpgsql/lang/tr/settings.php
new file mode 100644
index 000000000..f6fef9cde
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/tr/settings.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author İlker R. Kapaç <irifat@gmail.com>
+ */
+$lang['server'] = 'PostgreSQL sunucunuz';
+$lang['port'] = 'PostgreSQL sunucunuzun kapısı (port)';
+$lang['user'] = 'PostgreSQL kullanıcısının adı';
+$lang['password'] = 'Yukarıdaki kullanıcı için şifre';
+$lang['database'] = 'Kullanılacak veritabanı';
+$lang['debug'] = 'İlave hata ayıklama bilgisini görüntüle';
diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt
index aecab914e..59b7d89a9 100644
--- a/lib/plugins/authpgsql/plugin.info.txt
+++ b/lib/plugins/authpgsql/plugin.info.txt
@@ -1,7 +1,7 @@
base authpgsql
author Andreas Gohr
email andi@splitbrain.org
-date 2013-02-16
+date 2014-02-15
name PostgreSQL Auth Plugin
desc Provides user authentication against a PostgreSQL database
url http://www.dokuwiki.org/plugin:authpgsql
diff --git a/lib/plugins/authplain/_test/escaping.test.php b/lib/plugins/authplain/_test/escaping.test.php
new file mode 100644
index 000000000..cd5294157
--- /dev/null
+++ b/lib/plugins/authplain/_test/escaping.test.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * These tests are designed to test the capacity of pluginauth to handle
+ * correct escaping of colon field delimiters and backslashes in user content.
+ *
+ * (Note that these tests set some Real Names, etc. that are may not be
+ * valid in the broader dokuwiki context, but the tests ensure that
+ * authplain won't get unexpectedly surprised.)
+ *
+ * @group plugin_authplain
+ * @group plugins
+ */
+class helper_plugin_authplain_escaping_test extends DokuWikiTest {
+
+ protected $pluginsEnabled = array('authplain');
+ protected $auth;
+
+ protected function reloadUsers() {
+ /* auth caches data loaded from file, but recreated object forces reload */
+ $this->auth = new auth_plugin_authplain();
+ }
+
+ function setUp() {
+ global $config_cascade;
+ parent::setUp();
+ $name = $config_cascade['plainauth.users']['default'];
+ copy($name, $name.".orig");
+ $this->reloadUsers();
+ }
+
+ function tearDown() {
+ global $config_cascade;
+ parent::tearDown();
+ $name = $config_cascade['plainauth.users']['default'];
+ copy($name.".orig", $name);
+ }
+
+ public function testMediawikiPasswordHash() {
+ global $conf;
+ $conf['passcrypt'] = 'mediawiki';
+ $this->auth->createUser("mwuser", "12345", "Mediawiki User", "me@example.com");
+ $this->reloadUsers();
+ $this->assertTrue($this->auth->checkPass("mwuser", "12345"));
+ $mwuser = $this->auth->getUserData("mwuser");
+ $this->assertStringStartsWith(":B:",$mwuser['pass']);
+ $this->assertEquals("Mediawiki User",$mwuser['name']);
+ }
+
+ public function testNameWithColons() {
+ $name = ":Colon: User:";
+ $this->auth->createUser("colonuser", "password", $name, "me@example.com");
+ $this->reloadUsers();
+ $user = $this->auth->getUserData("colonuser");
+ $this->assertEquals($name,$user['name']);
+ }
+
+ public function testNameWithBackslashes() {
+ $name = "\\Slash\\ User\\";
+ $this->auth->createUser("slashuser", "password", $name, "me@example.com");
+ $this->reloadUsers();
+ $user = $this->auth->getUserData("slashuser");
+ $this->assertEquals($name,$user['name']);
+ }
+
+ public function testModifyUser() {
+ global $conf;
+ $conf['passcrypt'] = 'mediawiki';
+ $user = $this->auth->getUserData("testuser");
+ $user['name'] = "\\New:Crazy:Name\\";
+ $user['pass'] = "awesome new password";
+ $this->auth->modifyUser("testuser", $user);
+ $this->reloadUsers();
+
+ $saved = $this->auth->getUserData("testuser");
+ $this->assertEquals($saved['name'], $user['name']);
+ $this->assertTrue($this->auth->checkPass("testuser", $user['pass']));
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php
index 8c4ce0dd9..b3ca988b9 100644
--- a/lib/plugins/authplain/auth.php
+++ b/lib/plugins/authplain/auth.php
@@ -76,14 +76,36 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
*
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $user
+ * @param bool $requireGroups (optional) ignored by this plugin, grps info always supplied
* @return array|bool
*/
- public function getUserData($user) {
+ public function getUserData($user, $requireGroups=true) {
if($this->users === null) $this->_loadUserData();
return isset($this->users[$user]) ? $this->users[$user] : false;
}
/**
+ * Creates a string suitable for saving as a line
+ * in the file database
+ * (delimiters escaped, etc.)
+ *
+ * @param string $user
+ * @param string $pass
+ * @param string $name
+ * @param string $mail
+ * @param array $grps list of groups the user is in
+ * @return string
+ */
+ protected function _createUserLine($user, $pass, $name, $mail, $grps) {
+ $groups = join(',', $grps);
+ $userline = array($user, $pass, $name, $mail, $groups);
+ $userline = str_replace('\\', '\\\\', $userline); // escape \ as \\
+ $userline = str_replace(':', '\\:', $userline); // escape : as \:
+ $userline = join(':', $userline)."\n";
+ return $userline;
+ }
+
+ /**
* Create a new User
*
* Returns false if the user already exists, null when an error
@@ -115,8 +137,7 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
if(!is_array($grps)) $grps = array($conf['defaultgroup']);
// prepare user line
- $groups = join(',', $grps);
- $userline = join(':', array($user, $pass, $name, $mail, $groups))."\n";
+ $userline = $this->_createUserLine($user, $pass, $name, $mail, $grps);
if(io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) {
$this->users[$user] = compact('pass', 'name', 'mail', 'grps');
@@ -157,8 +178,7 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
$userinfo[$field] = $value;
}
- $groups = join(',', $userinfo['grps']);
- $userline = join(':', array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
+ $userline = $this->_createUserLine($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $userinfo['grps']);
if(!$this->deleteUsers(array($user))) {
msg('Unable to modify user data. Please inform the Wiki-Admin', -1);
@@ -308,7 +328,11 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
$line = trim($line);
if(empty($line)) continue;
- $row = explode(":", $line, 5);
+ /* NB: preg_split can be deprecated/replaced with str_getcsv once dokuwiki is min php 5.3 */
+ $row = preg_split('/(?<![^\\\\]\\\\)\:/', $line, 5); // allow for : escaped as \:
+ $row = str_replace('\\:', ':', $row);
+ $row = str_replace('\\\\', '\\', $row);
+
$groups = array_values(array_filter(explode(",", $row[4])));
$this->users[$row[0]]['pass'] = $row[1];
diff --git a/lib/plugins/authplain/plugin.info.txt b/lib/plugins/authplain/plugin.info.txt
index b63ee53e4..2659ac7ad 100644
--- a/lib/plugins/authplain/plugin.info.txt
+++ b/lib/plugins/authplain/plugin.info.txt
@@ -1,7 +1,7 @@
base authplain
author Andreas Gohr
email andi@splitbrain.org
-date 2012-11-09
+date 2014-07-01
name Plain Auth Plugin
desc Provides user authentication against DokuWiki's local password storage
url http://www.dokuwiki.org/plugin:authplain
diff --git a/lib/plugins/config/lang/bg/lang.php b/lib/plugins/config/lang/bg/lang.php
index d0df38cae..64ddb1eae 100644
--- a/lib/plugins/config/lang/bg/lang.php
+++ b/lib/plugins/config/lang/bg/lang.php
@@ -67,7 +67,7 @@ $lang['fmode'] = 'Режим (права) за създаване на фа
$lang['allowdebug'] = 'Включване на режи debug - <b>изключете, ако не е нужен!</b>';
/* Display Settings */
-$lang['recent'] = 'Скорошни промени - брой еленти на страница';
+$lang['recent'] = 'Скорошни промени - брой елементи на страница';
$lang['recent_days'] = 'Колко от скорошните промени да се пазят (дни)';
$lang['breadcrumbs'] = 'Брой на следите. За изключване на функцията задайте 0.';
$lang['youarehere'] = 'Йерархични следи (в този случай можете да изключите горната опция)';
@@ -167,7 +167,7 @@ $lang['compress'] = 'Компактен CSS и javascript изглед';
$lang['cssdatauri'] = 'Максимален размер, в байтове, до който изображенията посочени в .CSS файл ще бъдат вграждани в стила (stylesheet), за да се намали броя на HTTP заявките. Техниката не работи за версиите на IE преди 8! Препоръчителни стойности: <code>400</code> до <code>600</code> байта. Въведете <code>0</code> за изключване.';
$lang['send404'] = 'Пращане на "HTTP 404/Page Not Found" за несъществуващи страници';
$lang['broken_iua'] = 'Отметнете, ако ignore_user_abort функцията не работи. Може да попречи на търсенето в страниците. Знае се, че комбинацията IIS+PHP/CGI е лоша. Вижте <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Грешка 852</a> за повече информация.';
-$lang['xsendfile'] = 'Ползване на Х-Sendfile header, за да може уебсървъра да дава статични файлове? Вашият уебсървър трябва да го поддържа.';
+$lang['xsendfile'] = 'Ползване на Х-Sendfile header, за да може уебсървъра да дава статични файлове? Вашият уеб сървър трябва да го поддържа.';
$lang['renderer_xhtml'] = 'Представяне на основните изходни данни (xhtml) от Wiki-то с';
$lang['renderer__core'] = '%s (ядрото на DokuWiki)';
$lang['renderer__plugin'] = '%s (приставка)';
diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php
index e55081a91..d398ebf84 100644
--- a/lib/plugins/config/lang/de/lang.php
+++ b/lib/plugins/config/lang/de/lang.php
@@ -41,7 +41,7 @@ $lang['_links'] = 'Links';
$lang['_media'] = 'Medien';
$lang['_notifications'] = 'Benachrichtigung';
$lang['_syndication'] = 'Syndication (RSS)';
-$lang['_advanced'] = 'Erweitertet';
+$lang['_advanced'] = 'Erweitert';
$lang['_network'] = 'Netzwerk';
$lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.';
$lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.';
diff --git a/lib/plugins/config/lang/en/lang.php b/lib/plugins/config/lang/en/lang.php
index cdef85a85..5e5218aff 100644
--- a/lib/plugins/config/lang/en/lang.php
+++ b/lib/plugins/config/lang/en/lang.php
@@ -101,6 +101,7 @@ $lang['disableactions_subscription'] = 'Subscribe/Unsubscribe';
$lang['disableactions_wikicode'] = 'View source/Export Raw';
$lang['disableactions_profile_delete'] = 'Delete Own Account';
$lang['disableactions_other'] = 'Other actions (comma separated)';
+$lang['disableactions_rss'] = 'XML Syndication (RSS)';
$lang['auth_security_timeout'] = 'Authentication Security Timeout (seconds)';
$lang['securecookie'] = 'Should cookies set via HTTPS only be sent via HTTPS by the browser? Disable this option when only the login of your wiki is secured with SSL but browsing the wiki is done unsecured.';
$lang['remote'] = 'Enable the remote API system. This allows other applications to access the wiki via XML-RPC or other mechanisms.';
@@ -245,10 +246,11 @@ $lang['xsendfile_o_2'] = 'Standard X-Sendfile header';
$lang['xsendfile_o_3'] = 'Proprietary Nginx X-Accel-Redirect header';
/* Display user info */
-$lang['showuseras_o_loginname'] = 'Login name';
-$lang['showuseras_o_username'] = "User's full name";
-$lang['showuseras_o_email'] = "User's e-mail addresss (obfuscated according to mailguard setting)";
-$lang['showuseras_o_email_link'] = "User's e-mail addresss as a mailto: link";
+$lang['showuseras_o_loginname'] = 'Login name';
+$lang['showuseras_o_username'] = "User's full name";
+$lang['showuseras_o_username_link'] = "User's full name as interwiki user link";
+$lang['showuseras_o_email'] = "User's e-mail addresss (obfuscated according to mailguard setting)";
+$lang['showuseras_o_email_link'] = "User's e-mail addresss as a mailto: link";
/* useheading options */
$lang['useheading_o_0'] = 'Never';
diff --git a/lib/plugins/config/plugin.info.txt b/lib/plugins/config/plugin.info.txt
index 510be3be4..9472346b9 100644
--- a/lib/plugins/config/plugin.info.txt
+++ b/lib/plugins/config/plugin.info.txt
@@ -1,7 +1,7 @@
base config
author Christopher Smith
email chris@jalakai.co.uk
-date 2013-02-24
+date 2014-03-18
name Configuration Manager
desc Manage Dokuwiki's Configuration Settings
url http://dokuwiki.org/plugin:config
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 05f8470f7..8dae23110 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -18,6 +18,7 @@ if (!class_exists('configuration')) {
var $_heading = ''; // heading string written at top of config file - don't include comment indicators
var $_loaded = false; // set to true after configuration files are loaded
var $_metadata = array(); // holds metadata describing the settings
+ /** @var setting[] */
var $setting = array(); // array of setting objects
var $locked = false; // configuration is considered locked if it can't be updated
var $show_disabled_plugins = false;
@@ -31,8 +32,10 @@ if (!class_exists('configuration')) {
/**
* constructor
+ *
+ * @param string $datafile path to config metadata file
*/
- function configuration($datafile) {
+ public function configuration($datafile) {
global $conf, $config_cascade;
if (!@file_exists($datafile)) {
@@ -55,7 +58,10 @@ if (!class_exists('configuration')) {
$this->retrieve_settings();
}
- function retrieve_settings() {
+ /**
+ * Retrieve and stores settings in setting[] attribute
+ */
+ public function retrieve_settings() {
global $conf;
$no_default_check = array('setting_fieldset', 'setting_undefined', 'setting_no_class');
@@ -100,7 +106,15 @@ if (!class_exists('configuration')) {
}
}
- function save_settings($id, $header='', $backup=true) {
+ /**
+ * Stores setting[] array to file
+ *
+ * @param string $id Name of plugin, which saves the settings
+ * @param string $header Text at the top of the rewritten settings file
+ * @param bool $backup backup current file? (remove any existing backup)
+ * @return bool succesful?
+ */
+ public function save_settings($id, $header='', $backup=true) {
global $conf;
if ($this->locked) return false;
@@ -138,13 +152,19 @@ if (!class_exists('configuration')) {
/**
* Update last modified time stamp of the config file
*/
- function touch_settings(){
+ public function touch_settings(){
if ($this->locked) return false;
$file = end($this->_local_files);
return @touch($file);
}
- function _read_config_group($files) {
+ /**
+ * Read and merge given config files
+ *
+ * @param array $files file paths
+ * @return array config settings
+ */
+ protected function _read_config_group($files) {
$config = array();
foreach ($files as $file) {
$config = array_merge($config, $this->_read_config($file));
@@ -154,7 +174,10 @@ if (!class_exists('configuration')) {
}
/**
- * return an array of config settings
+ * Return an array of config settings
+ *
+ * @param string $file file path
+ * @return array config settings
*/
function _read_config($file) {
@@ -206,7 +229,14 @@ if (!class_exists('configuration')) {
return $config;
}
- function _out_header($id, $header) {
+ /**
+ * Returns header of rewritten settings file
+ *
+ * @param string $id plugin name of which generated this output
+ * @param string $header additional text for at top of the file
+ * @return string text of header
+ */
+ protected function _out_header($id, $header) {
$out = '';
if ($this->_format == 'php') {
$out .= '<'.'?php'."\n".
@@ -221,7 +251,12 @@ if (!class_exists('configuration')) {
return $out;
}
- function _out_footer() {
+ /**
+ * Returns footer of rewritten settings file
+ *
+ * @return string text of footer
+ */
+ protected function _out_footer() {
$out = '';
if ($this->_format == 'php') {
$out .= "\n// end auto-generated content\n";
@@ -230,9 +265,13 @@ if (!class_exists('configuration')) {
return $out;
}
- // configuration is considered locked if there is no local settings filename
- // or the directory its in is not writable or the file exists and is not writable
- function _is_locked() {
+ /**
+ * Configuration is considered locked if there is no local settings filename
+ * or the directory its in is not writable or the file exists and is not writable
+ *
+ * @return bool true: locked, false: writable
+ */
+ protected function _is_locked() {
if (!$this->_local_files) return true;
$local = $this->_local_files[0];
@@ -247,7 +286,7 @@ if (!class_exists('configuration')) {
* not used ... conf's contents are an array!
* reduce any multidimensional settings to one dimension using CM_KEYMARKER
*/
- function _flatten($conf,$prefix='') {
+ protected function _flatten($conf,$prefix='') {
$out = array();
@@ -264,6 +303,12 @@ if (!class_exists('configuration')) {
return $out;
}
+ /**
+ * Returns array of plugin names
+ *
+ * @return array plugin names
+ * @triggers PLUGIN_CONFIG_PLUGINLIST event
+ */
function get_plugin_list() {
if (is_null($this->_plugin_list)) {
$list = plugin_list('',$this->show_disabled_plugins);
@@ -281,6 +326,9 @@ if (!class_exists('configuration')) {
/**
* load metadata for plugin and template settings
+ *
+ * @param string $tpl name of active template
+ * @return array metadata of settings
*/
function get_plugintpl_metadata($tpl){
$file = '/conf/metadata.php';
@@ -321,7 +369,10 @@ if (!class_exists('configuration')) {
}
/**
- * load default settings for plugins and templates
+ * Load default settings for plugins and templates
+ *
+ * @param string $tpl name of active template
+ * @return array default settings
*/
function get_plugintpl_default($tpl){
$file = '/conf/default.php';
@@ -368,7 +419,11 @@ if (!class_exists('setting')) {
static protected $_validCautions = array('warning','danger','security');
- function setting($key, $params=null) {
+ /**
+ * @param string $key
+ * @param array|null $params array with metadata of setting
+ */
+ public function setting($key, $params=null) {
$this->_key = $key;
if (is_array($params)) {
@@ -379,9 +434,13 @@ if (!class_exists('setting')) {
}
/**
- * receives current values for the setting $key
+ * Receives current values for the setting $key
+ *
+ * @param mixed $default default setting value
+ * @param mixed $local local setting value
+ * @param mixed $protected protected setting value
*/
- function initialize($default, $local, $protected) {
+ public function initialize($default, $local, $protected) {
if (isset($default)) $this->_default = $default;
if (isset($local)) $this->_local = $local;
if (isset($protected)) $this->_protected = $protected;
@@ -395,7 +454,7 @@ if (!class_exists('setting')) {
* @param mixed $input the new value
* @return boolean true if changed, false otherwise (incl. on error)
*/
- function update($input) {
+ public function update($input) {
if (is_null($input)) return false;
if ($this->is_protected()) return false;
@@ -413,9 +472,13 @@ if (!class_exists('setting')) {
}
/**
- * @return array(string $label_html, string $input_html)
+ * Build html for label and input of setting
+ *
+ * @param DokuWiki_Plugin $plugin object of config plugin
+ * @param bool $echo true: show inputted value, when error occurred, otherwise the stored setting
+ * @return array(string $label_html, string $input_html)
*/
- function html(&$plugin, $echo=false) {
+ public function html(&$plugin, $echo=false) {
$value = '';
$disable = '';
@@ -439,9 +502,9 @@ if (!class_exists('setting')) {
}
/**
- * generate string to save setting value to file according to $fmt
+ * Generate string to save setting value to file according to $fmt
*/
- function out($var, $fmt='php') {
+ public function out($var, $fmt='php') {
if ($this->is_protected()) return '';
if (is_null($this->_local) || ($this->_default == $this->_local)) return '';
@@ -457,17 +520,45 @@ if (!class_exists('setting')) {
return $out;
}
- function prompt(&$plugin) {
+ /**
+ * Returns the localized prompt
+ *
+ * @param DokuWiki_Plugin $plugin object of config plugin
+ * @return string text
+ */
+ public function prompt(&$plugin) {
$prompt = $plugin->getLang($this->_key);
if (!$prompt) $prompt = htmlspecialchars(str_replace(array('____','_'),' ',$this->_key));
return $prompt;
}
- function is_protected() { return !is_null($this->_protected); }
- function is_default() { return !$this->is_protected() && is_null($this->_local); }
- function error() { return $this->_error; }
+ /**
+ * Is setting protected
+ *
+ * @return bool
+ */
+ public function is_protected() { return !is_null($this->_protected); }
+
+ /**
+ * Is setting the default?
+ *
+ * @return bool
+ */
+ public function is_default() { return !$this->is_protected() && is_null($this->_local); }
+
+ /**
+ * Has an error?
+ *
+ * @return bool
+ */
+ public function error() { return $this->_error; }
- function caution() {
+ /**
+ * Returns caution
+ *
+ * @return bool|string caution string, otherwise false for invalid caution
+ */
+ public function caution() {
if (!empty($this->_caution)) {
if (!in_array($this->_caution, setting::$_validCautions)) {
trigger_error('Invalid caution string ('.$this->_caution.') in metadata for setting "'.$this->_key.'"', E_USER_WARNING);
@@ -486,7 +577,14 @@ if (!class_exists('setting')) {
return false;
}
- function _out_key($pretty=false,$url=false) {
+ /**
+ * Returns setting key, eventually with referer to config: namespace at dokuwiki.org
+ *
+ * @param bool $pretty create nice key
+ * @param bool $url provide url to config: namespace
+ * @return string key
+ */
+ public function _out_key($pretty=false,$url=false) {
if($pretty){
$out = str_replace(CM_KEYMARKER,"»",$this->_key);
if ($url && !strstr($out,'»')) {//provide no urls for plugins, etc.
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index f9dabfeb0..aaa32cd70 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -116,7 +116,7 @@ $meta['fullpath'] = array('onoff','_caution' => 'security');
$meta['typography'] = array('multichoice','_choices' => array(0,1,2));
$meta['dformat'] = array('string');
$meta['signature'] = array('string');
-$meta['showuseras'] = array('multichoice','_choices' => array('loginname','username','email','email_link'));
+$meta['showuseras'] = array('multichoice','_choices' => array('loginname','username','username_link','email','email_link'));
$meta['toptoclevel'] = array('multichoice','_choices' => array(1,2,3,4,5)); // 5 toc levels
$meta['tocminheads'] = array('multichoice','_choices' => array(0,1,2,3,4,5,10,15,20));
$meta['maxtoclevel'] = array('multichoice','_choices' => array(0,1,2,3,4,5));
@@ -138,7 +138,7 @@ $meta['manager'] = array('string');
$meta['profileconfirm'] = array('onoff');
$meta['rememberme'] = array('onoff');
$meta['disableactions'] = array('disableactions',
- '_choices' => array('backlink','index','recent','revisions','search','subscription','register','resendpwd','profile','profile_delete','edit','wikicode','check'),
+ '_choices' => array('backlink','index','recent','revisions','search','subscription','register','resendpwd','profile','profile_delete','edit','wikicode','check', 'rss'),
'_combine' => array('subscription' => array('subscribe','unsubscribe'), 'wikicode' => array('source','export_raw')));
$meta['auth_security_timeout'] = array('numeric');
$meta['securecookie'] = array('onoff');
diff --git a/lib/plugins/extension/helper/extension.php b/lib/plugins/extension/helper/extension.php
index 7958cd2da..2aca0e218 100644
--- a/lib/plugins/extension/helper/extension.php
+++ b/lib/plugins/extension/helper/extension.php
@@ -57,6 +57,8 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
if(substr($id, 0 , 9) == 'template:'){
$this->base = substr($id, 9);
$this->is_template = true;
+ } else {
+ $this->is_template = false;
}
$this->localInfo = array();
@@ -290,7 +292,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
*/
public function getUpdateDate() {
if (!empty($this->managerData['updated'])) return $this->managerData['updated'];
- return false;
+ return $this->getInstallDate();
}
/**
@@ -575,6 +577,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
try {
$installed = $this->installArchive("$tmp/upload.archive", true, $basename);
+ $this->updateManagerData('', $installed);
// purge cache
$this->purgeCache();
}catch (Exception $e){
@@ -594,12 +597,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
try {
$path = $this->download($url);
$installed = $this->installArchive($path, true);
+ $this->updateManagerData($url, $installed);
- // purge caches
- foreach($installed as $ext => $info){
- $this->setExtension($ext);
- $this->purgeCache();
- }
+ // purge cache
+ $this->purgeCache();
}catch (Exception $e){
throw $e;
}
@@ -613,8 +614,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
* @return array The list of installed extensions
*/
public function installOrUpdate() {
- $path = $this->download($this->getDownloadURL());
+ $url = $this->getDownloadURL();
+ $path = $this->download($url);
$installed = $this->installArchive($path, $this->isInstalled(), $this->getBase());
+ $this->updateManagerData($url, $installed);
// refresh extension information
if (!isset($installed[$this->getID()])) {
@@ -729,6 +732,37 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
}
/**
+ * Save the given URL and current datetime in the manager.dat file of all installed extensions
+ *
+ * @param string $url Where the extension was downloaded from. (empty for manual installs via upload)
+ * @param array $installed Optional list of installed plugins
+ */
+ protected function updateManagerData($url = '', $installed = null) {
+ $origID = $this->getID();
+
+ if(is_null($installed)) {
+ $installed = array($origID);
+ }
+
+ foreach($installed as $ext => $info) {
+ if($this->getID() != $ext) $this->setExtension($ext);
+ if($url) {
+ $this->managerData['downloadurl'] = $url;
+ } elseif(isset($this->managerData['downloadurl'])) {
+ unset($this->managerData['downloadurl']);
+ }
+ if(isset($this->managerData['installed'])) {
+ $this->managerData['updated'] = date('r');
+ } else {
+ $this->managerData['installed'] = date('r');
+ }
+ $this->writeManagerData();
+ }
+
+ if($this->getID() != $origID) $this->setExtension($origID);
+ }
+
+ /**
* Read the manager.dat file
*/
protected function readManagerData() {
diff --git a/lib/plugins/extension/helper/list.php b/lib/plugins/extension/helper/list.php
index 01a5c516a..9b1988d84 100644
--- a/lib/plugins/extension/helper/list.php
+++ b/lib/plugins/extension/helper/list.php
@@ -188,10 +188,17 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
* @return string The HTML code
*/
function make_screenshot(helper_plugin_extension_extension $extension) {
- if($extension->getScreenshotURL()) {
+ $screen = $extension->getScreenshotURL();
+ $thumb = $extension->getThumbnailURL();
+
+ if($screen) {
+ // use protocol independent URLs for images coming from us #595
+ $screen = str_replace('http://www.dokuwiki.org', '//www.dokuwiki.org', $screen);
+ $thumb = str_replace('http://www.dokuwiki.org', '//www.dokuwiki.org', $thumb);
+
$title = sprintf($this->getLang('screenshot'), hsc($extension->getDisplayName()));
- $img = '<a href="'.hsc($extension->getScreenshotURL()).'" target="_blank" class="extension_screenshot">'.
- '<img alt="'.$title.'" width="120" height="70" src="'.hsc($extension->getThumbnailURL()).'" />'.
+ $img = '<a href="'.hsc($screen).'" target="_blank" class="extension_screenshot">'.
+ '<img alt="'.$title.'" width="120" height="70" src="'.hsc($thumb).'" />'.
'</a>';
} elseif($extension->isTemplate()) {
$img = '<img alt="" width="120" height="70" src="'.DOKU_BASE.'lib/plugins/extension/images/template.png" />';
@@ -380,7 +387,8 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
$return .= '<dd>';
$return .= hsc($extension->getInstalledVersion());
$return .= '</dd>';
- } else {
+ }
+ if (!$extension->isBundled()) {
$return .= '<dt>'.$this->getLang('install_date').'</dt>';
$return .= '<dd>';
$return .= ($extension->getUpdateDate() ? hsc($extension->getUpdateDate()) : $this->getLang('unknown'));
@@ -394,13 +402,6 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
$return .= '</dd>';
}
- if($extension->getInstallDate()) {
- $return .= '<dt>'.$this->getLang('installed').'</dt>';
- $return .= '<dd>';
- $return .= hsc($extension->getInstallDate());
- $return .= '</dd>';
- }
-
$return .= '<dt>'.$this->getLang('provides').'</dt>';
$return .= '<dd><bdi>';
$return .= ($extension->getTypes() ? hsc(implode(', ', $extension->getTypes())) : $default);
diff --git a/lib/plugins/extension/helper/repository.php b/lib/plugins/extension/helper/repository.php
index 1f603a866..6ffe89eb7 100644
--- a/lib/plugins/extension/helper/repository.php
+++ b/lib/plugins/extension/helper/repository.php
@@ -31,7 +31,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
$request_data = array('fmt' => 'php');
$request_needed = false;
foreach ($list as $name) {
- $cache = new cache('##extension_manager##'.$name, 'repo');
+ $cache = new cache('##extension_manager##'.$name, '.repo');
$result = null;
if (!isset($this->loaded_extensions[$name]) && $this->hasAccess() && !$cache->useCache(array('age' => 3600 * 24))) {
$this->loaded_extensions[$name] = true;
@@ -46,7 +46,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
if ($data !== false) {
$extensions = unserialize($data);
foreach ($extensions as $extension) {
- $cache = new cache('##extension_manager##'.$extension['plugin'], 'repo');
+ $cache = new cache('##extension_manager##'.$extension['plugin'], '.repo');
$cache->storeCache(serialize($extension));
}
} else {
@@ -63,7 +63,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
*/
public function hasAccess() {
if ($this->has_access === null) {
- $cache = new cache('##extension_manager###hasAccess', 'repo');
+ $cache = new cache('##extension_manager###hasAccess', '.repo');
$result = null;
if (!$cache->useCache(array('age' => 3600 * 24, 'purge'=>1))) {
$httpclient = new DokuHTTPClient();
@@ -90,7 +90,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
* @return array The data or null if nothing was found (possibly no repository access)
*/
public function getData($name) {
- $cache = new cache('##extension_manager##'.$name, 'repo');
+ $cache = new cache('##extension_manager##'.$name, '.repo');
$result = null;
if (!isset($this->loaded_extensions[$name]) && $this->hasAccess() && !$cache->useCache(array('age' => 3600 * 24))) {
$this->loaded_extensions[$name] = true;
@@ -130,7 +130,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
// store cache info for each extension
foreach($result as $ext){
$name = $ext['plugin'];
- $cache = new cache('##extension_manager##'.$name, 'repo');
+ $cache = new cache('##extension_manager##'.$name, '.repo');
$cache->storeCache(serialize($ext));
$ids[] = $name;
}
diff --git a/lib/plugins/extension/images/disabled.png b/lib/plugins/extension/images/disabled.png
index 7a0dbb3b5..93a813642 100644
--- a/lib/plugins/extension/images/disabled.png
+++ b/lib/plugins/extension/images/disabled.png
Binary files differ
diff --git a/lib/plugins/extension/images/enabled.png b/lib/plugins/extension/images/enabled.png
index 7c051cda1..92d958802 100644
--- a/lib/plugins/extension/images/enabled.png
+++ b/lib/plugins/extension/images/enabled.png
Binary files differ
diff --git a/lib/plugins/extension/images/license.txt b/lib/plugins/extension/images/license.txt
index 254b9cdf6..44e176ac9 100644
--- a/lib/plugins/extension/images/license.txt
+++ b/lib/plugins/extension/images/license.txt
@@ -1,4 +1,4 @@
-enabled.png - CC-BY-ND, (c) Emey87 http://www.iconfinder.com/icondetails/65590/48/lightbulb_icon
-disabled.png - CC-BY-ND, (c) Emey87 http://www.iconfinder.com/icondetails/65589/48/idea_lightbulb_off_icon
+enabled.png - CC0, (c) Tanguy Ortolo
+disabled.png - public domain, (c) Tango Desktop Project http://commons.wikimedia.org/wiki/File:Dialog-information.svg
plugin.png - public domain, (c) nicubunu, http://openclipart.org/detail/15093/blue-jigsaw-piece-07-by-nicubunu
template.png - public domain, (c) mathec, http://openclipart.org/detail/166596/palette-by-mathec
diff --git a/lib/plugins/extension/lang/cs/intro_install.txt b/lib/plugins/extension/lang/cs/intro_install.txt
new file mode 100644
index 000000000..b274959b9
--- /dev/null
+++ b/lib/plugins/extension/lang/cs/intro_install.txt
@@ -0,0 +1 @@
+Zde můžete ručně instalovat zásuvné moduly a šablony vzhledu, buď nahráním, nebo zadáním přímé URL pro stažení. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/cs/lang.php b/lib/plugins/extension/lang/cs/lang.php
new file mode 100644
index 000000000..27b3a94a3
--- /dev/null
+++ b/lib/plugins/extension/lang/cs/lang.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Viktor Zavadil <vzavadil@newps.cz>
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['menu'] = 'Manager rozšíření';
+$lang['tab_plugins'] = 'Instalované moduly';
+$lang['tab_templates'] = 'Instalované šablony';
+$lang['tab_search'] = 'Vyhledej a instaluj';
+$lang['tab_install'] = 'Ruční instalování';
+$lang['notimplemented'] = 'Tato vychytávka není dosud implementována';
+$lang['notinstalled'] = 'Toto rozšíření není instalováno';
+$lang['alreadyenabled'] = 'Toto rozšíření je již povoleno';
+$lang['alreadydisabled'] = 'Toto rozšíření je již vypnuto';
+$lang['unknownauthor'] = 'Neznámý autor';
+$lang['unknownversion'] = 'Neznámá verze';
+$lang['btn_info'] = 'Zobrazit více informací';
+$lang['btn_update'] = 'Aktualizovat';
+$lang['btn_uninstall'] = 'Odinstalovat';
+$lang['btn_enable'] = 'Povolit';
+$lang['btn_disable'] = 'Zakázat';
+$lang['btn_install'] = 'Instalovat';
+$lang['btn_reinstall'] = 'Přeinstalovat';
+$lang['js']['reallydel'] = 'Opravdu odinstalovat toto rozšíření?';
+$lang['search_for'] = 'Hledat rozšíření:';
+$lang['search'] = 'Hledat';
+$lang['popularity'] = 'Popularita: %s%%';
+$lang['homepage_link'] = 'Dokumenty';
+$lang['bugs_features'] = 'Chyby';
+$lang['tags'] = 'Štítky:';
+$lang['author_hint'] = 'Vyhledat rozšíření podle tohoto autora';
+$lang['installed'] = 'Nainstalováno:';
+$lang['repository'] = 'Repozitář:';
+$lang['unknown'] = '<em>neznámý</em>';
+$lang['installed_version'] = 'Nainstalovaná verze:';
+$lang['install_date'] = 'Poslední aktualizace';
+$lang['available_version'] = 'Dostupná verze:';
+$lang['compatible'] = 'Kompatibilní s:';
+$lang['depends'] = 'Závisí na:';
+$lang['similar'] = 'Podobný jako:';
+$lang['donate'] = 'Líbí se ti to?';
+$lang['donate_action'] = 'Kup autorovi kávu!';
+$lang['repo_retry'] = 'Opakovat';
+$lang['provides'] = 'Poskytuje:';
+$lang['status'] = 'Stav:';
+$lang['status_installed'] = 'instalovaný';
+$lang['status_not_installed'] = 'nenainstalovaný';
+$lang['status_protected'] = 'chráněný';
+$lang['status_enabled'] = 'povolený';
+$lang['status_disabled'] = 'zakázaný';
+$lang['status_unmodifiable'] = 'neměnný';
+$lang['status_plugin'] = 'zásuvný modul';
+$lang['status_template'] = 'šablona';
+$lang['msg_delete_success'] = 'Rozšíření odinstalováno';
diff --git a/lib/plugins/extension/lang/de/intro_install.txt b/lib/plugins/extension/lang/de/intro_install.txt
new file mode 100644
index 000000000..4ecebe959
--- /dev/null
+++ b/lib/plugins/extension/lang/de/intro_install.txt
@@ -0,0 +1 @@
+Hier können Sie Plugins und Templates von Hand installieren indem Sie sie hochladen oder eine Download-URL angeben. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/de/intro_plugins.txt b/lib/plugins/extension/lang/de/intro_plugins.txt
new file mode 100644
index 000000000..1a1521050
--- /dev/null
+++ b/lib/plugins/extension/lang/de/intro_plugins.txt
@@ -0,0 +1 @@
+Dies sind die Plugins, die bereits installiert sind. Sie können sie hier an- oder abschalten oder sie komplett deinstallieren. Außerdem werden hier Updates zu den installiereten Plugins angezeigt. Bitte lesen Sie vor einem Update die zugehörige Dokumentation. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/de/intro_search.txt b/lib/plugins/extension/lang/de/intro_search.txt
new file mode 100644
index 000000000..7df8de185
--- /dev/null
+++ b/lib/plugins/extension/lang/de/intro_search.txt
@@ -0,0 +1 @@
+Dieser Tab gibt Ihnen Zugriff auf alle vorhandenen Plugins und Templates für DokuWiki. Bitte bedenken sie das jede installierte Erweiterung ein Sicherheitsrisiko darstellen kann. Sie sollten vor einer Installation die [[doku>security#plugin_security|Plugin Security]] Informationen lesen. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/de/intro_templates.txt b/lib/plugins/extension/lang/de/intro_templates.txt
new file mode 100644
index 000000000..d71ce6237
--- /dev/null
+++ b/lib/plugins/extension/lang/de/intro_templates.txt
@@ -0,0 +1 @@
+Dies sind die in Ihrem Dokuwiki installierten Templates. Sie können das gewünschte Template im [[?do=admin&page=config|Konfigurations Manager]] aktivieren. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/de/lang.php b/lib/plugins/extension/lang/de/lang.php
new file mode 100644
index 000000000..ce5495e24
--- /dev/null
+++ b/lib/plugins/extension/lang/de/lang.php
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author H. Richard <wanderer379@t-online.de>
+ * @author Joerg <scooter22@gmx.de>
+ * @author Simon <st103267@stud.uni-stuttgart.de>
+ * @author Hoisl <hoisl@gmx.at>
+ * @author Dominik Mahr <drache.mahr@gmx.de>
+ */
+$lang['menu'] = 'Erweiterungen verwalten';
+$lang['tab_plugins'] = 'Installierte Plugins';
+$lang['tab_templates'] = 'Installierte Templates';
+$lang['tab_search'] = 'Suchen und Installieren';
+$lang['tab_install'] = 'Händisch installieren';
+$lang['notimplemented'] = 'Dieses Fähigkeit/Eigenschaft wurde noch nicht implementiert';
+$lang['notinstalled'] = 'Diese Erweiterung ist nicht installiert';
+$lang['alreadyenabled'] = 'Diese Erweiterung ist bereits aktiviert';
+$lang['alreadydisabled'] = 'Diese Erweiterung ist bereits deaktiviert';
+$lang['pluginlistsaveerror'] = 'Es gab einen Fehler beim Speichern der Plugin-Liste';
+$lang['unknownauthor'] = 'Unbekannter Autor';
+$lang['unknownversion'] = 'Unbekannte Version';
+$lang['btn_info'] = 'Zeige weitere Info';
+$lang['btn_update'] = 'Update';
+$lang['btn_uninstall'] = 'Deinstallation';
+$lang['btn_enable'] = 'Aktivieren';
+$lang['btn_disable'] = 'Deaktivieren';
+$lang['btn_install'] = 'Installieren';
+$lang['btn_reinstall'] = 'Neu installieren';
+$lang['js']['reallydel'] = 'Wollen Sie diese Erweiterung wirklich löschen?';
+$lang['search_for'] = 'Erweiterung suchen:';
+$lang['search'] = 'Suchen';
+$lang['extensionby'] = '<strong>%s</strong> von %s';
+$lang['screenshot'] = 'Bildschirmfoto von %s';
+$lang['popularity'] = 'Popularität: %s%%';
+$lang['homepage_link'] = 'Doku';
+$lang['bugs_features'] = 'Bugs';
+$lang['tags'] = 'Schlagworte';
+$lang['author_hint'] = 'Suche weitere Erweiterungen dieses Autors';
+$lang['installed'] = 'Installiert:';
+$lang['downloadurl'] = 'URL zum Herunterladen';
+$lang['repository'] = 'Quelle:';
+$lang['unknown'] = '<em>unbekannt</em>';
+$lang['installed_version'] = 'Installierte Version';
+$lang['install_date'] = 'Ihr letztes Update:';
+$lang['available_version'] = 'Verfügbare Version: ';
+$lang['compatible'] = 'Kompatibel mit:';
+$lang['depends'] = 'Benötigt:';
+$lang['similar'] = 'Ist ähnlich zu:';
+$lang['conflicts'] = 'Nicht kompatibel mit:';
+$lang['donate'] = 'Nützlich?';
+$lang['donate_action'] = 'Spendieren Sie dem Autor einen Kaffee!';
+$lang['repo_retry'] = 'Neu versuchen';
+$lang['provides'] = 'Enthält';
+$lang['status'] = 'Status';
+$lang['status_installed'] = 'installiert';
+$lang['status_not_installed'] = 'nicht installiert';
+$lang['status_protected'] = 'geschützt';
+$lang['status_enabled'] = 'aktiviert';
+$lang['status_disabled'] = 'deaktiviert';
+$lang['status_unmodifiable'] = 'unveränderlich';
+$lang['status_plugin'] = 'Plugin';
+$lang['status_template'] = 'Template';
+$lang['status_bundled'] = 'gebündelt';
+$lang['msg_enabled'] = 'Plugin %s ist aktiviert';
+$lang['msg_disabled'] = 'Erweiterung %s ist deaktiviert';
+$lang['msg_delete_success'] = 'Erweiterung wurde entfernt';
+$lang['msg_template_install_success'] = 'Das Template %s wurde erfolgreich installiert';
+$lang['msg_template_update_success'] = 'Das Update des Templates %s war erfolgreich ';
+$lang['msg_plugin_install_success'] = 'Das Plugin %s wurde erfolgreich installiert';
+$lang['msg_plugin_update_success'] = 'Das Update des Plugins %s war erfolgreich';
+$lang['msg_upload_failed'] = 'Fehler beim Hochladen der Datei';
+$lang['missing_dependency'] = '<strong>fehlende oder deaktivierte Abhängigkeit:<strong>%s';
+$lang['security_issue'] = '<strong>Sicherheitsproblem:</strong> %s';
+$lang['security_warning'] = '<strong>Sicherheitswarnung:</strong> %s';
+$lang['update_available'] = '<strong>Update:</strong> Version %s steht zum Download bereit.';
+$lang['wrong_folder'] = '<strong>Plugin wurde nicht korrekt installiert:</strong> Benennen Sie das Plugin-Verzeichnis "%s" in "%s" um.';
+$lang['url_change'] = '<strong>URL geändert:</strong> Die Download URL wurde seit dem letzten Download geändert. Internetadresse vor Aktualisierung der Erweiterung auf Gültigkeit prüfen.<br />Neu: %s<br />Alt: %s';
+$lang['error_badurl'] = 'URLs sollten mit http oder https beginnen';
+$lang['error_dircreate'] = 'Temporären Ordner konnte nicht erstellt werden, um Download zu empfangen';
+$lang['error_download'] = 'Download der Datei: %s nicht möglich.';
+$lang['error_decompress'] = 'Die heruntergeladene Datei konnte nicht entpackt werden. Dies kann die Folge eines fehlerhaften Downloads sein. In diesem Fall sollten Sie versuchen den Vorgang zu wiederholen. Es kann auch die Folge eines unbekannten Kompressionsformates sein, in diesem ​​Fall müssen Sie die Datei selber herunterladen und manuell installieren.';
+$lang['error_findfolder'] = 'Das Erweiterungs-Verzeichnis konnte nicht identifiziert werden, laden und installieren sie die Datei manuell.';
+$lang['error_copy'] = 'Beim Versuch Dateien in den Ordner <em>%s</em>: zu installieren trat ein Kopierfehler auf. Die Dateizugriffsberechtigungen könnten falsch sein. Dies kann an einem unvollständig installierten Plugin liegen und beeinträchtigt somit die Stabilität Ihre Wiki-Installation.';
+$lang['noperms'] = 'Das Erweiterungs-Verzeichnis ist schreibgeschützt';
+$lang['notplperms'] = 'Das Template-Verzeichnis ist schreibgeschützt';
+$lang['nopluginperms'] = 'Das Plugin-Verzeichnis ist schreibgeschützt';
+$lang['git'] = 'Diese Erweiterung wurde über git installiert und sollte daher nicht hier aktualisiert werden.';
+$lang['install_url'] = 'Von Webadresse (URL) installieren';
+$lang['install_upload'] = 'Erweiterung hochladen:';
+$lang['repo_error'] = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stellen sie sicher das der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfen sie ihre Proxy Einstellungen.';
diff --git a/lib/plugins/extension/lang/en/lang.php b/lib/plugins/extension/lang/en/lang.php
index 5224f694a..72c9b9e2d 100644
--- a/lib/plugins/extension/lang/en/lang.php
+++ b/lib/plugins/extension/lang/en/lang.php
@@ -96,4 +96,6 @@ $lang['nopluginperms'] = 'Plugin directory is not writable';
$lang['git'] = 'This extension was installed via git, you may not want to update it here.';
$lang['install_url'] = 'Install from URL:';
-$lang['install_upload'] = 'Upload Extension:'; \ No newline at end of file
+$lang['install_upload'] = 'Upload Extension:';
+
+$lang['repo_error'] = 'The plugin repository could not be contacted. Make sure your server is allowed to contact www.dokuwiki.org and check your proxy settings.'; \ No newline at end of file
diff --git a/lib/plugins/extension/lang/eo/intro_install.txt b/lib/plugins/extension/lang/eo/intro_install.txt
new file mode 100644
index 000000000..d9c63da1d
--- /dev/null
+++ b/lib/plugins/extension/lang/eo/intro_install.txt
@@ -0,0 +1 @@
+Tie vi povas permane instali kromaĵojn kaj ŝablonojn tra alŝuto aŭ indiko de URL por rekta elŝuto. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/eo/intro_plugins.txt b/lib/plugins/extension/lang/eo/intro_plugins.txt
new file mode 100644
index 000000000..cc7ae6628
--- /dev/null
+++ b/lib/plugins/extension/lang/eo/intro_plugins.txt
@@ -0,0 +1 @@
+Jenaj kromaĵoj momente estas instalitaj en via DokuWiki. Vi povas ebligi, malebligi aŭ eĉ tute malinstali ilin tie. Ankaŭ montriĝos aktualigoj de kromaĵoj -- certiĝu, ke vi legis la dokumentadon de la kromaĵo antaŭ aktualigo. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/eo/intro_search.txt b/lib/plugins/extension/lang/eo/intro_search.txt
new file mode 100644
index 000000000..5d194948c
--- /dev/null
+++ b/lib/plugins/extension/lang/eo/intro_search.txt
@@ -0,0 +1 @@
+Tiu tabelo donas aliron al ĉiuj haveblaj eksteraj kromaĵoj kaj ŝablonoj por DokuWiki. Bonvolu konscii, ke instali eksteran kodaĵon povas enkonduki **sekurecriskon**, prefere legu antaŭe pri [[doku>security#plugin_security|sekureco de kromaĵo]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/eo/intro_templates.txt b/lib/plugins/extension/lang/eo/intro_templates.txt
new file mode 100644
index 000000000..6dc0ef671
--- /dev/null
+++ b/lib/plugins/extension/lang/eo/intro_templates.txt
@@ -0,0 +1 @@
+Jenaj ŝablonoj momente instaliĝis en via DokuWiki. Elektu la ŝablonon por uzi en la [[?do=admin&page=config|Opcia administrilo]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/eo/lang.php b/lib/plugins/extension/lang/eo/lang.php
new file mode 100644
index 000000000..6ce840be8
--- /dev/null
+++ b/lib/plugins/extension/lang/eo/lang.php
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Robert Bogenschneider <bogi@uea.org>
+ */
+$lang['menu'] = 'Aldonaĵa administrado';
+$lang['tab_plugins'] = 'Instalitaj kromaĵoj';
+$lang['tab_templates'] = 'Instalitaj ŝablonoj';
+$lang['tab_search'] = 'Serĉi kaj instali';
+$lang['tab_install'] = 'Permana instalado';
+$lang['notimplemented'] = 'Tiu funkcio ankoraŭ ne realiĝis';
+$lang['notinstalled'] = 'Tiu aldonaĵo ne estas instalita';
+$lang['alreadyenabled'] = 'Tiu aldonaĵo jam ebliĝis';
+$lang['alreadydisabled'] = 'Tiu aldonaĵo jam malebliĝis';
+$lang['pluginlistsaveerror'] = 'Okazis eraro dum la kromaĵlisto konserviĝis';
+$lang['unknownauthor'] = 'Nekonata aŭtoro';
+$lang['unknownversion'] = 'Nekonata versio';
+$lang['btn_info'] = 'Montri pliajn informojn';
+$lang['btn_update'] = 'Aktualigi';
+$lang['btn_uninstall'] = 'Malinstali';
+$lang['btn_enable'] = 'Ebligi';
+$lang['btn_disable'] = 'Malebligi';
+$lang['btn_install'] = 'Instali';
+$lang['btn_reinstall'] = 'Re-instali';
+$lang['js']['reallydel'] = 'Ĉu vere malinstali la aldonaĵon?';
+$lang['search_for'] = 'Serĉi la aldonaĵon:';
+$lang['search'] = 'Serĉi';
+$lang['extensionby'] = '<strong>%s</strong> fare de %s';
+$lang['screenshot'] = 'Ekrankopio de %s';
+$lang['popularity'] = 'Populareco: %s%%';
+$lang['homepage_link'] = 'Dokumentoj';
+$lang['bugs_features'] = 'Cimoj';
+$lang['tags'] = 'Etikedoj:';
+$lang['author_hint'] = 'Serĉi aldonaĵojn laŭ tiu aŭtoro:';
+$lang['installed'] = 'Instalitaj:';
+$lang['downloadurl'] = 'URL por elŝuti:';
+$lang['repository'] = 'Kodbranĉo:';
+$lang['unknown'] = '<em>nekonata</em>';
+$lang['installed_version'] = 'Instalita versio:';
+$lang['install_date'] = 'Via lasta aktualigo:';
+$lang['available_version'] = 'Havebla versio:';
+$lang['compatible'] = 'Kompatibla kun:';
+$lang['depends'] = 'Dependas de:';
+$lang['similar'] = 'Simila al:';
+$lang['conflicts'] = 'Konfliktas kun:';
+$lang['donate'] = 'Ĉu vi ŝatas tion?';
+$lang['donate_action'] = 'Aĉetu kafon al la aŭtoro!';
+$lang['repo_retry'] = 'Reprovi';
+$lang['provides'] = 'Provizas per:';
+$lang['status'] = 'Statuso:';
+$lang['status_installed'] = 'instalita';
+$lang['status_not_installed'] = 'ne instalita';
+$lang['status_protected'] = 'protektita';
+$lang['status_enabled'] = 'ebligita';
+$lang['status_disabled'] = 'malebligita';
+$lang['status_unmodifiable'] = 'neŝanĝebla';
+$lang['status_plugin'] = 'kromaĵo';
+$lang['status_template'] = 'ŝablono';
+$lang['status_bundled'] = 'kunliverita';
+$lang['msg_enabled'] = 'Kromaĵo %s ebligita';
+$lang['msg_disabled'] = 'Kromaĵo %s malebligita';
+$lang['msg_delete_success'] = 'Aldonaĵo malinstaliĝis';
+$lang['msg_template_install_success'] = 'Ŝablono %s sukcese instaliĝis';
+$lang['msg_template_update_success'] = 'Ŝablono %s sukcese aktualiĝis';
+$lang['msg_plugin_install_success'] = 'Kromaĵo %s sukcese instaliĝis';
+$lang['msg_plugin_update_success'] = 'Kromaĵo %s sukcese aktualiĝis';
+$lang['msg_upload_failed'] = 'Ne eblis alŝuti la dosieron';
+$lang['missing_dependency'] = '<strong>Mankanta aŭ malebligita dependeco:</strong> %s';
+$lang['security_issue'] = '<strong>Sekureca problemo:</strong> %s';
+$lang['security_warning'] = '<strong>Sekureca averto:</strong> %s';
+$lang['update_available'] = '<strong>Aktualigo:</strong> Nova versio %s haveblas.';
+$lang['wrong_folder'] = '<strong>Kromaĵo instalita malĝuste:</strong> Renomu la kromaĵdosierujon "%s" al "%s".';
+$lang['url_change'] = '<strong>URL ŝanĝita:</strong> La elŝuta URL ŝanĝiĝis ekde la lasta elŝuto. Kontrolu, ĉu la nova URL validas antaŭ aktualigi aldonaĵon.<br />Nova: %s<br />Malnova: %s';
+$lang['error_badurl'] = 'URLoj komenciĝu per http aŭ https';
+$lang['error_dircreate'] = 'Ne eblis krei portempan dosierujon por akcepti la elŝuton';
+$lang['error_download'] = 'Ne eblis elŝuti la dosieron: %s';
+$lang['error_decompress'] = 'Ne eblis malpaki la elŝutitan dosieron. Kialo povus esti fuŝa elŝuto, kaj vi reprovu; aŭ la pakiga formato estas nekonata, kaj vi devas elŝuti kaj instali permane.';
+$lang['error_findfolder'] = 'Ne eblis rekoni la aldonaĵ-dosierujon, vi devas elŝuti kaj instali permane';
+$lang['error_copy'] = 'Okazis kopiad-eraro dum la provo instali dosierojn por la dosierujo <em>%s</em>: la disko povus esti plena aŭ la alirpermesoj por dosieroj malĝustaj. Rezulto eble estas nur parte instalita kromaĵo, kiu malstabiligas vian vikion';
+$lang['noperms'] = 'La aldonaĵ-dosierujo ne estas skribebla';
+$lang['notplperms'] = 'La ŝablon-dosierujo ne estas skribebla';
+$lang['nopluginperms'] = 'La kromaĵ-dosierujo ne estas skribebla';
+$lang['git'] = 'Tiu aldonaĵo estis instalita pere de git, eble vi ne aktualigu ĝin ĉi tie.';
+$lang['install_url'] = 'Instali de URL:';
+$lang['install_upload'] = 'Alŝuti aldonaĵon:';
diff --git a/lib/plugins/extension/lang/es/intro_install.txt b/lib/plugins/extension/lang/es/intro_install.txt
new file mode 100644
index 000000000..533396b27
--- /dev/null
+++ b/lib/plugins/extension/lang/es/intro_install.txt
@@ -0,0 +1 @@
+Aquí se puede instalar manualmente los plugins y las plantillas, ya sea cargándolos o dando una URL de descarga directa. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/es/intro_templates.txt b/lib/plugins/extension/lang/es/intro_templates.txt
new file mode 100644
index 000000000..4ede9a1a9
--- /dev/null
+++ b/lib/plugins/extension/lang/es/intro_templates.txt
@@ -0,0 +1 @@
+Estas son las plantillas actualmente instalados en su DokuWiki. Puede seleccionar la plantilla que se utilizará en [[?do=admin&page=config|Configuration Manager]] \ No newline at end of file
diff --git a/lib/plugins/extension/lang/es/lang.php b/lib/plugins/extension/lang/es/lang.php
new file mode 100644
index 000000000..63742c3b3
--- /dev/null
+++ b/lib/plugins/extension/lang/es/lang.php
@@ -0,0 +1,84 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Antonio Bueno <atnbueno@gmail.com>
+ * @author Antonio Castilla <antoniocastilla@trazoide.com>
+ * @author Jonathan Hernández <me@jhalicea.com>
+ */
+$lang['menu'] = 'Administrador de Extensiones ';
+$lang['tab_plugins'] = 'Plugins instalados';
+$lang['tab_templates'] = 'Plantillas instaladas';
+$lang['tab_search'] = 'Buscar e instalar';
+$lang['tab_install'] = 'Instalación manual';
+$lang['notimplemented'] = 'Esta característica no se ha implementado aún';
+$lang['notinstalled'] = 'Esta expensión no está instalada';
+$lang['alreadyenabled'] = 'Esta extensión ya había sido activada';
+$lang['alreadydisabled'] = 'Esta extensión ya había sido desactivada';
+$lang['pluginlistsaveerror'] = 'Se ha producido un error al guardar la lista de plugins';
+$lang['unknownauthor'] = 'autor desconocido';
+$lang['unknownversion'] = 'versión desconocida';
+$lang['btn_info'] = 'Mostrar más información';
+$lang['btn_update'] = 'Actualizar';
+$lang['btn_uninstall'] = 'Desinstalar';
+$lang['btn_enable'] = 'Activar';
+$lang['btn_disable'] = 'Desactivar';
+$lang['btn_install'] = 'Instalar';
+$lang['btn_reinstall'] = 'Reinstalar';
+$lang['js']['reallydel'] = '¿Realmente quiere desinstalar esta extensión?';
+$lang['search_for'] = 'Extensión de búsqueda :';
+$lang['search'] = 'Buscar';
+$lang['extensionby'] = '<strong>%s</strong> por %s';
+$lang['screenshot'] = 'Captura de %s';
+$lang['popularity'] = 'Popularidad:%s%%';
+$lang['homepage_link'] = 'Documentos';
+$lang['bugs_features'] = 'Bugs';
+$lang['tags'] = 'Etiquetas:';
+$lang['author_hint'] = 'Buscar extensiones de este autor';
+$lang['installed'] = 'Instalado:';
+$lang['downloadurl'] = 'URL de descarga:';
+$lang['repository'] = 'Repositorio:';
+$lang['unknown'] = '<em>desconocido</em>';
+$lang['installed_version'] = 'Versión instalada:';
+$lang['install_date'] = 'Tú última actualización:';
+$lang['available_version'] = 'Versión disponible:';
+$lang['compatible'] = 'Compatible con:';
+$lang['depends'] = 'Dependencias:';
+$lang['similar'] = 'Similar a:';
+$lang['conflicts'] = 'Conflictos con:';
+$lang['donate'] = '¿Cómo está?';
+$lang['donate_action'] = '¡Págale un café al autor!';
+$lang['repo_retry'] = 'Trate otra vez';
+$lang['provides'] = 'Provee: ';
+$lang['status'] = 'Estado:';
+$lang['status_installed'] = 'instalado';
+$lang['status_not_installed'] = 'no instalado';
+$lang['status_protected'] = 'protegido';
+$lang['status_enabled'] = 'activado';
+$lang['status_disabled'] = 'desactivado';
+$lang['status_unmodifiable'] = 'no modificable';
+$lang['status_plugin'] = 'plugin';
+$lang['status_template'] = 'plantilla';
+$lang['status_bundled'] = 'agrupado';
+$lang['msg_enabled'] = 'Plugin %s activado';
+$lang['msg_disabled'] = 'Plugin %s desactivado';
+$lang['msg_delete_success'] = 'Extensión desinstalada';
+$lang['msg_template_install_success'] = 'Plantilla %s instalada con éxito';
+$lang['msg_template_update_success'] = 'Plantilla %s actualizada con éxito';
+$lang['msg_plugin_install_success'] = 'Plugin %s instalado con éxito';
+$lang['msg_plugin_update_success'] = 'Plugin %s actualizado con éxito';
+$lang['msg_upload_failed'] = 'Falló la carga del archivo';
+$lang['missing_dependency'] = '<strong>Dependencia deshabilitada o perdida:</strong> %s';
+$lang['security_issue'] = '<strong>Problema de seguridad:</strong> %s';
+$lang['security_warning'] = '<strong>Aviso de seguridad:</strong> %s';
+$lang['update_available'] = '<strong>Actualizar:</strong> Nueva versión %s disponible.';
+$lang['wrong_folder'] = '<strong>"Plugin" instalado incorrectamente:</strong> Cambie el nombre del directorio del plugin "%s" a "%s".';
+$lang['url_change'] = '<strong>URL actualizada:</strong> El Download URL ha cambiado desde el último download. Verifica si el nuevo URL es valido antes de actualizar la extensión .<br />Nuevo: %s<br />Viejo: %s';
+$lang['error_badurl'] = 'URLs deberían empezar con http o https';
+$lang['error_dircreate'] = 'No es posible de crear un directorio temporero para poder recibir el download';
+$lang['error_download'] = 'No es posible descargar el documento: %s';
+$lang['git'] = 'Esta extensión fue instalada a través de git, quizás usted no quiera actualizarla aquí mismo.';
+$lang['install_url'] = 'Instalar desde URL:';
+$lang['install_upload'] = 'Subir Extensión:';
+$lang['repo_error'] = 'El repositorio de plugins no puede ser contactado. Asegúrese que su servidor pueda contactar www.dokuwiki.org y verificar la configuración de su proxy.';
diff --git a/lib/plugins/extension/lang/fa/lang.php b/lib/plugins/extension/lang/fa/lang.php
new file mode 100644
index 000000000..95c3e9652
--- /dev/null
+++ b/lib/plugins/extension/lang/fa/lang.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ */
+$lang['menu'] = 'مدیریت افزونه ها';
+$lang['tab_plugins'] = 'پلاگین های نصب شده';
+$lang['tab_templates'] = 'قالب های نصب شده';
+$lang['tab_search'] = 'جستجو و نصب';
+$lang['tab_install'] = 'نصب دستی';
+$lang['notinstalled'] = 'این افزونه نصب نشده است';
+$lang['alreadyenabled'] = 'این افزونه فعال شده است';
+$lang['alreadydisabled'] = 'این افزونه غیرفعال شده است';
+$lang['unknownversion'] = 'نسخه ناشناخته';
+$lang['btn_info'] = 'نمایش اطلاعات بیشتر';
+$lang['btn_update'] = 'به روز رسانی';
+$lang['btn_enable'] = 'فعال';
+$lang['btn_disable'] = 'غیرفعال';
+$lang['btn_install'] = 'نصب';
+$lang['btn_reinstall'] = 'نصب مجدد';
+$lang['search_for'] = 'جستجوی افزونه:';
+$lang['search'] = 'جستجو';
+$lang['tags'] = 'برچسب ها:';
+$lang['installed_version'] = 'نسخه نصب شده:';
+$lang['available_version'] = 'نسخه در دسترس:';
+$lang['repo_retry'] = 'دوباره';
+$lang['status'] = 'وضعیت';
+$lang['status_installed'] = 'نصب شده';
+$lang['status_not_installed'] = 'نصب نشده';
+$lang['status_enabled'] = 'فعال';
+$lang['status_disabled'] = 'غیرفعال';
+$lang['status_plugin'] = 'پلاگین';
+$lang['status_template'] = 'قالب';
+$lang['noperms'] = 'پوشه افزونه ها قابل نوشتن نیست';
+$lang['notplperms'] = 'پوشه قالب ها قابل نوشتن نیست';
+$lang['nopluginperms'] = 'پوشه پلاگین ها قابل نوشتن نیست';
+$lang['install_url'] = 'نصب از آدرس:';
+$lang['install_upload'] = 'بارگذاری افزونه:';
diff --git a/lib/plugins/extension/lang/fr/intro_install.txt b/lib/plugins/extension/lang/fr/intro_install.txt
new file mode 100644
index 000000000..5d287b818
--- /dev/null
+++ b/lib/plugins/extension/lang/fr/intro_install.txt
@@ -0,0 +1 @@
+Ici, vous pouvez installer des extensions, greffons et thèmes. Soit en les téléversant, soit en indiquant un URL de téléchargement. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/fr/intro_plugins.txt b/lib/plugins/extension/lang/fr/intro_plugins.txt
new file mode 100644
index 000000000..a40b863d2
--- /dev/null
+++ b/lib/plugins/extension/lang/fr/intro_plugins.txt
@@ -0,0 +1 @@
+Voilà la liste des extensions actuellement installées. À partir d'ici, vous pouvez les activer, les désactiver ou même les désinstaller complètement. Cette page affiche également les mises à jour. Assurez vous de lire la documentation avant de faire la mise à jour. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/fr/intro_search.txt b/lib/plugins/extension/lang/fr/intro_search.txt
new file mode 100644
index 000000000..418e35972
--- /dev/null
+++ b/lib/plugins/extension/lang/fr/intro_search.txt
@@ -0,0 +1 @@
+Cet onglet vous donne accès à toutes les extensions de tierces parties. Restez conscients qu'installer du code de tierce partie peut poser un problème de **sécurité**. Vous voudrez peut-être au préalable lire l'article sur la [[doku>fr:security##securite_des_plugins|sécurité des plugins]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/fr/intro_templates.txt b/lib/plugins/extension/lang/fr/intro_templates.txt
new file mode 100644
index 000000000..a0a1336ea
--- /dev/null
+++ b/lib/plugins/extension/lang/fr/intro_templates.txt
@@ -0,0 +1 @@
+Voici la liste des thèmes actuellement installés. Le [[?do=admin&page=config|gestionnaire de configuration]] vous permet de choisir le thème à utiliser. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/fr/lang.php b/lib/plugins/extension/lang/fr/lang.php
new file mode 100644
index 000000000..88234efd0
--- /dev/null
+++ b/lib/plugins/extension/lang/fr/lang.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Schplurtz le Déboulonné <schplurtz@laposte.net>
+ */
+$lang['menu'] = 'Gestionnaire d\'extension';
+$lang['tab_plugins'] = 'Greffons installés';
+$lang['tab_templates'] = 'Thèmes installés';
+$lang['tab_search'] = 'Rechercher et installer';
+$lang['tab_install'] = 'Installation manuelle';
+$lang['notimplemented'] = 'Cette fonctionnalité n\'est pas encore installée';
+$lang['notinstalled'] = 'Cette extension n\'est pas installée';
+$lang['alreadyenabled'] = 'Cette extension a déjà été installée';
+$lang['alreadydisabled'] = 'Cette extension a déjà été désactivée';
+$lang['pluginlistsaveerror'] = 'Une erreur s\'est produite lors de l\'enregistrement de la liste des greffons.';
+$lang['unknownauthor'] = 'Auteur inconnu';
+$lang['unknownversion'] = 'Version inconnue';
+$lang['btn_info'] = 'Montrer plus d\'informations';
+$lang['btn_update'] = 'Mettre à jour';
+$lang['btn_uninstall'] = 'Désinstaller';
+$lang['btn_enable'] = 'Activer';
+$lang['btn_disable'] = 'Désactiver';
+$lang['btn_install'] = 'Installer';
+$lang['btn_reinstall'] = 'Réinstaller';
+$lang['js']['reallydel'] = 'Vraiment désinstaller cette extension';
+$lang['search_for'] = 'Rechercher l\'extension :';
+$lang['search'] = 'Chercher';
+$lang['extensionby'] = '<strong>%s</strong> de %s';
+$lang['screenshot'] = 'Aperçu de %s';
+$lang['popularity'] = 'Popularité : %s%%';
+$lang['homepage_link'] = 'Documents';
+$lang['bugs_features'] = 'Bugs';
+$lang['tags'] = 'Étiquettes :';
+$lang['author_hint'] = 'Chercher les extensions de cet auteur';
+$lang['installed'] = 'Installés :';
+$lang['downloadurl'] = 'URL de téléchargement :';
+$lang['repository'] = 'Entrepôt : ';
+$lang['unknown'] = '<em>inconnu</em>';
+$lang['installed_version'] = 'Version installée :';
+$lang['install_date'] = 'Votre dernière mise à jour :';
+$lang['available_version'] = 'Version disponible :';
+$lang['compatible'] = 'Compatible avec :';
+$lang['depends'] = 'Dépend de :';
+$lang['similar'] = 'Similaire à :';
+$lang['conflicts'] = 'En conflit avec :';
+$lang['donate'] = 'Vous aimez ?';
+$lang['donate_action'] = 'Payer un café à l\'auteur !';
+$lang['repo_retry'] = 'Réessayer';
+$lang['provides'] = 'Fournit :';
+$lang['status'] = 'État :';
+$lang['status_installed'] = 'installé';
+$lang['status_not_installed'] = 'non installé';
+$lang['status_protected'] = 'protégé';
+$lang['status_enabled'] = 'activé';
+$lang['status_disabled'] = 'désactivé';
+$lang['status_unmodifiable'] = 'non modifiable';
+$lang['status_plugin'] = 'greffon';
+$lang['status_template'] = 'thème';
+$lang['status_bundled'] = 'fourni';
+$lang['msg_enabled'] = 'Greffon %s activé';
+$lang['msg_disabled'] = 'Greffon %s désactivé';
+$lang['msg_delete_success'] = 'Extension désinstallée';
+$lang['msg_template_install_success'] = 'Thème %s installée avec succès';
+$lang['msg_template_update_success'] = 'Thème %s mis à jour avec succès';
+$lang['msg_plugin_install_success'] = 'Greffon %s installé avec succès';
+$lang['msg_plugin_update_success'] = 'Greffon %s mis à jour avec succès';
+$lang['msg_upload_failed'] = 'Téléversement échoué';
+$lang['missing_dependency'] = '<strong>Dépendance absente ou désactivée :</strong> %s';
+$lang['security_issue'] = '<strong>Problème de sécurité :</strong> %s';
+$lang['security_warning'] = '<strong>Avertissement deSécurité :</strong> %s';
+$lang['update_available'] = '<strong>Mise à jour :</strong> La version %s est disponible.';
+$lang['wrong_folder'] = '<strong>Greffon installé incorrectement :</strong> Renomer le dossier du greffon "%s" en "%s".';
+$lang['url_change'] = '<strong>URL modifié :</strong> L\'URL de téléchargement a changé depuis le dernier téléchargement. Vérifiez si l\'URL est valide avant de mettre à jour l\'extension.<br />Nouvel URL : %s<br />Ancien : %s';
+$lang['error_badurl'] = 'Les URL doivent commencer par http ou https';
+$lang['error_dircreate'] = 'Impossible de créer le dossier temporaire pour le téléchargement.';
+$lang['error_download'] = 'Impossible de télécharger le fichier : %s';
+$lang['error_decompress'] = 'Impossible de décompresser le fichier téléchargé. C\'est peut être le résultat d\'une erreur de téléchargement, auquel cas vous devriez réessayer. Le format de compression est peut-être inconnu. Dans ce cas il vous faudra procéder à une installation manuelle.';
+$lang['error_findfolder'] = 'Impossible d\'idnetifier le dossier de l\'extension. vous devez procéder à une installation manuelle.';
+$lang['error_copy'] = 'Une erreur de copie de fichier s\'est produite lors de l\'installation des fichiers dans le dossier <em>%s</em>. Il se peut que le disque soit plein, ou que les permissions d\'accès aux fichiers soient incorrectes. Il est possible que le greffon soit partiellement installé et que cela laisse votre installation de DoluWiki instable.';
+$lang['noperms'] = 'Impossible d\'écrire dans le dossier des extensions.';
+$lang['notplperms'] = 'Impossible d\'écrire dans le dossier des thèmes.';
+$lang['nopluginperms'] = 'Impossible d\'écrire dans le dossier des greffons.';
+$lang['git'] = 'Cette extension a été installé via git, vous voudrez peut-être ne pas la mettre à jour ici.';
+$lang['install_url'] = 'Installez depuis l\'URL :';
+$lang['install_upload'] = 'Téléversez l\'extension :';
+$lang['repo_error'] = 'L\'entrepôt d\'extensions est injoignable. Veuillez vous assurer que le server web est autorisé à contacter www.dokuwiki.org et vérifier les réglages de proxy.';
diff --git a/lib/plugins/extension/lang/hr/intro_install.txt b/lib/plugins/extension/lang/hr/intro_install.txt
new file mode 100644
index 000000000..fc2d22f52
--- /dev/null
+++ b/lib/plugins/extension/lang/hr/intro_install.txt
@@ -0,0 +1 @@
+Ovdje možete ručno instalirati dodatak (plugin) i predložak (template) bilo učitavanjem ili specificiranjem URL-a za direktno učitavanje. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/intro_plugins.txt b/lib/plugins/extension/lang/hr/intro_plugins.txt
new file mode 100644
index 000000000..fdc629d62
--- /dev/null
+++ b/lib/plugins/extension/lang/hr/intro_plugins.txt
@@ -0,0 +1 @@
+Ovo su dodaci (plugin) trenutno instalirani na Vašem DokuWiku-u. Možete ih omogućiti, onemogućiti ili u potpunosti deinstalirati. Nadogradnje dodataka su također prikazane, obavezno pročitajte dokumentaciju dodatka prije nadogradnje. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/intro_search.txt b/lib/plugins/extension/lang/hr/intro_search.txt
new file mode 100644
index 000000000..93bf4b000
--- /dev/null
+++ b/lib/plugins/extension/lang/hr/intro_search.txt
@@ -0,0 +1 @@
+Ovaj tab vam pruža pristup dostupnim dodatcima i predlošcima za DokuWiki od treće strane. Molimo budite svjesni da instaliranje koda od treće strane može biti **sigurnosni rizik**, možda želite prvo pročitati o [[doku>security#plugin_security|sigurnosti dodataka]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/intro_templates.txt b/lib/plugins/extension/lang/hr/intro_templates.txt
new file mode 100644
index 000000000..968906cf9
--- /dev/null
+++ b/lib/plugins/extension/lang/hr/intro_templates.txt
@@ -0,0 +1 @@
+Ovo su predlošci trenutno instalirani na Vašem DokuWiki-u. Možete odabrati koji se predložak koristi na [[?do=admin&page=config|Upravitelju postavki]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/lang.php b/lib/plugins/extension/lang/hr/lang.php
new file mode 100644
index 000000000..4905fe864
--- /dev/null
+++ b/lib/plugins/extension/lang/hr/lang.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['menu'] = 'Upravitelj dodataka';
+$lang['tab_plugins'] = 'Instalirani dodatci';
+$lang['tab_templates'] = 'Instalirani predlošci';
+$lang['tab_search'] = 'Potraži i instaliraj';
+$lang['tab_install'] = 'Ručno instaliranje';
+$lang['notimplemented'] = 'Ova mogućnost još nije napravljena';
+$lang['notinstalled'] = 'Dodatak nije instaliran';
+$lang['alreadyenabled'] = 'Ovaj dodatak je već omogućen';
+$lang['alreadydisabled'] = 'Ovaj dodatak je već onemogućen';
+$lang['pluginlistsaveerror'] = 'Dogodila se greška pri snimanju liste dodataka';
+$lang['unknownauthor'] = 'Nepoznat autor';
+$lang['unknownversion'] = 'Nepoznata inačica';
+$lang['btn_info'] = 'Prikaži više informacija';
+$lang['btn_update'] = 'Dopuni';
+$lang['btn_uninstall'] = 'Ukloni';
+$lang['btn_enable'] = 'Omogući';
+$lang['btn_disable'] = 'Onemogući';
+$lang['btn_install'] = 'Postavi';
+$lang['btn_reinstall'] = 'Ponovno postavi';
+$lang['js']['reallydel'] = 'Zaista ukloniti ovo proširenje?';
+$lang['search_for'] = 'Pretraži proširenja';
+$lang['search'] = 'Pretraži';
+$lang['extensionby'] = '<strong>%s</strong> po %s';
+$lang['screenshot'] = 'Slika zaslona od %s';
+$lang['popularity'] = 'Popularnost: %s%%';
+$lang['homepage_link'] = 'Upute';
+$lang['bugs_features'] = 'Greške';
+$lang['tags'] = 'Oznake:';
+$lang['author_hint'] = 'Potraži dodatke od ovog autora';
+$lang['installed'] = 'Postavljeno:';
+$lang['downloadurl'] = 'URL adresa preuzimanja:';
+$lang['repository'] = 'Repozitorij:';
+$lang['unknown'] = '<em>nepoznat</em>';
+$lang['installed_version'] = 'Postavljena inačica:';
+$lang['install_date'] = 'Vaše zadnje osvježavanje:';
+$lang['available_version'] = 'Dostupna inačica';
+$lang['compatible'] = 'Kompatibilan s:';
+$lang['depends'] = 'Zavisi o:';
+$lang['similar'] = 'Sličan s:';
+$lang['conflicts'] = 'U sukobu s:';
+$lang['donate'] = 'Poput ovog?';
+$lang['donate_action'] = 'Kupite autoru kavu!';
+$lang['repo_retry'] = 'Ponovi';
+$lang['provides'] = 'Osigurava:';
+$lang['status'] = 'Status:';
+$lang['status_installed'] = 'ugrađen';
+$lang['status_not_installed'] = 'nije ugrađen';
+$lang['status_protected'] = 'zaštićen';
+$lang['status_enabled'] = 'omogućen';
+$lang['status_disabled'] = 'onemogućen';
+$lang['status_unmodifiable'] = 'neizmjenjiv';
+$lang['status_plugin'] = 'dodatak';
+$lang['status_template'] = 'predložak';
+$lang['status_bundled'] = 'ugrađen';
+$lang['msg_enabled'] = 'Dodatak %s omogućen';
+$lang['msg_disabled'] = 'Dodatak %s onemogućen';
+$lang['msg_delete_success'] = 'Proširenje uklonjeno';
+$lang['msg_template_install_success'] = 'Predložak %s uspješno ugrađen';
+$lang['msg_template_update_success'] = 'Predložak %s uspješno nadograđen';
+$lang['msg_plugin_install_success'] = 'Dodatak %s uspješno ugrađen';
+$lang['msg_plugin_update_success'] = 'Dodatak %s uspješno nadograđen';
+$lang['msg_upload_failed'] = 'Učitavanje datoteke nije uspjelo';
+$lang['missing_dependency'] = '<strong>Nedostaje ili onemogućena zavisnost:</strong> %s';
+$lang['security_issue'] = '<strong>Sigurnosno pitanje:</strong> %s';
+$lang['security_warning'] = '<strong>Sigurnosno upozorenje:</strong> %s';
+$lang['update_available'] = '<strong>Nadogranja:</strong> Nova inačica %s je dostupna.';
+$lang['wrong_folder'] = '<strong>Dodatak neispravno ugrađen:</strong> Preimenujte mapu dodatka iz "%s" u "%s".';
+$lang['url_change'] = '<strong>URL izmijenjen:</strong> Adresa za preuzimanje je promijenjena od zadnjeg preuzimanja. Provjerite da li je novu URL valjan prije nadogradnje proširenja.<br />Novi: %s<br />Stari: %s';
+$lang['error_badurl'] = 'URL adrese trebaju započinjati sa http ili https';
+$lang['error_dircreate'] = 'Ne mogu napraviti privremenu mapu za prihvat preuzimanja';
+$lang['error_download'] = 'Ne mogu preuzeti datoteku: %s';
+$lang['error_decompress'] = 'Ne mogu raspakirati preuzetu datoteku. To može biti rezultati lošeg preuzimanja i tada treba pokušati ponovo; ili format sažimanja je nepoznat i u tom slučaju treba datoteku ručno preuzeti i ugraditi.';
+$lang['error_findfolder'] = 'Ne mogu odrediti mapu proširenja, trebate ga ručno preuzeti i ugraditi';
+$lang['error_copy'] = 'Dogodila se greška pri kopiranju dok je pokušavanja ugradnja datoteka u mapu <em>%s</em>: disk može biti pun ili dozvole pristupa nisu dobre. Ovo može rezultirati djelomično ugrađenim dodatkom i može učiniti Vaš wiki nestabilnim';
+$lang['noperms'] = 'Nije moguće pisati u mapu proširanja';
+$lang['notplperms'] = 'Nije moguće pisati u mapu predloška';
+$lang['nopluginperms'] = 'Nije moguće pisati u mapu dodatka';
+$lang['git'] = 'Proširenje je ugrađeno preko Git-a, možda ga ne želite nadograđivati ovdje.';
+$lang['install_url'] = 'Ugradi s URL-a:';
+$lang['install_upload'] = 'Učitaj proširenje:';
+$lang['repo_error'] = 'Repozitorij dodataka nije dostupan. Budite sigurni da server može pristupiti www.dokuwiki.org i provjerite proxy postavke.';
diff --git a/lib/plugins/extension/lang/hu/intro_install.txt b/lib/plugins/extension/lang/hu/intro_install.txt
new file mode 100644
index 000000000..8427e7dc6
--- /dev/null
+++ b/lib/plugins/extension/lang/hu/intro_install.txt
@@ -0,0 +1 @@
+Itt új modulokat és sablonokat telepíthetsz feltöltéssel vagy a csomagra hivatkozó URL megadásával. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hu/intro_plugins.txt b/lib/plugins/extension/lang/hu/intro_plugins.txt
new file mode 100644
index 000000000..8a3e92ddb
--- /dev/null
+++ b/lib/plugins/extension/lang/hu/intro_plugins.txt
@@ -0,0 +1 @@
+A DokuWiki rendszerben telepített modulok az alábbiak. Engedélyezheted, letilthatod vagy teljesen le is törölheted ezeket. A modulokhoz tartozó frissítések is itt láthatók, viszont frissítés előtt mindenképp olvasd el az utasításokat a modul dokumentációjában is! \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hu/intro_search.txt b/lib/plugins/extension/lang/hu/intro_search.txt
new file mode 100644
index 000000000..87a2a5d64
--- /dev/null
+++ b/lib/plugins/extension/lang/hu/intro_search.txt
@@ -0,0 +1 @@
+Ezen a fülön harmadik fél által készített modulokat és sablonokat találsz a DokuWiki-hez. Ne feledd, hogy a harmadik féltől származó kódok **biztonsági kockázatot** jelenthetnek, ennek a [[doku>security#plugin_security|modulok biztonsága]] oldalon olvashatsz utána a telepítés előtt. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hu/intro_templates.txt b/lib/plugins/extension/lang/hu/intro_templates.txt
new file mode 100644
index 000000000..c0ad92b35
--- /dev/null
+++ b/lib/plugins/extension/lang/hu/intro_templates.txt
@@ -0,0 +1 @@
+A DokuWiki rendszerben telepített sablonok az alábbiak. A használt sablont a [[?do=admin&page=config|Beállítóközpontban]] választhatod ki. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/hu/lang.php b/lib/plugins/extension/lang/hu/lang.php
new file mode 100644
index 000000000..a27b5a307
--- /dev/null
+++ b/lib/plugins/extension/lang/hu/lang.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Marton Sebok <sebokmarton@gmail.com>
+ */
+$lang['menu'] = 'Bővítménykezelő';
+$lang['tab_plugins'] = 'Telepített modulok';
+$lang['tab_templates'] = 'Telepített sablonok';
+$lang['tab_search'] = 'Keresés és telepítés';
+$lang['tab_install'] = 'Kézi telepítés';
+$lang['notimplemented'] = 'Ez a funkció még nincs implementálva';
+$lang['notinstalled'] = 'Ez a bővítmény nincs telepítve';
+$lang['alreadyenabled'] = 'Ez a bővítmény már engedélyezve van';
+$lang['alreadydisabled'] = 'Ez a bővítmény már le van tiltva';
+$lang['pluginlistsaveerror'] = 'Hiba történt a modulok listájának mentésekor';
+$lang['unknownauthor'] = 'Ismeretlen szerző';
+$lang['unknownversion'] = 'Ismeretlen verzió';
+$lang['btn_info'] = 'További információk megjelenítése';
+$lang['btn_update'] = 'Frissítés';
+$lang['btn_uninstall'] = 'Törlés';
+$lang['btn_enable'] = 'Engedélyezés';
+$lang['btn_disable'] = 'Letiltás';
+$lang['btn_install'] = 'Telepítés';
+$lang['btn_reinstall'] = 'Újratelepítés';
+$lang['js']['reallydel'] = 'Biztosan törlöd ezt a bővítményt?';
+$lang['search_for'] = 'Bővítmények keresése:';
+$lang['search'] = 'Keresés';
+$lang['extensionby'] = '<strong>%s</strong>, %s szerzőtől';
+$lang['screenshot'] = '%s képernyőképe';
+$lang['popularity'] = 'Népszerűség: %s%%';
+$lang['homepage_link'] = 'Dokumentáció';
+$lang['bugs_features'] = 'Hibák';
+$lang['tags'] = 'Címkék:';
+$lang['author_hint'] = 'Bővítmények keresése ettől a szerzőtől';
+$lang['installed'] = 'Telepítve:';
+$lang['downloadurl'] = 'Csomag URL:';
+$lang['repository'] = 'Repository:';
+$lang['unknown'] = '<em>ismeretlen</em>';
+$lang['installed_version'] = 'Telepített verzió:';
+$lang['install_date'] = 'Utoljára frissítve:';
+$lang['available_version'] = 'Elérhető verzió:';
+$lang['compatible'] = 'Kompatibilis rendszerek:';
+$lang['depends'] = 'Függőségek:';
+$lang['similar'] = 'Hasonló bővítmények:';
+$lang['conflicts'] = 'Ütközést okozó bővítmények:';
+$lang['donate'] = 'Tetszik?';
+$lang['donate_action'] = 'Hívd meg a szerzőjét egy kávéra!';
+$lang['repo_retry'] = 'Újra';
+$lang['provides'] = 'Szolgáltatások:';
+$lang['status'] = 'Állapot:';
+$lang['status_installed'] = 'telepítve';
+$lang['status_not_installed'] = 'nincs telepítve';
+$lang['status_protected'] = 'védett';
+$lang['status_enabled'] = 'engedélyezve';
+$lang['status_disabled'] = 'letiltva';
+$lang['status_unmodifiable'] = 'nem lehet módosítani';
+$lang['status_plugin'] = 'modul';
+$lang['status_template'] = 'sablon';
+$lang['status_bundled'] = 'beépített';
+$lang['msg_enabled'] = 'A(z) %s modul engedélyezve';
+$lang['msg_disabled'] = 'A(z) %s modul letiltva';
+$lang['msg_delete_success'] = 'A bővítmény törölve';
+$lang['msg_template_install_success'] = 'A(z) %s sablon sikeresen telepítve';
+$lang['msg_template_update_success'] = 'A(z) %s sablon sikeresen frissítve';
+$lang['msg_plugin_install_success'] = 'A(z) %s modul sikeresen telepítve';
+$lang['msg_plugin_update_success'] = 'A(z) %s modul sikeresen frissítve';
+$lang['msg_upload_failed'] = 'A fájl feltöltése sikertelen';
+$lang['missing_dependency'] = '<strong>Hiányzó vagy letiltott függőség:</strong> %s';
+$lang['security_issue'] = '<strong>Biztonsági probléma:</strong> %s';
+$lang['security_warning'] = '<strong>Biztonsági figyelmeztetés:</strong> %s';
+$lang['update_available'] = '<strong>Frissítés:</strong> Elérhető %s új verziója.';
+$lang['wrong_folder'] = '<strong>A modul telepítése sikertelen:</strong> Nevezd át a modul könyvtárát "%s" névről "%s" névre!';
+$lang['url_change'] = '<strong>Az URL megváltozott:</strong> A csomag URL-je megváltozott az utolsó letöltés óta. A bővítmény frissítése előtt ellenőrizd az új URL helyességét!<br />Új: %s<br />Régi: %s';
+$lang['error_badurl'] = 'Az URL-nek "http"-vel vagy "https"-sel kell kezdődnie';
+$lang['error_dircreate'] = 'A letöltéshez az ideiglenes könyvtár létrehozása sikertelen';
+$lang['error_download'] = 'A(z) %s fájl letöltése sikertelen';
+$lang['error_decompress'] = 'A letöltött fájlt nem lehet kicsomagolni. Ezt okozhatja a fájl sérülése (ebben az esetben próbáld újra letölteni) vagy egy ismeretlen tömörítési formátum használata (ilyenkor kézzel kell telepítened).';
+$lang['error_findfolder'] = 'A bővítményhez tartozó könyvtárat nem sikerült megállapítani, kézzel kell letöltened és telepítened';
+$lang['error_copy'] = 'Egy fájl másolása közben hiba történt a <em>%s</em> könyvtárban: lehet, hogy a lemez megtelt vagy nincsenek megfelelő írási jogaid. A telepítés megszakadása a modul hibás működését eredményezheti és instabil állapotba hozhatja a wikit';
+$lang['noperms'] = 'A bővítmény könyvtára nem írható';
+$lang['notplperms'] = 'A sablon könyvtára nem írható';
+$lang['nopluginperms'] = 'A modul könyvtára nem írható';
+$lang['git'] = 'Ezt a bővítményt git-tel telepítették, lehet, hogy nem itt célszerű frissíteni';
+$lang['install_url'] = 'Telepítés erről az URL-ről:';
+$lang['install_upload'] = 'Bővítmény feltöltése:';
+$lang['repo_error'] = 'A modul repository-ja nem érhető el. Bizonyosodj meg róla, hogy a szervereden engedélyezett a www.dokuwiki.org cím elérése és ellenőrizd a proxy beállításaidat!';
diff --git a/lib/plugins/extension/lang/it/lang.php b/lib/plugins/extension/lang/it/lang.php
new file mode 100644
index 000000000..7dff6c5b2
--- /dev/null
+++ b/lib/plugins/extension/lang/it/lang.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Fabio <fabioslurp@yahoo.it>
+ */
+$lang['btn_enable'] = 'Abilita';
+$lang['btn_disable'] = 'Disabilita';
+$lang['btn_install'] = 'Installa';
+$lang['btn_reinstall'] = 'Reinstalla';
+$lang['search'] = 'Cerca';
+$lang['homepage_link'] = 'Documenti';
+$lang['bugs_features'] = 'Bug';
+$lang['tags'] = 'Tag:';
+$lang['author_hint'] = 'Cerca estensioni per questo autore';
+$lang['installed'] = 'Installato:';
+$lang['downloadurl'] = 'URL download:';
+$lang['repository'] = 'Repository';
+$lang['installed_version'] = 'Versione installata';
+$lang['install_date'] = 'Il tuo ultimo aggiornamento:';
+$lang['available_version'] = 'Versione disponibile:';
+$lang['compatible'] = 'Compatibile con:';
+$lang['similar'] = 'Simile a:';
+$lang['donate'] = 'Simile a questo?';
+$lang['repo_retry'] = 'Riprova';
+$lang['status'] = 'Status:';
+$lang['status_installed'] = 'installato';
+$lang['status_not_installed'] = 'non installato';
+$lang['status_protected'] = 'protetto';
+$lang['status_enabled'] = 'abilitato';
+$lang['status_disabled'] = 'disabilitato';
+$lang['status_unmodifiable'] = 'inmodificabile';
+$lang['status_plugin'] = 'plugin';
+$lang['status_template'] = 'modello';
+$lang['error_badurl'] = 'URLs deve iniziare con http o https';
+$lang['error_dircreate'] = 'Impossibile creare una cartella temporanea per ricevere il download';
+$lang['error_download'] = 'Impossibile scaricare il file: %s';
+$lang['noperms'] = 'La directory Extension non è scrivibile';
+$lang['notplperms'] = 'Il modello di cartella non è scrivibile';
+$lang['nopluginperms'] = 'La cartella plugin non è scrivibile';
+$lang['install_url'] = 'Installa da URL:';
diff --git a/lib/plugins/extension/lang/ja/intro_install.txt b/lib/plugins/extension/lang/ja/intro_install.txt
new file mode 100644
index 000000000..9f99b8202
--- /dev/null
+++ b/lib/plugins/extension/lang/ja/intro_install.txt
@@ -0,0 +1 @@
+アップロードするかダウンロードURLを指定して、手動でプラグインやテンプレートをインストールできます。
diff --git a/lib/plugins/extension/lang/ja/intro_plugins.txt b/lib/plugins/extension/lang/ja/intro_plugins.txt
new file mode 100644
index 000000000..b8251c7e8
--- /dev/null
+++ b/lib/plugins/extension/lang/ja/intro_plugins.txt
@@ -0,0 +1 @@
+このDokuWikiに現在インストールされているプラグインです。これらプラグインを有効化、無効化、アンインストールできます。更新はできる場合のみ表示されます。更新前に、プラグインの解説をお読みください。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ja/intro_search.txt b/lib/plugins/extension/lang/ja/intro_search.txt
new file mode 100644
index 000000000..66d977b1b
--- /dev/null
+++ b/lib/plugins/extension/lang/ja/intro_search.txt
@@ -0,0 +1 @@
+このタブでは、DokuWiki用の利用可能なすべてのサードパーティのプラグインとテンプレートにアクセスできます。サードパーティ製のコードには、**セキュリティ上のリスク**の可能性があることに注意してください、最初に[[doku>ja:security#プラグインのセキュリティ|プラグインのセキュリティ]]を読むことをお勧めします。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ja/intro_templates.txt b/lib/plugins/extension/lang/ja/intro_templates.txt
new file mode 100644
index 000000000..5de6d2f0d
--- /dev/null
+++ b/lib/plugins/extension/lang/ja/intro_templates.txt
@@ -0,0 +1 @@
+このDokuWikiに現在インストールされているテンプレートです。使用するテンプレートは[[?do=admin&page=config|設定管理]]で選択できます。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ja/lang.php b/lib/plugins/extension/lang/ja/lang.php
new file mode 100644
index 000000000..dec46d629
--- /dev/null
+++ b/lib/plugins/extension/lang/ja/lang.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Hideaki SAWADA <chuno@live.jp>
+ * @author PzF_X <jp_minecraft@yahoo.co.jp>
+ */
+$lang['menu'] = '拡張機能管理';
+$lang['tab_plugins'] = 'インストール済プラグイン';
+$lang['tab_templates'] = 'インストール済テンプレート';
+$lang['tab_search'] = '検索とインストール';
+$lang['tab_install'] = '手動インストール';
+$lang['notimplemented'] = 'この機能は未実装です。';
+$lang['notinstalled'] = 'この拡張機能はインストールされていません。';
+$lang['alreadyenabled'] = 'この拡張機能は有効です。';
+$lang['alreadydisabled'] = 'この拡張機能は無効です。';
+$lang['pluginlistsaveerror'] = 'プラグイン一覧の保存中にエラーが発生しました。';
+$lang['unknownauthor'] = '作者不明';
+$lang['unknownversion'] = 'バージョン不明';
+$lang['btn_info'] = '詳細情報を表示する。';
+$lang['btn_update'] = '更新';
+$lang['btn_uninstall'] = 'アンインストール';
+$lang['btn_enable'] = '有効化';
+$lang['btn_disable'] = '無効化';
+$lang['btn_install'] = 'インストール';
+$lang['btn_reinstall'] = '再インストール';
+$lang['js']['reallydel'] = 'この拡張機能を本当にアンインストールしますか?';
+$lang['search_for'] = '拡張機能の検索:';
+$lang['search'] = '検索';
+$lang['extensionby'] = '<strong>%s</strong> 作者: %s';
+$lang['screenshot'] = '%s のスクリーンショット';
+$lang['popularity'] = '利用状況:%s%%';
+$lang['homepage_link'] = '解説';
+$lang['bugs_features'] = 'バグ';
+$lang['tags'] = 'タグ:';
+$lang['author_hint'] = 'この作者で拡張機能を検索';
+$lang['installed'] = 'インストール済:';
+$lang['downloadurl'] = 'ダウンロード URL:';
+$lang['repository'] = 'リポジトリ:';
+$lang['unknown'] = '<em>不明</em>';
+$lang['installed_version'] = 'インストール済バージョン:';
+$lang['install_date'] = '最終更新日:';
+$lang['available_version'] = '利用可能バージョン:';
+$lang['compatible'] = '互換:';
+$lang['depends'] = '依存:';
+$lang['similar'] = '類似:';
+$lang['conflicts'] = '競合:';
+$lang['donate'] = 'お気に入り?';
+$lang['donate_action'] = '寄付先';
+$lang['repo_retry'] = '再実行';
+$lang['provides'] = '提供:';
+$lang['status'] = '状態:';
+$lang['status_installed'] = 'インストール済';
+$lang['status_not_installed'] = '未インストール';
+$lang['status_protected'] = '保護されています';
+$lang['status_enabled'] = '有効';
+$lang['status_disabled'] = '無効';
+$lang['status_unmodifiable'] = '編集不可';
+$lang['status_plugin'] = 'プラグイン';
+$lang['status_template'] = 'テンプレート';
+$lang['status_bundled'] = '同梱';
+$lang['msg_enabled'] = '%s プラグインを有効化しました。';
+$lang['msg_disabled'] = '%s プラグインを無効化しました。';
+$lang['msg_delete_success'] = '拡張機能をアンインストールしました。';
+$lang['msg_template_install_success'] = '%s テンプレートをインストールできました。';
+$lang['msg_template_update_success'] = '%s テンプレートを更新できました。';
+$lang['msg_plugin_install_success'] = '%s プラグインをインストールできました。';
+$lang['msg_plugin_update_success'] = '%s プラグインを更新できました。';
+$lang['msg_upload_failed'] = 'ファイルのアップロードに失敗しました。';
+$lang['missing_dependency'] = '<strong>依存関係が欠落または無効:</strong> %s';
+$lang['security_issue'] = '<strong>セキュリティ問題:</strong> %s';
+$lang['security_warning'] = '<strong>セキュリティ警告:</strong> %s';
+$lang['update_available'] = '<strong>更新:</strong> %sの新バージョンが利用可能です。';
+$lang['wrong_folder'] = '<strong>プラグインは正しくインストールされませんでした:</strong> プラグインのディレクトリを "%s" から "%s" へ変更して下さい。';
+$lang['url_change'] = '<strong>URL が変更されました:</strong> 最後にダウンロードした後、ダウンロード URL が変更されました。拡張機能のアップデート前に新 URL が正しいかを確認して下さい。<br />新:%s<br />旧:%s';
+$lang['error_badurl'] = 'URLはhttpかhttpsで始まる必要があります。';
+$lang['error_dircreate'] = 'ダウンロード用の一時フォルダが作成できません。';
+$lang['error_download'] = 'ファイルをダウンロードできません:%s';
+$lang['error_decompress'] = 'ダウンロードしたファイルを解凍できません。ダウンロードの失敗の結果であれば、再度試して下さい。圧縮形式が不明の場合は、手動でダウンロード・インストールしてください。';
+$lang['error_findfolder'] = '拡張機能ディレクトリを認識できません。手動でダウンロード・インストールしてください。';
+$lang['error_copy'] = '<em>%s</em> ディレクトリのファイルをインストールしようとした時、ファイルコピーエラーが発生しました:ディスクがいっぱいかもしれませんし、ファイルのアクセス権が正しくないかもしれません。プラグインが一部分インストールされ、wiki が不安定になるかもしれません。';
+$lang['noperms'] = '拡張機能ディレクトリが書き込み不可です。';
+$lang['notplperms'] = 'テンプレートディレクトリが書き込み不可です。';
+$lang['nopluginperms'] = 'プラグインディレクトリが書き込み不可です。';
+$lang['git'] = 'この拡張機能は Git 経由でインストールされており、ここで更新すべきでないかもしれません。';
+$lang['install_url'] = 'URL からインストール:';
+$lang['install_upload'] = '拡張機能をアップロード:';
+$lang['repo_error'] = 'プラグインのリポジトリに接続できません。サーバーが www.dokuwiki.org に接続できることやプロキシの設定を確認して下さい。';
diff --git a/lib/plugins/extension/lang/ko/intro_install.txt b/lib/plugins/extension/lang/ko/intro_install.txt
new file mode 100644
index 000000000..269df29cc
--- /dev/null
+++ b/lib/plugins/extension/lang/ko/intro_install.txt
@@ -0,0 +1 @@
+여기에 플러그인과 템플릿을 수동으로 올리거나 직접 다운로드 URL을 제공하여 수동으로 설치할 수 있습니다. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ko/intro_plugins.txt b/lib/plugins/extension/lang/ko/intro_plugins.txt
new file mode 100644
index 000000000..9ac7a3d89
--- /dev/null
+++ b/lib/plugins/extension/lang/ko/intro_plugins.txt
@@ -0,0 +1 @@
+도쿠위키에 현재 설치된 플러그인입니다. 여기에서 플러그인을 활성화 또는 비활성화하거나 심지어 완전히 제거할 수 있습니다. 또한 플러그인 업데이트는 여기에 보여집니다. 업데이트하기 전에 플러그인의 설명문서를 읽으십시오. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ko/intro_search.txt b/lib/plugins/extension/lang/ko/intro_search.txt
new file mode 100644
index 000000000..b6760264e
--- /dev/null
+++ b/lib/plugins/extension/lang/ko/intro_search.txt
@@ -0,0 +1 @@
+이 탭은 도쿠위키를 위한 사용할 수 있는 모든 타사 플러그인과 템플릿에 접근하도록 제공합니다. 타사 코드를 설치하면 **보안 위험에 노출**될 수 있음을 유의하십시오, 먼저 [[doku>security#plugin_security|플러그인 보안]]에 대해 읽을 수 있습니다. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ko/intro_templates.txt b/lib/plugins/extension/lang/ko/intro_templates.txt
new file mode 100644
index 000000000..d4320b880
--- /dev/null
+++ b/lib/plugins/extension/lang/ko/intro_templates.txt
@@ -0,0 +1 @@
+도쿠위키에 현재 설치된 템플릿입니다. [[?do=admin&page=config|환경 설정 관리자]]에서 사용하는 템플릿을 선택할 수 있습니다. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ko/lang.php b/lib/plugins/extension/lang/ko/lang.php
new file mode 100644
index 000000000..53c9b4481
--- /dev/null
+++ b/lib/plugins/extension/lang/ko/lang.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Young gon Cha <garmede@gmail.com>
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['menu'] = '확장 기능 관리자';
+$lang['tab_plugins'] = '설치된 플러그인';
+$lang['tab_templates'] = '설치된 템플릿';
+$lang['tab_search'] = '검색하고 설치';
+$lang['tab_install'] = '수동 설치';
+$lang['notimplemented'] = '이 기능은 아직 구현되지 않았습니다';
+$lang['notinstalled'] = '이 확장 기능은 설치되어 있지 않습니다';
+$lang['alreadyenabled'] = '이 확장 기능이 이미 활성화되어 있습니다';
+$lang['alreadydisabled'] = '이 확장 기능이 이미 비활성화되어 있습니다';
+$lang['pluginlistsaveerror'] = '플러그인 목록을 저장하는 중 오류가 있었습니다';
+$lang['unknownauthor'] = '알 수 없는 저자';
+$lang['unknownversion'] = '알 수 없는 버전';
+$lang['btn_info'] = '정보 더 보기';
+$lang['btn_update'] = '업데이트';
+$lang['btn_uninstall'] = '제거';
+$lang['btn_enable'] = '활성화';
+$lang['btn_disable'] = '비활성화';
+$lang['btn_install'] = '설치';
+$lang['btn_reinstall'] = '다시 설치';
+$lang['js']['reallydel'] = '정말 이 확장 기능을 제거하겠습니까?';
+$lang['search_for'] = '확장 기능 검색:';
+$lang['search'] = '검색';
+$lang['extensionby'] = '<strong>%s</strong> (저자 %s)';
+$lang['screenshot'] = '%s의 스크린샷';
+$lang['popularity'] = '인기: %s%%';
+$lang['homepage_link'] = '문서';
+$lang['bugs_features'] = '버그';
+$lang['tags'] = '태그:';
+$lang['author_hint'] = '이 저자로 확장 기능 검색';
+$lang['installed'] = '설치됨:';
+$lang['downloadurl'] = '다운로드 URL:';
+$lang['repository'] = '저장소:';
+$lang['unknown'] = '<em>알 수 없음</em>';
+$lang['installed_version'] = '설치된 버전:';
+$lang['install_date'] = '마지막 업데이트:';
+$lang['available_version'] = '가능한 버전:';
+$lang['compatible'] = '다음과의 호환성:';
+$lang['depends'] = '다음에 의존:';
+$lang['similar'] = '다음과 비슷:';
+$lang['conflicts'] = '다음과 충돌:';
+$lang['donate'] = '이것이 좋나요?';
+$lang['donate_action'] = '저자에게 커피를 사주세요!';
+$lang['repo_retry'] = '다시 시도';
+$lang['provides'] = '제공:';
+$lang['status'] = '상태:';
+$lang['status_installed'] = '설치됨';
+$lang['status_not_installed'] = '설치되지 않음';
+$lang['status_protected'] = '보호됨';
+$lang['status_enabled'] = '활성화됨';
+$lang['status_disabled'] = '비활성화됨';
+$lang['status_unmodifiable'] = '수정할 수 없음';
+$lang['status_plugin'] = '플러그인';
+$lang['status_template'] = '템플릿';
+$lang['status_bundled'] = '포함';
+$lang['msg_enabled'] = '%s 플러그인이 활성화되었습니다';
+$lang['msg_disabled'] = '%s 플러그인이 비활성화되었습니다';
+$lang['msg_delete_success'] = '확장 기능이 제거되었습니다';
+$lang['msg_template_install_success'] = '%s 템플릿을 성공적으로 설치했습니다';
+$lang['msg_template_update_success'] = '%s 템플릿을 성공적으로 업데이트했습니다';
+$lang['msg_plugin_install_success'] = '%s 플러그인을 성공적으로 설치했습니다';
+$lang['msg_plugin_update_success'] = '%s 플러그인을 성공적으로 업데이트했습니다';
+$lang['msg_upload_failed'] = '파일 올리기에 실패했습니다';
+$lang['missing_dependency'] = '<strong>의존성을 잃었거나 비활성화되어 있습니다:</strong> %s';
+$lang['security_issue'] = '<strong>보안 문제:</strong> %s';
+$lang['security_warning'] = '<strong>보안 경고:</strong> %s';
+$lang['update_available'] = '<strong>업데이트:</strong> 새 버전 %s(을)를 사용할 수 있습니다.';
+$lang['wrong_folder'] = '<strong>플러그인이 올바르지 않게 설치됨:</strong> 플러그인 디렉터리를 "%s"에서 "%s"로 이름을 바꾸세요.';
+$lang['url_change'] = '<strong>URL이 바뀜:</strong> 다운로드 URL이 최신 다운로드 이래로 바뀌었습니다. 확장 기능을 업데이트하기 전에 새 URL이 올바른지 확인하세요.<br />새 URL: %s<br />오래된 URL: %s';
+$lang['error_badurl'] = 'URL은 http나 https로 시작해야 합니다';
+$lang['error_dircreate'] = '다운로드를 받을 임시 폴더를 만들 수 없습니다';
+$lang['error_download'] = '파일을 다운로드할 수 없습니다: %s';
+$lang['error_decompress'] = '다운로드한 파일의 압축을 풀 수 없습니다. 이는 아마도 잘못된 다운로드의 결과로, 이럴 경우 다시 시도해야 합니다; 또는 압축 형식을 알 수 없으며, 이럴 경우 수동으로 다운로드하고 설치해야 합니다.';
+$lang['error_findfolder'] = '확장 기능 디렉터리를 식별할 수 없습니다, 수동으로 다운로드하고 설치해야 합니다';
+$lang['error_copy'] = '<em>%s</em> 디렉터리에 파일을 설치하는 동안 파일 복사 오류가 발생했습니다: 디스크가 꽉 찼거나 파일 접근 권한이 잘못되었을 수도 있습니다. 플러그인 설치가 부분적으로 되었거나 불안정하게 위키 설치가 되었을 수 있습니다.';
+$lang['noperms'] = '확장 기능 디렉터리에 쓸 수 없습니다';
+$lang['notplperms'] = '임시 디렉터리에 쓸 수 없습니다';
+$lang['nopluginperms'] = '플러그인 디렉터리에 쓸 수 없습니다';
+$lang['git'] = '이 확장 기능은 git을 통해 설치되었으며, 여기에서 업데이트할 수 없을 수 있습니다.';
+$lang['install_url'] = 'URL에서 설치:';
+$lang['install_upload'] = '확장 기능 올리기:';
+$lang['repo_error'] = '플러그인 저장소에 연결할 수 없습니다. 서버가 www.dokuwiki.org에 연결할 수 있는지 확인하고 프록시 설정을 확인하세요.';
diff --git a/lib/plugins/extension/lang/lv/intro_templates.txt b/lib/plugins/extension/lang/lv/intro_templates.txt
new file mode 100644
index 000000000..1014c7c1e
--- /dev/null
+++ b/lib/plugins/extension/lang/lv/intro_templates.txt
@@ -0,0 +1 @@
+DokuWiki ir instalēti šādi šabloni. Lietojamo šablonu var norādīt [[?do=admin&page=config|Konfigurācijas lapā]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/lv/lang.php b/lib/plugins/extension/lang/lv/lang.php
new file mode 100644
index 000000000..e7e9bdfd9
--- /dev/null
+++ b/lib/plugins/extension/lang/lv/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['msg_delete_success'] = 'Papildinājums atinstalēts';
diff --git a/lib/plugins/extension/lang/nl/intro_install.txt b/lib/plugins/extension/lang/nl/intro_install.txt
new file mode 100644
index 000000000..6a0b41055
--- /dev/null
+++ b/lib/plugins/extension/lang/nl/intro_install.txt
@@ -0,0 +1 @@
+Hier kunt u handmatig plugins en templates installeren door deze te uploaden of door een directe download URL op te geven. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/nl/intro_plugins.txt b/lib/plugins/extension/lang/nl/intro_plugins.txt
new file mode 100644
index 000000000..e12bdf0f8
--- /dev/null
+++ b/lib/plugins/extension/lang/nl/intro_plugins.txt
@@ -0,0 +1 @@
+Dit zijn de momenteel in uw Dokuwiki geïnstalleerde plugins. U kunt deze hier aan of uitschakelen danwel geheel deïnstalleren. Plugin updates zijn hier ook opgenomen, lees de plugin documentatie voordat u update. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/nl/intro_search.txt b/lib/plugins/extension/lang/nl/intro_search.txt
new file mode 100644
index 000000000..f0c8d7435
--- /dev/null
+++ b/lib/plugins/extension/lang/nl/intro_search.txt
@@ -0,0 +1 @@
+Deze tab verschaft u toegang tot alle plugins en templates vervaardigd door derden en bestemd voor Dokuwiki. Houdt er rekening mee dat indien u Plugins van derden installeert deze een **veiligheids risico ** kunnen bevatten, geadviseerd wordt om eerst te lezen [[doku>security#plugin_security|plugin security]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/nl/intro_templates.txt b/lib/plugins/extension/lang/nl/intro_templates.txt
new file mode 100644
index 000000000..52c96cef7
--- /dev/null
+++ b/lib/plugins/extension/lang/nl/intro_templates.txt
@@ -0,0 +1 @@
+Deze templates zijn thans in DokuWiki geïnstalleerd. U kunt een template selecteren middels [[?do=admin&page=config|Configuration Manager]] . \ No newline at end of file
diff --git a/lib/plugins/extension/lang/nl/lang.php b/lib/plugins/extension/lang/nl/lang.php
new file mode 100644
index 000000000..a54924e93
--- /dev/null
+++ b/lib/plugins/extension/lang/nl/lang.php
@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Rene <wllywlnt@yahoo.com>
+ * @author Gerrit Uitslag <klapinklapin@gmail.com>
+ * @author Johan Vervloet <johan.vervloet@gmail.com>
+ */
+$lang['menu'] = 'Uitbreidingen';
+$lang['tab_plugins'] = 'Geïnstalleerde Plugins';
+$lang['tab_templates'] = 'Geïnstalleerde Templates';
+$lang['tab_search'] = 'Zoek en installeer';
+$lang['tab_install'] = 'Handmatige installatie';
+$lang['notimplemented'] = 'Deze toepassing is nog niet geïnstalleerd';
+$lang['notinstalled'] = 'Deze uitbreiding is nog niet geïnstalleerd';
+$lang['alreadyenabled'] = 'Deze uitbreiding is reeds ingeschakeld';
+$lang['alreadydisabled'] = 'Deze uitbreiding is reeds uitgeschakeld';
+$lang['pluginlistsaveerror'] = 'Fout bij het opslaan van de plugin lijst';
+$lang['unknownauthor'] = 'Onbekende auteur';
+$lang['unknownversion'] = 'Onbekende versie';
+$lang['btn_info'] = 'Toon meer informatie';
+$lang['btn_update'] = 'Update';
+$lang['btn_uninstall'] = 'Deinstalleer';
+$lang['btn_enable'] = 'Schakel aan';
+$lang['btn_disable'] = 'Schakel uit';
+$lang['btn_install'] = 'Installeer';
+$lang['btn_reinstall'] = 'Her-installeer';
+$lang['js']['reallydel'] = 'Wilt u deze uitbreiding deinstalleren?';
+$lang['search_for'] = 'Zoek Uitbreiding:';
+$lang['search'] = 'Zoek';
+$lang['extensionby'] = '<strong>%s</strong> by %s';
+$lang['screenshot'] = 'Schermafdruk bij %s';
+$lang['popularity'] = 'Populariteit:%s%%';
+$lang['homepage_link'] = 'Documentatie';
+$lang['bugs_features'] = 'Bugs';
+$lang['tags'] = 'Tags:';
+$lang['author_hint'] = 'Zoek uitbreidingen van deze auteur:';
+$lang['installed'] = 'Geinstalleerd:';
+$lang['downloadurl'] = 'Download URL:';
+$lang['repository'] = 'Centrale opslag:';
+$lang['unknown'] = '<em>onbekend</em>';
+$lang['installed_version'] = 'Geïnstalleerde versie:';
+$lang['install_date'] = 'Uw laatste update:';
+$lang['available_version'] = 'Beschikbare versie:';
+$lang['compatible'] = 'Compatible met:';
+$lang['depends'] = 'Afhankelijk van:';
+$lang['similar'] = 'Soortgelijk:';
+$lang['conflicts'] = 'Conflicteerd met:';
+$lang['donate'] = 'Vindt u dit leuk?';
+$lang['donate_action'] = 'Koop een kop koffie voor de auteur!';
+$lang['repo_retry'] = 'Herhaal';
+$lang['provides'] = 'Zorgt voor:';
+$lang['status'] = 'Status:';
+$lang['status_installed'] = 'Geïnstalleerd';
+$lang['status_not_installed'] = 'niet geïnstalleerd ';
+$lang['status_protected'] = 'beschermd';
+$lang['status_enabled'] = 'ingeschakeld';
+$lang['status_disabled'] = 'uitgeschakeld';
+$lang['status_unmodifiable'] = 'Niet wijzigbaar';
+$lang['status_plugin'] = 'plugin';
+$lang['status_template'] = 'template';
+$lang['status_bundled'] = 'Gebundeld';
+$lang['msg_enabled'] = 'Plugin %s ingeschakeld';
+$lang['msg_disabled'] = 'Plugin %s uitgeschakeld';
+$lang['msg_delete_success'] = 'Uitbreiding gedeinstalleerd';
+$lang['msg_template_install_success'] = 'Template %s werd succesvol geïnstalleerd';
+$lang['msg_template_update_success'] = 'Template %s werd succesvol geüpdatet';
+$lang['msg_plugin_install_success'] = 'Plugin %s werd succesvol geïnstalleerd';
+$lang['msg_plugin_update_success'] = 'Plugin %s werd succesvol geüpdatet';
+$lang['msg_upload_failed'] = 'Uploaden van het bestand is mislukt';
+$lang['missing_dependency'] = '<strong>niet aanwezige of uitgeschakelde afhankelijkheid</strong> %s';
+$lang['security_issue'] = '<strong>Veiligheids kwestie:</strong> %s';
+$lang['security_warning'] = '<strong>Veiligheids Waarschuwing</strong> %s';
+$lang['update_available'] = '<strong>Update:</strong> Nieuwe versie %s is beschikbaar.';
+$lang['wrong_folder'] = '<strong>Plugin onjuist geïnstalleerd:</strong> Hernoem de plugin directory van "%s" naar"%s"';
+$lang['url_change'] = '<strong>URL gewijzigd:</strong> Download URL is gewijzigd sinds de laatste download. Controleer of de nieuwe URL juist is voordat u de uitbreiding updatet. <br />Nieuw:%s<Br /> Vorig: %s';
+$lang['error_badurl'] = 'URLs moeten beginnen met http of https';
+$lang['error_dircreate'] = 'De tijdelijke map kon niet worden gemaakt om de download te ontvangen';
+$lang['error_download'] = 'Het is niet mogelijk het bestand te downloaden: %s';
+$lang['error_decompress'] = 'Onmogelijk om het gedownloade bestand uit te pakken. Dit is wellicht het gevolg van een onvolledige/onjuiste download, in welk geval u het nog eens moet proberen; of het compressie formaat is onbekend in welk geval u het bestand handmatig moet downloaden en installeren.';
+$lang['error_findfolder'] = 'Onmogelijk om de uitbreidings directory te vinden, u moet het zelf downloaden en installeren';
+$lang['error_copy'] = 'Er was een bestand kopieer fout tijdens het installeren van bestanden in directory <em>%s</em>: de schijf kan vol zijn of de bestand toegangs rechten kunnen onjuist zijn. Dit kan tot gevolg hebben dat de plugin slechts gedeeltelijk werd geïnstalleerd waardoor uw wiki installatie onstabiel is ';
+$lang['noperms'] = 'Uitbreidings directory is niet schrijfbaar';
+$lang['notplperms'] = 'Template directory is niet schrijfbaar';
+$lang['nopluginperms'] = 'Plugin directory is niet schrijfbaar';
+$lang['git'] = 'De uitbreiding werd geïnstalleerd via git, u wilt deze hier wellicht niet aanpassen.';
+$lang['install_url'] = 'Installeer vanaf URL:';
+$lang['install_upload'] = 'Upload Uitbreiding:';
+$lang['repo_error'] = 'Er kon geen verbinding worden gemaakt met de centrale plugin opslag. Controleer of de server verbinding mag maken met www.dokuwiki.org en controleer de proxy instellingen.';
diff --git a/lib/plugins/extension/lang/pl/lang.php b/lib/plugins/extension/lang/pl/lang.php
new file mode 100644
index 000000000..4fdca79c9
--- /dev/null
+++ b/lib/plugins/extension/lang/pl/lang.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mati <mackosa@wp.pl>
+ */
+$lang['menu'] = 'Menedżer rozszerzeń';
+$lang['tab_plugins'] = 'Zainstalowane dodatki';
+$lang['tab_search'] = 'Znajdź i zainstaluj';
+$lang['notinstalled'] = 'Te rozszerzenie nie zostało zainstalowane';
+$lang['alreadyenabled'] = 'Te rozszerzenie jest już uruchomione';
+$lang['unknownauthor'] = 'Nieznany autor';
+$lang['unknownversion'] = 'Nieznana wersja';
+$lang['btn_info'] = 'Pokaż więcej informacji';
+$lang['btn_enable'] = 'Uruchom';
+$lang['btn_disable'] = 'Wyłącz';
+$lang['btn_reinstall'] = 'Ponowna instalacja';
+$lang['js']['reallydel'] = 'Naprawdę odinstalować te rozszerzenie?';
+$lang['search'] = 'Szukaj';
+$lang['bugs_features'] = 'Błędy';
+$lang['tags'] = 'Tagi:';
+$lang['installed'] = 'Zainstalowano:';
+$lang['repository'] = 'Repozytorium';
+$lang['installed_version'] = 'Zainstalowana wersja:';
+$lang['install_date'] = 'Twoja ostatnia aktualizacja:';
+$lang['available_version'] = 'Dostępna wersja:';
+$lang['depends'] = 'Zależy od:';
+$lang['conflicts'] = 'Konflikt z:';
+$lang['donate'] = 'Lubisz to?';
+$lang['donate_action'] = 'Kup autorowi kawę!';
+$lang['repo_retry'] = 'Ponów';
+$lang['status'] = 'Status:';
+$lang['status_installed'] = 'zainstalowano';
+$lang['status_not_installed'] = 'nie zainstalowano';
+$lang['status_enabled'] = 'uruchomione';
+$lang['status_disabled'] = 'wyłączone';
+$lang['status_plugin'] = 'dodatek';
+$lang['msg_delete_success'] = 'Rozszerzenie odinstalowane';
diff --git a/lib/plugins/extension/lang/pt-br/intro_install.txt b/lib/plugins/extension/lang/pt-br/intro_install.txt
new file mode 100644
index 000000000..08527b0f6
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_install.txt
@@ -0,0 +1 @@
+Aqui você pode instalar extensões e modelos manualmente, ou subindo eles ou submetendo uma URL de baixar diretamente. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/intro_plugins.txt b/lib/plugins/extension/lang/pt-br/intro_plugins.txt
new file mode 100644
index 000000000..e0a8c7f3f
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_plugins.txt
@@ -0,0 +1 @@
+Estas são as extensões instaladas atualmente no seu DokuWiki. Você pode habilitar ou desabilitar ou desinstalar completamente elas aqui. Atualizações das extensões também são mostradas, certifique-se de ler a documentação da extensão antes de atualizá-la. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/intro_search.txt b/lib/plugins/extension/lang/pt-br/intro_search.txt
new file mode 100644
index 000000000..f2101d73b
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_search.txt
@@ -0,0 +1 @@
+Esta aba lhe dá acesso a extensões e modelos disponibilizados por terceiros para o DokuWiki. Favor ter cuidado pois instalar código de terceiros pode acarretar um **risco de segurança**, você poderia ler sobre [[doku>security#plugin_security|segurança de extensões]] primeiramente. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/intro_templates.txt b/lib/plugins/extension/lang/pt-br/intro_templates.txt
new file mode 100644
index 000000000..aa3e07f0c
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/intro_templates.txt
@@ -0,0 +1 @@
+Estes são os modelos instalados atualmente no seu DokuWiki. Você pode selecionar o modelo a ser usado no [[?do=admin&page=config|Configuration Manager]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/pt-br/lang.php b/lib/plugins/extension/lang/pt-br/lang.php
new file mode 100644
index 000000000..0d897616a
--- /dev/null
+++ b/lib/plugins/extension/lang/pt-br/lang.php
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Felipe Castro <fefcas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciador de extensões';
+$lang['tab_plugins'] = 'Extensões instaladas';
+$lang['tab_templates'] = 'Modelos instalados';
+$lang['tab_search'] = 'Procurar e instalar';
+$lang['tab_install'] = 'Instalar manualmente';
+$lang['notimplemented'] = 'Esta função ainda não foi implementada';
+$lang['notinstalled'] = 'Esta extensão não está instalada';
+$lang['alreadyenabled'] = 'Esta extensão já foi habilitada';
+$lang['alreadydisabled'] = 'Esta extensão já foi desabilitada';
+$lang['pluginlistsaveerror'] = 'Houve um erro ao salvar a lista de extensões';
+$lang['unknownauthor'] = 'Autor desconhecido';
+$lang['unknownversion'] = 'Versão desconhecida';
+$lang['btn_info'] = 'Mostrar mais informações';
+$lang['btn_update'] = 'Atualizar';
+$lang['btn_uninstall'] = 'Desinstalar';
+$lang['btn_enable'] = 'Habilitar';
+$lang['btn_disable'] = 'Desabilitar';
+$lang['btn_install'] = 'Instalar';
+$lang['btn_reinstall'] = 'Re-instalar';
+$lang['js']['reallydel'] = 'Quer mesmo desinstalar esta extensão?';
+$lang['search_for'] = 'Procurar extensão:';
+$lang['search'] = 'Procurar';
+$lang['extensionby'] = '<strong>%s</strong> de %s';
+$lang['screenshot'] = 'Tela congelada de %s';
+$lang['popularity'] = 'Popularidade: %s%%';
+$lang['homepage_link'] = 'Docs';
+$lang['bugs_features'] = 'Erros';
+$lang['tags'] = 'Etiquetas:';
+$lang['author_hint'] = 'Procurar extensões deste autor';
+$lang['installed'] = 'Instalado:';
+$lang['downloadurl'] = 'URL para baixar:';
+$lang['repository'] = 'Repositório:';
+$lang['unknown'] = '<em>desconhecido</em>';
+$lang['installed_version'] = 'Versão instalada:';
+$lang['install_date'] = 'Sua última atualização:';
+$lang['available_version'] = 'Versão disponível:';
+$lang['compatible'] = 'Compatível com:';
+$lang['depends'] = 'Depende de:';
+$lang['similar'] = 'Similar a:';
+$lang['conflicts'] = 'Colide com:';
+$lang['donate'] = 'Gostou deste?';
+$lang['donate_action'] = 'Pague um café ao autor!';
+$lang['repo_retry'] = 'Tentar de novo';
+$lang['provides'] = 'Disponibiliza:';
+$lang['status'] = 'Estado:';
+$lang['status_installed'] = 'instalado';
+$lang['status_not_installed'] = 'não instalado';
+$lang['status_protected'] = 'protegido';
+$lang['status_enabled'] = 'habilitado';
+$lang['status_disabled'] = 'desabilitado';
+$lang['status_unmodifiable'] = 'não modificável';
+$lang['status_plugin'] = 'extensão';
+$lang['status_template'] = 'modelo';
+$lang['status_bundled'] = 'agrupado';
+$lang['msg_enabled'] = 'Extensão %s habilitada';
+$lang['msg_disabled'] = 'Extensão %s desabilitada';
+$lang['msg_delete_success'] = 'Extensão desinstalada';
+$lang['msg_template_install_success'] = 'Modelo %s instalado com sucesso';
+$lang['msg_template_update_success'] = 'Modelo %s atualizado com sucesso';
+$lang['msg_plugin_install_success'] = 'Extensão %s instalada com sucesso';
+$lang['msg_plugin_update_success'] = 'Extensão %s atualizada com sucesso';
+$lang['msg_upload_failed'] = 'Subida do arquivo falhou';
+$lang['missing_dependency'] = '<strong>Dependência faltante ou desabilitada:</strong> %s';
+$lang['security_issue'] = '<strong>Problema com segurança:</strong> %s';
+$lang['security_warning'] = '<strong>Aviso sobre segurança:</strong> %s';
+$lang['update_available'] = '<strong>Atualização:</strong> Nova versão %s está disponível.';
+$lang['wrong_folder'] = '<strong>Extensão instalada incorretamente:</strong> Renomeie o diretório de extensões "%s" para "%s".';
+$lang['url_change'] = '<strong>URL mudou:</strong> A URL para baixar mudou desde a última baixada. Verifique se a nova URL é válida antes de atualizar a extensão.<br />Novo: %s<br />Velho: %s';
diff --git a/lib/plugins/extension/lang/ru/lang.php b/lib/plugins/extension/lang/ru/lang.php
new file mode 100644
index 000000000..fa1625f28
--- /dev/null
+++ b/lib/plugins/extension/lang/ru/lang.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Igor Degraf <igordegraf@gmail.com>
+ */
+$lang['menu'] = 'Управление дополнениями';
+$lang['tab_plugins'] = 'Установленные плагины';
+$lang['tab_templates'] = 'Установленные шаблоны';
+$lang['tab_search'] = 'Поиск и установка';
+$lang['tab_install'] = 'Ручная установка';
+$lang['notinstalled'] = 'Это дополнение не установлено';
+$lang['unknownauthor'] = 'Автор неизвестен';
+$lang['unknownversion'] = 'Версия неизвестна';
+$lang['btn_info'] = 'Отобразить доп. информацию';
+$lang['btn_update'] = 'Обновить';
+$lang['btn_uninstall'] = 'Удалить';
+$lang['btn_enable'] = 'Включить';
+$lang['btn_disable'] = 'Отключить';
+$lang['btn_install'] = 'Установить';
+$lang['btn_reinstall'] = 'Переустановить';
+$lang['js']['reallydel'] = 'Действительно удалить это дополнение?';
+$lang['search_for'] = 'Поиск дополнения:';
+$lang['search'] = 'Найти';
+$lang['extensionby'] = '<strong>%s</strong> — %s';
+$lang['popularity'] = 'Попоулярность: %s%%';
+$lang['bugs_features'] = 'Ошибки';
+$lang['tags'] = 'Метки:';
+$lang['author_hint'] = 'Найти дополнения этого автора';
+$lang['installed'] = 'Установлено:';
+$lang['downloadurl'] = 'Ссылка для скачивания:';
+$lang['repository'] = 'Репозиторий:';
+$lang['unknown'] = '<em>неизвестно</em>';
+$lang['installed_version'] = 'Установленная версия:';
+$lang['install_date'] = 'Последнее обновление:';
+$lang['available_version'] = 'Доступная версия:';
+$lang['compatible'] = 'Совместим с:';
+$lang['depends'] = 'Зависит от:';
+$lang['similar'] = 'Похож на:';
+$lang['conflicts'] = 'Конфликтует с:';
+$lang['donate'] = 'Нравится?';
+$lang['donate_action'] = 'Купить автору кофе!';
+$lang['repo_retry'] = 'Повторить';
+$lang['status_installed'] = 'установлено';
+$lang['status_not_installed'] = 'не установлено';
+$lang['status_protected'] = 'защищено';
+$lang['status_enabled'] = 'включен';
+$lang['status_disabled'] = 'отключено';
+$lang['status_unmodifiable'] = 'неизменяемо';
+$lang['status_plugin'] = 'плагин';
+$lang['status_template'] = 'шаблон';
+$lang['status_bundled'] = 'в комплекте';
+$lang['msg_enabled'] = 'Плагин %s включен';
+$lang['msg_disabled'] = 'Плагин %s отключен';
+$lang['msg_delete_success'] = 'Дополнение удалено';
+$lang['msg_template_install_success'] = 'Шаблон %s успешно установлен';
+$lang['msg_template_update_success'] = 'Шаблон %s успешно обновлён';
+$lang['msg_plugin_install_success'] = 'Плагин %s успешно установлен';
+$lang['msg_plugin_update_success'] = 'Плагин %s успешно обновлён';
+$lang['noperms'] = 'Папка для расширений не доступна на запись';
+$lang['notplperms'] = 'Папка для шаблонов не доступна на запись';
+$lang['nopluginperms'] = 'Папка плагинов не доступна на запись';
+$lang['git'] = 'Это расширение было установлено через git, Вы не можете обновить его тут.';
+$lang['install_url'] = 'Установить с адреса URL:';
+$lang['install_upload'] = 'Скачать расширение:';
+$lang['repo_error'] = 'Сайт с плагинами недоступен. Убедитесь, что у сайта есть доступ на www.dokuwiki.org и также проверьте настройки соединения прокси.';
diff --git a/lib/plugins/extension/lang/sk/lang.php b/lib/plugins/extension/lang/sk/lang.php
new file mode 100644
index 000000000..d00c2e32b
--- /dev/null
+++ b/lib/plugins/extension/lang/sk/lang.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['tab_plugins'] = 'Inštalované pluginy';
+$lang['tab_templates'] = 'Inštalované šablóny';
+$lang['tab_search'] = 'Hľadanie e inštalácia';
+$lang['tab_install'] = 'Manuálna inštalácia';
+$lang['notimplemented'] = 'Táto vlastnosť ešte nebola implementovaná';
+$lang['unknownauthor'] = 'Neznámy autor';
+$lang['unknownversion'] = 'Neznáma verzia';
+$lang['btn_info'] = 'Viac informácií';
+$lang['btn_update'] = 'Aktualizácia';
+$lang['btn_uninstall'] = 'Odinštalovanie';
+$lang['btn_enable'] = 'Povolenie';
+$lang['btn_disable'] = 'Zablokovanie';
+$lang['btn_install'] = 'Inštalácia';
+$lang['btn_reinstall'] = 'Re-Inštalácia';
+$lang['search'] = 'Vyhľadávanie';
+$lang['extensionby'] = '<strong>%s</strong> od %s';
+$lang['screenshot'] = 'Obrázok od %s';
+$lang['popularity'] = 'Popularita: %s%%';
+$lang['homepage_link'] = 'Dokumentácia';
+$lang['bugs_features'] = 'Chyby:';
+$lang['tags'] = 'Kľúčové slová:';
+$lang['unknown'] = '<em>neznámy</em>';
+$lang['installed_version'] = 'Inštalovaná verzia:';
+$lang['install_date'] = 'Posledná aktualizácia:';
+$lang['available_version'] = 'Dostupné verzie:';
+$lang['compatible'] = 'Kompaktibilita:';
+$lang['similar'] = 'Podobné:';
+$lang['conflicts'] = 'V konflikte:';
+$lang['status_installed'] = 'inštalovaný';
+$lang['status_not_installed'] = 'neinštalovaný';
+$lang['status_protected'] = 'chránený';
+$lang['status_enabled'] = 'povolený';
+$lang['status_disabled'] = 'nepovolený';
+$lang['status_plugin'] = 'plugin';
+$lang['status_template'] = 'šablóna';
+$lang['msg_enabled'] = 'Plugin %s povolený';
+$lang['msg_disabled'] = 'Plugin %s nepovolený';
+$lang['msg_template_install_success'] = 'Šablóna %s úspešne nainštalovaná';
+$lang['msg_template_update_success'] = 'Šablóna %s úspešne aktualizovaná';
+$lang['msg_plugin_install_success'] = 'Plugin %s úspešne nainštalovaný';
+$lang['msg_plugin_update_success'] = 'Plugin %s úspešne aktualizovaný';
+$lang['msg_upload_failed'] = 'Nahrávanie súboru zlyhalo';
+$lang['update_available'] = '<strong>Aktualizácia:</strong> Nová verzia %s.';
+$lang['wrong_folder'] = '<strong>Plugin nesprávne nainštalovaný:</strong> Premenujte adresár s pluginom "%s" na "%s".';
+$lang['error_badurl'] = 'URL by mali mať na začiatku http alebo https';
+$lang['error_dircreate'] = 'Nie je možné vytvoriť dočasný adresár pre uloženie sťahovaného súboru';
+$lang['error_download'] = 'Nie je možné stiahnuť súbor: %s';
+$lang['error_decompress'] = 'Nie je možné dekomprimovať stiahnutý súbor. Môže to byť dôvodom chyby sťahovania (v tom prípade to skúste znova) alebo neznámym kompresným formátom (v tom prípade musíte stiahnuť a inštalovať manuálne).';
+$lang['error_copy'] = 'Chyba kopírovania pri inštalácii do adresára <em>%s</em>: disk môže byť plný alebo nemáte potrebné prístupové oprávnenie. Dôsledkom može byť čiastočne inštalovaný plugin a nestabilná wiki inštalácia.';
+$lang['nopluginperms'] = 'Adresár s pluginom nie je zapisovateľný.';
+$lang['install_url'] = 'Inštalácia z URL:';
diff --git a/lib/plugins/extension/lang/tr/lang.php b/lib/plugins/extension/lang/tr/lang.php
new file mode 100644
index 000000000..dfabfa715
--- /dev/null
+++ b/lib/plugins/extension/lang/tr/lang.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author İlker R. Kapaç <irifat@gmail.com>
+ */
+$lang['menu'] = 'Genişletme Yöneticisi';
+$lang['tab_plugins'] = 'Kurulmuş Eklentiler';
+$lang['tab_templates'] = 'Kurulmuş Şablonlar';
+$lang['tab_search'] = 'Ara ve Kur';
+$lang['tab_install'] = 'Elle Kurulum';
+$lang['notimplemented'] = 'Bu özellik henüz uygulamaya geçmemiştir';
+$lang['notinstalled'] = 'Bu genişletme yüklü değildir';
+$lang['alreadyenabled'] = 'Bu genişletme zaten etkinleştirilmiştir.';
+$lang['alreadydisabled'] = 'Bu genişletme zaten pasifleştirilmiştir';
+$lang['pluginlistsaveerror'] = 'Eklenti listesini kaydederken bir hata oluştu.';
+$lang['unknownauthor'] = 'Bilinmeyen yazar';
+$lang['unknownversion'] = 'Bilinmeyen sürüm';
+$lang['btn_info'] = 'Daha fazla bilgi göster';
+$lang['btn_update'] = 'Güncelle';
+$lang['btn_uninstall'] = 'Kaldır';
+$lang['btn_enable'] = 'Etkinleştir';
+$lang['btn_disable'] = 'Pasifleştir';
+$lang['btn_install'] = 'Kur';
+$lang['btn_reinstall'] = 'Yeniden kur';
+$lang['js']['reallydel'] = 'Genişletme gerçekten kaldırılsın mı?';
+$lang['search_for'] = 'Genişletme Ara:';
+$lang['search'] = 'Ara';
+$lang['extensionby'] = '<strong>%s</strong> tarafından %s';
+$lang['screenshot'] = '%s ekran görüntüsü';
+$lang['popularity'] = 'Rağbet: %s%%';
+$lang['homepage_link'] = 'Belgeler';
+$lang['bugs_features'] = 'Hatalar';
+$lang['tags'] = 'Etiketler:';
+$lang['author_hint'] = 'Bu yazarın genişletmelerini ara.';
+$lang['installed'] = 'Kurulu:';
+$lang['downloadurl'] = 'İndirme bağlantısı:';
+$lang['repository'] = 'Veri havuzu:';
+$lang['unknown'] = '<em>bilinmeyen</em>';
+$lang['installed_version'] = 'Kurulu sürüm:';
+$lang['install_date'] = 'Son güncellemeniz:';
+$lang['available_version'] = 'Müsait sürüm:';
+$lang['compatible'] = 'Şununla uyumlu:';
+$lang['depends'] = 'Şuna bağımlı';
+$lang['similar'] = 'Şununla benzer';
+$lang['conflicts'] = 'Şununla çelişir';
+$lang['donate'] = 'Beğendiniz mi?';
+$lang['donate_action'] = 'Yazara bir kahve ısmarlayın!';
+$lang['repo_retry'] = 'Yeniden dene';
+$lang['provides'] = 'Sağlar:';
+$lang['status'] = 'Durum:';
+$lang['status_installed'] = 'kurulu';
+$lang['status_not_installed'] = 'kurulu değil';
+$lang['status_protected'] = 'korunmuş';
+$lang['status_enabled'] = 'etkin';
+$lang['status_disabled'] = 'hizmet dışı';
+$lang['status_unmodifiable'] = 'değiştirilemez';
+$lang['status_plugin'] = 'eklenti';
+$lang['status_template'] = 'şablon';
diff --git a/lib/plugins/extension/lang/zh-tw/intro_install.txt b/lib/plugins/extension/lang/zh-tw/intro_install.txt
new file mode 100644
index 000000000..3ba93f5f8
--- /dev/null
+++ b/lib/plugins/extension/lang/zh-tw/intro_install.txt
@@ -0,0 +1 @@
+在此你可以透過檔案上傳或提供下載網址的方式,進行手動安裝外掛與版型風格。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/zh-tw/lang.php b/lib/plugins/extension/lang/zh-tw/lang.php
new file mode 100644
index 000000000..a86364d7a
--- /dev/null
+++ b/lib/plugins/extension/lang/zh-tw/lang.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Stan <talktostan@gmail.com>
+ * @author June-Hao Hou <junehao@gmail.com>
+ */
+$lang['menu'] = '延伸功能管理';
+$lang['tab_plugins'] = '已安裝外掛';
+$lang['tab_templates'] = '已安裝裝模版
+';
+$lang['tab_search'] = '搜尋與安裝';
+$lang['tab_install'] = '手動安裝';
+$lang['notimplemented'] = '此功能尚未完成';
+$lang['notinstalled'] = '此延伸功能尚未安裝';
+$lang['alreadyenabled'] = '此延伸功能已經安裝';
+$lang['alreadydisabled'] = '此延伸功能停用';
+$lang['unknownauthor'] = '作者未知';
+$lang['unknownversion'] = '版本未知';
+$lang['btn_info'] = '顯示更多訊息';
+$lang['btn_update'] = '更新';
+$lang['btn_uninstall'] = '移除安裝';
+$lang['btn_enable'] = '啟用';
+$lang['btn_disable'] = '停用';
+$lang['btn_install'] = '安裝';
+$lang['btn_reinstall'] = '重新安裝';
+$lang['js']['reallydel'] = '確定要移除此延伸功能?';
+$lang['search_for'] = '搜尋延伸功能:';
+$lang['search'] = '搜尋';
+$lang['tags'] = '標籤:';
+$lang['author_hint'] = '搜尋相同作者的延伸功能';
+$lang['installed'] = '已安裝:';
+$lang['downloadurl'] = '下載網址:';
+$lang['installed_version'] = '已安裝版本:';
+$lang['available_version'] = '可用版本:';
+$lang['compatible'] = '相容於:';
+$lang['repo_retry'] = '再試一次';
+$lang['status'] = '狀態:';
+$lang['status_installed'] = '已安裝';
+$lang['status_not_installed'] = '未安裝';
+$lang['status_enabled'] = '作用中';
+$lang['status_disabled'] = '停用中';
+$lang['status_plugin'] = '外掛';
+$lang['noperms'] = '延伸功能資料夾無法寫入';
+$lang['notplperms'] = '版型資料夾無法寫入';
+$lang['nopluginperms'] = '外掛資料夾無法寫入';
+$lang['git'] = '此延伸功能是透過git安裝的,最好不要用上傳方式。';
+$lang['install_url'] = '透過網址安裝:';
+$lang['install_upload'] = '上傳延伸功能:';
diff --git a/lib/plugins/extension/lang/zh/intro_install.txt b/lib/plugins/extension/lang/zh/intro_install.txt
new file mode 100644
index 000000000..640839319
--- /dev/null
+++ b/lib/plugins/extension/lang/zh/intro_install.txt
@@ -0,0 +1 @@
+你可以通过上传或直接提供下载链接来安装插件和模板。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/zh/intro_plugins.txt b/lib/plugins/extension/lang/zh/intro_plugins.txt
new file mode 100644
index 000000000..69cb343b3
--- /dev/null
+++ b/lib/plugins/extension/lang/zh/intro_plugins.txt
@@ -0,0 +1 @@
+这些是你当前已经安装的插件。你可以在这里启用和禁用甚至卸载它们。插件的更新信息也显示在这,请一定在更新之前阅读插件的文档。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/zh/intro_search.txt b/lib/plugins/extension/lang/zh/intro_search.txt
new file mode 100644
index 000000000..0059075c0
--- /dev/null
+++ b/lib/plugins/extension/lang/zh/intro_search.txt
@@ -0,0 +1 @@
+这个标签会为你展示所有DokuWiki的第三方插件和模板。但你需要知道这些由第三方提供的代码可能会给你带来**安全方面的风险**,你最好先读一下[[doku>security#plugin_security|插件安全性]]。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/zh/intro_templates.txt b/lib/plugins/extension/lang/zh/intro_templates.txt
new file mode 100644
index 000000000..20575d381
--- /dev/null
+++ b/lib/plugins/extension/lang/zh/intro_templates.txt
@@ -0,0 +1 @@
+DokuWiki当前所使用的模板已经安装了,你可以在[[?do=admin&page=config|配置管理器]]里选择你要的模板。 \ No newline at end of file
diff --git a/lib/plugins/extension/lang/zh/lang.php b/lib/plugins/extension/lang/zh/lang.php
new file mode 100644
index 000000000..0264f3e9c
--- /dev/null
+++ b/lib/plugins/extension/lang/zh/lang.php
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Cupen <Cupenoruler@foxmail.com>
+ * @author xiqingongzi <Xiqingongzi@Gmail.com>
+ * @author qinghao <qingxianhao@gmail.com>
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['menu'] = '扩展管理器';
+$lang['tab_plugins'] = '安装插件';
+$lang['tab_templates'] = '安装模板';
+$lang['tab_search'] = '搜索和安装';
+$lang['tab_install'] = '手动安装';
+$lang['notimplemented'] = '未实现的特性';
+$lang['notinstalled'] = '该扩展未安装';
+$lang['alreadyenabled'] = '该扩展已激活';
+$lang['alreadydisabled'] = '该扩展已关闭';
+$lang['pluginlistsaveerror'] = '保存插件列表时碰到个错误';
+$lang['unknownauthor'] = '未知作者';
+$lang['unknownversion'] = '未知版本';
+$lang['btn_info'] = '查看更多信息';
+$lang['btn_update'] = '更新';
+$lang['btn_uninstall'] = '卸载';
+$lang['btn_enable'] = '激活';
+$lang['btn_disable'] = '关闭';
+$lang['btn_install'] = '安装';
+$lang['btn_reinstall'] = '重新安装';
+$lang['js']['reallydel'] = '确定卸载这个扩展么?';
+$lang['search_for'] = '搜索扩展';
+$lang['search'] = '搜索';
+$lang['extensionby'] = '<strong>%s</strong> by %s';
+$lang['screenshot'] = '%s 的截图';
+$lang['popularity'] = '人气: %s%%';
+$lang['homepage_link'] = '文档';
+$lang['bugs_features'] = '错误';
+$lang['tags'] = '标签:';
+$lang['author_hint'] = '搜索这个作者的插件';
+$lang['installed'] = '已安装的:';
+$lang['downloadurl'] = '下载地址:';
+$lang['repository'] = '版本库:';
+$lang['unknown'] = '<em>未知的</em>';
+$lang['installed_version'] = '已安装版本:';
+$lang['install_date'] = '您的最后一次升级:';
+$lang['available_version'] = '可用版本:';
+$lang['compatible'] = '兼容于:';
+$lang['depends'] = '依赖于:';
+$lang['similar'] = '相似于:';
+$lang['conflicts'] = '冲突于:';
+$lang['donate'] = '喜欢?';
+$lang['donate_action'] = '捐给作者一杯咖啡钱!';
+$lang['repo_retry'] = '重试';
+$lang['provides'] = '提供:';
+$lang['status'] = '现状:';
+$lang['status_installed'] = '已安装的';
+$lang['status_not_installed'] = '未安装';
+$lang['status_protected'] = '受保护';
+$lang['status_enabled'] = '启用';
+$lang['status_disabled'] = '禁用';
+$lang['status_unmodifiable'] = '不可修改';
+$lang['status_plugin'] = '插件';
+$lang['status_template'] = '模板';
+$lang['status_bundled'] = '内建';
+$lang['msg_enabled'] = '插件 %s 已启用';
+$lang['msg_disabled'] = '插件 %s 已禁用';
+$lang['msg_delete_success'] = '插件已经卸载';
+$lang['msg_template_install_success'] = '模板 %s 安装成功';
+$lang['msg_template_update_success'] = '模板 %s 更新成功';
+$lang['msg_plugin_install_success'] = '插件 %s 安装成功';
+$lang['msg_plugin_update_success'] = '插件 %s 更新成功';
+$lang['msg_upload_failed'] = '上传文件失败';
+$lang['missing_dependency'] = '<strong>缺少或者被禁用依赖:</strong> %s';
+$lang['security_issue'] = '<strong>安全问题:</strong> %s';
+$lang['security_warning'] = '<strong>安全警告:</strong> %s';
+$lang['update_available'] = '<strong>更新:</strong>新版本 %s 已经可用。';
+$lang['wrong_folder'] = '<strong>插件安装不正确:</strong>重命名插件目录 "%s" 为 "%s"。';
+$lang['url_change'] = '<strong>URL已改变:</strong>自上次下载以来的下载 URL 已经改变。请在更新扩展前检查新 URL 是否有效。<br />新的:%s<br />旧的:%s';
+$lang['error_badurl'] = 'URL 应当以 http 或者 https 作为开头';
+$lang['error_dircreate'] = '无法创建用于保存下载的临时文件夹';
+$lang['error_download'] = '无法下载文件:%s';
+$lang['error_decompress'] = '无法解压下载的文件。这可能是由于文件损坏,在这种情况下您可以重试。这也可能是由于压缩格式是未知的,在这种情况下您需要手动下载并且安装。';
+$lang['error_findfolder'] = '无法识别扩展目录,您需要手动下载和安装';
+$lang['error_copy'] = '在尝试安装文件到目录 <em>%s</em> 时出现文件复制错误:磁盘可能已满或者文件访问权限不正确。这可能导致插件被部分安装并使您的维基处在不稳定状态';
+$lang['noperms'] = '扩展目录不可写';
+$lang['notplperms'] = '模板目录不可写';
+$lang['nopluginperms'] = '插件目录不可写';
+$lang['git'] = '这个扩展是通过 git 安装的,您可能不想在这里升级它';
+$lang['install_url'] = '从 URL 安装:';
+$lang['install_upload'] = '上传扩展:';
+$lang['repo_error'] = '无法连接到插件仓库。请确定您的服务器可以连接 www.dokuwiki.org 并检查您的代理设置。';
diff --git a/lib/plugins/extension/plugin.info.txt b/lib/plugins/extension/plugin.info.txt
index ef16d78a1..ee9830628 100644
--- a/lib/plugins/extension/plugin.info.txt
+++ b/lib/plugins/extension/plugin.info.txt
@@ -1,7 +1,7 @@
base extension
author Michael Hamann
email michael@content-space.de
-date 2013-08-01
+date 2014-06-15
name Extension Manager
desc Allows managing and installing plugins and templates
url https://www.dokuwiki.org/plugin:extension
diff --git a/lib/plugins/info/plugin.info.txt b/lib/plugins/info/plugin.info.txt
index 053743639..7773a419d 100644
--- a/lib/plugins/info/plugin.info.txt
+++ b/lib/plugins/info/plugin.info.txt
@@ -1,7 +1,7 @@
base info
author Andreas Gohr
email andi@splitbrain.org
-date 2013-02-16
+date 2014-03-05
name Info Plugin
desc Displays information about various DokuWiki internals
url http://dokuwiki.org/plugin:info
diff --git a/lib/plugins/info/syntax.php b/lib/plugins/info/syntax.php
index f8c6eb484..9265f44d5 100644
--- a/lib/plugins/info/syntax.php
+++ b/lib/plugins/info/syntax.php
@@ -48,7 +48,7 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
/**
* Handle the match
*/
- function handle($match, $state, $pos, Doku_Handler &$handler){
+ function handle($match, $state, $pos, Doku_Handler $handler){
$match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end
return array(strtolower($match));
}
@@ -56,7 +56,7 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
/**
* Create output
*/
- function render($format, Doku_Renderer &$renderer, $data) {
+ function render($format, Doku_Renderer $renderer, $data) {
if($format == 'xhtml'){
/** @var Doku_Renderer_xhtml $renderer */
//handle various info stuff
diff --git a/lib/plugins/plugin/lang/cs/admin_plugin.txt b/lib/plugins/plugin/lang/cs/admin_plugin.txt
deleted file mode 100644
index 6ebf1e78f..000000000
--- a/lib/plugins/plugin/lang/cs/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Správa pluginů ======
-
-Na této stránce lze spravovat pluginy DokuWiki [[doku>plugins|plugins]]. Aby bylo možné stahovat a instalovat pluginy, musí mít webový server přístup pro zápis do adresáře //plugin//.
diff --git a/lib/plugins/plugin/lang/cs/lang.php b/lib/plugins/plugin/lang/cs/lang.php
deleted file mode 100644
index 8917f8ef6..000000000
--- a/lib/plugins/plugin/lang/cs/lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Tomas Valenta <t.valenta@sh.cvut.cz>
- * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
- * @author Bohumir Zamecnik <bohumir@zamecnik.org>
- * @author tomas@valenta.cz
- * @author Marek Sacha <sachamar@fel.cvut.cz>
- * @author Lefty <lefty@multihost.cz>
- * @author Vojta Beran <xmamut@email.cz>
- * @author zbynek.krivka@seznam.cz
- * @author Bohumir Zamecnik <bohumir.zamecnik@gmail.com>
- * @author Jakub A. Těšínský (j@kub.cz)
- * @author mkucera66@seznam.cz
- * @author Zbyněk Křivka <krivka@fit.vutbr.cz>
- * @author Gerrit Uitslag <klapinklapin@gmail.com>
- * @author Petr Klíma <qaxi@seznam.cz>
- */
-$lang['menu'] = 'Správa pluginů';
-$lang['download'] = 'Stáhnout a instalovat plugin';
-$lang['manage'] = 'Seznam instalovaných pluginů';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'aktualizovat';
-$lang['btn_delete'] = 'smazat';
-$lang['btn_settings'] = 'nastavení';
-$lang['btn_download'] = 'Stáhnout';
-$lang['btn_enable'] = 'Uložit';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instalován:';
-$lang['lastupdate'] = 'Poslední aktualizace:';
-$lang['source'] = 'Zdroj:';
-$lang['unknown'] = 'neznámý';
-$lang['updating'] = 'Aktualizuji ...';
-$lang['updated'] = 'Modul %s úspěšně aktualizován';
-$lang['updates'] = 'Následující pluginy byly úspěšně aktualizovány';
-$lang['update_none'] = 'Žádné aktualizace nenalezeny.';
-$lang['deleting'] = 'Probíhá mazání ...';
-$lang['deleted'] = 'Plugin %s smazán.';
-$lang['downloading'] = 'Stahuji ...';
-$lang['downloaded'] = 'Plugin %s nainstalován';
-$lang['downloads'] = 'Následující pluginy byly úspěšně instalovány:';
-$lang['download_none'] = 'Žádné pluginy nebyly nenalezeny, nebo se vyskytla nějaká chyba při
-stahování a instalaci.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Součásti';
-$lang['noinfo'] = 'Plugin nevrátil žádné informace. Může být poškozen nebo špatný.';
-$lang['name'] = 'Jméno:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Typ:';
-$lang['desc'] = 'Popis:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Nastala neznámá chyba.';
-$lang['error_download'] = 'Nelze stáhnout soubor s pluginem: %s';
-$lang['error_badurl'] = 'URL je zřejmě chybná - nelze z ní určit název souboru';
-$lang['error_dircreate'] = 'Nelze vytvořit dočasný adresář ke stažení dat';
-$lang['error_decompress'] = 'Správce pluginů nemůže rozbalit stažený soubor. Toto může být způsobeno chybou při stahování. Můžete se pokusit stahování opakovat. Chyba může být také v kompresním formátu souboru. V tom případě bude nutné stáhnout a nainstalovat plugin ručně.';
-$lang['error_copy'] = 'Došlo k chybě při instalaci pluginu <em>%s</em>. Je možné, že na disku není volné místo, nebo mohou být špatně nastavena přístupová práva. Pozor, mohlo dojít k částečné a tudíž chybné instalaci pluginu a tím může být ohrožena stabilita wiki.';
-$lang['error_delete'] = 'Došlo k chybě při pokusu o smazání pluginu <em>%s</em>. Nejspíše je chyba v nastavení přístupových práv k některým souborům či adresářům.';
-$lang['enabled'] = 'Plugin %s aktivován.';
-$lang['notenabled'] = 'Plugin %s nelze aktivovat, zkontrolujte práva k souborům.';
-$lang['disabled'] = 'Plugin %s deaktivován.';
-$lang['notdisabled'] = 'Plugin %s nelze deaktivovat, zkontrolujte práva k souborům.';
-$lang['packageinstalled'] = 'Balíček pluginů (%d plugin(ů): %s) úspěšně nainstalován.';
diff --git a/lib/plugins/plugin/lang/el/admin_plugin.txt b/lib/plugins/plugin/lang/el/admin_plugin.txt
deleted file mode 100644
index 8b292935d..000000000
--- a/lib/plugins/plugin/lang/el/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== Διαχείριση Επεκτάσεων ======
-
-Σε αυτή την σελίδα μπορείτε να διαχειριστείτε τις [[doku>plugins|επεκτάσεις]] του Dokuwiki σας. Για να μπορέσετε να εγκαταστήσετε νέες επεκτάσεις, ο αντίστοιχος φάκελος συστήματος θα πρέπει να είναι εγγράψιμος από τον χρήστη κάτω από τον οποίο εκτελείται η εφαρμογή του εξυπηρετητή σας.
-
-
diff --git a/lib/plugins/plugin/lang/el/lang.php b/lib/plugins/plugin/lang/el/lang.php
deleted file mode 100644
index f50e26c46..000000000
--- a/lib/plugins/plugin/lang/el/lang.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Christopher Smith <chris@jalakai.co.uk>
- * @author Thanos Massias <tm@thriasio.gr>
- * @author Αθανάσιος Νταής <homunculus@wana.gr>
- * @author Konstantinos Koryllos <koryllos@gmail.com>
- * @author George Petsagourakis <petsagouris@gmail.com>
- * @author Petros Vidalis <pvidalis@gmail.com>
- * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
- */
-$lang['menu'] = 'Διαχείριση Επεκτάσεων';
-$lang['download'] = 'Κατεβάστε και εγκαταστήστε μια νέα επέκταση (plugin)';
-$lang['manage'] = 'Εγκατεστημένες επεκτάσεις';
-$lang['btn_info'] = 'πληροφορίες';
-$lang['btn_update'] = 'ενημέρωση';
-$lang['btn_delete'] = 'διαγραφή';
-$lang['btn_settings'] = 'ρυθμίσεις';
-$lang['btn_download'] = 'Μεταφόρτωση';
-$lang['btn_enable'] = 'Αποθήκευση';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Εγκατεστημένη:';
-$lang['lastupdate'] = 'Τελευταία ενημέρωση:';
-$lang['source'] = 'Προέλευση:';
-$lang['unknown'] = 'άγνωστο';
-$lang['updating'] = 'Σε διαδικασία ενημέρωσης ...';
-$lang['updated'] = 'Η επέκταση %s ενημερώθηκε με επιτυχία';
-$lang['updates'] = 'Οι παρακάτω επεκτάσεις ενημερώθηκαν με επιτυχία:';
-$lang['update_none'] = 'Δεν βρέθηκαν ενημερώσεις.';
-$lang['deleting'] = 'Σε διαδικασία διαγραφής ...';
-$lang['deleted'] = 'Η επέκταση %s διαγράφηκε.';
-$lang['downloading'] = 'Σε διαδικασία μεταφόρτωσης ...';
-$lang['downloaded'] = 'Η επέκταση %s εγκαταστάθηκε με επιτυχία';
-$lang['downloads'] = 'Οι παρακάτω επεκτάσεις εγκαταστάθηκαν με επιτυχία:';
-$lang['download_none'] = 'Δεν βρέθηκαν επεκτάσεις ή εμφανίστηκε κάποιο πρόβλημα κατά την σχετική διαδικασία.';
-$lang['plugin'] = 'Επέκταση:';
-$lang['components'] = 'Συστατικά';
-$lang['noinfo'] = 'Αυτή η επέκταση δεν επέστρεψε κάποια πληροφορία - η επέκταση μπορεί να μην λειτουργεί κανονικά.';
-$lang['name'] = 'Όνομα:';
-$lang['date'] = 'Ημερομηνία:';
-$lang['type'] = 'Τύπος:';
-$lang['desc'] = 'Περιγραφή:';
-$lang['author'] = 'Συγγραφέας:';
-$lang['www'] = 'Διεύθυνση στο διαδίκτυο:';
-$lang['error'] = 'Εμφανίστηκε άγνωστο σφάλμα.';
-$lang['error_download'] = 'Δεν είναι δυνατή η μεταφόρτωση του αρχείου: %s';
-$lang['error_badurl'] = 'Το URL είναι μάλλον λανθασμένο - είναι αδύνατον να εξαχθεί το όνομα αρχείου από αυτό το URL';
-$lang['error_dircreate'] = 'Δεν είναι δυνατή η δημιουργία ενός προσωρινού φακέλου αποθήκευσης των μεταφορτώσεων';
-$lang['error_decompress'] = 'Δεν είναι δυνατή η αποσυμπίεση των μεταφορτώσεων. Αυτό μπορεί να οφείλεται σε μερική λήψη των μεταφορτώσεων, οπότε θα πρέπει να επαναλάβετε την διαδικασία ή το σύστημά σας δεν μπορεί να διαχειριστεί το συγκεκριμένο είδος συμπίεσης, οπότε θα πρέπει να εγκαταστήσετε την επέκταση χειροκίνητα.';
-$lang['error_copy'] = 'Εμφανίστηκε ένα σφάλμα αντιγραφής αρχείων κατά την διάρκεια εγκατάστασης της επέκτασης <em>%s</em>: ο δίσκος μπορεί να είναι γεμάτος ή να μην είναι σωστά ρυθμισμένα τα δικαιώματα πρόσβασης. Αυτό το γεγονός μπορεί να οδήγησε σε μερική εγκατάσταση της επέκτασης και άρα η DokuWiki εγκατάστασή σας να εμφανίσει προβλήματα σταθερότητας.';
-$lang['error_delete'] = 'Εμφανίστηκε ένα σφάλμα κατά την διαδικασία διαγραφής της επέκτασης <em>%s</em>. Η πιθανότερη αιτία είναι να μην είναι σωστά ρυθμισμένα τα δικαιώματα πρόσβασης.';
-$lang['enabled'] = 'Η επέκταση %s ενεργοποιήθηκε.';
-$lang['notenabled'] = 'Η επέκταση %s δεν μπορεί να ενεργοποιηθεί. Ελέγξτε τα δικαιώματα πρόσβασης.';
-$lang['disabled'] = 'Η επέκταση %s απενεργοποιήθηκε.';
-$lang['notdisabled'] = 'Η επέκταση %s δεν μπορεί να απενεργοποιηθεί. Ελέγξτε τα δικαιώματα πρόσβασης.';
-$lang['packageinstalled'] = 'Το πακέτο της επέκτασης (%d επέκταση(εις): %s) εγκαστήθηκε επιτυχημένα.';
diff --git a/lib/plugins/plugin/lang/fr/admin_plugin.txt b/lib/plugins/plugin/lang/fr/admin_plugin.txt
deleted file mode 100644
index b7beba25a..000000000
--- a/lib/plugins/plugin/lang/fr/admin_plugin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Gestion des extensions ======
-
-Cette page vous permet de gérer tout ce qui a trait aux [[doku>fr:plugins|extensions]] de DokuWiki. Pour pouvoir télécharger et installer un module, le répertoire « ''plugin'' » doit être accessible en écriture pour le serveur web.
-
diff --git a/lib/plugins/plugin/lang/fr/lang.php b/lib/plugins/plugin/lang/fr/lang.php
deleted file mode 100644
index 0592f3c7d..000000000
--- a/lib/plugins/plugin/lang/fr/lang.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Guy Brand <gb@unistra.fr>
- * @author Delassaux Julien <julien@delassaux.fr>
- * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
- * @author stephane.gully@gmail.com
- * @author Guillaume Turri <guillaume.turri@gmail.com>
- * @author Erik Pedersen <erik.pedersen@shaw.ca>
- * @author olivier duperray <duperray.olivier@laposte.net>
- * @author Vincent Feltz <psycho@feltzv.fr>
- * @author Philippe Bajoit <philippe.bajoit@gmail.com>
- * @author Florian Gaub <floriang@floriang.net>
- * @author Samuel Dorsaz samuel.dorsaz@novelion.net
- * @author Johan Guilbaud <guilbaud.johan@gmail.com>
- * @author schplurtz@laposte.net
- * @author skimpax@gmail.com
- * @author Yannick Aure <yannick.aure@gmail.com>
- * @author Olivier DUVAL <zorky00@gmail.com>
- * @author Anael Mobilia <contrib@anael.eu>
- * @author Bruno Veilleux <bruno.vey@gmail.com>
- */
-$lang['menu'] = 'Gestion des extensions';
-$lang['download'] = 'Télécharger et installer une nouvelle extension';
-$lang['manage'] = 'Extensions installées';
-$lang['btn_info'] = 'Info';
-$lang['btn_update'] = 'Mettre à jour';
-$lang['btn_delete'] = 'Supprimer';
-$lang['btn_settings'] = 'Paramètres';
-$lang['btn_download'] = 'Télécharger';
-$lang['btn_enable'] = 'Enregistrer';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Installé :';
-$lang['lastupdate'] = 'Dernière mise à jour :';
-$lang['source'] = 'Source :';
-$lang['unknown'] = 'inconnu';
-$lang['updating'] = 'Mise à jour…';
-$lang['updated'] = 'Extension %s mise à jour avec succès';
-$lang['updates'] = 'Les extensions suivantes ont été mises à jour avec succès';
-$lang['update_none'] = 'Aucune mise à jour n\'a été trouvée.';
-$lang['deleting'] = 'Suppression…';
-$lang['deleted'] = 'Extension %s supprimée.';
-$lang['downloading'] = 'Téléchargement…';
-$lang['downloaded'] = 'Extension %s installée avec succès';
-$lang['downloads'] = 'Les extensions suivantes ont été installées avec succès :';
-$lang['download_none'] = 'Aucune extension n\'a été trouvée, ou un problème inconnu est survenu durant le téléchargement et l\'installation.';
-$lang['plugin'] = 'Extension :';
-$lang['components'] = 'Composants';
-$lang['noinfo'] = 'Cette extension n\'a transmis aucune information, elle pourrait être invalide.';
-$lang['name'] = 'Nom :';
-$lang['date'] = 'Date :';
-$lang['type'] = 'Type :';
-$lang['desc'] = 'Description :';
-$lang['author'] = 'Auteur :';
-$lang['www'] = 'Site web :';
-$lang['error'] = 'Une erreur inconnue est survenue.';
-$lang['error_download'] = 'Impossible de télécharger le fichier de l\'extension : %s';
-$lang['error_badurl'] = 'URL suspecte : impossible de déterminer le nom du fichier à partir de l\'URL';
-$lang['error_dircreate'] = 'Impossible de créer le répertoire temporaire pour effectuer le téléchargement';
-$lang['error_decompress'] = 'Le gestionnaire d\'extensions a été incapable de décompresser le fichier téléchargé. Ceci peut être le résultat d\'un mauvais téléchargement, auquel cas vous devriez réessayer ; ou bien le format de compression est inconnu, auquel cas vous devez télécharger et installer l\'extension manuellement.';
-$lang['error_copy'] = 'Une erreur de copie est survenue lors de l\'installation des fichiers de l\'extension <em>%s</em> : le disque est peut-être plein ou les autorisations d\'accès sont incorrects. Il a pu en résulter une installation partielle de l\'extension et laisser votre installation du wiki instable.';
-$lang['error_delete'] = 'Une erreur est survenue lors de la suppression de l\'extension <em>%s</em>. La raison la plus probable est l\'insuffisance des autorisations sur les fichiers ou les répertoires.';
-$lang['enabled'] = 'Extension %s activée.';
-$lang['notenabled'] = 'L\'extension %s n\'a pas pu être activée, vérifiez les autorisations des fichiers.';
-$lang['disabled'] = 'Extension %s désactivée.';
-$lang['notdisabled'] = 'L\'extension %s n\'a pas pu être désactivée, vérifiez les autorisations des fichiers.';
-$lang['packageinstalled'] = 'Ensemble d\'extensions (%d extension(s): %s) installé avec succès.';
diff --git a/lib/plugins/plugin/lang/id/lang.php b/lib/plugins/plugin/lang/id/lang.php
deleted file mode 100644
index 2653b075e..000000000
--- a/lib/plugins/plugin/lang/id/lang.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Irwan Butar Butar <irwansah.putra@gmail.com>
- * @author Yustinus Waruwu <juswaruwu@gmail.com>
- */
-$lang['btn_info'] = 'Info';
-$lang['btn_update'] = 'Baharui';
-$lang['btn_delete'] = 'Hapus';
-$lang['btn_settings'] = 'Pengaturan';
-$lang['btn_download'] = 'Unduh';
-$lang['btn_enable'] = 'Simpan';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Instal';
-$lang['lastupdate'] = 'Pembaharuan terakhir:';
-$lang['source'] = 'Sumber:';
-$lang['unknown'] = 'Tidak kenal';
-$lang['updating'] = 'Terbaharui ...';
-$lang['update_none'] = 'Tidak ditemukan pembaharuan';
-$lang['deleting'] = 'Terhapus ...';
-$lang['deleted'] = 'Hapus Plugin %s.';
-$lang['downloading'] = 'Unduh ...';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Komponen';
-$lang['name'] = 'Nama:';
-$lang['date'] = 'Tanggal:';
-$lang['type'] = 'Tipe:';
-$lang['desc'] = 'Penjelasan:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
diff --git a/lib/plugins/plugin/lang/pl/admin_plugin.txt b/lib/plugins/plugin/lang/pl/admin_plugin.txt
deleted file mode 100644
index f01048198..000000000
--- a/lib/plugins/plugin/lang/pl/admin_plugin.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-====== Menadżer wtyczek ======
-
-Na tej stronie możesz zarządzać wszystkim co jest związane z [[doku>plugins|wtyczkami]] Dokuwiki. Aby móc ściągnąć i zainstalować wtyczkę, serwer WWW musi mieć prawo do zapisu w katalogu ''plugins''.
-
-
diff --git a/lib/plugins/plugin/lang/pl/lang.php b/lib/plugins/plugin/lang/pl/lang.php
deleted file mode 100644
index eae91f33e..000000000
--- a/lib/plugins/plugin/lang/pl/lang.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Michał Tkacz <mehow@autocom.pl>
- * @author Grzegorz Żur <grzegorz.zur@gmail.com>
- * @author Mariusz Kujawski <marinespl@gmail.com>
- * @author Maciej Kurczewski <pipijajko@gmail.com>
- * @author Sławomir Boczek <slawkens@gmail.com>
- * @author sleshek@wp.pl
- * @author Leszek Stachowski <shazarre@gmail.com>
- * @author maros <dobrimaros@yahoo.pl>
- * @author Grzegorz Widła <dzesdzes@gmail.com>
- * @author Łukasz Chmaj <teachmeter@gmail.com>
- * @author Begina Felicysym <begina.felicysym@wp.eu>
- * @author Aoi Karasu <aoikarasu@gmail.com>
- */
-$lang['menu'] = 'Menadżer wtyczek';
-$lang['download'] = 'Ściągnij i zainstaluj nową wtyczkę';
-$lang['manage'] = 'Zainstalowane Wtyczki';
-$lang['btn_info'] = 'Informacje';
-$lang['btn_update'] = 'Aktualizuj';
-$lang['btn_delete'] = 'Usuń';
-$lang['btn_settings'] = 'Ustawienia';
-$lang['btn_download'] = 'Pobierz';
-$lang['btn_enable'] = 'Zapisz';
-$lang['url'] = 'Adres URL';
-$lang['installed'] = 'Instalacja:';
-$lang['lastupdate'] = 'Ostatnio zaktualizowana:';
-$lang['source'] = 'Źródło:';
-$lang['unknown'] = 'nieznane';
-$lang['updating'] = 'Aktualizuję...';
-$lang['updated'] = 'Aktualizacja wtyczki %s pomyślnie ściągnięta';
-$lang['updates'] = 'Aktualizacje następujących wtyczek zostały pomyślnie ściągnięte';
-$lang['update_none'] = 'Nie znaleziono aktualizacji.';
-$lang['deleting'] = 'Usuwam...';
-$lang['deleted'] = 'Wtyczka %s usunięta.';
-$lang['downloading'] = 'Pobieram...';
-$lang['downloaded'] = 'Wtyczka %s pomyślnie zainstalowana';
-$lang['downloads'] = 'Następujące wtyczki zostały pomyślnie zainstalowane:';
-$lang['download_none'] = 'Nie znaleziono wtyczek lub wystąpił nieznany problem podczas ściągania i instalacji.';
-$lang['plugin'] = 'Wtyczka:';
-$lang['components'] = 'Składniki';
-$lang['noinfo'] = 'Ta wtyczka nie zwróciła żadnych informacji, może być niepoprawna.';
-$lang['name'] = 'Nazwa:';
-$lang['date'] = 'Data:';
-$lang['type'] = 'Typ:';
-$lang['desc'] = 'Opis:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'WWW:';
-$lang['error'] = 'Wystąpił nieznany błąd.';
-$lang['error_download'] = 'Nie powiodło się ściągnięcie pliku wtyczki: %s';
-$lang['error_badurl'] = 'Prawdopodobnie zły url - nie da się ustalić nazwy pliku na podstawie urla';
-$lang['error_dircreate'] = 'Nie powiodło się stworzenie tymczasowego katalogu na pobrane pliki';
-$lang['error_decompress'] = 'Menadżer wtyczek nie był w stanie rozpakować ściągniętego pliku. Może to być spowodowane przez nieudany transfer (w takim przypadku powinieneś spróbować ponownie) lub nieznany format kompresji (w takim przypadku będziesz musiał ściągnąć i zainstalować wtyczkę ręcznie).';
-$lang['error_copy'] = 'Wystąpił błąd podczas kopiowania pliku w trakcie instalacji wtyczki %s: być może dysk jest pełny lub prawa dostępu są niepoprawne. Efektem może być częściowo zainstalowana wtyczka co może spowodować niestabilność Twojej instalacji wiki.';
-$lang['error_delete'] = 'Wystąpił błąd przy próbie usunięcia wtyczki <em>%s</em>. Prawdopodobną przyczyną są niewystarczające uprawnienia do katalogu.';
-$lang['enabled'] = 'Wtyczka %s włączona.';
-$lang['notenabled'] = 'Nie udało się uruchomić wtyczki %s, sprawdź uprawnienia dostępu do plików.';
-$lang['disabled'] = 'Wtyczka %s wyłączona.';
-$lang['notdisabled'] = 'Nie udało się wyłączyć wtyczki %s, sprawdź uprawnienia dostępu do plików.';
-$lang['packageinstalled'] = 'Pakiet wtyczek (%d wtyczki: %s) zainstalowany pomyślnie.';
diff --git a/lib/plugins/plugin/lang/sk/admin_plugin.txt b/lib/plugins/plugin/lang/sk/admin_plugin.txt
deleted file mode 100644
index ad3ae7f58..000000000
--- a/lib/plugins/plugin/lang/sk/admin_plugin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Správa pluginov ======
-
-Na tejto stránke je možné spravovať [[doku>plugins|pluginy]] Dokuwiki. Aby bolo možné sťahovať a inštalovať pluginy, musí mať webový server prístup pre zápis do adresára //plugin//.
-
diff --git a/lib/plugins/plugin/lang/sk/lang.php b/lib/plugins/plugin/lang/sk/lang.php
deleted file mode 100644
index 35c07cf80..000000000
--- a/lib/plugins/plugin/lang/sk/lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Ondrej Végh <ov@vsieti.sk>
- * @author Michal Mesko <michal.mesko@gmail.com>
- * @author exusik@gmail.com
- * @author Martin Michalek <michalek.dev@gmail.com>
- */
-$lang['menu'] = 'Správa pluginov';
-$lang['download'] = 'Stiahnuť a nainštalovať plugin';
-$lang['manage'] = 'Nainštalované pluginy';
-$lang['btn_info'] = 'info';
-$lang['btn_update'] = 'aktualizovať';
-$lang['btn_delete'] = 'zmazať';
-$lang['btn_settings'] = 'nastavenia';
-$lang['btn_download'] = 'Stiahnuť';
-$lang['btn_enable'] = 'Uložiť';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Nainštalovaný:';
-$lang['lastupdate'] = 'Aktualizovaný:';
-$lang['source'] = 'Zdroj:';
-$lang['unknown'] = 'neznámy';
-$lang['updating'] = 'Aktualizuje sa ...';
-$lang['updated'] = 'Plugin %s bol úspešne aktualizovaný';
-$lang['updates'] = 'Nasledujúce pluginy bol úspešne aktualizované:';
-$lang['update_none'] = 'Neboli nájdené žiadne aktualizácie.';
-$lang['deleting'] = 'Vymazáva sa ...';
-$lang['deleted'] = 'Plugin %s bol zmazaný.';
-$lang['downloading'] = 'Sťahuje sa ...';
-$lang['downloaded'] = 'Plugin %s bol úspešne stiahnutý';
-$lang['downloads'] = 'Nasledujúce pluginy bol úspešne stiahnuté:';
-$lang['download_none'] = 'Neboli nájdené žiadne pluginy alebo nastal neznámy problém počas sťahovania a inštalácie pluginov.';
-$lang['plugin'] = 'Plugin:';
-$lang['components'] = 'Súčasti';
-$lang['noinfo'] = 'Tento plugin neobsahuje žiadne informácie, je možné, že je chybný.';
-$lang['name'] = 'názov:';
-$lang['date'] = 'Dátum:';
-$lang['type'] = 'Typ:';
-$lang['desc'] = 'Popis:';
-$lang['author'] = 'Autor:';
-$lang['www'] = 'Web:';
-$lang['error'] = 'Nastala neznáma chyba.';
-$lang['error_download'] = 'Nie je možné stiahnuť súbor pluginu: %s';
-$lang['error_badurl'] = 'Pravdepodobne zlá url adresa - nie je možné z nej určiť meno súboru';
-$lang['error_dircreate'] = 'Nie je možné vytvoriť dočasný adresár pre uloženie sťahovaného súboru';
-$lang['error_decompress'] = 'Správca pluginov nedokáže dekomprimovať stiahnutý súbor. Môže to byť dôsledok zlého stiahnutia, v tom prípade to skúste znovu, alebo môže ísť o neznámy formát súboru, v tom prípade musíte stiahnuť a nainštalovať plugin manuálne.';
-$lang['error_copy'] = 'Nastala chyba kopírovania súboru počas pokusu inštalovať súbory pluginu<em>%s</em>: disk môže byť plný alebo prístupové práva k súboru môžu byť nesprávne. Toto môže mať za následok čiastočne nainštalovanie pluginu a nestabilitu vašej DokuWiki.';
-$lang['error_delete'] = 'Nastala chyba počas pokusu o zmazanie pluginu <em>%s</em>. Najpravdepodobnejším dôvodom môžu byť nedostatočné prístupové práva pre súbor alebo adresár';
-$lang['enabled'] = 'Plugin %s aktivovaný.';
-$lang['notenabled'] = 'Plugin %s nemôže byť aktivovaný, skontrolujte prístupové práva.';
-$lang['disabled'] = 'Plugin %s deaktivovaný.';
-$lang['notdisabled'] = 'Plugin %s nemôže byť deaktivovaný, skontrolujte prístupové práva.';
-$lang['packageinstalled'] = 'Plugin package (%d plugin(s): %s) úspešne inštalovaný.';
diff --git a/lib/plugins/plugin/lang/sl/admin_plugin.txt b/lib/plugins/plugin/lang/sl/admin_plugin.txt
deleted file mode 100644
index 5fd02e1ba..000000000
--- a/lib/plugins/plugin/lang/sl/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Upravljanje vstavkov ======
-
-Na tej strani je mogoče spreminjati in prilagajati nastavitve DokuWiki [[doku>plugins|vstavkov]]. Za prejemanje in nameščanje vstavkov v ustrezne mape, morajo imeti te določena ustrezna dovoljenja za pisanje spletnega strežnika.
diff --git a/lib/plugins/plugin/lang/sl/lang.php b/lib/plugins/plugin/lang/sl/lang.php
deleted file mode 100644
index e205c57f5..000000000
--- a/lib/plugins/plugin/lang/sl/lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Dejan Levec <webphp@gmail.com>
- * @author Boštjan Seničar <senicar@gmail.com>
- * @author Gregor Skumavc (grega.skumavc@gmail.com)
- * @author Matej Urbančič (mateju@svn.gnome.org)
- */
-$lang['menu'] = 'Upravljanje vstavkov';
-$lang['download'] = 'Prejmi in namesti nov vstavek';
-$lang['manage'] = 'Nameščeni vstavki';
-$lang['btn_info'] = 'Podrobnosti';
-$lang['btn_update'] = 'Posodobi';
-$lang['btn_delete'] = 'Izbriši';
-$lang['btn_settings'] = 'Nastavitve';
-$lang['btn_download'] = 'Prejmi';
-$lang['btn_enable'] = 'Shrani';
-$lang['url'] = 'URL';
-$lang['installed'] = 'Nameščeno:';
-$lang['lastupdate'] = 'Nazadnje posodobljeno:';
-$lang['source'] = 'Vir:';
-$lang['unknown'] = 'neznano';
-$lang['updating'] = 'Posodabljanje ...';
-$lang['updated'] = 'Vstavek %s je uspešno posodobljen';
-$lang['updates'] = 'Navedeni vstavki so uspešno posodobljeni';
-$lang['update_none'] = 'Posodobitev ni mogoče najti.';
-$lang['deleting'] = 'Brisanje ...';
-$lang['deleted'] = 'Vstavek %s je izbrisan.';
-$lang['downloading'] = 'Prejemanje ...';
-$lang['downloaded'] = 'Vstavek %s je uspešno nameščen';
-$lang['downloads'] = 'Navedeni vstavki so uspešno nameščeni:';
-$lang['download_none'] = 'Vstavkov ni mogoče najti ali pa je prišlo do napake med prejemanjem in nameščanjem.';
-$lang['plugin'] = 'Vstavek:';
-$lang['components'] = 'Sestavni deli';
-$lang['noinfo'] = 'Vstavek nima vpisanih podrobnih podatkov, kar pomeni, da je morda neveljaven.';
-$lang['name'] = 'Ime:';
-$lang['date'] = 'Datum:';
-$lang['type'] = 'Vrsta:';
-$lang['desc'] = 'Opis:';
-$lang['author'] = 'Avtor:';
-$lang['www'] = 'Spletna stran:';
-$lang['error'] = 'Prišlo je do neznane napake.';
-$lang['error_download'] = 'Ni mogoče prejeti datoteke vstavka: %s';
-$lang['error_badurl'] = 'Napaka naslova URL - ni mogoče določiti imena datoteke iz naslova URL';
-$lang['error_dircreate'] = 'Ni mogoče ustvariti začasne mape za prejemanje';
-$lang['error_decompress'] = 'Z upravljalnikom vstavkov ni mogoče razširiti prejetega arhiva vstavka. Najverjetneje je prišlo do napake med prejemanjem datoteke ali pa zapis arhiva ni znan. Poskusite znova ali pa napako odpravite z ročnim nameščanjem vstavka.';
-$lang['error_copy'] = 'Prišlo je do napake med nameščanjem datotek vstavka <em>%s</em>: najverjetneje so težave s prostorom za namestitev ali pa ni ustreznih dovoljenj za nameščanje. Zaradi nepopolne namestitve lahko nastopijo težave v delovanju sistema Wiki.';
-$lang['error_delete'] = 'Prišlo je do napake med brisanjem vstavka <em>%s</em>: najverjetneje ni ustreznih dovoljenj za dostop do datoteke ali mape';
-$lang['enabled'] = 'Vstavek %s je omogočen.';
-$lang['notenabled'] = 'Vstavka %s ni mogoče omogočiti zaradi neustreznih dovoljen.';
-$lang['disabled'] = 'Vstavek %s je onemogočen.';
-$lang['notdisabled'] = 'Vstavka %s ni mogoče onemogočiti zaradi neustreznih dovoljen.';
-$lang['packageinstalled'] = 'Paket vstavka (%d vstavkov: %s) je uspešno nameščen.';
diff --git a/lib/plugins/plugin/lang/tr/admin_plugin.txt b/lib/plugins/plugin/lang/tr/admin_plugin.txt
deleted file mode 100644
index 956d701f6..000000000
--- a/lib/plugins/plugin/lang/tr/admin_plugin.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Eklenti Yönetimi ======
-
-Bu sayfada DokuWiki [[doku>plugins|eklentileri]] ile ilgili herşeyi düzenleyebilirsiniz. Eklenti kurup indirmek için, eklenti dizininin yazılabilir olması gerekmektedir.
diff --git a/lib/plugins/plugin/lang/tr/lang.php b/lib/plugins/plugin/lang/tr/lang.php
deleted file mode 100644
index a4feea8cd..000000000
--- a/lib/plugins/plugin/lang/tr/lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author Aydın Coşkuner <aydinweb@gmail.com>
- * @author Cihan Kahveci <kahvecicihan@gmail.com>
- * @author Yavuz Selim <yavuzselim@gmail.com>
- * @author Caleb Maclennan <caleb@alerque.com>
- * @author farukerdemoncel@gmail.com
- */
-$lang['menu'] = 'Eklenti Yönetimi';
-$lang['download'] = 'Yeni bir eklenti indirip kur';
-$lang['manage'] = 'Kurulmuş Eklentiler';
-$lang['btn_info'] = 'bilgi';
-$lang['btn_update'] = 'güncelle';
-$lang['btn_delete'] = 'sil';
-$lang['btn_settings'] = 'Ayarlar';
-$lang['btn_download'] = 'İndir';
-$lang['btn_enable'] = 'Kaydet';
-$lang['url'] = 'Web Adresi';
-$lang['installed'] = 'Kuruldu:';
-$lang['lastupdate'] = 'Son güncelleştirme:';
-$lang['source'] = 'Kaynak:';
-$lang['unknown'] = 'bilinmiyor';
-$lang['updating'] = 'Güncelleştiriyor ...';
-$lang['updated'] = '%s eklentisi başarıyla güncellendi';
-$lang['updates'] = 'Şu eklentiler başarıyla güncellendi';
-$lang['update_none'] = 'Yeni bir güncelleme bulunamadı.';
-$lang['deleting'] = 'Siliniyor ...';
-$lang['deleted'] = '%s eklentisi silindi.';
-$lang['downloading'] = 'İndiriyor ...';
-$lang['downloaded'] = '%s eklentisi başarıyla kuruldu';
-$lang['downloads'] = 'Şu eklentiler başarıyla kuruldu:';
-$lang['download_none'] = 'Eklenti bulunamadı veya indirirken/kurarken bilinmeyen bir hata oluştu.';
-$lang['plugin'] = 'Eklenti:';
-$lang['components'] = 'Parçalar';
-$lang['noinfo'] = 'Bu eklentinin bilgileri alınamadı, geçerli bir eklenti olmayabilir.';
-$lang['name'] = 'Ad:';
-$lang['date'] = 'Tarih:';
-$lang['type'] = 'Tür:';
-$lang['desc'] = 'Açıklama:';
-$lang['author'] = 'Yazar:';
-$lang['www'] = 'Web Adresi:';
-$lang['error'] = 'Bilinmeyen bir hata oluştu.';
-$lang['error_download'] = 'Şu eklenti indirilemedi: %s';
-$lang['error_badurl'] = 'Yanlış adres olabilir - verilen adresten dosya adı alınamadı';
-$lang['error_dircreate'] = 'İndirmek için geçici klasör oluşturulamadı';
-$lang['error_decompress'] = 'Eklenti yöneticisi indirilen sıkıştırılmış dosyayı açamadı. Bu yanlış indirmeden kaynaklanabilir (bu durumda tekrar denemelisiniz). Ya da indirilen dosyanın sıkıştırma biçimi bilinmemektedir (bu durumda eklentiyi indirerek kendiniz kurmalısınız).';
-$lang['error_copy'] = '<em>%s</em> eklentisi dosyalarını kurmaya çalışırken kopyalama hatası ortaya çıktı. Sürücü dolu olabilir veya yazma yetkisi bulunmuyor olabilir. Bunun sebebi tam kurulmamış bir eklentinin wiki kurulumunu bozması olabilir.';
-$lang['error_delete'] = '<em>%s</em> eklentisini silerken bir hata oluştu. Bu hata yetersiz dosya/klasör erişim yetkisinden kaynaklanabilir.';
-$lang['enabled'] = '%s eklentisi etkinleştirildi.';
-$lang['notenabled'] = '%s eklentisi etkinleştirilemedi, dosya yetkilerini kontrol edin.';
-$lang['disabled'] = '%s eklentisi devre dışı bırakıldı.';
-$lang['notdisabled'] = '%s eklentisi devre dışı bırakılamadı, dosya yetkilerini kontrol edin.';
diff --git a/lib/plugins/popularity/lang/hr/intro.txt b/lib/plugins/popularity/lang/hr/intro.txt
new file mode 100644
index 000000000..c7c3eba61
--- /dev/null
+++ b/lib/plugins/popularity/lang/hr/intro.txt
@@ -0,0 +1,7 @@
+====== Povratna informacija o popularnosti ======
+
+Ovaj [[doku>popularity|alat]] prikupla anonimne podatke o Vašem wiki i omogućava Vam da ih pošaljete DokuWiki razvojnom timu. To im pomaže da bolje razumiju kako korisnici koriste DokuWiki i osigurava kvalitetnije odluke o budućem razvoju u skladu s stvarnim korištenjem.
+
+Pozivamo Vas da ponavljate ovaj korak s vremena na vrijeme kako bi razvojni tim bio obaviješten o razvoju Vašeg wiki-a. Vaši novi podaci biti će identificirani putem anonimne oznake.
+
+Prikupljeni podatci sadrže informacije kako što je DokuWiki inačica, broj i veličina vaših stranica i datoteka, ugrađeni dodatci i PHP-u koji se koristi. Sirovi podatci koji će biti poslani su prikazani niže. Molim koristite gumb "Pošalji podatke" da bi ste poslali ove informacije.
diff --git a/lib/plugins/popularity/lang/hr/lang.php b/lib/plugins/popularity/lang/hr/lang.php
new file mode 100644
index 000000000..a8ea70728
--- /dev/null
+++ b/lib/plugins/popularity/lang/hr/lang.php
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['name'] = 'Povratna informacija o popularnosti (može proteći neko vrijeme dok se učita)';
+$lang['submit'] = 'Pošalji podatke';
+$lang['autosubmit'] = 'Šalji podatke automatski jednom mjesečno';
+$lang['submissionFailed'] = 'Podatci ne mogu biti poslani zbog slijedeće greške:';
+$lang['submitDirectly'] = 'Podatke možete poslati ručno potvrđivanjem forme u nastavku.';
+$lang['autosubmitError'] = 'Zadnje automatsko slanje nije uspješno zbog slijedeće greške:';
+$lang['lastSent'] = 'Podatci su poslani';
diff --git a/lib/plugins/popularity/lang/hr/submitted.txt b/lib/plugins/popularity/lang/hr/submitted.txt
new file mode 100644
index 000000000..8c841b3df
--- /dev/null
+++ b/lib/plugins/popularity/lang/hr/submitted.txt
@@ -0,0 +1,3 @@
+====== Povratna informacija o popularnosti ======
+
+Podatci su uspješno poslani. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/lv/lang.php b/lib/plugins/popularity/lang/lv/lang.php
index f0c940b6f..a8ef37f7a 100644
--- a/lib/plugins/popularity/lang/lv/lang.php
+++ b/lib/plugins/popularity/lang/lv/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Latvian, Lettish language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Aivars Miška <allefm@gmail.com>
*/
$lang['name'] = 'Popularitātes atsauksmes (ielāde var aizņemt kādu laiku)';
diff --git a/lib/plugins/popularity/lang/ru/intro.txt b/lib/plugins/popularity/lang/ru/intro.txt
index 52f5a0ae2..dbf0cc688 100644
--- a/lib/plugins/popularity/lang/ru/intro.txt
+++ b/lib/plugins/popularity/lang/ru/intro.txt
@@ -1,10 +1,10 @@
====== Сбор информации о популярности ======
-Этот [[doku>popularity|инструмент]] собирает анонимные данные о вашей вики и позволяет вам отправить их разработчикам «ДокуВики». Эти данные помогут им понять, как именно используется «ДокуВики», и удостовериться, что принимаемые проектные решения соответствуют жизненным реалиям.
+Этот [[doku>popularity|инструмент]] собирает анонимные данные о вашей вики и позволяет вам отправить их разработчикам «Докувики». Эти данные помогут им понять, как именно используется «Докувики», и удостовериться, что принимаемые проектные решения соответствуют жизненным реалиям.
Отправляйте данные время от времени для того, чтобы сообщать разработчикам о том, что ваша вики «подросла». Отправленные вами данные будут идентифицированы по анонимному ID.
-Собранные данные содержат такую информацию, как: версия «ДокуВики», количество и размер ваших страниц и файлов, установленные плагины, информацию об установленном PHP.
+Собранные данные содержат такую информацию, как: версия «Докувики», количество и размер ваших страниц и файлов, установленные плагины, информацию об установленном PHP.
Данные, которые будут отосланы, представлены ниже. Пожалуйста, используйте кнопку «Отправить данные», чтобы передать информацию.
diff --git a/lib/plugins/popularity/lang/th/lang.php b/lib/plugins/popularity/lang/th/lang.php
index 3ae8a7890..f6a736a06 100644
--- a/lib/plugins/popularity/lang/th/lang.php
+++ b/lib/plugins/popularity/lang/th/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Thai language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Komgrit Niyomrath <n.komgrit@gmail.com>
* @author Kittithat Arnontavilas mrtomyum@gmail.com
* @author Kittithat Arnontavilas <mrtomyum@gmail.com>
diff --git a/lib/plugins/popularity/plugin.info.txt b/lib/plugins/popularity/plugin.info.txt
index 4dc971d3a..eadfffaa0 100644
--- a/lib/plugins/popularity/plugin.info.txt
+++ b/lib/plugins/popularity/plugin.info.txt
@@ -1,7 +1,7 @@
base popularity
author Andreas Gohr
email andi@splitbrain.org
-date 2012-11-29
+date 2013-10-14
name Popularity Feedback Plugin
desc Send anonymous data about your wiki to the DokuWiki developers
url http://www.dokuwiki.org/plugin:popularity
diff --git a/lib/plugins/revert/admin.php b/lib/plugins/revert/admin.php
index 423d67449..88d8cd93d 100644
--- a/lib/plugins/revert/admin.php
+++ b/lib/plugins/revert/admin.php
@@ -83,7 +83,8 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
// find the last non-spammy revision
$data = '';
- $old = getRevisions($id, 0, $this->max_revs);
+ $pagelog = new PageChangeLog($id);
+ $old = $pagelog->getRevisions(0, $this->max_revs);
if(count($old)){
foreach($old as $REV){
$data = rawWiki($id,$REV);
diff --git a/lib/plugins/revert/lang/ar/lang.php b/lib/plugins/revert/lang/ar/lang.php
index 71f411c52..6262cc674 100644
--- a/lib/plugins/revert/lang/ar/lang.php
+++ b/lib/plugins/revert/lang/ar/lang.php
@@ -8,6 +8,7 @@
* @author uahello@gmail.com
* @author Ahmad Abd-Elghany <tolpa1@gmail.com>
* @author alhajr <alhajr300@gmail.com>
+ * @author Mohamed Belhsine <b.mohamed897@gmail.com>
*/
$lang['menu'] = 'مدير الاسترجاع';
$lang['filter'] = 'ابحث في الصفحات المتأذاة';
diff --git a/lib/plugins/revert/lang/cs/lang.php b/lib/plugins/revert/lang/cs/lang.php
index 69abaaade..619a9d929 100644
--- a/lib/plugins/revert/lang/cs/lang.php
+++ b/lib/plugins/revert/lang/cs/lang.php
@@ -16,6 +16,9 @@
* @author Zbyněk Křivka <krivka@fit.vutbr.cz>
* @author Gerrit Uitslag <klapinklapin@gmail.com>
* @author Petr Klíma <qaxi@seznam.cz>
+ * @author Radovan Buroň <radovan@buron.cz>
+ * @author Viktor Zavadil <vzavadil@newps.cz>
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
*/
$lang['menu'] = 'Obnova zaspamovaných stránek';
$lang['filter'] = 'Hledat zaspamované stránky';
diff --git a/lib/plugins/revert/lang/et/lang.php b/lib/plugins/revert/lang/et/lang.php
new file mode 100644
index 000000000..be8fb26c1
--- /dev/null
+++ b/lib/plugins/revert/lang/et/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Janar Leas <janar.leas@eesti.ee>
+ */
+$lang['note1'] = 'Teadmiseks: See otsing arvestab suurtähti';
+$lang['note2'] = 'Teadmiseks: Lehekülg ennistatakse viimasele järgule, milles ei sisaldu antud rämpsu sõne <i>%s</i>.';
diff --git a/lib/plugins/revert/lang/hr/intro.txt b/lib/plugins/revert/lang/hr/intro.txt
new file mode 100644
index 000000000..5d7a52dfb
--- /dev/null
+++ b/lib/plugins/revert/lang/hr/intro.txt
@@ -0,0 +1,3 @@
+====== Pomoćnik za povrat ======
+
+Pomaže vam pri povratku u slučaju spam napada. Da bi ste našli listu stranica koje su onečišćene spam-om unesite tekst za potragu (npr. spam URL), te potvrdite da su nađene stranice zaista spam i vratite na prethodno stanje. \ No newline at end of file
diff --git a/lib/plugins/revert/lang/hr/lang.php b/lib/plugins/revert/lang/hr/lang.php
new file mode 100644
index 000000000..594136902
--- /dev/null
+++ b/lib/plugins/revert/lang/hr/lang.php
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['menu'] = 'Pomoćnik za povrat stanja';
+$lang['filter'] = 'Potraži spam stranice';
+$lang['revert'] = 'Povrati odabrane stranice';
+$lang['reverted'] = '%s vraćena na izdanje %s';
+$lang['removed'] = '%s uklonjen';
+$lang['revstart'] = 'Proces povratka započeo. To može potrajati. Ako se dogodi istek vremena prije završetka, trebate povrat stranica vršiti u manjim grupama.';
+$lang['revstop'] = 'Proces povratka uspješno završio.';
+$lang['note1'] = 'Obavijest: ova pretraga razlikuje velika/mala slova';
+$lang['note2'] = 'Obavijest: stranica će biti vraćena na zadnje stanje koje ne sadrži traženi spam termin <i>%s</i>.';
diff --git a/lib/plugins/revert/lang/lv/lang.php b/lib/plugins/revert/lang/lv/lang.php
index 012d6cc4c..b87369233 100644
--- a/lib/plugins/revert/lang/lv/lang.php
+++ b/lib/plugins/revert/lang/lv/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Latvian, Lettish language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Aivars Miška <allefm@gmail.com>
*/
$lang['menu'] = 'Piemēsloto lapu atjaunotājs';
diff --git a/lib/plugins/revert/lang/nl/intro.txt b/lib/plugins/revert/lang/nl/intro.txt
index db8f5a06c..efa325839 100644
--- a/lib/plugins/revert/lang/nl/intro.txt
+++ b/lib/plugins/revert/lang/nl/intro.txt
@@ -1,3 +1,3 @@
-===== Herstelmanager =====
+===== Herstel =====
Deze pagina helpt u bij het herstellen van pagina's na een spam-aanval. Vul een zoekterm in (bijvoorbeeld een spam url) om een lijst te krijgen van bekladde pagina's, bevestig dat de pagina's inderdaad spam bevatten en herstel de wijzigingen.
diff --git a/lib/plugins/revert/lang/nl/lang.php b/lib/plugins/revert/lang/nl/lang.php
index ee8678e63..d04b96869 100644
--- a/lib/plugins/revert/lang/nl/lang.php
+++ b/lib/plugins/revert/lang/nl/lang.php
@@ -16,8 +16,9 @@
* @author Ricardo Guijt <ricardoguijt@gmail.com>
* @author Gerrit <klapinklapin@gmail.com>
* @author Remon <no@email.local>
+ * @author Rene <wllywlnt@yahoo.com>
*/
-$lang['menu'] = 'Herstelmanager';
+$lang['menu'] = 'Herstel';
$lang['filter'] = 'Zoek naar bekladde pagina\'s';
$lang['revert'] = 'Herstel geselecteerde pagina\'s';
$lang['reverted'] = '%s hersteld naar revisie %s';
diff --git a/lib/plugins/revert/lang/no/lang.php b/lib/plugins/revert/lang/no/lang.php
index c58300dc0..6806dcd93 100644
--- a/lib/plugins/revert/lang/no/lang.php
+++ b/lib/plugins/revert/lang/no/lang.php
@@ -18,6 +18,7 @@
* @author Egil Hansen <egil@rosetta.no>
* @author Thomas Juberg <Thomas.Juberg@Gmail.com>
* @author Boris <boris@newton-media.no>
+ * @author Christopher Schive <chschive@frisurf.no>
*/
$lang['menu'] = 'Tilbakestillingsbehandler';
$lang['filter'] = 'Søk etter søppelmeldinger';
diff --git a/lib/plugins/revert/lang/sv/lang.php b/lib/plugins/revert/lang/sv/lang.php
index e605a17d4..504332bae 100644
--- a/lib/plugins/revert/lang/sv/lang.php
+++ b/lib/plugins/revert/lang/sv/lang.php
@@ -19,6 +19,7 @@
* @author Henrik <henrik@idealis.se>
* @author Tor Härnqvist <tor.harnqvist@gmail.com>
* @author Hans Iwan Bratt <hibratt@gmail.com>
+ * @author Mikael Bergström <krank23@gmail.com>
*/
$lang['menu'] = 'Hantera återställningar';
$lang['filter'] = 'Sök efter spamsidor';
diff --git a/lib/plugins/revert/lang/th/lang.php b/lib/plugins/revert/lang/th/lang.php
index 86e4f9ca4..7b6217b7c 100644
--- a/lib/plugins/revert/lang/th/lang.php
+++ b/lib/plugins/revert/lang/th/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Thai language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Komgrit Niyomrath <n.komgrit@gmail.com>
* @author Kittithat Arnontavilas mrtomyum@gmail.com
* @author Arthit Suriyawongkul <arthit@gmail.com>
diff --git a/lib/plugins/revert/plugin.info.txt b/lib/plugins/revert/plugin.info.txt
index 482b68dc4..8d107dc32 100644
--- a/lib/plugins/revert/plugin.info.txt
+++ b/lib/plugins/revert/plugin.info.txt
@@ -1,7 +1,7 @@
base revert
author Andreas Gohr
email andi@splitbrain.org
-date 2013-03-09
+date 2013-11-21
name Revert Manager
desc Allows you to mass revert recent edits to remove Spam or vandalism
url http://dokuwiki.org/plugin:revert
diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index 7ab9c30e1..4a301f927 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -20,9 +20,12 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
* Syntax Type
*
* Needs to return one of the mode types defined in $PARSER_MODES in parser.php
+ *
+ * @return string
*/
function getType(){
trigger_error('getType() not implemented in '.get_class($this), E_USER_WARNING);
+ return '';
}
/**
@@ -31,6 +34,8 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
* Defines the mode types for other dokuwiki markup that maybe nested within the
* plugin's own markup. Needs to return an array of one or more of the mode types
* defined in $PARSER_MODES in parser.php
+ *
+ * @return array
*/
function getAllowedTypes() {
return array();
@@ -47,6 +52,7 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
* 'stack' - Special case. Plugin wraps other paragraphs.
*
* @see Doku_Handler_Block
+ * @return string
*/
function getPType(){
return 'normal';
@@ -63,10 +69,10 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
* @param string $match The text matched by the patterns
* @param int $state The lexer state for the match
* @param int $pos The character position of the matched text
- * @param Doku_Handler $handler Reference to the Doku_Handler object
+ * @param Doku_Handler $handler The Doku_Handler object
* @return array Return an array with all data you want to use in render
*/
- function handle($match, $state, $pos, Doku_Handler &$handler){
+ function handle($match, $state, $pos, Doku_Handler $handler){
trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
}
@@ -89,17 +95,20 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
* created
*
* @param $format string output format being rendered
- * @param $renderer Doku_Renderer reference to the current renderer object
+ * @param $renderer Doku_Renderer the current renderer object
* @param $data array data created by handler()
* @return boolean rendered correctly?
*/
- function render($format, Doku_Renderer &$renderer, $data) {
+ function render($format, Doku_Renderer $renderer, $data) {
trigger_error('render() not implemented in '.get_class($this), E_USER_WARNING);
}
/**
- * There should be no need to override these functions
+ * There should be no need to override this function
+ *
+ * @param string $mode
+ * @return bool
*/
function accepts($mode) {
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php
index 156037f09..b67d91b36 100644
--- a/lib/plugins/usermanager/admin.php
+++ b/lib/plugins/usermanager/admin.php
@@ -53,7 +53,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
}
// attempt to retrieve any import failures from the session
- if ($_SESSION['import_failures']){
+ if (!empty($_SESSION['import_failures'])){
$this->_import_failures = $_SESSION['import_failures'];
}
}
@@ -277,6 +277,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
protected function _htmlUserForm($cmd,$user='',$userdata=array(),$indent=0) {
global $conf;
global $ID;
+ global $lang;
$name = $mail = $groups = '';
$notes = array();
@@ -299,6 +300,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$this->_htmlInputField($cmd."_userid", "userid", $this->lang["user_id"], $user, $this->_auth->canDo("modLogin"), $indent+6);
$this->_htmlInputField($cmd."_userpass", "userpass", $this->lang["user_pass"], "", $this->_auth->canDo("modPass"), $indent+6);
+ $this->_htmlInputField($cmd."_userpass2", "userpass2", $lang["passchk"], "", $this->_auth->canDo("modPass"), $indent+6);
$this->_htmlInputField($cmd."_username", "username", $this->lang["user_name"], $name, $this->_auth->canDo("modName"), $indent+6);
$this->_htmlInputField($cmd."_usermail", "usermail", $this->lang["user_mail"], $mail, $this->_auth->canDo("modMail"), $indent+6);
$this->_htmlInputField($cmd."_usergroups","usergroups",$this->lang["user_groups"],$groups,$this->_auth->canDo("modGroups"),$indent+6);
@@ -358,7 +360,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$class = $cando ? '' : ' class="disabled"';
echo str_pad('',$indent);
- if($name == 'userpass'){
+ if($name == 'userpass' || $name == 'userpass2'){
$fieldtype = 'password';
$autocomp = 'autocomplete="off"';
}elseif($name == 'usermail'){
@@ -475,7 +477,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
if (!checkSecurityToken()) return false;
if (!$this->_auth->canDo('addUser')) return false;
- list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser();
+ list($user,$pass,$name,$mail,$grps,$passconfirm) = $this->_retrieveUser();
if (empty($user)) return false;
if ($this->_auth->canDo('modPass')){
@@ -486,6 +488,10 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
msg($this->lang['add_fail'], -1);
return false;
}
+ } else {
+ if (!$this->_verifyPassword($pass,$passconfirm)) {
+ return false;
+ }
}
} else {
if (!empty($pass)){
@@ -606,7 +612,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$oldinfo = $this->_auth->getUserData($olduser);
// get new user data subject to change
- list($newuser,$newpass,$newname,$newmail,$newgrps) = $this->_retrieveUser();
+ list($newuser,$newpass,$newname,$newmail,$newgrps,$passconfirm) = $this->_retrieveUser();
if (empty($newuser)) return false;
$changes = array();
@@ -625,27 +631,37 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$changes['user'] = $newuser;
}
}
-
- // generate password if left empty and notification is on
- if($INPUT->has('usernotify') && empty($newpass)){
- $newpass = auth_pwgen($olduser);
+ if ($this->_auth->canDo('modPass')) {
+ if ($newpass || $passconfirm) {
+ if ($this->_verifyPassword($newpass,$passconfirm)) {
+ $changes['pass'] = $newpass;
+ } else {
+ return false;
+ }
+ } else {
+ // no new password supplied, check if we need to generate one (or it stays unchanged)
+ if ($INPUT->has('usernotify')) {
+ $changes['pass'] = auth_pwgen($olduser);
+ }
+ }
}
- if (!empty($newpass) && $this->_auth->canDo('modPass'))
- $changes['pass'] = $newpass;
- if (!empty($newname) && $this->_auth->canDo('modName') && $newname != $oldinfo['name'])
- $changes['name'] = $newname;
- if (!empty($newmail) && $this->_auth->canDo('modMail') && $newmail != $oldinfo['mail'])
- $changes['mail'] = $newmail;
- if (!empty($newgrps) && $this->_auth->canDo('modGroups') && $newgrps != $oldinfo['grps'])
- $changes['grps'] = $newgrps;
+ if (!empty($newname) && $this->_auth->canDo('modName') && $newname != $oldinfo['name']) {
+ $changes['name'] = $newname;
+ }
+ if (!empty($newmail) && $this->_auth->canDo('modMail') && $newmail != $oldinfo['mail']) {
+ $changes['mail'] = $newmail;
+ }
+ if (!empty($newgrps) && $this->_auth->canDo('modGroups') && $newgrps != $oldinfo['grps']) {
+ $changes['grps'] = $newgrps;
+ }
if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) {
msg($this->lang['update_ok'],1);
- if ($INPUT->has('usernotify') && $newpass) {
+ if ($INPUT->has('usernotify') && !empty($changes['pass'])) {
$notify = empty($changes['user']) ? $olduser : $newuser;
- $this->_notifyUser($notify,$newpass);
+ $this->_notifyUser($notify,$changes['pass']);
}
// invalidate all sessions
@@ -686,6 +702,32 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
}
/**
+ * Verify password meets minimum requirements
+ * :TODO: extend to support password strength
+ *
+ * @param string $password candidate string for new password
+ * @param string $confirm repeated password for confirmation
+ * @return bool true if meets requirements, false otherwise
+ */
+ protected function _verifyPassword($password, $confirm) {
+ global $lang;
+
+ if (empty($password) && empty($confirm)) {
+ return false;
+ }
+
+ if ($password !== $confirm) {
+ msg($lang['regbadpass'], -1);
+ return false;
+ }
+
+ // :TODO: test password for required strength
+
+ // if we make it this far the password is good
+ return true;
+ }
+
+ /**
* Retrieve & clean user data from the form
*
* @param bool $clean whether the cleanUser method of the authentication backend is applied
@@ -701,6 +743,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$user[2] = $INPUT->str('username');
$user[3] = $INPUT->str('usermail');
$user[4] = explode(',',$INPUT->str('usergroups'));
+ $user[5] = $INPUT->str('userpass2'); // repeated password for confirmation
$user[4] = array_map('trim',$user[4]);
if($clean) $user[4] = array_map(array($auth,'cleanGroup'),$user[4]);
diff --git a/lib/plugins/usermanager/lang/bg/lang.php b/lib/plugins/usermanager/lang/bg/lang.php
index 9700385f8..aadf76512 100644
--- a/lib/plugins/usermanager/lang/bg/lang.php
+++ b/lib/plugins/usermanager/lang/bg/lang.php
@@ -41,10 +41,10 @@ $lang['next'] = 'напред';
$lang['last'] = 'край';
$lang['edit_usermissing'] = 'Избраният потребител не е намерен, въведеното потребителско име може да е изтрито или променено другаде.';
$lang['user_notify'] = 'Уведомяване на потребителя';
-$lang['note_notify'] = 'Ел. писмо се изпраща само ако бъде променена паролата на потребителя.';
+$lang['note_notify'] = 'Имейл се изпраща само ако бъде променена паролата на потребителя.';
$lang['note_group'] = 'Новите потребители биват добавяни към стандартната групата (%s) ако не е посочена друга.';
$lang['note_pass'] = 'Паролата ще бъде генерирана автоматично, ако оставите полето празно и функцията за уведомяване на потребителя е включена.';
$lang['add_ok'] = 'Добавянето на потребителя е успешно';
$lang['add_fail'] = 'Добавянето на потребителя се провали';
-$lang['notify_ok'] = 'Изпратено е осведомително ел. писмо';
-$lang['notify_fail'] = 'Изпращането на осведомително ел. писмо не е възможно';
+$lang['notify_ok'] = 'Изпратено е осведомителен имейл';
+$lang['notify_fail'] = 'Изпращането на осведомителен имейл не е възможно';
diff --git a/lib/plugins/usermanager/lang/cs/import.txt b/lib/plugins/usermanager/lang/cs/import.txt
index c264ae185..d665838f4 100644
--- a/lib/plugins/usermanager/lang/cs/import.txt
+++ b/lib/plugins/usermanager/lang/cs/import.txt
@@ -2,7 +2,7 @@
Vyžaduje CSV soubor s uživateli obsahující alespoň 4 sloupce.
Sloupce obsahují (v daném pořadí): user-id, celé jméno, emailovou adresu, seznam skupin.
-Položky CSV musí být odděleny čárkou (,) a řetězce umístěny v uvozovkách (""). Zpětné lomítko (\) lze použít pro escapování.
+Položky CSV musí být odděleny čárkou (,) a řetězce umístěny v uvozovkách (%%""%%). Zpětné lomítko (\) lze použít pro escapování.
Pro získání příkladu takového souboru využijte funkci "Exportovat uživatele" výše.
Záznamy s duplicitním user-id budou ignorovány.
diff --git a/lib/plugins/usermanager/lang/de-informal/import.txt b/lib/plugins/usermanager/lang/de-informal/import.txt
index 6fd6b8d8c..bc8887193 100644
--- a/lib/plugins/usermanager/lang/de-informal/import.txt
+++ b/lib/plugins/usermanager/lang/de-informal/import.txt
@@ -1,7 +1,7 @@
===== Massenimport von Benutzern =====
Dieser Import benötigt eine CSV-Datei mit mindestens vier Spalten. Diese Spalten müssen die folgenden Daten (in dieser Reihenfolge) enthalten: Benutzername, Name, E-Mailadresse und Gruppenzugehörigkeit.
-Die CSV-Felder müssen durch ein Komma (,) getrennt sein. Die Zeichenfolgen müssen von Anführungszeichen ("") umgeben sein. Ein Backslash (\) kann zum Maskieren benutzt werden.
+Die CSV-Felder müssen durch ein Komma (,) getrennt sein. Die Zeichenfolgen müssen von Anführungszeichen (%%""%%) umgeben sein. Ein Backslash (\) kann zum Maskieren benutzt werden.
Für eine Beispieldatei kannst Du die "Benutzer exportieren"-Funktion oben benutzen. Doppelte Benutzername werden ignoriert.
Ein Passwort wird generiert und den einzelnen, erfolgreich importierten Benutzern zugemailt. \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/de/import.txt b/lib/plugins/usermanager/lang/de/import.txt
index bf0d2922e..7faca3b9a 100644
--- a/lib/plugins/usermanager/lang/de/import.txt
+++ b/lib/plugins/usermanager/lang/de/import.txt
@@ -1,7 +1,7 @@
===== Benutzer-Massenimport =====
Um mehrere Benutzer gleichzeitig zu importieren, wird eine CSV-Datei mit den folgenden vier Spalten benötigt (In dieser Reihenfolge): Benutzer-ID, Voller Name, E-Mail-Adresse und Gruppen.
-Die CSV-Felder sind Kommata-separiert (,) und mit Anführungszeichen eingefasst ("). Mit Backslashes (\) können Sonderzeichen maskiert werden.
+Die CSV-Felder sind Kommata-separiert (,) und mit Anführungszeichen eingefasst (%%"%%). Mit Backslashes (\) können Sonderzeichen maskiert werden.
Ein Beispiel für eine gültige Datei kann mit der Benutzer-Export-Funktion oben generiert werden.
Doppelte Benutzer-IDs werden ignoriert.
diff --git a/lib/plugins/usermanager/lang/en/import.txt b/lib/plugins/usermanager/lang/en/import.txt
index 2087083e0..360a0689b 100644
--- a/lib/plugins/usermanager/lang/en/import.txt
+++ b/lib/plugins/usermanager/lang/en/import.txt
@@ -2,7 +2,7 @@
Requires a CSV file of users with at least four columns.
The columns must contain, in order: user-id, full name, email address and groups.
-The CSV fields should be separated by commas (,) and strings delimited by quotation marks (""). Backslash (\) can be used for escaping.
+The CSV fields should be separated by commas (,) and strings delimited by quotation marks (%%""%%). Backslash (\) can be used for escaping.
For an example of a suitable file, try the "Export Users" function above.
Duplicate user-ids will be ignored.
diff --git a/lib/plugins/usermanager/lang/en/lang.php b/lib/plugins/usermanager/lang/en/lang.php
index f87c77afb..b55ecc998 100644
--- a/lib/plugins/usermanager/lang/en/lang.php
+++ b/lib/plugins/usermanager/lang/en/lang.php
@@ -76,4 +76,3 @@ $lang['import_error_create'] = 'Unable to create the user';
$lang['import_notify_fail'] = 'Notification message could not be sent for imported user, %s with email %s.';
$lang['import_downloadfailures'] = 'Download Failures as CSV for correction';
-
diff --git a/lib/plugins/usermanager/lang/eo/import.txt b/lib/plugins/usermanager/lang/eo/import.txt
index 61c2c74de..09fbe6911 100644
--- a/lib/plugins/usermanager/lang/eo/import.txt
+++ b/lib/plugins/usermanager/lang/eo/import.txt
@@ -2,7 +2,7 @@
Tio ĉi postulas CSV-dosiero de uzantoj kun minimume kvar kolumnoj.
La kolumnoj devas enhavi, laŭorde: uzant-id, kompleta nomo, retadreso kaj grupoj.
-La CSV-kampoj devos esti apartitaj per komoj (,) kaj ĉenoj devas esti limigitaj per citiloj (""). Retroklino (\) povas esti uzata por eskapo.
+La CSV-kampoj devos esti apartitaj per komoj (,) kaj ĉenoj devas esti limigitaj per citiloj (%%""%%). Retroklino (\) povas esti uzata por eskapo.
Por ekzemplo de taŭga dosiero, provu la funkcion "Eksporti uzantojn" supre.
Duobligitaj uzant-id estos preteratentataj.
diff --git a/lib/plugins/usermanager/lang/es/lang.php b/lib/plugins/usermanager/lang/es/lang.php
index 26e4200e4..a557eacdd 100644
--- a/lib/plugins/usermanager/lang/es/lang.php
+++ b/lib/plugins/usermanager/lang/es/lang.php
@@ -24,6 +24,9 @@
* @author Ruben Figols <ruben.figols@gmail.com>
* @author Gerardo Zamudio <gerardo@gerardozamudio.net>
* @author Mercè López mercelz@gmail.com
+ * @author Antonio Bueno <atnbueno@gmail.com>
+ * @author Antonio Castilla <antoniocastilla@trazoide.com>
+ * @author Jonathan Hernández <me@jhalicea.com>
*/
$lang['menu'] = 'Administración de usuarios';
$lang['noauth'] = '(la autenticación de usuarios no está disponible)';
@@ -46,6 +49,11 @@ $lang['search'] = 'Buscar';
$lang['search_prompt'] = 'Realizar la búsqueda';
$lang['clear'] = 'Limpiar los filtros de la búsqueda';
$lang['filter'] = 'Filtrar';
+$lang['export_all'] = 'Exportar Todos los Usuarios (CSV)';
+$lang['export_filtered'] = 'Exportar Lista de Usuarios Filtrada (CSV)';
+$lang['import'] = 'Importar Nuevos Usuarios';
+$lang['line'] = 'Línea nº';
+$lang['error'] = 'Mensaje de error';
$lang['summary'] = 'Mostrando los usuarios %1$d-%2$d de %3$d encontrados. Cantidad total de usuarios %4$d.';
$lang['nonefound'] = 'No se encontraron usuarios que coincidan con los párametros de la búsqueda. Cantidad total de usuarios %d.';
$lang['delete_ok'] = '%d usuarios eliminados';
@@ -66,3 +74,10 @@ $lang['add_ok'] = 'El usuario fue creado exitosamente';
$lang['add_fail'] = 'Falló la creación del usuario';
$lang['notify_ok'] = 'Se envió la notificación por correo electrónico';
$lang['notify_fail'] = 'No se pudo enviar la notificación por correo electrónico';
+$lang['import_userlistcsv'] = 'Lista de usuarios (CSV): ';
+$lang['import_error_badmail'] = 'Dirección de correo electrónico incorrecta';
+$lang['import_error_upload'] = 'Error al importar. El archivo csv no se pudo cargar o está vacío.';
+$lang['import_error_readfail'] = 'Error al importar. No se puede leer el archivo subido.';
+$lang['import_error_create'] = 'No se puede crear el usuario';
+$lang['import_notify_fail'] = 'Mensaje de notificación no se ha podido enviar por el usuario importado,%s con el email %s.';
+$lang['import_downloadfailures'] = 'Descarga errores en archivo CSV para la corrección';
diff --git a/lib/plugins/usermanager/lang/et/lang.php b/lib/plugins/usermanager/lang/et/lang.php
index 2161df918..deb1e0be1 100644
--- a/lib/plugins/usermanager/lang/et/lang.php
+++ b/lib/plugins/usermanager/lang/et/lang.php
@@ -1,16 +1,18 @@
<?php
+
/**
- * Estonian language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author kristian.kankainen@kuu.la
* @author Rivo Zängov <eraser@eraser.ee>
+ * @author Janar Leas <janar.leas@eesti.ee>
*/
$lang['menu'] = 'Kasutajate haldamine';
$lang['user_id'] = 'Kasutaja';
$lang['user_pass'] = 'Parool';
$lang['user_name'] = 'Tegelik nimi';
$lang['user_mail'] = 'E-post';
-$lang['user_groups'] = 'Grupid';
+$lang['user_groups'] = 'Rühmad';
$lang['field'] = 'Väli';
$lang['value'] = 'Väärtus';
$lang['add'] = 'Lisa';
@@ -28,3 +30,4 @@ $lang['prev'] = 'eelmine';
$lang['next'] = 'järgmine';
$lang['last'] = 'viimased';
$lang['user_notify'] = 'Teavita kasutajat';
+$lang['note_group'] = 'Kui rühma pole määratletud, siis lisatakse uued kasutajad vaikimisi rühma (%s).';
diff --git a/lib/plugins/usermanager/lang/fa/lang.php b/lib/plugins/usermanager/lang/fa/lang.php
index a6a484411..bb2505a27 100644
--- a/lib/plugins/usermanager/lang/fa/lang.php
+++ b/lib/plugins/usermanager/lang/fa/lang.php
@@ -10,6 +10,8 @@
* @author Mohammad Reza Shoaei <shoaei@gmail.com>
* @author Milad DZand <M.DastanZand@gmail.com>
* @author AmirH Hassaneini <mytechmix@gmail.com>
+ * @author Hamid <zarrabi@sharif.edu>
+ * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
*/
$lang['menu'] = 'مدیریت کاربر';
$lang['noauth'] = '(معتبرسازی کاربر ممکن نیست)';
@@ -32,23 +34,25 @@ $lang['search'] = 'جستجو';
$lang['search_prompt'] = 'انجام جستجو';
$lang['clear'] = 'بازنویسی فیلترهای جستجو';
$lang['filter'] = 'فیلتر';
+$lang['import'] = 'ورود کاربران جدید';
+$lang['error'] = 'متن خطا';
$lang['summary'] = 'نمایش کاربر %1$d-%2$d از %3$d. در کل %4$d کاربر.';
$lang['nonefound'] = 'هیچ کاربری یافت نشد. در کل %d کاربر.';
$lang['delete_ok'] = '%d کاربر حذف شد';
$lang['delete_fail'] = 'حذف %d کاربر با مشکل مواجه شد.';
-$lang['update_ok'] = 'کاربر با موفقیت به روز رسانی شد.';
-$lang['update_fail'] = 'به روز رسانی کاربر با مشکل مواجه شد';
-$lang['update_exists'] = 'تغییر نام کاربری ممکن نیست، نام کاربری مورد نظر (%s) قبلن وجود داشته (مابقی تغییرات اعمال شده است)';
+$lang['update_ok'] = 'کاربر با موفقیت به‌روز شد.';
+$lang['update_fail'] = 'به‌روزرسانی کاربر با مشکل مواجه شد';
+$lang['update_exists'] = 'تغییر نام کاربری ممکن نیست، نام کاربری مورد نظر (%s) از قبل وجود داشته است (مابقی تغییرات اعمال خواهد شد).';
$lang['start'] = 'شروع';
$lang['prev'] = 'قبلی';
$lang['next'] = 'بعدی';
$lang['last'] = 'آخرین';
-$lang['edit_usermissing'] = 'کاربر انتخاب شده یافت نشد، نام کاربری مورد نظر در جایی دیگر حذف شده یا تغییر کرده.';
+$lang['edit_usermissing'] = 'کاربر انتخاب شده یافت نشد، نام کاربری موردنظر در جایی دیگر حذف شده یا تغییر کرده است.';
$lang['user_notify'] = 'آگاه کردن کاربر';
$lang['note_notify'] = 'ایمیلی برای آگاهی، فقط در زمان تغییر گذرواژه‌ ارسال می‌شود.';
$lang['note_group'] = 'اگر گروهی انتخاب نشود، کاربران جدید به گروه پیش‌فرض (%s) افزوده خواهند شد.';
$lang['note_pass'] = 'اگر فیلد گذرواژه خالی گذاشته شود، گذرواژه به طور خودکار تولید و ایمیلی برای کاربر ارسال خواهد شد.';
$lang['add_ok'] = 'کاربر با موفقیت افزوده شد';
$lang['add_fail'] = 'افزودن کاربر با مشکل مواجه شد';
-$lang['notify_ok'] = 'ایمیل آگاهی دهنده ارسال شد';
-$lang['notify_fail'] = 'ارسال ایمیل آگاهی دهنده با مشکل مواجه شد';
+$lang['notify_ok'] = 'ایمیل آگاهی‌دهنده ارسال شد';
+$lang['notify_fail'] = 'ارسال ایمیل آگاهی‌دهنده با مشکل مواجه شد';
diff --git a/lib/plugins/usermanager/lang/fr/import.txt b/lib/plugins/usermanager/lang/fr/import.txt
index 191bb8370..a1eb8f858 100644
--- a/lib/plugins/usermanager/lang/fr/import.txt
+++ b/lib/plugins/usermanager/lang/fr/import.txt
@@ -3,7 +3,7 @@
Requière un fichier [[wpfr>CSV]] d'utilisateurs avec un minimum de quatre colonnes.
Les colonnes doivent comporter, dans l'ordre : identifiant, nom complet, adresse de courriel et groupes.
-Les champs doivent être séparés par une virgule (,), les chaînes sont délimitées par des guillemets (""). On peut utiliser la balance inverse (\) comme caractère d'échappement.
+Les champs doivent être séparés par une virgule (,), les chaînes sont délimitées par des guillemets (%%""%%). On peut utiliser la balance inverse (\) comme caractère d'échappement.
Pour obtenir un exemple de fichier acceptable, essayer la fonction "Exporter les utilisateurs" ci dessus.
Les identifiants dupliqués seront ignorés.
diff --git a/lib/plugins/usermanager/lang/hr/add.txt b/lib/plugins/usermanager/lang/hr/add.txt
new file mode 100644
index 000000000..f7c866495
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/add.txt
@@ -0,0 +1 @@
+===== Dodaj korisnika =====
diff --git a/lib/plugins/usermanager/lang/hr/delete.txt b/lib/plugins/usermanager/lang/hr/delete.txt
new file mode 100644
index 000000000..072185fc1
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/delete.txt
@@ -0,0 +1 @@
+===== Ukloni korisnika =====
diff --git a/lib/plugins/usermanager/lang/hr/edit.txt b/lib/plugins/usermanager/lang/hr/edit.txt
new file mode 100644
index 000000000..752fd81f3
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/edit.txt
@@ -0,0 +1 @@
+===== Uredi korisnika =====
diff --git a/lib/plugins/usermanager/lang/hr/import.txt b/lib/plugins/usermanager/lang/hr/import.txt
new file mode 100644
index 000000000..85ea92723
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/import.txt
@@ -0,0 +1,9 @@
+===== Masovni unos korisnika =====
+
+Zahtjeva CSV datoteku popisa korisnika s minimalno četiri kolone.
+Kolone moraju sadržavati redom: korisničko ime, puno ime, adresu e-pošte i grupe.
+Polja trebaju biti odvojena zarezom (,) a znakovni nizovi s dvostrukim navodnicima (%%""%%). Obrnuta kosa crta (\) koristi se za specijalne kodove (escaping).
+Koristite "Izvoz korisnika" funkciju da bi ste dobili primjer odgovarajuće datoteke.
+Duplikati korisničkih imena biti će ignorirani.
+
+Uspješno kreiranim korisnicima lozinka će biti generirana i poslana e-poštom. \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/hr/intro.txt b/lib/plugins/usermanager/lang/hr/intro.txt
new file mode 100644
index 000000000..0f156579b
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/intro.txt
@@ -0,0 +1 @@
+====== Upravitelj korisnicima ====== \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/hr/lang.php b/lib/plugins/usermanager/lang/hr/lang.php
new file mode 100644
index 000000000..80613ed6f
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/lang.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['menu'] = 'Upravitelj korisnicima';
+$lang['noauth'] = '(korisnička prijava nije dostupna)';
+$lang['nosupport'] = '(upravljanje korisnikom nije podržano)';
+$lang['badauth'] = 'pogrešan mehanizam prijave';
+$lang['user_id'] = 'Korisnik';
+$lang['user_pass'] = 'Lozinka';
+$lang['user_name'] = 'Stvarno ime';
+$lang['user_mail'] = 'E-pošta';
+$lang['user_groups'] = 'Grupe';
+$lang['field'] = 'Polje';
+$lang['value'] = 'Vrijednost';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Obriši';
+$lang['delete_selected'] = 'Obriši odabrano';
+$lang['edit'] = 'Uredi';
+$lang['edit_prompt'] = 'Uredi ovog korisnika';
+$lang['modify'] = 'Snimi promjene';
+$lang['search'] = 'Potraži';
+$lang['search_prompt'] = 'Izvedi potragu';
+$lang['clear'] = 'Obriši filtar potrage';
+$lang['filter'] = 'Filtar';
+$lang['export_all'] = 'Izvezi sve korisnike (CSV)';
+$lang['export_filtered'] = 'Izvezi filtriranu listu korisnika (CSV)';
+$lang['import'] = 'Unos novih korisnika';
+$lang['line'] = 'Linija br.';
+$lang['error'] = 'Poruka o grešci';
+$lang['summary'] = 'Prikaz korisnika %1$d-%2$d od %3$d nađenih. Ukupno %4$d korisnika.';
+$lang['nonefound'] = 'Nema korisnika koji odgovaraju filtru.Ukupno %d korisnika.';
+$lang['delete_ok'] = '%d korisnik obrisano';
+$lang['delete_fail'] = '%d neuspjelih brisanja.';
+$lang['update_ok'] = 'Korisnik uspješno izmijenjen';
+$lang['update_fail'] = 'Neuspjela izmjena korisnika';
+$lang['update_exists'] = 'Promjena korisničkog imena neuspješna, traženo ime (%s) već postoji (ostale izmjene biti će primijenjene).';
+$lang['start'] = 'početni';
+$lang['prev'] = 'prethodni';
+$lang['next'] = 'slijedeći';
+$lang['last'] = 'zadnji';
+$lang['edit_usermissing'] = 'Odabrani korisnik nije nađen, traženo korisničko ime vjerojatno je obrisano i promijenjeno negdje drugdje.';
+$lang['user_notify'] = 'Obavijesti korisnika';
+$lang['note_notify'] = 'Obavijest korisniku biti će poslana samo ako je upisana nova lozinka.';
+$lang['note_group'] = 'Novi korisnik biti će dodijeljen u podrazumijevanu grupu (%s) ako grupa nije specificirana.';
+$lang['note_pass'] = 'Lozinka će biti generirana ako se polje ostavi prazno i obavješćivanje korisnika je omogućeno.';
+$lang['add_ok'] = 'Korisnik uspješno dodan';
+$lang['add_fail'] = 'Neuspješno dodavanje korisnika';
+$lang['notify_ok'] = 'Obavijest korisniku poslana';
+$lang['notify_fail'] = 'Obavijest korisniku ne može biti poslana';
+$lang['import_userlistcsv'] = 'Datoteka s popisom korisnika (CSV):';
+$lang['import_header'] = 'Zadnje greške pri uvozu';
+$lang['import_success_count'] = 'Uvoz korisnika: %d korisnika nađeno, %d uspješno uvezeno';
+$lang['import_failure_count'] = 'Uvoz korisnika: %d neuspješno. Greške su navedene niže.';
+$lang['import_error_fields'] = 'Nedovoljan broj polja, nađeno %d, potrebno 4.';
+$lang['import_error_baduserid'] = 'Nedostaje korisničko ime';
+$lang['import_error_badname'] = 'Krivo ime';
+$lang['import_error_badmail'] = 'Kriva adresa e-pošte';
+$lang['import_error_upload'] = 'Uvoz neuspješan. CSV datoteka ne može biti učitana ili je prazna.';
+$lang['import_error_readfail'] = 'Uvoz neuspješan. Ne mogu pročitati učitanu datoteku.';
+$lang['import_error_create'] = 'Ne mogu kreirati korisnika';
+$lang['import_notify_fail'] = 'Obavijest uvezenom korisniku %s nije moguće poslati na adresu e-pošte %s.';
+$lang['import_downloadfailures'] = 'Preuzmi greške kao CSV za ispravak';
diff --git a/lib/plugins/usermanager/lang/hr/list.txt b/lib/plugins/usermanager/lang/hr/list.txt
new file mode 100644
index 000000000..50b1d2513
--- /dev/null
+++ b/lib/plugins/usermanager/lang/hr/list.txt
@@ -0,0 +1 @@
+===== Lista korisnika ===== \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/hu/import.txt b/lib/plugins/usermanager/lang/hu/import.txt
index f204f6a1e..a2db03300 100644
--- a/lib/plugins/usermanager/lang/hu/import.txt
+++ b/lib/plugins/usermanager/lang/hu/import.txt
@@ -2,8 +2,8 @@
Szükséges egy legalább 4 oszlopot tartalmazó, felhasználókat tartalmazó fájl.
Az oszlopok kötelező tartalma, sorrendben: felhasználói azonosító, teljes név, e-mailcím és csoport.
-A CSV-mezőket vesszővel (,) kell elválasztani, a szövegeket idézőjelek ("") közé kell tenni. A fordított törtvonal (\) használható feloldójelnek.
-Megfelelő mintafájl megtekintéséhez próbáld ki a "Felhasználók exportálása" funkciót fentebb.
+A CSV-mezőket vesszővel (,) kell elválasztani, a szövegeket idézőjelek (%%""%%) közé kell tenni. A fordított törtvonal (\) használható feloldójelnek.
+Megfelelő mintafájl megtekintéséhez próbáld ki a "Felhasználók exportálása" funkciót fentebb.
A duplán szereplő felhasználói azonosítók kihagyásra kerülnek.
Minden sikeresen importált felhasználó számára jelszó készül, amelyet e-mailben kézhez kap. \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/it/lang.php b/lib/plugins/usermanager/lang/it/lang.php
index 6c6789442..ffded3481 100644
--- a/lib/plugins/usermanager/lang/it/lang.php
+++ b/lib/plugins/usermanager/lang/it/lang.php
@@ -16,6 +16,8 @@
* @author Matteo Pasotti <matteo@xquiet.eu>
* @author snarchio@gmail.com
* @author Claudio Lanconelli <lancos@libero.it>
+ * @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Fabio <fabioslurp@yahoo.it>
*/
$lang['menu'] = 'Gestione Utenti';
$lang['noauth'] = '(autenticazione non disponibile)';
@@ -40,6 +42,9 @@ $lang['clear'] = 'Azzera filtro di ricerca';
$lang['filter'] = 'Filtro';
$lang['export_all'] = 'Esporta tutti gli utenti (CSV)';
$lang['export_filtered'] = 'Esporta elenco utenti filtrati (CSV)';
+$lang['import'] = 'Importa nuovi utenti';
+$lang['line'] = 'Linea numero';
+$lang['error'] = 'Messaggio di errore';
$lang['summary'] = 'Visualizzazione utenti %1$d-%2$d di %3$d trovati. %4$d utenti totali.';
$lang['nonefound'] = 'Nessun utente trovato. %d utenti totali.';
$lang['delete_ok'] = '%d utenti eliminati';
@@ -60,3 +65,12 @@ $lang['add_ok'] = 'Utente aggiunto correttamente';
$lang['add_fail'] = 'Aggiunta utente fallita';
$lang['notify_ok'] = 'Email di notifica inviata';
$lang['notify_fail'] = 'L\'email di notifica non può essere inviata';
+$lang['import_success_count'] = 'Importazione utenti: %d utenti trovati, %d utenti importati con successo.';
+$lang['import_failure_count'] = 'Importazione utenti: %d falliti. Errori riportati qui sotto.';
+$lang['import_error_fields'] = 'Campi insufficienti, trovati %d, richiesti 4.';
+$lang['import_error_baduserid'] = 'User-id non trovato';
+$lang['import_error_badname'] = 'Nome errato';
+$lang['import_error_badmail'] = 'Indirizzo email errato';
+$lang['import_error_upload'] = 'Importazione fallita. Il file CSV non può essere caricato, o è vuoto.';
+$lang['import_error_readfail'] = 'Importazione in errore. Impossibile leggere i file caricati.';
+$lang['import_error_create'] = 'Impossibile creare l\'utente';
diff --git a/lib/plugins/usermanager/lang/ja/import.txt b/lib/plugins/usermanager/lang/ja/import.txt
index 751e515ac..6af87c263 100644
--- a/lib/plugins/usermanager/lang/ja/import.txt
+++ b/lib/plugins/usermanager/lang/ja/import.txt
@@ -2,7 +2,7 @@
少なくとも4列のユーザーCSVファイルが必要です。
列の順序:ユーザーID、氏名、電子メールアドレス、グループ。
-CSVフィールドはカンマ(,)区切り、文字列は引用符("")区切りです。
+CSVフィールドはカンマ(,)区切り、文字列は引用符(%%""%%)区切りです。
エスケープにバックスラッシュ(\)を使用できます。
適切なファイル例は、上記の"エクスポートユーザー"機能で試して下さい。
重複するユーザーIDは無視されます。
diff --git a/lib/plugins/usermanager/lang/ko/edit.txt b/lib/plugins/usermanager/lang/ko/edit.txt
index a938c5b2e..0b35cd7d5 100644
--- a/lib/plugins/usermanager/lang/ko/edit.txt
+++ b/lib/plugins/usermanager/lang/ko/edit.txt
@@ -1 +1 @@
-===== 사용자 정보 편집 ===== \ No newline at end of file
+===== 사용자 편집 ===== \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/ko/import.txt b/lib/plugins/usermanager/lang/ko/import.txt
index 44fe392d0..6d077dfb8 100644
--- a/lib/plugins/usermanager/lang/ko/import.txt
+++ b/lib/plugins/usermanager/lang/ko/import.txt
@@ -2,7 +2,7 @@
적어도 열 네 개가 있는 사용자의 CSV 파일이 필요합니다.
열은 다음과 같이 포함해야 합니다: 사용자 id, 실명, 이메일 주소와 그룹.
-CSV 필드는 인용 부호("")로 쉼표(,)와 구분된 문자열로 구분해야 합니다. 백슬래시(\)는 탈출에 사용할 수 있습니다.
+CSV 필드는 인용 부호(%%""%%)로 쉼표(,)와 구분된 문자열로 구분해야 합니다. 백슬래시(\)는 탈출에 사용할 수 있습니다.
적절한 파일의 예를 들어, 위의 "사용자 목록 내보내기"를 시도하세요.
중복된 사용자 id는 무시됩니다.
diff --git a/lib/plugins/usermanager/lang/ko/intro.txt b/lib/plugins/usermanager/lang/ko/intro.txt
index d75680c71..2ce85f1a2 100644
--- a/lib/plugins/usermanager/lang/ko/intro.txt
+++ b/lib/plugins/usermanager/lang/ko/intro.txt
@@ -1 +1 @@
-====== 사용자 관리 ====== \ No newline at end of file
+====== 사용자 관리자 ====== \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/ko/lang.php b/lib/plugins/usermanager/lang/ko/lang.php
index ac129c95e..70e3d94f0 100644
--- a/lib/plugins/usermanager/lang/ko/lang.php
+++ b/lib/plugins/usermanager/lang/ko/lang.php
@@ -44,7 +44,7 @@ $lang['delete_ok'] = '사용자 %d명이 삭제되었습니다';
$lang['delete_fail'] = '사용자 %d명을 삭제하는 데 실패했습니다.';
$lang['update_ok'] = '사용자 정보를 성공적으로 바꾸었습니다';
$lang['update_fail'] = '사용자 정보를 바꾸는 데 실패했습니다';
-$lang['update_exists'] = '사용자 이름을 바꾸는 데 실패했습니다. 사용자 이름(%s)이 이미 존재합니다. (다른 항목의 바뀜은 적용됩니다.)';
+$lang['update_exists'] = '사용자 이름을 바꾸는 데 실패했습니다. 사용자 이름(%s)이 이미 존재합니다. (다른 항목의 바뀜은 적용됩니다)';
$lang['start'] = '시작';
$lang['prev'] = '이전';
$lang['next'] = '다음';
diff --git a/lib/plugins/usermanager/lang/lv/import.txt b/lib/plugins/usermanager/lang/lv/import.txt
new file mode 100644
index 000000000..0006ae850
--- /dev/null
+++ b/lib/plugins/usermanager/lang/lv/import.txt
@@ -0,0 +1,9 @@
+===== Masveida lietotāju imports =====
+
+Vajag CSV failu ar vismaz četrām lietotāju datu kolonām šādā secībā: identifikators, pilns vārds, e-pasta adrese un grupas.
+
+CSV lauki jāatdala ar komatiem (,) un virknes — ar pēdiņām (%%""%%). Backslash (\) can be used for escaping.
+Derīga faila paraugam izmantojiem augtāk redzamo "Lietotāju eksportu".
+Dublētus identifikatorus ignorēs.
+
+Paroli katram veiksmīgi importētajam lietotājam izveidos un nosūtīs pa e-pastu. \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/lv/lang.php b/lib/plugins/usermanager/lang/lv/lang.php
index 620678ff5..4944da31e 100644
--- a/lib/plugins/usermanager/lang/lv/lang.php
+++ b/lib/plugins/usermanager/lang/lv/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Latvian language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Aivars Miška <allefm@gmail.lv>
* @author Aivars Miška <allefm@gmail.com>
*/
diff --git a/lib/plugins/usermanager/lang/nl/import.txt b/lib/plugins/usermanager/lang/nl/import.txt
index 267891098..3a9320ecf 100644
--- a/lib/plugins/usermanager/lang/nl/import.txt
+++ b/lib/plugins/usermanager/lang/nl/import.txt
@@ -1,7 +1,7 @@
===== Massa-import van gebruikers =====
Hiervoor is een CSV-bestand nodig van de gebruikers met minstens vier kolommen. De kolommen moeten bevatten, in deze volgorde: gebruikers-id, complete naam, e-mailadres en groepen.
-Het CSV-velden moeten worden gescheiden met komma's (,) en de teksten moeten worden omringd met dubbele aanhalingstekens (""). Backslash (\) kan worden gebruikt om te escapen.
+Het CSV-velden moeten worden gescheiden met komma's (,) en de teksten moeten worden omringd met dubbele aanhalingstekens (%%""%%). Backslash (\) kan worden gebruikt om te escapen.
Voor een voorbeeld van een werkend bestand, probeer de "Exporteer Gebruikers" functie hierboven.
Dubbele gebruikers-id's zullen worden genegeerd.
diff --git a/lib/plugins/usermanager/lang/nl/intro.txt b/lib/plugins/usermanager/lang/nl/intro.txt
index 7df09dbab..819e64d7d 100644
--- a/lib/plugins/usermanager/lang/nl/intro.txt
+++ b/lib/plugins/usermanager/lang/nl/intro.txt
@@ -1 +1 @@
-==== Gebruikersmanager ===== \ No newline at end of file
+====== Gebruikersbeheer ======
diff --git a/lib/plugins/usermanager/lang/nl/lang.php b/lib/plugins/usermanager/lang/nl/lang.php
index 5cebede89..3f9902e14 100644
--- a/lib/plugins/usermanager/lang/nl/lang.php
+++ b/lib/plugins/usermanager/lang/nl/lang.php
@@ -15,8 +15,9 @@
* @author Jeroen
* @author Ricardo Guijt <ricardoguijt@gmail.com>
* @author Gerrit Uitslag <klapinklapin@gmail.com>
+ * @author Rene <wllywlnt@yahoo.com>
*/
-$lang['menu'] = 'Gebruikersmanager';
+$lang['menu'] = 'Gebruikersbeheer';
$lang['noauth'] = '(gebruikersauthenticatie niet beschikbaar)';
$lang['nosupport'] = '(gebruikersbeheer niet ondersteund)';
$lang['badauth'] = 'ongeldige authenticatiemethode';
diff --git a/lib/plugins/usermanager/lang/ru/import.txt b/lib/plugins/usermanager/lang/ru/import.txt
index 3a25f34ce..f2049dd0c 100644
--- a/lib/plugins/usermanager/lang/ru/import.txt
+++ b/lib/plugins/usermanager/lang/ru/import.txt
@@ -1,9 +1,9 @@
===== Импорт нескольких пользователей =====
Потребуется список пользователей в файле формата CSV, состоящий из 4 столбцов.
-Столбцы должны быть заполнены следующим образом: user-id, полное имя, эл. почта, группы.
-Поля CSV должны быть отделены запятой (,), а строки должны быть заключены в кавычки (""). Обратный слэш используется как прерывание.
-В качестве примера можете взять список пользователей, экспортированный через «Экспорт пользователей».
+Столбцы должны быть заполнены следующим образом: user-id, полное имя, эл. почта, группы.
+Поля CSV должны быть отделены запятой (,), а строки должны быть заключены в кавычки (%%""%%). Обратный слэш используется как прерывание.
+В качестве примера можете взять список пользователей, экспортированный через «Экспорт пользователей».
Повторяющиеся идентификаторы user-id будут игнорироваться.
-Пароль доступа будет сгенерирован и отправлен по почте удачно импортированному пользователю. \ No newline at end of file
+Пароль доступа будет сгенерирован и отправлен по почте удачно импортированному пользователю. \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/ru/lang.php b/lib/plugins/usermanager/lang/ru/lang.php
index 3102ac32a..8bbfa639c 100644
--- a/lib/plugins/usermanager/lang/ru/lang.php
+++ b/lib/plugins/usermanager/lang/ru/lang.php
@@ -19,6 +19,8 @@
* @author Johnny Utah <pcpa@cyberpunk.su>
* @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
* @author Pavel <ivanovtsk@mail.ru>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Igor Degraf <igordegraf@gmail.com>
*/
$lang['menu'] = 'Управление пользователями';
$lang['noauth'] = '(авторизация пользователей недоступна)';
@@ -72,7 +74,8 @@ $lang['import_error_fields'] = 'Не все поля заполнены. На
$lang['import_error_baduserid'] = 'Отсутствует идентификатор пользователя';
$lang['import_error_badname'] = 'Имя не годится';
$lang['import_error_badmail'] = 'Адрес электронной почты не годится';
-$lang['import_error_upload'] = 'Импорт не удался. CSV файл не загружен или пуст.';
+$lang['import_error_upload'] = 'Импорт не удался. CSV-файл не загружен или пуст.';
$lang['import_error_readfail'] = 'Импорт не удался. Невозможно прочесть загруженный файл.';
$lang['import_error_create'] = 'Невозможно создать пользователя';
$lang['import_notify_fail'] = 'Оповещение не может быть отправлено импортированному пользователю %s по электронной почте %s.';
+$lang['import_downloadfailures'] = 'Скачать Ошибки в формате CSV для исправления';
diff --git a/lib/plugins/usermanager/lang/sk/import.txt b/lib/plugins/usermanager/lang/sk/import.txt
index 91fa3e370..2207f6162 100644
--- a/lib/plugins/usermanager/lang/sk/import.txt
+++ b/lib/plugins/usermanager/lang/sk/import.txt
@@ -2,7 +2,7 @@
Vyžaduje CSV súbor používateľov s minimálne 4 stĺpcami.
Stĺpce musia obsahovať postupne: ID používateľa, meno a priezvisko, emailová adresa a skupiny.
-CVS záznamy by mali byť oddelené čiarkou (,) a reťazce uzavreté úvodzovkami (""). Znak (\) sa používa v spojení so špeciálnymi znakmi.
+CVS záznamy by mali byť oddelené čiarkou (,) a reťazce uzavreté úvodzovkami (%%""%%). Znak (\) sa používa v spojení so špeciálnymi znakmi.
Príklad vhodného súboru je možné získať funkciou "Export používateľov".
Duplicitné ID používateľov budú ignorované.
diff --git a/lib/plugins/usermanager/lang/th/lang.php b/lib/plugins/usermanager/lang/th/lang.php
index eb88d7b91..d6e14f65f 100644
--- a/lib/plugins/usermanager/lang/th/lang.php
+++ b/lib/plugins/usermanager/lang/th/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Thai language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Komgrit Niyomrath <n.komgrit@gmail.com>
* @author Kittithat Arnontavilas mrtomyum@gmail.com
* @author Kittithat Arnontavilas <mrtomyum@gmail.com>
diff --git a/lib/plugins/usermanager/lang/zh-tw/import.txt b/lib/plugins/usermanager/lang/zh-tw/import.txt
index a6bb5f6ef..925cdc9d0 100644
--- a/lib/plugins/usermanager/lang/zh-tw/import.txt
+++ b/lib/plugins/usermanager/lang/zh-tw/import.txt
@@ -2,7 +2,7 @@
需提供 CSV 格式的使用者列表檔案(UTF-8 編碼)。
每列至少 4 欄,依序為:帳號、姓名、電郵、群組。
-各欄以半形逗號 (,) 分隔,有半形逗號的字串可用半形雙引號 ("") 分開,引號可用反斜線 (\) 跳脫。
+各欄以半形逗號 (,) 分隔,有半形逗號的字串可用半形雙引號 (%%""%%) 分開,引號可用反斜線 (\) 跳脫。
重複的使用者帳號會自動忽略。
如需要範例檔案,可用上面的「匯出使用者」取得。
diff --git a/lib/plugins/usermanager/lang/zh-tw/lang.php b/lib/plugins/usermanager/lang/zh-tw/lang.php
index 3fb6b6712..61555254d 100644
--- a/lib/plugins/usermanager/lang/zh-tw/lang.php
+++ b/lib/plugins/usermanager/lang/zh-tw/lang.php
@@ -16,19 +16,14 @@
* @author Danny Lin <danny0838@gmail.com>
*/
$lang['menu'] = '帳號管理器';
-
-// custom language strings for the plugin
$lang['noauth'] = '(帳號認證尚未開放)';
$lang['nosupport'] = '(尚不支援帳號管理)';
-
$lang['badauth'] = '錯誤的認證機制';
-
$lang['user_id'] = '帳號';
$lang['user_pass'] = '密碼';
$lang['user_name'] = '名稱';
$lang['user_mail'] = '電郵';
$lang['user_groups'] = '群組';
-
$lang['field'] = '欄位';
$lang['value'] = '設定值';
$lang['add'] = '增加';
@@ -46,7 +41,6 @@ $lang['export_filtered'] = '匯出篩選後的使用者列表 (CSV)';
$lang['import'] = '匯入新使用者';
$lang['line'] = '列號';
$lang['error'] = '錯誤訊息';
-
$lang['summary'] = '顯示帳號 %1$d-%2$d,共 %3$d 筆符合。共有 %4$d 個帳號。';
$lang['nonefound'] = '找不到帳號。共有 %d 個帳號。';
$lang['delete_ok'] = '已刪除 %d 個帳號';
@@ -54,13 +48,10 @@ $lang['delete_fail'] = '%d 個帳號無法刪除。';
$lang['update_ok'] = '已更新該帳號';
$lang['update_fail'] = '無法更新該帳號';
$lang['update_exists'] = '無法變更帳號名稱 (%s) ,因為有同名帳號存在。其他修改則已套用。';
-
$lang['start'] = '開始';
$lang['prev'] = '上一頁';
$lang['next'] = '下一頁';
$lang['last'] = '最後一頁';
-
-// added after 2006-03-09 release
$lang['edit_usermissing'] = '找不到選取的帳號,可能已被刪除或改為其他名稱。';
$lang['user_notify'] = '通知使用者';
$lang['note_notify'] = '通知信只會在指定使用者新密碼時寄送。';
@@ -70,8 +61,6 @@ $lang['add_ok'] = '已新增使用者';
$lang['add_fail'] = '無法新增使用者';
$lang['notify_ok'] = '通知信已寄出';
$lang['notify_fail'] = '通知信無法寄出';
-
-// import & errors
$lang['import_userlistcsv'] = '使用者列表檔案 (CSV): ';
$lang['import_header'] = '最近一次匯入 - 失敗';
$lang['import_success_count'] = '使用者匯入:找到 %d 個使用者,已成功匯入 %d 個。';
diff --git a/lib/plugins/usermanager/lang/zh/import.txt b/lib/plugins/usermanager/lang/zh/import.txt
index eacce5a77..243a53e84 100644
--- a/lib/plugins/usermanager/lang/zh/import.txt
+++ b/lib/plugins/usermanager/lang/zh/import.txt
@@ -1,7 +1,7 @@
===== 批量导入用户 =====
需要至少有 4 列的 CSV 格式用户列表文件。列必须按顺序包括:用户ID、全名、电子邮件地址和组。
-CSV 域需要用逗号 (,) 分隔,字符串用英文双引号 ("") 分开。反斜杠可以用来转义。
+CSV 域需要用逗号 (,) 分隔,字符串用英文双引号 (%%""%%) 分开。反斜杠可以用来转义。
可以尝试上面的“导入用户”功能来查看示例文件。重复的用户ID将被忽略。
密码生成后会通过电子邮件发送给每个成功导入的用户。 \ No newline at end of file
diff --git a/lib/plugins/usermanager/plugin.info.txt b/lib/plugins/usermanager/plugin.info.txt
index 315459122..ae4f9b9cc 100644
--- a/lib/plugins/usermanager/plugin.info.txt
+++ b/lib/plugins/usermanager/plugin.info.txt
@@ -1,7 +1,7 @@
base usermanager
author Chris Smith
email chris@jalakai.co.uk
-date 2013-02-20
+date 2014-03-05
name User Manager
desc Manage DokuWiki user accounts
url http://dokuwiki.org/plugin:usermanager