summaryrefslogtreecommitdiff
path: root/lib/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins')
-rw-r--r--lib/plugins/acl/admin.php6
-rw-r--r--lib/plugins/acl/lang/cs/help.txt13
-rw-r--r--lib/plugins/acl/lang/eu/lang.php5
-rw-r--r--lib/plugins/acl/lang/fr/help.txt2
-rw-r--r--lib/plugins/acl/remote.php32
-rw-r--r--lib/plugins/admin.php44
-rw-r--r--lib/plugins/auth.php16
-rw-r--r--lib/plugins/authad/adLDAP/adLDAP.php2
-rw-r--r--lib/plugins/authad/auth.php11
-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/fa/settings.php10
-rw-r--r--lib/plugins/authad/lang/no/lang.php8
-rw-r--r--lib/plugins/authad/lang/no/settings.php2
-rw-r--r--lib/plugins/authad/lang/ru/settings.php11
-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/authldap/auth.php30
-rw-r--r--lib/plugins/authldap/lang/fa/settings.php10
-rw-r--r--lib/plugins/authldap/lang/hr/settings.php4
-rw-r--r--lib/plugins/authldap/lang/no/settings.php2
-rw-r--r--lib/plugins/authldap/lang/ru/settings.php10
-rw-r--r--lib/plugins/authmysql/auth.php203
-rw-r--r--lib/plugins/authmysql/lang/cs/settings.php5
-rw-r--r--lib/plugins/authmysql/lang/da/settings.php4
-rw-r--r--lib/plugins/authmysql/lang/fa/settings.php10
-rw-r--r--lib/plugins/authmysql/lang/fi/settings.php11
-rw-r--r--lib/plugins/authmysql/lang/hr/settings.php2
-rw-r--r--lib/plugins/authmysql/lang/no/settings.php14
-rw-r--r--lib/plugins/authpgsql/auth.php23
-rw-r--r--lib/plugins/authpgsql/lang/cs/settings.php5
-rw-r--r--lib/plugins/authpgsql/lang/fa/settings.php8
-rw-r--r--lib/plugins/authpgsql/lang/it/settings.php2
-rw-r--r--lib/plugins/authpgsql/lang/ru/settings.php6
-rw-r--r--lib/plugins/authplain/_test/escaping.test.php48
-rw-r--r--lib/plugins/authplain/auth.php39
-rw-r--r--lib/plugins/config/admin.php45
-rw-r--r--lib/plugins/config/settings/config.class.php214
-rw-r--r--lib/plugins/config/settings/extra.class.php105
-rw-r--r--lib/plugins/extension/admin.php10
-rw-r--r--lib/plugins/extension/helper/extension.php8
-rw-r--r--lib/plugins/extension/helper/list.php16
-rw-r--r--lib/plugins/extension/helper/repository.php6
-rw-r--r--lib/plugins/extension/lang/cs/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/cs/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/cs/lang.php92
-rw-r--r--lib/plugins/extension/lang/da/lang.php24
-rw-r--r--lib/plugins/extension/lang/en/lang.php7
-rw-r--r--lib/plugins/extension/lang/fa/lang.php40
-rw-r--r--lib/plugins/extension/lang/fi/lang.php37
-rw-r--r--lib/plugins/extension/lang/hr/lang.php66
-rw-r--r--lib/plugins/extension/lang/it/lang.php21
-rw-r--r--lib/plugins/extension/lang/ja/lang.php6
-rw-r--r--lib/plugins/extension/lang/ko/lang.php9
-rw-r--r--lib/plugins/extension/lang/nl/lang.php2
-rw-r--r--lib/plugins/extension/lang/ru/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/ru/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/ru/intro_search.txt1
-rw-r--r--lib/plugins/extension/lang/ru/intro_templates.txt1
-rw-r--r--lib/plugins/extension/lang/ru/lang.php44
-rw-r--r--lib/plugins/extension/lang/zh-tw/intro_install.txt1
-rw-r--r--lib/plugins/extension/lang/zh-tw/intro_plugins.txt1
-rw-r--r--lib/plugins/extension/lang/zh-tw/lang.php69
-rw-r--r--lib/plugins/info/syntax.php38
-rw-r--r--lib/plugins/popularity/helper.php13
-rw-r--r--lib/plugins/popularity/lang/eu/lang.php5
-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/revert/lang/ar/lang.php1
-rw-r--r--lib/plugins/revert/lang/cs/lang.php2
-rw-r--r--lib/plugins/revert/lang/eu/lang.php6
-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/ko/lang.php2
-rw-r--r--lib/plugins/revert/lang/no/lang.php1
-rw-r--r--lib/plugins/syntax.php11
-rw-r--r--lib/plugins/usermanager/admin.php34
-rw-r--r--lib/plugins/usermanager/lang/cs/lang.php14
-rw-r--r--lib/plugins/usermanager/lang/da/import.txt9
-rw-r--r--lib/plugins/usermanager/lang/da/lang.php2
-rw-r--r--lib/plugins/usermanager/lang/eu/lang.php5
-rw-r--r--lib/plugins/usermanager/lang/fa/lang.php3
-rw-r--r--lib/plugins/usermanager/lang/fi/lang.php10
-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/ko/lang.php8
-rw-r--r--lib/plugins/usermanager/lang/ru/import.txt3
-rw-r--r--lib/plugins/usermanager/lang/ru/lang.php5
94 files changed, 1526 insertions, 222 deletions
diff --git a/lib/plugins/acl/admin.php b/lib/plugins/acl/admin.php
index ebb097a04..814bbfe9c 100644
--- a/lib/plugins/acl/admin.php
+++ b/lib/plugins/acl/admin.php
@@ -762,6 +762,8 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
*/
function _html_select(){
$inlist = false;
+ $usel = '';
+ $gsel = '';
if($this->who &&
!in_array($this->who,$this->usersgroups) &&
@@ -770,11 +772,9 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
if($this->who{0} == '@'){
$gsel = ' selected="selected"';
}else{
- $usel = ' selected="selected"';
+ $usel = ' selected="selected"';
}
}else{
- $usel = '';
- $gsel = '';
$inlist = true;
}
diff --git a/lib/plugins/acl/lang/cs/help.txt b/lib/plugins/acl/lang/cs/help.txt
index 1dbc88ad0..1b6fa1eac 100644
--- a/lib/plugins/acl/lang/cs/help.txt
+++ b/lib/plugins/acl/lang/cs/help.txt
@@ -1,11 +1,8 @@
=== Nápověda: ===
-Na této stránce můžete přidávat a odebírat oprávnění na jmenné prostory a stránky Vaší wiki.
+Na této stránce můžete přidávat a odebírat oprávnění pro jmenné prostory a stránky svojí wiki.
+* Levý panel zobrazuje všechny dostupné jmenné prostory a stránky.
+* Formulář výše umožňuje vidět a modifikovat oprávnění vybraného uživatele nebo skupiny.
+* V tabulce uvedené níže jsou zobrazeny všechna aktuální pravidla pro řízení přístupu (oprávnění). Zde můžete rychle odebírat a měnit více položek (oprávnění) najednou.
-Levý panel zobrazuje všechny dostupné jmenné prostory a stránky.
-
-Formulář výše umožňuje vidět a modifikovat oprávnění vybraného uživatele nebo skupiny.
-
-V tabulce uvedené níže jsou zobrazeny všechny aktuální pravidla pro řízení přístupu (oprávnění). Zde můžete rychle odebírat a měnit více položek (oprávnění) najednou.
-
-Pro detailnější nápovědu si přečtěte stránku [[doku>acl|oficiální dokumentaci ACL]], která Vám může pomoci plně pochopit princip, jak řízení přístupu na DokuWiki funguje.
+Pro detailnější nápovědu si přečtěte stránku [[doku>acl|oficiální dokumentace ACL]], která Vám může pomoci plně pochopit princip, na kterém řízení přístupu na DokuWiki funguje.
diff --git a/lib/plugins/acl/lang/eu/lang.php b/lib/plugins/acl/lang/eu/lang.php
index f051523d9..bb6ab964a 100644
--- a/lib/plugins/acl/lang/eu/lang.php
+++ b/lib/plugins/acl/lang/eu/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Basque language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Inko Illarramendi <inko.i.a@gmail.com>
* @author Zigor Astarbe <astarbe@gmail.com>
*/
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/remote.php b/lib/plugins/acl/remote.php
index 6d5201cf6..b10c544ee 100644
--- a/lib/plugins/acl/remote.php
+++ b/lib/plugins/acl/remote.php
@@ -1,7 +1,16 @@
<?php
+/**
+ * Class remote_plugin_acl
+ */
class remote_plugin_acl extends DokuWiki_Remote_Plugin {
- function _getMethods() {
+
+ /**
+ * Returns details about the remote plugin methods
+ *
+ * @return array
+ */
+ public function _getMethods() {
return array(
'addAcl' => array(
'args' => array('string','string','int'),
@@ -17,12 +26,29 @@ class remote_plugin_acl extends DokuWiki_Remote_Plugin {
);
}
- function addAcl($scope, $user, $level){
+ /**
+ * Add a new entry to ACL config
+ *
+ * @param string $scope
+ * @param string $user
+ * @param int $level see also inc/auth.php
+ * @return bool
+ */
+ public function addAcl($scope, $user, $level){
+ /** @var admin_plugin_acl $apa */
$apa = plugin_load('admin', 'acl');
return $apa->_acl_add($scope, $user, $level);
}
- function delAcl($scope, $user){
+ /**
+ * Remove an entry from ACL config
+ *
+ * @param string $scope
+ * @param string $user
+ * @return bool
+ */
+ public function delAcl($scope, $user){
+ /** @var admin_plugin_acl $apa */
$apa = plugin_load('admin', 'acl');
return $apa->_acl_del($scope, $user);
}
diff --git a/lib/plugins/admin.php b/lib/plugins/admin.php
index 9a1fb9fdc..39dece453 100644
--- a/lib/plugins/admin.php
+++ b/lib/plugins/admin.php
@@ -14,7 +14,14 @@ if(!defined('DOKU_INC')) die();
*/
class DokuWiki_Admin_Plugin extends DokuWiki_Plugin {
- function getMenuText($language) {
+ /**
+ * Return the text that is displayed at the main admin menu
+ * (Default localized language string 'menu' is returned, override this function for setting another name)
+ *
+ * @param string $language language code
+ * @return string menu string
+ */
+ public function getMenuText($language) {
$menutext = $this->getLang('menu');
if (!$menutext) {
$info = $this->getInfo();
@@ -23,23 +30,48 @@ class DokuWiki_Admin_Plugin extends DokuWiki_Plugin {
return $menutext;
}
- function getMenuSort() {
+ /**
+ * Determine position in list in admin window
+ * Lower values are sorted up
+ *
+ * @return int
+ */
+ public function getMenuSort() {
return 1000;
}
- function handle() {
+ /**
+ * Carry out required processing
+ */
+ public function handle() {
trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
}
- function html() {
+ /**
+ * Output html of the admin page
+ */
+ public function html() {
trigger_error('html() not implemented in '.get_class($this), E_USER_WARNING);
}
- function forAdminOnly() {
+ /**
+ * Return true for access only by admins (config:superuser) or false if managers are allowed as well
+ *
+ * @return bool
+ */
+ public function forAdminOnly() {
return true;
}
- function getTOC(){
+ /**
+ * Return array with ToC items. Items can be created with the html_mktocitem()
+ *
+ * @see html_mktocitem()
+ * @see tpl_toc()
+ *
+ * @return array
+ */
+ public function getTOC(){
return array();
}
}
diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php
index b04735639..4799b3a38 100644
--- a/lib/plugins/auth.php
+++ b/lib/plugins/auth.php
@@ -116,7 +116,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
* @author Gabriel Birke <birke@d-scribe.de>
* @param string $type Modification type ('create', 'modify', 'delete')
* @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type
- * @return mixed Result from the modification function or false if an event handler has canceled the action
+ * @return bool|null|int Result from the modification function or false if an event handler has canceled the action
*/
public function triggerUserMod($type, $params) {
$validTypes = array(
@@ -124,12 +124,15 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
'modify' => 'modifyUser',
'delete' => 'deleteUsers'
);
- if(empty($validTypes[$type]))
+ if(empty($validTypes[$type])) {
return false;
+ }
+
+ $result = false;
$eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null);
$evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata);
if($evt->advise_before(true)) {
- $result = call_user_func_array(array($this, $validTypes[$type]), $params);
+ $result = call_user_func_array(array($this, $validTypes[$type]), $evt->data['params']);
$evt->data['modification_result'] = $result;
}
$evt->advise_after();
@@ -229,14 +232,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
- * @return array containing user data or false
+ * @param bool $requireGroups whether or not the returned data must include groups
+ * @return false|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/adLDAP/adLDAP.php b/lib/plugins/authad/adLDAP/adLDAP.php
index c1f92abe2..5563e4fe9 100644
--- a/lib/plugins/authad/adLDAP/adLDAP.php
+++ b/lib/plugins/authad/adLDAP/adLDAP.php
@@ -947,5 +947,3 @@ class adLDAP {
* }
*/
class adLDAPException extends Exception {}
-
-?> \ No newline at end of file
diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index 0860e5756..88b56046c 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;
@@ -202,6 +203,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
}
//general user info
+ $info = array();
$info['name'] = $result[0]['displayname'][0];
$info['mail'] = $result[0]['mail'][0];
$info['uid'] = $result[0]['samaccountname'][0];
@@ -327,6 +329,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
* Bulk retrieval of user data
*
* @author Dominik Eckelmann <dokuwiki@cosmocode.de>
+ *
* @param int $start index of first user to be returned
* @param int $limit max number of users to be returned
* @param array $filter array of field/pattern pairs, null for no filter
@@ -445,7 +448,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
/**
* Get the domain part from a user
*
- * @param $user
+ * @param string $user
* @return string
*/
public function _userDomain($user) {
@@ -456,7 +459,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
/**
* Get the user part from a user
*
- * @param $user
+ * @param string $user
* @return string
*/
public function _userName($user) {
@@ -542,6 +545,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
* The patterns are set up with $this->_constructPattern()
*
* @author Chris Smith <chris@jalakai.co.uk>
+ *
* @param string $user
* @param array $info
* @return bool
@@ -563,6 +567,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
* Create a pattern for $this->_filter()
*
* @author Chris Smith <chris@jalakai.co.uk>
+ *
* @param array $filter
*/
protected function _constructPattern($filter) {
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/fa/settings.php b/lib/plugins/authad/lang/fa/settings.php
new file mode 100644
index 000000000..161479afb
--- /dev/null
+++ b/lib/plugins/authad/lang/fa/settings.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Omid Hezaveh <hezpublic@gmail.com>
+ */
+$lang['admin_password'] = 'رمز کاربر بالایی ';
+$lang['use_ssl'] = 'از اس‌اس‌ال استفاده می‌کنید؟ در این صورت تی‌ال‌اس را در پایین فعال نکنید. ';
+$lang['use_tls'] = 'از تی‌ال‌اس استفاده می‌کنید؟ در این صورت اس‌اس‌ال را در بالا فعال نکنید. ';
diff --git a/lib/plugins/authad/lang/no/lang.php b/lib/plugins/authad/lang/no/lang.php
new file mode 100644
index 000000000..a1c9c7e8a
--- /dev/null
+++ b/lib/plugins/authad/lang/no/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Patrick <spill.p@hotmail.com>
+ */
+$lang['domain'] = 'Loggpå-domene';
diff --git a/lib/plugins/authad/lang/no/settings.php b/lib/plugins/authad/lang/no/settings.php
index bab5ce67d..f309ead50 100644
--- a/lib/plugins/authad/lang/no/settings.php
+++ b/lib/plugins/authad/lang/no/settings.php
@@ -4,6 +4,8 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Christopher Schive <chschive@frisurf.no>
+ * @author Patrick <spill.p@hotmail.com>
*/
+$lang['account_suffix'] = 'Ditt konto-suffiks F. Eks. <code>@my.domain.org</code>';
$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/ru/settings.php b/lib/plugins/authad/lang/ru/settings.php
index c9c6d9f88..99c916b44 100644
--- a/lib/plugins/authad/lang/ru/settings.php
+++ b/lib/plugins/authad/lang/ru/settings.php
@@ -8,11 +8,20 @@
* @author Artur <ncuxxx@gmail.com>
* @author Erli Moen <evseev.jr@gmail.com>
* @author Владимир <id37736@yandex.ru>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Type-kun <workwork-1@yandex.ru>
+ * @author Vitaly Filatenko <kot@hacktest.net>
*/
-$lang['account_suffix'] = 'Суффикс вашего аккаунта типа <code>@my.domain.org</code>';
+$lang['account_suffix'] = 'Суффикс вашего аккаунта. Например, <code>@my.domain.org</code>';
+$lang['base_dn'] = 'Ваш базовый DN. Например: <code>DC=my,DC=domain,DC=org</code>';
$lang['domain_controllers'] = 'Список DNS-серверов, разделенных запятой. Например:<code>srv1.domain.org,srv2.domain.org</code>';
+$lang['admin_username'] = 'Привилегированный пользователь Active Directory с доступом ко всем остальным пользовательским данным. Необязательно, однако необходимо для определённых действий вроде отправки почтовой подписки.';
$lang['admin_password'] = 'Пароль для указанного пользователя.';
$lang['sso'] = 'Использовать SSO (Single-Sign-On) через Kerberos или NTLM?';
+$lang['sso_charset'] = 'Кодировка, в которой веб-сервер передаёт имя пользователя Kerberos или NTLM. Для UTF-8 или latin-1 остаётся пустым. Требует расширение iconv.';
+$lang['real_primarygroup'] = 'Должна ли использоваться настоящая первичная группа вместо "Domain Users" (медленнее)';
$lang['use_ssl'] = 'Использовать SSL? Если да, то не включайте TLS.';
$lang['use_tls'] = 'Использовать TLS? Если да, то не включайте SSL.';
$lang['debug'] = 'Выводить дополнительную информацию при ошибках?';
+$lang['expirywarn'] = 'За сколько дней нужно предупреждать пользователя о необходимости изменить пароль. 0 - отключить.';
+$lang['additional'] = 'Дополнительные AD атрибуты, разделённые запятой, для выборки из данных пользователя. Используется некоторыми плагинами.';
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/authldap/auth.php b/lib/plugins/authldap/auth.php
index 0d5e130ea..fd4729331 100644
--- a/lib/plugins/authldap/auth.php
+++ b/lib/plugins/authldap/auth.php
@@ -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;
@@ -172,6 +181,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
}
}
+ $info = array();
$info['user'] = $user;
$info['server'] = $this->getConf('server');
@@ -555,15 +565,13 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
* Wraps around ldap_search, ldap_list or ldap_read depending on $scope
*
* @author Andreas Gohr <andi@splitbrain.org>
- * @param resource $link_identifier
- * @param string $base_dn
- * @param string $filter
- * @param string $scope can be 'base', 'one' or 'sub'
- * @param null $attributes
- * @param int $attrsonly
- * @param int $sizelimit
- * @param int $timelimit
- * @param int $deref
+ * @param resource $link_identifier
+ * @param string $base_dn
+ * @param string $filter
+ * @param string $scope can be 'base', 'one' or 'sub'
+ * @param null|array $attributes
+ * @param int $attrsonly
+ * @param int $sizelimit
* @return resource
*/
protected function _ldapsearch($link_identifier, $base_dn, $filter, $scope = 'sub', $attributes = null,
diff --git a/lib/plugins/authldap/lang/fa/settings.php b/lib/plugins/authldap/lang/fa/settings.php
new file mode 100644
index 000000000..49d485afd
--- /dev/null
+++ b/lib/plugins/authldap/lang/fa/settings.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Mohammad Sadegh <msdn2013@gmail.com>
+ * @author Omid Hezaveh <hezpublic@gmail.com>
+ */
+$lang['starttls'] = 'از تی‌ال‌اس (TLS) استفاده می‌کنید؟';
+$lang['bindpw'] = 'رمزعبور کاربر بالا';
diff --git a/lib/plugins/authldap/lang/hr/settings.php b/lib/plugins/authldap/lang/hr/settings.php
index 44caeacc8..cb8df7218 100644
--- a/lib/plugins/authldap/lang/hr/settings.php
+++ b/lib/plugins/authldap/lang/hr/settings.php
@@ -21,3 +21,7 @@ $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/no/settings.php b/lib/plugins/authldap/lang/no/settings.php
index 6bedb2991..61671ed46 100644
--- a/lib/plugins/authldap/lang/no/settings.php
+++ b/lib/plugins/authldap/lang/no/settings.php
@@ -4,6 +4,8 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Christopher Schive <chschive@frisurf.no>
+ * @author Patrick <spill.p@hotmail.com>
*/
$lang['port'] = 'LDAP serverport dersom ingen full URL var gitt over.';
$lang['starttls'] = 'Bruke TLS-forbindelser?';
+$lang['bindpw'] = 'Passord til brukeren over';
diff --git a/lib/plugins/authldap/lang/ru/settings.php b/lib/plugins/authldap/lang/ru/settings.php
index 5677e06a3..534990648 100644
--- a/lib/plugins/authldap/lang/ru/settings.php
+++ b/lib/plugins/authldap/lang/ru/settings.php
@@ -8,10 +8,20 @@
* @author Erli Moen <evseev.jr@gmail.com>
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Владимир <id37736@yandex.ru>
+ * @author Vitaly Filatenko <kot@hacktest.net>
*/
+$lang['server'] = 'Ваш LDAP сервер. Либо имя хоста (<code>localhost</code>), либо полный URL (<code>ldap://server.tld:389</code>)';
+$lang['port'] = 'Порт LDAP сервера, если выше не был указан полный URL';
+$lang['usertree'] = 'Где искать аккаунты пользователей. Например: <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree'] = 'Где искать группы пользователей. Например: <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter'] = 'LDAP фильтр для поиска аккаунтов пользователей. Например: <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter'] = 'LDAP фильтр для поиска групп. Например: <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version'] = 'Версия протокола. Возможно вам нужно указать <code>3</code>';
$lang['starttls'] = 'Использовать TLS подключения?';
$lang['deref'] = 'Как расшифровывать псевдонимы?';
$lang['bindpw'] = 'Пароль для указанного пользователя.';
+$lang['userscope'] = 'Ограничить область поиска при поиске пользователей';
+$lang['groupscope'] = 'Ограничить область поиска при поиске групп';
$lang['debug'] = 'Показывать дополнительную отладочную информацию при ошибках';
$lang['deref_o_0'] = 'LDAP_DEREF_NEVER';
$lang['deref_o_1'] = 'LDAP_DEREF_SEARCHING';
diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php
index 1e6e6a4a9..0d423b6c9 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
*
@@ -112,7 +115,8 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* Check if the given config strings are set
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
- * @param array $keys
+ *
+ * @param string[] $keys
* @param bool $wop is this a check for a write operation?
* @return bool
*/
@@ -157,10 +161,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 +179,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 +221,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 +248,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 +270,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, true)) == 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 +321,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();
}
@@ -349,7 +367,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
*
* @param int $first index of first user to be returned
* @param int $limit max number of users to be returned
- * @param array|string $filter array of field/pattern pairs
+ * @param array $filter array of field/pattern pairs
* @return array userinfo (refer getUserData for internal userinfo details)
*/
public function retrieveUsers($first = 0, $limit = 0, $filter = array()) {
@@ -367,9 +385,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 +486,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 +524,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 +553,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;
}
@@ -585,11 +613,12 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
if($uid) {
foreach($grps as $group) {
- $gid = $this->_addUserToGroup($user, $group, 1);
+ $gid = $this->_addUserToGroup($user, $group, true);
if($gid === false) break;
}
if($gid !== false){
+ $this->_flushUserInfoCache($user);
return true;
} else {
/* remove the new user and all group relations if a group can't
@@ -614,7 +643,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,6 +655,7 @@ 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;
}
}
@@ -633,23 +663,100 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
}
/**
- * getUserInfo
+ * 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
+ */
+ 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
*
- * Gets the data for a specific user The database connection
+ * @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;
+ }
+
+ /**
+ * 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
* must already be established for this function to work.
* Otherwise it will return 'false'.
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
* @param string $user user's nick to get data for
- * @return bool|array false on error, user info on success
+ * @return false|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,25 @@ 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 +819,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;
}
@@ -724,7 +837,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
* @param string $group group name which id is desired
- * @return mixed group id
+ * @return false|string group id
*/
protected function _getGroupID($group) {
if($this->dbcon) {
@@ -797,7 +910,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
* @param string $query SQL string that contains the query
- * @return array with the result table
+ * @return array|false with the result table
*/
protected function _queryDB($query) {
if($this->getConf('debug') >= 2) {
@@ -888,6 +1001,8 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
* abrogated.
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @return bool
*/
protected function _unlockTables() {
if($this->dbcon) {
diff --git a/lib/plugins/authmysql/lang/cs/settings.php b/lib/plugins/authmysql/lang/cs/settings.php
index 350c3236b..09146a451 100644
--- a/lib/plugins/authmysql/lang/cs/settings.php
+++ b/lib/plugins/authmysql/lang/cs/settings.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author mkucera66@seznam.cz
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
*/
$lang['server'] = 'Váš server MySQL';
$lang['user'] = 'Uživatelské jméno pro MySQL';
@@ -19,7 +20,7 @@ $lang['getGroups'] = 'Příkaz SQL pro získání uživatelovy skupi
$lang['getUsers'] = 'Příkaz SQL pro seznam všech uživatelů';
$lang['FilterLogin'] = 'Příkaz SQL pro filtrování uživatelů podle přihlašovacího jména';
$lang['FilterName'] = 'Příkaz SQL pro filtrování uživatelů podle celého jména';
-$lang['FilterEmail'] = 'Příkaz SQL pro filtrování uživatelů podle adres emailů';
+$lang['FilterEmail'] = 'Příkaz SQL pro filtrování uživatelů podle adres e-mailů';
$lang['FilterGroup'] = 'Příkaz SQL pro filtrování uživatelů podle členství ve skupinách';
$lang['SortOrder'] = 'Příkaz SQL pro řazení uživatelů';
$lang['addUser'] = 'Příkaz SQL pro přidání nového uživatele';
@@ -32,7 +33,7 @@ $lang['delUserRefs'] = 'Příkaz SQL pro odstranění členství uživ
$lang['updateUser'] = 'Příkaz SQL pro aktualizaci uživatelského profilu';
$lang['UpdateLogin'] = 'Klauzule pro aktualizaci přihlačovacího jména uživatele';
$lang['UpdatePass'] = 'Klauzule pro aktualizaci hesla uživatele';
-$lang['UpdateEmail'] = 'Klauzule pro aktualizaci emailové adresy uživatele';
+$lang['UpdateEmail'] = 'Klauzule pro aktualizaci e-mailové adresy uživatele';
$lang['UpdateName'] = 'Klauzule pro aktualizaci celého jména uživatele';
$lang['UpdateTarget'] = 'Omezující klauzule pro identifikaci uživatele při aktualizaci';
$lang['delUserGroup'] = 'Příkaz SQL pro zrušení členství uživatele v dané skupině';
diff --git a/lib/plugins/authmysql/lang/da/settings.php b/lib/plugins/authmysql/lang/da/settings.php
index 1e38cb6b4..ed21201fb 100644
--- a/lib/plugins/authmysql/lang/da/settings.php
+++ b/lib/plugins/authmysql/lang/da/settings.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author Jens Hyllegaard <jens.hyllegaard@gmail.com>
* @author soer9648 <soer9648@eucl.dk>
*/
@@ -11,6 +11,7 @@ $lang['user'] = 'MySQL brugernavn';
$lang['password'] = 'Kodeord til ovenstående bruger';
$lang['database'] = 'Database der skal benyttes';
$lang['charset'] = 'Tegnsæt benyttet i database';
+$lang['debug'] = 'Vis yderligere debug output';
$lang['checkPass'] = 'SQL-sætning til at kontrollere kodeord';
$lang['getUserInfo'] = 'SQL-sætning til at hente brugerinformation';
$lang['getUsers'] = 'SQL-sætning til at liste alle brugere';
@@ -21,7 +22,6 @@ $lang['delGroup'] = 'SQL-sætning til at fjerne en gruppe';
$lang['delUser'] = 'SQL-sætning til at slette en bruger';
$lang['delUserRefs'] = 'SQL-sætning til at fjerne en bruger fra alle grupper';
$lang['updateUser'] = 'SQL-sætning til at opdatere en brugerprofil';
-$lang['debug'] = 'Vis yderligere debug output';
$lang['debug_o_0'] = 'ingen';
$lang['debug_o_1'] = 'kun ved fejl';
$lang['debug_o_2'] = 'alle SQL forespørgsler';
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/fi/settings.php b/lib/plugins/authmysql/lang/fi/settings.php
new file mode 100644
index 000000000..32517957b
--- /dev/null
+++ b/lib/plugins/authmysql/lang/fi/settings.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Jussi Takala <jussi.takala@live.fi>
+ */
+$lang['server'] = 'Sinun MySQL-serveri';
+$lang['user'] = 'MySQL-käyttäjänimi';
+$lang['password'] = 'Salasana yläolevalle käyttäjälle';
+$lang['charset'] = 'Käytetty merkistö tietokannassa';
diff --git a/lib/plugins/authmysql/lang/hr/settings.php b/lib/plugins/authmysql/lang/hr/settings.php
index 0ef389f46..af9966999 100644
--- a/lib/plugins/authmysql/lang/hr/settings.php
+++ b/lib/plugins/authmysql/lang/hr/settings.php
@@ -19,7 +19,7 @@ $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 email adresi';
+$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';
diff --git a/lib/plugins/authmysql/lang/no/settings.php b/lib/plugins/authmysql/lang/no/settings.php
new file mode 100644
index 000000000..45ab09819
--- /dev/null
+++ b/lib/plugins/authmysql/lang/no/settings.php
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Patrick <spill.p@hotmail.com>
+ */
+$lang['server'] = 'Din MySQL-server';
+$lang['user'] = 'Ditt MySQL-brukernavn';
+$lang['password'] = 'Passord til brukeren';
+$lang['database'] = 'Database som skal brukes';
+$lang['debug_o_0'] = 'ingen';
+$lang['debug_o_1'] = 'bare ved feil';
+$lang['debug_o_2'] = 'alle SQL-forespørsler';
diff --git a/lib/plugins/authpgsql/auth.php b/lib/plugins/authpgsql/auth.php
index e51b39858..4cb280aae 100644
--- a/lib/plugins/authpgsql/auth.php
+++ b/lib/plugins/authpgsql/auth.php
@@ -104,7 +104,7 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
- * @param array $keys
+ * @param string[] $keys
* @param bool $wop
* @return bool
*/
@@ -159,9 +159,11 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
if($first) $sql .= " OFFSET $first";
$result = $this->_queryDB($sql);
- 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();
$this->_closeDB();
@@ -212,7 +214,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']);
@@ -262,11 +267,12 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
if($uid) {
foreach($grps as $group) {
- $gid = $this->_addUserToGroup($user, $group, 1);
+ $gid = $this->_addUserToGroup($user, $group, true);
if($gid === false) break;
}
if($gid !== false){
+ $this->_flushUserInfoCache($user);
return true;
} else {
/* remove the new user and all group relations if a group can't
@@ -336,7 +342,7 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
*
* @param string $query SQL string that contains the query
- * @return array the result table
+ * @return array|false the result table
*/
protected function _queryDB($query) {
$resultarray = array();
@@ -359,6 +365,9 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
* MySQL one because it does NOT return the last insertID
*
* @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $query
+ * @return bool
*/
protected function _modifyDB($query) {
if($this->dbcon) {
@@ -392,6 +401,8 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql {
* Commit a transaction
*
* @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @return bool
*/
protected function _unlockTables() {
if($this->dbcon) {
diff --git a/lib/plugins/authpgsql/lang/cs/settings.php b/lib/plugins/authpgsql/lang/cs/settings.php
index aec7eecf1..ad135e241 100644
--- a/lib/plugins/authpgsql/lang/cs/settings.php
+++ b/lib/plugins/authpgsql/lang/cs/settings.php
@@ -4,6 +4,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author mkucera66@seznam.cz
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
*/
$lang['server'] = 'Váš server PostgreSQL';
$lang['port'] = 'Port vašeho serveru PostgreSQL';
@@ -18,7 +19,7 @@ $lang['getGroups'] = 'Příkaz SQL pro získání členství uživat
$lang['getUsers'] = 'Příkaz SQL pro seznam všech uživatelů';
$lang['FilterLogin'] = 'Příkaz SQL pro filtrování uživatelů podle přihlašovacího jména';
$lang['FilterName'] = 'Příkaz SQL pro filtrování uživatelů podle celého jména';
-$lang['FilterEmail'] = 'Příkaz SQL pro filtrování uživatelů podle adres emailů';
+$lang['FilterEmail'] = 'Příkaz SQL pro filtrování uživatelů podle adres e-mailů';
$lang['FilterGroup'] = 'Příkaz SQL pro filtrování uživatelů podle členství ve skupinách';
$lang['SortOrder'] = 'Příkaz SQL pro řazení uživatelů';
$lang['addUser'] = 'Příkaz SQL pro řazení uživatelů';
@@ -31,7 +32,7 @@ $lang['delUserRefs'] = 'Příkaz SQL pro odstranění členství uživ
$lang['updateUser'] = 'Příkaz SQL pro aktualizaci uživatelského profilu';
$lang['UpdateLogin'] = 'Klauzule pro aktualizaci přihlačovacího jména uživatele';
$lang['UpdatePass'] = 'Klauzule pro aktualizaci hesla uživatele';
-$lang['UpdateEmail'] = 'Klauzule pro aktualizaci emailové adresy uživatele';
+$lang['UpdateEmail'] = 'Klauzule pro aktualizaci e-mailové adresy uživatele';
$lang['UpdateName'] = 'Klauzule pro aktualizaci celého jména uživatele';
$lang['UpdateTarget'] = 'Omezující klauzule pro identifikaci uživatele při aktualizaci';
$lang['delUserGroup'] = 'Příkaz SQL pro zrušení členství uživatele v dané skupině';
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/it/settings.php b/lib/plugins/authpgsql/lang/it/settings.php
index baf40a468..e8a40dcb2 100644
--- a/lib/plugins/authpgsql/lang/it/settings.php
+++ b/lib/plugins/authpgsql/lang/it/settings.php
@@ -4,8 +4,10 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Torpedo <dgtorpedo@gmail.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';
+$lang['getUsers'] = 'Dichiarazione SQL per elencare tutti gli utenti';
diff --git a/lib/plugins/authpgsql/lang/ru/settings.php b/lib/plugins/authpgsql/lang/ru/settings.php
index 65cbce8df..416ea0ec9 100644
--- a/lib/plugins/authpgsql/lang/ru/settings.php
+++ b/lib/plugins/authpgsql/lang/ru/settings.php
@@ -6,11 +6,12 @@
* @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Vitaly Filatenko <kot@hacktest.net>
*/
$lang['server'] = 'Ваш PostgreSQL-сервер';
$lang['port'] = 'Порт вашего PostgreSQL-сервера';
$lang['user'] = 'Имя пользователя PostgreSQL';
-$lang['password'] = 'Пароль для указанного пользователя.';
+$lang['password'] = 'Пароль для указанного пользователя';
$lang['database'] = 'Имя базы данных';
$lang['debug'] = 'Отображать дополнительную отладочную информацию';
$lang['checkPass'] = 'Выражение SQL, осуществляющее проверку пароля';
@@ -30,5 +31,8 @@ $lang['getUserID'] = 'Выражение SQL, обеспечиваю
$lang['delUser'] = 'Выражение SQL, осуществляющее удаление пользователя';
$lang['delUserRefs'] = 'Выражение SQL, осуществляющее удаление пользователя из всех группы';
$lang['updateUser'] = 'Выражение SQL, осуществляющее обновление профиля пользователя';
+$lang['UpdateLogin'] = 'Измените условие для обновления логина';
+$lang['UpdatePass'] = 'Измените условие для обновления пароля';
+$lang['UpdateEmail'] = 'Измените условие для обновления email';
$lang['delUserGroup'] = 'Выражение SQL, осуществляющее удаление пользователя из указанной группы';
$lang['getGroupID'] = 'Выражение SQL, обеспечивающее получение первичного ключа указанной группы';
diff --git a/lib/plugins/authplain/_test/escaping.test.php b/lib/plugins/authplain/_test/escaping.test.php
index cd5294157..9df96389a 100644
--- a/lib/plugins/authplain/_test/escaping.test.php
+++ b/lib/plugins/authplain/_test/escaping.test.php
@@ -12,13 +12,14 @@
* @group plugins
*/
class helper_plugin_authplain_escaping_test extends DokuWikiTest {
-
- protected $pluginsEnabled = array('authplain');
+
+ protected $pluginsEnabled = array('authplainharness');
+ /** @var auth_plugin_authplain|auth_plugin_authplainharness */
protected $auth;
-
+
protected function reloadUsers() {
/* auth caches data loaded from file, but recreated object forces reload */
- $this->auth = new auth_plugin_authplain();
+ $this->auth = new auth_plugin_authplainharness();
}
function setUp() {
@@ -76,7 +77,44 @@ class helper_plugin_authplain_escaping_test extends DokuWikiTest {
$this->assertEquals($saved['name'], $user['name']);
$this->assertTrue($this->auth->checkPass("testuser", $user['pass']));
}
+
+ // really only required for developers to ensure this plugin will
+ // work with systems running on PCRE 6.6 and lower.
+ public function testLineSplit(){
+ $this->auth->setPregsplit_safe(false);
+
+ $names = array(
+ 'plain',
+ 'ut-fठ8',
+ 'colon:',
+ 'backslash\\',
+ 'alltogether\\ठ:'
+ );
+ $userpass = 'user:password_hash:';
+ $other_user_data = ':email@address:group1,group2';
+
+ foreach ($names as $testname) {
+ $escaped = str_replace(array('\\',':'),array('\\\\','\\:'),$testname); // escape : & \
+ $test_line = $userpass.$escaped.$other_user_data;
+ $result = $this->auth->splitUserData($test_line);
+
+ $this->assertEquals($escaped, $result[2]);
+ }
+ }
}
-?> \ No newline at end of file
+class auth_plugin_authplainharness extends auth_plugin_authplain {
+
+ public function setPregsplit_safe($bool) {
+ $this->_pregsplit_safe = $bool;
+ }
+
+ public function getPregsplit_safe(){
+ return $this->_pregsplit_safe;
+ }
+
+ public function splitUserData($line){
+ return $this->_splitUserData($line);
+ }
+}
diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php
index e53f56667..fd2d0b249 100644
--- a/lib/plugins/authplain/auth.php
+++ b/lib/plugins/authplain/auth.php
@@ -17,6 +17,9 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
/** @var array filter pattern */
protected $_pattern = array();
+ /** @var bool safe version of preg_split */
+ protected $_pregsplit_safe = false;
+
/**
* Constructor
*
@@ -44,6 +47,8 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
$this->cando['getUsers'] = true;
$this->cando['getUserCount'] = true;
}
+
+ $this->_pregsplit_safe = version_compare(PCRE_VERSION,'6.7','>=');
}
/**
@@ -76,9 +81,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
*
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $user
- * @return array|bool
+ * @param bool $requireGroups (optional) ignored by this plugin, grps info always supplied
+ * @return array|false
*/
- 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;
}
@@ -328,7 +334,7 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
if(empty($line)) continue;
/* 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 = $this->_splitUserData($line);
$row = str_replace('\\:', ':', $row);
$row = str_replace('\\\\', '\\', $row);
@@ -341,6 +347,33 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
}
}
+ protected function _splitUserData($line){
+ // due to a bug in PCRE 6.6, preg_split will fail with the regex we use here
+ // refer github issues 877 & 885
+ if ($this->_pregsplit_safe){
+ return preg_split('/(?<![^\\\\]\\\\)\:/', $line, 5); // allow for : escaped as \:
+ }
+
+ $row = array();
+ $piece = '';
+ $len = strlen($line);
+ for($i=0; $i<$len; $i++){
+ if ($line[$i]=='\\'){
+ $piece .= $line[$i];
+ $i++;
+ if ($i>=$len) break;
+ } else if ($line[$i]==':'){
+ $row[] = $piece;
+ $piece = '';
+ continue;
+ }
+ $piece .= $line[$i];
+ }
+ $row[] = $piece;
+
+ return $row;
+ }
+
/**
* return true if $user + $info match $filter criteria, false otherwise
*
diff --git a/lib/plugins/config/admin.php b/lib/plugins/config/admin.php
index 835d27775..9202a221b 100644
--- a/lib/plugins/config/admin.php
+++ b/lib/plugins/config/admin.php
@@ -32,6 +32,9 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
var $_session_started = false;
var $_localised_prompts = false;
+ /**
+ * @return int
+ */
function getMenuSort() { return 100; }
/**
@@ -40,14 +43,20 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
function handle() {
global $ID, $INPUT;
- if (!$this->_restore_session()) return $this->_close_session();
- if ($INPUT->int('save') != 1) return $this->_close_session();
- if (!checkSecurityToken()) return $this->_close_session();
+ if(!$this->_restore_session() || $INPUT->int('save') != 1 || !checkSecurityToken()) {
+ $this->_close_session();
+ return;
+ }
- if (is_null($this->_config)) { $this->_config = new configuration($this->_file); }
+ if(is_null($this->_config)) {
+ $this->_config = new configuration($this->_file);
+ }
// don't go any further if the configuration is locked
- if ($this->_config->_locked) return $this->_close_session();
+ if($this->_config->locked) {
+ $this->_close_session();
+ return;
+ }
$this->_input = $INPUT->arr('config');
@@ -104,6 +113,7 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
formSecurityToken();
$this->_print_h1('dokuwiki_settings', $this->getLang('_header_dokuwiki'));
+ /** @var setting[] $undefined_settings */
$undefined_settings = array();
$in_fieldset = false;
$first_plugin_fieldset = true;
@@ -162,7 +172,17 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
// show undefined settings list
if ($allow_debug && !empty($undefined_settings)) {
- function _setting_natural_comparison($a, $b) { return strnatcmp($a->_key, $b->_key); }
+ /**
+ * Callback for sorting settings
+ *
+ * @param setting $a
+ * @param setting $b
+ * @return int if $a is lower/equal/higher than $b
+ */
+ function _setting_natural_comparison($a, $b) {
+ return strnatcmp($a->_key, $b->_key);
+ }
+
usort($undefined_settings, '_setting_natural_comparison');
$this->_print_h1('undefined_settings', $this->getLang('_header_undefined'));
ptln('<fieldset>');
@@ -235,6 +255,9 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
if ($this->_session_started) session_write_close();
}
+ /**
+ * @param bool $prompts
+ */
function setupLocale($prompts=false) {
parent::setupLocale();
@@ -245,6 +268,9 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
}
+ /**
+ * @return bool
+ */
function _setup_localised_plugin_prompts() {
global $conf;
@@ -299,6 +325,8 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
* Generates a two-level table of contents for the config plugin.
*
* @author Ben Coburn <btcoburn@silicodon.net>
+ *
+ * @return array
*/
function getTOC() {
if (is_null($this->_config)) { $this->_config = new configuration($this->_file); }
@@ -328,6 +356,7 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
$t[] = html_mktocitem('configuration_manager', $this->getLang('_configuration_manager'), 1);
$t[] = html_mktocitem('dokuwiki_settings', $this->getLang('_header_dokuwiki'), 1);
+ /** @var setting $setting */
foreach($toc['conf'] as $setting) {
$name = $setting->prompt($this);
$t[] = html_mktocitem($setting->_key, $name, 2);
@@ -352,6 +381,10 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
return $t;
}
+ /**
+ * @param string $id
+ * @param string $text
+ */
function _print_h1($id, $text) {
ptln('<h1 id="'.$id.'">'.$text.'</h1>');
}
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 8dae23110..590631dae 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -10,7 +10,9 @@
if(!defined('CM_KEYMARKER')) define('CM_KEYMARKER','____');
if (!class_exists('configuration')) {
-
+ /**
+ * Class configuration
+ */
class configuration {
var $_name = 'conf'; // name of the config variable found in the files (overridden by $config['varname'])
@@ -151,6 +153,8 @@ if (!class_exists('configuration')) {
/**
* Update last modified time stamp of the config file
+ *
+ * @return bool
*/
public function touch_settings(){
if ($this->locked) return false;
@@ -285,6 +289,10 @@ if (!class_exists('configuration')) {
/**
* not used ... conf's contents are an array!
* reduce any multidimensional settings to one dimension using CM_KEYMARKER
+ *
+ * @param $conf
+ * @param string $prefix
+ * @return array
*/
protected function _flatten($conf,$prefix='') {
@@ -403,6 +411,9 @@ if (!class_exists('configuration')) {
}
if (!class_exists('setting')) {
+ /**
+ * Class setting
+ */
class setting {
var $_key = '';
@@ -452,7 +463,7 @@ if (!class_exists('setting')) {
* - if changed value passes error check, set $this->_local to the new value
*
* @param mixed $input the new value
- * @return boolean true if changed, false otherwise (incl. on error)
+ * @return boolean true if changed, false otherwise (also on error)
*/
public function update($input) {
if (is_null($input)) return false;
@@ -476,10 +487,9 @@ if (!class_exists('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)
+ * @return array with content array(string $label_html, string $input_html)
*/
public function html(&$plugin, $echo=false) {
- $value = '';
$disable = '';
if ($this->is_protected()) {
@@ -503,6 +513,10 @@ if (!class_exists('setting')) {
/**
* Generate string to save setting value to file according to $fmt
+ *
+ * @param string $var name of variable
+ * @param string $fmt save format
+ * @return string
*/
public function out($var, $fmt='php') {
@@ -556,7 +570,7 @@ if (!class_exists('setting')) {
/**
* Returns caution
*
- * @return bool|string caution string, otherwise false for invalid caution
+ * @return false|string caution string, otherwise false for invalid caution
*/
public function caution() {
if (!empty($this->_caution)) {
@@ -603,12 +617,15 @@ if (!class_exists('setting')) {
if (!class_exists('setting_array')) {
+ /**
+ * Class setting_array
+ */
class setting_array extends setting {
/**
* Create an array from a string
*
- * @param $string
+ * @param string $string
* @return array
*/
protected function _from_string($string){
@@ -622,7 +639,7 @@ if (!class_exists('setting_array')) {
/**
* Create a string from an array
*
- * @param $array
+ * @param array $array
* @return string
*/
protected function _from_array($array){
@@ -657,13 +674,23 @@ if (!class_exists('setting_array')) {
return true;
}
+ /**
+ * Escaping
+ *
+ * @param string $string
+ * @return string
+ */
protected function _escape($string) {
$tr = array("\\" => '\\\\', "'" => '\\\'');
return "'".strtr( cleanText($string), $tr)."'";
}
/**
- * generate string to save setting value to file according to $fmt
+ * Generate string to save setting value to file according to $fmt
+ *
+ * @param string $var name of variable
+ * @param string $fmt save format
+ * @return string
*/
function out($var, $fmt='php') {
@@ -680,8 +707,14 @@ if (!class_exists('setting_array')) {
return $out;
}
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo=false) {
- $value = '';
$disable = '';
if ($this->is_protected()) {
@@ -706,9 +739,18 @@ if (!class_exists('setting_array')) {
}
if (!class_exists('setting_string')) {
+ /**
+ * Class setting_string
+ */
class setting_string extends setting {
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo=false) {
- $value = '';
$disable = '';
if ($this->is_protected()) {
@@ -733,10 +775,21 @@ if (!class_exists('setting_string')) {
}
if (!class_exists('setting_password')) {
+ /**
+ * Class setting_password
+ */
class setting_password extends setting_string {
var $_code = 'plain'; // mechanism to be used to obscure passwords
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
if ($this->is_protected()) return false;
if (!$input) return false;
@@ -751,9 +804,15 @@ if (!class_exists('setting_password')) {
return true;
}
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo=false) {
- $value = '';
$disable = $this->is_protected() ? 'disabled="disabled"' : '';
$key = htmlspecialchars($this->_key);
@@ -766,7 +825,9 @@ if (!class_exists('setting_password')) {
}
if (!class_exists('setting_email')) {
-
+ /**
+ * Class setting_email
+ */
class setting_email extends setting_string {
var $_multiple = false;
var $_placeholders = false;
@@ -775,6 +836,7 @@ if (!class_exists('setting_email')) {
* update setting with user provided value $input
* if value fails error check, save it
*
+ * @param mixed $input
* @return boolean true if changed, false otherwise (incl. on error)
*/
function update($input) {
@@ -829,7 +891,17 @@ if (!class_exists('setting_email')) {
* @deprecated 2013-02-16
*/
if (!class_exists('setting_richemail')) {
+ /**
+ * Class setting_richemail
+ */
class setting_richemail extends setting_email {
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
$this->_placeholders = true;
return parent::update($input);
@@ -839,6 +911,9 @@ if (!class_exists('setting_richemail')) {
if (!class_exists('setting_numeric')) {
+ /**
+ * Class setting_numeric
+ */
class setting_numeric extends setting_string {
// This allows for many PHP syntax errors...
// var $_pattern = '/^[-+\/*0-9 ]*$/';
@@ -847,6 +922,14 @@ if (!class_exists('setting_numeric')) {
var $_min = null;
var $_max = null;
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
$local = $this->_local;
$valid = parent::update($input);
@@ -863,6 +946,13 @@ if (!class_exists('setting_numeric')) {
return $valid;
}
+ /**
+ * Generate string to save setting value to file according to $fmt
+ *
+ * @param string $var name of variable
+ * @param string $fmt save format
+ * @return string
+ */
function out($var, $fmt='php') {
if ($this->is_protected()) return '';
@@ -881,6 +971,9 @@ if (!class_exists('setting_numeric')) {
}
if (!class_exists('setting_numericopt')) {
+ /**
+ * Class setting_numericopt
+ */
class setting_numericopt extends setting_numeric {
// just allow an empty config
var $_pattern = '/^(|[-]?[0-9]+(?:[-+*][0-9]+)*)$/';
@@ -888,10 +981,18 @@ if (!class_exists('setting_numericopt')) {
}
if (!class_exists('setting_onoff')) {
+ /**
+ * Class setting_onoff
+ */
class setting_onoff extends setting_numeric {
-
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo = false) {
- $value = '';
$disable = '';
if ($this->is_protected()) {
@@ -909,6 +1010,14 @@ if (!class_exists('setting_onoff')) {
return array($label,$input);
}
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
if ($this->is_protected()) return false;
@@ -923,11 +1032,21 @@ if (!class_exists('setting_onoff')) {
}
if (!class_exists('setting_multichoice')) {
+ /**
+ * Class setting_multichoice
+ */
class setting_multichoice extends setting_string {
var $_choices = array();
+ var $lang; //some custom language strings are stored in setting
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo = false) {
- $value = '';
$disable = '';
$nochoice = '';
@@ -970,6 +1089,14 @@ if (!class_exists('setting_multichoice')) {
return array($label,$input);
}
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
if (is_null($input)) return false;
if ($this->is_protected()) return false;
@@ -987,10 +1114,20 @@ if (!class_exists('setting_multichoice')) {
if (!class_exists('setting_dirchoice')) {
+ /**
+ * Class setting_dirchoice
+ */
class setting_dirchoice extends setting_multichoice {
var $_dir = '';
+ /**
+ * 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) {
// populate $this->_choices with a list of directories
@@ -1016,12 +1153,18 @@ if (!class_exists('setting_dirchoice')) {
if (!class_exists('setting_hidden')) {
+ /**
+ * Class setting_hidden
+ */
class setting_hidden extends setting {
// Used to explicitly ignore a setting in the configuration manager.
}
}
if (!class_exists('setting_fieldset')) {
+ /**
+ * Class setting_fieldset
+ */
class setting_fieldset extends setting {
// A do-nothing class used to detect the 'fieldset' type.
// Used to start a new settings "display-group".
@@ -1029,6 +1172,9 @@ if (!class_exists('setting_fieldset')) {
}
if (!class_exists('setting_undefined')) {
+ /**
+ * Class setting_undefined
+ */
class setting_undefined extends setting_hidden {
// A do-nothing class used to detect settings with no metadata entry.
// Used internaly to hide undefined settings, and generate the undefined settings list.
@@ -1036,6 +1182,9 @@ if (!class_exists('setting_undefined')) {
}
if (!class_exists('setting_no_class')) {
+ /**
+ * Class setting_no_class
+ */
class setting_no_class extends setting_undefined {
// A do-nothing class used to detect settings with a missing setting class.
// Used internaly to hide undefined settings, and generate the undefined settings list.
@@ -1043,6 +1192,9 @@ if (!class_exists('setting_no_class')) {
}
if (!class_exists('setting_no_default')) {
+ /**
+ * Class setting_no_default
+ */
class setting_no_default extends setting_undefined {
// A do-nothing class used to detect settings with no default value.
// Used internaly to hide undefined settings, and generate the undefined settings list.
@@ -1050,11 +1202,22 @@ if (!class_exists('setting_no_default')) {
}
if (!class_exists('setting_multicheckbox')) {
+ /**
+ * Class setting_multicheckbox
+ */
class setting_multicheckbox extends setting_string {
var $_choices = array();
var $_combine = array();
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
if ($this->is_protected()) return false;
@@ -1075,9 +1238,15 @@ if (!class_exists('setting_multicheckbox')) {
return true;
}
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo=false) {
- $value = '';
$disable = '';
if ($this->is_protected()) {
@@ -1125,7 +1294,7 @@ if (!class_exists('setting_multicheckbox')) {
// handle any remaining values
$other = join(',',$value);
- $class = (count($default == count($value)) && (count($value) == count(array_intersect($value,$default)))) ?
+ $class = ((count($default) == count($value)) && (count($value) == count(array_intersect($value,$default)))) ?
" selectiondefault" : "";
$input .= '<div class="other'.$class.'">'."\n";
@@ -1139,6 +1308,9 @@ if (!class_exists('setting_multicheckbox')) {
/**
* convert comma separated list to an array and combine any complimentary values
+ *
+ * @param string $str
+ * @return array
*/
function _str2array($str) {
$array = explode(',',$str);
@@ -1162,6 +1334,9 @@ if (!class_exists('setting_multicheckbox')) {
/**
* convert array of values + other back to a comma separated list, incl. splitting any combined values
+ *
+ * @param array $input
+ * @return string
*/
function _array2str($input) {
@@ -1190,6 +1365,9 @@ if (!class_exists('setting_multicheckbox')) {
}
if (!class_exists('setting_regex')){
+ /**
+ * Class setting_regex
+ */
class setting_regex extends setting_string {
var $_delimiter = '/'; // regex delimiter to be used in testing input
@@ -1213,7 +1391,7 @@ if (!class_exists('setting_regex')){
// see if the regex compiles and runs (we don't check for effectiveness)
$regex = $this->_delimiter . $input . $this->_delimiter . $this->_pregflags;
$lastError = error_get_last();
- $ok = @preg_match($regex,'testdata');
+ @preg_match($regex,'testdata');
if (preg_last_error() != PREG_NO_ERROR || error_get_last() != $lastError) {
$this->_input = $input;
$this->_error = true;
diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php
index 83de802a3..232a8177f 100644
--- a/lib/plugins/config/settings/extra.class.php
+++ b/lib/plugins/config/settings/extra.class.php
@@ -6,8 +6,15 @@
*/
if (!class_exists('setting_sepchar')) {
+ /**
+ * Class setting_sepchar
+ */
class setting_sepchar extends setting_multichoice {
+ /**
+ * @param string $key
+ * @param array|null $param array with metadata of setting
+ */
function setting_sepchar($key,$param=null) {
$str = '_-.';
for ($i=0;$i<strlen($str);$i++) $this->_choices[] = $str{$i};
@@ -19,8 +26,19 @@ if (!class_exists('setting_sepchar')) {
}
if (!class_exists('setting_savedir')) {
+ /**
+ * Class setting_savedir
+ */
class setting_savedir extends setting_string {
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
if ($this->is_protected()) return false;
@@ -40,9 +58,20 @@ if (!class_exists('setting_savedir')) {
}
if (!class_exists('setting_authtype')) {
+ /**
+ * Class setting_authtype
+ */
class setting_authtype extends setting_multichoice {
+ /**
+ * 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) {
+ /** @var $plugin_controller Doku_Plugin_Controller */
global $plugin_controller;
// retrieve auth types provided by plugins
@@ -53,7 +82,16 @@ if (!class_exists('setting_authtype')) {
parent::initialize($default,$local,$protected);
}
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
+ /** @var $plugin_controller Doku_Plugin_Controller */
global $plugin_controller;
// is an update possible/requested?
@@ -92,8 +130,19 @@ if (!class_exists('setting_authtype')) {
}
if (!class_exists('setting_im_convert')) {
+ /**
+ * Class setting_im_convert
+ */
class setting_im_convert extends setting_string {
+ /**
+ * update changed setting with user provided value $input
+ * - if changed value fails error check, save it to $this->_input (to allow echoing later)
+ * - if changed value passes error check, set $this->_local to the new value
+ *
+ * @param mixed $input the new value
+ * @return boolean true if changed, false otherwise (also on error)
+ */
function update($input) {
if ($this->is_protected()) return false;
@@ -115,14 +164,24 @@ if (!class_exists('setting_im_convert')) {
}
if (!class_exists('setting_disableactions')) {
+ /**
+ * Class setting_disableactions
+ */
class setting_disableactions extends setting_multicheckbox {
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo=false) {
global $lang;
// make some language adjustments (there must be a better way)
// transfer some DokuWiki language strings to the plugin
- if (!$plugin->localised) $this->setupLocale();
+ if (!$plugin->localised) $plugin->setupLocale();
$plugin->lang[$this->_key.'_revisions'] = $lang['btn_revs'];
foreach ($this->_choices as $choice)
@@ -134,10 +193,20 @@ if (!class_exists('setting_disableactions')) {
}
if (!class_exists('setting_compression')) {
+ /**
+ * Class setting_compression
+ */
class setting_compression extends setting_multichoice {
var $_choices = array('0'); // 0 = no compression, always supported
+ /**
+ * 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) {
// populate _choices with the compression methods supported by this php installation
@@ -150,16 +219,26 @@ if (!class_exists('setting_compression')) {
}
if (!class_exists('setting_license')) {
+ /**
+ * Class setting_license
+ */
class setting_license extends setting_multichoice {
var $_choices = array(''); // none choosen
+ /**
+ * 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) {
global $license;
foreach($license as $key => $data){
$this->_choices[] = $key;
- $this->lang[$this->_key.'_o_'.$key] = $data['name'];
+ $this->lang[$this->_key.'_o_'.$key] = $data['name']; // stored in setting
}
parent::initialize($default,$local,$protected);
@@ -169,9 +248,20 @@ if (!class_exists('setting_license')) {
if (!class_exists('setting_renderer')) {
+ /**
+ * Class setting_renderer
+ */
class setting_renderer extends setting_multichoice {
var $_prompts = array();
-
+ var $_format = null;
+
+ /**
+ * 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) {
$format = $this->_format;
@@ -188,11 +278,18 @@ if (!class_exists('setting_renderer')) {
parent::initialize($default,$local,$protected);
}
+ /**
+ * 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 with content array(string $label_html, string $input_html)
+ */
function html(&$plugin, $echo=false) {
// make some language adjustments (there must be a better way)
// transfer some plugin names to the config plugin
- if (!$plugin->localised) $this->setupLocale();
+ if (!$plugin->localised) $plugin->setupLocale();
foreach ($this->_choices as $choice) {
if (!isset($plugin->lang[$this->_key.'_o_'.$choice])) {
diff --git a/lib/plugins/extension/admin.php b/lib/plugins/extension/admin.php
index 99c74848b..71257cf43 100644
--- a/lib/plugins/extension/admin.php
+++ b/lib/plugins/extension/admin.php
@@ -54,6 +54,10 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin {
msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1);
}
+ if(!in_array('ssl', stream_get_transports())) {
+ msg($this->getLang('nossl'), -1);
+ }
+
/* @var helper_plugin_extension_extension $extension */
$extension = $this->loadHelper('extension_extension');
@@ -75,10 +79,10 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin {
case 'uninstall':
$extension->setExtension($extname);
$status = $extension->uninstall();
- if($status !== true) {
- msg($status, -1);
- } else {
+ if($status) {
msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getDisplayName())), 1);
+ } else {
+ msg(sprintf($this->getLang('msg_delete_failed'), hsc($extension->getDisplayName())), -1);
}
break;
case 'enable';
diff --git a/lib/plugins/extension/helper/extension.php b/lib/plugins/extension/helper/extension.php
index 2aca0e218..dfa624907 100644
--- a/lib/plugins/extension/helper/extension.php
+++ b/lib/plugins/extension/helper/extension.php
@@ -799,7 +799,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
*
* The directory is registered for cleanup when the class is destroyed
*
- * @return bool|string
+ * @return false|string
*/
protected function mkTmpDir(){
$dir = io_mktmpdir();
@@ -1079,7 +1079,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
*
* @author Andreas Gohr <andi@splitbrain.org>
* @param string $file The file to analyze
- * @return string|bool false if the file can't be read, otherwise an "extension"
+ * @return string|false false if the file can't be read, otherwise an "extension"
*/
private function guess_archive($file) {
$fh = fopen($file, 'rb');
@@ -1095,6 +1095,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
/**
* Copy with recursive sub-directory support
+ *
+ * @param string $src filename path to file
+ * @param string $dst filename path to file
+ * @return bool|int|string
*/
private function dircopy($src, $dst) {
global $conf;
diff --git a/lib/plugins/extension/helper/list.php b/lib/plugins/extension/helper/list.php
index 47edca8c1..872cccc8c 100644
--- a/lib/plugins/extension/helper/list.php
+++ b/lib/plugins/extension/helper/list.php
@@ -333,7 +333,6 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
* Shortens the URL for display
*
* @param string $url
- *
* @return string HTML link
*/
function shortlink($url){
@@ -387,7 +386,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'));
@@ -401,13 +401,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);
@@ -467,6 +460,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
* @return string The HTML code
*/
function make_actions(helper_plugin_extension_extension $extension) {
+ global $conf;
$return = '';
$errors = '';
@@ -498,6 +492,10 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
$errors .= '<p class="permerror">'.$this->getLang('git').'</p>';
}
+ if ($extension->isEnabled() && in_array('Auth', $extension->getTypes()) && $conf['auth'] != $extension->getID()) {
+ $errors .= '<p class="permerror">'.$this->getLang('auth').'</p>';
+ }
+
}else{
if (($canmod = $extension->canModify()) === true) {
if ($extension->getDownloadURL()) {
diff --git a/lib/plugins/extension/helper/repository.php b/lib/plugins/extension/helper/repository.php
index 6ffe89eb7..5dc2707cf 100644
--- a/lib/plugins/extension/helper/repository.php
+++ b/lib/plugins/extension/helper/repository.php
@@ -32,7 +32,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
$request_needed = false;
foreach ($list as $name) {
$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;
$request_data['ext'][] = $name;
@@ -64,7 +64,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
public function hasAccess() {
if ($this->has_access === null) {
$cache = new cache('##extension_manager###hasAccess', '.repo');
- $result = null;
+
if (!$cache->useCache(array('age' => 3600 * 24, 'purge'=>1))) {
$httpclient = new DokuHTTPClient();
$httpclient->timeout = 5;
@@ -91,7 +91,7 @@ class helper_plugin_extension_repository extends DokuWiki_Plugin {
*/
public function getData($name) {
$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;
$httpclient = new DokuHTTPClient();
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/intro_templates.txt b/lib/plugins/extension/lang/cs/intro_templates.txt
new file mode 100644
index 000000000..45abe952c
--- /dev/null
+++ b/lib/plugins/extension/lang/cs/intro_templates.txt
@@ -0,0 +1 @@
+Toto jsou šablony, které jsou momentálně nainstalovány v této DokuWiki. Aktuálně používanu šablonu lze vybrat ve [[?do=admin&page=config|Správci rozšíř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..dc38afd52
--- /dev/null
+++ b/lib/plugins/extension/lang/cs/lang.php
@@ -0,0 +1,92 @@
+<?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['pluginlistsaveerror'] = 'Došlo k chybě při ukládání seznamu zásuvných modulů';
+$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['extensionby'] = '<strong>%s</strong> od %s';
+$lang['screenshot'] = 'Screenshot %s';
+$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['downloadurl'] = 'URL stahování:';
+$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['conflicts'] = 'Koliduje s:';
+$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['status_bundled'] = 'svázaný';
+$lang['msg_enabled'] = 'Zásuvný modul %s povolen';
+$lang['msg_disabled'] = 'Zásuvný modul %s zakázán';
+$lang['msg_delete_success'] = 'Rozšíření odinstalováno';
+$lang['msg_delete_failed'] = 'Odinstalování rozšíření %s selhalo';
+$lang['msg_template_install_success'] = 'Šablona %s úspěšně nainstalována';
+$lang['msg_template_update_success'] = 'Šablona %s úspěšně aktualizována';
+$lang['msg_plugin_install_success'] = 'Zásuvný modul %s úspěšně nainstalován.';
+$lang['msg_plugin_update_success'] = 'Zásuvný modul %s úspěšně aktualizován.';
+$lang['msg_upload_failed'] = 'Nahrávání souboru selhalo';
+$lang['missing_dependency'] = '<strong>Chybějící nebo zakázaná závislost:</strong> %s';
+$lang['security_issue'] = '<strong>Bezpečnostní problém:</strong> %s';
+$lang['security_warning'] = '<strong>Bezpečnostní varování:</strong> %s';
+$lang['update_available'] = '<strong>Aktualizace:</strong> Je dostupná nová verze %s.';
+$lang['wrong_folder'] = '<strong>Zásuvný modul nesprávně nainstalován:</strong> Přejmenujte adresář modulu "%s" na "%s".';
+$lang['url_change'] = '<strong>URL se změnila:</strong> URL pro stahování se změnila od poslední aktualizace. Před další aktualizací tohoto rozšíření ověřte správnost nové URL.<br />Nová: %s<br />Stará: %s';
+$lang['error_badurl'] = 'Adresy URL by měly začínat s http nebo https';
+$lang['error_dircreate'] = 'Nelze vytvořit dočasný adresář pro přijetí stahování';
+$lang['error_download'] = 'Nelze stáhnout soubor: %s';
+$lang['error_decompress'] = 'Selhalo rozbalení staženého souboru. Toto je nejspíš důsledek poškození souboru při přenosu, zkuste soubor stáhnout znovu; případně nemusel být rozpoznán formát sbaleného souboru a bude třeba přistoupit k ruční instalaci. ';
+$lang['error_findfolder'] = 'Nelze rozpoznat adresář pro rozšíření, je třeba stáhnout a instalovat ručně';
+$lang['error_copy'] = 'Došlo k chybě kopírování souborů při pokusu nainstalovat soubory do adresáře <em>%s</em>: může být plný disk nebo špatně nastavena přístupová práva. Tato chyba mohla zapříčinit pouze částečnou instalaci zásuvného modulu a uvést wiki do nestabilního stavu.';
+$lang['noperms'] = 'Nelze zapisovat do adresáře pro rozšíření';
+$lang['notplperms'] = 'Nelze zapisovat do odkládacího adresáře';
+$lang['nopluginperms'] = 'Nelze zapisovat do adresáře se zásuvnými moduly';
+$lang['git'] = 'Toto rozšíření bylo nainstalováno přes git. Touto cestou ho nejspíš tady aktualizovat nechcete.';
+$lang['auth'] = 'Tento ověřovací zásuvný modul není povolen v nastavení, zvažte jeho deaktivaci.';
+$lang['install_url'] = 'Nainstalovat z URL:';
+$lang['install_upload'] = 'Nahrát rozšíření:';
+$lang['repo_error'] = 'Nelze kontaktovat repozitář se zásuvnými moduly. Ujistěte se, že váš server může kontaktovat www.dokuwiki.org a zkontrolujte nastavení proxy.';
+$lang['nossl'] = 'Použité PHP pravděpodobně nepodporuje SSL. Stažení mnoha DokuWiki rozšíření nebude fungovat.';
diff --git a/lib/plugins/extension/lang/da/lang.php b/lib/plugins/extension/lang/da/lang.php
new file mode 100644
index 000000000..c341bc5f9
--- /dev/null
+++ b/lib/plugins/extension/lang/da/lang.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Søren Birk <soer9648@eucl.dk>
+ */
+$lang['update_available'] = '<strong>Opdatering:</strong> Ny version %s er tilgængelig.';
+$lang['wrong_folder'] = '<strong>Plugin ikke installeret korrekt:</strong> Omdøb plugin-mappe "%s" til "%s".';
+$lang['url_change'] = '<strong>URL ændret:</strong> Download-URL er blevet ændret siden sidste download. Kontrollér om den nye URL er valid, inden udvidelsen opdateres.<br />Ny: %s<br />Gammel: %s';
+$lang['error_badurl'] = 'URL\'er skal starte med http eller https';
+$lang['error_dircreate'] = 'Ikke i stand til at oprette midlertidig mappe til modtagelse af download';
+$lang['error_download'] = 'Ikke i stand til at downloade filen: %s';
+$lang['error_decompress'] = 'Ikke i stand til at dekomprimere den downloadede fil. Dette kan være et resultat af en dårlig download, hvor du i så fald bør du prøve igen; eller komprimeringsformatet kan være ukendt, hvor du i så fald bliver nød til at downloade og installere manuelt.';
+$lang['error_findfolder'] = 'Ikke i stand til at identificere udvidelsesmappe - du bliver nød til at downloade og installere manuelt.';
+$lang['error_copy'] = 'Der opstod en kopieringsfejl under installation af filer til mappen <em>%s</em>: disken kan være fuld, eller mangel på fil-tilladelser. Dette kan have resulteret i et delvist installeret plugin, og efterladt din wiki-installation ustabil.';
+$lang['noperms'] = 'Udvidelsesmappe er ikke skrivbar';
+$lang['notplperms'] = 'Skabelonmappe er ikke skrivbar';
+$lang['nopluginperms'] = 'Pluginmappe er ikke skrivbar';
+$lang['git'] = 'Udvidelsen blev installeret via git - du vil muligvis ikke opdatere herfra.';
+$lang['auth'] = 'Auth-plugin er ikke aktiveret i konfigurationen - overvej at deaktivere den.';
+$lang['install_url'] = 'Installér fra URL:';
+$lang['install_upload'] = 'Upload Udvidelse:';
+$lang['repo_error'] = 'Plugin-arkivet kunne ikke kontaktes. Kontrollér at din server kan kontakte www.dokuwiki.org kontrollér dine proxy-indstillinger.';
diff --git a/lib/plugins/extension/lang/en/lang.php b/lib/plugins/extension/lang/en/lang.php
index 72c9b9e2d..f545b6da3 100644
--- a/lib/plugins/extension/lang/en/lang.php
+++ b/lib/plugins/extension/lang/en/lang.php
@@ -69,7 +69,8 @@ $lang['status_bundled'] = 'bundled';
$lang['msg_enabled'] = 'Plugin %s enabled';
$lang['msg_disabled'] = 'Plugin %s disabled';
-$lang['msg_delete_success'] = 'Extension uninstalled';
+$lang['msg_delete_success'] = 'Extension %s uninstalled';
+$lang['msg_delete_failed'] = 'Uninstalling Extension %s failed';
$lang['msg_template_install_success'] = 'Template %s installed successfully';
$lang['msg_template_update_success'] = 'Template %s updated successfully';
$lang['msg_plugin_install_success'] = 'Plugin %s installed successfully';
@@ -94,8 +95,10 @@ $lang['noperms'] = 'Extension directory is not writable';
$lang['notplperms'] = 'Template directory is not writable';
$lang['nopluginperms'] = 'Plugin directory is not writable';
$lang['git'] = 'This extension was installed via git, you may not want to update it here.';
+$lang['auth'] = 'This auth plugin is not enabled in configuration, consider disabling it.';
$lang['install_url'] = 'Install from URL:';
$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
+$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.';
+$lang['nossl'] = 'Your PHP seems to miss SSL support. Downloading will not work for many DokuWiki extensions.'; \ No newline at end of file
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/fi/lang.php b/lib/plugins/extension/lang/fi/lang.php
new file mode 100644
index 000000000..a154f2563
--- /dev/null
+++ b/lib/plugins/extension/lang/fi/lang.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Jussi Takala <jussi.takala@live.fi>
+ */
+$lang['tab_plugins'] = 'Asennetut liitännäiset';
+$lang['tab_search'] = 'Etsi ja asenna';
+$lang['tab_install'] = 'Manuaalinen asennus';
+$lang['notimplemented'] = 'Tätä ominaisuutta ei ole vielä toteutettu';
+$lang['notinstalled'] = 'Tätä laajennusta ei ole asennettu';
+$lang['alreadyenabled'] = 'Tämä laajennus on jo käytössä';
+$lang['alreadydisabled'] = 'Tämä laajennus on jo otettu pois käytöstä';
+$lang['pluginlistsaveerror'] = 'Tapahtui virhe tallentaessa liitännäislistaa';
+$lang['unknownauthor'] = 'Tuntematon tekijä';
+$lang['unknownversion'] = 'Tuntematon versio';
+$lang['btn_info'] = 'Näytä lisää tietoa';
+$lang['btn_update'] = 'Päivitä';
+$lang['btn_enable'] = 'Ota käyttöön';
+$lang['btn_disable'] = 'Poista käytöstä';
+$lang['btn_install'] = 'Asenna';
+$lang['btn_reinstall'] = 'Uudelleenasenna';
+$lang['js']['reallydel'] = 'Haluatko varmasti poistaa tämän laajennuksen?';
+$lang['search_for'] = 'Etsi laajennusta:';
+$lang['search'] = 'Etsi';
+$lang['downloadurl'] = 'Lataa URL-osoite';
+$lang['installed_version'] = 'Asennettu versio';
+$lang['install_date'] = 'Sinun viimeinen päivitys:';
+$lang['available_version'] = 'Saatavissa oleva versio:';
+$lang['status_installed'] = 'asennettu';
+$lang['status_protected'] = 'suojattu';
+$lang['status_enabled'] = 'otettu käyttöön';
+$lang['status_disabled'] = 'otettu pois käytöstä';
+$lang['status_plugin'] = 'liitännäinen';
+$lang['install_url'] = 'Asenna URL-osoitteesta:';
+$lang['install_upload'] = 'Ladattu laajennus:';
diff --git a/lib/plugins/extension/lang/hr/lang.php b/lib/plugins/extension/lang/hr/lang.php
index 890681301..f43defcb1 100644
--- a/lib/plugins/extension/lang/hr/lang.php
+++ b/lib/plugins/extension/lang/hr/lang.php
@@ -6,24 +6,24 @@
* @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['tab_plugins'] = 'Ugrađeni dodatci';
+$lang['tab_templates'] = 'Ugrađeni predlošci';
+$lang['tab_search'] = 'Potraži i ugradi';
+$lang['tab_install'] = 'Ručna ugradnja';
$lang['notimplemented'] = 'Ova mogućnost još nije napravljena';
-$lang['notinstalled'] = 'Dodatak nije instaliran';
+$lang['notinstalled'] = 'Dodatak nije ugrađen';
$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'] = 'Ažuriraj';
+$lang['btn_update'] = 'Dogradi';
$lang['btn_uninstall'] = 'Ukloni';
$lang['btn_enable'] = 'Omogući';
$lang['btn_disable'] = 'Onemogući';
-$lang['btn_install'] = 'Postavi';
-$lang['btn_reinstall'] = 'Ponovno postavi';
+$lang['btn_install'] = 'Ugradi';
+$lang['btn_reinstall'] = 'Ponovno ugradi';
$lang['js']['reallydel'] = 'Zaista ukloniti ovo proširenje?';
$lang['search_for'] = 'Pretraži proširenja';
$lang['search'] = 'Pretraži';
@@ -34,9 +34,55 @@ $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['installed'] = 'Ugrađeno:';
$lang['downloadurl'] = 'URL adresa preuzimanja:';
$lang['repository'] = 'Repozitorij:';
$lang['unknown'] = '<em>nepoznat</em>';
-$lang['installed_version'] = 'Postavljena inačica:';
+$lang['installed_version'] = 'Ugrađena 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/it/lang.php b/lib/plugins/extension/lang/it/lang.php
index 7dff6c5b2..1aa658e0f 100644
--- a/lib/plugins/extension/lang/it/lang.php
+++ b/lib/plugins/extension/lang/it/lang.php
@@ -5,11 +5,18 @@
*
* @author Francesco <francesco.cavalli@hotmail.com>
* @author Fabio <fabioslurp@yahoo.it>
+ * @author Torpedo <dgtorpedo@gmail.com>
*/
+$lang['unknownauthor'] = 'Autore sconosciuto';
+$lang['unknownversion'] = 'Revisione sconosciuta';
+$lang['btn_info'] = 'Mostra maggiori informazioni';
+$lang['btn_update'] = 'Aggiorna';
+$lang['btn_uninstall'] = 'Disinstalla';
$lang['btn_enable'] = 'Abilita';
$lang['btn_disable'] = 'Disabilita';
$lang['btn_install'] = 'Installa';
$lang['btn_reinstall'] = 'Reinstalla';
+$lang['js']['reallydel'] = 'Sicuro di disinstallare questa estensione?';
$lang['search'] = 'Cerca';
$lang['homepage_link'] = 'Documenti';
$lang['bugs_features'] = 'Bug';
@@ -18,13 +25,18 @@ $lang['author_hint'] = 'Cerca estensioni per questo autore';
$lang['installed'] = 'Installato:';
$lang['downloadurl'] = 'URL download:';
$lang['repository'] = 'Repository';
+$lang['unknown'] = '<em>sconosciuto</em>';
$lang['installed_version'] = 'Versione installata';
$lang['install_date'] = 'Il tuo ultimo aggiornamento:';
$lang['available_version'] = 'Versione disponibile:';
$lang['compatible'] = 'Compatibile con:';
+$lang['depends'] = 'Dipende da:';
$lang['similar'] = 'Simile a:';
+$lang['conflicts'] = 'Conflitto con:';
$lang['donate'] = 'Simile a questo?';
+$lang['donate_action'] = 'Paga un caffè all\'autore!';
$lang['repo_retry'] = 'Riprova';
+$lang['provides'] = 'Fornisce:';
$lang['status'] = 'Status:';
$lang['status_installed'] = 'installato';
$lang['status_not_installed'] = 'non installato';
@@ -34,6 +46,15 @@ $lang['status_disabled'] = 'disabilitato';
$lang['status_unmodifiable'] = 'inmodificabile';
$lang['status_plugin'] = 'plugin';
$lang['status_template'] = 'modello';
+$lang['msg_enabled'] = 'Plugin %s abilitato';
+$lang['msg_disabled'] = 'Plugin %s disabilitato';
+$lang['msg_delete_success'] = 'Estensione %s disinstallata';
+$lang['msg_plugin_install_success'] = 'Plugin %s installato con successo';
+$lang['msg_plugin_update_success'] = 'Plugin %s aggiornato con successo';
+$lang['msg_upload_failed'] = 'Caricamento del file fallito';
+$lang['missing_dependency'] = '<strong>Dipendenza mancante o disabilitata: </strong> %s';
+$lang['update_available'] = '<strong>Aggiornamento:</strong> Nuova versione %s disponibile.';
+$lang['wrong_folder'] = '<strong>Plugin non installato correttamente:</strong> rinomina la directory del plugin "%s" in "%s".';
$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';
diff --git a/lib/plugins/extension/lang/ja/lang.php b/lib/plugins/extension/lang/ja/lang.php
index dec46d629..ce6ed2b97 100644
--- a/lib/plugins/extension/lang/ja/lang.php
+++ b/lib/plugins/extension/lang/ja/lang.php
@@ -5,6 +5,7 @@
*
* @author Hideaki SAWADA <chuno@live.jp>
* @author PzF_X <jp_minecraft@yahoo.co.jp>
+ * @author Satoshi Sahara <sahara.satoshi@gmail.com>
*/
$lang['menu'] = '拡張機能管理';
$lang['tab_plugins'] = 'インストール済プラグイン';
@@ -62,7 +63,8 @@ $lang['status_template'] = 'テンプレート';
$lang['status_bundled'] = '同梱';
$lang['msg_enabled'] = '%s プラグインを有効化しました。';
$lang['msg_disabled'] = '%s プラグインを無効化しました。';
-$lang['msg_delete_success'] = '拡張機能をアンインストールしました。';
+$lang['msg_delete_success'] = '拡張機能 %s をアンインストールしました。';
+$lang['msg_delete_failed'] = '拡張機能 %s のアンインストールに失敗しました。';
$lang['msg_template_install_success'] = '%s テンプレートをインストールできました。';
$lang['msg_template_update_success'] = '%s テンプレートを更新できました。';
$lang['msg_plugin_install_success'] = '%s プラグインをインストールできました。';
@@ -84,6 +86,8 @@ $lang['noperms'] = '拡張機能ディレクトリが書き込み
$lang['notplperms'] = 'テンプレートディレクトリが書き込み不可です。';
$lang['nopluginperms'] = 'プラグインディレクトリが書き込み不可です。';
$lang['git'] = 'この拡張機能は Git 経由でインストールされており、ここで更新すべきでないかもしれません。';
+$lang['auth'] = 'この認証プラグインは設定管理画面で無効化されています。';
$lang['install_url'] = 'URL からインストール:';
$lang['install_upload'] = '拡張機能をアップロード:';
$lang['repo_error'] = 'プラグインのリポジトリに接続できません。サーバーが www.dokuwiki.org に接続できることやプロキシの設定を確認して下さい。';
+$lang['nossl'] = 'PHP機能がSSLをサポートしていないため、拡張機能のダウンロードが正常に動作しません。';
diff --git a/lib/plugins/extension/lang/ko/lang.php b/lib/plugins/extension/lang/ko/lang.php
index 53c9b4481..5dc5d8269 100644
--- a/lib/plugins/extension/lang/ko/lang.php
+++ b/lib/plugins/extension/lang/ko/lang.php
@@ -62,7 +62,8 @@ $lang['status_template'] = '템플릿';
$lang['status_bundled'] = '포함';
$lang['msg_enabled'] = '%s 플러그인이 활성화되었습니다';
$lang['msg_disabled'] = '%s 플러그인이 비활성화되었습니다';
-$lang['msg_delete_success'] = '확장 기능이 제거되었습니다';
+$lang['msg_delete_success'] = '%s 확장 기능이 제거되었습니다';
+$lang['msg_delete_failed'] = '%s 확장 기능 제거에 실패했습니다';
$lang['msg_template_install_success'] = '%s 템플릿을 성공적으로 설치했습니다';
$lang['msg_template_update_success'] = '%s 템플릿을 성공적으로 업데이트했습니다';
$lang['msg_plugin_install_success'] = '%s 플러그인을 성공적으로 설치했습니다';
@@ -79,11 +80,13 @@ $lang['error_dircreate'] = '다운로드를 받을 임시 폴더를 만들
$lang['error_download'] = '파일을 다운로드할 수 없습니다: %s';
$lang['error_decompress'] = '다운로드한 파일의 압축을 풀 수 없습니다. 이는 아마도 잘못된 다운로드의 결과로, 이럴 경우 다시 시도해야 합니다; 또는 압축 형식을 알 수 없으며, 이럴 경우 수동으로 다운로드하고 설치해야 합니다.';
$lang['error_findfolder'] = '확장 기능 디렉터리를 식별할 수 없습니다, 수동으로 다운로드하고 설치해야 합니다';
-$lang['error_copy'] = '<em>%s</em> 디렉터리에 파일을 설치하는 동안 파일 복사 오류가 발생했습니다: 디스크가 꽉 찼거나 파일 접근 권한이 잘못되었을 수도 있습니다. 플러그인 설치가 부분적으로 되었거나 불안정하게 위키 설치가 되었을 수 있습니다.';
+$lang['error_copy'] = '<em>%s</em> 디렉터리에 파일을 설치하는 동안 파일 복사 오류가 발생했습니다: 디스크가 꽉 찼거나 파일 접근 권한이 잘못되었을 수도 있습니다. 플러그인이 부분적으로 설치되어 위키가 불안정할지도 모릅니다';
$lang['noperms'] = '확장 기능 디렉터리에 쓸 수 없습니다';
$lang['notplperms'] = '임시 디렉터리에 쓸 수 없습니다';
$lang['nopluginperms'] = '플러그인 디렉터리에 쓸 수 없습니다';
-$lang['git'] = '이 확장 기능은 git을 통해 설치되었으며, 여기에서 업데이트할 수 없을 수 있습니다.';
+$lang['git'] = '이 확장 기능은 git를 통해 설치되었으며, 여기에서 업데이트할 수 없을 수 있습니다.';
+$lang['auth'] = '이 인증 플러그인은 환경 설정에서 활성화할 수 없습니다, 그것을 비활성화하는 것을 고려하세요.';
$lang['install_url'] = 'URL에서 설치:';
$lang['install_upload'] = '확장 기능 올리기:';
$lang['repo_error'] = '플러그인 저장소에 연결할 수 없습니다. 서버가 www.dokuwiki.org에 연결할 수 있는지 확인하고 프록시 설정을 확인하세요.';
+$lang['nossl'] = 'PHP가 SSL 지원을 하지 않는 것으로 보입니다. 많은 도쿠위키 확장 기능의 다운로드가 작동하지 않을 것입니다.';
diff --git a/lib/plugins/extension/lang/nl/lang.php b/lib/plugins/extension/lang/nl/lang.php
index a54924e93..f75f78121 100644
--- a/lib/plugins/extension/lang/nl/lang.php
+++ b/lib/plugins/extension/lang/nl/lang.php
@@ -63,7 +63,7 @@ $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_delete_success'] = 'Uitbreiding %s 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';
diff --git a/lib/plugins/extension/lang/ru/intro_install.txt b/lib/plugins/extension/lang/ru/intro_install.txt
new file mode 100644
index 000000000..7b8ac661b
--- /dev/null
+++ b/lib/plugins/extension/lang/ru/intro_install.txt
@@ -0,0 +1 @@
+Здесь вы можете самостоятельно установить плагины и шаблоны, загрузив их или предоставив прямой URL для скачивания. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/intro_plugins.txt b/lib/plugins/extension/lang/ru/intro_plugins.txt
new file mode 100644
index 000000000..7262516db
--- /dev/null
+++ b/lib/plugins/extension/lang/ru/intro_plugins.txt
@@ -0,0 +1 @@
+Плагины, установленные в вашей DokuWiki. Здесь вы можете их включить или выключить, или даже полностью удалить. Также здесь показываются обновления плагинов, обязательно прочтите документацию плагина перед обновлением. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/intro_search.txt b/lib/plugins/extension/lang/ru/intro_search.txt
new file mode 100644
index 000000000..a8486eab6
--- /dev/null
+++ b/lib/plugins/extension/lang/ru/intro_search.txt
@@ -0,0 +1 @@
+Эта вкладка дает вам доступ ко всем имеющимся сторонним плагинам и шаблонам для DokuWiki. Имейте в виду, что установка стороннего кода может представлять **угрозу безопасности**, возможно вам нужно сперва прочитать о [[doku>security#plugin_security|безопасности плагинов]]. \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/intro_templates.txt b/lib/plugins/extension/lang/ru/intro_templates.txt
new file mode 100644
index 000000000..2d0b74256
--- /dev/null
+++ b/lib/plugins/extension/lang/ru/intro_templates.txt
@@ -0,0 +1 @@
+Это шаблоны, установленные в вашей DokuWiki. Вы можете выбрать шаблон, который нужно использовать в [[?do=admin&page=config|Менеджере Конфигурации]] \ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/lang.php b/lib/plugins/extension/lang/ru/lang.php
index fa1625f28..64db39b78 100644
--- a/lib/plugins/extension/lang/ru/lang.php
+++ b/lib/plugins/extension/lang/ru/lang.php
@@ -5,13 +5,19 @@
*
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Igor Degraf <igordegraf@gmail.com>
+ * @author Type-kun <workwork-1@yandex.ru>
+ * @author Vitaly Filatenko <kot@hacktest.net>
*/
$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'] = 'Отобразить доп. информацию';
@@ -25,8 +31,10 @@ $lang['js']['reallydel'] = 'Действительно удалить эт
$lang['search_for'] = 'Поиск дополнения:';
$lang['search'] = 'Найти';
$lang['extensionby'] = '<strong>%s</strong> — %s';
-$lang['popularity'] = 'Попоулярность: %s%%';
-$lang['bugs_features'] = 'Ошибки';
+$lang['screenshot'] = 'Скриншот: %s';
+$lang['popularity'] = 'Популярность: %s%%';
+$lang['homepage_link'] = 'Описание';
+$lang['bugs_features'] = 'Баг-трекер';
$lang['tags'] = 'Метки:';
$lang['author_hint'] = 'Найти дополнения этого автора';
$lang['installed'] = 'Установлено:';
@@ -43,26 +51,42 @@ $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_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_enabled'] = 'Плагин %s включён';
+$lang['msg_disabled'] = 'Плагин %s отключён';
$lang['msg_delete_success'] = 'Дополнение удалено';
+$lang['msg_delete_failed'] = 'Не удалось удалить расширение %s';
$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['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>Ссылка изменилась:</strong> Ссылка для загрузки изменилась с прошлого раза. Проверьте новую ссылку прежде чем обновлять расширение.<br />Новая: %s<br />Старая: %s';
+$lang['error_badurl'] = 'Ссылки должны начинаться с 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 и также проверьте настройки соединения прокси.';
+$lang['repo_error'] = 'Сайт с плагинами недоступен. Убедитесь, что у сайта есть доступ на www.dokuwiki.org, а также проверьте настройки соединения с Интернетом.';
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/intro_plugins.txt b/lib/plugins/extension/lang/zh-tw/intro_plugins.txt
new file mode 100644
index 000000000..b5b77a267
--- /dev/null
+++ b/lib/plugins/extension/lang/zh-tw/intro_plugins.txt
@@ -0,0 +1 @@
+已經有一些外掛套件被安裝在你的DokuWiki之中。你可以在這裡啟用、禁用,甚至是完全移除它們。如外掛可更新也同時會顯示在這裡,請確保在更新前先閱讀過該套件之文件。 \ 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
index 304aed5ee..79657ffeb 100644
--- a/lib/plugins/extension/lang/zh-tw/lang.php
+++ b/lib/plugins/extension/lang/zh-tw/lang.php
@@ -4,8 +4,77 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Stan <talktostan@gmail.com>
+ * @author June-Hao Hou <junehao@gmail.com>
+ * @author lioujheyu <lioujheyu@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['homepage_link'] = '文件';
+$lang['tags'] = '標籤:';
+$lang['author_hint'] = '搜尋相同作者的延伸功能';
+$lang['installed'] = '已安裝:';
+$lang['downloadurl'] = '下載網址:';
+$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'] = '狀態:';
+$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>網址已變更:</strong> 自從上次下載後下載網址已變更。在更新延伸功能前請先檢查新網址是否可用。<br />新: %s<br />舊: %s';
+$lang['error_download'] = '無法下載檔案:%s';
+$lang['error_decompress'] = '無法解壓縮檔案。這可能是下載品質不佳所致,在這個情況下你應該再試一次;也有可能是因為無法辨識的壓縮格式,在這個情況下你應該自行下載並手動安裝';
+$lang['error_findfolder'] = '無法辨認延伸功能資料夾,你必須自行下載並手動安裝';
+$lang['noperms'] = '延伸功能資料夾無法寫入';
+$lang['notplperms'] = '版型資料夾無法寫入';
+$lang['nopluginperms'] = '外掛資料夾無法寫入';
+$lang['git'] = '此延伸功能是透過git安裝的,最好不要用上傳方式。';
+$lang['install_url'] = '透過網址安裝:';
+$lang['install_upload'] = '上傳延伸功能:';
diff --git a/lib/plugins/info/syntax.php b/lib/plugins/info/syntax.php
index 9265f44d5..773256faf 100644
--- a/lib/plugins/info/syntax.php
+++ b/lib/plugins/info/syntax.php
@@ -44,9 +44,14 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
$this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info');
}
-
/**
* Handle the match
+ *
+ * @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 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){
$match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end
@@ -55,6 +60,11 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
/**
* Create output
+ *
+ * @param string $format string output format being rendered
+ * @param Doku_Renderer $renderer the current renderer object
+ * @param array $data data created by handler()
+ * @return boolean rendered correctly?
*/
function render($format, Doku_Renderer $renderer, $data) {
if($format == 'xhtml'){
@@ -103,8 +113,11 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
* list all installed plugins
*
* uses some of the original renderer methods
+ *
+ * @param string $type
+ * @param Doku_Renderer_xhtml $renderer
*/
- function _plugins_xhtml($type, Doku_Renderer &$renderer){
+ function _plugins_xhtml($type, Doku_Renderer_xhtml $renderer){
global $lang;
$renderer->doc .= '<ul>';
@@ -114,7 +127,7 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
// remove subparts
foreach($plugins as $p){
if (!$po = plugin_load($type,$p)) continue;
- list($name,$part) = explode('_',$p,2);
+ list($name,/* $part */) = explode('_',$p,2);
$plginfo[$name] = $po->getInfo();
}
@@ -141,8 +154,10 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
* list all installed plugins
*
* uses some of the original renderer methods
+ *
+ * @param Doku_Renderer_xhtml $renderer
*/
- function _helpermethods_xhtml(Doku_Renderer &$renderer){
+ function _helpermethods_xhtml(Doku_Renderer_xhtml $renderer){
$plugins = plugin_list('helper');
foreach($plugins as $p){
if (!$po = plugin_load('helper',$p)) continue;
@@ -189,6 +204,8 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
/**
* lists all known syntax types and their registered modes
+ *
+ * @return string
*/
function _syntaxtypes_xhtml(){
global $PARSER_MODES;
@@ -211,6 +228,8 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
/**
* lists all known syntax modes and their sorting value
+ *
+ * @return string
*/
function _syntaxmodes_xhtml(){
$modes = p_get_parsermodes();
@@ -249,13 +268,18 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
/**
* Adds a TOC item
+ *
+ * @param string $text
+ * @param int $level
+ * @param Doku_Renderer_xhtml $renderer
+ * @return string
*/
- function _addToTOC($text, $level, Doku_Renderer &$renderer){
+ protected function _addToTOC($text, $level, Doku_Renderer_xhtml $renderer){
global $conf;
+ $hid = '';
if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){
- /** @var $renderer Doku_Renderer_xhtml */
- $hid = $renderer->_headerToLink($text, 'true');
+ $hid = $renderer->_headerToLink($text, true);
$renderer->toc[] = array(
'hid' => $hid,
'title' => $text,
diff --git a/lib/plugins/popularity/helper.php b/lib/plugins/popularity/helper.php
index eacde06d0..b4fb33b90 100644
--- a/lib/plugins/popularity/helper.php
+++ b/lib/plugins/popularity/helper.php
@@ -74,6 +74,7 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
/**
* Check if autosubmit is enabled
+ *
* @return boolean TRUE if we should send data once a month, FALSE otherwise
*/
function isAutoSubmitEnabled(){
@@ -82,6 +83,7 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
/**
* Send the data, to the submit url
+ *
* @param string $data The popularity data
* @return string An empty string if everything worked fine, a string describing the error otherwise
*/
@@ -97,6 +99,8 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
/**
* Compute the last time the data was sent. If it has never been sent, we return 0.
+ *
+ * @return int
*/
function lastSentTime(){
$manualSubmission = @filemtime($this->popularityLastSubmitFile);
@@ -107,6 +111,7 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
/**
* Gather all information
+ *
* @return string The popularity data as a string
*/
function gatherAsString(){
@@ -124,6 +129,7 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
/**
* Gather all information
+ *
* @return array The popularity data as an array
*/
function _gather(){
@@ -288,17 +294,24 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
*
* @author <gilthans dot NO dot SPAM at gmail dot com>
* @link http://de3.php.net/manual/en/ini.core.php#79564
+ *
+ * @param string $v
+ * @return int|string
*/
function _to_byte($v){
$l = substr($v, -1);
$ret = substr($v, 0, -1);
switch(strtoupper($l)){
+ /** @noinspection PhpMissingBreakStatementInspection */
case 'P':
$ret *= 1024;
+ /** @noinspection PhpMissingBreakStatementInspection */
case 'T':
$ret *= 1024;
+ /** @noinspection PhpMissingBreakStatementInspection */
case 'G':
$ret *= 1024;
+ /** @noinspection PhpMissingBreakStatementInspection */
case 'M':
$ret *= 1024;
case 'K':
diff --git a/lib/plugins/popularity/lang/eu/lang.php b/lib/plugins/popularity/lang/eu/lang.php
index b52ccaee1..b5b80357c 100644
--- a/lib/plugins/popularity/lang/eu/lang.php
+++ b/lib/plugins/popularity/lang/eu/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Basque language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Inko Illarramendi <inko.i.a@gmail.com>
* @author Zigor Astarbe <astarbe@gmail.com>
*/
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/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 e1b47bb8d..619a9d929 100644
--- a/lib/plugins/revert/lang/cs/lang.php
+++ b/lib/plugins/revert/lang/cs/lang.php
@@ -17,6 +17,8 @@
* @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/eu/lang.php b/lib/plugins/revert/lang/eu/lang.php
index d3532c070..40be3e382 100644
--- a/lib/plugins/revert/lang/eu/lang.php
+++ b/lib/plugins/revert/lang/eu/lang.php
@@ -1,9 +1,11 @@
<?php
+
/**
- * Basque language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Inko Illarramendi <inko.i.a@gmail.com>
* @author Zigor Astarbe <astarbe@gmail.com>
+ * @author Yadav Gowda <yadav.gowda@gmail.com>
*/
$lang['menu'] = 'Berrezartze Kudeatzailea';
$lang['filter'] = 'Bilatu spam duten orriak';
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/ko/lang.php b/lib/plugins/revert/lang/ko/lang.php
index 5666100e9..df4b271b1 100644
--- a/lib/plugins/revert/lang/ko/lang.php
+++ b/lib/plugins/revert/lang/ko/lang.php
@@ -18,4 +18,4 @@ $lang['removed'] = '%s 제거됨';
$lang['revstart'] = '되돌리기 작업을 시작합니다. 오랜 시간이 걸릴 수 있습니다. 완료되기 전에 스크립트 시간 초과가 발생한다면 더 작은 작업으로 나누어서 되돌리시기 바랍니다.';
$lang['revstop'] = '되돌리기 작업이 성공적으로 끝났습니다.';
$lang['note1'] = '참고: 대소문자를 구별해 찾습니다';
-$lang['note2'] = '참고: 문서는 <i>%s</i> 스팸 단어를 포함하지 않은 최신 판으로 되돌립니다. ';
+$lang['note2'] = '참고: 문서는 <i>%s</i> 스팸 단어를 포함하지 않은 최신 판으로 되돌립니다.';
diff --git a/lib/plugins/revert/lang/no/lang.php b/lib/plugins/revert/lang/no/lang.php
index 6806dcd93..76da8ca9c 100644
--- a/lib/plugins/revert/lang/no/lang.php
+++ b/lib/plugins/revert/lang/no/lang.php
@@ -19,6 +19,7 @@
* @author Thomas Juberg <Thomas.Juberg@Gmail.com>
* @author Boris <boris@newton-media.no>
* @author Christopher Schive <chschive@frisurf.no>
+ * @author Patrick <spill.p@hotmail.com>
*/
$lang['menu'] = 'Tilbakestillingsbehandler';
$lang['filter'] = 'Søk etter søppelmeldinger';
diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index 4a301f927..9e2913d78 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -52,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(){
@@ -70,7 +71,7 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
* @param int $state The lexer state for the match
* @param int $pos The character position of the matched text
* @param Doku_Handler $handler The Doku_Handler object
- * @return array Return an array with all data you want to use in render
+ * @return bool|array Return an array with all data you want to use in render, false don't add an instruction
*/
function handle($match, $state, $pos, Doku_Handler $handler){
trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
@@ -94,10 +95,10 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode_Plugin {
* The contents of the $data array depends on what the handler() function above
* created
*
- * @param $format string output format being rendered
- * @param $renderer Doku_Renderer the current renderer object
- * @param $data array data created by handler()
- * @return boolean rendered correctly?
+ * @param string $format output format being rendered
+ * @param Doku_Renderer $renderer the current renderer object
+ * @param array $data data created by handler()
+ * @return boolean rendered correctly? (however, returned value is not used at the moment)
*/
function render($format, Doku_Renderer $renderer, $data) {
trigger_error('render() not implemented in '.get_class($this), E_USER_WARNING);
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php
index b67d91b36..86562f1dd 100644
--- a/lib/plugins/usermanager/admin.php
+++ b/lib/plugins/usermanager/admin.php
@@ -58,9 +58,12 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
}
}
- /**
- * Return prompt for admin menu
- */
+ /**
+ * Return prompt for admin menu
+ *
+ * @param string $language
+ * @return string
+ */
public function getMenuText($language) {
if (!is_null($this->_auth))
@@ -71,6 +74,8 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
/**
* return sort order for position in admin menu
+ *
+ * @return int
*/
public function getMenuSort() {
return 2;
@@ -78,6 +83,8 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
/**
* Handle user request
+ *
+ * @return bool
*/
public function handle() {
global $INPUT;
@@ -128,6 +135,8 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
/**
* Output appropriate html
+ *
+ * @return bool
*/
public function html() {
global $ID;
@@ -738,6 +747,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
global $auth;
global $INPUT;
+ $user = array();
$user[0] = ($clean) ? $auth->cleanUser($INPUT->str('userid')) : $INPUT->str('userid');
$user[1] = $INPUT->str('userpass');
$user[2] = $INPUT->str('username');
@@ -764,7 +774,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$this->_filter = array();
if ($op == 'new') {
- list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser(false);
+ list($user,/* $pass */,$name,$mail,$grps) = $this->_retrieveUser(false);
if (!empty($user)) $this->_filter['user'] = $user;
if (!empty($name)) $this->_filter['name'] = $name;
@@ -816,6 +826,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$disabled = 'disabled="disabled"';
+ $buttons = array();
$buttons['start'] = $buttons['prev'] = ($this->_start == 0) ? $disabled : '';
if ($this->_user_total == -1) {
@@ -937,8 +948,8 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
* Returns cleaned user data
*
* @param array $candidate raw values of line from input file
- * @param $error
- * @return array|bool cleaned data or false
+ * @param string $error
+ * @return array|false cleaned data or false
*/
protected function _cleanImportUser($candidate, & $error){
global $INPUT;
@@ -951,7 +962,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
$INPUT->set('usergroups', $candidate[4]);
$cleaned = $this->_retrieveUser();
- list($user,$pass,$name,$mail,$grps) = $cleaned;
+ list($user,/* $pass */,$name,$mail,/* $grps */) = $cleaned;
if (empty($user)) {
$error = $this->lang['import_error_baduserid'];
return false;
@@ -1021,6 +1032,9 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
/**
* wrapper for is_uploaded_file to facilitate overriding by test suite
+ *
+ * @param string $file filename
+ * @return bool
*/
protected function _isUploadedFile($file) {
return is_uploaded_file($file);
@@ -1031,6 +1045,9 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
*
* @deprecated remove when dokuwiki php requirement increases to 5.3+
* also associated unit test & mock access method
+ *
+ * @param string $csv string to parse
+ * @return array
*/
protected function _getcsv($csv) {
return function_exists('str_getcsv') ? str_getcsv($csv) : $this->str_getcsv($csv);
@@ -1041,6 +1058,9 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
* loosely based on www.php.net/str_getcsv#88311
*
* @deprecated remove when dokuwiki php requirement increases to 5.3+
+ *
+ * @param string $str string to parse
+ * @return array
*/
protected function str_getcsv($str) {
$fp = fopen("php://temp/maxmemory:1048576", 'r+'); // 1MiB
diff --git a/lib/plugins/usermanager/lang/cs/lang.php b/lib/plugins/usermanager/lang/cs/lang.php
index bbb560679..6130fccd8 100644
--- a/lib/plugins/usermanager/lang/cs/lang.php
+++ b/lib/plugins/usermanager/lang/cs/lang.php
@@ -15,6 +15,7 @@
* @author Jakub A. Těšínský (j@kub.cz)
* @author mkucera66@seznam.cz
* @author Zbyněk Křivka <krivka@fit.vutbr.cz>
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
*/
$lang['menu'] = 'Správa uživatelů';
$lang['noauth'] = '(autentizace uživatelů není k dispozici)';
@@ -55,20 +56,23 @@ $lang['next'] = 'další';
$lang['last'] = 'poslední';
$lang['edit_usermissing'] = 'Vybraný uživatel nebyl nalezen, zadané uživatelského mohlo být smazáno nebo změněno.';
$lang['user_notify'] = 'Upozornit uživatele';
-$lang['note_notify'] = 'Maily s upozorněním se budou posílat pouze, když uživatel dostává nové heslo.';
+$lang['note_notify'] = 'E-maily s upozorněním se budou posílat pouze, když uživatel dostává nové heslo.';
$lang['note_group'] = 'Noví uživatelé budou přidáváni do této výchozí skupiny (%s), pokud pro ně není uvedena žádná skupina.';
$lang['note_pass'] = 'Heslo bude automaticky vygenerováno, pokud je pole ponecháno prázdné a je zapnuto upozornění uživatele.';
$lang['add_ok'] = 'Uživatel úspěšně vytvořen';
$lang['add_fail'] = 'Vytvoření uživatele selhalo';
-$lang['notify_ok'] = 'Odeslán mail s upozorněním';
-$lang['notify_fail'] = 'Mail s upozorněním nebylo možno odeslat';
+$lang['notify_ok'] = 'Odeslán e-mail s upozorněním';
+$lang['notify_fail'] = 'E-mail s upozorněním nebylo možno odeslat';
+$lang['import_userlistcsv'] = 'Seznam uživatelů (CSV):';
+$lang['import_header'] = 'Poslední selhání importu';
$lang['import_success_count'] = 'Import uživatelů: nalezeno %d uživatelů, %d úspěšně importováno.';
$lang['import_failure_count'] = 'Import uživatelů: %d selhalo. Seznam chybných je níže.';
$lang['import_error_fields'] = 'Nedostatek položek, nalezena/y %d, požadovány 4.';
$lang['import_error_baduserid'] = 'Chybí User-id';
$lang['import_error_badname'] = 'Špatné jméno';
-$lang['import_error_badmail'] = 'Špatná emailová adresa';
+$lang['import_error_badmail'] = 'Špatná e-mailová adresa';
$lang['import_error_upload'] = 'Import selhal. CSV soubor nemohl být nahrán nebo je prázdný.';
$lang['import_error_readfail'] = 'Import selhal. Nelze číst nahraný soubor.';
$lang['import_error_create'] = 'Nelze vytvořit uživatele';
-$lang['import_notify_fail'] = 'Importovanému uživateli %s s emailem %s nemohlo být zasláno upozornění.';
+$lang['import_notify_fail'] = 'Importovanému uživateli %s s e-mailem %s nemohlo být zasláno upozornění.';
+$lang['import_downloadfailures'] = 'Stáhnout chyby pro nápravu jako CVS';
diff --git a/lib/plugins/usermanager/lang/da/import.txt b/lib/plugins/usermanager/lang/da/import.txt
new file mode 100644
index 000000000..8ff1946b8
--- /dev/null
+++ b/lib/plugins/usermanager/lang/da/import.txt
@@ -0,0 +1,9 @@
+===== Samling af Brugere Import =====
+
+Kræver en CSV-fil med brugere på mindst fire kolonner.
+Kolonnerne skal indeholde, i denne orden: bruger-id, fulde navn, email-adresse og grupper.
+CSV-felterne skal separeres af kommaer (,) og strengafgrænser med anførelsestegn (%%""%%). Backslash (\) kan benyttes som "escape character".
+For et eksempel på en brugbar fil, kan du prøve "Eksportér Brugere"-funktionen her over.
+Overlappende bruger-id'er bliver ignoreret.
+
+En adgangskode vil blive genereret og sendt til hver succesfuldt importeret bruger. \ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/da/lang.php b/lib/plugins/usermanager/lang/da/lang.php
index 47d7efea2..795024f89 100644
--- a/lib/plugins/usermanager/lang/da/lang.php
+++ b/lib/plugins/usermanager/lang/da/lang.php
@@ -13,6 +13,7 @@
* @author Michael Pedersen subben@gmail.com
* @author Mikael Lyngvig <mikael@lyngvig.org>
* @author soer9648 <soer9648@eucl.dk>
+ * @author Søren Birk <soer9648@eucl.dk>
*/
$lang['menu'] = 'Brugerstyring';
$lang['noauth'] = '(Brugervalidering er ikke tilgængelig)';
@@ -72,3 +73,4 @@ $lang['import_error_upload'] = 'Import Fejlet. CSV-filen kunne ikke uploades e
$lang['import_error_readfail'] = 'Import Fejlet. Ikke muligt at læse uploadede fil.';
$lang['import_error_create'] = 'Ikke muligt at oprette brugeren';
$lang['import_notify_fail'] = 'Notifikationsmeddelelse kunne ikke sendes for importerede bruger %s, med emailen %s.';
+$lang['import_downloadfailures'] = 'Download Fejl som CSV til rettelser';
diff --git a/lib/plugins/usermanager/lang/eu/lang.php b/lib/plugins/usermanager/lang/eu/lang.php
index 5d3a01fc7..1fbe13739 100644
--- a/lib/plugins/usermanager/lang/eu/lang.php
+++ b/lib/plugins/usermanager/lang/eu/lang.php
@@ -1,7 +1,8 @@
<?php
+
/**
- * Basque language file
- *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
* @author Inko Illarramendi <inko.i.a@gmail.com>
* @author Zigor Astarbe <astarbe@gmail.com>
*/
diff --git a/lib/plugins/usermanager/lang/fa/lang.php b/lib/plugins/usermanager/lang/fa/lang.php
index 68db206b9..bb2505a27 100644
--- a/lib/plugins/usermanager/lang/fa/lang.php
+++ b/lib/plugins/usermanager/lang/fa/lang.php
@@ -11,6 +11,7 @@
* @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'] = '(معتبرسازی کاربر ممکن نیست)';
@@ -33,6 +34,8 @@ $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 کاربر حذف شد';
diff --git a/lib/plugins/usermanager/lang/fi/lang.php b/lib/plugins/usermanager/lang/fi/lang.php
index de243133a..dba67fb61 100644
--- a/lib/plugins/usermanager/lang/fi/lang.php
+++ b/lib/plugins/usermanager/lang/fi/lang.php
@@ -7,6 +7,7 @@
* @author Otto Vainio <otto@valjakko.net>
* @author Teemu Mattila <ghcsystems@gmail.com>
* @author Sami Olmari <sami@olmari.fi>
+ * @author Jussi Takala <jussi.takala@live.fi>
*/
$lang['menu'] = 'Käyttäjähallinta';
$lang['noauth'] = '(autentikointi ei ole käytössä)';
@@ -29,6 +30,9 @@ $lang['search'] = 'Hae';
$lang['search_prompt'] = 'Tee haku';
$lang['clear'] = 'Tyhjennä hakusuodatin';
$lang['filter'] = 'Suodatin';
+$lang['import'] = 'Tuo uusia käyttäjiä';
+$lang['line'] = 'Rivi nro.';
+$lang['error'] = 'Vikailmoitus';
$lang['summary'] = 'Näytetään käyttäjät %1$d-%2$d / %3$d löytynyttä. %4$d käyttäjää yhteensä.';
$lang['nonefound'] = 'Ei löytynyt käyttäjiä. %d käyttäjää yhteensä.';
$lang['delete_ok'] = '%d käyttäjää poistettu';
@@ -49,3 +53,9 @@ $lang['add_ok'] = 'Käyttäjä lisätty onnistuneesti';
$lang['add_fail'] = 'Käyttäjän lisäys epäonnistui';
$lang['notify_ok'] = 'Ilmoitus sähköpostilla lähetetty';
$lang['notify_fail'] = 'Ilmoitusta sähköpostilla ei voitu lähettää';
+$lang['import_error_baduserid'] = 'Käyttäjätunnus puuttuu';
+$lang['import_error_badname'] = 'Epäkelpo nimi';
+$lang['import_error_badmail'] = 'Epäkelpo sähköpostiosoite';
+$lang['import_error_upload'] = 'Tuonti epäonnistui. CSV-tiedostoa ei voitu ladata tai se on tyhjä.';
+$lang['import_error_readfail'] = 'Tuonti epäonnistui. Ladattua tiedostoa ei voida lukea.';
+$lang['import_error_create'] = 'Käyttäjää ei voida luoda.';
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..a71afb60a
--- /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 korisnika 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'] = 'Poslana obavijest korisniku';
+$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/ko/lang.php b/lib/plugins/usermanager/lang/ko/lang.php
index 70e3d94f0..bc76470e8 100644
--- a/lib/plugins/usermanager/lang/ko/lang.php
+++ b/lib/plugins/usermanager/lang/ko/lang.php
@@ -13,7 +13,7 @@
* @author Garam <rowain8@gmail.com>
*/
$lang['menu'] = '사용자 관리자';
-$lang['noauth'] = '(사용자 인증이 불가능합니다)';
+$lang['noauth'] = '(사용자 인증을 사용할 수 없습니다)';
$lang['nosupport'] = '(사용자 관리가 지원되지 않습니다)';
$lang['badauth'] = '인증 메커니즘이 잘못되었습니다';
$lang['user_id'] = '사용자';
@@ -35,10 +35,10 @@ $lang['clear'] = '검색 필터 재설정';
$lang['filter'] = '필터';
$lang['export_all'] = '모든 사용자 목록 내보내기 (CSV)';
$lang['export_filtered'] = '필터된 사용자 목록 내보내기 (CSV)';
-$lang['import'] = '새 사용자 목록 가져오기';
+$lang['import'] = '새 사용자 가져오기';
$lang['line'] = '줄 번호';
$lang['error'] = '오류 메시지';
-$lang['summary'] = '찾은 사용자 %3$d 중 %1$d-%2$d을(를) 봅니다. 전체 사용자는 %4$d명입니다.';
+$lang['summary'] = '찾은 사용자 %3$d명 중 %1$d-%2$d을(를) 봅니다. 전체 사용자는 %4$d명입니다.';
$lang['nonefound'] = '찾은 사용자가 없습니다. 전체 사용자는 %d명입니다.';
$lang['delete_ok'] = '사용자 %d명이 삭제되었습니다';
$lang['delete_fail'] = '사용자 %d명을 삭제하는 데 실패했습니다.';
@@ -68,6 +68,6 @@ $lang['import_error_badname'] = '잘못된 이름';
$lang['import_error_badmail'] = '잘못된 이메일 주소';
$lang['import_error_upload'] = '가져오기를 실패했습니다. csv 파일을 올릴 수 없거나 비어 있습니다.';
$lang['import_error_readfail'] = '가져오기를 실패했습니다. 올린 파일을 읽을 수 없습니다.';
-$lang['import_error_create'] = '사용자를 만들 수 없습니다.';
+$lang['import_error_create'] = '사용자를 만들 수 없습니다';
$lang['import_notify_fail'] = '알림 메시지를 가져온 %s (이메일: %s) 사용자에게 보낼 수 없습니다.';
$lang['import_downloadfailures'] = '교정을 위한 CSV로 다운로드 실패';
diff --git a/lib/plugins/usermanager/lang/ru/import.txt b/lib/plugins/usermanager/lang/ru/import.txt
index f2049dd0c..c92e47b4c 100644
--- a/lib/plugins/usermanager/lang/ru/import.txt
+++ b/lib/plugins/usermanager/lang/ru/import.txt
@@ -3,7 +3,6 @@
Потребуется список пользователей в файле формата CSV, состоящий из 4 столбцов.
Столбцы должны быть заполнены следующим образом: user-id, полное имя, эл. почта, группы.
Поля CSV должны быть отделены запятой (,), а строки должны быть заключены в кавычки (%%""%%). Обратный слэш используется как прерывание.
-В качестве примера можете взять список пользователей, экспортированный через «Экспорт пользователей».
-Повторяющиеся идентификаторы user-id будут игнорироваться.
+В качестве примера можете взять список пользователей, экспортированный через «Экспорт пользователей». Повторяющиеся идентификаторы user-id будут игнорироваться.
Пароль доступа будет сгенерирован и отправлен по почте удачно импортированному пользователю. \ 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 8bbfa639c..0914d7b49 100644
--- a/lib/plugins/usermanager/lang/ru/lang.php
+++ b/lib/plugins/usermanager/lang/ru/lang.php
@@ -21,6 +21,7 @@
* @author Pavel <ivanovtsk@mail.ru>
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Igor Degraf <igordegraf@gmail.com>
+ * @author Vitaly Filatenko <kot@hacktest.net>
*/
$lang['menu'] = 'Управление пользователями';
$lang['noauth'] = '(авторизация пользователей недоступна)';
@@ -68,6 +69,8 @@ $lang['add_ok'] = 'Пользователь успешно доб
$lang['add_fail'] = 'Не удалось добавить пользователя';
$lang['notify_ok'] = 'Письмо с уведомлением отправлено';
$lang['notify_fail'] = 'Не удалось отправить письмо с уведомлением';
+$lang['import_userlistcsv'] = 'Файл со списком пользователей (CSV):';
+$lang['import_header'] = 'Последний импорт - список ошибок';
$lang['import_success_count'] = 'Импорт пользователей: %d пользователей найдено, %d импортировано успешно.';
$lang['import_failure_count'] = 'Импорт пользователей: %d не удалось. Список ошибок прочтите ниже.';
$lang['import_error_fields'] = 'Не все поля заполнены. Найдено %d, а нужно 4.';
@@ -78,4 +81,4 @@ $lang['import_error_upload'] = 'Импорт не удался. CSV-файл
$lang['import_error_readfail'] = 'Импорт не удался. Невозможно прочесть загруженный файл.';
$lang['import_error_create'] = 'Невозможно создать пользователя';
$lang['import_notify_fail'] = 'Оповещение не может быть отправлено импортированному пользователю %s по электронной почте %s.';
-$lang['import_downloadfailures'] = 'Скачать Ошибки в формате CSV для исправления';
+$lang['import_downloadfailures'] = 'Скачать ошибки в формате CSV для исправления';