From 4ae475af3d062ad634677a93371703eadbfdf256 Mon Sep 17 00:00:00 2001 From: Jan Schumann Date: Tue, 3 Jan 2012 02:45:43 +0100 Subject: Added prototype for Auth-Plugins --- lib/plugins/auth.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 lib/plugins/auth.php (limited to 'lib/plugins') diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php new file mode 100644 index 000000000..3ec64018c --- /dev/null +++ b/lib/plugins/auth.php @@ -0,0 +1,25 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * All plugins that provide Authentication should inherit from this class and implement + * the getAuth() method to make its Auth-System available. + * + * @author Jan Schumann + */ +class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { + + /** + * Retrieves the authentication system + */ + function getAuth() { + trigger_error('getAuth() not implemented in '.get_class($this), E_USER_WARNING); + } +} -- cgit v1.2.3 From b4245126d64b378a4cb90821718983e27e943ebc Mon Sep 17 00:00:00 2001 From: Jan Schumann Date: Tue, 3 Jan 2012 02:46:36 +0100 Subject: Load auth types from plugins in settings_authtype class --- lib/plugins/config/settings/extra.class.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php index b4e35b1cc..72b9755be 100644 --- a/lib/plugins/config/settings/extra.class.php +++ b/lib/plugins/config/settings/extra.class.php @@ -43,12 +43,19 @@ if (!class_exists('setting_authtype')) { class setting_authtype extends setting_multichoice { function initialize($default,$local,$protected) { + global $plugin_controller; // populate $this->_choices with a list of available auth mechanisms $authtypes = glob(DOKU_INC.'inc/auth/*.class.php'); $authtypes = preg_replace('#^.*/([^/]*)\.class\.php$#i','$1', $authtypes); $authtypes = array_diff($authtypes, array('basic')); - sort($authtypes); + + // retrive auth types provided by plugins + foreach ($plugin_controller->getList('auth') as $plugin) { + $authtypes = $plugin; + } + + $authtypes = array_unique($authtypes); $this->_choices = $authtypes; -- cgit v1.2.3 From 396b87bebcb14765849b43a259a2b6cf2aff98f3 Mon Sep 17 00:00:00 2001 From: Jan Schumann Date: Tue, 3 Jan 2012 03:31:54 +0100 Subject: Bugfix: auth types are now correcty added --- lib/plugins/config/settings/extra.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php index 72b9755be..cee3c6b20 100644 --- a/lib/plugins/config/settings/extra.class.php +++ b/lib/plugins/config/settings/extra.class.php @@ -52,7 +52,7 @@ if (!class_exists('setting_authtype')) { // retrive auth types provided by plugins foreach ($plugin_controller->getList('auth') as $plugin) { - $authtypes = $plugin; + $authtypes[] = $plugin; } $authtypes = array_unique($authtypes); -- cgit v1.2.3 From f4476bd9b5badd36cd0617d76538e47d9649986b Mon Sep 17 00:00:00 2001 From: Jan Schumann Date: Mon, 20 Feb 2012 19:51:26 +0100 Subject: Refactored auth system: All auth methods are now introduced as plugins. --- lib/plugins/auth.php | 420 +++++++++++- lib/plugins/authad/auth.php | 359 +++++++++++ lib/plugins/authad/plugin.info.txt | 7 + lib/plugins/authldap/auth.php | 471 ++++++++++++++ lib/plugins/authldap/plugin.info.txt | 7 + lib/plugins/authmysql/auth.php | 946 ++++++++++++++++++++++++++++ lib/plugins/authmysql/plugin.info.txt | 7 + lib/plugins/authpgsql/auth.php | 331 ++++++++++ lib/plugins/authpgsql/plugin.info.txt | 7 + lib/plugins/authplain/auth.php | 335 ++++++++++ lib/plugins/authplain/plugin.info.txt | 7 + lib/plugins/config/settings/extra.class.php | 50 +- 12 files changed, 2929 insertions(+), 18 deletions(-) create mode 100644 lib/plugins/authad/auth.php create mode 100644 lib/plugins/authad/plugin.info.txt create mode 100644 lib/plugins/authldap/auth.php create mode 100644 lib/plugins/authldap/plugin.info.txt create mode 100644 lib/plugins/authmysql/auth.php create mode 100644 lib/plugins/authmysql/plugin.info.txt create mode 100644 lib/plugins/authpgsql/auth.php create mode 100644 lib/plugins/authpgsql/plugin.info.txt create mode 100644 lib/plugins/authplain/auth.php create mode 100644 lib/plugins/authplain/plugin.info.txt (limited to 'lib/plugins') diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php index 3ec64018c..59631143f 100644 --- a/lib/plugins/auth.php +++ b/lib/plugins/auth.php @@ -9,17 +9,421 @@ if(!defined('DOKU_INC')) die(); /** - * All plugins that provide Authentication should inherit from this class and implement - * the getAuth() method to make its Auth-System available. + * auth/basic.class.php * - * @author Jan Schumann + * foundation authorisation class + * all auth classes should inherit from this class + * + * @author Chris Smith + * @author Jan Schumann */ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { - /** - * Retrieves the authentication system - */ - function getAuth() { - trigger_error('getAuth() not implemented in '.get_class($this), E_USER_WARNING); + var $success = true; + + + /** + * Posible things an auth backend module may be able to + * do. The things a backend can do need to be set to true + * in the constructor. + */ + var $cando = array ( + 'addUser' => false, // can Users be created? + 'delUser' => false, // can Users be deleted? + 'modLogin' => false, // can login names be changed? + 'modPass' => false, // can passwords be changed? + 'modName' => false, // can real names be changed? + 'modMail' => false, // can emails be changed? + 'modGroups' => false, // can groups be changed? + 'getUsers' => false, // can a (filtered) list of users be retrieved? + 'getUserCount'=> false, // can the number of users be retrieved? + 'getGroups' => false, // can a list of available groups be retrieved? + 'external' => false, // does the module do external auth checking? + 'logout' => true, // can the user logout again? (eg. not possible with HTTP auth) + ); + + + /** + * Constructor. + * + * Carry out sanity checks to ensure the object is + * able to operate. Set capabilities in $this->cando + * array here + * + * Set $this->success to false if checks fail + * + * @author Christopher Smith + */ + function auth_basic() { + // the base class constructor does nothing, derived class + // constructors do the real work + } + + /** + * Capability check. [ DO NOT OVERRIDE ] + * + * Checks the capabilities set in the $this->cando array and + * some pseudo capabilities (shortcutting access to multiple + * ones) + * + * ususal capabilities start with lowercase letter + * shortcut capabilities start with uppercase letter + * + * @author Andreas Gohr + * @return bool + */ + function canDo($cap) { + switch($cap){ + case 'Profile': + // can at least one of the user's properties be changed? + return ( $this->cando['modPass'] || + $this->cando['modName'] || + $this->cando['modMail'] ); + break; + case 'UserMod': + // can at least anything be changed? + return ( $this->cando['modPass'] || + $this->cando['modName'] || + $this->cando['modMail'] || + $this->cando['modLogin'] || + $this->cando['modGroups'] || + $this->cando['modMail'] ); + break; + default: + // print a helping message for developers + if(!isset($this->cando[$cap])){ + msg("Check for unknown capability '$cap' - Do you use an outdated Plugin?",-1); + } + return $this->cando[$cap]; + } + } + + /** + * Trigger the AUTH_USERDATA_CHANGE event and call the modification function. [ DO NOT OVERRIDE ] + * + * You should use this function instead of calling createUser, modifyUser or + * deleteUsers directly. The event handlers can prevent the modification, for + * example for enforcing a user name schema. + * + * @author Gabriel Birke + * @param string $type Modification type ('create', 'modify', 'delete') + * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type + * @return mixed Result from the modification function or false if an event handler has canceled the action + */ + function triggerUserMod($type, $params) + { + $validTypes = array( + 'create' => 'createUser', + 'modify' => 'modifyUser', + 'delete' => 'deleteUsers' + ); + if(empty($validTypes[$type])) + return false; + $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null); + $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata); + if ($evt->advise_before(true)) { + $result = call_user_func_array(array($this, $validTypes[$type]), $params); + $evt->data['modification_result'] = $result; } + $evt->advise_after(); + unset($evt); + return $result; + } + + /** + * Log off the current user [ OPTIONAL ] + * + * Is run in addition to the ususal logoff method. Should + * only be needed when trustExternal is implemented. + * + * @see auth_logoff() + * @author Andreas Gohr + */ + function logOff(){ + } + + /** + * Do all authentication [ OPTIONAL ] + * + * Set $this->cando['external'] = true when implemented + * + * If this function is implemented it will be used to + * authenticate a user - all other DokuWiki internals + * will not be used for authenticating, thus + * implementing the checkPass() function is not needed + * anymore. + * + * The function can be used to authenticate against third + * party cookies or Apache auth mechanisms and replaces + * the auth_login() function + * + * The function will be called with or without a set + * username. If the Username is given it was called + * from the login form and the given credentials might + * need to be checked. If no username was given it + * the function needs to check if the user is logged in + * by other means (cookie, environment). + * + * The function needs to set some globals needed by + * DokuWiki like auth_login() does. + * + * @see auth_login() + * @author Andreas Gohr + * + * @param string $user Username + * @param string $pass Cleartext Password + * @param bool $sticky Cookie should not expire + * @return bool true on successful auth + */ + function trustExternal($user,$pass,$sticky=false){ +# // some example: +# +# global $USERINFO; +# global $conf; +# $sticky ? $sticky = true : $sticky = false; //sanity check +# +# // do the checking here +# +# // set the globals if authed +# $USERINFO['name'] = 'FIXME'; +# $USERINFO['mail'] = 'FIXME'; +# $USERINFO['grps'] = array('FIXME'); +# $_SERVER['REMOTE_USER'] = $user; +# $_SESSION[DOKU_COOKIE]['auth']['user'] = $user; +# $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass; +# $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO; +# return true; + } + + /** + * Check user+password [ MUST BE OVERRIDDEN ] + * + * Checks if the given user exists and the given + * plaintext password is correct + * + * May be ommited if trustExternal is used. + * + * @author Andreas Gohr + * @return bool + */ + function checkPass($user,$pass){ + msg("no valid authorisation system in use", -1); + return false; + } + + /** + * Return user info [ MUST BE OVERRIDDEN ] + * + * Returns info about the given user needs to contain + * at least these fields: + * + * name string full name of the user + * mail string email addres of the user + * grps array list of groups the user is in + * + * @author Andreas Gohr + * @return array containing user data or false + */ + function getUserData($user) { + if(!$this->cando['external']) msg("no valid authorisation system in use", -1); + return false; + } + + /** + * Create a new User [implement only where required/possible] + * + * Returns false if the user already exists, null when an error + * occurred and true if everything went well. + * + * The new user HAS TO be added to the default group by this + * function! + * + * Set addUser capability when implemented + * + * @author Andreas Gohr + */ + function createUser($user,$pass,$name,$mail,$grps=null){ + msg("authorisation method does not allow creation of new users", -1); + return null; + } + + /** + * Modify user data [implement only where required/possible] + * + * Set the mod* capabilities according to the implemented features + * + * @author Chris Smith + * @param $user nick of the user to be changed + * @param $changes array of field/value pairs to be changed (password will be clear text) + * @return bool + */ + function modifyUser($user, $changes) { + msg("authorisation method does not allow modifying of user data", -1); + return false; + } + + /** + * Delete one or more users [implement only where required/possible] + * + * Set delUser capability when implemented + * + * @author Chris Smith + * @param array $users + * @return int number of users deleted + */ + function deleteUsers($users) { + msg("authorisation method does not allow deleting of users", -1); + return false; + } + + /** + * Return a count of the number of user which meet $filter criteria + * [should be implemented whenever retrieveUsers is implemented] + * + * Set getUserCount capability when implemented + * + * @author Chris Smith + */ + function getUserCount($filter=array()) { + msg("authorisation method does not provide user counts", -1); + return 0; + } + + /** + * Bulk retrieval of user data [implement only where required/possible] + * + * Set getUsers capability when implemented + * + * @author Chris Smith + * @param start index of first user to be returned + * @param limit max number of users to be returned + * @param filter array of field/pattern pairs, null for no filter + * @return array of userinfo (refer getUserData for internal userinfo details) + */ + function retrieveUsers($start=0,$limit=-1,$filter=null) { + msg("authorisation method does not support mass retrieval of user data", -1); + return array(); + } + + /** + * Define a group [implement only where required/possible] + * + * Set addGroup capability when implemented + * + * @author Chris Smith + * @return bool + */ + function addGroup($group) { + msg("authorisation method does not support independent group creation", -1); + return false; + } + + /** + * Retrieve groups [implement only where required/possible] + * + * Set getGroups capability when implemented + * + * @author Chris Smith + * @return array + */ + function retrieveGroups($start=0,$limit=0) { + msg("authorisation method does not support group list retrieval", -1); + return array(); + } + + /** + * Return case sensitivity of the backend [OPTIONAL] + * + * When your backend is caseinsensitive (eg. you can login with USER and + * user) then you need to overwrite this method and return false + */ + function isCaseSensitive(){ + return true; + } + + /** + * Sanitize a given username [OPTIONAL] + * + * This function is applied to any user name that is given to + * the backend and should also be applied to any user name within + * the backend before returning it somewhere. + * + * This should be used to enforce username restrictions. + * + * @author Andreas Gohr + * @param string $user - username + * @param string - the cleaned username + */ + function cleanUser($user){ + return $user; + } + + /** + * Sanitize a given groupname [OPTIONAL] + * + * This function is applied to any groupname that is given to + * the backend and should also be applied to any groupname within + * the backend before returning it somewhere. + * + * This should be used to enforce groupname restrictions. + * + * Groupnames are to be passed without a leading '@' here. + * + * @author Andreas Gohr + * @param string $group - groupname + * @param string - the cleaned groupname + */ + function cleanGroup($group){ + return $group; + } + + + /** + * Check Session Cache validity [implement only where required/possible] + * + * DokuWiki caches user info in the user's session for the timespan defined + * in $conf['auth_security_timeout']. + * + * This makes sure slow authentication backends do not slow down DokuWiki. + * This also means that changes to the user database will not be reflected + * on currently logged in users. + * + * To accommodate for this, the user manager plugin will touch a reference + * file whenever a change is submitted. This function compares the filetime + * of this reference file with the time stored in the session. + * + * This reference file mechanism does not reflect changes done directly in + * the backend's database through other means than the user manager plugin. + * + * Fast backends might want to return always false, to force rechecks on + * each page load. Others might want to use their own checking here. If + * unsure, do not override. + * + * @param string $user - The username + * @author Andreas Gohr + * @return bool + */ + function useSessionCache($user){ + global $conf; + return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge')); + } + + + /** + * loadConfig() + * merges the plugin's default settings with any local settings + * this function is automatically called through getConf() + */ + function loadConfig(){ + global $conf; + + parent::loadConfig(); + + $this->conf['debug'] = $conf['debug']; + $this->conf['useacl'] = $conf['useacl']; + $this->conf['disableactions'] = $conf['disableactions']; + $this->conf['autopasswd'] = $conf['autopasswd']; + $this->conf['passcrypt'] = $conf['ssha']; + } + } diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php new file mode 100644 index 000000000..70d3cfb8c --- /dev/null +++ b/lib/plugins/authad/auth.php @@ -0,0 +1,359 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +require_once(DOKU_INC.'inc/adLDAP.php'); + +/** + * Active Directory authentication backend for DokuWiki + * + * This makes authentication with a Active Directory server much easier + * than when using the normal LDAP backend by utilizing the adLDAP library + * + * Usage: + * Set DokuWiki's local.protected.php auth setting to read + * + * $conf['useacl'] = 1; + * $conf['disableactions'] = 'register'; + * $conf['autopasswd'] = 0; + * $conf['authtype'] = 'authad'; + * $conf['passcrypt'] = 'ssha'; + * + * $conf['plugin']['authad']['account_suffix'] = '@my.domain.org'; + * $conf['plugin']['authad']['base_dn'] = 'DC=my,DC=domain,DC=org'; + * $conf['plugin']['authad']['domain_controllers'] = 'srv1.domain.org,srv2.domain.org'; + * + * //optional: + * $conf['plugin']['authad']['sso'] = 1; + * $conf['plugin']['authad']['ad_username'] = 'root'; + * $conf['plugin']['authad']['ad_password'] = 'pass'; + * $conf['plugin']['authad']['real_primarygroup'] = 1; + * $conf['plugin']['authad']['use_ssl'] = 1; + * $conf['plugin']['authad']['use_tls'] = 1; + * $conf['plugin']['authad']['debug'] = 1; + * + * // get additional information to the userinfo array + * // add a list of comma separated ldap contact fields. + * $conf['plugin']['authad']['additional'] = 'field1,field2'; + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author James Van Lommel + * @link http://www.nosq.com/blog/2005/08/ldap-activedirectory-and-dokuwiki/ + * @author Andreas Gohr + * @author Jan Schumann + */ +class auth_plugin_authad extends DokuWiki_Auth_Plugin +{ + var $cnf = null; + var $opts = null; + var $adldap = null; + var $users = null; + + /** + * Constructor + */ + function auth_plugin_authad() { + global $conf; + $this->cnf = $conf['auth']['ad']; + + + // additional information fields + if (isset($this->cnf['additional'])) { + $this->cnf['additional'] = str_replace(' ', '', $this->cnf['additional']); + $this->cnf['additional'] = explode(',', $this->cnf['additional']); + } else $this->cnf['additional'] = array(); + + // ldap extension is needed + if (!function_exists('ldap_connect')) { + if ($this->cnf['debug']) + msg("AD Auth: PHP LDAP extension not found.",-1); + $this->success = false; + return; + } + + // Prepare SSO + if($_SERVER['REMOTE_USER'] && $this->cnf['sso']){ + // remove possible NTLM domain + list($dom,$usr) = explode('\\',$_SERVER['REMOTE_USER'],2); + if(!$usr) $usr = $dom; + + // remove possible Kerberos domain + list($usr,$dom) = explode('@',$usr); + + $dom = strtolower($dom); + $_SERVER['REMOTE_USER'] = $usr; + + // we need to simulate a login + if(empty($_COOKIE[DOKU_COOKIE])){ + $_REQUEST['u'] = $_SERVER['REMOTE_USER']; + $_REQUEST['p'] = 'sso_only'; + } + } + + // prepare adLDAP standard configuration + $this->opts = $this->cnf; + + // add possible domain specific configuration + if($dom && is_array($this->cnf[$dom])) foreach($this->cnf[$dom] as $key => $val){ + $this->opts[$key] = $val; + } + + // handle multiple AD servers + $this->opts['domain_controllers'] = explode(',',$this->opts['domain_controllers']); + $this->opts['domain_controllers'] = array_map('trim',$this->opts['domain_controllers']); + $this->opts['domain_controllers'] = array_filter($this->opts['domain_controllers']); + + // we can change the password if SSL is set + if($this->opts['use_ssl'] || $this->opts['use_tls']){ + $this->cando['modPass'] = true; + } + $this->cando['modName'] = true; + $this->cando['modMail'] = true; + } + + /** + * Check user+password [required auth function] + * + * Checks if the given user exists and the given + * plaintext password is correct by trying to bind + * to the LDAP server + * + * @author James Van Lommel + * @return bool + */ + function checkPass($user, $pass){ + if($_SERVER['REMOTE_USER'] && + $_SERVER['REMOTE_USER'] == $user && + $this->cnf['sso']) return true; + + if(!$this->_init()) return false; + return $this->adldap->authenticate($user, $pass); + } + + /** + * Return user info [required auth function] + * + * Returns info about the given user needs to contain + * at least these fields: + * + * name string full name of the user + * mail string email address of the user + * grps array list of groups the user is in + * + * This LDAP specific function returns the following + * addional fields: + * + * dn string distinguished name (DN) + * uid string Posix User ID + * + * @author James Van Lommel + */ + function getUserData($user){ + global $conf; + if(!$this->_init()) return false; + + $fields = array('mail','displayname','samaccountname'); + + // add additional fields to read + $fields = array_merge($fields, $this->cnf['additional']); + $fields = array_unique($fields); + + //get info for given user + $result = $this->adldap->user_info($user, $fields); + //general user info + $info['name'] = $result[0]['displayname'][0]; + $info['mail'] = $result[0]['mail'][0]; + $info['uid'] = $result[0]['samaccountname'][0]; + $info['dn'] = $result[0]['dn']; + + // additional information + foreach ($this->cnf['additional'] as $field) { + if (isset($result[0][strtolower($field)])) { + $info[$field] = $result[0][strtolower($field)][0]; + } + } + + // handle ActiveDirectory memberOf + $info['grps'] = $this->adldap->user_groups($user,(bool) $this->opts['recursive_groups']); + + if (is_array($info['grps'])) { + foreach ($info['grps'] as $ndx => $group) { + $info['grps'][$ndx] = $this->cleanGroup($group); + } + } + + // always add the default group to the list of groups + if(!is_array($info['grps']) || !in_array($conf['defaultgroup'],$info['grps'])){ + $info['grps'][] = $conf['defaultgroup']; + } + + return $info; + } + + /** + * Make AD group names usable by DokuWiki. + * + * Removes backslashes ('\'), pound signs ('#'), and converts spaces to underscores. + * + * @author James Van Lommel (jamesvl@gmail.com) + */ + function cleanGroup($name) { + $sName = str_replace('\\', '', $name); + $sName = str_replace('#', '', $sName); + $sName = preg_replace('[\s]', '_', $sName); + return $sName; + } + + /** + * Sanitize user names + */ + function cleanUser($name) { + return $this->cleanGroup($name); + } + + /** + * Most values in LDAP are case-insensitive + */ + function isCaseSensitive(){ + return false; + } + + /** + * Bulk retrieval of user data + * + * @author Dominik Eckelmann + * @param start index of first user to be returned + * @param limit max number of users to be returned + * @param filter array of field/pattern pairs, null for no filter + * @return array of userinfo (refer getUserData for internal userinfo details) + */ + function retrieveUsers($start=0,$limit=-1,$filter=array()) { + if(!$this->_init()) return false; + + if ($this->users === null) { + //get info for given user + $result = $this->adldap->all_users(); + if (!$result) return array(); + $this->users = array_fill_keys($result, false); + } + + $i = 0; + $count = 0; + $this->_constructPattern($filter); + $result = array(); + + foreach ($this->users as $user => &$info) { + if ($i++ < $start) { + continue; + } + if ($info === false) { + $info = $this->getUserData($user); + } + if ($this->_filter($user, $info)) { + $result[$user] = $info; + if (($limit >= 0) && (++$count >= $limit)) break; + } + } + return $result; + } + + /** + * Modify user data + * + * @param $user nick of the user to be changed + * @param $changes array of field/value pairs to be changed + * @return bool + */ + function modifyUser($user, $changes) { + $return = true; + + // password changing + if(isset($changes['pass'])){ + try { + $return = $this->adldap->user_password($user,$changes['pass']); + } catch (adLDAPException $e) { + if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1); + $return = false; + } + if(!$return) msg('AD Auth: failed to change the password. Maybe the password policy was not met?',-1); + } + + // changing user data + $adchanges = array(); + if(isset($changes['name'])){ + // get first and last name + $parts = explode(' ',$changes['name']); + $adchanges['surname'] = array_pop($parts); + $adchanges['firstname'] = join(' ',$parts); + $adchanges['display_name'] = $changes['name']; + } + if(isset($changes['mail'])){ + $adchanges['email'] = $changes['mail']; + } + if(count($adchanges)){ + try { + $return = $return & $this->adldap->user_modify($user,$adchanges); + } catch (adLDAPException $e) { + if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1); + $return = false; + } + } + + return $return; + } + + /** + * Initialize the AdLDAP library and connect to the server + */ + function _init(){ + if(!is_null($this->adldap)) return true; + + // connect + try { + $this->adldap = new adLDAP($this->opts); + if (isset($this->opts['ad_username']) && isset($this->opts['ad_password'])) { + $this->canDo['getUsers'] = true; + } + return true; + } catch (adLDAPException $e) { + if ($this->cnf['debug']) { + msg('AD Auth: '.$e->getMessage(), -1); + } + $this->success = false; + $this->adldap = null; + } + return false; + } + + /** + * return 1 if $user + $info match $filter criteria, 0 otherwise + * + * @author Chris Smith + */ + function _filter($user, $info) { + foreach ($this->_pattern as $item => $pattern) { + if ($item == 'user') { + if (!preg_match($pattern, $user)) return 0; + } else if ($item == 'grps') { + if (!count(preg_grep($pattern, $info['grps']))) return 0; + } else { + if (!preg_match($pattern, $info[$item])) return 0; + } + } + return 1; + } + + function _constructPattern($filter) { + $this->_pattern = array(); + foreach ($filter as $item => $pattern) { +// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters + $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters + } + } +} \ No newline at end of file diff --git a/lib/plugins/authad/plugin.info.txt b/lib/plugins/authad/plugin.info.txt new file mode 100644 index 000000000..ad565b853 --- /dev/null +++ b/lib/plugins/authad/plugin.info.txt @@ -0,0 +1,7 @@ +base authad +author +email +date +name active directory auth plugin +desc Provides authentication against a Microsoft Active Directory +url diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php new file mode 100644 index 000000000..723685f94 --- /dev/null +++ b/lib/plugins/authldap/auth.php @@ -0,0 +1,471 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * LDAP authentication backend + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Andreas Gohr + * @author Chris Smith + * @author Jan Schumann + */ +class auth_plugin_authldap extends DokuWiki_Auth_Plugin +{ + var $cnf = null; + var $con = null; + var $bound = 0; // 0: anonymous, 1: user, 2: superuser + + /** + * Constructor + */ + function auth_plugin_authldap(){ + global $conf; + $this->cnf = $conf['auth']['ldap']; + + // ldap extension is needed + if(!function_exists('ldap_connect')) { + if ($this->cnf['debug']) + msg("LDAP err: PHP LDAP extension not found.",-1,__LINE__,__FILE__); + $this->success = false; + return; + } + + if(empty($this->cnf['groupkey'])) $this->cnf['groupkey'] = 'cn'; + if(empty($this->cnf['userscope'])) $this->cnf['userscope'] = 'sub'; + if(empty($this->cnf['groupscope'])) $this->cnf['groupscope'] = 'sub'; + + // auth_ldap currently just handles authentication, so no + // capabilities are set + } + + /** + * Check user+password + * + * Checks if the given user exists and the given + * plaintext password is correct by trying to bind + * to the LDAP server + * + * @author Andreas Gohr + * @return bool + */ + function checkPass($user,$pass){ + // reject empty password + if(empty($pass)) return false; + if(!$this->_openLDAP()) return false; + + // indirect user bind + if($this->cnf['binddn'] && $this->cnf['bindpw']){ + // use superuser credentials + if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){ + if($this->cnf['debug']) + msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + return false; + } + $this->bound = 2; + }else if($this->cnf['binddn'] && + $this->cnf['usertree'] && + $this->cnf['userfilter']) { + // special bind string + $dn = $this->_makeFilter($this->cnf['binddn'], + array('user'=>$user,'server'=>$this->cnf['server'])); + + }else if(strpos($this->cnf['usertree'], '%{user}')) { + // direct user bind + $dn = $this->_makeFilter($this->cnf['usertree'], + array('user'=>$user,'server'=>$this->cnf['server'])); + + }else{ + // Anonymous bind + if(!@ldap_bind($this->con)){ + msg("LDAP: can not bind anonymously",-1); + if($this->cnf['debug']) + msg('LDAP anonymous bind: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + return false; + } + } + + // Try to bind to with the dn if we have one. + if(!empty($dn)) { + // User/Password bind + if(!@ldap_bind($this->con,$dn,$pass)){ + if($this->cnf['debug']){ + msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__); + msg('LDAP user dn bind: '.htmlspecialchars(ldap_error($this->con)),0); + } + return false; + } + $this->bound = 1; + return true; + }else{ + // See if we can find the user + $info = $this->getUserData($user,true); + if(empty($info['dn'])) { + return false; + } else { + $dn = $info['dn']; + } + + // Try to bind with the dn provided + if(!@ldap_bind($this->con,$dn,$pass)){ + if($this->cnf['debug']){ + msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__); + msg('LDAP user bind: '.htmlspecialchars(ldap_error($this->con)),0); + } + return false; + } + $this->bound = 1; + return true; + } + + return false; + } + + /** + * Return user info + * + * Returns info about the given user needs to contain + * at least these fields: + * + * name string full name of the user + * mail string email addres of the user + * grps array list of groups the user is in + * + * This LDAP specific function returns the following + * addional fields: + * + * dn string distinguished name (DN) + * uid string Posix User ID + * inbind bool for internal use - avoid loop in binding + * + * @author Andreas Gohr + * @author Trouble + * @author Dan Allen + * @author + * @author Stephane Chazelas + * @return array containing user data or false + */ + function getUserData($user,$inbind=false) { + global $conf; + if(!$this->_openLDAP()) return false; + + // force superuser bind if wanted and not bound as superuser yet + if($this->cnf['binddn'] && $this->cnf['bindpw'] && $this->bound < 2){ + // use superuser credentials + if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){ + if($this->cnf['debug']) + msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + return false; + } + $this->bound = 2; + }elseif($this->bound == 0 && !$inbind) { + // in some cases getUserData is called outside the authentication workflow + // eg. for sending email notification on subscribed pages. This data might not + // be accessible anonymously, so we try to rebind the current user here + list($loginuser,$loginsticky,$loginpass) = auth_getCookie(); + if($loginuser && $loginpass){ + $loginpass = PMA_blowfish_decrypt($loginpass, auth_cookiesalt(!$loginsticky)); + $this->checkPass($loginuser, $loginpass); + } + } + + $info['user'] = $user; + $info['server'] = $this->cnf['server']; + + //get info for given user + $base = $this->_makeFilter($this->cnf['usertree'], $info); + if(!empty($this->cnf['userfilter'])) { + $filter = $this->_makeFilter($this->cnf['userfilter'], $info); + } else { + $filter = "(ObjectClass=*)"; + } + + $sr = $this->_ldapsearch($this->con, $base, $filter, $this->cnf['userscope']); + $result = @ldap_get_entries($this->con, $sr); + if($this->cnf['debug']){ + msg('LDAP user search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__); + } + + // Don't accept more or less than one response + if(!is_array($result) || $result['count'] != 1){ + return false; //user not found + } + + $user_result = $result[0]; + ldap_free_result($sr); + + // general user info + $info['dn'] = $user_result['dn']; + $info['gid'] = $user_result['gidnumber'][0]; + $info['mail'] = $user_result['mail'][0]; + $info['name'] = $user_result['cn'][0]; + $info['grps'] = array(); + + // overwrite if other attribs are specified. + if(is_array($this->cnf['mapping'])){ + foreach($this->cnf['mapping'] as $localkey => $key) { + if(is_array($key)) { + // use regexp to clean up user_result + list($key, $regexp) = each($key); + if($user_result[$key]) foreach($user_result[$key] as $grp){ + if (preg_match($regexp,$grp,$match)) { + if($localkey == 'grps') { + $info[$localkey][] = $match[1]; + } else { + $info[$localkey] = $match[1]; + } + } + } + } else { + $info[$localkey] = $user_result[$key][0]; + } + } + } + $user_result = array_merge($info,$user_result); + + //get groups for given user if grouptree is given + if ($this->cnf['grouptree'] || $this->cnf['groupfilter']) { + $base = $this->_makeFilter($this->cnf['grouptree'], $user_result); + $filter = $this->_makeFilter($this->cnf['groupfilter'], $user_result); + $sr = $this->_ldapsearch($this->con, $base, $filter, $this->cnf['groupscope'], array($this->cnf['groupkey'])); + if($this->cnf['debug']){ + msg('LDAP group search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__); + } + if(!$sr){ + msg("LDAP: Reading group memberships failed",-1); + return false; + } + $result = ldap_get_entries($this->con, $sr); + ldap_free_result($sr); + + if(is_array($result)) foreach($result as $grp){ + if(!empty($grp[$this->cnf['groupkey']][0])){ + if($this->cnf['debug']) + msg('LDAP usergroup: '.htmlspecialchars($grp[$this->cnf['groupkey']][0]),0,__LINE__,__FILE__); + $info['grps'][] = $grp[$this->cnf['groupkey']][0]; + } + } + } + + // always add the default group to the list of groups + if(!in_array($conf['defaultgroup'],$info['grps'])){ + $info['grps'][] = $conf['defaultgroup']; + } + return $info; + } + + /** + * Most values in LDAP are case-insensitive + */ + function isCaseSensitive(){ + return false; + } + + /** + * Bulk retrieval of user data + * + * @author Dominik Eckelmann + * @param start index of first user to be returned + * @param limit max number of users to be returned + * @param filter array of field/pattern pairs, null for no filter + * @return array of userinfo (refer getUserData for internal userinfo details) + */ + function retrieveUsers($start=0,$limit=-1,$filter=array()) { + if(!$this->_openLDAP()) return false; + + if (!isset($this->users)) { + // Perform the search and grab all their details + if(!empty($this->cnf['userfilter'])) { + $all_filter = str_replace('%{user}', '*', $this->cnf['userfilter']); + } else { + $all_filter = "(ObjectClass=*)"; + } + $sr=ldap_search($this->con,$this->cnf['usertree'],$all_filter); + $entries = ldap_get_entries($this->con, $sr); + $users_array = array(); + for ($i=0; $i<$entries["count"]; $i++){ + array_push($users_array, $entries[$i]["uid"][0]); + } + asort($users_array); + $result = $users_array; + if (!$result) return array(); + $this->users = array_fill_keys($result, false); + } + $i = 0; + $count = 0; + $this->_constructPattern($filter); + $result = array(); + + foreach ($this->users as $user => &$info) { + if ($i++ < $start) { + continue; + } + if ($info === false) { + $info = $this->getUserData($user); + } + if ($this->_filter($user, $info)) { + $result[$user] = $info; + if (($limit >= 0) && (++$count >= $limit)) break; + } + } + return $result; + + + } + + /** + * Make LDAP filter strings. + * + * Used by auth_getUserData to make the filter + * strings for grouptree and groupfilter + * + * filter string ldap search filter with placeholders + * placeholders array array with the placeholders + * + * @author Troels Liebe Bentsen + * @return string + */ + function _makeFilter($filter, $placeholders) { + preg_match_all("/%{([^}]+)/", $filter, $matches, PREG_PATTERN_ORDER); + //replace each match + foreach ($matches[1] as $match) { + //take first element if array + if(is_array($placeholders[$match])) { + $value = $placeholders[$match][0]; + } else { + $value = $placeholders[$match]; + } + $value = $this->_filterEscape($value); + $filter = str_replace('%{'.$match.'}', $value, $filter); + } + return $filter; + } + + /** + * return 1 if $user + $info match $filter criteria, 0 otherwise + * + * @author Chris Smith + */ + function _filter($user, $info) { + foreach ($this->_pattern as $item => $pattern) { + if ($item == 'user') { + if (!preg_match($pattern, $user)) return 0; + } else if ($item == 'grps') { + if (!count(preg_grep($pattern, $info['grps']))) return 0; + } else { + if (!preg_match($pattern, $info[$item])) return 0; + } + } + return 1; + } + + function _constructPattern($filter) { + $this->_pattern = array(); + foreach ($filter as $item => $pattern) { +// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters + $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters + } + } + + /** + * Escape a string to be used in a LDAP filter + * + * Ported from Perl's Net::LDAP::Util escape_filter_value + * + * @author Andreas Gohr + */ + function _filterEscape($string){ + return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e', + '"\\\\\".join("",unpack("H2","$1"))', + $string); + } + + /** + * Opens a connection to the configured LDAP server and sets the wanted + * option on the connection + * + * @author Andreas Gohr + */ + function _openLDAP(){ + if($this->con) return true; // connection already established + + $this->bound = 0; + + $port = ($this->cnf['port']) ? $this->cnf['port'] : 389; + $this->con = @ldap_connect($this->cnf['server'],$port); + if(!$this->con){ + msg("LDAP: couldn't connect to LDAP server",-1); + return false; + } + + //set protocol version and dependend options + if($this->cnf['version']){ + if(!@ldap_set_option($this->con, LDAP_OPT_PROTOCOL_VERSION, + $this->cnf['version'])){ + msg('Setting LDAP Protocol version '.$this->cnf['version'].' failed',-1); + if($this->cnf['debug']) + msg('LDAP version set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + }else{ + //use TLS (needs version 3) + if($this->cnf['starttls']) { + if (!@ldap_start_tls($this->con)){ + msg('Starting TLS failed',-1); + if($this->cnf['debug']) + msg('LDAP TLS set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + } + } + // needs version 3 + if(isset($this->cnf['referrals'])) { + if(!@ldap_set_option($this->con, LDAP_OPT_REFERRALS, + $this->cnf['referrals'])){ + msg('Setting LDAP referrals to off failed',-1); + if($this->cnf['debug']) + msg('LDAP referal set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + } + } + } + } + + //set deref mode + if($this->cnf['deref']){ + if(!@ldap_set_option($this->con, LDAP_OPT_DEREF, $this->cnf['deref'])){ + msg('Setting LDAP Deref mode '.$this->cnf['deref'].' failed',-1); + if($this->cnf['debug']) + msg('LDAP deref set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__); + } + } + + $this->canDo['getUsers'] = true; + return true; + } + + /** + * Wraps around ldap_search, ldap_list or ldap_read depending on $scope + * + * @param $scope string - can be 'base', 'one' or 'sub' + * @author Andreas Gohr + */ + function _ldapsearch($link_identifier, $base_dn, $filter, $scope='sub', $attributes=null, + $attrsonly=0, $sizelimit=0, $timelimit=0, $deref=LDAP_DEREF_NEVER){ + if(is_null($attributes)) $attributes = array(); + + if($scope == 'base'){ + return @ldap_read($link_identifier, $base_dn, $filter, $attributes, + $attrsonly, $sizelimit, $timelimit, $deref); + }elseif($scope == 'one'){ + return @ldap_list($link_identifier, $base_dn, $filter, $attributes, + $attrsonly, $sizelimit, $timelimit, $deref); + }else{ + return @ldap_search($link_identifier, $base_dn, $filter, $attributes, + $attrsonly, $sizelimit, $timelimit, $deref); + } + } +} \ No newline at end of file diff --git a/lib/plugins/authldap/plugin.info.txt b/lib/plugins/authldap/plugin.info.txt new file mode 100644 index 000000000..c36385224 --- /dev/null +++ b/lib/plugins/authldap/plugin.info.txt @@ -0,0 +1,7 @@ +base authldap +author +email +date +name ldap auth plugin +desc Provides authentication against am LDAP server +url diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php new file mode 100644 index 000000000..9150d3939 --- /dev/null +++ b/lib/plugins/authmysql/auth.php @@ -0,0 +1,946 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * MySQLP authentication backend + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Andreas Gohr + * @author Chris Smith + * @author Matthias Grimm + * @author Jan Schumann + */ +class auth_plugin_authmysql extends DokuWiki_Auth_Plugin +{ + var $dbcon = 0; + var $dbver = 0; // database version + var $dbrev = 0; // database revision + var $dbsub = 0; // database subrevision + var $cnf = null; + var $defaultgroup = ""; + + /** + * Constructor + * + * checks if the mysql interface is available, otherwise it will + * set the variable $success of the basis class to false + * + * @author Matthias Grimm + */ + function auth_plugin_authmysql() { + global $conf; + $this->cnf = $conf['auth']['mysql']; + + if (method_exists($this, 'auth_basic')) + parent::auth_basic(); + + if(!function_exists('mysql_connect')) { + if ($this->cnf['debug']) + msg("MySQL err: PHP MySQL extension not found.",-1,__LINE__,__FILE__); + $this->success = false; + return; + } + + // default to UTF-8, you rarely want something else + if(!isset($this->cnf['charset'])) $this->cnf['charset'] = 'utf8'; + + $this->defaultgroup = $conf['defaultgroup']; + + // set capabilities based upon config strings set + if (empty($this->cnf['server']) || empty($this->cnf['user']) || + !isset($this->cnf['password']) || empty($this->cnf['database'])){ + if ($this->cnf['debug']) + msg("MySQL err: insufficient configuration.",-1,__LINE__,__FILE__); + $this->success = false; + return; + } + + $this->cando['addUser'] = $this->_chkcnf(array('getUserInfo', + 'getGroups', + 'addUser', + 'getUserID', + 'getGroupID', + 'addGroup', + 'addUserGroup'),true); + $this->cando['delUser'] = $this->_chkcnf(array('getUserID', + 'delUser', + 'delUserRefs'),true); + $this->cando['modLogin'] = $this->_chkcnf(array('getUserID', + 'updateUser', + 'UpdateTarget'),true); + $this->cando['modPass'] = $this->cando['modLogin']; + $this->cando['modName'] = $this->cando['modLogin']; + $this->cando['modMail'] = $this->cando['modLogin']; + $this->cando['modGroups'] = $this->_chkcnf(array('getUserID', + 'getGroups', + 'getGroupID', + 'addGroup', + 'addUserGroup', + 'delGroup', + 'getGroupID', + 'delUserGroup'),true); + /* getGroups is not yet supported + $this->cando['getGroups'] = $this->_chkcnf(array('getGroups', + 'getGroupID'),false); */ + $this->cando['getUsers'] = $this->_chkcnf(array('getUsers', + 'getUserInfo', + 'getGroups'),false); + $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'),false); + } + + /** + * Check if the given config strings are set + * + * @author Matthias Grimm + * @return bool + */ + function _chkcnf($keys, $wop=false){ + foreach ($keys as $key){ + if (empty($this->cnf[$key])) return false; + } + + /* write operation and lock array filled with tables names? */ + if ($wop && (!is_array($this->cnf['TablesToLock']) || + !count($this->cnf['TablesToLock']))){ + return false; + } + + return true; + } + + /** + * Checks if the given user exists and the given plaintext password + * is correct. Furtheron it might be checked wether the user is + * member of the right group + * + * Depending on which SQL string is defined in the config, password + * checking is done here (getpass) or by the database (passcheck) + * + * @param $user user who would like access + * @param $pass user's clear text password to check + * @return bool + * + * @author Andreas Gohr + * @author Matthias Grimm + */ + function checkPass($user,$pass){ + $rc = false; + + if($this->_openDB()) { + $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']); + $sql = str_replace('%{pass}',$this->_escape($pass),$sql); + $sql = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql); + $result = $this->_queryDB($sql); + + if($result !== false && count($result) == 1) { + if($this->cnf['forwardClearPass'] == 1) + $rc = true; + else + $rc = auth_verifyPassword($pass,$result[0]['pass']); + } + $this->_closeDB(); + } + return $rc; + } + + /** + * [public function] + * + * Returns info about the given user needs to contain + * at least these fields: + * name string full name of the user + * mail string email addres of the user + * grps array list of groups the user is in + * + * @param $user user's nick to get data for + * + * @author Andreas Gohr + * @author Matthias Grimm + */ + function getUserData($user){ + if($this->_openDB()) { + $this->_lockTables("READ"); + $info = $this->_getUserInfo($user); + $this->_unlockTables(); + $this->_closeDB(); + } else + $info = false; + return $info; + } + + /** + * [public function] + * + * Create a new User. Returns false if the user already exists, + * null when an error occurred and true if everything went well. + * + * The new user will be added to the default group by this + * function if grps are not specified (default behaviour). + * + * @param $user nick of the user + * @param $pwd clear text password + * @param $name full name of the user + * @param $mail email address + * @param $grps array of groups the user should become member of + * + * @author Andreas Gohr + * @author Chris Smith + * @author Matthias Grimm + */ + function createUser($user,$pwd,$name,$mail,$grps=null){ + if($this->_openDB()) { + if (($info = $this->_getUserInfo($user)) !== false) + return false; // user already exists + + // set defaultgroup if no groups were given + if ($grps == null) + $grps = array($this->defaultgroup); + + $this->_lockTables("WRITE"); + $pwd = $this->cnf['forwardClearPass'] ? $pwd : auth_cryptPassword($pwd); + $rc = $this->_addUser($user,$pwd,$name,$mail,$grps); + $this->_unlockTables(); + $this->_closeDB(); + if ($rc) return true; + } + return null; // return error + } + + /** + * Modify user data [public function] + * + * An existing user dataset will be modified. Changes are given in an array. + * + * 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 + * automatically if configured. + * + * If one or more groups could't be updated, an error would be set. In + * this case the dataset might already be changed and we can't rollback + * the changes. Transactions would be really usefull 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. + * + * @param $user nick of the user to be changed + * @param $changes array of field/value pairs to be changed (password + * will be clear text) + * @return bool true on success, false on error + * + * @author Chris Smith + * @author Matthias Grimm + */ + function modifyUser($user, $changes) { + $rc = false; + + 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); + + 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($grpdel as $group) + if (($this->_delUserFromGroup($user, $group)) == false) + $rc = false; + } + } + + $this->_unlockTables(); + $this->_closeDB(); + } + return $rc; + } + + /** + * [public function] + * + * Remove one or more users from the list of registered users + * + * @param array $users array of users to be deleted + * @return int the number of users deleted + * + * @author Christopher Smith + * @author Matthias Grimm + */ + function deleteUsers($users) { + $count = 0; + + if($this->_openDB()) { + if (is_array($users) && count($users)) { + $this->_lockTables("WRITE"); + foreach ($users as $user) { + if ($this->_delUser($user)) + $count++; + } + $this->_unlockTables(); + } + $this->_closeDB(); + } + return $count; + } + + /** + * [public function] + * + * Counts users which meet certain $filter criteria. + * + * @param array $filter filter criteria in item/pattern pairs + * @return count of found users. + * + * @author Matthias Grimm + */ + function getUserCount($filter=array()) { + $rc = 0; + + if($this->_openDB()) { + $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter); + + if ($this->dbver >= 4) { + $sql = substr($sql, 6); /* remove 'SELECT' or 'select' */ + $sql = "SELECT SQL_CALC_FOUND_ROWS".$sql." LIMIT 1"; + $this->_queryDB($sql); + $result = $this->_queryDB("SELECT FOUND_ROWS()"); + $rc = $result[0]['FOUND_ROWS()']; + } else if (($result = $this->_queryDB($sql))) + $rc = count($result); + + $this->_closeDB(); + } + return $rc; + } + + /** + * Bulk retrieval of user data. [public function] + * + * @param first index of first user to be returned + * @param limit max number of users to be returned + * @param filter array of field/pattern pairs + * @return array of userinfo (refer getUserData for internal userinfo details) + * + * @author Matthias Grimm + */ + function retrieveUsers($first=0,$limit=10,$filter=array()) { + $out = array(); + + if($this->_openDB()) { + $this->_lockTables("READ"); + $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter); + $sql .= " ".$this->cnf['SortOrder']." LIMIT $first, $limit"; + $result = $this->_queryDB($sql); + + if (!empty($result)) { + foreach ($result as $user) + if (($info = $this->_getUserInfo($user['user']))) + $out[$user['user']] = $info; + } + + $this->_unlockTables(); + $this->_closeDB(); + } + return $out; + } + + /** + * Give user membership of a group [public function] + * + * @param $user + * @param $group + * @return bool true on success, false on error + * + * @author Matthias Grimm + */ + function joinGroup($user, $group) { + $rc = false; + + if ($this->_openDB()) { + $this->_lockTables("WRITE"); + $rc = $this->_addUserToGroup($user, $group); + $this->_unlockTables(); + $this->_closeDB(); + } + return $rc; + } + + /** + * Remove user from a group [public function] + * + * @param $user user that leaves a group + * @param $group group to leave + * @return bool + * + * @author Matthias Grimm + */ + function leaveGroup($user, $group) { + $rc = false; + + if ($this->_openDB()) { + $this->_lockTables("WRITE"); + $uid = $this->_getUserID($user); + $rc = $this->_delUserFromGroup($user, $group); + $this->_unlockTables(); + $this->_closeDB(); + } + return $rc; + } + + /** + * MySQL is case-insensitive + */ + function isCaseSensitive(){ + return false; + } + + /** + * Adds a user to a group. + * + * If $force is set to '1' non existing groups would be created. + * + * The database connection must already be established. Otherwise + * this function does nothing and returns 'false'. It is strongly + * recommended to call this function only after all participating + * tables (group and usergroup) have been locked. + * + * @param $user user to add to a group + * @param $group name of the group + * @param $force '1' create missing groups + * @return bool 'true' on success, 'false' on error + * + * @author Matthias Grimm + */ + function _addUserToGroup($user, $group, $force=0) { + $newgroup = 0; + + if (($this->dbcon) && ($user)) { + $gid = $this->_getGroupID($group); + if (!$gid) { + if ($force) { // create missing groups + $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['addGroup']); + $gid = $this->_modifyDB($sql); + $newgroup = 1; // group newly created + } + if (!$gid) return false; // group didn't exist and can't be created + } + + $sql = $this->cnf['addUserGroup']; + if(strpos($sql,'%{uid}') !== false){ + $uid = $this->_getUserID($user); + $sql = str_replace('%{uid}', $this->_escape($uid),$sql); + } + $sql = str_replace('%{user}', $this->_escape($user),$sql); + $sql = str_replace('%{gid}', $this->_escape($gid),$sql); + $sql = str_replace('%{group}',$this->_escape($group),$sql); + if ($this->_modifyDB($sql) !== false) return true; + + if ($newgroup) { // remove previously created group on error + $sql = str_replace('%{gid}', $this->_escape($gid),$this->cnf['delGroup']); + $sql = str_replace('%{group}',$this->_escape($group),$sql); + $this->_modifyDB($sql); + } + } + return false; + } + + /** + * Remove user from a group + * + * @param $user user that leaves a group + * @param $group group to leave + * @return bool true on success, false on error + * + * @author Matthias Grimm + */ + function _delUserFromGroup($user, $group) { + $rc = false; + + + if (($this->dbcon) && ($user)) { + $sql = $this->cnf['delUserGroup']; + if(strpos($sql,'%{uid}') !== false){ + $uid = $this->_getUserID($user); + $sql = str_replace('%{uid}', $this->_escape($uid),$sql); + } + $gid = $this->_getGroupID($group); + if ($gid) { + $sql = str_replace('%{user}', $this->_escape($user),$sql); + $sql = str_replace('%{gid}', $this->_escape($gid),$sql); + $sql = str_replace('%{group}',$this->_escape($group),$sql); + $rc = $this->_modifyDB($sql) == 0 ? true : false; + } + } + return $rc; + } + + /** + * Retrieves a list of groups the user is a member off. + * + * The database connection must already be established + * for this function to work. Otherwise it will return + * 'false'. + * + * @param $user user whose groups should be listed + * @return bool false on error + * @return array array containing all groups on success + * + * @author Matthias Grimm + */ + function _getGroups($user) { + $groups = array(); + + if($this->dbcon) { + $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getGroups']); + $result = $this->_queryDB($sql); + + if($result !== false && count($result)) { + foreach($result as $row) + $groups[] = $row['group']; + } + return $groups; + } + return false; + } + + /** + * Retrieves the user id of a given user name + * + * The database connection must already be established + * for this function to work. Otherwise it will return + * 'false'. + * + * @param $user user whose id is desired + * @return user id + * + * @author Matthias Grimm + */ + function _getUserID($user) { + if($this->dbcon) { + $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserID']); + $result = $this->_queryDB($sql); + return $result === false ? false : $result[0]['id']; + } + return false; + } + + /** + * Adds a new User to the database. + * + * The database connection must already be established + * for this function to work. Otherwise it will return + * 'false'. + * + * @param $user login of the user + * @param $pwd encrypted password + * @param $name full name of the user + * @param $mail email address + * @param $grps array of groups the user should become member of + * @return bool + * + * @author Andreas Gohr + * @author Chris Smith + * @author Matthias Grimm + */ + function _addUser($user,$pwd,$name,$mail,$grps){ + if($this->dbcon && is_array($grps)) { + $sql = str_replace('%{user}', $this->_escape($user),$this->cnf['addUser']); + $sql = str_replace('%{pass}', $this->_escape($pwd),$sql); + $sql = str_replace('%{name}', $this->_escape($name),$sql); + $sql = str_replace('%{email}',$this->_escape($mail),$sql); + $uid = $this->_modifyDB($sql); + + if ($uid) { + foreach($grps as $group) { + $gid = $this->_addUserToGroup($user, $group, 1); + if ($gid === false) break; + } + + if ($gid) return true; + else { + /* remove the new user and all group relations if a group can't + * be assigned. Newly created groups will remain in the database + * and won't be removed. This might create orphaned groups but + * is not a big issue so we ignore this problem here. + */ + $this->_delUser($user); + if ($this->cnf['debug']) + msg ("MySQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__); + } + } + } + return false; + } + + /** + * Deletes a given user and all his group references. + * + * The database connection must already be established + * for this function to work. Otherwise it will return + * 'false'. + * + * @param $user user whose id is desired + * @return bool + * + * @author Matthias Grimm + */ + function _delUser($user) { + if($this->dbcon) { + $uid = $this->_getUserID($user); + if ($uid) { + $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUserRefs']); + $this->_modifyDB($sql); + $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUser']); + $sql = str_replace('%{user}', $this->_escape($user),$sql); + $this->_modifyDB($sql); + return true; + } + } + return false; + } + + /** + * getUserInfo + * + * Gets the data for a specific user The database connection + * must already be established for this function to work. + * Otherwise it will return 'false'. + * + * @param $user user's nick to get data for + * @return bool false on error + * @return array user info on success + * + * @author Matthias Grimm + */ + function _getUserInfo($user){ + $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserInfo']); + $result = $this->_queryDB($sql); + if($result !== false && count($result)) { + $info = $result[0]; + $info['grps'] = $this->_getGroups($user); + return $info; + } + return false; + } + + /** + * Updates the user info in the database + * + * Update a user data structure in the database according changes + * given in an array. The user name can only be changes if it didn't + * exists already. If the new user name exists the update procedure + * will be aborted. The database keeps unchanged. + * + * 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. + * + * @param $changes array of items to change as pairs of item and value + * @param $uid user id of dataset to change, must be unique in DB + * @return true on success or false on error + * + * @author Matthias Grimm + */ + function _updateUserInfo($changes, $uid) { + $sql = $this->cnf['updateUser']." "; + $cnt = 0; + $err = 0; + + if($this->dbcon) { + foreach ($changes as $item => $value) { + if ($item == 'user') { + if (($this->_getUserID($changes['user']))) { + $err = 1; /* new username already exists */ + break; /* abort update */ + } + if ($cnt++ > 0) $sql .= ", "; + $sql .= str_replace('%{user}',$value,$this->cnf['UpdateLogin']); + } else if ($item == 'name') { + if ($cnt++ > 0) $sql .= ", "; + $sql .= str_replace('%{name}',$value,$this->cnf['UpdateName']); + } else if ($item == 'pass') { + if (!$this->cnf['forwardClearPass']) + $value = auth_cryptPassword($value); + if ($cnt++ > 0) $sql .= ", "; + $sql .= str_replace('%{pass}',$value,$this->cnf['UpdatePass']); + } else if ($item == 'mail') { + if ($cnt++ > 0) $sql .= ", "; + $sql .= str_replace('%{email}',$value,$this->cnf['UpdateEmail']); + } + } + + if ($err == 0) { + if ($cnt > 0) { + $sql .= " ".str_replace('%{uid}', $uid, $this->cnf['UpdateTarget']); + if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp. + $this->_modifyDB($sql); + } + return true; + } + } + return false; + } + + /** + * Retrieves the group id of a given group name + * + * The database connection must already be established + * for this function to work. Otherwise it will return + * 'false'. + * + * @param $group group name which id is desired + * @return group id + * + * @author Matthias Grimm + */ + function _getGroupID($group) { + if($this->dbcon) { + $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['getGroupID']); + $result = $this->_queryDB($sql); + return $result === false ? false : $result[0]['id']; + } + return false; + } + + /** + * Opens a connection to a database and saves the handle for further + * usage in the object. The successful call to this functions is + * essential for most functions in this object. + * + * @return bool + * + * @author Matthias Grimm + */ + function _openDB() { + if (!$this->dbcon) { + $con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']); + if ($con) { + if ((mysql_select_db($this->cnf['database'], $con))) { + if ((preg_match("/^(\d+)\.(\d+)\.(\d+).*/", mysql_get_server_info ($con), $result)) == 1) { + $this->dbver = $result[1]; + $this->dbrev = $result[2]; + $this->dbsub = $result[3]; + } + $this->dbcon = $con; + if(!empty($this->cnf['charset'])){ + mysql_query('SET CHARACTER SET "' . $this->cnf['charset'] . '"', $con); + } + return true; // connection and database successfully opened + } else { + mysql_close ($con); + if ($this->cnf['debug']) + msg("MySQL err: No access to database {$this->cnf['database']}.",-1,__LINE__,__FILE__); + } + } else if ($this->cnf['debug']) + msg ("MySQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.", + -1,__LINE__,__FILE__); + + return false; // connection failed + } + return true; // connection already open + } + + /** + * Closes a database connection. + * + * @author Matthias Grimm + */ + function _closeDB() { + if ($this->dbcon) { + mysql_close ($this->dbcon); + $this->dbcon = 0; + } + } + + /** + * Sends a SQL query to the database and transforms the result into + * an associative array. + * + * This function is only able to handle queries that returns a + * table such as SELECT. + * + * @param $query SQL string that contains the query + * @return array with the result table + * + * @author Matthias Grimm + */ + function _queryDB($query) { + if($this->cnf['debug'] >= 2){ + msg('MySQL query: '.hsc($query),0,__LINE__,__FILE__); + } + + $resultarray = array(); + if ($this->dbcon) { + $result = @mysql_query($query,$this->dbcon); + if ($result) { + while (($t = mysql_fetch_assoc($result)) !== false) + $resultarray[]=$t; + mysql_free_result ($result); + return $resultarray; + } + if ($this->cnf['debug']) + msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__); + } + return false; + } + + /** + * Sends a SQL query to the database + * + * This function is only able to handle queries that returns + * either nothing or an id value such as INPUT, DELETE, UPDATE, etc. + * + * @param $query SQL string that contains the query + * @return insert id or 0, false on error + * + * @author Matthias Grimm + */ + function _modifyDB($query) { + if ($this->dbcon) { + $result = @mysql_query($query,$this->dbcon); + if ($result) { + $rc = mysql_insert_id($this->dbcon); //give back ID on insert + if ($rc !== false) return $rc; + } + if ($this->cnf['debug']) + msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__); + } + return false; + } + + /** + * Locked a list of tables for exclusive access so that modifications + * to the database can't be disturbed by other threads. The list + * could be set with $conf['auth']['mysql']['TablesToLock'] = array() + * + * If aliases for tables are used in SQL statements, also this aliases + * must be locked. For eg. you use a table 'user' and the alias 'u' in + * some sql queries, the array must looks like this (order is important): + * array("user", "user AS u"); + * + * MySQL V3 is not able to handle transactions with COMMIT/ROLLBACK + * so that this functionality is simulated by this function. Nevertheless + * it is not as powerful as transactions, it is a good compromise in safty. + * + * @param $mode could be 'READ' or 'WRITE' + * + * @author Matthias Grimm + */ + function _lockTables($mode) { + if ($this->dbcon) { + if (is_array($this->cnf['TablesToLock']) && !empty($this->cnf['TablesToLock'])) { + if ($mode == "READ" || $mode == "WRITE") { + $sql = "LOCK TABLES "; + $cnt = 0; + foreach ($this->cnf['TablesToLock'] as $table) { + if ($cnt++ != 0) $sql .= ", "; + $sql .= "$table $mode"; + } + $this->_modifyDB($sql); + return true; + } + } + } + return false; + } + + /** + * Unlock locked tables. All existing locks of this thread will be + * abrogated. + * + * @author Matthias Grimm + */ + function _unlockTables() { + if ($this->dbcon) { + $this->_modifyDB("UNLOCK TABLES"); + return true; + } + return false; + } + + /** + * Transforms the filter settings in an filter string for a SQL database + * The database connection must already be established, otherwise the + * original SQL string without filter criteria will be returned. + * + * @param $sql SQL string to which the $filter criteria should be added + * @param $filter array of filter criteria as pairs of item and pattern + * @return SQL string with attached $filter criteria on success + * @return the original SQL string on error. + * + * @author Matthias Grimm + */ + function _createSQLFilter($sql, $filter) { + $SQLfilter = ""; + $cnt = 0; + + if ($this->dbcon) { + foreach ($filter as $item => $pattern) { + $tmp = '%'.$this->_escape($pattern).'%'; + if ($item == 'user') { + if ($cnt++ > 0) $SQLfilter .= " AND "; + $SQLfilter .= str_replace('%{user}',$tmp,$this->cnf['FilterLogin']); + } else if ($item == 'name') { + if ($cnt++ > 0) $SQLfilter .= " AND "; + $SQLfilter .= str_replace('%{name}',$tmp,$this->cnf['FilterName']); + } else if ($item == 'mail') { + if ($cnt++ > 0) $SQLfilter .= " AND "; + $SQLfilter .= str_replace('%{email}',$tmp,$this->cnf['FilterEmail']); + } else if ($item == 'grps') { + if ($cnt++ > 0) $SQLfilter .= " AND "; + $SQLfilter .= str_replace('%{group}',$tmp,$this->cnf['FilterGroup']); + } + } + + // we have to check SQLfilter here and must not use $cnt because if + // any of cnf['Filter????'] is not defined, a malformed SQL string + // would be generated. + + if (strlen($SQLfilter)) { + $glue = strpos(strtolower($sql),"where") ? " AND " : " WHERE "; + $sql = $sql.$glue.$SQLfilter; + } + } + + return $sql; + } + + /** + * Escape a string for insertion into the database + * + * @author Andreas Gohr + * @param string $string The string to escape + * @param boolean $like Escape wildcard chars as well? + */ + function _escape($string,$like=false){ + if($this->dbcon){ + $string = mysql_real_escape_string($string, $this->dbcon); + }else{ + $string = addslashes($string); + } + if($like){ + $string = addcslashes($string,'%_'); + } + return $string; + } +} \ No newline at end of file diff --git a/lib/plugins/authmysql/plugin.info.txt b/lib/plugins/authmysql/plugin.info.txt new file mode 100644 index 000000000..d08d4a7ef --- /dev/null +++ b/lib/plugins/authmysql/plugin.info.txt @@ -0,0 +1,7 @@ +base authmysql +author +email +date +name mysql auth plugin +desc Provides authentication against a MySQL Server +url diff --git a/lib/plugins/authpgsql/auth.php b/lib/plugins/authpgsql/auth.php new file mode 100644 index 000000000..824a77882 --- /dev/null +++ b/lib/plugins/authpgsql/auth.php @@ -0,0 +1,331 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * PgSQL authentication backend + * + * This class inherits much functionality from the MySQL class + * and just reimplements the Postgres specific parts. + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Andreas Gohr + * @author Chris Smith + * @author Matthias Grimm + * @author Jan Schumann +*/ +class auth_plugin_authpgsql extends auth_plugin_authmysql +{ + var $cnf = null; + var $opts = null; + var $adldap = null; + var $users = null; + + /** + * Constructor + */ + function auth_plugin_authpgsql() { + global $conf; + $this->cnf = $conf['auth']['ad']; + + + // additional information fields + if (isset($this->cnf['additional'])) { + $this->cnf['additional'] = str_replace(' ', '', $this->cnf['additional']); + $this->cnf['additional'] = explode(',', $this->cnf['additional']); + } else $this->cnf['additional'] = array(); + + // ldap extension is needed + if (!function_exists('ldap_connect')) { + if ($this->cnf['debug']) + msg("AD Auth: PHP LDAP extension not found.",-1); + $this->success = false; + return; + } + + // Prepare SSO + if($_SERVER['REMOTE_USER'] && $this->cnf['sso']){ + // remove possible NTLM domain + list($dom,$usr) = explode('\\',$_SERVER['REMOTE_USER'],2); + if(!$usr) $usr = $dom; + + // remove possible Kerberos domain + list($usr,$dom) = explode('@',$usr); + + $dom = strtolower($dom); + $_SERVER['REMOTE_USER'] = $usr; + + // we need to simulate a login + if(empty($_COOKIE[DOKU_COOKIE])){ + $_REQUEST['u'] = $_SERVER['REMOTE_USER']; + $_REQUEST['p'] = 'sso_only'; + } + } + + // prepare adLDAP standard configuration + $this->opts = $this->cnf; + + // add possible domain specific configuration + if($dom && is_array($this->cnf[$dom])) foreach($this->cnf[$dom] as $key => $val){ + $this->opts[$key] = $val; + } + + // handle multiple AD servers + $this->opts['domain_controllers'] = explode(',',$this->opts['domain_controllers']); + $this->opts['domain_controllers'] = array_map('trim',$this->opts['domain_controllers']); + $this->opts['domain_controllers'] = array_filter($this->opts['domain_controllers']); + + // we can change the password if SSL is set + if($this->opts['use_ssl'] || $this->opts['use_tls']){ + $this->cando['modPass'] = true; + } + $this->cando['modName'] = true; + $this->cando['modMail'] = true; + } + + /** + * Check user+password [required auth function] + * + * Checks if the given user exists and the given + * plaintext password is correct by trying to bind + * to the LDAP server + * + * @author James Van Lommel + * @return bool + */ + function checkPass($user, $pass){ + if($_SERVER['REMOTE_USER'] && + $_SERVER['REMOTE_USER'] == $user && + $this->cnf['sso']) return true; + + if(!$this->_init()) return false; + return $this->adldap->authenticate($user, $pass); + } + + /** + * Return user info [required auth function] + * + * Returns info about the given user needs to contain + * at least these fields: + * + * name string full name of the user + * mail string email address of the user + * grps array list of groups the user is in + * + * This LDAP specific function returns the following + * addional fields: + * + * dn string distinguished name (DN) + * uid string Posix User ID + * + * @author James Van Lommel + */ + function getUserData($user){ + global $conf; + if(!$this->_init()) return false; + + $fields = array('mail','displayname','samaccountname'); + + // add additional fields to read + $fields = array_merge($fields, $this->cnf['additional']); + $fields = array_unique($fields); + + //get info for given user + $result = $this->adldap->user_info($user, $fields); + //general user info + $info['name'] = $result[0]['displayname'][0]; + $info['mail'] = $result[0]['mail'][0]; + $info['uid'] = $result[0]['samaccountname'][0]; + $info['dn'] = $result[0]['dn']; + + // additional information + foreach ($this->cnf['additional'] as $field) { + if (isset($result[0][strtolower($field)])) { + $info[$field] = $result[0][strtolower($field)][0]; + } + } + + // handle ActiveDirectory memberOf + $info['grps'] = $this->adldap->user_groups($user,(bool) $this->opts['recursive_groups']); + + if (is_array($info['grps'])) { + foreach ($info['grps'] as $ndx => $group) { + $info['grps'][$ndx] = $this->cleanGroup($group); + } + } + + // always add the default group to the list of groups + if(!is_array($info['grps']) || !in_array($conf['defaultgroup'],$info['grps'])){ + $info['grps'][] = $conf['defaultgroup']; + } + + return $info; + } + + /** + * Make AD group names usable by DokuWiki. + * + * Removes backslashes ('\'), pound signs ('#'), and converts spaces to underscores. + * + * @author James Van Lommel (jamesvl@gmail.com) + */ + function cleanGroup($name) { + $sName = str_replace('\\', '', $name); + $sName = str_replace('#', '', $sName); + $sName = preg_replace('[\s]', '_', $sName); + return $sName; + } + + /** + * Sanitize user names + */ + function cleanUser($name) { + return $this->cleanGroup($name); + } + + /** + * Most values in LDAP are case-insensitive + */ + function isCaseSensitive(){ + return false; + } + + /** + * Bulk retrieval of user data + * + * @author Dominik Eckelmann + * @param start index of first user to be returned + * @param limit max number of users to be returned + * @param filter array of field/pattern pairs, null for no filter + * @return array of userinfo (refer getUserData for internal userinfo details) + */ + function retrieveUsers($start=0,$limit=-1,$filter=array()) { + if(!$this->_init()) return false; + + if ($this->users === null) { + //get info for given user + $result = $this->adldap->all_users(); + if (!$result) return array(); + $this->users = array_fill_keys($result, false); + } + + $i = 0; + $count = 0; + $this->_constructPattern($filter); + $result = array(); + + foreach ($this->users as $user => &$info) { + if ($i++ < $start) { + continue; + } + if ($info === false) { + $info = $this->getUserData($user); + } + if ($this->_filter($user, $info)) { + $result[$user] = $info; + if (($limit >= 0) && (++$count >= $limit)) break; + } + } + return $result; + } + + /** + * Modify user data + * + * @param $user nick of the user to be changed + * @param $changes array of field/value pairs to be changed + * @return bool + */ + function modifyUser($user, $changes) { + $return = true; + + // password changing + if(isset($changes['pass'])){ + try { + $return = $this->adldap->user_password($user,$changes['pass']); + } catch (adLDAPException $e) { + if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1); + $return = false; + } + if(!$return) msg('AD Auth: failed to change the password. Maybe the password policy was not met?',-1); + } + + // changing user data + $adchanges = array(); + if(isset($changes['name'])){ + // get first and last name + $parts = explode(' ',$changes['name']); + $adchanges['surname'] = array_pop($parts); + $adchanges['firstname'] = join(' ',$parts); + $adchanges['display_name'] = $changes['name']; + } + if(isset($changes['mail'])){ + $adchanges['email'] = $changes['mail']; + } + if(count($adchanges)){ + try { + $return = $return & $this->adldap->user_modify($user,$adchanges); + } catch (adLDAPException $e) { + if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1); + $return = false; + } + } + + return $return; + } + + /** + * Initialize the AdLDAP library and connect to the server + */ + function _init(){ + if(!is_null($this->adldap)) return true; + + // connect + try { + $this->adldap = new adLDAP($this->opts); + if (isset($this->opts['ad_username']) && isset($this->opts['ad_password'])) { + $this->canDo['getUsers'] = true; + } + return true; + } catch (adLDAPException $e) { + if ($this->cnf['debug']) { + msg('AD Auth: '.$e->getMessage(), -1); + } + $this->success = false; + $this->adldap = null; + } + return false; + } + + /** + * return 1 if $user + $info match $filter criteria, 0 otherwise + * + * @author Chris Smith + */ + function _filter($user, $info) { + foreach ($this->_pattern as $item => $pattern) { + if ($item == 'user') { + if (!preg_match($pattern, $user)) return 0; + } else if ($item == 'grps') { + if (!count(preg_grep($pattern, $info['grps']))) return 0; + } else { + if (!preg_match($pattern, $info[$item])) return 0; + } + } + return 1; + } + + function _constructPattern($filter) { + $this->_pattern = array(); + foreach ($filter as $item => $pattern) { +// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters + $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters + } + } +} \ No newline at end of file diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt new file mode 100644 index 000000000..ad565b853 --- /dev/null +++ b/lib/plugins/authpgsql/plugin.info.txt @@ -0,0 +1,7 @@ +base authad +author +email +date +name active directory auth plugin +desc Provides authentication against a Microsoft Active Directory +url diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php new file mode 100644 index 000000000..4be0e0c19 --- /dev/null +++ b/lib/plugins/authplain/auth.php @@ -0,0 +1,335 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * Plaintext authentication backend + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Andreas Gohr + * @author Chris Smith + * @author Jan Schumann + */ +class auth_plugin_authplain extends DokuWiki_Auth_Plugin +{ + var $users = null; + var $_pattern = array(); + + /** + * Constructor + * + * Carry out sanity checks to ensure the object is + * able to operate. Set capabilities. + * + * @author Christopher Smith + */ + function auth_plugin_authplain() { + global $config_cascade; + + if (!@is_readable($config_cascade['plainauth.users']['default'])){ + $this->success = false; + }else{ + if(@is_writable($config_cascade['plainauth.users']['default'])){ + $this->cando['addUser'] = true; + $this->cando['delUser'] = true; + $this->cando['modLogin'] = true; + $this->cando['modPass'] = true; + $this->cando['modName'] = true; + $this->cando['modMail'] = true; + $this->cando['modGroups'] = true; + } + $this->cando['getUsers'] = true; + $this->cando['getUserCount'] = true; + } + } + + /** + * Check user+password [required auth function] + * + * Checks if the given user exists and the given + * plaintext password is correct + * + * @author Andreas Gohr + * @return bool + */ + function checkPass($user,$pass){ + + $userinfo = $this->getUserData($user); + if ($userinfo === false) return false; + + return auth_verifyPassword($pass,$this->users[$user]['pass']); + } + + /** + * Return user info + * + * Returns info about the given user needs to contain + * at least these fields: + * + * name string full name of the user + * mail string email addres of the user + * grps array list of groups the user is in + * + * @author Andreas Gohr + */ + function getUserData($user){ + + if($this->users === null) $this->_loadUserData(); + return isset($this->users[$user]) ? $this->users[$user] : false; + } + + /** + * Create a new User + * + * Returns false if the user already exists, null when an error + * occurred and true if everything went well. + * + * The new user will be added to the default group by this + * function if grps are not specified (default behaviour). + * + * @author Andreas Gohr + * @author Chris Smith + */ + function createUser($user,$pwd,$name,$mail,$grps=null){ + global $conf; + global $config_cascade; + + // user mustn't already exist + if ($this->getUserData($user) !== false) return false; + + $pass = auth_cryptPassword($pwd); + + // set default group if no groups specified + if (!is_array($grps)) $grps = array($conf['defaultgroup']); + + // prepare user line + $groups = join(',',$grps); + $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n"; + + if (io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) { + $this->users[$user] = compact('pass','name','mail','grps'); + return $pwd; + } + + msg('The '.$config_cascade['plainauth.users']['default']. + ' file is not writable. Please inform the Wiki-Admin',-1); + return null; + } + + /** + * Modify user data + * + * @author Chris Smith + * @param $user nick of the user to be changed + * @param $changes array of field/value pairs to be changed (password will be clear text) + * @return bool + */ + function modifyUser($user, $changes) { + global $conf; + global $ACT; + global $INFO; + global $config_cascade; + + // sanity checks, user must already exist and there must be something to change + if (($userinfo = $this->getUserData($user)) === false) return false; + if (!is_array($changes) || !count($changes)) return true; + + // update userinfo with new data, remembering to encrypt any password + $newuser = $user; + foreach ($changes as $field => $value) { + if ($field == 'user') { + $newuser = $value; + continue; + } + if ($field == 'pass') $value = auth_cryptPassword($value); + $userinfo[$field] = $value; + } + + $groups = join(',',$userinfo['grps']); + $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n"; + + if (!$this->deleteUsers(array($user))) { + msg('Unable to modify user data. Please inform the Wiki-Admin',-1); + return false; + } + + if (!io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) { + msg('There was an error modifying your user data. You should register again.',-1); + // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page + $ACT == 'register'; + return false; + } + + $this->users[$newuser] = $userinfo; + return true; + } + + /** + * Remove one or more users from the list of registered users + * + * @author Christopher Smith + * @param array $users array of users to be deleted + * @return int the number of users deleted + */ + function deleteUsers($users) { + global $config_cascade; + + if (!is_array($users) || empty($users)) return 0; + + if ($this->users === null) $this->_loadUserData(); + + $deleted = array(); + foreach ($users as $user) { + if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/'); + } + + if (empty($deleted)) return 0; + + $pattern = '/^('.join('|',$deleted).'):/'; + + if (io_deleteFromFile($config_cascade['plainauth.users']['default'],$pattern,true)) { + foreach ($deleted as $user) unset($this->users[$user]); + return count($deleted); + } + + // problem deleting, reload the user list and count the difference + $count = count($this->users); + $this->_loadUserData(); + $count -= count($this->users); + return $count; + } + + /** + * Return a count of the number of user which meet $filter criteria + * + * @author Chris Smith + */ + function getUserCount($filter=array()) { + + if($this->users === null) $this->_loadUserData(); + + if (!count($filter)) return count($this->users); + + $count = 0; + $this->_constructPattern($filter); + + foreach ($this->users as $user => $info) { + $count += $this->_filter($user, $info); + } + + return $count; + } + + /** + * Bulk retrieval of user data + * + * @author Chris Smith + * @param start index of first user to be returned + * @param limit max number of users to be returned + * @param filter array of field/pattern pairs + * @return array of userinfo (refer getUserData for internal userinfo details) + */ + function retrieveUsers($start=0,$limit=0,$filter=array()) { + + if ($this->users === null) $this->_loadUserData(); + + ksort($this->users); + + $i = 0; + $count = 0; + $out = array(); + $this->_constructPattern($filter); + + foreach ($this->users as $user => $info) { + if ($this->_filter($user, $info)) { + if ($i >= $start) { + $out[$user] = $info; + $count++; + if (($limit > 0) && ($count >= $limit)) break; + } + $i++; + } + } + + return $out; + } + + /** + * Only valid pageid's (no namespaces) for usernames + */ + function cleanUser($user){ + global $conf; + return cleanID(str_replace(':',$conf['sepchar'],$user)); + } + + /** + * Only valid pageid's (no namespaces) for groupnames + */ + function cleanGroup($group){ + global $conf; + return cleanID(str_replace(':',$conf['sepchar'],$group)); + } + + /** + * Load all user data + * + * loads the user file into a datastructure + * + * @author Andreas Gohr + */ + function _loadUserData(){ + global $config_cascade; + + $this->users = array(); + + if(!@file_exists($config_cascade['plainauth.users']['default'])) return; + + $lines = file($config_cascade['plainauth.users']['default']); + foreach($lines as $line){ + $line = preg_replace('/#.*$/','',$line); //ignore comments + $line = trim($line); + if(empty($line)) continue; + + $row = explode(":",$line,5); + $groups = array_values(array_filter(explode(",",$row[4]))); + + $this->users[$row[0]]['pass'] = $row[1]; + $this->users[$row[0]]['name'] = urldecode($row[2]); + $this->users[$row[0]]['mail'] = $row[3]; + $this->users[$row[0]]['grps'] = $groups; + } + } + + /** + * return 1 if $user + $info match $filter criteria, 0 otherwise + * + * @author Chris Smith + */ + function _filter($user, $info) { + // FIXME + foreach ($this->_pattern as $item => $pattern) { + if ($item == 'user') { + if (!preg_match($pattern, $user)) return 0; + } else if ($item == 'grps') { + if (!count(preg_grep($pattern, $info['grps']))) return 0; + } else { + if (!preg_match($pattern, $info[$item])) return 0; + } + } + return 1; + } + + function _constructPattern($filter) { + $this->_pattern = array(); + foreach ($filter as $item => $pattern) { +// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters + $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters + } + } +} \ No newline at end of file diff --git a/lib/plugins/authplain/plugin.info.txt b/lib/plugins/authplain/plugin.info.txt new file mode 100644 index 000000000..3273e21d7 --- /dev/null +++ b/lib/plugins/authplain/plugin.info.txt @@ -0,0 +1,7 @@ +base authplain +author +email +date +name auth plugin +desc Provides authentication against local password storage +url diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php index cee3c6b20..f6adf1c18 100644 --- a/lib/plugins/config/settings/extra.class.php +++ b/lib/plugins/config/settings/extra.class.php @@ -45,22 +45,52 @@ if (!class_exists('setting_authtype')) { function initialize($default,$local,$protected) { global $plugin_controller; - // populate $this->_choices with a list of available auth mechanisms - $authtypes = glob(DOKU_INC.'inc/auth/*.class.php'); - $authtypes = preg_replace('#^.*/([^/]*)\.class\.php$#i','$1', $authtypes); - $authtypes = array_diff($authtypes, array('basic')); - // retrive auth types provided by plugins foreach ($plugin_controller->getList('auth') as $plugin) { - $authtypes[] = $plugin; + $this->_choices[] = $plugin; } - $authtypes = array_unique($authtypes); - - $this->_choices = $authtypes; - parent::initialize($default,$local,$protected); } + + function update($input) { + global $plugin_controller; + + // is an update posible? + $mayUpdate = parent::update($input); + + // is it an auth plugin? + if (in_array($input, $plugin_controller->getList('auth'))) { + // reject disabled plugins + if ($plugin_controller->isdisabled($input)) { + $this->_error = true; + msg('Auth type ' . $input . ' is disabled.'); + return false; + } + + // load the plugin + $auth_plugin = $plugin_controller->load('auth', $input); + + // @TODO: throw an error in plugin controller instead of returning null + if (is_null($auth_plugin)) { + $this->_error = true; + msg('Cannot load Auth Plugin "' . $input . '"'); + return false; + } + + // verify proper instanciation (is this really a plugin?) @TODO use instanceof? impement interface? + if (is_object($auth_plugin) && !method_exists($auth_plugin, 'getPluginName')) { + $this->_error = true; + msg('Cannot create Auth Plugin "' . $input . '"'); + return false; + } + } + + msg('Successfully changed auth system. Please re-login.'); + auth_logoff(); + + return true; + } } } -- cgit v1.2.3 From 94c0297d119ce52ad794c18f26220311e3c0ed8c Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 6 Oct 2012 11:31:26 +0200 Subject: completed plugin.info.txt files --- lib/plugins/auth.php | 7 +++---- lib/plugins/authad/plugin.info.txt | 8 ++++---- lib/plugins/authldap/plugin.info.txt | 8 ++++---- lib/plugins/authmysql/plugin.info.txt | 8 ++++---- lib/plugins/authpgsql/plugin.info.txt | 8 ++++---- lib/plugins/authplain/plugin.info.txt | 8 ++++---- 6 files changed, 23 insertions(+), 24 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php index 637435252..39d63d8a1 100644 --- a/lib/plugins/auth.php +++ b/lib/plugins/auth.php @@ -1,4 +1,7 @@ * @author Jan Schumann - */ -// must be run within Dokuwiki -if(!defined('DOKU_INC')) die(); - class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { var $success = true; diff --git a/lib/plugins/authad/plugin.info.txt b/lib/plugins/authad/plugin.info.txt index ad565b853..598eb848b 100644 --- a/lib/plugins/authad/plugin.info.txt +++ b/lib/plugins/authad/plugin.info.txt @@ -1,7 +1,7 @@ base authad -author -email -date +author Andreas Gohr +email andi@splitbrain.org +date 2012-10-06 name active directory auth plugin desc Provides authentication against a Microsoft Active Directory -url +url http://www.dokuwiki.org/plugin:authad diff --git a/lib/plugins/authldap/plugin.info.txt b/lib/plugins/authldap/plugin.info.txt index c36385224..2af8cf00a 100644 --- a/lib/plugins/authldap/plugin.info.txt +++ b/lib/plugins/authldap/plugin.info.txt @@ -1,7 +1,7 @@ base authldap -author -email -date +author Andreas Gohr +email andi@splitbrain.org +date 2012-10-06 name ldap auth plugin desc Provides authentication against am LDAP server -url +url http://www.dokuwiki.org/plugin:authldap diff --git a/lib/plugins/authmysql/plugin.info.txt b/lib/plugins/authmysql/plugin.info.txt index d08d4a7ef..c1e118427 100644 --- a/lib/plugins/authmysql/plugin.info.txt +++ b/lib/plugins/authmysql/plugin.info.txt @@ -1,7 +1,7 @@ base authmysql -author -email -date +author Andreas Gohr +email andi@splitbrain.org +date 2012-10-06 name mysql auth plugin desc Provides authentication against a MySQL Server -url +url http://www.dokuwiki.org/plugin:authmysql diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt index ad565b853..598eb848b 100644 --- a/lib/plugins/authpgsql/plugin.info.txt +++ b/lib/plugins/authpgsql/plugin.info.txt @@ -1,7 +1,7 @@ base authad -author -email -date +author Andreas Gohr +email andi@splitbrain.org +date 2012-10-06 name active directory auth plugin desc Provides authentication against a Microsoft Active Directory -url +url http://www.dokuwiki.org/plugin:authad diff --git a/lib/plugins/authplain/plugin.info.txt b/lib/plugins/authplain/plugin.info.txt index 3273e21d7..cde38eaac 100644 --- a/lib/plugins/authplain/plugin.info.txt +++ b/lib/plugins/authplain/plugin.info.txt @@ -1,7 +1,7 @@ base authplain -author -email -date +author Andreas Gohr +email andi@splitbrain.org +date 2012-10-06 name auth plugin desc Provides authentication against local password storage -url +url http://www.dokuwiki.org/plugin:authplain -- cgit v1.2.3 From ecd445c000e4e54bf7228890848222312cffd3e3 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 7 Oct 2012 09:43:34 +0200 Subject: PHP5ized the auth plugin base --- lib/plugins/auth.php | 146 ++++++++++++++++++++++++++++----------------------- 1 file changed, 80 insertions(+), 66 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php index 39d63d8a1..4c3c585cf 100644 --- a/lib/plugins/auth.php +++ b/lib/plugins/auth.php @@ -13,14 +13,14 @@ if(!defined('DOKU_INC')) die(); * @author Jan Schumann */ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { - var $success = true; + public $success = true; /** - * Posible things an auth backend module may be able to + * Possible things an auth backend module may be able to * do. The things a backend can do need to be set to true * in the constructor. */ - var $cando = array ( + protected $cando = array( 'addUser' => false, // can Users be created? 'delUser' => false, // can Users be deleted? 'modLogin' => false, // can login names be changed? @@ -32,7 +32,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { 'getUserCount'=> false, // can the number of users be retrieved? 'getGroups' => false, // can a list of available groups be retrieved? 'external' => false, // does the module do external auth checking? - 'logout' => true, // can the user logout again? (eg. not possible with HTTP auth) + 'logout' => true, // can the user logout again? (eg. not possible with HTTP auth) ); /** @@ -46,7 +46,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * * @author Christopher Smith */ - function __construct() { + public function __construct() { // the base class constructor does nothing, derived class // constructors do the real work } @@ -62,29 +62,30 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * shortcut capabilities start with uppercase letter * * @author Andreas Gohr + * @param string $cap the capability to check * @return bool */ - function canDo($cap) { - switch($cap){ + public function canDo($cap) { + switch($cap) { case 'Profile': // can at least one of the user's properties be changed? - return ( $this->cando['modPass'] || - $this->cando['modName'] || - $this->cando['modMail'] ); + return ($this->cando['modPass'] || + $this->cando['modName'] || + $this->cando['modMail']); break; case 'UserMod': // can at least anything be changed? - return ( $this->cando['modPass'] || - $this->cando['modName'] || - $this->cando['modMail'] || - $this->cando['modLogin'] || - $this->cando['modGroups'] || - $this->cando['modMail'] ); + return ($this->cando['modPass'] || + $this->cando['modName'] || + $this->cando['modMail'] || + $this->cando['modLogin'] || + $this->cando['modGroups'] || + $this->cando['modMail']); break; default: // print a helping message for developers - if(!isset($this->cando[$cap])){ - msg("Check for unknown capability '$cap' - Do you use an outdated Plugin?",-1); + if(!isset($this->cando[$cap])) { + msg("Check for unknown capability '$cap' - Do you use an outdated Plugin?", -1); } return $this->cando[$cap]; } @@ -99,10 +100,10 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * * @author Gabriel Birke * @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 + * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type * @return mixed Result from the modification function or false if an event handler has canceled the action */ - function triggerUserMod($type, $params) { + public function triggerUserMod($type, $params) { $validTypes = array( 'create' => 'createUser', 'modify' => 'modifyUser', @@ -111,9 +112,9 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { if(empty($validTypes[$type])) return false; $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null); - $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata); - if ($evt->advise_before(true)) { - $result = call_user_func_array(array($this, $validTypes[$type]), $params); + $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata); + if($evt->advise_before(true)) { + $result = call_user_func_array(array($this, $validTypes[$type]), $params); $evt->data['modification_result'] = $result; } $evt->advise_after(); @@ -130,7 +131,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * @see auth_logoff() * @author Andreas Gohr */ - function logOff(){ + public function logOff() { } /** @@ -166,7 +167,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * @param bool $sticky Cookie should not expire * @return bool true on successful auth */ - function trustExternal($user,$pass,$sticky=false){ + public function trustExternal($user, $pass, $sticky = false) { /* some example: global $USERINFO; @@ -197,9 +198,11 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * May be ommited if trustExternal is used. * * @author Andreas Gohr + * @param string $user the user name + * @param string $pass the clear text password * @return bool */ - function checkPass($user,$pass){ + public function checkPass($user, $pass) { msg("no valid authorisation system in use", -1); return false; } @@ -215,9 +218,10 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * grps array list of groups the user is in * * @author Andreas Gohr + * @param string $user the user name * @return array containing user data or false */ - function getUserData($user) { + public function getUserData($user) { if(!$this->cando['external']) msg("no valid authorisation system in use", -1); return false; } @@ -234,8 +238,14 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * Set addUser capability when implemented * * @author Andreas Gohr + * @param string $user + * @param string $pass + * @param string $name + * @param string $mail + * @param null|array $grps + * @return bool|null */ - function createUser($user,$pass,$name,$mail,$grps=null){ + public function createUser($user, $pass, $name, $mail, $grps = null) { msg("authorisation method does not allow creation of new users", -1); return null; } @@ -246,11 +256,11 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * Set the mod* capabilities according to the implemented features * * @author Chris Smith - * @param $user nick of the user to be changed - * @param $changes array of field/value pairs to be changed (password will be clear text) + * @param string $user nick of the user to be changed + * @param array $changes array of field/value pairs to be changed (password will be clear text) * @return bool */ - function modifyUser($user, $changes) { + public function modifyUser($user, $changes) { msg("authorisation method does not allow modifying of user data", -1); return false; } @@ -264,7 +274,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * @param array $users * @return int number of users deleted */ - function deleteUsers($users) { + public function deleteUsers($users) { msg("authorisation method does not allow deleting of users", -1); return false; } @@ -275,9 +285,11 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * * Set getUserCount capability when implemented * - * @author Chris Smith + * @author Chris Smith + * @param array $filter array of field/pattern pairs, empty array for no filter + * @return int */ - function getUserCount($filter=array()) { + public function getUserCount($filter = array()) { msg("authorisation method does not provide user counts", -1); return 0; } @@ -288,12 +300,12 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * Set getUsers capability when implemented * * @author Chris Smith - * @param start index of first user to be returned - * @param limit max number of users to be returned - * @param filter array of field/pattern pairs, null for no filter - * @return array of userinfo (refer getUserData for internal userinfo details) + * @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 + * @return array list of userinfo (refer getUserData for internal userinfo details) */ - function retrieveUsers($start=0,$limit=-1,$filter=null) { + public function retrieveUsers($start = 0, $limit = -1, $filter = null) { msg("authorisation method does not support mass retrieval of user data", -1); return array(); } @@ -304,9 +316,10 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * Set addGroup capability when implemented * * @author Chris Smith + * @param string $group * @return bool */ - function addGroup($group) { + public function addGroup($group) { msg("authorisation method does not support independent group creation", -1); return false; } @@ -317,9 +330,11 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * Set getGroups capability when implemented * * @author Chris Smith + * @param int $start + * @param int $limit * @return array */ - function retrieveGroups($start=0,$limit=0) { + public function retrieveGroups($start = 0, $limit = 0) { msg("authorisation method does not support group list retrieval", -1); return array(); } @@ -329,8 +344,10 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * * When your backend is caseinsensitive (eg. you can login with USER and * user) then you need to overwrite this method and return false + * + * @return bool */ - function isCaseSensitive(){ + public function isCaseSensitive() { return true; } @@ -344,10 +361,10 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * This should be used to enforce username restrictions. * * @author Andreas Gohr - * @param string $user - username - * @param string - the cleaned username + * @param string $user username + * @return string the cleaned username */ - function cleanUser($user){ + public function cleanUser($user) { return $user; } @@ -363,14 +380,13 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * Groupnames are to be passed without a leading '@' here. * * @author Andreas Gohr - * @param string $group - groupname - * @param string - the cleaned groupname + * @param string $group groupname + * @return string the cleaned groupname */ - function cleanGroup($group){ + public function cleanGroup($group) { return $group; } - /** * Check Session Cache validity [implement only where required/possible] * @@ -396,27 +412,25 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * @author Andreas Gohr * @return bool */ - function useSessionCache($user){ + public function useSessionCache($user) { global $conf; return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge')); } + /** + * loadConfig() + * merges the plugin's default settings with any local settings + * this function is automatically called through getConf() + */ + function loadConfig() { + global $conf; - /** - * loadConfig() - * merges the plugin's default settings with any local settings - * this function is automatically called through getConf() - */ - function loadConfig(){ - global $conf; - - parent::loadConfig(); - - $this->conf['debug'] = $conf['debug']; - $this->conf['useacl'] = $conf['useacl']; - $this->conf['disableactions'] = $conf['disableactions']; - $this->conf['autopasswd'] = $conf['autopasswd']; - $this->conf['passcrypt'] = $conf['ssha']; - } + parent::loadConfig(); + $this->conf['debug'] = $conf['debug']; + $this->conf['useacl'] = $conf['useacl']; + $this->conf['disableactions'] = $conf['disableactions']; + $this->conf['autopasswd'] = $conf['autopasswd']; + $this->conf['passcrypt'] = $conf['ssha']; + } } -- cgit v1.2.3 From 4d390d4260c028ff110151e305e93b80f3eb13eb Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 9 Nov 2012 14:00:14 +0100 Subject: don't merge any global confs into auth plugin configs --- lib/plugins/auth.php | 17 ----------------- 1 file changed, 17 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php index 4c3c585cf..cd2f9ac12 100644 --- a/lib/plugins/auth.php +++ b/lib/plugins/auth.php @@ -416,21 +416,4 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { global $conf; return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge')); } - - /** - * loadConfig() - * merges the plugin's default settings with any local settings - * this function is automatically called through getConf() - */ - function loadConfig() { - global $conf; - - parent::loadConfig(); - - $this->conf['debug'] = $conf['debug']; - $this->conf['useacl'] = $conf['useacl']; - $this->conf['disableactions'] = $conf['disableactions']; - $this->conf['autopasswd'] = $conf['autopasswd']; - $this->conf['passcrypt'] = $conf['ssha']; - } } -- cgit v1.2.3 From 454d868b911059adb8889a2d6afefa016d6a21f5 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 9 Nov 2012 14:04:41 +0100 Subject: make all sub auth classes call the parent constructor This does nothing currently but allows us adding certain things to the base class later. --- lib/plugins/auth.php | 3 +++ lib/plugins/authad/auth.php | 2 ++ lib/plugins/authldap/auth.php | 2 ++ lib/plugins/authmysql/auth.php | 2 ++ lib/plugins/authpgsql/auth.php | 2 ++ lib/plugins/authplain/auth.php | 1 + 6 files changed, 12 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php index cd2f9ac12..cce2370d9 100644 --- a/lib/plugins/auth.php +++ b/lib/plugins/auth.php @@ -42,6 +42,9 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * able to operate. Set capabilities in $this->cando * array here * + * For future compatibility, sub classes should always include a call + * to parent::__constructor() in their constructors! + * * Set $this->success to false if checks fail * * @author Christopher Smith diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index 35c19f471..0900a3f87 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -82,6 +82,8 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { * Constructor */ public function __construct() { + parent::__construct(); + global $conf; $this->cnf = $conf['auth']['ad']; diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php index 721abb48e..93683bc16 100644 --- a/lib/plugins/authldap/auth.php +++ b/lib/plugins/authldap/auth.php @@ -19,6 +19,8 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin { * Constructor */ function __construct(){ + parent::__construct(); + global $conf; $this->cnf = $conf['auth']['ldap']; diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php index 8a8f9a488..368bd74a2 100644 --- a/lib/plugins/authmysql/auth.php +++ b/lib/plugins/authmysql/auth.php @@ -28,6 +28,8 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin { * @author Matthias Grimm */ function __construct() { + parent::__construct(); + global $conf; $this->cnf = $conf['auth']['mysql']; diff --git a/lib/plugins/authpgsql/auth.php b/lib/plugins/authpgsql/auth.php index 824a77882..46154b6ca 100644 --- a/lib/plugins/authpgsql/auth.php +++ b/lib/plugins/authpgsql/auth.php @@ -31,6 +31,8 @@ class auth_plugin_authpgsql extends auth_plugin_authmysql * Constructor */ function auth_plugin_authpgsql() { + parent::__construct(); + global $conf; $this->cnf = $conf['auth']['ad']; diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php index 570d029ff..2e72bbd79 100644 --- a/lib/plugins/authplain/auth.php +++ b/lib/plugins/authplain/auth.php @@ -23,6 +23,7 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { * @author Christopher Smith */ function __construct() { + parent::__construct(); global $config_cascade; if (!@is_readable($config_cascade['plainauth.users']['default'])){ -- cgit v1.2.3 From 5a65cc7f5700c1a96e469b9f5a57bbe1ca879f53 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 9 Nov 2012 14:07:17 +0100 Subject: some comment cleanup in authad --- lib/plugins/authad/auth.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index 0900a3f87..e82610327 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -13,15 +13,9 @@ require_once(DOKU_INC.'inc/adLDAP.php'); * Usage: * Set DokuWiki's local.protected.php auth setting to read * - * $conf['useacl'] = 1; - * $conf['disableactions'] = 'register'; - * $conf['autopasswd'] = 0; * $conf['authtype'] = 'authad'; - * $conf['passcrypt'] = 'ssha'; * - * $conf['auth']['ad']['account_suffix'] = ' - * - * @my.domain.org'; + * $conf['auth']['ad']['account_suffix'] = '@my.domain.org'; * $conf['auth']['ad']['base_dn'] = 'DC=my,DC=domain,DC=org'; * $conf['auth']['ad']['domain_controllers'] = 'srv1.domain.org,srv2.domain.org'; * -- cgit v1.2.3 From 76ce1169a0c8cbb18423b1581800b9aa1050ccd5 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 9 Nov 2012 14:13:32 +0100 Subject: moved adLDAP to authad plugin and fixed includes --- lib/plugins/authad/adLDAP/adLDAP.php | 951 +++++++++++++++++++++ .../authad/adLDAP/classes/adLDAPComputers.php | 153 ++++ .../authad/adLDAP/classes/adLDAPContacts.php | 294 +++++++ .../authad/adLDAP/classes/adLDAPExchange.php | 390 +++++++++ .../authad/adLDAP/classes/adLDAPFolders.php | 179 ++++ lib/plugins/authad/adLDAP/classes/adLDAPGroups.php | 631 ++++++++++++++ lib/plugins/authad/adLDAP/classes/adLDAPUsers.php | 682 +++++++++++++++ lib/plugins/authad/adLDAP/classes/adLDAPUtils.php | 264 ++++++ .../authad/adLDAP/collections/adLDAPCollection.php | 137 +++ .../collections/adLDAPComputerCollection.php | 46 + .../adLDAP/collections/adLDAPContactCollection.php | 46 + .../adLDAP/collections/adLDAPGroupCollection.php | 46 + .../adLDAP/collections/adLDAPUserCollection.php | 46 + lib/plugins/authad/auth.php | 4 +- 14 files changed, 3866 insertions(+), 3 deletions(-) create mode 100644 lib/plugins/authad/adLDAP/adLDAP.php create mode 100644 lib/plugins/authad/adLDAP/classes/adLDAPComputers.php create mode 100644 lib/plugins/authad/adLDAP/classes/adLDAPContacts.php create mode 100644 lib/plugins/authad/adLDAP/classes/adLDAPExchange.php create mode 100644 lib/plugins/authad/adLDAP/classes/adLDAPFolders.php create mode 100644 lib/plugins/authad/adLDAP/classes/adLDAPGroups.php create mode 100644 lib/plugins/authad/adLDAP/classes/adLDAPUsers.php create mode 100644 lib/plugins/authad/adLDAP/classes/adLDAPUtils.php create mode 100644 lib/plugins/authad/adLDAP/collections/adLDAPCollection.php create mode 100644 lib/plugins/authad/adLDAP/collections/adLDAPComputerCollection.php create mode 100644 lib/plugins/authad/adLDAP/collections/adLDAPContactCollection.php create mode 100644 lib/plugins/authad/adLDAP/collections/adLDAPGroupCollection.php create mode 100644 lib/plugins/authad/adLDAP/collections/adLDAPUserCollection.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/adLDAP/adLDAP.php b/lib/plugins/authad/adLDAP/adLDAP.php new file mode 100644 index 000000000..a8f33b47e --- /dev/null +++ b/lib/plugins/authad/adLDAP/adLDAP.php @@ -0,0 +1,951 @@ +ldapConnection) { + return $this->ldapConnection; + } + return false; + } + + /** + * Get the bind status + * + * @return bool + */ + public function getLdapBind() { + return $this->ldapBind; + } + + /** + * Get the current base DN + * + * @return string + */ + public function getBaseDn() { + return $this->baseDn; + } + + /** + * The group class + * + * @var adLDAPGroups + */ + protected $groupClass; + + /** + * Get the group class interface + * + * @return adLDAPGroups + */ + public function group() { + if (!$this->groupClass) { + $this->groupClass = new adLDAPGroups($this); + } + return $this->groupClass; + } + + /** + * The user class + * + * @var adLDAPUsers + */ + protected $userClass; + + /** + * Get the userclass interface + * + * @return adLDAPUsers + */ + public function user() { + if (!$this->userClass) { + $this->userClass = new adLDAPUsers($this); + } + return $this->userClass; + } + + /** + * The folders class + * + * @var adLDAPFolders + */ + protected $folderClass; + + /** + * Get the folder class interface + * + * @return adLDAPFolders + */ + public function folder() { + if (!$this->folderClass) { + $this->folderClass = new adLDAPFolders($this); + } + return $this->folderClass; + } + + /** + * The utils class + * + * @var adLDAPUtils + */ + protected $utilClass; + + /** + * Get the utils class interface + * + * @return adLDAPUtils + */ + public function utilities() { + if (!$this->utilClass) { + $this->utilClass = new adLDAPUtils($this); + } + return $this->utilClass; + } + + /** + * The contacts class + * + * @var adLDAPContacts + */ + protected $contactClass; + + /** + * Get the contacts class interface + * + * @return adLDAPContacts + */ + public function contact() { + if (!$this->contactClass) { + $this->contactClass = new adLDAPContacts($this); + } + return $this->contactClass; + } + + /** + * The exchange class + * + * @var adLDAPExchange + */ + protected $exchangeClass; + + /** + * Get the exchange class interface + * + * @return adLDAPExchange + */ + public function exchange() { + if (!$this->exchangeClass) { + $this->exchangeClass = new adLDAPExchange($this); + } + return $this->exchangeClass; + } + + /** + * The computers class + * + * @var adLDAPComputers + */ + protected $computersClass; + + /** + * Get the computers class interface + * + * @return adLDAPComputers + */ + public function computer() { + if (!$this->computerClass) { + $this->computerClass = new adLDAPComputers($this); + } + return $this->computerClass; + } + + /** + * Getters and Setters + */ + + /** + * Set the account suffix + * + * @param string $accountSuffix + * @return void + */ + public function setAccountSuffix($accountSuffix) + { + $this->accountSuffix = $accountSuffix; + } + + /** + * Get the account suffix + * + * @return string + */ + public function getAccountSuffix() + { + return $this->accountSuffix; + } + + /** + * Set the domain controllers array + * + * @param array $domainControllers + * @return void + */ + public function setDomainControllers(array $domainControllers) + { + $this->domainControllers = $domainControllers; + } + + /** + * Get the list of domain controllers + * + * @return void + */ + public function getDomainControllers() + { + return $this->domainControllers; + } + + /** + * Sets the port number your domain controller communicates over + * + * @param int $adPort + */ + public function setPort($adPort) + { + $this->adPort = $adPort; + } + + /** + * Gets the port number your domain controller communicates over + * + * @return int + */ + public function getPort() + { + return $this->adPort; + } + + /** + * Set the username of an account with higher priviledges + * + * @param string $adminUsername + * @return void + */ + public function setAdminUsername($adminUsername) + { + $this->adminUsername = $adminUsername; + } + + /** + * Get the username of the account with higher priviledges + * + * This will throw an exception for security reasons + */ + public function getAdminUsername() + { + throw new adLDAPException('For security reasons you cannot access the domain administrator account details'); + } + + /** + * Set the password of an account with higher priviledges + * + * @param string $adminPassword + * @return void + */ + public function setAdminPassword($adminPassword) + { + $this->adminPassword = $adminPassword; + } + + /** + * Get the password of the account with higher priviledges + * + * This will throw an exception for security reasons + */ + public function getAdminPassword() + { + throw new adLDAPException('For security reasons you cannot access the domain administrator account details'); + } + + /** + * Set whether to detect the true primary group + * + * @param bool $realPrimaryGroup + * @return void + */ + public function setRealPrimaryGroup($realPrimaryGroup) + { + $this->realPrimaryGroup = $realPrimaryGroup; + } + + /** + * Get the real primary group setting + * + * @return bool + */ + public function getRealPrimaryGroup() + { + return $this->realPrimaryGroup; + } + + /** + * Set whether to use SSL + * + * @param bool $useSSL + * @return void + */ + public function setUseSSL($useSSL) + { + $this->useSSL = $useSSL; + // Set the default port correctly + if($this->useSSL) { + $this->setPort(self::ADLDAP_LDAPS_PORT); + } + else { + $this->setPort(self::ADLDAP_LDAP_PORT); + } + } + + /** + * Get the SSL setting + * + * @return bool + */ + public function getUseSSL() + { + return $this->useSSL; + } + + /** + * Set whether to use TLS + * + * @param bool $useTLS + * @return void + */ + public function setUseTLS($useTLS) + { + $this->useTLS = $useTLS; + } + + /** + * Get the TLS setting + * + * @return bool + */ + public function getUseTLS() + { + return $this->useTLS; + } + + /** + * Set whether to use SSO + * Requires ldap_sasl_bind support. Be sure --with-ldap-sasl is used when configuring PHP otherwise this function will be undefined. + * + * @param bool $useSSO + * @return void + */ + public function setUseSSO($useSSO) + { + if ($useSSO === true && !$this->ldapSaslSupported()) { + throw new adLDAPException('No LDAP SASL support for PHP. See: http://www.php.net/ldap_sasl_bind'); + } + $this->useSSO = $useSSO; + } + + /** + * Get the SSO setting + * + * @return bool + */ + public function getUseSSO() + { + return $this->useSSO; + } + + /** + * Set whether to lookup recursive groups + * + * @param bool $recursiveGroups + * @return void + */ + public function setRecursiveGroups($recursiveGroups) + { + $this->recursiveGroups = $recursiveGroups; + } + + /** + * Get the recursive groups setting + * + * @return bool + */ + public function getRecursiveGroups() + { + return $this->recursiveGroups; + } + + /** + * Default Constructor + * + * Tries to bind to the AD domain over LDAP or LDAPs + * + * @param array $options Array of options to pass to the constructor + * @throws Exception - if unable to bind to Domain Controller + * @return bool + */ + function __construct($options = array()) { + // You can specifically overide any of the default configuration options setup above + if (count($options) > 0) { + if (array_key_exists("account_suffix",$options)){ $this->accountSuffix = $options["account_suffix"]; } + if (array_key_exists("base_dn",$options)){ $this->baseDn = $options["base_dn"]; } + if (array_key_exists("domain_controllers",$options)){ + if (!is_array($options["domain_controllers"])) { + throw new adLDAPException('[domain_controllers] option must be an array'); + } + $this->domainControllers = $options["domain_controllers"]; + } + if (array_key_exists("admin_username",$options)){ $this->adminUsername = $options["admin_username"]; } + if (array_key_exists("admin_password",$options)){ $this->adminPassword = $options["admin_password"]; } + if (array_key_exists("real_primarygroup",$options)){ $this->realPrimaryGroup = $options["real_primarygroup"]; } + if (array_key_exists("use_ssl",$options)){ $this->setUseSSL($options["use_ssl"]); } + if (array_key_exists("use_tls",$options)){ $this->useTLS = $options["use_tls"]; } + if (array_key_exists("recursive_groups",$options)){ $this->recursiveGroups = $options["recursive_groups"]; } + if (array_key_exists("ad_port",$options)){ $this->setPort($options["ad_port"]); } + if (array_key_exists("sso",$options)) { + $this->setUseSSO($options["sso"]); + if (!$this->ldapSaslSupported()) { + $this->setUseSSO(false); + } + } + } + + if ($this->ldapSupported() === false) { + throw new adLDAPException('No LDAP support for PHP. See: http://www.php.net/ldap'); + } + + return $this->connect(); + } + + /** + * Default Destructor + * + * Closes the LDAP connection + * + * @return void + */ + function __destruct() { + $this->close(); + } + + /** + * Connects and Binds to the Domain Controller + * + * @return bool + */ + public function connect() + { + // Connect to the AD/LDAP server as the username/password + $domainController = $this->randomController(); + if ($this->useSSL) { + $this->ldapConnection = ldap_connect("ldaps://" . $domainController, $this->adPort); + } else { + $this->ldapConnection = ldap_connect($domainController, $this->adPort); + } + + // Set some ldap options for talking to AD + ldap_set_option($this->ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3); + ldap_set_option($this->ldapConnection, LDAP_OPT_REFERRALS, 0); + + if ($this->useTLS) { + ldap_start_tls($this->ldapConnection); + } + + // Bind as a domain admin if they've set it up + if ($this->adminUsername !== NULL && $this->adminPassword !== NULL) { + $this->ldapBind = @ldap_bind($this->ldapConnection, $this->adminUsername . $this->accountSuffix, $this->adminPassword); + if (!$this->ldapBind) { + if ($this->useSSL && !$this->useTLS) { + // If you have problems troubleshooting, remove the @ character from the ldapldapBind command above to get the actual error message + throw new adLDAPException('Bind to Active Directory failed. Either the LDAPs connection failed or the login credentials are incorrect. AD said: ' . $this->getLastError()); + } + else { + throw new adLDAPException('Bind to Active Directory failed. Check the login credentials and/or server details. AD said: ' . $this->getLastError()); + } + } + } + if ($this->useSSO && $_SERVER['REMOTE_USER'] && $this->adminUsername === null && $_SERVER['KRB5CCNAME']) { + putenv("KRB5CCNAME=" . $_SERVER['KRB5CCNAME']); + $this->ldapBind = @ldap_sasl_bind($this->ldapConnection, NULL, NULL, "GSSAPI"); + if (!$this->ldapBind){ + throw new adLDAPException('Rebind to Active Directory failed. AD said: ' . $this->getLastError()); + } + else { + return true; + } + } + + + if ($this->baseDn == NULL) { + $this->baseDn = $this->findBaseDn(); + } + + return true; + } + + /** + * Closes the LDAP connection + * + * @return void + */ + public function close() { + if ($this->ldapConnection) { + @ldap_close($this->ldapConnection); + } + } + + /** + * Validate a user's login credentials + * + * @param string $username A user's AD username + * @param string $password A user's AD password + * @param bool optional $preventRebind + * @return bool + */ + public function authenticate($username, $password, $preventRebind = false) { + // Prevent null binding + if ($username === NULL || $password === NULL) { return false; } + if (empty($username) || empty($password)) { return false; } + + // Allow binding over SSO for Kerberos + if ($this->useSSO && $_SERVER['REMOTE_USER'] && $_SERVER['REMOTE_USER'] == $username && $this->adminUsername === NULL && $_SERVER['KRB5CCNAME']) { + putenv("KRB5CCNAME=" . $_SERVER['KRB5CCNAME']); + $this->ldapBind = @ldap_sasl_bind($this->ldapConnection, NULL, NULL, "GSSAPI"); + if (!$this->ldapBind) { + throw new adLDAPException('Rebind to Active Directory failed. AD said: ' . $this->getLastError()); + } + else { + return true; + } + } + + // Bind as the user + $ret = true; + $this->ldapBind = @ldap_bind($this->ldapConnection, $username . $this->accountSuffix, $password); + if (!$this->ldapBind){ + $ret = false; + } + + // Cnce we've checked their details, kick back into admin mode if we have it + if ($this->adminUsername !== NULL && !$preventRebind) { + $this->ldapBind = @ldap_bind($this->ldapConnection, $this->adminUsername . $this->accountSuffix , $this->adminPassword); + if (!$this->ldapBind){ + // This should never happen in theory + throw new adLDAPException('Rebind to Active Directory failed. AD said: ' . $this->getLastError()); + } + } + + return $ret; + } + + /** + * Find the Base DN of your domain controller + * + * @return string + */ + public function findBaseDn() + { + $namingContext = $this->getRootDse(array('defaultnamingcontext')); + return $namingContext[0]['defaultnamingcontext'][0]; + } + + /** + * Get the RootDSE properties from a domain controller + * + * @param array $attributes The attributes you wish to query e.g. defaultnamingcontext + * @return array + */ + public function getRootDse($attributes = array("*", "+")) { + if (!$this->ldapBind){ return (false); } + + $sr = @ldap_read($this->ldapConnection, NULL, 'objectClass=*', $attributes); + $entries = @ldap_get_entries($this->ldapConnection, $sr); + return $entries; + } + + /** + * Get last error from Active Directory + * + * This function gets the last message from Active Directory + * This may indeed be a 'Success' message but if you get an unknown error + * it might be worth calling this function to see what errors were raised + * + * return string + */ + public function getLastError() { + return @ldap_error($this->ldapConnection); + } + + /** + * Detect LDAP support in php + * + * @return bool + */ + protected function ldapSupported() + { + if (!function_exists('ldap_connect')) { + return false; + } + return true; + } + + /** + * Detect ldap_sasl_bind support in PHP + * + * @return bool + */ + protected function ldapSaslSupported() + { + if (!function_exists('ldap_sasl_bind')) { + return false; + } + return true; + } + + /** + * Schema + * + * @param array $attributes Attributes to be queried + * @return array + */ + public function adldap_schema($attributes){ + + // LDAP doesn't like NULL attributes, only set them if they have values + // If you wish to remove an attribute you should set it to a space + // TO DO: Adapt user_modify to use ldap_mod_delete to remove a NULL attribute + $mod=array(); + + // Check every attribute to see if it contains 8bit characters and then UTF8 encode them + array_walk($attributes, array($this, 'encode8bit')); + + if ($attributes["address_city"]){ $mod["l"][0]=$attributes["address_city"]; } + if ($attributes["address_code"]){ $mod["postalCode"][0]=$attributes["address_code"]; } + //if ($attributes["address_country"]){ $mod["countryCode"][0]=$attributes["address_country"]; } // use country codes? + if ($attributes["address_country"]){ $mod["c"][0]=$attributes["address_country"]; } + if ($attributes["address_pobox"]){ $mod["postOfficeBox"][0]=$attributes["address_pobox"]; } + if ($attributes["address_state"]){ $mod["st"][0]=$attributes["address_state"]; } + if ($attributes["address_street"]){ $mod["streetAddress"][0]=$attributes["address_street"]; } + if ($attributes["company"]){ $mod["company"][0]=$attributes["company"]; } + if ($attributes["change_password"]){ $mod["pwdLastSet"][0]=0; } + if ($attributes["department"]){ $mod["department"][0]=$attributes["department"]; } + if ($attributes["description"]){ $mod["description"][0]=$attributes["description"]; } + if ($attributes["display_name"]){ $mod["displayName"][0]=$attributes["display_name"]; } + if ($attributes["email"]){ $mod["mail"][0]=$attributes["email"]; } + if ($attributes["expires"]){ $mod["accountExpires"][0]=$attributes["expires"]; } //unix epoch format? + if ($attributes["firstname"]){ $mod["givenName"][0]=$attributes["firstname"]; } + if ($attributes["home_directory"]){ $mod["homeDirectory"][0]=$attributes["home_directory"]; } + if ($attributes["home_drive"]){ $mod["homeDrive"][0]=$attributes["home_drive"]; } + if ($attributes["initials"]){ $mod["initials"][0]=$attributes["initials"]; } + if ($attributes["logon_name"]){ $mod["userPrincipalName"][0]=$attributes["logon_name"]; } + if ($attributes["manager"]){ $mod["manager"][0]=$attributes["manager"]; } //UNTESTED ***Use DistinguishedName*** + if ($attributes["office"]){ $mod["physicalDeliveryOfficeName"][0]=$attributes["office"]; } + if ($attributes["password"]){ $mod["unicodePwd"][0]=$this->user()->encodePassword($attributes["password"]); } + if ($attributes["profile_path"]){ $mod["profilepath"][0]=$attributes["profile_path"]; } + if ($attributes["script_path"]){ $mod["scriptPath"][0]=$attributes["script_path"]; } + if ($attributes["surname"]){ $mod["sn"][0]=$attributes["surname"]; } + if ($attributes["title"]){ $mod["title"][0]=$attributes["title"]; } + if ($attributes["telephone"]){ $mod["telephoneNumber"][0]=$attributes["telephone"]; } + if ($attributes["mobile"]){ $mod["mobile"][0]=$attributes["mobile"]; } + if ($attributes["pager"]){ $mod["pager"][0]=$attributes["pager"]; } + if ($attributes["ipphone"]){ $mod["ipphone"][0]=$attributes["ipphone"]; } + if ($attributes["web_page"]){ $mod["wWWHomePage"][0]=$attributes["web_page"]; } + if ($attributes["fax"]){ $mod["facsimileTelephoneNumber"][0]=$attributes["fax"]; } + if ($attributes["enabled"]){ $mod["userAccountControl"][0]=$attributes["enabled"]; } + if ($attributes["homephone"]){ $mod["homephone"][0]=$attributes["homephone"]; } + + // Distribution List specific schema + if ($attributes["group_sendpermission"]){ $mod["dlMemSubmitPerms"][0]=$attributes["group_sendpermission"]; } + if ($attributes["group_rejectpermission"]){ $mod["dlMemRejectPerms"][0]=$attributes["group_rejectpermission"]; } + + // Exchange Schema + if ($attributes["exchange_homemdb"]){ $mod["homeMDB"][0]=$attributes["exchange_homemdb"]; } + if ($attributes["exchange_mailnickname"]){ $mod["mailNickname"][0]=$attributes["exchange_mailnickname"]; } + if ($attributes["exchange_proxyaddress"]){ $mod["proxyAddresses"][0]=$attributes["exchange_proxyaddress"]; } + if ($attributes["exchange_usedefaults"]){ $mod["mDBUseDefaults"][0]=$attributes["exchange_usedefaults"]; } + if ($attributes["exchange_policyexclude"]){ $mod["msExchPoliciesExcluded"][0]=$attributes["exchange_policyexclude"]; } + if ($attributes["exchange_policyinclude"]){ $mod["msExchPoliciesIncluded"][0]=$attributes["exchange_policyinclude"]; } + if ($attributes["exchange_addressbook"]){ $mod["showInAddressBook"][0]=$attributes["exchange_addressbook"]; } + if ($attributes["exchange_altrecipient"]){ $mod["altRecipient"][0]=$attributes["exchange_altrecipient"]; } + if ($attributes["exchange_deliverandredirect"]){ $mod["deliverAndRedirect"][0]=$attributes["exchange_deliverandredirect"]; } + + // This schema is designed for contacts + if ($attributes["exchange_hidefromlists"]){ $mod["msExchHideFromAddressLists"][0]=$attributes["exchange_hidefromlists"]; } + if ($attributes["contact_email"]){ $mod["targetAddress"][0]=$attributes["contact_email"]; } + + //echo ("
"); print_r($mod);
+        /*
+        // modifying a name is a bit fiddly
+        if ($attributes["firstname"] && $attributes["surname"]){
+            $mod["cn"][0]=$attributes["firstname"]." ".$attributes["surname"];
+            $mod["displayname"][0]=$attributes["firstname"]." ".$attributes["surname"];
+            $mod["name"][0]=$attributes["firstname"]." ".$attributes["surname"];
+        }
+        */
+
+        if (count($mod)==0){ return (false); }
+        return ($mod);
+    }
+    
+    /**
+    * Convert 8bit characters e.g. accented characters to UTF8 encoded characters
+    */
+    protected function encode8Bit(&$item, $key) {
+        $encode = false;
+        if (is_string($item)) {
+            for ($i=0; $i> 7) {
+                    $encode = true;
+                }
+            }
+        }
+        if ($encode === true && $key != 'password') {
+            $item = utf8_encode($item);   
+        }
+    }
+    
+    /**
+    * Select a random domain controller from your domain controller array
+    * 
+    * @return string
+    */
+    protected function randomController() 
+    {
+        mt_srand(doubleval(microtime()) * 100000000); // For older PHP versions
+        /*if (sizeof($this->domainControllers) > 1) {
+            $adController = $this->domainControllers[array_rand($this->domainControllers)]; 
+            // Test if the controller is responding to pings
+            $ping = $this->pingController($adController); 
+            if ($ping === false) { 
+                // Find the current key in the domain controllers array
+                $key = array_search($adController, $this->domainControllers);
+                // Remove it so that we don't end up in a recursive loop
+                unset($this->domainControllers[$key]);
+                // Select a new controller
+                return $this->randomController(); 
+            }
+            else { 
+                return ($adController); 
+            }
+        } */
+        return $this->domainControllers[array_rand($this->domainControllers)];
+    }  
+    
+    /** 
+    * Test basic connectivity to controller 
+    * 
+    * @return bool
+    */ 
+    protected function pingController($host) {
+        $port = $this->adPort; 
+        fsockopen($host, $port, $errno, $errstr, 10); 
+        if ($errno > 0) {
+            return false;
+        }
+        return true;
+    }
+
+}
+
+/**
+* adLDAP Exception Handler
+* 
+* Exceptions of this type are thrown on bind failure or when SSL is required but not configured
+* Example:
+* try {
+*   $adldap = new adLDAP();
+* }
+* catch (adLDAPException $e) {
+*   echo $e;
+*   exit();
+* }
+*/
+class adLDAPException extends Exception {}
+
+?>
\ No newline at end of file
diff --git a/lib/plugins/authad/adLDAP/classes/adLDAPComputers.php b/lib/plugins/authad/adLDAP/classes/adLDAPComputers.php
new file mode 100644
index 000000000..71b24a04f
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/classes/adLDAPComputers.php
@@ -0,0 +1,153 @@
+adldap = $adldap;
+    }
+    
+    /**
+    * Get information about a specific computer. Returned in a raw array format from AD
+    * 
+    * @param string $computerName The name of the computer
+    * @param array $fields Attributes to return
+    * @return array
+    */
+    public function info($computerName, $fields = NULL)
+    {
+        if ($computerName === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+
+        $filter = "(&(objectClass=computer)(cn=" . $computerName . "))";
+        if ($fields === NULL) { 
+            $fields = array("memberof","cn","displayname","dnshostname","distinguishedname","objectcategory","operatingsystem","operatingsystemservicepack","operatingsystemversion"); 
+        }
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+        
+        return $entries;
+    }
+    
+    /**
+    * Find information about the computers. Returned in a raw array format from AD
+    * 
+    * @param string $computerName The name of the computer
+    * @param array $fields Array of parameters to query
+    * @return mixed
+    */
+    public function infoCollection($computerName, $fields = NULL)
+    {
+        if ($computerName === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        $info = $this->info($computerName, $fields);
+        
+        if ($info !== false) {
+            $collection = new adLDAPComputerCollection($info, $this->adldap);
+            return $collection;
+        }
+        return false;
+    }
+    
+    /**
+    * Check if a computer is in a group
+    * 
+    * @param string $computerName The name of the computer
+    * @param string $group The group to check
+    * @param bool $recursive Whether to check recursively
+    * @return array
+    */
+    public function inGroup($computerName, $group, $recursive = NULL)
+    {
+        if ($computerName === NULL) { return false; }
+        if ($group === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } // use the default option if they haven't set it
+
+        //get a list of the groups
+        $groups = $this->groups($computerName, array("memberof"), $recursive);
+
+        //return true if the specified group is in the group list
+        if (in_array($group, $groups)){ 
+            return true; 
+        }
+
+        return false;
+    }
+    
+    /**
+    * Get the groups a computer is in
+    * 
+    * @param string $computerName The name of the computer
+    * @param bool $recursive Whether to check recursively
+    * @return array
+    */
+    public function groups($computerName, $recursive = NULL)
+    {
+        if ($computerName === NULL) { return false; }
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
+        if (!$this->adldap->getLdapBind()){ return false; }
+
+        //search the directory for their information
+        $info = @$this->info($computerName, array("memberof", "primarygroupid"));
+        $groups = $this->adldap->utilities()->niceNames($info[0]["memberof"]); //presuming the entry returned is our guy (unique usernames)
+
+        if ($recursive === true) {
+            foreach ($groups as $id => $groupName){
+              $extraGroups = $this->adldap->group()->recursiveGroups($groupName);
+              $groups = array_merge($groups, $extraGroups);
+            }
+        }
+
+        return $groups;
+    }
+    
+}
+?>
\ No newline at end of file
diff --git a/lib/plugins/authad/adLDAP/classes/adLDAPContacts.php b/lib/plugins/authad/adLDAP/classes/adLDAPContacts.php
new file mode 100644
index 000000000..addd3e5f0
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/classes/adLDAPContacts.php
@@ -0,0 +1,294 @@
+adldap = $adldap;
+    }
+    
+    //*****************************************************************************************************************
+    // CONTACT FUNCTIONS
+    // * Still work to do in this area, and new functions to write
+    
+    /**
+    * Create a contact
+    * 
+    * @param array $attributes The attributes to set to the contact
+    * @return bool
+    */
+    public function create($attributes)
+    {
+        // Check for compulsory fields
+        if (!array_key_exists("display_name", $attributes)) { return "Missing compulsory field [display_name]"; }
+        if (!array_key_exists("email", $attributes)) { return "Missing compulsory field [email]"; }
+        if (!array_key_exists("container", $attributes)) { return "Missing compulsory field [container]"; }
+        if (!is_array($attributes["container"])) { return "Container attribute must be an array."; }
+
+        // Translate the schema
+        $add = $this->adldap->adldap_schema($attributes);
+        
+        // Additional stuff only used for adding contacts
+        $add["cn"][0] = $attributes["display_name"];
+        $add["objectclass"][0] = "top";
+        $add["objectclass"][1] = "person";
+        $add["objectclass"][2] = "organizationalPerson";
+        $add["objectclass"][3] = "contact"; 
+        if (!isset($attributes['exchange_hidefromlists'])) {
+            $add["msExchHideFromAddressLists"][0] = "TRUE";
+        }
+
+        // Determine the container
+        $attributes["container"] = array_reverse($attributes["container"]);
+        $container= "OU=" . implode(",OU=", $attributes["container"]);
+
+        // Add the entry
+        $result = @ldap_add($this->adldap->getLdapConnection(), "CN=" . $this->adldap->utilities()->escapeCharacters($add["cn"][0]) . ", " . $container . "," . $this->adldap->getBaseDn(), $add);
+        if ($result != true) { 
+            return false; 
+        }
+        
+        return true;
+    }  
+    
+    /**
+    * Determine the list of groups a contact is a member of
+    * 
+    * @param string $distinguisedname The full DN of a contact
+    * @param bool $recursive Recursively check groups
+    * @return array
+    */
+    public function groups($distinguishedName, $recursive = NULL)
+    {
+        if ($distinguishedName === NULL) { return false; }
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
+        if (!$this->adldap->getLdapBind()){ return false; }
+        
+        // Search the directory for their information
+        $info = @$this->info($distinguishedName, array("memberof", "primarygroupid"));
+        $groups = $this->adldap->utilities()->niceNames($info[0]["memberof"]); //presuming the entry returned is our contact
+
+        if ($recursive === true){
+            foreach ($groups as $id => $groupName){
+                $extraGroups = $this->adldap->group()->recursiveGroups($groupName);
+                $groups = array_merge($groups, $extraGroups);
+            }
+        }
+        
+        return $groups;
+    }
+    
+    /**
+    * Get contact information. Returned in a raw array format from AD
+    * 
+    * @param string $distinguisedname The full DN of a contact
+    * @param array $fields Attributes to be returned
+    * @return array
+    */
+    public function info($distinguishedName, $fields = NULL)
+    {
+        if ($distinguishedName === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+
+        $filter = "distinguishedName=" . $distinguishedName;
+        if ($fields === NULL) { 
+            $fields = array("distinguishedname", "mail", "memberof", "department", "displayname", "telephonenumber", "primarygroupid", "objectsid"); 
+        }
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+        
+        if ($entries[0]['count'] >= 1) {
+            // AD does not return the primary group in the ldap query, we may need to fudge it
+            if ($this->adldap->getRealPrimaryGroup() && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["primarygroupid"][0])){
+                //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
+                $entries[0]["memberof"][] = $this->adldap->group()->getPrimaryGroup($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
+            } else {
+                $entries[0]["memberof"][] = "CN=Domain Users,CN=Users," . $this->adldap->getBaseDn();
+            }
+        }
+        
+        $entries[0]["memberof"]["count"]++;
+        return $entries;
+    }
+    
+    /**
+    * Find information about the contacts. Returned in a raw array format from AD
+    * 
+    * @param string $distinguishedName The full DN of a contact 
+    * @param array $fields Array of parameters to query
+    * @return mixed
+    */
+    public function infoCollection($distinguishedName, $fields = NULL)
+    {
+        if ($distinguishedName === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        $info = $this->info($distinguishedName, $fields);
+        
+        if ($info !== false) {
+            $collection = new adLDAPContactCollection($info, $this->adldap);
+            return $collection;
+        }
+        return false;
+    }
+    
+    /**
+    * Determine if a contact is a member of a group
+    * 
+    * @param string $distinguisedName The full DN of a contact
+    * @param string $group The group name to query
+    * @param bool $recursive Recursively check groups
+    * @return bool
+    */
+    public function inGroup($distinguisedName, $group, $recursive = NULL)
+    {
+        if ($distinguisedName === NULL) { return false; }
+        if ($group === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
+        
+        // Get a list of the groups
+        $groups = $this->groups($distinguisedName, array("memberof"), $recursive);
+        
+        // Return true if the specified group is in the group list
+        if (in_array($group, $groups)){ 
+            return true; 
+        }
+
+        return false;
+    }          
+    
+    /**
+    * Modify a contact
+    * 
+    * @param string $distinguishedName The contact to query
+    * @param array $attributes The attributes to modify.  Note if you set the enabled attribute you must not specify any other attributes
+    * @return bool
+    */
+    public function modify($distinguishedName, $attributes) {
+        if ($distinguishedName === NULL) { return "Missing compulsory field [distinguishedname]"; }
+        
+        // Translate the update to the LDAP schema                
+        $mod = $this->adldap->adldap_schema($attributes);
+        
+        // Check to see if this is an enabled status update
+        if (!$mod) { 
+            return false; 
+        }
+        
+        // Do the update
+        $result = ldap_modify($this->adldap->getLdapConnection(), $distinguishedName, $mod);
+        if ($result == false) { 
+            return false; 
+        }
+        
+        return true;
+    }
+    
+    /**
+    * Delete a contact
+    * 
+    * @param string $distinguishedName The contact dn to delete (please be careful here!)
+    * @return array
+    */
+    public function delete($distinguishedName) 
+    {
+        $result = $this->folder()->delete($distinguishedName);
+        if ($result != true) { 
+            return false; 
+        }       
+        return true;
+    }
+    
+    /**
+    * Return a list of all contacts
+    * 
+    * @param bool $includeDescription Include a description of a contact
+    * @param string $search The search parameters
+    * @param bool $sorted Whether to sort the results
+    * @return array
+    */
+    public function all($includeDescription = false, $search = "*", $sorted = true) {
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        // Perform the search and grab all their details
+        $filter = "(&(objectClass=contact)(cn=" . $search . "))";
+        $fields = array("displayname","distinguishedname");           
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+        $usersArray = array();
+        for ($i=0; $i<$entries["count"]; $i++){
+            if ($includeDescription && strlen($entries[$i]["displayname"][0])>0){
+                $usersArray[$entries[$i]["distinguishedname"][0]] = $entries[$i]["displayname"][0];
+            } elseif ($includeDescription){
+                $usersArray[$entries[$i]["distinguishedname"][0]] = $entries[$i]["distinguishedname"][0];
+            } else {
+                array_push($usersArray, $entries[$i]["distinguishedname"][0]);
+            }
+        }
+        if ($sorted) { 
+            asort($usersArray); 
+        }
+        return $usersArray;
+    }
+    
+    /**
+    * Mail enable a contact
+    * Allows email to be sent to them through Exchange
+    * 
+    * @param string $distinguishedname The contact to mail enable
+    * @param string $emailaddress The email address to allow emails to be sent through
+    * @param string $mailnickname The mailnickname for the contact in Exchange.  If NULL this will be set to the display name
+    * @return bool
+    */
+    public function contactMailEnable($distinguishedName, $emailAddress, $mailNickname = NULL){
+        return $this->adldap->exchange()->contactMailEnable($distinguishedName, $emailAddress, $mailNickname);
+    }
+    
+    
+}
+?>
diff --git a/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php b/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php
new file mode 100644
index 000000000..dd0c6de05
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php
@@ -0,0 +1,390 @@
+adldap = $adldap;
+    }
+    
+    /**
+    * Create an Exchange account
+    * 
+    * @param string $username The username of the user to add the Exchange account to
+    * @param array $storageGroup The mailbox, Exchange Storage Group, for the user account, this must be a full CN
+    *                            If the storage group has a different base_dn to the adLDAP configuration, set it using $base_dn
+    * @param string $emailAddress The primary email address to add to this user
+    * @param string $mailNickname The mail nick name.  If mail nickname is blank, the username will be used
+    * @param bool $mdbUseDefaults Indicates whether the store should use the default quota, rather than the per-mailbox quota.
+    * @param string $baseDn Specify an alternative base_dn for the Exchange storage group
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function createMailbox($username, $storageGroup, $emailAddress, $mailNickname=NULL, $useDefaults=TRUE, $baseDn=NULL, $isGUID=false)
+    {
+        if ($username === NULL){ return "Missing compulsory field [username]"; }     
+        if ($storageGroup === NULL) { return "Missing compulsory array [storagegroup]"; }
+        if (!is_array($storageGroup)) { return "[storagegroup] must be an array"; }
+        if ($emailAddress === NULL) { return "Missing compulsory field [emailAddress]"; }
+        
+        if ($baseDn === NULL) {
+            $baseDn = $this->adldap->getBaseDn();   
+        }
+        
+        $container = "CN=" . implode(",CN=", $storageGroup);
+        
+        if ($mailNickname === NULL) { 
+            $mailNickname = $username; 
+        }
+        $mdbUseDefaults = $this->adldap->utilities()->boolToString($useDefaults);
+        
+        $attributes = array(
+            'exchange_homemdb'=>$container.",".$baseDn,
+            'exchange_proxyaddress'=>'SMTP:' . $emailAddress,
+            'exchange_mailnickname'=>$mailNickname,
+            'exchange_usedefaults'=>$mdbUseDefaults
+        );
+        $result = $this->adldap->user()->modify($username, $attributes, $isGUID);
+        if ($result == false) { 
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Add an X400 address to Exchange
+    * See http://tools.ietf.org/html/rfc1685 for more information.
+    * An X400 Address looks similar to this X400:c=US;a= ;p=Domain;o=Organization;s=Doe;g=John;
+    * 
+    * @param string $username The username of the user to add the X400 to to
+    * @param string $country Country
+    * @param string $admd Administration Management Domain
+    * @param string $pdmd Private Management Domain (often your AD domain)
+    * @param string $org Organization
+    * @param string $surname Surname
+    * @param string $givenName Given name
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function addX400($username, $country, $admd, $pdmd, $org, $surname, $givenName, $isGUID=false) 
+    {
+        if ($username === NULL){ return "Missing compulsory field [username]"; }     
+        
+        $proxyValue = 'X400:';
+            
+        // Find the dn of the user
+        $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID);
+        if ($user[0]["dn"] === NULL) { return false; }
+        $userDn = $user[0]["dn"];
+        
+        // We do not have to demote an email address from the default so we can just add the new proxy address
+        $attributes['exchange_proxyaddress'] = $proxyValue . 'c=' . $country . ';a=' . $admd . ';p=' . $pdmd . ';o=' . $org . ';s=' . $surname . ';g=' . $givenName . ';';
+       
+        // Translate the update to the LDAP schema                
+        $add = $this->adldap->adldap_schema($attributes);
+        
+        if (!$add) { return false; }
+        
+        // Do the update
+        // Take out the @ to see any errors, usually this error might occur because the address already
+        // exists in the list of proxyAddresses
+        $result = @ldap_mod_add($this->adldap->getLdapConnection(), $userDn, $add);
+        if ($result == false) { 
+            return false; 
+        }
+        
+        return true;
+    }
+    
+    /**
+    * Add an address to Exchange
+    * 
+    * @param string $username The username of the user to add the Exchange account to
+    * @param string $emailAddress The email address to add to this user
+    * @param bool $default Make this email address the default address, this is a bit more intensive as we have to demote any existing default addresses
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function addAddress($username, $emailAddress, $default = FALSE, $isGUID = false) 
+    {
+        if ($username === NULL) { return "Missing compulsory field [username]"; }     
+        if ($emailAddress === NULL) { return "Missing compulsory fields [emailAddress]"; }
+        
+        $proxyValue = 'smtp:';
+        if ($default === true) {
+            $proxyValue = 'SMTP:';
+        }
+              
+        // Find the dn of the user
+        $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID);
+        if ($user[0]["dn"] === NULL){ return false; }
+        $userDn = $user[0]["dn"];
+        
+        // We need to scan existing proxy addresses and demote the default one
+        if (is_array($user[0]["proxyaddresses"]) && $default === true) {
+            $modAddresses = array();
+            for ($i=0;$iadldap->getLdapConnection(), $userDn, $modAddresses);
+            if ($result == false) { 
+                return false; 
+            }
+            
+            return true;
+        }
+        else {
+            // We do not have to demote an email address from the default so we can just add the new proxy address
+            $attributes['exchange_proxyaddress'] = $proxyValue . $emailAddress;
+            
+            // Translate the update to the LDAP schema                
+            $add = $this->adldap->adldap_schema($attributes);
+            
+            if (!$add) { 
+                return false; 
+            }
+            
+            // Do the update
+            // Take out the @ to see any errors, usually this error might occur because the address already
+            // exists in the list of proxyAddresses
+            $result = @ldap_mod_add($this->adldap->getLdapConnection(), $userDn,$add);
+            if ($result == false) { 
+                return false; 
+            }
+            
+            return true;
+        }
+    }
+    
+    /**
+    * Remove an address to Exchange
+    * If you remove a default address the account will no longer have a default, 
+    * we recommend changing the default address first
+    * 
+    * @param string $username The username of the user to add the Exchange account to
+    * @param string $emailAddress The email address to add to this user
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function deleteAddress($username, $emailAddress, $isGUID=false) 
+    {
+        if ($username === NULL) { return "Missing compulsory field [username]"; }     
+        if ($emailAddress === NULL) { return "Missing compulsory fields [emailAddress]"; }
+        
+        // Find the dn of the user
+        $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID);
+        if ($user[0]["dn"] === NULL) { return false; }
+        $userDn = $user[0]["dn"];
+        
+        if (is_array($user[0]["proxyaddresses"])) {
+            $mod = array();
+            for ($i=0;$iadldap->getLdapConnection(), $userDn,$mod);
+            if ($result == false) { 
+                return false; 
+            }
+            
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+    /**
+    * Change the default address
+    * 
+    * @param string $username The username of the user to add the Exchange account to
+    * @param string $emailAddress The email address to make default
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function primaryAddress($username, $emailAddress, $isGUID = false) 
+    {
+        if ($username === NULL) { return "Missing compulsory field [username]"; }     
+        if ($emailAddress === NULL) { return "Missing compulsory fields [emailAddress]"; }
+        
+        // Find the dn of the user
+        $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID);
+        if ($user[0]["dn"] === NULL){ return false; }
+        $userDn = $user[0]["dn"];
+        
+        if (is_array($user[0]["proxyaddresses"])) {
+            $modAddresses = array();
+            for ($i=0;$iadldap->getLdapConnection(), $userDn, $modAddresses);
+            if ($result == false) { 
+                return false; 
+            }
+            
+            return true;
+        }
+        
+    }
+    
+    /**
+    * Mail enable a contact
+    * Allows email to be sent to them through Exchange
+    * 
+    * @param string $distinguishedName The contact to mail enable
+    * @param string $emailAddress The email address to allow emails to be sent through
+    * @param string $mailNickname The mailnickname for the contact in Exchange.  If NULL this will be set to the display name
+    * @return bool
+    */
+    public function contactMailEnable($distinguishedName, $emailAddress, $mailNickname = NULL)
+    {
+        if ($distinguishedName === NULL) { return "Missing compulsory field [distinguishedName]"; }   
+        if ($emailAddress === NULL) { return "Missing compulsory field [emailAddress]"; }  
+        
+        if ($mailNickname !== NULL) {
+            // Find the dn of the user
+            $user = $this->adldap->contact()->info($distinguishedName, array("cn","displayname"));
+            if ($user[0]["displayname"] === NULL) { return false; }
+            $mailNickname = $user[0]['displayname'][0];
+        }
+        
+        $attributes = array("email"=>$emailAddress,"contact_email"=>"SMTP:" . $emailAddress,"exchange_proxyaddress"=>"SMTP:" . $emailAddress,"exchange_mailnickname" => $mailNickname);
+         
+        // Translate the update to the LDAP schema                
+        $mod = $this->adldap->adldap_schema($attributes);
+        
+        // Check to see if this is an enabled status update
+        if (!$mod) { return false; }
+        
+        // Do the update
+        $result = ldap_modify($this->adldap->getLdapConnection(), $distinguishedName, $mod);
+        if ($result == false) { return false; }
+        
+        return true;
+    }
+    
+    /**
+    * Returns a list of Exchange Servers in the ConfigurationNamingContext of the domain
+    * 
+    * @param array $attributes An array of the AD attributes you wish to return
+    * @return array
+    */
+    public function servers($attributes = array('cn','distinguishedname','serialnumber')) 
+    {
+        if (!$this->adldap->getLdapBind()){ return false; }
+        
+        $configurationNamingContext = $this->adldap->getRootDse(array('configurationnamingcontext'));
+        $sr = @ldap_search($this->adldap->getLdapConnection(), $configurationNamingContext[0]['configurationnamingcontext'][0],'(&(objectCategory=msExchExchangeServer))', $attributes);
+        $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+        return $entries;
+    }
+    
+    /**
+    * Returns a list of Storage Groups in Exchange for a given mail server
+    * 
+    * @param string $exchangeServer The full DN of an Exchange server.  You can use exchange_servers() to find the DN for your server
+    * @param array $attributes An array of the AD attributes you wish to return
+    * @param bool $recursive If enabled this will automatically query the databases within a storage group
+    * @return array
+    */
+    public function storageGroups($exchangeServer, $attributes = array('cn','distinguishedname'), $recursive = NULL) 
+    {
+        if (!$this->adldap->getLdapBind()){ return false; }
+        if ($exchangeServer === NULL) { return "Missing compulsory field [exchangeServer]"; }
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); }
+
+        $filter = '(&(objectCategory=msExchStorageGroup))';
+        $sr = @ldap_search($this->adldap->getLdapConnection(), $exchangeServer, $filter, $attributes);
+        $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+        if ($recursive === true) {
+            for ($i=0; $i<$entries['count']; $i++) {
+                $entries[$i]['msexchprivatemdb'] = $this->storageDatabases($entries[$i]['distinguishedname'][0]);       
+            }
+        }
+        
+        return $entries;
+    }
+    
+    /**
+    * Returns a list of Databases within any given storage group in Exchange for a given mail server
+    * 
+    * @param string $storageGroup The full DN of an Storage Group.  You can use exchange_storage_groups() to find the DN 
+    * @param array $attributes An array of the AD attributes you wish to return
+    * @return array
+    */
+    public function storageDatabases($storageGroup, $attributes = array('cn','distinguishedname','displayname')) {
+        if (!$this->adldap->getLdapBind()){ return false; }
+        if ($storageGroup === NULL) { return "Missing compulsory field [storageGroup]"; }
+        
+        $filter = '(&(objectCategory=msExchPrivateMDB))';
+        $sr = @ldap_search($this->adldap->getLdapConnection(), $storageGroup, $filter, $attributes);
+        $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+        return $entries;
+    }
+}
+?>
\ No newline at end of file
diff --git a/lib/plugins/authad/adLDAP/classes/adLDAPFolders.php b/lib/plugins/authad/adLDAP/classes/adLDAPFolders.php
new file mode 100644
index 000000000..55120152d
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/classes/adLDAPFolders.php
@@ -0,0 +1,179 @@
+adldap = $adldap;
+    }
+    
+    /**
+    * Delete a distinguished name from Active Directory
+    * You should never need to call this yourself, just use the wrapper functions user_delete and contact_delete
+    *
+    * @param string $dn The distinguished name to delete
+    * @return bool
+    */
+    public function delete($dn){ 
+        $result = ldap_delete($this->adldap->getLdapConnection(), $dn);
+        if ($result != true) { 
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Returns a folder listing for a specific OU
+    * See http://adldap.sourceforge.net/wiki/doku.php?id=api_folder_functions
+    * 
+    * @param array $folderName An array to the OU you wish to list. 
+    *                           If set to NULL will list the root, strongly recommended to set 
+    *                           $recursive to false in that instance!
+    * @param string $dnType The type of record to list.  This can be ADLDAP_FOLDER or ADLDAP_CONTAINER.
+    * @param bool $recursive Recursively search sub folders
+    * @param bool $type Specify a type of object to search for
+    * @return array
+    */
+    public function listing($folderName = NULL, $dnType = adLDAP::ADLDAP_FOLDER, $recursive = NULL, $type = NULL) 
+    {
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
+        if (!$this->adldap->getLdapBind()) { return false; }
+
+        $filter = '(&';
+        if ($type !== NULL) {
+            switch ($type) {
+                case 'contact':
+                    $filter .= '(objectClass=contact)';
+                    break;
+                case 'computer':
+                    $filter .= '(objectClass=computer)';
+                    break;
+                case 'group':
+                    $filter .= '(objectClass=group)';
+                    break;
+                case 'folder':
+                    $filter .= '(objectClass=organizationalUnit)';
+                    break;
+                case 'container':
+                    $filter .= '(objectClass=container)';
+                    break;
+                case 'domain':
+                    $filter .= '(objectClass=builtinDomain)';
+                    break;
+                default:
+                    $filter .= '(objectClass=user)';
+                    break;   
+            }
+        }
+        else {
+            $filter .= '(objectClass=*)';   
+        }
+        // If the folder name is null then we will search the root level of AD
+        // This requires us to not have an OU= part, just the base_dn
+        $searchOu = $this->adldap->getBaseDn();
+        if (is_array($folderName)) {
+            $ou = $dnType . "=" . implode("," . $dnType . "=", $folderName);
+            $filter .= '(!(distinguishedname=' . $ou . ',' . $this->adldap->getBaseDn() . ')))';
+            $searchOu = $ou . ',' . $this->adldap->getBaseDn();
+        }
+        else {
+            $filter .= '(!(distinguishedname=' . $this->adldap->getBaseDn() . ')))';
+        }
+
+        if ($recursive === true) {
+            $sr = ldap_search($this->adldap->getLdapConnection(), $searchOu, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
+            $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+            if (is_array($entries)) {
+                return $entries;
+            }
+        }
+        else {
+            $sr = ldap_list($this->adldap->getLdapConnection(), $searchOu, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
+            $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+            if (is_array($entries)) {
+                return $entries;
+            }
+        }
+        
+        return false;
+    }
+
+    /**
+    * Create an organizational unit
+    * 
+    * @param array $attributes Default attributes of the ou
+    * @return bool
+    */
+    public function create($attributes)
+    {
+        if (!is_array($attributes)){ return "Attributes must be an array"; }
+        if (!is_array($attributes["container"])) { return "Container attribute must be an array."; }
+        if (!array_key_exists("ou_name",$attributes)) { return "Missing compulsory field [ou_name]"; }
+        if (!array_key_exists("container",$attributes)) { return "Missing compulsory field [container]"; }
+        
+        $attributes["container"] = array_reverse($attributes["container"]);
+
+        $add=array();
+        $add["objectClass"] = "organizationalUnit";
+        $add["OU"] = $attributes['ou_name'];
+        $containers = "";
+        if (count($attributes['container']) > 0) {
+            $containers = "OU=" . implode(",OU=", $attributes["container"]) . ",";
+        }
+
+        $containers = "OU=" . implode(",OU=", $attributes["container"]);
+        $result = ldap_add($this->adldap->getLdapConnection(), "OU=" . $add["OU"] . ", " . $containers . $this->adldap->getBaseDn(), $add);
+        if ($result != true) { 
+            return false; 
+        }
+        
+        return true;
+    }
+    
+}
+
+?>
\ No newline at end of file
diff --git a/lib/plugins/authad/adLDAP/classes/adLDAPGroups.php b/lib/plugins/authad/adLDAP/classes/adLDAPGroups.php
new file mode 100644
index 000000000..05e4cc93b
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/classes/adLDAPGroups.php
@@ -0,0 +1,631 @@
+adldap = $adldap;
+    }
+    
+    /**
+    * Add a group to a group
+    * 
+    * @param string $parent The parent group name
+    * @param string $child The child group name
+    * @return bool
+    */
+    public function addGroup($parent,$child){
+
+        // Find the parent group's dn
+        $parentGroup = $this->ginfo($parent, array("cn"));
+        if ($parentGroup[0]["dn"] === NULL){
+            return false; 
+        }
+        $parentDn = $parentGroup[0]["dn"];
+        
+        // Find the child group's dn
+        $childGroup = $this->info($child, array("cn"));
+        if ($childGroup[0]["dn"] === NULL){ 
+            return false; 
+        }
+        $childDn = $childGroup[0]["dn"];
+                
+        $add = array();
+        $add["member"] = $childDn;
+        
+        $result = @ldap_mod_add($this->adldap->getLdapConnection(), $parentDn, $add);
+        if ($result == false) { 
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Add a user to a group
+    * 
+    * @param string $group The group to add the user to
+    * @param string $user The user to add to the group
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function addUser($group, $user, $isGUID = false)
+    {
+        // Adding a user is a bit fiddly, we need to get the full DN of the user
+        // and add it using the full DN of the group
+        
+        // Find the user's dn
+        $userDn = $this->adldap->user()->dn($user, $isGUID);
+        if ($userDn === false) { 
+            return false; 
+        }
+        
+        // Find the group's dn
+        $groupInfo = $this->info($group, array("cn"));
+        if ($groupInfo[0]["dn"] === NULL) { 
+            return false; 
+        }
+        $groupDn = $groupInfo[0]["dn"];
+        
+        $add = array();
+        $add["member"] = $userDn;
+        
+        $result = @ldap_mod_add($this->adldap->getLdapConnection(), $groupDn, $add);
+        if ($result == false) { 
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Add a contact to a group
+    * 
+    * @param string $group The group to add the contact to
+    * @param string $contactDn The DN of the contact to add
+    * @return bool
+    */
+    public function addContact($group, $contactDn)
+    {
+        // To add a contact we take the contact's DN
+        // and add it using the full DN of the group
+        
+        // Find the group's dn
+        $groupInfo = $this->info($group, array("cn"));
+        if ($groupInfo[0]["dn"] === NULL) { 
+            return false; 
+        }
+        $groupDn = $groupInfo[0]["dn"];
+        
+        $add = array();
+        $add["member"] = $contactDn;
+        
+        $result = @ldap_mod_add($this->adldap->getLdapConnection(), $groupDn, $add);
+        if ($result == false) { 
+            return false; 
+        }
+        return true;
+    }
+
+    /**
+    * Create a group
+    * 
+    * @param array $attributes Default attributes of the group
+    * @return bool
+    */
+    public function create($attributes)
+    {
+        if (!is_array($attributes)){ return "Attributes must be an array"; }
+        if (!array_key_exists("group_name", $attributes)){ return "Missing compulsory field [group_name]"; }
+        if (!array_key_exists("container", $attributes)){ return "Missing compulsory field [container]"; }
+        if (!array_key_exists("description", $attributes)){ return "Missing compulsory field [description]"; }
+        if (!is_array($attributes["container"])){ return "Container attribute must be an array."; }
+        $attributes["container"] = array_reverse($attributes["container"]);
+
+        //$member_array = array();
+        //$member_array[0] = "cn=user1,cn=Users,dc=yourdomain,dc=com";
+        //$member_array[1] = "cn=administrator,cn=Users,dc=yourdomain,dc=com";
+        
+        $add = array();
+        $add["cn"] = $attributes["group_name"];
+        $add["samaccountname"] = $attributes["group_name"];
+        $add["objectClass"] = "Group";
+        $add["description"] = $attributes["description"];
+        //$add["member"] = $member_array; UNTESTED
+
+        $container = "OU=" . implode(",OU=", $attributes["container"]);
+        $result = ldap_add($this->adldap->getLdapConnection(), "CN=" . $add["cn"] . ", " . $container . "," . $this->adldap->getBaseDn(), $add);
+        if ($result != true) { 
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Delete a group account 
+    * 
+    * @param string $group The group to delete (please be careful here!) 
+    * 
+    * @return array 
+    */
+    public function delete($group) {
+        if (!$this->adldap->getLdapBind()){ return false; }
+        if ($group === null){ return "Missing compulsory field [group]"; }
+        
+        $groupInfo = $this->info($group, array("*"));
+        $dn = $groupInfo[0]['distinguishedname'][0]; 
+        $result = $this->adldap->folder()->delete($dn); 
+        if ($result !== true) { 
+            return false; 
+        } return true;   
+    }
+
+    /**
+    * Remove a group from a group
+    * 
+    * @param string $parent The parent group name
+    * @param string $child The child group name
+    * @return bool
+    */
+    public function removeGroup($parent , $child)
+    {
+    
+        // Find the parent dn
+        $parentGroup = $this->info($parent, array("cn"));
+        if ($parentGroup[0]["dn"] === NULL) { 
+            return false; 
+        }
+        $parentDn = $parentGroup[0]["dn"];
+        
+        // Find the child dn
+        $childGroup = $this->info($child, array("cn"));
+        if ($childGroup[0]["dn"] === NULL) { 
+            return false; 
+        }
+        $childDn = $childGroup[0]["dn"];
+        
+        $del = array();
+        $del["member"] = $childDn;
+        
+        $result = @ldap_mod_del($this->adldap->getLdapConnection(), $parentDn, $del);
+        if ($result == false) { 
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Remove a user from a group
+    * 
+    * @param string $group The group to remove a user from
+    * @param string $user The AD user to remove from the group
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function removeUser($group, $user, $isGUID = false)
+    {
+    
+        // Find the parent dn
+        $groupInfo = $this->info($group, array("cn"));
+        if ($groupInfo[0]["dn"] === NULL){ 
+            return false; 
+        }
+        $groupDn = $groupInfo[0]["dn"];
+        
+        // Find the users dn
+        $userDn = $this->adldap->user()->dn($user, $isGUID);
+        if ($userDn === false) {
+            return false; 
+        }
+
+        $del = array();
+        $del["member"] = $userDn;
+        
+        $result = @ldap_mod_del($this->adldap->getLdapConnection(), $groupDn, $del);
+        if ($result == false) {
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Remove a contact from a group
+    * 
+    * @param string $group The group to remove a user from
+    * @param string $contactDn The DN of a contact to remove from the group
+    * @return bool
+    */
+    public function removeContact($group, $contactDn)
+    {
+    
+        // Find the parent dn
+        $groupInfo = $this->info($group, array("cn"));
+        if ($groupInfo[0]["dn"] === NULL) { 
+            return false; 
+        }
+        $groupDn = $groupInfo[0]["dn"];
+    
+        $del = array();
+        $del["member"] = $contactDn;
+        
+        $result = @ldap_mod_del($this->adldap->getLdapConnection(), $groupDn, $del);
+        if ($result == false) { 
+            return false; 
+        }
+        return true;
+    }
+    
+    /**
+    * Return a list of groups in a group
+    * 
+    * @param string $group The group to query
+    * @param bool $recursive Recursively get groups
+    * @return array
+    */
+    public function inGroup($group, $recursive = NULL)
+    {
+        if (!$this->adldap->getLdapBind()){ return false; }
+        if ($recursive === NULL){ $recursive = $this->adldap->getRecursiveGroups(); } // Use the default option if they haven't set it 
+        
+        // Search the directory for the members of a group
+        $info = $this->info($group, array("member","cn"));
+        $groups = $info[0]["member"];
+        if (!is_array($groups)) {
+            return false;   
+        }
+ 
+        $groupArray = array();
+
+        for ($i=0; $i<$groups["count"]; $i++){ 
+             $filter = "(&(objectCategory=group)(distinguishedName=" . $this->adldap->utilities()->ldapSlashes($groups[$i]) . "))";
+             $fields = array("samaccountname", "distinguishedname", "objectClass");
+             $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+             $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+             // not a person, look for a group  
+             if ($entries['count'] == 0 && $recursive == true) {  
+                $filter = "(&(objectCategory=group)(distinguishedName=" . $this->adldap->utilities()->ldapSlashes($groups[$i]) . "))";  
+                $fields = array("distinguishedname");  
+                $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);  
+                $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);  
+                if (!isset($entries[0]['distinguishedname'][0])) {
+                    continue;  
+                }
+                $subGroups = $this->inGroup($entries[0]['distinguishedname'][0], $recursive);  
+                if (is_array($subGroups)) {
+                    $groupArray = array_merge($groupArray, $subGroups); 
+                    $groupArray = array_unique($groupArray);  
+                }
+                continue;  
+             } 
+
+             $groupArray[] = $entries[0]['distinguishedname'][0];
+        }
+        return $groupArray;
+    }
+    
+    /**
+    * Return a list of members in a group
+    * 
+    * @param string $group The group to query
+    * @param bool $recursive Recursively get group members
+    * @return array
+    */
+    public function members($group, $recursive = NULL)
+    {
+        if (!$this->adldap->getLdapBind()){ return false; }
+        if ($recursive === NULL){ $recursive = $this->adldap->getRecursiveGroups(); } // Use the default option if they haven't set it 
+        // Search the directory for the members of a group
+        $info = $this->info($group, array("member","cn"));
+        $users = $info[0]["member"];
+        if (!is_array($users)) {
+            return false;   
+        }
+ 
+        $userArray = array();
+
+        for ($i=0; $i<$users["count"]; $i++){ 
+             $filter = "(&(objectCategory=person)(distinguishedName=" . $this->adldap->utilities()->ldapSlashes($users[$i]) . "))";
+             $fields = array("samaccountname", "distinguishedname", "objectClass");
+             $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+             $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+             // not a person, look for a group  
+             if ($entries['count'] == 0 && $recursive == true) {  
+                $filter = "(&(objectCategory=group)(distinguishedName=" . $this->adldap->utilities()->ldapSlashes($users[$i]) . "))";  
+                $fields = array("samaccountname");  
+                $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);  
+                $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);  
+                if (!isset($entries[0]['samaccountname'][0])) {
+                    continue;  
+                }
+                $subUsers = $this->members($entries[0]['samaccountname'][0], $recursive);  
+                if (is_array($subUsers)) {
+                    $userArray = array_merge($userArray, $subUsers); 
+                    $userArray = array_unique($userArray);  
+                }
+                continue;  
+             } 
+             else if ($entries['count'] == 0) {   
+                continue; 
+             } 
+
+             if ((!isset($entries[0]['samaccountname'][0]) || $entries[0]['samaccountname'][0] === NULL) && $entries[0]['distinguishedname'][0] !== NULL) {
+                 $userArray[] = $entries[0]['distinguishedname'][0];
+             }
+             else if ($entries[0]['samaccountname'][0] !== NULL) {
+                $userArray[] = $entries[0]['samaccountname'][0];
+             }
+        }
+        return $userArray;
+    }
+    
+    /**
+    * Group Information.  Returns an array of raw information about a group.
+    * The group name is case sensitive
+    * 
+    * @param string $groupName The group name to retrieve info about
+    * @param array $fields Fields to retrieve
+    * @return array
+    */
+    public function info($groupName, $fields = NULL)
+    {
+        if ($groupName === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        if (stristr($groupName, '+')) {
+            $groupName = stripslashes($groupName);   
+        }
+        
+        $filter = "(&(objectCategory=group)(name=" . $this->adldap->utilities()->ldapSlashes($groupName) . "))";
+        if ($fields === NULL) { 
+            $fields = array("member","memberof","cn","description","distinguishedname","objectcategory","samaccountname"); 
+        }
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+        return $entries;
+    }
+    
+    /**
+    * Group Information.  Returns an collection
+    * The group name is case sensitive
+    * 
+    * @param string $groupName The group name to retrieve info about
+    * @param array $fields Fields to retrieve
+    * @return adLDAPGroupCollection
+    */
+    public function infoCollection($groupName, $fields = NULL)
+    {
+        if ($groupName === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        $info = $this->info($groupName, $fields);
+        if ($info !== false) {
+            $collection = new adLDAPGroupCollection($info, $this->adldap);
+            return $collection;
+        }
+        return false;
+    }
+    
+    /**
+    * Return a complete list of "groups in groups"
+    * 
+    * @param string $group The group to get the list from
+    * @return array
+    */
+    public function recursiveGroups($group)
+    {
+        if ($group === NULL) { return false; }
+
+        $stack = array(); 
+        $processed = array(); 
+        $retGroups = array(); 
+     
+        array_push($stack, $group); // Initial Group to Start with 
+        while (count($stack) > 0) {
+            $parent = array_pop($stack);
+            array_push($processed, $parent);
+            
+            $info = $this->info($parent, array("memberof"));
+            
+            if (isset($info[0]["memberof"]) && is_array($info[0]["memberof"])) {
+                $groups = $info[0]["memberof"]; 
+                if ($groups) {
+                    $groupNames = $this->adldap->utilities()->niceNames($groups);  
+                    $retGroups = array_merge($retGroups, $groupNames); //final groups to return
+                    foreach ($groupNames as $id => $groupName) { 
+                        if (!in_array($groupName, $processed)) {
+                            array_push($stack, $groupName);
+                        }
+                    }
+                }
+            }
+        }
+        
+        return $retGroups;
+    }
+    
+    /**
+    * Returns a complete list of the groups in AD based on a SAM Account Type  
+    * 
+    * @param string $sAMAaccountType The account type to return
+    * @param bool $includeDescription Whether to return a description
+    * @param string $search Search parameters
+    * @param bool $sorted Whether to sort the results
+    * @return array
+    */
+    public function search($sAMAaccountType = adLDAP::ADLDAP_SECURITY_GLOBAL_GROUP, $includeDescription = false, $search = "*", $sorted = true) {
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        $filter = '(&(objectCategory=group)';
+        if ($sAMAaccountType !== null) {
+            $filter .= '(samaccounttype='. $sAMAaccountType .')';
+        }
+        $filter .= '(cn=' . $search . '))';
+        // Perform the search and grab all their details
+        $fields = array("samaccountname", "description");
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+        $groupsArray = array();        
+        for ($i=0; $i<$entries["count"]; $i++){
+            if ($includeDescription && strlen($entries[$i]["description"][0]) > 0 ) {
+                $groupsArray[$entries[$i]["samaccountname"][0]] = $entries[$i]["description"][0];
+            }
+            else if ($includeDescription){
+                $groupsArray[$entries[$i]["samaccountname"][0]] = $entries[$i]["samaccountname"][0];
+            }
+            else {
+                array_push($groupsArray, $entries[$i]["samaccountname"][0]);
+            }
+        }
+        if ($sorted) { 
+            asort($groupsArray); 
+        }
+        return $groupsArray;
+    }
+    
+    /**
+    * Returns a complete list of all groups in AD
+    * 
+    * @param bool $includeDescription Whether to return a description
+    * @param string $search Search parameters
+    * @param bool $sorted Whether to sort the results
+    * @return array
+    */
+    public function all($includeDescription = false, $search = "*", $sorted = true){
+        $groupsArray = $this->search(null, $includeDescription, $search, $sorted);
+        return $groupsArray;
+    }
+    
+    /**
+    * Returns a complete list of security groups in AD
+    * 
+    * @param bool $includeDescription Whether to return a description
+    * @param string $search Search parameters
+    * @param bool $sorted Whether to sort the results
+    * @return array
+    */
+    public function allSecurity($includeDescription = false, $search = "*", $sorted = true){
+        $groupsArray = $this->search(adLDAP::ADLDAP_SECURITY_GLOBAL_GROUP, $includeDescription, $search, $sorted);
+        return $groupsArray;
+    }
+    
+    /**
+    * Returns a complete list of distribution lists in AD
+    * 
+    * @param bool $includeDescription Whether to return a description
+    * @param string $search Search parameters
+    * @param bool $sorted Whether to sort the results
+    * @return array
+    */
+    public function allDistribution($includeDescription = false, $search = "*", $sorted = true){
+        $groupsArray = $this->search(adLDAP::ADLDAP_DISTRIBUTION_GROUP, $includeDescription, $search, $sorted);
+        return $groupsArray;
+    }
+    
+    /**
+    * Coping with AD not returning the primary group
+    * http://support.microsoft.com/?kbid=321360 
+    * 
+    * This is a re-write based on code submitted by Bruce which prevents the 
+    * need to search each security group to find the true primary group
+    * 
+    * @param string $gid Group ID
+    * @param string $usersid User's Object SID
+    * @return mixed
+    */
+    public function getPrimaryGroup($gid, $usersid)
+    {
+        if ($gid === NULL || $usersid === NULL) { return false; }
+        $sr = false;
+
+        $gsid = substr_replace($usersid, pack('V',$gid), strlen($usersid)-4,4);
+        $filter = '(objectsid=' . $this->adldap->utilities()->getTextSID($gsid).')';
+        $fields = array("samaccountname","distinguishedname");
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+        if (isset($entries[0]['distinguishedname'][0])) {
+            return $entries[0]['distinguishedname'][0];
+        }
+        return false;
+     }
+     
+     /**
+    * Coping with AD not returning the primary group
+    * http://support.microsoft.com/?kbid=321360 
+    * 
+    * For some reason it's not possible to search on primarygrouptoken=XXX
+    * If someone can show otherwise, I'd like to know about it :)
+    * this way is resource intensive and generally a pain in the @#%^
+    * 
+    * @deprecated deprecated since version 3.1, see get get_primary_group
+    * @param string $gid Group ID
+    * @return string
+    */
+    public function cn($gid){    
+        if ($gid === NULL) { return false; }
+        $sr = false;
+        $r = '';
+        
+        $filter = "(&(objectCategory=group)(samaccounttype=" . adLDAP::ADLDAP_SECURITY_GLOBAL_GROUP . "))";
+        $fields = array("primarygrouptoken", "samaccountname", "distinguishedname");
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+        
+        for ($i=0; $i<$entries["count"]; $i++){
+            if ($entries[$i]["primarygrouptoken"][0] == $gid) {
+                $r = $entries[$i]["distinguishedname"][0];
+                $i = $entries["count"];
+            }
+        }
+
+        return $r;
+    }
+}
+?>
diff --git a/lib/plugins/authad/adLDAP/classes/adLDAPUsers.php b/lib/plugins/authad/adLDAP/classes/adLDAPUsers.php
new file mode 100644
index 000000000..96a93b512
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/classes/adLDAPUsers.php
@@ -0,0 +1,682 @@
+adldap = $adldap;
+    }
+    
+    /**
+    * Validate a user's login credentials
+    * 
+    * @param string $username A user's AD username
+    * @param string $password A user's AD password
+    * @param bool optional $prevent_rebind
+    * @return bool
+    */
+    public function authenticate($username, $password, $preventRebind = false) {
+        return $this->adldap->authenticate($username, $password, $preventRebind);
+    }
+    
+    /**
+    * Create a user
+    * 
+    * If you specify a password here, this can only be performed over SSL
+    * 
+    * @param array $attributes The attributes to set to the user account
+    * @return bool
+    */
+    public function create($attributes)
+    {
+        // Check for compulsory fields
+        if (!array_key_exists("username", $attributes)){ return "Missing compulsory field [username]"; }
+        if (!array_key_exists("firstname", $attributes)){ return "Missing compulsory field [firstname]"; }
+        if (!array_key_exists("surname", $attributes)){ return "Missing compulsory field [surname]"; }
+        if (!array_key_exists("email", $attributes)){ return "Missing compulsory field [email]"; }
+        if (!array_key_exists("container", $attributes)){ return "Missing compulsory field [container]"; }
+        if (!is_array($attributes["container"])){ return "Container attribute must be an array."; }
+
+        if (array_key_exists("password",$attributes) && (!$this->adldap->getUseSSL() && !$this->adldap->getUseTLS())){ 
+            throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+        }
+
+        if (!array_key_exists("display_name", $attributes)) { 
+            $attributes["display_name"] = $attributes["firstname"] . " " . $attributes["surname"]; 
+        }
+
+        // Translate the schema
+        $add = $this->adldap->adldap_schema($attributes);
+        
+        // Additional stuff only used for adding accounts
+        $add["cn"][0] = $attributes["display_name"];
+        $add["samaccountname"][0] = $attributes["username"];
+        $add["objectclass"][0] = "top";
+        $add["objectclass"][1] = "person";
+        $add["objectclass"][2] = "organizationalPerson";
+        $add["objectclass"][3] = "user"; //person?
+        //$add["name"][0]=$attributes["firstname"]." ".$attributes["surname"];
+
+        // Set the account control attribute
+        $control_options = array("NORMAL_ACCOUNT");
+        if (!$attributes["enabled"]) { 
+            $control_options[] = "ACCOUNTDISABLE"; 
+        }
+        $add["userAccountControl"][0] = $this->accountControl($control_options);
+        
+        // Determine the container
+        $attributes["container"] = array_reverse($attributes["container"]);
+        $container = "OU=" . implode(", OU=",$attributes["container"]);
+
+        // Add the entry
+        $result = @ldap_add($this->adldap->getLdapConnection(), "CN=" . $add["cn"][0] . ", " . $container . "," . $this->adldap->getBaseDn(), $add);
+        if ($result != true) { 
+            return false; 
+        }
+        
+        return true;
+    }
+    
+    /**
+    * Account control options
+    *
+    * @param array $options The options to convert to int 
+    * @return int
+    */
+    protected function accountControl($options)
+    {
+        $val=0;
+
+        if (is_array($options)) {
+            if (in_array("SCRIPT",$options)){ $val=$val+1; }
+            if (in_array("ACCOUNTDISABLE",$options)){ $val=$val+2; }
+            if (in_array("HOMEDIR_REQUIRED",$options)){ $val=$val+8; }
+            if (in_array("LOCKOUT",$options)){ $val=$val+16; }
+            if (in_array("PASSWD_NOTREQD",$options)){ $val=$val+32; }
+            //PASSWD_CANT_CHANGE Note You cannot assign this permission by directly modifying the UserAccountControl attribute.
+            //For information about how to set the permission programmatically, see the "Property flag descriptions" section.
+            if (in_array("ENCRYPTED_TEXT_PWD_ALLOWED",$options)){ $val=$val+128; }
+            if (in_array("TEMP_DUPLICATE_ACCOUNT",$options)){ $val=$val+256; }
+            if (in_array("NORMAL_ACCOUNT",$options)){ $val=$val+512; }
+            if (in_array("INTERDOMAIN_TRUST_ACCOUNT",$options)){ $val=$val+2048; }
+            if (in_array("WORKSTATION_TRUST_ACCOUNT",$options)){ $val=$val+4096; }
+            if (in_array("SERVER_TRUST_ACCOUNT",$options)){ $val=$val+8192; }
+            if (in_array("DONT_EXPIRE_PASSWORD",$options)){ $val=$val+65536; }
+            if (in_array("MNS_LOGON_ACCOUNT",$options)){ $val=$val+131072; }
+            if (in_array("SMARTCARD_REQUIRED",$options)){ $val=$val+262144; }
+            if (in_array("TRUSTED_FOR_DELEGATION",$options)){ $val=$val+524288; }
+            if (in_array("NOT_DELEGATED",$options)){ $val=$val+1048576; }
+            if (in_array("USE_DES_KEY_ONLY",$options)){ $val=$val+2097152; }
+            if (in_array("DONT_REQ_PREAUTH",$options)){ $val=$val+4194304; } 
+            if (in_array("PASSWORD_EXPIRED",$options)){ $val=$val+8388608; }
+            if (in_array("TRUSTED_TO_AUTH_FOR_DELEGATION",$options)){ $val=$val+16777216; }
+        }
+        return $val;
+    }
+    
+    /**
+    * Delete a user account
+    * 
+    * @param string $username The username to delete (please be careful here!)
+    * @param bool $isGUID Is the username a GUID or a samAccountName
+    * @return array
+    */
+    public function delete($username, $isGUID = false) 
+    {      
+        $userinfo = $this->info($username, array("*"), $isGUID);
+        $dn = $userinfo[0]['distinguishedname'][0];
+        $result = $this->adldap->folder()->delete($dn);
+        if ($result != true) { 
+            return false;
+        }        
+        return true;
+    }
+    
+    /**
+    * Groups the user is a member of
+    * 
+    * @param string $username The username to query
+    * @param bool $recursive Recursive list of groups
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return array
+    */
+    public function groups($username, $recursive = NULL, $isGUID = false)
+    {
+        if ($username === NULL) { return false; }
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } // Use the default option if they haven't set it
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        // Search the directory for their information
+        $info = @$this->info($username, array("memberof", "primarygroupid"), $isGUID);
+        $groups = $this->adldap->utilities()->niceNames($info[0]["memberof"]); // Presuming the entry returned is our guy (unique usernames)
+
+        if ($recursive === true){
+            foreach ($groups as $id => $groupName){
+                $extraGroups = $this->adldap->group()->recursiveGroups($groupName);
+                $groups = array_merge($groups, $extraGroups);
+            }
+        }
+        
+        return $groups;
+    }
+    
+    /**
+    * Find information about the users. Returned in a raw array format from AD
+    * 
+    * @param string $username The username to query
+    * @param array $fields Array of parameters to query
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return array
+    */
+    public function info($username, $fields = NULL, $isGUID = false)
+    {
+        if ($username === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+
+        if ($isGUID === true) {
+            $username = $this->adldap->utilities()->strGuidToHex($username);
+            $filter = "objectguid=" . $username;
+        }
+        else if (strstr($username, "@")) {
+             $filter = "userPrincipalName=" . $username;
+        }
+        else {
+             $filter = "samaccountname=" . $username;
+        }
+        $filter = "(&(objectCategory=person)({$filter}))";
+        if ($fields === NULL) { 
+            $fields = array("samaccountname","mail","memberof","department","displayname","telephonenumber","primarygroupid","objectsid"); 
+        }
+        if (!in_array("objectsid", $fields)) {
+            $fields[] = "objectsid";
+        }
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+        
+        if (isset($entries[0])) {
+            if ($entries[0]['count'] >= 1) {
+                if (in_array("memberof", $fields)) {
+                    // AD does not return the primary group in the ldap query, we may need to fudge it
+                    if ($this->adldap->getRealPrimaryGroup() && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["objectsid"][0])){
+                        //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
+                        $entries[0]["memberof"][] = $this->adldap->group()->getPrimaryGroup($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
+                    } else {
+                        $entries[0]["memberof"][] = "CN=Domain Users,CN=Users," . $this->adldap->getBaseDn();
+                    }
+                    if (!isset($entries[0]["memberof"]["count"])) {
+                        $entries[0]["memberof"]["count"] = 0;
+                    }
+                    $entries[0]["memberof"]["count"]++;
+                }
+            }
+            
+            return $entries;
+        }
+        return false;
+    }
+    
+    /**
+    * Find information about the users. Returned in a raw array format from AD
+    * 
+    * @param string $username The username to query
+    * @param array $fields Array of parameters to query
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return mixed
+    */
+    public function infoCollection($username, $fields = NULL, $isGUID = false)
+    {
+        if ($username === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        $info = $this->info($username, $fields, $isGUID);
+        
+        if ($info !== false) {
+            $collection = new adLDAPUserCollection($info, $this->adldap);
+            return $collection;
+        }
+        return false;
+    }
+    
+    /**
+    * Determine if a user is in a specific group
+    * 
+    * @param string $username The username to query
+    * @param string $group The name of the group to check against
+    * @param bool $recursive Check groups recursively
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function inGroup($username, $group, $recursive = NULL, $isGUID = false)
+    {
+        if ($username === NULL) { return false; }
+        if ($group === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } // Use the default option if they haven't set it
+        
+        // Get a list of the groups
+        $groups = $this->groups($username, $recursive, $isGUID);
+        
+        // Return true if the specified group is in the group list
+        if (in_array($group, $groups)) { 
+            return true; 
+        }
+
+        return false;
+    }
+    
+    /**
+    * Determine a user's password expiry date
+    * 
+    * @param string $username The username to query
+    * @param book $isGUID Is the username passed a GUID or a samAccountName
+    * @requires bcmath http://www.php.net/manual/en/book.bc.php
+    * @return array
+    */
+    public function passwordExpiry($username, $isGUID = false) 
+    {
+        if ($username === NULL) { return "Missing compulsory field [username]"; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        if (!function_exists('bcmod')) { throw new adLDAPException("Missing function support [bcmod] http://www.php.net/manual/en/book.bc.php"); };
+        
+        $userInfo = $this->info($username, array("pwdlastset", "useraccountcontrol"), $isGUID);
+        $pwdLastSet = $userInfo[0]['pwdlastset'][0];
+        $status = array();
+        
+        if ($userInfo[0]['useraccountcontrol'][0] == '66048') {
+            // Password does not expire
+            return "Does not expire";
+        }
+        if ($pwdLastSet === '0') {
+            // Password has already expired
+            return "Password has expired";
+        }
+        
+         // Password expiry in AD can be calculated from TWO values:
+         //   - User's own pwdLastSet attribute: stores the last time the password was changed
+         //   - Domain's maxPwdAge attribute: how long passwords last in the domain
+         //
+         // Although Microsoft chose to use a different base and unit for time measurements.
+         // This function will convert them to Unix timestamps
+         $sr = ldap_read($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), 'objectclass=*', array('maxPwdAge'));
+         if (!$sr) {
+             return false;
+         }
+         $info = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+         $maxPwdAge = $info[0]['maxpwdage'][0];
+         
+
+         // See MSDN: http://msdn.microsoft.com/en-us/library/ms974598.aspx
+         //
+         // pwdLastSet contains the number of 100 nanosecond intervals since January 1, 1601 (UTC), 
+         // stored in a 64 bit integer. 
+         //
+         // The number of seconds between this date and Unix epoch is 11644473600.
+         //
+         // maxPwdAge is stored as a large integer that represents the number of 100 nanosecond
+         // intervals from the time the password was set before the password expires.
+         //
+         // We also need to scale this to seconds but also this value is a _negative_ quantity!
+         //
+         // If the low 32 bits of maxPwdAge are equal to 0 passwords do not expire
+         //
+         // Unfortunately the maths involved are too big for PHP integers, so I've had to require
+         // BCMath functions to work with arbitrary precision numbers.
+         if (bcmod($maxPwdAge, 4294967296) === '0') {
+            return "Domain does not expire passwords";
+        }
+        
+        // Add maxpwdage and pwdlastset and we get password expiration time in Microsoft's
+        // time units.  Because maxpwd age is negative we need to subtract it.
+        $pwdExpire = bcsub($pwdLastSet, $maxPwdAge);
+    
+        // Convert MS's time to Unix time
+        $status['expiryts'] = bcsub(bcdiv($pwdExpire, '10000000'), '11644473600');
+        $status['expiryformat'] = date('Y-m-d H:i:s', bcsub(bcdiv($pwdExpire, '10000000'), '11644473600'));
+        
+        return $status;
+    }
+    
+    /**
+    * Modify a user
+    * 
+    * @param string $username The username to query
+    * @param array $attributes The attributes to modify.  Note if you set the enabled attribute you must not specify any other attributes
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function modify($username, $attributes, $isGUID = false)
+    {
+        if ($username === NULL) { return "Missing compulsory field [username]"; }
+        if (array_key_exists("password", $attributes) && !$this->adldap->getUseSSL() && !$this->adldap->getUseTLS()) { 
+            throw new adLDAPException('SSL/TLS must be configured on your webserver and enabled in the class to set passwords.');
+        }
+
+        // Find the dn of the user
+        $userDn = $this->dn($username, $isGUID);
+        if ($userDn === false) { 
+            return false; 
+        }
+        
+        // Translate the update to the LDAP schema                
+        $mod = $this->adldap->adldap_schema($attributes);
+        
+        // Check to see if this is an enabled status update
+        if (!$mod && !array_key_exists("enabled", $attributes)){ 
+            return false; 
+        }
+        
+        // Set the account control attribute (only if specified)
+        if (array_key_exists("enabled", $attributes)){
+            if ($attributes["enabled"]){ 
+                $controlOptions = array("NORMAL_ACCOUNT"); 
+            }
+            else { 
+                $controlOptions = array("NORMAL_ACCOUNT", "ACCOUNTDISABLE"); 
+            }
+            $mod["userAccountControl"][0] = $this->accountControl($controlOptions);
+        }
+
+        // Do the update
+        $result = @ldap_modify($this->adldap->getLdapConnection(), $userDn, $mod);
+        if ($result == false) { 
+            return false; 
+        }
+        
+        return true;
+    }
+    
+    /**
+    * Disable a user account
+    * 
+    * @param string $username The username to disable
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function disable($username, $isGUID = false)
+    {
+        if ($username === NULL) { return "Missing compulsory field [username]"; }
+        $attributes = array("enabled" => 0);
+        $result = $this->modify($username, $attributes, $isGUID);
+        if ($result == false) { return false; }
+        
+        return true;
+    }
+    
+    /**
+    * Enable a user account
+    * 
+    * @param string $username The username to enable
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function enable($username, $isGUID = false)
+    {
+        if ($username === NULL) { return "Missing compulsory field [username]"; }
+        $attributes = array("enabled" => 1);
+        $result = $this->modify($username, $attributes, $isGUID);
+        if ($result == false) { return false; }
+        
+        return true;
+    }
+    
+    /**
+    * Set the password of a user - This must be performed over SSL
+    * 
+    * @param string $username The username to modify
+    * @param string $password The new password
+    * @param bool $isGUID Is the username passed a GUID or a samAccountName
+    * @return bool
+    */
+    public function password($username, $password, $isGUID = false)
+    {
+        if ($username === NULL) { return false; }
+        if ($password === NULL) { return false; }
+        if (!$this->adldap->getLdapBind()) { return false; }
+        if (!$this->adldap->getUseSSL() && !$this->adldap->getUseTLS()) { 
+            throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+        }
+        
+        $userDn = $this->dn($username, $isGUID);
+        if ($userDn === false) { 
+            return false; 
+        }
+                
+        $add=array();
+        $add["unicodePwd"][0] = $this->encodePassword($password);
+        
+        $result = @ldap_mod_replace($this->adldap->getLdapConnection(), $userDn, $add);
+        if ($result === false){
+            $err = ldap_errno($this->adldap->getLdapConnection());
+            if ($err) {
+                $msg = 'Error ' . $err . ': ' . ldap_err2str($err) . '.';
+                if($err == 53) {
+                    $msg .= ' Your password might not match the password policy.';
+                }
+                throw new adLDAPException($msg);
+            }
+            else {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+    
+    /**
+    * Encode a password for transmission over LDAP
+    *
+    * @param string $password The password to encode
+    * @return string
+    */
+    public function encodePassword($password)
+    {
+        $password="\"".$password."\"";
+        $encoded="";
+        for ($i=0; $i info($username, array("cn"), $isGUID);
+        if ($user[0]["dn"] === NULL) { 
+            return false; 
+        }
+        $userDn = $user[0]["dn"];
+        return $userDn;
+    }
+    
+    /**
+    * Return a list of all users in AD
+    * 
+    * @param bool $includeDescription Return a description of the user
+    * @param string $search Search parameter
+    * @param bool $sorted Sort the user accounts
+    * @return array
+    */
+    public function all($includeDescription = false, $search = "*", $sorted = true)
+    {
+        if (!$this->adldap->getLdapBind()) { return false; }
+        
+        // Perform the search and grab all their details
+        $filter = "(&(objectClass=user)(samaccounttype=" . adLDAP::ADLDAP_NORMAL_ACCOUNT .")(objectCategory=person)(cn=" . $search . "))";
+        $fields = array("samaccountname","displayname");
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+        $usersArray = array();
+        for ($i=0; $i<$entries["count"]; $i++){
+            if ($includeDescription && strlen($entries[$i]["displayname"][0])>0){
+                $usersArray[$entries[$i]["samaccountname"][0]] = $entries[$i]["displayname"][0];
+            } elseif ($includeDescription){
+                $usersArray[$entries[$i]["samaccountname"][0]] = $entries[$i]["samaccountname"][0];
+            } else {
+                array_push($usersArray, $entries[$i]["samaccountname"][0]);
+            }
+        }
+        if ($sorted) { 
+            asort($usersArray); 
+        }
+        return $usersArray;
+    }
+    
+    /**
+    * Converts a username (samAccountName) to a GUID
+    * 
+    * @param string $username The username to query
+    * @return string
+    */
+    public function usernameToGuid($username) 
+    {
+        if (!$this->adldap->getLdapBind()){ return false; }
+        if ($username === null){ return "Missing compulsory field [username]"; }
+        
+        $filter = "samaccountname=" . $username; 
+        $fields = array("objectGUID"); 
+        $sr = @ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields); 
+        if (ldap_count_entries($this->adldap->getLdapConnection(), $sr) > 0) { 
+            $entry = @ldap_first_entry($this->adldap->getLdapConnection(), $sr); 
+            $guid = @ldap_get_values_len($this->adldap->getLdapConnection(), $entry, 'objectGUID'); 
+            $strGUID = $this->adldap->utilities()->binaryToText($guid[0]);          
+            return $strGUID; 
+        }
+        return false; 
+    }
+    
+    /**
+    * Return a list of all users in AD that have a specific value in a field
+    *
+    * @param bool $includeDescription Return a description of the user
+    * @param string $searchField Field to search search for
+    * @param string $searchFilter Value to search for in the specified field
+    * @param bool $sorted Sort the user accounts
+    * @return array
+    */
+    public function find($includeDescription = false, $searchField = false, $searchFilter = false, $sorted = true){
+        if (!$this->adldap->getLdapBind()){ return false; }
+          
+        // Perform the search and grab all their details
+        $searchParams = "";
+        if ($searchField) {
+            $searchParams = "(" . $searchField . "=" . $searchFilter . ")";
+        }                           
+        $filter = "(&(objectClass=user)(samaccounttype=" . adLDAP::ADLDAP_NORMAL_ACCOUNT .")(objectCategory=person)" . $searchParams . ")";
+        $fields = array("samaccountname","displayname");
+        $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
+        $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
+
+        $usersArray = array();
+        for ($i=0; $i < $entries["count"]; $i++) {
+            if ($includeDescription && strlen($entries[$i]["displayname"][0]) > 0) {
+                $usersArray[$entries[$i]["samaccountname"][0]] = $entries[$i]["displayname"][0];
+            }
+            else if ($includeDescription) {
+                $usersArray[$entries[$i]["samaccountname"][0]] = $entries[$i]["samaccountname"][0];
+            }
+            else {
+                array_push($usersArray, $entries[$i]["samaccountname"][0]);
+            }
+        }
+        if ($sorted){ 
+          asort($usersArray); 
+        }
+        return ($usersArray);
+    }
+    
+    /**
+    * Move a user account to a different OU
+    *
+    * @param string $username The username to move (please be careful here!)
+    * @param array $container The container or containers to move the user to (please be careful here!).
+    * accepts containers in 1. parent 2. child order
+    * @return array
+    */
+    public function move($username, $container) 
+    {
+        if (!$this->adldap->getLdapBind()) { return false; }
+        if ($username === null) { return "Missing compulsory field [username]"; }
+        if ($container === null) { return "Missing compulsory field [container]"; }
+        if (!is_array($container)) { return "Container must be an array"; }
+        
+        $userInfo = $this->info($username, array("*"));
+        $dn = $userInfo[0]['distinguishedname'][0];
+        $newRDn = "cn=" . $username;
+        $container = array_reverse($container);
+        $newContainer = "ou=" . implode(",ou=",$container);
+        $newBaseDn = strtolower($newContainer) . "," . $this->adldap->getBaseDn();
+        $result = @ldap_rename($this->adldap->getLdapConnection(), $dn, $newRDn, $newBaseDn, true);
+        if ($result !== true) {
+            return false;
+        }
+        return true;
+    }
+    
+    /**
+    * Get the last logon time of any user as a Unix timestamp
+    * 
+    * @param string $username
+    * @return long $unixTimestamp
+    */
+    public function getLastLogon($username) {
+        if (!$this->adldap->getLdapBind()) { return false; }
+        if ($username === null) { return "Missing compulsory field [username]"; }
+        $userInfo = $this->info($username, array("lastLogonTimestamp"));
+        $lastLogon = adLDAPUtils::convertWindowsTimeToUnixTime($userInfo[0]['lastLogonTimestamp'][0]);
+        return $lastLogon;
+    }
+    
+}
+?>
diff --git a/lib/plugins/authad/adLDAP/classes/adLDAPUtils.php b/lib/plugins/authad/adLDAP/classes/adLDAPUtils.php
new file mode 100644
index 000000000..f039a4290
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/classes/adLDAPUtils.php
@@ -0,0 +1,264 @@
+adldap = $adldap;
+    }
+    
+    
+    /**
+    * Take an LDAP query and return the nice names, without all the LDAP prefixes (eg. CN, DN)
+    *
+    * @param array $groups
+    * @return array
+    */
+    public function niceNames($groups)
+    {
+
+        $groupArray = array();
+        for ($i=0; $i<$groups["count"]; $i++){ // For each group
+            $line = $groups[$i];
+            
+            if (strlen($line)>0) { 
+                // More presumptions, they're all prefixed with CN=
+                // so we ditch the first three characters and the group
+                // name goes up to the first comma
+                $bits=explode(",", $line);
+                $groupArray[] = substr($bits[0], 3, (strlen($bits[0])-3));
+            }
+        }
+        return $groupArray;    
+    }
+    
+    /**
+    * Escape characters for use in an ldap_create function
+    * 
+    * @param string $str
+    * @return string
+    */
+    public function escapeCharacters($str) {
+        $str = str_replace(",", "\,", $str);
+        return $str;
+    }
+    
+    /**
+    * Escape strings for the use in LDAP filters
+    * 
+    * DEVELOPERS SHOULD BE DOING PROPER FILTERING IF THEY'RE ACCEPTING USER INPUT
+    * Ported from Perl's Net::LDAP::Util escape_filter_value
+    *
+    * @param string $str The string the parse
+    * @author Port by Andreas Gohr 
+    * @return string
+    */
+    public function ldapSlashes($str){
+        return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e',
+                            '"\\\\\".join("",unpack("H2","$1"))',
+                            $str);
+    }
+    
+    /**
+    * Converts a string GUID to a hexdecimal value so it can be queried
+    * 
+    * @param string $strGUID A string representation of a GUID
+    * @return string
+    */
+    public function strGuidToHex($strGUID) 
+    {
+        $strGUID = str_replace('-', '', $strGUID);
+
+        $octet_str = '\\' . substr($strGUID, 6, 2);
+        $octet_str .= '\\' . substr($strGUID, 4, 2);
+        $octet_str .= '\\' . substr($strGUID, 2, 2);
+        $octet_str .= '\\' . substr($strGUID, 0, 2);
+        $octet_str .= '\\' . substr($strGUID, 10, 2);
+        $octet_str .= '\\' . substr($strGUID, 8, 2);
+        $octet_str .= '\\' . substr($strGUID, 14, 2);
+        $octet_str .= '\\' . substr($strGUID, 12, 2);
+        //$octet_str .= '\\' . substr($strGUID, 16, strlen($strGUID));
+        for ($i=16; $i<=(strlen($strGUID)-2); $i++) {
+            if (($i % 2) == 0) {
+                $octet_str .= '\\' . substr($strGUID, $i, 2);
+            }
+        }
+        
+        return $octet_str;
+    }
+    
+    /**
+    * Convert a binary SID to a text SID
+    * 
+    * @param string $binsid A Binary SID
+    * @return string
+    */
+     public function getTextSID($binsid) {
+        $hex_sid = bin2hex($binsid);
+        $rev = hexdec(substr($hex_sid, 0, 2));
+        $subcount = hexdec(substr($hex_sid, 2, 2));
+        $auth = hexdec(substr($hex_sid, 4, 12));
+        $result = "$rev-$auth";
+
+        for ($x=0;$x < $subcount; $x++) {
+            $subauth[$x] =
+                hexdec($this->littleEndian(substr($hex_sid, 16 + ($x * 8), 8)));
+                $result .= "-" . $subauth[$x];
+        }
+
+        // Cheat by tacking on the S-
+        return 'S-' . $result;
+     }
+     
+    /**
+    * Converts a little-endian hex number to one that hexdec() can convert
+    * 
+    * @param string $hex A hex code
+    * @return string
+    */
+     public function littleEndian($hex) 
+     {
+        $result = '';
+        for ($x = strlen($hex) - 2; $x >= 0; $x = $x - 2) {
+            $result .= substr($hex, $x, 2);
+        }
+        return $result;
+     }
+     
+     /**
+    * Converts a binary attribute to a string
+    * 
+    * @param string $bin A binary LDAP attribute
+    * @return string
+    */
+    public function binaryToText($bin) 
+    {
+        $hex_guid = bin2hex($bin); 
+        $hex_guid_to_guid_str = ''; 
+        for($k = 1; $k <= 4; ++$k) { 
+            $hex_guid_to_guid_str .= substr($hex_guid, 8 - 2 * $k, 2); 
+        } 
+        $hex_guid_to_guid_str .= '-'; 
+        for($k = 1; $k <= 2; ++$k) { 
+            $hex_guid_to_guid_str .= substr($hex_guid, 12 - 2 * $k, 2); 
+        } 
+        $hex_guid_to_guid_str .= '-'; 
+        for($k = 1; $k <= 2; ++$k) { 
+            $hex_guid_to_guid_str .= substr($hex_guid, 16 - 2 * $k, 2); 
+        } 
+        $hex_guid_to_guid_str .= '-' . substr($hex_guid, 16, 4); 
+        $hex_guid_to_guid_str .= '-' . substr($hex_guid, 20); 
+        return strtoupper($hex_guid_to_guid_str);   
+    }
+    
+    /**
+    * Converts a binary GUID to a string GUID
+    * 
+    * @param string $binaryGuid The binary GUID attribute to convert
+    * @return string
+    */
+    public function decodeGuid($binaryGuid) 
+    {
+        if ($binaryGuid === null){ return "Missing compulsory field [binaryGuid]"; }
+        
+        $strGUID = $this->binaryToText($binaryGuid);          
+        return $strGUID; 
+    }
+    
+    /**
+    * Convert a boolean value to a string
+    * You should never need to call this yourself
+    *
+    * @param bool $bool Boolean value
+    * @return string
+    */
+    public function boolToStr($bool) 
+    {
+        return ($bool) ? 'TRUE' : 'FALSE';
+    }
+    
+    /**
+    * Convert 8bit characters e.g. accented characters to UTF8 encoded characters
+    */
+    public function encode8Bit(&$item, $key) {
+        $encode = false;
+        if (is_string($item)) {
+            for ($i=0; $i> 7) {
+                    $encode = true;
+                }
+            }
+        }
+        if ($encode === true && $key != 'password') {
+            $item = utf8_encode($item);   
+        }
+    }  
+    
+    /**
+    * Get the current class version number
+    * 
+    * @return string
+    */
+    public function getVersion() {
+        return self::ADLDAP_VERSION;
+    }
+    
+    /**
+    * Round a Windows timestamp down to seconds and remove the seconds between 1601-01-01 and 1970-01-01
+    * 
+    * @param long $windowsTime
+    * @return long $unixTime
+    */
+    public static function convertWindowsTimeToUnixTime($windowsTime) {
+      $unixTime = round($windowsTime / 10000000) - 11644477200; 
+      return $unixTime; 
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/lib/plugins/authad/adLDAP/collections/adLDAPCollection.php b/lib/plugins/authad/adLDAP/collections/adLDAPCollection.php
new file mode 100644
index 000000000..c0a2eb2fa
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/collections/adLDAPCollection.php
@@ -0,0 +1,137 @@
+setInfo($info);   
+        $this->adldap = $adldap;
+    }
+    
+    /**
+    * Set the raw info array from Active Directory
+    * 
+    * @param array $info
+    */
+    public function setInfo(array $info) 
+    {
+        if ($this->info && sizeof($info) >= 1) {
+            unset($this->info);
+        }
+        $this->info = $info;   
+    }
+    
+    /**
+    * Magic get method to retrieve data from the raw array in a formatted way
+    * 
+    * @param string $attribute
+    * @return mixed
+    */
+    public function __get($attribute)
+    {
+        if (isset($this->info[0]) && is_array($this->info[0])) {
+            foreach ($this->info[0] as $keyAttr => $valueAttr) {
+                if (strtolower($keyAttr) == strtolower($attribute)) {
+                    if ($this->info[0][strtolower($attribute)]['count'] == 1) {
+                        return $this->info[0][strtolower($attribute)][0];   
+                    }
+                    else {
+                        $array = array();
+                        foreach ($this->info[0][strtolower($attribute)] as $key => $value) {
+                            if ((string)$key != 'count') {
+                                $array[$key] = $value;
+                            } 
+                        }  
+                        return $array;   
+                    }
+                }   
+            }
+        }
+        else {
+            return NULL;   
+        }
+    }    
+    
+    /**
+    * Magic set method to update an attribute
+    * 
+    * @param string $attribute
+    * @param string $value
+    * @return bool
+    */
+    abstract public function __set($attribute, $value);
+    
+    /** 
+    * Magic isset method to check for the existence of an attribute 
+    * 
+    * @param string $attribute 
+    * @return bool 
+    */ 
+    public function __isset($attribute) {
+        if (isset($this->info[0]) && is_array($this->info[0])) { 
+            foreach ($this->info[0] as $keyAttr => $valueAttr) { 
+                if (strtolower($keyAttr) == strtolower($attribute)) { 
+                    return true; 
+                } 
+            } 
+        } 
+        return false; 
+     } 
+}
+?>
diff --git a/lib/plugins/authad/adLDAP/collections/adLDAPComputerCollection.php b/lib/plugins/authad/adLDAP/collections/adLDAPComputerCollection.php
new file mode 100644
index 000000000..4f11d8f41
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/collections/adLDAPComputerCollection.php
@@ -0,0 +1,46 @@
+
diff --git a/lib/plugins/authad/adLDAP/collections/adLDAPContactCollection.php b/lib/plugins/authad/adLDAP/collections/adLDAPContactCollection.php
new file mode 100644
index 000000000..d42fe6d4c
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/collections/adLDAPContactCollection.php
@@ -0,0 +1,46 @@
+
diff --git a/lib/plugins/authad/adLDAP/collections/adLDAPGroupCollection.php b/lib/plugins/authad/adLDAP/collections/adLDAPGroupCollection.php
new file mode 100644
index 000000000..cff12fc20
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/collections/adLDAPGroupCollection.php
@@ -0,0 +1,46 @@
+
diff --git a/lib/plugins/authad/adLDAP/collections/adLDAPUserCollection.php b/lib/plugins/authad/adLDAP/collections/adLDAPUserCollection.php
new file mode 100644
index 000000000..801d90296
--- /dev/null
+++ b/lib/plugins/authad/adLDAP/collections/adLDAPUserCollection.php
@@ -0,0 +1,46 @@
+
diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index e82610327..5c566195e 100644
--- a/lib/plugins/authad/auth.php
+++ b/lib/plugins/authad/auth.php
@@ -2,8 +2,6 @@
 // must be run within Dokuwiki
 if(!defined('DOKU_INC')) die();
 
-require_once(DOKU_INC.'inc/adLDAP.php');
-
 /**
  * Active Directory authentication backend for DokuWiki
  *
@@ -41,7 +39,7 @@ require_once(DOKU_INC.'inc/adLDAP.php');
  * @author  Jan Schumann 
  */
 
-require_once(DOKU_INC.'inc/adLDAP/adLDAP.php');
+require_once(DOKU_PLUGIN.'authad/adLDAP/adLDAP.php');
 
 class auth_plugin_authad extends DokuWiki_Auth_Plugin {
     /**
-- 
cgit v1.2.3


From 46b991a30bc4c7dab4e06bdd3f9a70a34204e005 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Fri, 9 Nov 2012 14:32:33 +0100
Subject: merge old auth style configs with plugin config

---
 lib/plugins/auth.php | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

(limited to 'lib/plugins')

diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php
index cce2370d9..42dbf1859 100644
--- a/lib/plugins/auth.php
+++ b/lib/plugins/auth.php
@@ -419,4 +419,21 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
         global $conf;
         return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge'));
     }
+
+    /**
+     * Overrides the standard config loading to integrate old auth module style configs
+     *
+     * @deprecated 2012-11-09
+     */
+    public function loadConfig(){
+        global $conf;
+        $plugin = $this->getPluginName();
+
+        $default = $this->readDefaultSettings();
+        $oldconf = array();
+        if(isset($conf['auth'][$plugin])) $oldconf = (array) $conf['auth'][$plugin];
+
+        $conf['plugin'][$plugin] = array_merge($default, $oldconf, $conf['plugin'][$plugin]);
+        $this->configloaded = true;
+    }
 }
-- 
cgit v1.2.3


From 32fd494aaeb28179d8823354e07c1399e7443c90 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Fri, 9 Nov 2012 14:54:48 +0100
Subject: authad fixes

* fixes incorrect $this->adldap calls
* makes use of correct plugin config
---
 lib/plugins/authad/auth.php        | 83 ++++++++++++++++++--------------------
 lib/plugins/authad/plugin.info.txt |  4 +-
 2 files changed, 42 insertions(+), 45 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index 5c566195e..f651d87a1 100644
--- a/lib/plugins/authad/auth.php
+++ b/lib/plugins/authad/auth.php
@@ -2,6 +2,8 @@
 // must be run within Dokuwiki
 if(!defined('DOKU_INC')) die();
 
+require_once(DOKU_PLUGIN.'authad/adLDAP/adLDAP.php');
+
 /**
  * Active Directory authentication backend for DokuWiki
  *
@@ -13,20 +15,20 @@ if(!defined('DOKU_INC')) die();
  *
  *   $conf['authtype']       = 'authad';
  *
- *   $conf['auth']['ad']['account_suffix']     = '@my.domain.org';
- *   $conf['auth']['ad']['base_dn']            = 'DC=my,DC=domain,DC=org';
- *   $conf['auth']['ad']['domain_controllers'] = 'srv1.domain.org,srv2.domain.org';
+ *   $conf['plugin']['authad']['account_suffix']     = '@my.domain.org';
+ *   $conf['plugin']['authad']['base_dn']            = 'DC=my,DC=domain,DC=org';
+ *   $conf['plugin']['authad']['domain_controllers'] = 'srv1.domain.org,srv2.domain.org';
  *
  *   //optional:
- *   $conf['auth']['ad']['sso']                = 1;
- *   $conf['auth']['ad']['ad_username']        = 'root';
- *   $conf['auth']['ad']['ad_password']        = 'pass';
- *   $conf['auth']['ad']['real_primarygroup']  = 1;
- *   $conf['auth']['ad']['use_ssl']            = 1;
- *   $conf['auth']['ad']['use_tls']            = 1;
- *   $conf['auth']['ad']['debug']              = 1;
+ *   $conf['plugin']['authad']['sso']                = 1;
+ *   $conf['plugin']['authad']['ad_username']        = 'root';
+ *   $conf['plugin']['authad']['ad_password']        = 'pass';
+ *   $conf['plugin']['authad']['real_primarygroup']  = 1;
+ *   $conf['plugin']['authad']['use_ssl']            = 1;
+ *   $conf['plugin']['authad']['use_tls']            = 1;
+ *   $conf['plugin']['authad']['debug']              = 1;
  *   // warn user about expiring password this many days in advance:
- *   $conf['auth']['ad']['expirywarn']         = 5;
+ *   $conf['plugin']['authad']['expirywarn']         = 5;
  *
  *   // get additional information to the userinfo array
  *   // add a list of comma separated ldap contact fields.
@@ -38,18 +40,13 @@ if(!defined('DOKU_INC')) die();
  * @author  Andreas Gohr 
  * @author  Jan Schumann 
  */
-
-require_once(DOKU_PLUGIN.'authad/adLDAP/adLDAP.php');
-
 class auth_plugin_authad extends DokuWiki_Auth_Plugin {
-    /**
-     * @var array copy of the auth backend configuration
-     */
-    protected $cnf = array();
+
     /**
      * @var array hold connection data for a specific AD domain
      */
     protected $opts = array();
+
     /**
      * @var array open connections for each AD domain, as adLDAP objects
      */
@@ -76,18 +73,18 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
     public function __construct() {
         parent::__construct();
 
-        global $conf;
-        $this->cnf = $conf['auth']['ad'];
+        // we load the config early to modify it a bit here
+        $this->loadConfig();
 
         // additional information fields
-        if(isset($this->cnf['additional'])) {
-            $this->cnf['additional'] = str_replace(' ', '', $this->cnf['additional']);
-            $this->cnf['additional'] = explode(',', $this->cnf['additional']);
-        } else $this->cnf['additional'] = array();
+        if(isset($this->conf['additional'])) {
+            $this->conf['additional'] = str_replace(' ', '', $this->conf['additional']);
+            $this->conf['additional'] = explode(',', $this->conf['additional']);
+        } else $this->conf['additional'] = array();
 
         // ldap extension is needed
         if(!function_exists('ldap_connect')) {
-            if($this->cnf['debug'])
+            if($this->conf['debug'])
                 msg("AD Auth: PHP LDAP extension not found.", -1);
             $this->success = false;
             return;
@@ -97,7 +94,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         if(!utf8_check($_SERVER['REMOTE_USER'])) {
             $_SERVER['REMOTE_USER'] = utf8_encode($_SERVER['REMOTE_USER']);
         }
-        if($_SERVER['REMOTE_USER'] && $this->cnf['sso']) {
+        if($_SERVER['REMOTE_USER'] && $this->conf['sso']) {
             $_SERVER['REMOTE_USER'] = $this->cleanUser($_SERVER['REMOTE_USER']);
 
             // we need to simulate a login
@@ -127,7 +124,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
     public function checkPass($user, $pass) {
         if($_SERVER['REMOTE_USER'] &&
             $_SERVER['REMOTE_USER'] == $user &&
-            $this->cnf['sso']
+            $this->conf['sso']
         ) return true;
 
         $adldap = $this->_adldap($this->_userDomain($user));
@@ -172,11 +169,11 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         $fields = array('mail', 'displayname', 'samaccountname', 'lastpwd', 'pwdlastset', 'useraccountcontrol');
 
         // add additional fields to read
-        $fields = array_merge($fields, $this->cnf['additional']);
+        $fields = array_merge($fields, $this->conf['additional']);
         $fields = array_unique($fields);
 
         //get info for given user
-        $result = $this->adldap->user()->info($this->_userName($user), $fields);
+        $result = $adldap->user()->info($this->_userName($user), $fields);
         if($result == false){
             return array();
         }
@@ -192,14 +189,14 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         $info['expires'] = !($result[0]['useraccountcontrol'][0] & 0x10000); //ADS_UF_DONT_EXPIRE_PASSWD
 
         // additional information
-        foreach($this->cnf['additional'] as $field) {
+        foreach($this->conf['additional'] as $field) {
             if(isset($result[0][strtolower($field)])) {
                 $info[$field] = $result[0][strtolower($field)][0];
             }
         }
 
         // handle ActiveDirectory memberOf
-        $info['grps'] = $this->adldap->user()->groups($this->_userName($user),(bool) $this->opts['recursive_groups']);
+        $info['grps'] = $adldap->user()->groups($this->_userName($user),(bool) $this->opts['recursive_groups']);
 
         if(is_array($info['grps'])) {
             foreach($info['grps'] as $ndx => $group) {
@@ -219,14 +216,14 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         }
 
         // check expiry time
-        if($info['expires'] && $this->cnf['expirywarn']){
-            $timeleft = $this->adldap->user()->passwordExpiry($user); // returns unixtime
+        if($info['expires'] && $this->conf['expirywarn']){
+            $timeleft = $adldap->user()->passwordExpiry($user); // returns unixtime
             $timeleft = round($timeleft/(24*60*60));
             $info['expiresin'] = $timeleft;
 
             // if this is the current user, warn him (once per request only)
             if(($_SERVER['REMOTE_USER'] == $user) &&
-                ($timeleft <= $this->cnf['expirywarn']) &&
+                ($timeleft <= $this->conf['expirywarn']) &&
                 !$this->msgshown
             ) {
                 $msg = sprintf($lang['authpwdexpire'], $timeleft);
@@ -283,7 +280,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         $user   = utf8_strtolower(trim($user));
 
         // is this a known, valid domain? if not discard
-        if(!is_array($this->cnf[$domain])) {
+        if(!is_array($this->conf[$domain])) {
             $domain = '';
         }
 
@@ -316,7 +313,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
 
         if($this->users === null) {
             //get info for given user
-            $result = $this->adldap->user()->all();
+            $result = $adldap->user()->all();
             if (!$result) return array();
             $this->users = array_fill_keys($result, false);
         }
@@ -356,9 +353,9 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         // password changing
         if(isset($changes['pass'])) {
             try {
-                $return = $this->adldap->user()->password($this->_userName($user),$changes['pass']);
+                $return = $adldap->user()->password($this->_userName($user),$changes['pass']);
             } catch (adLDAPException $e) {
-                if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
+                if ($this->conf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
                 $return = false;
             }
             if(!$return) msg('AD Auth: failed to change the password. Maybe the password policy was not met?', -1);
@@ -378,9 +375,9 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         }
         if(count($adchanges)) {
             try {
-                $return = $return & $this->adldap->user()->modify($this->_userName($user),$adchanges);
+                $return = $return & $adldap->user()->modify($this->_userName($user),$adchanges);
             } catch (adLDAPException $e) {
-                if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
+                if ($this->conf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
                 $return = false;
             }
         }
@@ -411,7 +408,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
             $this->adldap[$domain] = new adLDAP($this->opts);
             return $this->adldap[$domain];
         } catch(adLDAPException $e) {
-            if($this->cnf['debug']) {
+            if($this->conf['debug']) {
                 msg('AD Auth: '.$e->getMessage(), -1);
             }
             $this->success         = false;
@@ -450,12 +447,12 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
      */
     protected function _loadServerConfig($domain) {
         // prepare adLDAP standard configuration
-        $opts = $this->cnf;
+        $opts = $this->conf;
 
         $opts['domain'] = $domain;
 
         // add possible domain specific configuration
-        if($domain && is_array($this->cnf[$domain])) foreach($this->cnf[$domain] as $key => $val) {
+        if($domain && is_array($this->conf[$domain])) foreach($this->conf[$domain] as $key => $val) {
             $opts[$key] = $val;
         }
 
diff --git a/lib/plugins/authad/plugin.info.txt b/lib/plugins/authad/plugin.info.txt
index 598eb848b..f02b5118c 100644
--- a/lib/plugins/authad/plugin.info.txt
+++ b/lib/plugins/authad/plugin.info.txt
@@ -1,7 +1,7 @@
 base   authad
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2012-10-06
-name   active directory auth plugin
+date   2012-11-09
+name   Active Directory auth plugin
 desc   Provides authentication against a Microsoft Active Directory
 url    http://www.dokuwiki.org/plugin:authad
-- 
cgit v1.2.3


From 70e4a085e6a861a12a7b927ba9dfa10d5961f958 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Fri, 9 Nov 2012 15:36:35 +0100
Subject: fixes for authldap

* makes proper use of plugin config
* adds a few first defaults, but the whole config metadata is still
  missing
* proper PHP5 use and comments
---
 lib/plugins/authldap/auth.php         | 389 +++++++++++++++++++---------------
 lib/plugins/authldap/conf/default.php |   7 +
 2 files changed, 224 insertions(+), 172 deletions(-)
 create mode 100644 lib/plugins/authldap/conf/default.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php
index 93683bc16..6e7bde1f0 100644
--- a/lib/plugins/authldap/auth.php
+++ b/lib/plugins/authldap/auth.php
@@ -11,31 +11,31 @@ if(!defined('DOKU_INC')) die();
  * @author    Jan Schumann 
  */
 class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
-    var $cnf = null;
-    var $con = null;
-    var $bound = 0; // 0: anonymous, 1: user, 2: superuser
+    /* @var resource $con holds the LDAP connection*/
+    protected $con = null;
+
+    /* @var int $bound What type of connection does already exist? */
+    protected $bound = 0; // 0: anonymous, 1: user, 2: superuser
+
+    /* @var array $users User data cache */
+    protected $users = null;
+
+    /* @var array $_pattern User filter pattern */
+    protected $_pattern = null;
 
     /**
      * Constructor
      */
-    function __construct(){
+    public function __construct() {
         parent::__construct();
 
-        global $conf;
-        $this->cnf = $conf['auth']['ldap'];
-
         // ldap extension is needed
         if(!function_exists('ldap_connect')) {
-            if ($this->cnf['debug'])
-                msg("LDAP err: PHP LDAP extension not found.",-1,__LINE__,__FILE__);
+            $this->_debug("LDAP err: PHP LDAP extension not found.", -1, __LINE__, __FILE__);
             $this->success = false;
             return;
         }
 
-        if(empty($this->cnf['groupkey']))   $this->cnf['groupkey']   = 'cn';
-        if(empty($this->cnf['userscope']))  $this->cnf['userscope']  = 'sub';
-        if(empty($this->cnf['groupscope'])) $this->cnf['groupscope'] = 'sub';
-
         // auth_ldap currently just handles authentication, so no
         // capabilities are set
     }
@@ -48,40 +48,45 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
      * to the LDAP server
      *
      * @author  Andreas Gohr 
+     * @param string $user
+     * @param string $pass
      * @return  bool
      */
-    function checkPass($user,$pass){
+    public function checkPass($user, $pass) {
         // reject empty password
         if(empty($pass)) return false;
         if(!$this->_openLDAP()) return false;
 
         // indirect user bind
-        if($this->cnf['binddn'] && $this->cnf['bindpw']){
+        if($this->getConf('binddn') && $this->getConf('bindpw')) {
             // use superuser credentials
-            if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){
-                if($this->cnf['debug'])
-                    msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+            if(!@ldap_bind($this->con, $this->getConf('binddn'), $this->getConf('bindpw'))) {
+                $this->_debug('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                 return false;
             }
             $this->bound = 2;
-        }else if($this->cnf['binddn'] &&
-                 $this->cnf['usertree'] &&
-                 $this->cnf['userfilter']) {
+        } else if($this->getConf('binddn') &&
+            $this->getConf('usertree') &&
+            $this->getConf('userfilter')
+        ) {
             // special bind string
-            $dn = $this->_makeFilter($this->cnf['binddn'],
-                                     array('user'=>$user,'server'=>$this->cnf['server']));
+            $dn = $this->_makeFilter(
+                $this->getConf('binddn'),
+                array('user'=> $user, 'server'=> $this->getConf('server'))
+            );
 
-        }else if(strpos($this->cnf['usertree'], '%{user}')) {
+        } else if(strpos($this->getConf('usertree'), '%{user}')) {
             // direct user bind
-            $dn = $this->_makeFilter($this->cnf['usertree'],
-                                     array('user'=>$user,'server'=>$this->cnf['server']));
+            $dn = $this->_makeFilter(
+                $this->getConf('usertree'),
+                array('user'=> $user, 'server'=> $this->getConf('server'))
+            );
 
-        }else{
+        } else {
             // Anonymous bind
-            if(!@ldap_bind($this->con)){
-                msg("LDAP: can not bind anonymously",-1);
-                if($this->cnf['debug'])
-                    msg('LDAP anonymous bind: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+            if(!@ldap_bind($this->con)) {
+                msg("LDAP: can not bind anonymously", -1);
+                $this->_debug('LDAP anonymous bind: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                 return false;
             }
         }
@@ -89,18 +94,16 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
         // Try to bind to with the dn if we have one.
         if(!empty($dn)) {
             // User/Password bind
-            if(!@ldap_bind($this->con,$dn,$pass)){
-                if($this->cnf['debug']){
-                    msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__);
-                    msg('LDAP user dn bind: '.htmlspecialchars(ldap_error($this->con)),0);
-                }
+            if(!@ldap_bind($this->con, $dn, $pass)) {
+                $this->_debug("LDAP: bind with $dn failed", -1, __LINE__, __FILE__);
+                $this->_debug('LDAP user dn bind: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                 return false;
             }
             $this->bound = 1;
             return true;
-        }else{
+        } 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 {
@@ -108,18 +111,14 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
             }
 
             // Try to bind with the dn provided
-            if(!@ldap_bind($this->con,$dn,$pass)){
-                if($this->cnf['debug']){
-                    msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__);
-                    msg('LDAP user bind: '.htmlspecialchars(ldap_error($this->con)),0);
-                }
+            if(!@ldap_bind($this->con, $dn, $pass)) {
+                $this->_debug("LDAP: bind with $dn failed", -1, __LINE__, __FILE__);
+                $this->_debug('LDAP user bind: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                 return false;
             }
             $this->bound = 1;
             return true;
         }
-
-        return false;
     }
 
     /**
@@ -144,52 +143,52 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
      * @author  Dan Allen 
      * @author  
      * @author  Stephane Chazelas 
+     *
+     * @param   string $user
+     * @param   bool   $inbind authldap specific, true if in bind phase
      * @return  array containing user data or false
      */
-    function getUserData($user,$inbind=false) {
+    public function getUserData($user, $inbind = false) {
         global $conf;
         if(!$this->_openLDAP()) return false;
 
         // force superuser bind if wanted and not bound as superuser yet
-        if($this->cnf['binddn'] && $this->cnf['bindpw'] && $this->bound < 2){
+        if($this->getConf('binddn') && $this->getConf('bindpw') && $this->bound < 2) {
             // use superuser credentials
-            if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){
-                if($this->cnf['debug'])
-                    msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+            if(!@ldap_bind($this->con, $this->getConf('binddn'), $this->getConf('bindpw'))) {
+                $this->_debug('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                 return false;
             }
             $this->bound = 2;
-        }elseif($this->bound == 0 && !$inbind) {
+        } elseif($this->bound == 0 && !$inbind) {
             // in some cases getUserData is called outside the authentication workflow
             // eg. for sending email notification on subscribed pages. This data might not
             // be accessible anonymously, so we try to rebind the current user here
-            list($loginuser,$loginsticky,$loginpass) = auth_getCookie();
-            if($loginuser && $loginpass){
+            list($loginuser, $loginsticky, $loginpass) = auth_getCookie();
+            if($loginuser && $loginpass) {
                 $loginpass = PMA_blowfish_decrypt($loginpass, auth_cookiesalt(!$loginsticky));
                 $this->checkPass($loginuser, $loginpass);
             }
         }
 
         $info['user']   = $user;
-        $info['server'] = $this->cnf['server'];
+        $info['server'] = $this->getConf('server');
 
         //get info for given user
-        $base = $this->_makeFilter($this->cnf['usertree'], $info);
-        if(!empty($this->cnf['userfilter'])) {
-            $filter = $this->_makeFilter($this->cnf['userfilter'], $info);
+        $base = $this->_makeFilter($this->getConf('usertree'), $info);
+        if($this->getConf('userfilter')) {
+            $filter = $this->_makeFilter($this->getConf('userfilter'), $info);
         } else {
             $filter = "(ObjectClass=*)";
         }
 
-        $sr     = $this->_ldapsearch($this->con, $base, $filter, $this->cnf['userscope']);
+        $sr     = $this->_ldapsearch($this->con, $base, $filter, $this->getConf('userscope'));
         $result = @ldap_get_entries($this->con, $sr);
-        if($this->cnf['debug']){
-            msg('LDAP user search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
-            msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__);
-        }
+        $this->_debug('LDAP user search: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
+        $this->_debug('LDAP search at: '.htmlspecialchars($base.' '.$filter), 0, __LINE__, __FILE__);
 
         // Don't accept more or less than one response
-        if(!is_array($result) || $result['count'] != 1){
+        if(!is_array($result) || $result['count'] != 1) {
             return false; //user not found
         }
 
@@ -204,13 +203,13 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
         $info['grps'] = array();
 
         // overwrite if other attribs are specified.
-        if(is_array($this->cnf['mapping'])){
-            foreach($this->cnf['mapping'] as $localkey => $key) {
+        if(is_array($this->getConf('mapping'))) {
+            foreach($this->getConf('mapping') as $localkey => $key) {
                 if(is_array($key)) {
                     // use regexp to clean up user_result
                     list($key, $regexp) = each($key);
-                    if($user_result[$key]) foreach($user_result[$key] as $grp){
-                        if (preg_match($regexp,$grp,$match)) {
+                    if($user_result[$key]) foreach($user_result[$key] as $grp) {
+                        if(preg_match($regexp, $grp, $match)) {
                             if($localkey == 'grps') {
                                 $info[$localkey][] = $match[1];
                             } else {
@@ -223,35 +222,33 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
                 }
             }
         }
-        $user_result = array_merge($info,$user_result);
+        $user_result = array_merge($info, $user_result);
 
         //get groups for given user if grouptree is given
-        if ($this->cnf['grouptree'] || $this->cnf['groupfilter']) {
-            $base   = $this->_makeFilter($this->cnf['grouptree'], $user_result);
-            $filter = $this->_makeFilter($this->cnf['groupfilter'], $user_result);
-            $sr = $this->_ldapsearch($this->con, $base, $filter, $this->cnf['groupscope'], array($this->cnf['groupkey']));
-            if($this->cnf['debug']){
-                msg('LDAP group search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
-                msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__);
-            }
-            if(!$sr){
-                msg("LDAP: Reading group memberships failed",-1);
+        if($this->getConf('grouptree') || $this->getConf('groupfilter')) {
+            $base   = $this->_makeFilter($this->getConf('grouptree'), $user_result);
+            $filter = $this->_makeFilter($this->getConf('groupfilter'), $user_result);
+            $sr     = $this->_ldapsearch($this->con, $base, $filter, $this->getConf('groupscope'), array($this->getConf('groupkey')));
+            $this->_debug('LDAP group search: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
+            $this->_debug('LDAP search at: '.htmlspecialchars($base.' '.$filter), 0, __LINE__, __FILE__);
+
+            if(!$sr) {
+                msg("LDAP: Reading group memberships failed", -1);
                 return false;
             }
             $result = ldap_get_entries($this->con, $sr);
             ldap_free_result($sr);
 
-            if(is_array($result)) foreach($result as $grp){
-                if(!empty($grp[$this->cnf['groupkey']][0])){
-                    if($this->cnf['debug'])
-                        msg('LDAP usergroup: '.htmlspecialchars($grp[$this->cnf['groupkey']][0]),0,__LINE__,__FILE__);
-                    $info['grps'][] = $grp[$this->cnf['groupkey']][0];
+            if(is_array($result)) foreach($result as $grp) {
+                if(!empty($grp[$this->getConf('groupkey')][0])) {
+                    $this->_debug('LDAP usergroup: '.htmlspecialchars($grp[$this->getConf('groupkey')][0]), 0, __LINE__, __FILE__);
+                    $info['grps'][] = $grp[$this->getConf('groupkey')][0];
                 }
             }
         }
 
         // always add the default group to the list of groups
-        if(!in_array($conf['defaultgroup'],$info['grps'])){
+        if(!in_array($conf['defaultgroup'], $info['grps'])) {
             $info['grps'][] = $conf['defaultgroup'];
         }
         return $info;
@@ -259,8 +256,10 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
 
     /**
      * Most values in LDAP are case-insensitive
+     *
+     * @return bool
      */
-    function isCaseSensitive(){
+    public function isCaseSensitive() {
         return false;
     }
 
@@ -268,47 +267,47 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
      * Bulk retrieval of user data
      *
      * @author  Dominik Eckelmann 
-     * @param   start     index of first user to be returned
-     * @param   limit     max number of users to be returned
-     * @param   filter    array of field/pattern pairs, null for no filter
+     * @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
      * @return  array of userinfo (refer getUserData for internal userinfo details)
      */
-    function retrieveUsers($start=0,$limit=-1,$filter=array()) {
+    function retrieveUsers($start = 0, $limit = -1, $filter = array()) {
         if(!$this->_openLDAP()) return false;
 
-        if (!isset($this->users)) {
+        if(is_null($this->users)) {
             // Perform the search and grab all their details
-            if(!empty($this->cnf['userfilter'])) {
-                $all_filter = str_replace('%{user}', '*', $this->cnf['userfilter']);
+            if($this->getConf('userfilter')) {
+                $all_filter = str_replace('%{user}', '*', $this->getConf('userfilter'));
             } else {
                 $all_filter = "(ObjectClass=*)";
             }
-            $sr=ldap_search($this->con,$this->cnf['usertree'],$all_filter);
-            $entries = ldap_get_entries($this->con, $sr);
+            $sr          = ldap_search($this->con, $this->getConf('usertree'), $all_filter);
+            $entries     = ldap_get_entries($this->con, $sr);
             $users_array = array();
-            for ($i=0; $i<$entries["count"]; $i++){
+            for($i = 0; $i < $entries["count"]; $i++) {
                 array_push($users_array, $entries[$i]["uid"][0]);
             }
             asort($users_array);
             $result = $users_array;
-            if (!$result) return array();
+            if(!$result) return array();
             $this->users = array_fill_keys($result, false);
         }
-        $i = 0;
+        $i     = 0;
         $count = 0;
         $this->_constructPattern($filter);
         $result = array();
 
-        foreach ($this->users as $user => &$info) {
-            if ($i++ < $start) {
+        foreach($this->users as $user => &$info) {
+            if($i++ < $start) {
                 continue;
             }
-            if ($info === false) {
+            if($info === false) {
                 $info = $this->getUserData($user);
             }
-            if ($this->_filter($user, $info)) {
+            if($this->_filter($user, $info)) {
                 $result[$user] = $info;
-                if (($limit >= 0) && (++$count >= $limit)) break;
+                if(($limit >= 0) && (++$count >= $limit)) break;
             }
         }
         return $result;
@@ -320,50 +319,61 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
      * Used by auth_getUserData to make the filter
      * strings for grouptree and groupfilter
      *
-     * filter      string  ldap search filter with placeholders
-     * placeholders array   array with the placeholders
-     *
      * @author  Troels Liebe Bentsen 
+     * @param   string $filter ldap search filter with placeholders
+     * @param   array  $placeholders placeholders to fill in
      * @return  string
      */
-    function _makeFilter($filter, $placeholders) {
+    protected function _makeFilter($filter, $placeholders) {
         preg_match_all("/%{([^}]+)/", $filter, $matches, PREG_PATTERN_ORDER);
         //replace each match
-        foreach ($matches[1] as $match) {
+        foreach($matches[1] as $match) {
             //take first element if array
             if(is_array($placeholders[$match])) {
                 $value = $placeholders[$match][0];
             } else {
                 $value = $placeholders[$match];
             }
-            $value = $this->_filterEscape($value);
+            $value  = $this->_filterEscape($value);
             $filter = str_replace('%{'.$match.'}', $value, $filter);
         }
         return $filter;
     }
 
     /**
-     * return 1 if $user + $info match $filter criteria, 0 otherwise
+     * return true if $user + $info match $filter criteria, false otherwise
+     *
+     * @author Chris Smith 
      *
-     * @author   Chris Smith 
+     * @param  string $user the user's login name
+     * @param  array  $info the user's userinfo array
+     * @return bool
      */
-    function _filter($user, $info) {
-        foreach ($this->_pattern as $item => $pattern) {
-            if ($item == 'user') {
-                if (!preg_match($pattern, $user)) return 0;
-            } else if ($item == 'grps') {
-                if (!count(preg_grep($pattern, $info['grps']))) return 0;
+    protected  function _filter($user, $info) {
+        foreach($this->_pattern as $item => $pattern) {
+            if($item == 'user') {
+                if(!preg_match($pattern, $user)) return false;
+            } else if($item == 'grps') {
+                if(!count(preg_grep($pattern, $info['grps']))) return false;
             } else {
-                if (!preg_match($pattern, $info[$item])) return 0;
+                if(!preg_match($pattern, $info[$item])) return false;
             }
         }
-        return 1;
+        return true;
     }
 
-    function _constructPattern($filter) {
+    /**
+     * Set the filter pattern
+     *
+     * @author Chris Smith 
+     *
+     * @param $filter
+     * @return void
+     */
+    protected function _constructPattern($filter) {
         $this->_pattern = array();
-        foreach ($filter as $item => $pattern) {
-            $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i';    // allow regex characters
+        foreach($filter as $item => $pattern) {
+            $this->_pattern[$item] = '/'.str_replace('/', '\/', $pattern).'/i'; // allow regex characters
         }
     }
 
@@ -373,11 +383,15 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
      * Ported from Perl's Net::LDAP::Util escape_filter_value
      *
      * @author Andreas Gohr
+     * @param  string $string
+     * @return string
      */
-    function _filterEscape($string){
-        return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e',
-                            '"\\\\\".join("",unpack("H2","$1"))',
-                            $string);
+    protected function _filterEscape($string) {
+        return preg_replace(
+            '/([\x00-\x1F\*\(\)\\\\])/e',
+            '"\\\\\".join("",unpack("H2","$1"))',
+            $string
+        );
     }
 
     /**
@@ -386,18 +400,18 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
      *
      * @author  Andreas Gohr 
      */
-    function _openLDAP(){
+    protected function _openLDAP() {
         if($this->con) return true; // connection already established
 
         $this->bound = 0;
 
-        $port = ($this->cnf['port']) ? $this->cnf['port'] : 389;
-        $bound = false;
-        $servers = explode(',', $this->cnf['server']);
-        foreach ($servers as $server) {
-            $server = trim($server);
+        $port    = $this->getConf('port');
+        $bound   = false;
+        $servers = explode(',', $this->getConf('server'));
+        foreach($servers as $server) {
+            $server    = trim($server);
             $this->con = @ldap_connect($server, $port);
-            if (!$this->con) {
+            if(!$this->con) {
                 continue;
             }
 
@@ -410,80 +424,111 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
              */
 
             //set protocol version and dependend options
-            if($this->cnf['version']){
-                if(!@ldap_set_option($this->con, LDAP_OPT_PROTOCOL_VERSION,
-                                     $this->cnf['version'])){
-                    msg('Setting LDAP Protocol version '.$this->cnf['version'].' failed',-1);
-                    if($this->cnf['debug'])
-                        msg('LDAP version set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
-                }else{
+            if($this->getConf('version')) {
+                if(!@ldap_set_option(
+                    $this->con, LDAP_OPT_PROTOCOL_VERSION,
+                    $this->getConf('version')
+                )
+                ) {
+                    msg('Setting LDAP Protocol version '.$this->getConf('version').' failed', -1);
+                    $this->_debug('LDAP version set: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
+                } else {
                     //use TLS (needs version 3)
-                    if($this->cnf['starttls']) {
-                        if (!@ldap_start_tls($this->con)){
-                            msg('Starting TLS failed',-1);
-                            if($this->cnf['debug'])
-                                msg('LDAP TLS set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+                    if($this->getConf('starttls')) {
+                        if(!@ldap_start_tls($this->con)) {
+                            msg('Starting TLS failed', -1);
+                            $this->_debug('LDAP TLS set: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                         }
                     }
                     // needs version 3
-                    if(isset($this->cnf['referrals'])) {
-                        if(!@ldap_set_option($this->con, LDAP_OPT_REFERRALS,
-                           $this->cnf['referrals'])){
-                            msg('Setting LDAP referrals to off failed',-1);
-                            if($this->cnf['debug'])
-                                msg('LDAP referal set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+                    if($this->getConf('referrals')) {
+                        if(!@ldap_set_option(
+                            $this->con, LDAP_OPT_REFERRALS,
+                            $this->getConf('referrals')
+                        )
+                        ) {
+                            msg('Setting LDAP referrals to off failed', -1);
+                            $this->_debug('LDAP referal set: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                         }
                     }
                 }
             }
 
             //set deref mode
-            if($this->cnf['deref']){
-                if(!@ldap_set_option($this->con, LDAP_OPT_DEREF, $this->cnf['deref'])){
-                    msg('Setting LDAP Deref mode '.$this->cnf['deref'].' failed',-1);
-                    if($this->cnf['debug'])
-                        msg('LDAP deref set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+            if($this->getConf('deref')) {
+                if(!@ldap_set_option($this->con, LDAP_OPT_DEREF, $this->getConf('deref'))) {
+                    msg('Setting LDAP Deref mode '.$this->getConf('deref').' failed', -1);
+                    $this->_debug('LDAP deref set: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                 }
             }
             /* As of PHP 5.3.0 we can set timeout to speedup skipping of invalid servers */
-            if (defined('LDAP_OPT_NETWORK_TIMEOUT')) {
+            if(defined('LDAP_OPT_NETWORK_TIMEOUT')) {
                 ldap_set_option($this->con, LDAP_OPT_NETWORK_TIMEOUT, 1);
             }
             $bound = @ldap_bind($this->con);
-            if ($bound) {
+            if($bound) {
                 break;
             }
         }
 
         if(!$bound) {
-            msg("LDAP: couldn't connect to LDAP server",-1);
+            msg("LDAP: couldn't connect to LDAP server", -1);
             return false;
         }
 
-
-        $this->canDo['getUsers'] = true;
+        $this->cando['getUsers'] = true;
         return true;
     }
 
     /**
      * Wraps around ldap_search, ldap_list or ldap_read depending on $scope
      *
-     * @param  $scope string - can be 'base', 'one' or 'sub'
      * @author Andreas Gohr 
+     * @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
+     * @return resource
      */
-    function _ldapsearch($link_identifier, $base_dn, $filter, $scope='sub', $attributes=null,
-                         $attrsonly=0, $sizelimit=0, $timelimit=0, $deref=LDAP_DEREF_NEVER){
+    protected function _ldapsearch($link_identifier, $base_dn, $filter, $scope = 'sub', $attributes = null,
+                         $attrsonly = 0, $sizelimit = 0, $timelimit = 0, $deref = LDAP_DEREF_NEVER) {
         if(is_null($attributes)) $attributes = array();
 
-        if($scope == 'base'){
-            return @ldap_read($link_identifier, $base_dn, $filter, $attributes,
-                             $attrsonly, $sizelimit, $timelimit, $deref);
-        }elseif($scope == 'one'){
-            return @ldap_list($link_identifier, $base_dn, $filter, $attributes,
-                             $attrsonly, $sizelimit, $timelimit, $deref);
-        }else{
-            return @ldap_search($link_identifier, $base_dn, $filter, $attributes,
-                                $attrsonly, $sizelimit, $timelimit, $deref);
+        if($scope == 'base') {
+            return @ldap_read(
+                $link_identifier, $base_dn, $filter, $attributes,
+                $attrsonly, $sizelimit, $timelimit, $deref
+            );
+        } elseif($scope == 'one') {
+            return @ldap_list(
+                $link_identifier, $base_dn, $filter, $attributes,
+                $attrsonly, $sizelimit, $timelimit, $deref
+            );
+        } else {
+            return @ldap_search(
+                $link_identifier, $base_dn, $filter, $attributes,
+                $attrsonly, $sizelimit, $timelimit, $deref
+            );
         }
     }
+
+    /**
+     * Wrapper around msg() but outputs only when debug is enabled
+     *
+     * @param string $message
+     * @param int    $err
+     * @param int    $line
+     * @param string $file
+     * @return void
+     */
+    protected function _debug($message, $err, $line, $file) {
+        if(!$this->getConf('debug')) return;
+        msg($message, $err, $line, $file);
+    }
+
 }
diff --git a/lib/plugins/authldap/conf/default.php b/lib/plugins/authldap/conf/default.php
new file mode 100644
index 000000000..35971d41d
--- /dev/null
+++ b/lib/plugins/authldap/conf/default.php
@@ -0,0 +1,7 @@
+
Date: Fri, 9 Nov 2012 16:31:57 +0100
Subject: authmysql fixes

* use proper plugin config
* code/PHP5 cleanup
---
 lib/plugins/authmysql/auth.php         | 732 +++++++++++++++++----------------
 lib/plugins/authmysql/conf/default.php |   3 +
 2 files changed, 375 insertions(+), 360 deletions(-)
 create mode 100644 lib/plugins/authmysql/conf/default.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php
index 368bd74a2..7d303726b 100644
--- a/lib/plugins/authmysql/auth.php
+++ b/lib/plugins/authmysql/auth.php
@@ -3,7 +3,7 @@
 if(!defined('DOKU_INC')) die();
 
 /**
- * MySQLP authentication backend
+ * MySQL authentication backend
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author     Andreas Gohr 
@@ -12,12 +12,14 @@ if(!defined('DOKU_INC')) die();
  * @author     Jan Schumann 
  */
 class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
-    var $dbcon        = 0;
-    var $dbver        = 0;    // database version
-    var $dbrev        = 0;    // database revision
-    var $dbsub        = 0;    // database subrevision
-    var $cnf          = null;
-    var $defaultgroup = "";
+    /** @var resource holds the database connection */
+    protected $dbcon = 0;
+    /** @var int database version*/
+    protected $dbver = 0;
+    /** @var int database revision */
+    protected $dbrev = 0;
+    /** @var int database subrevision */
+    protected $dbsub = 0;
 
     /**
      * Constructor
@@ -27,92 +29,93 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * @author Matthias Grimm 
      */
-    function __construct() {
+    public function __construct() {
         parent::__construct();
 
-        global $conf;
-        $this->cnf = $conf['auth']['mysql'];
-
-        if (method_exists($this, 'auth_basic')){
-            parent::__construct();
-        }
-
         if(!function_exists('mysql_connect')) {
-            if ($this->cnf['debug']){
-                msg("MySQL err: PHP MySQL extension not found.",-1,__LINE__,__FILE__);
-            }
+            $this->_debug("MySQL err: PHP MySQL extension not found.", -1, __LINE__, __FILE__);
             $this->success = false;
             return;
         }
 
-        // default to UTF-8, you rarely want something else
-        if(!isset($this->cnf['charset'])) $this->cnf['charset'] = 'utf8';
-
-        $this->defaultgroup = $conf['defaultgroup'];
-
         // set capabilities based upon config strings set
-        if (empty($this->cnf['server']) || empty($this->cnf['user']) ||
-            !isset($this->cnf['password']) || empty($this->cnf['database'])){
+        if(!$this->getConf('server') || !$this->getConf('user') || !$this->getConf('database')) {
+            $this->_debug("MySQL err: insufficient configuration.", -1, __LINE__, __FILE__);
 
-            if ($this->cnf['debug']){
-                msg("MySQL err: insufficient configuration.",-1,__LINE__,__FILE__);
-            }
             $this->success = false;
             return;
         }
 
-        $this->cando['addUser']      = $this->_chkcnf(array(
-                                            'getUserInfo',
-                                            'getGroups',
-                                            'addUser',
-                                            'getUserID',
-                                            'getGroupID',
-                                            'addGroup',
-                                            'addUserGroup'),true);
-        $this->cando['delUser']      = $this->_chkcnf(array(
-                                            'getUserID',
-                                            'delUser',
-                                            'delUserRefs'),true);
-        $this->cando['modLogin']     = $this->_chkcnf(array(
-                                            'getUserID',
-                                            'updateUser',
-                                            'UpdateTarget'),true);
-        $this->cando['modPass']      = $this->cando['modLogin'];
-        $this->cando['modName']      = $this->cando['modLogin'];
-        $this->cando['modMail']      = $this->cando['modLogin'];
-        $this->cando['modGroups']    = $this->_chkcnf(array(
-                                            'getUserID',
-                                            'getGroups',
-                                            'getGroupID',
-                                            'addGroup',
-                                            'addUserGroup',
-                                            'delGroup',
-                                            'getGroupID',
-                                            'delUserGroup'),true);
+        $this->cando['addUser']   = $this->_chkcnf(
+            array(
+                 'getUserInfo',
+                 'getGroups',
+                 'addUser',
+                 'getUserID',
+                 'getGroupID',
+                 'addGroup',
+                 'addUserGroup'
+            ), true
+        );
+        $this->cando['delUser']   = $this->_chkcnf(
+            array(
+                 'getUserID',
+                 'delUser',
+                 'delUserRefs'
+            ), true
+        );
+        $this->cando['modLogin']  = $this->_chkcnf(
+            array(
+                 'getUserID',
+                 'updateUser',
+                 'UpdateTarget'
+            ), true
+        );
+        $this->cando['modPass']   = $this->cando['modLogin'];
+        $this->cando['modName']   = $this->cando['modLogin'];
+        $this->cando['modMail']   = $this->cando['modLogin'];
+        $this->cando['modGroups'] = $this->_chkcnf(
+            array(
+                 'getUserID',
+                 'getGroups',
+                 'getGroupID',
+                 'addGroup',
+                 'addUserGroup',
+                 'delGroup',
+                 'getGroupID',
+                 'delUserGroup'
+            ), true
+        );
         /* getGroups is not yet supported
            $this->cando['getGroups']    = $this->_chkcnf(array('getGroups',
            'getGroupID'),false); */
-        $this->cando['getUsers']     = $this->_chkcnf(array(
-                                            'getUsers',
-                                            'getUserInfo',
-                                            'getGroups'),false);
-        $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'),false);
+        $this->cando['getUsers']     = $this->_chkcnf(
+            array(
+                 'getUsers',
+                 'getUserInfo',
+                 'getGroups'
+            ), false
+        );
+        $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'), false);
     }
 
     /**
      * Check if the given config strings are set
      *
      * @author  Matthias Grimm 
+     * @param   array $keys
+     * @param   bool  $wop is this a check for a write operation?
      * @return  bool
      */
-    function _chkcnf($keys, $wop=false){
-        foreach ($keys as $key){
-            if (empty($this->cnf[$key])) return false;
+    protected function _chkcnf($keys, $wop = false) {
+        foreach($keys as $key) {
+            if(!$this->getConf($key)) return false;
         }
 
         /* write operation and lock array filled with tables names? */
-        if ($wop && (!is_array($this->cnf['TablesToLock']) ||
-                    !count($this->cnf['TablesToLock']))){
+        if($wop && (!is_array($this->getConf('TablesToLock')) ||
+            !count($this->getConf('TablesToLock')))
+        ) {
             return false;
         }
 
@@ -127,27 +130,28 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * Depending on which SQL string is defined in the config, password
      * checking is done here (getpass) or by the database (passcheck)
      *
-     * @param  $user  user who would like access
-     * @param  $pass  user's clear text password to check
+     * @param  string $user user who would like access
+     * @param  string $pass user's clear text password to check
      * @return bool
      *
      * @author  Andreas Gohr 
      * @author  Matthias Grimm 
      */
-    function checkPass($user,$pass){
-        $rc  = false;
+    public function checkPass($user, $pass) {
+        global $conf;
+        $rc = false;
 
         if($this->_openDB()) {
-            $sql    = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']);
-            $sql    = str_replace('%{pass}',$this->_escape($pass),$sql);
-            $sql    = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql);
+            $sql    = str_replace('%{user}', $this->_escape($user), $this->getConf('checkPass'));
+            $sql    = str_replace('%{pass}', $this->_escape($pass), $sql);
+            $sql    = str_replace('%{dgroup}', $this->_escape($conf['defaultgroup']), $sql);
             $result = $this->_queryDB($sql);
 
             if($result !== false && count($result) == 1) {
-                if($this->cnf['forwardClearPass'] == 1)
+                if($this->getConf('forwardClearPass') == 1)
                     $rc = true;
                 else
-                    $rc = auth_verifyPassword($pass,$result[0]['pass']);
+                    $rc = auth_verifyPassword($pass, $result[0]['pass']);
             }
             $this->_closeDB();
         }
@@ -155,20 +159,15 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * [public function]
-     *
-     * Returns info about the given user needs to contain
-     * at least these fields:
-     *   name  string  full name of the user
-     *   mail  string  email addres of the user
-     *   grps  array   list of groups the user is in
-     *
-     * @param $user   user's nick to get data for
+     * Return user info
      *
      * @author  Andreas Gohr 
      * @author  Matthias Grimm 
+     *
+     * @param string $user user login to get data for
+     * @return array|bool
      */
-    function getUserData($user){
+    public function getUserData($user) {
         if($this->_openDB()) {
             $this->_lockTables("READ");
             $info = $this->_getUserInfo($user);
@@ -180,45 +179,46 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * [public function]
-     *
      * Create a new User. Returns false if the user already exists,
      * null when an error occurred and true if everything went well.
      *
      * The new user will be added to the default group by this
      * function if grps are not specified (default behaviour).
      *
-     * @param $user  nick of the user
-     * @param $pwd   clear text password
-     * @param $name  full name of the user
-     * @param $mail  email address
-     * @param $grps  array of groups the user should become member of
-     *
      * @author  Andreas Gohr 
      * @author  Chris Smith 
      * @author  Matthias Grimm 
+     *
+     * @param string $user  nick of the user
+     * @param string $pwd   clear text password
+     * @param string $name  full name of the user
+     * @param string $mail  email address
+     * @param array  $grps  array of groups the user should become member of
+     * @return bool|null
      */
-    function createUser($user,$pwd,$name,$mail,$grps=null){
+    public function createUser($user, $pwd, $name, $mail, $grps = null) {
+        global $conf;
+
         if($this->_openDB()) {
-            if (($info = $this->_getUserInfo($user)) !== false)
-                return false;  // user already exists
+            if(($info = $this->_getUserInfo($user)) !== false)
+                return false; // user already exists
 
             // set defaultgroup if no groups were given
-            if ($grps == null)
-                $grps = array($this->defaultgroup);
+            if($grps == null)
+                $grps = array($conf['defaultgroup']);
 
             $this->_lockTables("WRITE");
-            $pwd = $this->cnf['forwardClearPass'] ? $pwd : auth_cryptPassword($pwd);
-            $rc = $this->_addUser($user,$pwd,$name,$mail,$grps);
+            $pwd = $this->getConf('forwardClearPass') ? $pwd : auth_cryptPassword($pwd);
+            $rc  = $this->_addUser($user, $pwd, $name, $mail, $grps);
             $this->_unlockTables();
             $this->_closeDB();
-            if ($rc) return true;
+            if($rc) return true;
         }
-        return null;  // return error
+        return null; // return error
     }
 
     /**
-     * Modify user data [public function]
+     * Modify user data
      *
      * An existing user dataset will be modified. Changes are given in an array.
      *
@@ -237,37 +237,36 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * should be modified). In this case we asure that we don't touch groups
      * even $changes['grps'] is set by mistake.
      *
-     * @param   $user     nick of the user to be changed
-     * @param   $changes  array of field/value pairs to be changed (password
-     *                    will be clear text)
-     * @return  bool      true on success, false on error
-     *
      * @author  Chris Smith 
      * @author  Matthias Grimm 
+     *
+     * @param   string $user    nick of the user to be changed
+     * @param   array  $changes array of field/value pairs to be changed (password will be clear text)
+     * @return  bool   true on success, false on error
      */
-    function modifyUser($user, $changes) {
+    public function modifyUser($user, $changes) {
         $rc = false;
 
-        if (!is_array($changes) || !count($changes))
-            return true;  // nothing to change
+        if(!is_array($changes) || !count($changes))
+            return true; // nothing to change
 
         if($this->_openDB()) {
             $this->_lockTables("WRITE");
 
-            if (($uid = $this->_getUserID($user))) {
+            if(($uid = $this->_getUserID($user))) {
                 $rc = $this->_updateUserInfo($changes, $uid);
 
-                if ($rc && isset($changes['grps']) && $this->cando['modGroups']) {
+                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)
+                        if(($this->_addUserToGroup($user, $group, 1)) == false)
                             $rc = false;
 
                     foreach($grpdel as $group)
-                        if (($this->_delUserFromGroup($user, $group)) == false)
+                        if(($this->_delUserFromGroup($user, $group)) == false)
                             $rc = false;
                 }
             }
@@ -293,10 +292,10 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
         $count = 0;
 
         if($this->_openDB()) {
-            if (is_array($users) && count($users)) {
+            if(is_array($users) && count($users)) {
                 $this->_lockTables("WRITE");
-                foreach ($users as $user) {
-                    if ($this->_delUser($user))
+                foreach($users as $user) {
+                    if($this->_delUser($user))
                         $count++;
                 }
                 $this->_unlockTables();
@@ -307,28 +306,26 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * [public function]
-     *
      * Counts users which meet certain $filter criteria.
      *
-     * @param  array  $filter  filter criteria in item/pattern pairs
-     * @return count of found users.
-     *
      * @author  Matthias Grimm 
+     *
+     * @param  array $filter  filter criteria in item/pattern pairs
+     * @return int count of found users
      */
-    function getUserCount($filter=array()) {
+    public function getUserCount($filter = array()) {
         $rc = 0;
 
         if($this->_openDB()) {
-            $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+            $sql = $this->_createSQLFilter($this->getConf('getUsers'), $filter);
 
-            if ($this->dbver >= 4) {
-                $sql = substr($sql, 6);  /* remove 'SELECT' or 'select' */
+            if($this->dbver >= 4) {
+                $sql = substr($sql, 6); /* remove 'SELECT' or 'select' */
                 $sql = "SELECT SQL_CALC_FOUND_ROWS".$sql." LIMIT 1";
                 $this->_queryDB($sql);
                 $result = $this->_queryDB("SELECT FOUND_ROWS()");
-                $rc = $result[0]['FOUND_ROWS()'];
-            } else if (($result = $this->_queryDB($sql)))
+                $rc     = $result[0]['FOUND_ROWS()'];
+            } else if(($result = $this->_queryDB($sql)))
                 $rc = count($result);
 
             $this->_closeDB();
@@ -337,27 +334,27 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * Bulk retrieval of user data. [public function]
-     *
-     * @param   first     index of first user to be returned
-     * @param   limit     max number of users to be returned
-     * @param   filter    array of field/pattern pairs
-     * @return  array of userinfo (refer getUserData for internal userinfo details)
+     * Bulk retrieval of user data
      *
      * @author  Matthias Grimm 
+     *
+     * @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
+     * @return  array userinfo (refer getUserData for internal userinfo details)
      */
-    function retrieveUsers($first=0,$limit=10,$filter=array()) {
-        $out   = array();
+    public function retrieveUsers($first = 0, $limit = 10, $filter = array()) {
+        $out = array();
 
         if($this->_openDB()) {
             $this->_lockTables("READ");
-            $sql  = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
-            $sql .= " ".$this->cnf['SortOrder']." LIMIT $first, $limit";
+            $sql = $this->_createSQLFilter($this->getConf('getUsers'), $filter);
+            $sql .= " ".$this->getConf('SortOrder')." LIMIT $first, $limit";
             $result = $this->_queryDB($sql);
 
-            if (!empty($result)) {
-                foreach ($result as $user)
-                    if (($info = $this->_getUserInfo($user['user'])))
+            if(!empty($result)) {
+                foreach($result as $user)
+                    if(($info = $this->_getUserInfo($user['user'])))
                         $out[$user['user']] = $info;
             }
 
@@ -368,20 +365,20 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * Give user membership of a group [public function]
-     *
-     * @param   $user
-     * @param   $group
-     * @return  bool    true on success, false on error
+     * Give user membership of a group
      *
      * @author  Matthias Grimm 
+     *
+     * @param   string $user
+     * @param   string $group
+     * @return  bool   true on success, false on error
      */
-    function joinGroup($user, $group) {
+    protected function joinGroup($user, $group) {
         $rc = false;
 
-        if ($this->_openDB()) {
+        if($this->_openDB()) {
             $this->_lockTables("WRITE");
-            $rc  = $this->_addUserToGroup($user, $group);
+            $rc = $this->_addUserToGroup($user, $group);
             $this->_unlockTables();
             $this->_closeDB();
         }
@@ -389,20 +386,19 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * Remove user from a group [public function]
-     *
-     * @param   $user    user that leaves a group
-     * @param   $group   group to leave
-     * @return  bool
+     * Remove user from a group
      *
      * @author  Matthias Grimm 
+     *
+     * @param   string $user  user that leaves a group
+     * @param   string $group group to leave
+     * @return  bool
      */
-    function leaveGroup($user, $group) {
+    protected function leaveGroup($user, $group) {
         $rc = false;
 
-        if ($this->_openDB()) {
+        if($this->_openDB()) {
             $this->_lockTables("WRITE");
-            $uid = $this->_getUserID($user);
             $rc  = $this->_delUserFromGroup($user, $group);
             $this->_unlockTables();
             $this->_closeDB();
@@ -413,54 +409,54 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     /**
      * MySQL is case-insensitive
      */
-    function isCaseSensitive(){
+    public function isCaseSensitive() {
         return false;
     }
 
     /**
      * Adds a user to a group.
      *
-     * If $force is set to '1' non existing groups would be created.
+     * If $force is set to true non existing groups would be created.
      *
      * The database connection must already be established. Otherwise
      * this function does nothing and returns 'false'. It is strongly
      * recommended to call this function only after all participating
      * tables (group and usergroup) have been locked.
      *
-     * @param   $user    user to add to a group
-     * @param   $group   name of the group
-     * @param   $force   '1' create missing groups
-     * @return  bool     'true' on success, 'false' on error
-     *
      * @author Matthias Grimm 
+     *
+     * @param   string $user    user to add to a group
+     * @param   string $group   name of the group
+     * @param   bool   $force   create missing groups
+     * @return  bool   true on success, false on error
      */
-    function _addUserToGroup($user, $group, $force=0) {
+    protected function _addUserToGroup($user, $group, $force = false) {
         $newgroup = 0;
 
-        if (($this->dbcon) && ($user)) {
+        if(($this->dbcon) && ($user)) {
             $gid = $this->_getGroupID($group);
-            if (!$gid) {
-                if ($force) {  // create missing groups
-                    $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['addGroup']);
-                    $gid = $this->_modifyDB($sql);
-                    $newgroup = 1;  // group newly created
+            if(!$gid) {
+                if($force) { // create missing groups
+                    $sql      = str_replace('%{group}', $this->_escape($group), $this->getConf('addGroup'));
+                    $gid      = $this->_modifyDB($sql);
+                    $newgroup = 1; // group newly created
                 }
-                if (!$gid) return false; // group didn't exist and can't be created
+                if(!$gid) return false; // group didn't exist and can't be created
             }
 
-            $sql = $this->cnf['addUserGroup'];
-            if(strpos($sql,'%{uid}') !== false){
+            $sql = $this->getConf('addUserGroup');
+            if(strpos($sql, '%{uid}') !== false) {
                 $uid = $this->_getUserID($user);
-                $sql = str_replace('%{uid}',  $this->_escape($uid),$sql);
+                $sql = str_replace('%{uid}', $this->_escape($uid), $sql);
             }
-            $sql = str_replace('%{user}', $this->_escape($user),$sql);
-            $sql = str_replace('%{gid}',  $this->_escape($gid),$sql);
-            $sql = str_replace('%{group}',$this->_escape($group),$sql);
-            if ($this->_modifyDB($sql) !== false) return true;
-
-            if ($newgroup) { // remove previously created group on error
-                $sql = str_replace('%{gid}',  $this->_escape($gid),$this->cnf['delGroup']);
-                $sql = str_replace('%{group}',$this->_escape($group),$sql);
+            $sql = str_replace('%{user}', $this->_escape($user), $sql);
+            $sql = str_replace('%{gid}', $this->_escape($gid), $sql);
+            $sql = str_replace('%{group}', $this->_escape($group), $sql);
+            if($this->_modifyDB($sql) !== false) return true;
+
+            if($newgroup) { // remove previously created group on error
+                $sql = str_replace('%{gid}', $this->_escape($gid), $this->getConf('delGroup'));
+                $sql = str_replace('%{group}', $this->_escape($group), $sql);
                 $this->_modifyDB($sql);
             }
         }
@@ -470,26 +466,26 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
     /**
      * Remove user from a group
      *
-     * @param   $user    user that leaves a group
-     * @param   $group   group to leave
-     * @return  bool     true on success, false on error
-     *
      * @author  Matthias Grimm 
+     *
+     * @param   string $user  user that leaves a group
+     * @param   string $group group to leave
+     * @return  bool   true on success, false on error
      */
-    function _delUserFromGroup($user, $group) {
+    protected function _delUserFromGroup($user, $group) {
         $rc = false;
 
-        if (($this->dbcon) && ($user)) {
-            $sql = $this->cnf['delUserGroup'];
-            if(strpos($sql,'%{uid}') !== false){
+        if(($this->dbcon) && ($user)) {
+            $sql = $this->getConf('delUserGroup');
+            if(strpos($sql, '%{uid}') !== false) {
                 $uid = $this->_getUserID($user);
-                $sql = str_replace('%{uid}',  $this->_escape($uid),$sql);
+                $sql = str_replace('%{uid}', $this->_escape($uid), $sql);
             }
             $gid = $this->_getGroupID($group);
-            if ($gid) {
-                $sql = str_replace('%{user}', $this->_escape($user),$sql);
-                $sql = str_replace('%{gid}',  $this->_escape($gid),$sql);
-                $sql = str_replace('%{group}',$this->_escape($group),$sql);
+            if($gid) {
+                $sql = str_replace('%{user}', $this->_escape($user), $sql);
+                $sql = str_replace('%{gid}', $this->_escape($gid), $sql);
+                $sql = str_replace('%{group}', $this->_escape($group), $sql);
                 $rc  = $this->_modifyDB($sql) == 0 ? true : false;
             }
         }
@@ -501,19 +497,18 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * The database connection must already be established
      * for this function to work. Otherwise it will return
-     * 'false'.
-     *
-     * @param  $user  user whose groups should be listed
-     * @return bool   false on error
-     * @return array  array containing all groups on success
+     * false.
      *
      * @author Matthias Grimm 
+     *
+     * @param  string $user user whose groups should be listed
+     * @return bool|array false on error, all groups on success
      */
-    function _getGroups($user) {
+    protected function _getGroups($user) {
         $groups = array();
 
         if($this->dbcon) {
-            $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getGroups']);
+            $sql    = str_replace('%{user}', $this->_escape($user), $this->getConf('getGroups'));
             $result = $this->_queryDB($sql);
 
             if($result !== false && count($result)) {
@@ -530,16 +525,16 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * The database connection must already be established
      * for this function to work. Otherwise it will return
-     * 'false'.
-     *
-     * @param  $user   user whose id is desired
-     * @return user id
+     * false.
      *
      * @author Matthias Grimm 
+     *
+     * @param  string $user user whose id is desired
+     * @return mixed  user id
      */
-    function _getUserID($user) {
+    protected function _getUserID($user) {
         if($this->dbcon) {
-            $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserID']);
+            $sql    = str_replace('%{user}', $this->_escape($user), $this->getConf('getUserID'));
             $result = $this->_queryDB($sql);
             return $result === false ? false : $result[0]['id'];
         }
@@ -551,43 +546,45 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * The database connection must already be established
      * for this function to work. Otherwise it will return
-     * 'false'.
-     *
-     * @param  $user  login of the user
-     * @param  $pwd   encrypted password
-     * @param  $name  full name of the user
-     * @param  $mail  email address
-     * @param  $grps  array of groups the user should become member of
-     * @return bool
+     * false.
      *
      * @author  Andreas Gohr 
      * @author  Chris Smith 
      * @author  Matthias Grimm 
+     *
+     * @param  string $user  login of the user
+     * @param  string $pwd   encrypted password
+     * @param  string $name  full name of the user
+     * @param  string $mail  email address
+     * @param  array  $grps  array of groups the user should become member of
+     * @return bool
      */
-    function _addUser($user,$pwd,$name,$mail,$grps){
+    protected function _addUser($user, $pwd, $name, $mail, $grps) {
         if($this->dbcon && is_array($grps)) {
-            $sql = str_replace('%{user}', $this->_escape($user),$this->cnf['addUser']);
-            $sql = str_replace('%{pass}', $this->_escape($pwd),$sql);
-            $sql = str_replace('%{name}', $this->_escape($name),$sql);
-            $sql = str_replace('%{email}',$this->_escape($mail),$sql);
+            $sql = str_replace('%{user}', $this->_escape($user), $this->getConf('addUser'));
+            $sql = str_replace('%{pass}', $this->_escape($pwd), $sql);
+            $sql = str_replace('%{name}', $this->_escape($name), $sql);
+            $sql = str_replace('%{email}', $this->_escape($mail), $sql);
             $uid = $this->_modifyDB($sql);
+            $gid = false;
+            $group = '';
 
-            if ($uid) {
+            if($uid) {
                 foreach($grps as $group) {
                     $gid = $this->_addUserToGroup($user, $group, 1);
-                    if ($gid === false) break;
+                    if($gid === false) break;
                 }
 
-                if ($gid) return true;
-                else {
+                if($gid !== false){
+                    return true;
+                } else {
                     /* remove the new user and all group relations if a group can't
                      * be assigned. Newly created groups will remain in the database
                      * and won't be removed. This might create orphaned groups but
                      * is not a big issue so we ignore this problem here.
                      */
                     $this->_delUser($user);
-                    if ($this->cnf['debug'])
-                        msg ("MySQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
+                    $this->_debug("MySQL err: Adding user '$user' to group '$group' failed.", -1, __LINE__, __FILE__);
                 }
             }
         }
@@ -599,21 +596,21 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * The database connection must already be established
      * for this function to work. Otherwise it will return
-     * 'false'.
-     *
-     * @param  $user   user whose id is desired
-     * @return bool
+     * false.
      *
      * @author Matthias Grimm 
+     *
+     * @param  string $user user whose id is desired
+     * @return bool
      */
-    function _delUser($user) {
+    protected function _delUser($user) {
         if($this->dbcon) {
             $uid = $this->_getUserID($user);
-            if ($uid) {
-                $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUserRefs']);
+            if($uid) {
+                $sql = str_replace('%{uid}', $this->_escape($uid), $this->getConf('delUserRefs'));
                 $this->_modifyDB($sql);
-                $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUser']);
-                $sql = str_replace('%{user}',  $this->_escape($user),$sql);
+                $sql = str_replace('%{uid}', $this->_escape($uid), $this->getConf('delUser'));
+                $sql = str_replace('%{user}', $this->_escape($user), $sql);
                 $this->_modifyDB($sql);
                 return true;
             }
@@ -628,17 +625,16 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * must already be established for this function to work.
      * Otherwise it will return 'false'.
      *
-     * @param  $user  user's nick to get data for
-     * @return bool   false on error
-     * @return array  user info on success
-     *
      * @author Matthias Grimm 
+     *
+     * @param  string $user  user's nick to get data for
+     * @return bool|array false on error, user info on success
      */
-    function _getUserInfo($user){
-        $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserInfo']);
+    protected function _getUserInfo($user) {
+        $sql    = str_replace('%{user}', $this->_escape($user), $this->getConf('getUserInfo'));
         $result = $this->_queryDB($sql);
         if($result !== false && count($result)) {
-            $info = $result[0];
+            $info         = $result[0];
             $info['grps'] = $this->_getGroups($user);
             return $info;
         }
@@ -658,43 +654,43 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * The password will be crypted if necessary.
      *
-     * @param  $changes  array of items to change as pairs of item and value
-     * @param  $uid      user id of dataset to change, must be unique in DB
-     * @return true on success or false on error
+     * @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 
      */
-    function _updateUserInfo($changes, $uid) {
-        $sql  = $this->cnf['updateUser']." ";
+    protected function _updateUserInfo($changes, $uid) {
+        $sql = $this->getConf('updateUser')." ";
         $cnt = 0;
         $err = 0;
 
         if($this->dbcon) {
-            foreach ($changes as $item => $value) {
-                if ($item == 'user') {
-                    if (($this->_getUserID($changes['user']))) {
+            foreach($changes as $item => $value) {
+                if($item == 'user') {
+                    if(($this->_getUserID($changes['user']))) {
                         $err = 1; /* new username already exists */
-                        break;    /* abort update */
+                        break; /* abort update */
                     }
-                    if ($cnt++ > 0) $sql .= ", ";
-                    $sql .= str_replace('%{user}',$value,$this->cnf['UpdateLogin']);
-                } else if ($item == 'name') {
-                    if ($cnt++ > 0) $sql .= ", ";
-                    $sql .= str_replace('%{name}',$value,$this->cnf['UpdateName']);
-                } else if ($item == 'pass') {
-                    if (!$this->cnf['forwardClearPass'])
+                    if($cnt++ > 0) $sql .= ", ";
+                    $sql .= str_replace('%{user}', $value, $this->getConf('UpdateLogin'));
+                } else if($item == 'name') {
+                    if($cnt++ > 0) $sql .= ", ";
+                    $sql .= str_replace('%{name}', $value, $this->getConf('UpdateName'));
+                } else if($item == 'pass') {
+                    if(!$this->getConf('forwardClearPass'))
                         $value = auth_cryptPassword($value);
-                    if ($cnt++ > 0) $sql .= ", ";
-                    $sql .= str_replace('%{pass}',$value,$this->cnf['UpdatePass']);
-                } else if ($item == 'mail') {
-                    if ($cnt++ > 0) $sql .= ", ";
-                    $sql .= str_replace('%{email}',$value,$this->cnf['UpdateEmail']);
+                    if($cnt++ > 0) $sql .= ", ";
+                    $sql .= str_replace('%{pass}', $value, $this->getConf('UpdatePass'));
+                } else if($item == 'mail') {
+                    if($cnt++ > 0) $sql .= ", ";
+                    $sql .= str_replace('%{email}', $value, $this->getConf('UpdateEmail'));
                 }
             }
 
-            if ($err == 0) {
-                if ($cnt > 0) {
-                    $sql .= " ".str_replace('%{uid}', $uid, $this->cnf['UpdateTarget']);
+            if($err == 0) {
+                if($cnt > 0) {
+                    $sql .= " ".str_replace('%{uid}', $uid, $this->getConf('UpdateTarget'));
                     if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp.
                     $this->_modifyDB($sql);
                 }
@@ -709,16 +705,16 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * The database connection must already be established
      * for this function to work. Otherwise it will return
-     * 'false'.
-     *
-     * @param  $group   group name which id is desired
-     * @return group id
+     * false.
      *
      * @author Matthias Grimm 
+     *
+     * @param  string $group   group name which id is desired
+     * @return mixed group id
      */
-    function _getGroupID($group) {
+    protected function _getGroupID($group) {
         if($this->dbcon) {
-            $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['getGroupID']);
+            $sql    = str_replace('%{group}', $this->_escape($group), $this->getConf('getGroupID'));
             $result = $this->_queryDB($sql);
             return $result === false ? false : $result[0]['id'];
         }
@@ -730,37 +726,39 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * usage in the object. The successful call to this functions is
      * essential for most functions in this object.
      *
-     * @return bool
-     *
      * @author Matthias Grimm 
+     *
+     * @return bool
      */
-    function _openDB() {
-        if (!$this->dbcon) {
-            $con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']);
-            if ($con) {
-                if ((mysql_select_db($this->cnf['database'], $con))) {
-                    if ((preg_match("/^(\d+)\.(\d+)\.(\d+).*/", mysql_get_server_info ($con), $result)) == 1) {
+    protected function _openDB() {
+        if(!$this->dbcon) {
+            $con = @mysql_connect($this->getConf('server'), $this->getConf('user'), $this->getConf('password'));
+            if($con) {
+                if((mysql_select_db($this->getConf('database'), $con))) {
+                    if((preg_match('/^(\d+)\.(\d+)\.(\d+).*/', mysql_get_server_info($con), $result)) == 1) {
                         $this->dbver = $result[1];
                         $this->dbrev = $result[2];
                         $this->dbsub = $result[3];
                     }
                     $this->dbcon = $con;
-                    if(!empty($this->cnf['charset'])){
-                        mysql_query('SET CHARACTER SET "' . $this->cnf['charset'] . '"', $con);
+                    if($this->getConf('charset')) {
+                        mysql_query('SET CHARACTER SET "'.$this->getConf('charset').'"', $con);
                     }
-                    return true;   // connection and database successfully opened
+                    return true; // connection and database successfully opened
                 } else {
-                    mysql_close ($con);
-                    if ($this->cnf['debug'])
-                        msg("MySQL err: No access to database {$this->cnf['database']}.",-1,__LINE__,__FILE__);
+                    mysql_close($con);
+                    $this->_debug("MySQL err: No access to database {$this->getConf('database')}.", -1, __LINE__, __FILE__);
                 }
-            } else if ($this->cnf['debug'])
-                msg ("MySQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
-                        -1,__LINE__,__FILE__);
+            } else {
+                $this->_debug(
+                    "MySQL err: Connection to {$this->getConf('user')}@{$this->getConf('server')} not possible.",
+                    -1, __LINE__, __FILE__
+                );
+            }
 
-            return false;  // connection failed
+            return false; // connection failed
         }
-        return true;  // connection already open
+        return true; // connection already open
     }
 
     /**
@@ -768,9 +766,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * @author Matthias Grimm 
      */
-    function _closeDB() {
-        if ($this->dbcon) {
-            mysql_close ($this->dbcon);
+    protected function _closeDB() {
+        if($this->dbcon) {
+            mysql_close($this->dbcon);
             $this->dbcon = 0;
         }
     }
@@ -782,27 +780,26 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * This function is only able to handle queries that returns a
      * table such as SELECT.
      *
-     * @param $query  SQL string that contains the query
-     * @return array with the result table
-     *
      * @author Matthias Grimm 
+     *
+     * @param string $query  SQL string that contains the query
+     * @return array with the result table
      */
-    function _queryDB($query) {
-        if($this->cnf['debug'] >= 2){
-            msg('MySQL query: '.hsc($query),0,__LINE__,__FILE__);
+    protected function _queryDB($query) {
+        if($this->getConf('debug') >= 2) {
+            msg('MySQL query: '.hsc($query), 0, __LINE__, __FILE__);
         }
 
         $resultarray = array();
-        if ($this->dbcon) {
-            $result = @mysql_query($query,$this->dbcon);
-            if ($result) {
-                while (($t = mysql_fetch_assoc($result)) !== false)
-                    $resultarray[]=$t;
-                mysql_free_result ($result);
+        if($this->dbcon) {
+            $result = @mysql_query($query, $this->dbcon);
+            if($result) {
+                while(($t = mysql_fetch_assoc($result)) !== false)
+                    $resultarray[] = $t;
+                mysql_free_result($result);
                 return $resultarray;
             }
-            if ($this->cnf['debug'])
-                msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+            $this->_debug('MySQL err: '.mysql_error($this->dbcon), -1, __LINE__, __FILE__);
         }
         return false;
     }
@@ -813,20 +810,19 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * This function is only able to handle queries that returns
      * either nothing or an id value such as INPUT, DELETE, UPDATE, etc.
      *
-     * @param $query  SQL string that contains the query
-     * @return insert id or 0, false on error
-     *
      * @author Matthias Grimm 
+     *
+     * @param string $query  SQL string that contains the query
+     * @return int|bool insert id or 0, false on error
      */
-    function _modifyDB($query) {
-        if ($this->dbcon) {
-            $result = @mysql_query($query,$this->dbcon);
-            if ($result) {
+    protected function _modifyDB($query) {
+        if($this->dbcon) {
+            $result = @mysql_query($query, $this->dbcon);
+            if($result) {
                 $rc = mysql_insert_id($this->dbcon); //give back ID on insert
-                if ($rc !== false) return $rc;
+                if($rc !== false) return $rc;
             }
-            if ($this->cnf['debug'])
-                msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+            $this->_debug('MySQL err: '.mysql_error($this->dbcon), -1, __LINE__, __FILE__);
         }
         return false;
     }
@@ -845,18 +841,19 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * so that this functionality is simulated by this function. Nevertheless
      * it is not as powerful as transactions, it is a good compromise in safty.
      *
-     * @param $mode  could be 'READ' or 'WRITE'
-     *
      * @author Matthias Grimm 
+     *
+     * @param string $mode  could be 'READ' or 'WRITE'
+     * @return bool
      */
-    function _lockTables($mode) {
-        if ($this->dbcon) {
-            if (is_array($this->cnf['TablesToLock']) && !empty($this->cnf['TablesToLock'])) {
-                if ($mode == "READ" || $mode == "WRITE") {
+    protected function _lockTables($mode) {
+        if($this->dbcon) {
+            if(is_array($this->getConf('TablesToLock'))) {
+                if($mode == "READ" || $mode == "WRITE") {
                     $sql = "LOCK TABLES ";
                     $cnt = 0;
-                    foreach ($this->cnf['TablesToLock'] as $table) {
-                        if ($cnt++ != 0) $sql .= ", ";
+                    foreach($this->getConf('TablesToLock') as $table) {
+                        if($cnt++ != 0) $sql .= ", ";
                         $sql .= "$table $mode";
                     }
                     $this->_modifyDB($sql);
@@ -873,8 +870,8 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      *
      * @author Matthias Grimm 
      */
-    function _unlockTables() {
-        if ($this->dbcon) {
+    protected function _unlockTables() {
+        if($this->dbcon) {
             $this->_modifyDB("UNLOCK TABLES");
             return true;
         }
@@ -886,32 +883,31 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * The database connection must already be established, otherwise the
      * original SQL string without filter criteria will be returned.
      *
-     * @param  $sql     SQL string to which the $filter criteria should be added
-     * @param  $filter  array of filter criteria as pairs of item and pattern
-     * @return SQL string with attached $filter criteria on success
-     * @return the original SQL string on error.
-     *
      * @author Matthias Grimm 
+     *
+     * @param  string $sql     SQL string to which the $filter criteria should be added
+     * @param  array $filter  array of filter criteria as pairs of item and pattern
+     * @return string SQL string with attached $filter criteria on success, original SQL string on error
      */
-    function _createSQLFilter($sql, $filter) {
+    protected function _createSQLFilter($sql, $filter) {
         $SQLfilter = "";
-        $cnt = 0;
+        $cnt       = 0;
 
-        if ($this->dbcon) {
-            foreach ($filter as $item => $pattern) {
+        if($this->dbcon) {
+            foreach($filter as $item => $pattern) {
                 $tmp = '%'.$this->_escape($pattern).'%';
-                if ($item == 'user') {
-                    if ($cnt++ > 0) $SQLfilter .= " AND ";
-                    $SQLfilter .= str_replace('%{user}',$tmp,$this->cnf['FilterLogin']);
-                } else if ($item == 'name') {
-                    if ($cnt++ > 0) $SQLfilter .= " AND ";
-                    $SQLfilter .= str_replace('%{name}',$tmp,$this->cnf['FilterName']);
-                } else if ($item == 'mail') {
-                    if ($cnt++ > 0) $SQLfilter .= " AND ";
-                    $SQLfilter .= str_replace('%{email}',$tmp,$this->cnf['FilterEmail']);
-                } else if ($item == 'grps') {
-                    if ($cnt++ > 0) $SQLfilter .= " AND ";
-                    $SQLfilter .= str_replace('%{group}',$tmp,$this->cnf['FilterGroup']);
+                if($item == 'user') {
+                    if($cnt++ > 0) $SQLfilter .= " AND ";
+                    $SQLfilter .= str_replace('%{user}', $tmp, $this->getConf('FilterLogin'));
+                } else if($item == 'name') {
+                    if($cnt++ > 0) $SQLfilter .= " AND ";
+                    $SQLfilter .= str_replace('%{name}', $tmp, $this->getConf('FilterName'));
+                } else if($item == 'mail') {
+                    if($cnt++ > 0) $SQLfilter .= " AND ";
+                    $SQLfilter .= str_replace('%{email}', $tmp, $this->getConf('FilterEmail'));
+                } else if($item == 'grps') {
+                    if($cnt++ > 0) $SQLfilter .= " AND ";
+                    $SQLfilter .= str_replace('%{group}', $tmp, $this->getConf('FilterGroup'));
                 }
             }
 
@@ -919,9 +915,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
             // any of cnf['Filter????'] is not defined, a malformed SQL string
             // would be generated.
 
-            if (strlen($SQLfilter)) {
-                $glue = strpos(strtolower($sql),"where") ? " AND " : " WHERE ";
-                $sql = $sql.$glue.$SQLfilter;
+            if(strlen($SQLfilter)) {
+                $glue = strpos(strtolower($sql), "where") ? " AND " : " WHERE ";
+                $sql  = $sql.$glue.$SQLfilter;
             }
         }
 
@@ -932,18 +928,34 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
      * Escape a string for insertion into the database
      *
      * @author Andreas Gohr 
+     *
      * @param  string  $string The string to escape
      * @param  boolean $like   Escape wildcard chars as well?
+     * @return string
      */
-    function _escape($string,$like=false){
-        if($this->dbcon){
+    protected function _escape($string, $like = false) {
+        if($this->dbcon) {
             $string = mysql_real_escape_string($string, $this->dbcon);
-        }else{
+        } else {
             $string = addslashes($string);
         }
-        if($like){
-            $string = addcslashes($string,'%_');
+        if($like) {
+            $string = addcslashes($string, '%_');
         }
         return $string;
     }
+
+    /**
+     * Wrapper around msg() but outputs only when debug is enabled
+     *
+     * @param string $message
+     * @param int    $err
+     * @param int    $line
+     * @param string $file
+     * @return void
+     */
+    protected function _debug($message, $err, $line, $file) {
+        if(!$this->getConf('debug')) return;
+        msg($message, $err, $line, $file);
+    }
 }
diff --git a/lib/plugins/authmysql/conf/default.php b/lib/plugins/authmysql/conf/default.php
new file mode 100644
index 000000000..ea2cdad72
--- /dev/null
+++ b/lib/plugins/authmysql/conf/default.php
@@ -0,0 +1,3 @@
+
Date: Fri, 9 Nov 2012 17:11:10 +0100
Subject: authpgsql fixes

* fixes merge messup (code was made up from parts of authad)
* code and PHP5 cleanup
---
 lib/plugins/authpgsql/auth.php         | 561 +++++++++++++++++++--------------
 lib/plugins/authpgsql/conf/default.php |   3 +
 2 files changed, 326 insertions(+), 238 deletions(-)
 create mode 100644 lib/plugins/authpgsql/conf/default.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authpgsql/auth.php b/lib/plugins/authpgsql/auth.php
index 46154b6ca..3f8ff3249 100644
--- a/lib/plugins/authpgsql/auth.php
+++ b/lib/plugins/authpgsql/auth.php
@@ -1,15 +1,9 @@
 
- */
 // must be run within Dokuwiki
 if(!defined('DOKU_INC')) die();
 
 /**
- * PgSQL authentication backend
+ * PostgreSQL authentication backend
  *
  * This class inherits much functionality from the MySQL class
  * and just reimplements the Postgres specific parts.
@@ -19,315 +13,406 @@ if(!defined('DOKU_INC')) die();
  * @author     Chris Smith 
  * @author     Matthias Grimm 
  * @author     Jan Schumann 
-*/
-class auth_plugin_authpgsql extends auth_plugin_authmysql
-{
-    var $cnf = null;
-    var $opts = null;
-    var $adldap = null;
-    var $users = null;
+ */
+class auth_plugin_authpgsql extends auth_plugin_authmysql {
 
     /**
      * Constructor
+     *
+     * checks if the pgsql interface is available, otherwise it will
+     * set the variable $success of the basis class to false
+     *
+     * @author Matthias Grimm 
+     * @author Andreas Gohr 
      */
-    function auth_plugin_authpgsql() {
-        parent::__construct();
-
-        global $conf;
-        $this->cnf = $conf['auth']['ad'];
+    public function __construct() {
+        // we don't want the stuff the MySQL constructor does, but the grandparent might do something
+        DokuWiki_Auth_Plugin::__construct();
 
-
-        // additional information fields
-        if (isset($this->cnf['additional'])) {
-            $this->cnf['additional'] = str_replace(' ', '', $this->cnf['additional']);
-            $this->cnf['additional'] = explode(',', $this->cnf['additional']);
-        } else $this->cnf['additional'] = array();
-
-        // ldap extension is needed
-        if (!function_exists('ldap_connect')) {
-            if ($this->cnf['debug'])
-                msg("AD Auth: PHP LDAP extension not found.",-1);
+        if(!function_exists('pg_connect')) {
+            $this->_debug("PgSQL err: PHP Postgres extension not found.", -1, __LINE__, __FILE__);
             $this->success = false;
             return;
         }
 
-        // Prepare SSO
-        if($_SERVER['REMOTE_USER'] && $this->cnf['sso']){
-             // remove possible NTLM domain
-             list($dom,$usr) = explode('\\',$_SERVER['REMOTE_USER'],2);
-             if(!$usr) $usr = $dom;
-
-             // remove possible Kerberos domain
-             list($usr,$dom) = explode('@',$usr);
+        $this->loadConfig();
 
-             $dom = strtolower($dom);
-             $_SERVER['REMOTE_USER'] = $usr;
-
-             // we need to simulate a login
-             if(empty($_COOKIE[DOKU_COOKIE])){
-                 $_REQUEST['u'] = $_SERVER['REMOTE_USER'];
-                 $_REQUEST['p'] = 'sso_only';
-             }
+        // set capabilities based upon config strings set
+        if(empty($this->conf['user']) ||
+            empty($this->conf['password']) || empty($this->conf['database'])
+        ) {
+            $this->_debug("PgSQL err: insufficient configuration.", -1, __LINE__, __FILE__);
+            $this->success = false;
+            return;
         }
 
-        // prepare adLDAP standard configuration
-        $this->opts = $this->cnf;
+        $this->cando['addUser']   = $this->_chkcnf(
+            array(
+                 'getUserInfo',
+                 'getGroups',
+                 'addUser',
+                 'getUserID',
+                 'getGroupID',
+                 'addGroup',
+                 'addUserGroup'
+            )
+        );
+        $this->cando['delUser']   = $this->_chkcnf(
+            array(
+                 'getUserID',
+                 'delUser',
+                 'delUserRefs'
+            )
+        );
+        $this->cando['modLogin']  = $this->_chkcnf(
+            array(
+                 'getUserID',
+                 'updateUser',
+                 'UpdateTarget'
+            )
+        );
+        $this->cando['modPass']   = $this->cando['modLogin'];
+        $this->cando['modName']   = $this->cando['modLogin'];
+        $this->cando['modMail']   = $this->cando['modLogin'];
+        $this->cando['modGroups'] = $this->_chkcnf(
+            array(
+                 'getUserID',
+                 'getGroups',
+                 'getGroupID',
+                 'addGroup',
+                 'addUserGroup',
+                 'delGroup',
+                 'getGroupID',
+                 'delUserGroup'
+            )
+        );
+        /* getGroups is not yet supported
+           $this->cando['getGroups']    = $this->_chkcnf(array('getGroups',
+           'getGroupID')); */
+        $this->cando['getUsers']     = $this->_chkcnf(
+            array(
+                 'getUsers',
+                 'getUserInfo',
+                 'getGroups'
+            )
+        );
+        $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'));
+    }
 
-        // add possible domain specific configuration
-        if($dom && is_array($this->cnf[$dom])) foreach($this->cnf[$dom] as $key => $val){
-            $this->opts[$key] = $val;
+    /**
+     * Check if the given config strings are set
+     *
+     * @author  Matthias Grimm 
+     *
+     * @param   array $keys
+     * @param   bool  $wop
+     * @return  bool
+     */
+    protected function _chkcnf($keys, $wop = false) {
+        foreach($keys as $key) {
+            if(empty($this->conf[$key])) return false;
         }
+        return true;
+    }
 
-        // handle multiple AD servers
-        $this->opts['domain_controllers'] = explode(',',$this->opts['domain_controllers']);
-        $this->opts['domain_controllers'] = array_map('trim',$this->opts['domain_controllers']);
-        $this->opts['domain_controllers'] = array_filter($this->opts['domain_controllers']);
+    /**
+     * Counts users which meet certain $filter criteria.
+     *
+     * @author  Matthias Grimm 
+     *
+     * @param  array  $filter  filter criteria in item/pattern pairs
+     * @return int count of found users.
+     */
+    public function getUserCount($filter = array()) {
+        $rc = 0;
 
-        // we can change the password if SSL is set
-        if($this->opts['use_ssl'] || $this->opts['use_tls']){
-            $this->cando['modPass'] = true;
+        if($this->_openDB()) {
+            $sql = $this->_createSQLFilter($this->conf['getUsers'], $filter);
+
+            // no equivalent of SQL_CALC_FOUND_ROWS in pgsql?
+            if(($result = $this->_queryDB($sql))) {
+                $rc = count($result);
+            }
+            $this->_closeDB();
         }
-        $this->cando['modName'] = true;
-        $this->cando['modMail'] = true;
+        return $rc;
     }
 
     /**
-     * Check user+password [required auth function]
+     * Bulk retrieval of user data
      *
-     * Checks if the given user exists and the given
-     * plaintext password is correct by trying to bind
-     * to the LDAP server
+     * @author  Matthias Grimm 
      *
-     * @author  James Van Lommel 
-     * @return  bool
+     * @param   int   $first     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
+     * @return  array userinfo (refer getUserData for internal userinfo details)
      */
-    function checkPass($user, $pass){
-        if($_SERVER['REMOTE_USER'] &&
-           $_SERVER['REMOTE_USER'] == $user &&
-           $this->cnf['sso']) return true;
+    public function retrieveUsers($first = 0, $limit = 10, $filter = array()) {
+        $out = array();
+
+        if($this->_openDB()) {
+            $this->_lockTables("READ");
+            $sql = $this->_createSQLFilter($this->conf['getUsers'], $filter);
+            $sql .= " ".$this->conf['SortOrder']." LIMIT $limit OFFSET $first";
+            $result = $this->_queryDB($sql);
+
+            foreach($result as $user)
+                if(($info = $this->_getUserInfo($user['user'])))
+                    $out[$user['user']] = $info;
 
-        if(!$this->_init()) return false;
-        return $this->adldap->authenticate($user, $pass);
+            $this->_unlockTables();
+            $this->_closeDB();
+        }
+        return $out;
     }
 
+    // @inherit function joinGroup($user, $group)
+    // @inherit function leaveGroup($user, $group) {
+
     /**
-     * Return user info [required auth function]
+     * Adds a user to a group.
      *
-     * Returns info about the given user needs to contain
-     * at least these fields:
+     * If $force is set to true non existing groups would be created.
      *
-     * name string  full name of the user
-     * mail string  email address of the user
-     * grps array   list of groups the user is in
+     * The database connection must already be established. Otherwise
+     * this function does nothing and returns 'false'.
      *
-     * This LDAP specific function returns the following
-     * addional fields:
+     * @author Matthias Grimm 
+     * @author Andreas Gohr   
      *
-     * dn   string  distinguished name (DN)
-     * uid  string  Posix User ID
-     *
-     * @author  James Van Lommel 
+     * @param   string $user    user to add to a group
+     * @param   string $group   name of the group
+     * @param   bool   $force   create missing groups
+     * @return  bool   true on success, false on error
      */
-   function getUserData($user){
-        global $conf;
-        if(!$this->_init()) return false;
-
-        $fields = array('mail','displayname','samaccountname');
-
-        // add additional fields to read
-        $fields = array_merge($fields, $this->cnf['additional']);
-        $fields = array_unique($fields);
-
-        //get info for given user
-        $result = $this->adldap->user_info($user, $fields);
-        //general user info
-        $info['name'] = $result[0]['displayname'][0];
-        $info['mail'] = $result[0]['mail'][0];
-        $info['uid']  = $result[0]['samaccountname'][0];
-        $info['dn']   = $result[0]['dn'];
-
-        // additional information
-        foreach ($this->cnf['additional'] as $field) {
-            if (isset($result[0][strtolower($field)])) {
-                $info[$field] = $result[0][strtolower($field)][0];
+    protected function _addUserToGroup($user, $group, $force = false) {
+        $newgroup = 0;
+
+        if(($this->dbcon) && ($user)) {
+            $gid = $this->_getGroupID($group);
+            if(!$gid) {
+                if($force) { // create missing groups
+                    $sql = str_replace('%{group}', addslashes($group), $this->conf['addGroup']);
+                    $this->_modifyDB($sql);
+                    //group should now exists try again to fetch it
+                    $gid      = $this->_getGroupID($group);
+                    $newgroup = 1; // group newly created
+                }
             }
-        }
-
-        // handle ActiveDirectory memberOf
-        $info['grps'] = $this->adldap->user_groups($user,(bool) $this->opts['recursive_groups']);
+            if(!$gid) return false; // group didn't exist and can't be created
 
-        if (is_array($info['grps'])) {
-            foreach ($info['grps'] as $ndx => $group) {
-                $info['grps'][$ndx] = $this->cleanGroup($group);
+            $sql = $this->conf['addUserGroup'];
+            if(strpos($sql, '%{uid}') !== false) {
+                $uid = $this->_getUserID($user);
+                $sql = str_replace('%{uid}', addslashes($uid), $sql);
+            }
+            $sql = str_replace('%{user}', addslashes($user), $sql);
+            $sql = str_replace('%{gid}', addslashes($gid), $sql);
+            $sql = str_replace('%{group}', addslashes($group), $sql);
+            if($this->_modifyDB($sql) !== false) return true;
+
+            if($newgroup) { // remove previously created group on error
+                $sql = str_replace('%{gid}', addslashes($gid), $this->conf['delGroup']);
+                $sql = str_replace('%{group}', addslashes($group), $sql);
+                $this->_modifyDB($sql);
             }
         }
-
-        // always add the default group to the list of groups
-        if(!is_array($info['grps']) || !in_array($conf['defaultgroup'],$info['grps'])){
-            $info['grps'][] = $conf['defaultgroup'];
-        }
-
-        return $info;
+        return false;
     }
 
+    // @inherit function _delUserFromGroup($user $group)
+    // @inherit function _getGroups($user)
+    // @inherit function _getUserID($user)
+
     /**
-     * Make AD group names usable by DokuWiki.
+     * Adds a new User to the database.
      *
-     * Removes backslashes ('\'), pound signs ('#'), and converts spaces to underscores.
+     * The database connection must already be established
+     * for this function to work. Otherwise it will return
+     * 'false'.
      *
-     * @author  James Van Lommel (jamesvl@gmail.com)
+     * @param  string $user  login of the user
+     * @param  string $pwd   encrypted password
+     * @param  string $name  full name of the user
+     * @param  string $mail  email address
+     * @param  array  $grps  array of groups the user should become member of
+     * @return bool
+     *
+     * @author  Andreas Gohr 
+     * @author  Chris Smith 
+     * @author  Matthias Grimm 
      */
-    function cleanGroup($name) {
-        $sName = str_replace('\\', '', $name);
-        $sName = str_replace('#', '', $sName);
-        $sName = preg_replace('[\s]', '_', $sName);
-        return $sName;
+    protected function _addUser($user, $pwd, $name, $mail, $grps) {
+        if($this->dbcon && is_array($grps)) {
+            $sql = str_replace('%{user}', addslashes($user), $this->conf['addUser']);
+            $sql = str_replace('%{pass}', addslashes($pwd), $sql);
+            $sql = str_replace('%{name}', addslashes($name), $sql);
+            $sql = str_replace('%{email}', addslashes($mail), $sql);
+            if($this->_modifyDB($sql)) {
+                $uid = $this->_getUserID($user);
+            } else {
+                return false;
+            }
+
+            $group = '';
+            $gid = false;
+
+            if($uid) {
+                foreach($grps as $group) {
+                    $gid = $this->_addUserToGroup($user, $group, 1);
+                    if($gid === false) break;
+                }
+
+                if($gid !== false){
+                    return true;
+                } else {
+                    /* remove the new user and all group relations if a group can't
+                     * be assigned. Newly created groups will remain in the database
+                     * and won't be removed. This might create orphaned groups but
+                     * is not a big issue so we ignore this problem here.
+                     */
+                    $this->_delUser($user);
+                    $this->_debug("PgSQL err: Adding user '$user' to group '$group' failed.", -1, __LINE__, __FILE__);
+                }
+            }
+        }
+        return false;
     }
 
     /**
-     * Sanitize user names
+     * Opens a connection to a database and saves the handle for further
+     * usage in the object. The successful call to this functions is
+     * essential for most functions in this object.
+     *
+     * @author Matthias Grimm 
+     *
+     * @return bool
      */
-    function cleanUser($name) {
-        return $this->cleanGroup($name);
+    protected function _openDB() {
+        if(!$this->dbcon) {
+            $dsn = $this->conf['server'] ? 'host='.$this->conf['server'] : '';
+            $dsn .= ' port='.$this->conf['port'];
+            $dsn .= ' dbname='.$this->conf['database'];
+            $dsn .= ' user='.$this->conf['user'];
+            $dsn .= ' password='.$this->conf['password'];
+
+            $con = @pg_connect($dsn);
+            if($con) {
+                $this->dbcon = $con;
+                return true; // connection and database successfully opened
+            } else {
+                $this->_debug(
+                        "PgSQL err: Connection to {$this->conf['user']}@{$this->conf['server']} not possible.",
+                        -1, __LINE__, __FILE__
+                    );
+            }
+            return false; // connection failed
+        }
+        return true; // connection already open
     }
 
     /**
-     * Most values in LDAP are case-insensitive
+     * Closes a database connection.
+     *
+     * @author Matthias Grimm 
      */
-    function isCaseSensitive(){
-        return false;
+    protected function _closeDB() {
+        if($this->dbcon) {
+            pg_close($this->dbcon);
+            $this->dbcon = 0;
+        }
     }
 
     /**
-     * Bulk retrieval of user data
+     * Sends a SQL query to the database and transforms the result into
+     * an associative array.
      *
-     * @author  Dominik Eckelmann 
-     * @param   start     index of first user to be returned
-     * @param   limit     max number of users to be returned
-     * @param   filter    array of field/pattern pairs, null for no filter
-     * @return  array of userinfo (refer getUserData for internal userinfo details)
+     * This function is only able to handle queries that returns a
+     * table such as SELECT.
+     *
+     * @author Matthias Grimm 
+     *
+     * @param  string $query  SQL string that contains the query
+     * @return array the result table
      */
-    function retrieveUsers($start=0,$limit=-1,$filter=array()) {
-        if(!$this->_init()) return false;
-
-        if ($this->users === null) {
-            //get info for given user
-            $result = $this->adldap->all_users();
-            if (!$result) return array();
-            $this->users = array_fill_keys($result, false);
-        }
-
-        $i = 0;
-        $count = 0;
-        $this->_constructPattern($filter);
-        $result = array();
-
-        foreach ($this->users as $user => &$info) {
-            if ($i++ < $start) {
-                continue;
-            }
-            if ($info === false) {
-                $info = $this->getUserData($user);
-            }
-            if ($this->_filter($user, $info)) {
-                $result[$user] = $info;
-                if (($limit >= 0) && (++$count >= $limit)) break;
+    protected function _queryDB($query) {
+        $resultarray = array();
+        if($this->dbcon) {
+            $result = @pg_query($this->dbcon, $query);
+            if($result) {
+                while(($t = pg_fetch_assoc($result)) !== false)
+                    $resultarray[] = $t;
+                pg_free_result($result);
+                return $resultarray;
+            } else{
+                $this->_debug('PgSQL err: '.pg_last_error($this->dbcon), -1, __LINE__, __FILE__);
             }
         }
-        return $result;
+        return false;
     }
 
     /**
-     * Modify user data
+     * Executes an update or insert query. This differs from the
+     * MySQL one because it does NOT return the last insertID
      *
-     * @param   $user      nick of the user to be changed
-     * @param   $changes   array of field/value pairs to be changed
-     * @return  bool
-    */
-    function modifyUser($user, $changes) {
-        $return = true;
-
-        // password changing
-        if(isset($changes['pass'])){
-            try {
-                $return = $this->adldap->user_password($user,$changes['pass']);
-            } catch (adLDAPException $e) {
-                if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
-                $return = false;
-            }
-            if(!$return) msg('AD Auth: failed to change the password. Maybe the password policy was not met?',-1);
-        }
-
-        // changing user data
-        $adchanges = array();
-        if(isset($changes['name'])){
-            // get first and last name
-            $parts = explode(' ',$changes['name']);
-            $adchanges['surname']   = array_pop($parts);
-            $adchanges['firstname'] = join(' ',$parts);
-            $adchanges['display_name'] = $changes['name'];
-        }
-        if(isset($changes['mail'])){
-            $adchanges['email'] = $changes['mail'];
-        }
-        if(count($adchanges)){
-            try {
-                $return = $return & $this->adldap->user_modify($user,$adchanges);
-            } catch (adLDAPException $e) {
-                if ($this->cnf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
-                $return = false;
+     * @author Andreas Gohr 
+     */
+    protected function _modifyDB($query) {
+        if($this->dbcon) {
+            $result = @pg_query($this->dbcon, $query);
+            if($result) {
+                pg_free_result($result);
+                return true;
             }
+            $this->_debug('PgSQL err: '.pg_last_error($this->dbcon), -1, __LINE__, __FILE__);
         }
-
-        return $return;
+        return false;
     }
 
     /**
-     * Initialize the AdLDAP library and connect to the server
+     * Start a transaction
+     *
+     * @author Matthias Grimm 
+     *
+     * @param string $mode  could be 'READ' or 'WRITE'
+     * @return bool
      */
-    function _init(){
-        if(!is_null($this->adldap)) return true;
-
-        // connect
-        try {
-            $this->adldap = new adLDAP($this->opts);
-            if (isset($this->opts['ad_username']) && isset($this->opts['ad_password'])) {
-                $this->canDo['getUsers'] = true;
-            }
+    protected function _lockTables($mode) {
+        if($this->dbcon) {
+            $this->_modifyDB('BEGIN');
             return true;
-        } catch (adLDAPException $e) {
-            if ($this->cnf['debug']) {
-                msg('AD Auth: '.$e->getMessage(), -1);
-            }
-            $this->success = false;
-            $this->adldap  = null;
         }
         return false;
     }
 
     /**
-     * return 1 if $user + $info match $filter criteria, 0 otherwise
+     * Commit a transaction
      *
-     * @author   Chris Smith 
+     * @author Matthias Grimm 
      */
-    function _filter($user, $info) {
-        foreach ($this->_pattern as $item => $pattern) {
-            if ($item == 'user') {
-                if (!preg_match($pattern, $user)) return 0;
-            } else if ($item == 'grps') {
-                if (!count(preg_grep($pattern, $info['grps']))) return 0;
-            } else {
-                if (!preg_match($pattern, $info[$item])) return 0;
-            }
+    protected function _unlockTables() {
+        if($this->dbcon) {
+            $this->_modifyDB('COMMIT');
+            return true;
         }
-        return 1;
+        return false;
     }
 
-    function _constructPattern($filter) {
-        $this->_pattern = array();
-        foreach ($filter as $item => $pattern) {
-//          $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i';          // don't allow regex characters
-            $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i';    // allow regex characters
+    /**
+     * Escape a string for insertion into the database
+     *
+     * @author Andreas Gohr 
+     *
+     * @param  string  $string The string to escape
+     * @param  bool    $like   Escape wildcard chars as well?
+     * @return string
+     */
+    protected function _escape($string, $like = false) {
+        $string = pg_escape_string($string);
+        if($like) {
+            $string = addcslashes($string, '%_');
         }
+        return $string;
     }
 }
\ No newline at end of file
diff --git a/lib/plugins/authpgsql/conf/default.php b/lib/plugins/authpgsql/conf/default.php
new file mode 100644
index 000000000..401da80b7
--- /dev/null
+++ b/lib/plugins/authpgsql/conf/default.php
@@ -0,0 +1,3 @@
+
Date: Fri, 9 Nov 2012 17:29:24 +0100
Subject: fixed authplain

* code/PHP5 cleanup
---
 lib/plugins/authplain/auth.php | 215 +++++++++++++++++++++++------------------
 1 file changed, 122 insertions(+), 93 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php
index 2e72bbd79..3416ede89 100644
--- a/lib/plugins/authplain/auth.php
+++ b/lib/plugins/authplain/auth.php
@@ -11,8 +11,11 @@ if(!defined('DOKU_INC')) die();
  * @author     Jan Schumann 
  */
 class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
-    var $users = null;
-    var $_pattern = array();
+    /** @var array user cache */
+    protected $users = null;
+
+    /** @var array filter pattern */
+    protected $_pattern = array();
 
     /**
      * Constructor
@@ -22,21 +25,21 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      *
      * @author  Christopher Smith 
      */
-    function __construct() {
+    public function __construct() {
         parent::__construct();
         global $config_cascade;
 
-        if (!@is_readable($config_cascade['plainauth.users']['default'])){
+        if(!@is_readable($config_cascade['plainauth.users']['default'])) {
             $this->success = false;
-        }else{
-            if(@is_writable($config_cascade['plainauth.users']['default'])){
-                $this->cando['addUser']      = true;
-                $this->cando['delUser']      = true;
-                $this->cando['modLogin']     = true;
-                $this->cando['modPass']      = true;
-                $this->cando['modName']      = true;
-                $this->cando['modMail']      = true;
-                $this->cando['modGroups']    = true;
+        } else {
+            if(@is_writable($config_cascade['plainauth.users']['default'])) {
+                $this->cando['addUser']   = true;
+                $this->cando['delUser']   = true;
+                $this->cando['modLogin']  = true;
+                $this->cando['modPass']   = true;
+                $this->cando['modName']   = true;
+                $this->cando['modMail']   = true;
+                $this->cando['modGroups'] = true;
             }
             $this->cando['getUsers']     = true;
             $this->cando['getUserCount'] = true;
@@ -44,20 +47,21 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * Check user+password [required auth function]
+     * Check user+password
      *
      * Checks if the given user exists and the given
      * plaintext password is correct
      *
      * @author  Andreas Gohr 
+     * @param string $user
+     * @param string $pass
      * @return  bool
      */
-    function checkPass($user,$pass){
-
+    public function checkPass($user, $pass) {
         $userinfo = $this->getUserData($user);
-        if ($userinfo === false) return false;
+        if($userinfo === false) return false;
 
-        return auth_verifyPassword($pass,$this->users[$user]['pass']);
+        return auth_verifyPassword($pass, $this->users[$user]['pass']);
     }
 
     /**
@@ -71,9 +75,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      * grps array   list of groups the user is in
      *
      * @author  Andreas Gohr 
+     * @param string $user
+     * @return array|bool
      */
-    function getUserData($user){
-
+    public function getUserData($user) {
         if($this->users === null) $this->_loadUserData();
         return isset($this->users[$user]) ? $this->users[$user] : false;
     }
@@ -89,30 +94,39 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      *
      * @author  Andreas Gohr 
      * @author  Chris Smith 
+     *
+     * @param string $user
+     * @param string $pwd
+     * @param string $name
+     * @param string $mail
+     * @param array  $grps
+     * @return bool|null|string
      */
-    function createUser($user,$pwd,$name,$mail,$grps=null){
+    public function createUser($user, $pwd, $name, $mail, $grps = null) {
         global $conf;
         global $config_cascade;
 
         // user mustn't already exist
-        if ($this->getUserData($user) !== false) return false;
+        if($this->getUserData($user) !== false) return false;
 
         $pass = auth_cryptPassword($pwd);
 
         // set default group if no groups specified
-        if (!is_array($grps)) $grps = array($conf['defaultgroup']);
+        if(!is_array($grps)) $grps = array($conf['defaultgroup']);
 
         // prepare user line
-        $groups = join(',',$grps);
-        $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n";
+        $groups   = join(',', $grps);
+        $userline = join(':', array($user, $pass, $name, $mail, $groups))."\n";
 
-        if (io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) {
-            $this->users[$user] = compact('pass','name','mail','grps');
+        if(io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) {
+            $this->users[$user] = compact('pass', 'name', 'mail', 'grps');
             return $pwd;
         }
 
-        msg('The '.$config_cascade['plainauth.users']['default'].
-                ' file is not writable. Please inform the Wiki-Admin',-1);
+        msg(
+            'The '.$config_cascade['plainauth.users']['default'].
+                ' file is not writable. Please inform the Wiki-Admin', -1
+        );
         return null;
     }
 
@@ -120,43 +134,41 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      * Modify user data
      *
      * @author  Chris Smith 
-     * @param   $user      nick of the user to be changed
-     * @param   $changes   array of field/value pairs to be changed (password will be clear text)
+     * @param   string $user      nick of the user to be changed
+     * @param   array  $changes   array of field/value pairs to be changed (password will be clear text)
      * @return  bool
      */
-    function modifyUser($user, $changes) {
-        global $conf;
+    public function modifyUser($user, $changes) {
         global $ACT;
-        global $INFO;
         global $config_cascade;
 
         // sanity checks, user must already exist and there must be something to change
-        if (($userinfo = $this->getUserData($user)) === false) return false;
-        if (!is_array($changes) || !count($changes)) return true;
+        if(($userinfo = $this->getUserData($user)) === false) return false;
+        if(!is_array($changes) || !count($changes)) return true;
 
         // update userinfo with new data, remembering to encrypt any password
         $newuser = $user;
-        foreach ($changes as $field => $value) {
-            if ($field == 'user') {
+        foreach($changes as $field => $value) {
+            if($field == 'user') {
                 $newuser = $value;
                 continue;
             }
-            if ($field == 'pass') $value = auth_cryptPassword($value);
+            if($field == 'pass') $value = auth_cryptPassword($value);
             $userinfo[$field] = $value;
         }
 
-        $groups = join(',',$userinfo['grps']);
-        $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
+        $groups   = join(',', $userinfo['grps']);
+        $userline = join(':', array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
 
-        if (!$this->deleteUsers(array($user))) {
-            msg('Unable to modify user data. Please inform the Wiki-Admin',-1);
+        if(!$this->deleteUsers(array($user))) {
+            msg('Unable to modify user data. Please inform the Wiki-Admin', -1);
             return false;
         }
 
-        if (!io_saveFile($config_cascade['plainauth.users']['default'],$userline,true)) {
-            msg('There was an error modifying your user data. You should register again.',-1);
+        if(!io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) {
+            msg('There was an error modifying your user data. You should register again.', -1);
             // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
-            $ACT == 'register';
+            $ACT = 'register';
             return false;
         }
 
@@ -171,24 +183,24 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      * @param   array  $users   array of users to be deleted
      * @return  int             the number of users deleted
      */
-    function deleteUsers($users) {
+    public function deleteUsers($users) {
         global $config_cascade;
 
-        if (!is_array($users) || empty($users)) return 0;
+        if(!is_array($users) || empty($users)) return 0;
 
-        if ($this->users === null) $this->_loadUserData();
+        if($this->users === null) $this->_loadUserData();
 
         $deleted = array();
-        foreach ($users as $user) {
-            if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/');
+        foreach($users as $user) {
+            if(isset($this->users[$user])) $deleted[] = preg_quote($user, '/');
         }
 
-        if (empty($deleted)) return 0;
+        if(empty($deleted)) return 0;
 
-        $pattern = '/^('.join('|',$deleted).'):/';
+        $pattern = '/^('.join('|', $deleted).'):/';
 
-        if (io_deleteFromFile($config_cascade['plainauth.users']['default'],$pattern,true)) {
-            foreach ($deleted as $user) unset($this->users[$user]);
+        if(io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true)) {
+            foreach($deleted as $user) unset($this->users[$user]);
             return count($deleted);
         }
 
@@ -203,17 +215,20 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      * Return a count of the number of user which meet $filter criteria
      *
      * @author  Chris Smith 
+     *
+     * @param array $filter
+     * @return int
      */
-    function getUserCount($filter=array()) {
+    public function getUserCount($filter = array()) {
 
         if($this->users === null) $this->_loadUserData();
 
-        if (!count($filter)) return count($this->users);
+        if(!count($filter)) return count($this->users);
 
         $count = 0;
         $this->_constructPattern($filter);
 
-        foreach ($this->users as $user => $info) {
+        foreach($this->users as $user => $info) {
             $count += $this->_filter($user, $info);
         }
 
@@ -224,28 +239,29 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      * Bulk retrieval of user data
      *
      * @author  Chris Smith 
-     * @param   start     index of first user to be returned
-     * @param   limit     max number of users to be returned
-     * @param   filter    array of field/pattern pairs
-     * @return  array of userinfo (refer getUserData for internal userinfo details)
+     *
+     * @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
+     * @return  array userinfo (refer getUserData for internal userinfo details)
      */
-    function retrieveUsers($start=0,$limit=0,$filter=array()) {
+    public function retrieveUsers($start = 0, $limit = 0, $filter = array()) {
 
-        if ($this->users === null) $this->_loadUserData();
+        if($this->users === null) $this->_loadUserData();
 
         ksort($this->users);
 
-        $i = 0;
+        $i     = 0;
         $count = 0;
-        $out = array();
+        $out   = array();
         $this->_constructPattern($filter);
 
-        foreach ($this->users as $user => $info) {
-            if ($this->_filter($user, $info)) {
-                if ($i >= $start) {
+        foreach($this->users as $user => $info) {
+            if($this->_filter($user, $info)) {
+                if($i >= $start) {
                     $out[$user] = $info;
                     $count++;
-                    if (($limit > 0) && ($count >= $limit)) break;
+                    if(($limit > 0) && ($count >= $limit)) break;
                 }
                 $i++;
             }
@@ -256,18 +272,24 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
 
     /**
      * Only valid pageid's (no namespaces) for usernames
+     *
+     * @param string $user
+     * @return string
      */
-    function cleanUser($user){
+    public function cleanUser($user) {
         global $conf;
-        return cleanID(str_replace(':',$conf['sepchar'],$user));
+        return cleanID(str_replace(':', $conf['sepchar'], $user));
     }
 
     /**
      * Only valid pageid's (no namespaces) for groupnames
+     *
+     * @param string $group
+     * @return string
      */
-    function cleanGroup($group){
+    public function cleanGroup($group) {
         global $conf;
-        return cleanID(str_replace(':',$conf['sepchar'],$group));
+        return cleanID(str_replace(':', $conf['sepchar'], $group));
     }
 
     /**
@@ -277,7 +299,7 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
      *
      * @author  Andreas Gohr 
      */
-    function _loadUserData(){
+    protected function _loadUserData() {
         global $config_cascade;
 
         $this->users = array();
@@ -285,13 +307,13 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
         if(!@file_exists($config_cascade['plainauth.users']['default'])) return;
 
         $lines = file($config_cascade['plainauth.users']['default']);
-        foreach($lines as $line){
-            $line = preg_replace('/#.*$/','',$line); //ignore comments
+        foreach($lines as $line) {
+            $line = preg_replace('/#.*$/', '', $line); //ignore comments
             $line = trim($line);
             if(empty($line)) continue;
 
-            $row    = explode(":",$line,5);
-            $groups = array_values(array_filter(explode(",",$row[4])));
+            $row    = explode(":", $line, 5);
+            $groups = array_values(array_filter(explode(",", $row[4])));
 
             $this->users[$row[0]]['pass'] = $row[1];
             $this->users[$row[0]]['name'] = urldecode($row[2]);
@@ -301,29 +323,36 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
     }
 
     /**
-     * return 1 if $user + $info match $filter criteria, 0 otherwise
+     * return true if $user + $info match $filter criteria, false otherwise
      *
      * @author   Chris Smith 
+     *
+     * @param string $user User login
+     * @param array  $info User's userinfo array
+     * @return bool
      */
-    function _filter($user, $info) {
-        // FIXME
-        foreach ($this->_pattern as $item => $pattern) {
-            if ($item == 'user') {
-                if (!preg_match($pattern, $user)) return 0;
-            } else if ($item == 'grps') {
-                if (!count(preg_grep($pattern, $info['grps']))) return 0;
+    protected function _filter($user, $info) {
+        foreach($this->_pattern as $item => $pattern) {
+            if($item == 'user') {
+                if(!preg_match($pattern, $user)) return false;
+            } else if($item == 'grps') {
+                if(!count(preg_grep($pattern, $info['grps']))) return false;
             } else {
-                if (!preg_match($pattern, $info[$item])) return 0;
+                if(!preg_match($pattern, $info[$item])) return false;
             }
         }
-        return 1;
+        return true;
     }
 
-    function _constructPattern($filter) {
+    /**
+     * construct a filter pattern
+     *
+     * @param array $filter
+     */
+    protected function _constructPattern($filter) {
         $this->_pattern = array();
-        foreach ($filter as $item => $pattern) {
-            //        $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i';          // don't allow regex characters
-            $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i';    // allow regex characters
+        foreach($filter as $item => $pattern) {
+            $this->_pattern[$item] = '/'.str_replace('/', '\/', $pattern).'/i'; // allow regex characters
         }
     }
 }
\ No newline at end of file
-- 
cgit v1.2.3


From 23e8f02b8aa3a74fed70f1a496bdb5423908133a Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 10 Nov 2012 16:11:30 +0100
Subject: added 'text' to config plugin for multi line text configs

---
 lib/plugins/config/settings/config.class.php    | 33 ++++++++++++++++++++++---
 lib/plugins/config/settings/config.metadata.php |  1 +
 2 files changed, 31 insertions(+), 3 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 8c48018d7..9f98231e3 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -35,6 +35,7 @@ if (!class_exists('configuration')) {
           msg('No configuration metadata found at - '.htmlspecialchars($datafile),-1);
           return;
         }
+        $meta = array();
         include($datafile);
 
         if (isset($config['varname'])) $this->_name = $config['varname'];
@@ -68,6 +69,7 @@ if (!class_exists('configuration')) {
           $keys = array_merge(array_keys($this->_metadata),array_keys($default), array_keys($local), array_keys($protected));
           $keys = array_unique($keys);
 
+          $param = null;
           foreach ($keys as $key) {
             if (isset($this->_metadata[$key])) {
               $class = $this->_metadata[$key][0];
@@ -425,11 +427,9 @@ if (!class_exists('setting')) {
       $out = '';
 
       if ($fmt=='php') {
-        // translation string needs to be improved FIXME
-        $tr = array("\n"=>'\n', "\r"=>'\r', "\t"=>'\t', "\\" => '\\\\', "'" => '\\\'');
         $tr = array("\\" => '\\\\', "'" => '\\\'');
 
-        $out =  '$'.$var."['".$this->_out_key()."'] = '".strtr($this->_local, $tr)."';\n";
+        $out =  '$'.$var."['".$this->_out_key()."'] = '".strtr( cleanText($this->_local), $tr)."';\n";
       }
 
       return $out;
@@ -494,6 +494,33 @@ if (!class_exists('setting_string')) {
   }
 }
 
+if (!class_exists('setting_text')) {
+    class setting_text extends setting {
+        function html(&$plugin, $echo=false) {
+            $value = '';
+            $disable = '';
+
+            if ($this->is_protected()) {
+                $value = $this->_protected;
+                $disable = 'disabled="disabled"';
+            } else {
+                if ($echo && $this->_error) {
+                    $value = $this->_input;
+                } else {
+                    $value = is_null($this->_local) ? $this->_default : $this->_local;
+                }
+            }
+
+            $key = htmlspecialchars($this->_key);
+            $value = formText($value);
+
+            $label = '';
+            $input = '';
+            return array($label,$input);
+        }
+    }
+}
+
 if (!class_exists('setting_password')) {
   class setting_password extends setting_string {
 
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 3607f56c6..33ebb7fd8 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -15,6 +15,7 @@
  *   -------------------------------------------
  *   ''             - default class ('setting'), textarea, minimal input validation, setting output in quotes
  *   'string'       - single line text input, minimal input validation, setting output in quotes
+ *   'text'         - multi line text input, minimal input validation, setting output in quotes
  *   'numeric'      - text input, accepts numbers and arithmetic operators, setting output without quotes
  *                    if given the '_min' and '_max' parameters are used for validation
  *   'numericopt'   - like above, but accepts empty values
-- 
cgit v1.2.3


From 7e29378446eeb33892837048b31b4180e26ccd1f Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 10 Nov 2012 16:22:34 +0100
Subject: partial revert of 23e8f02b8aa3a74fed70f1a496bdb5423908133a

okay. I can't read. we already had a multiline config. It's the default.
So I reverted my change, except for making use of formText/cleanText for
proper line ending handling and I added made focused textareas a bit
larger.
---
 lib/plugins/config/settings/config.class.php    | 29 +------------------------
 lib/plugins/config/settings/config.metadata.php |  1 -
 lib/plugins/config/style.css                    |  4 ++++
 3 files changed, 5 insertions(+), 29 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 9f98231e3..e6d085bcb 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -409,7 +409,7 @@ if (!class_exists('setting')) {
         }
 
         $key = htmlspecialchars($this->_key);
-        $value = htmlspecialchars($value);
+        $value = formText($value);
 
         $label = '';
         $input = '';
@@ -494,33 +494,6 @@ if (!class_exists('setting_string')) {
   }
 }
 
-if (!class_exists('setting_text')) {
-    class setting_text extends setting {
-        function html(&$plugin, $echo=false) {
-            $value = '';
-            $disable = '';
-
-            if ($this->is_protected()) {
-                $value = $this->_protected;
-                $disable = 'disabled="disabled"';
-            } else {
-                if ($echo && $this->_error) {
-                    $value = $this->_input;
-                } else {
-                    $value = is_null($this->_local) ? $this->_default : $this->_local;
-                }
-            }
-
-            $key = htmlspecialchars($this->_key);
-            $value = formText($value);
-
-            $label = '';
-            $input = '';
-            return array($label,$input);
-        }
-    }
-}
-
 if (!class_exists('setting_password')) {
   class setting_password extends setting_string {
 
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 33ebb7fd8..3607f56c6 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -15,7 +15,6 @@
  *   -------------------------------------------
  *   ''             - default class ('setting'), textarea, minimal input validation, setting output in quotes
  *   'string'       - single line text input, minimal input validation, setting output in quotes
- *   'text'         - multi line text input, minimal input validation, setting output in quotes
  *   'numeric'      - text input, accepts numbers and arithmetic operators, setting output without quotes
  *                    if given the '_min' and '_max' parameters are used for validation
  *   'numericopt'   - like above, but accepts empty values
diff --git a/lib/plugins/config/style.css b/lib/plugins/config/style.css
index 1be94feb9..397328937 100644
--- a/lib/plugins/config/style.css
+++ b/lib/plugins/config/style.css
@@ -104,6 +104,10 @@
     height: 4em;
 }
 
+#config__manager td textarea.edit:focus {
+    height: 10em;
+}
+
 #config__manager tr .input,
 #config__manager tr input,
 #config__manager tr textarea,
-- 
cgit v1.2.3


From 3295f40a380553bb3f7f3018cee2e4462e0be417 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 10 Nov 2012 16:35:16 +0100
Subject: fixed saving in config plugin

Saving worked, but did you log out everytime. Now it is checked if the
auth mechanism was actually changed before assuming the login is
invalid.
---
 lib/plugins/config/admin.php                |  3 +--
 lib/plugins/config/settings/extra.class.php | 15 +++++++++------
 2 files changed, 10 insertions(+), 8 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/admin.php b/lib/plugins/config/admin.php
index 0d314d2e6..4d15bfd85 100644
--- a/lib/plugins/config/admin.php
+++ b/lib/plugins/config/admin.php
@@ -65,8 +65,7 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
         // save state & force a page reload to get the new settings to take effect
         $_SESSION['PLUGIN_CONFIG'] = array('state' => 'updated', 'time' => time());
         $this->_close_session();
-        header("Location: ".wl($ID,array('do'=>'admin','page'=>'config'),true,'&'));
-        exit();
+        send_redirect(wl($ID,array('do'=>'admin','page'=>'config'),true,'&'));
       }
 
       $this->_close_session();
diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php
index f6adf1c18..6998e1fbf 100644
--- a/lib/plugins/config/settings/extra.class.php
+++ b/lib/plugins/config/settings/extra.class.php
@@ -64,7 +64,7 @@ if (!class_exists('setting_authtype')) {
     		// reject disabled plugins
     		if ($plugin_controller->isdisabled($input)) {
 	    		$this->_error = true;
-	    		msg('Auth type ' . $input . ' is disabled.');
+	    		msg('Auth type ' . $input . ' is disabled.', -1);
 	    		return false;
     		}
 
@@ -74,21 +74,24 @@ if (!class_exists('setting_authtype')) {
 	    	// @TODO: throw an error in plugin controller instead of returning null
 	    	if (is_null($auth_plugin)) {
 	    		$this->_error = true;
-	    		msg('Cannot load Auth Plugin "' . $input . '"');
+	    		msg('Cannot load Auth Plugin "' . $input . '"', -1);
 	    		return false;
 	    	}
 
 	    	// verify proper instanciation (is this really a plugin?) @TODO use instanceof? impement interface?
 	    	if (is_object($auth_plugin) && !method_exists($auth_plugin, 'getPluginName')) {
 	    		$this->_error = true;
-				msg('Cannot create Auth Plugin "' . $input . '"');
+				msg('Cannot create Auth Plugin "' . $input . '"', -1);
 	    		return false;
 	    	}
     	}
 
-    	msg('Successfully changed auth system. Please re-login.');
-    	auth_logoff();
-
+        // did we change the auth type? logout
+        global $conf;
+        if($conf['authtype'] != $input) {
+    	    msg('Authentication system changed. Please re-login.');
+    	    auth_logoff();
+        }
     	return true;
     }
   }
-- 
cgit v1.2.3


From 89d02586756515c9fb68a348e99a787d95e999a2 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 10 Nov 2012 18:12:39 +0100
Subject: config manager: removed dead/commented code

---
 lib/plugins/config/settings/config.class.php | 13 -------------
 1 file changed, 13 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 8c48018d7..ebf638526 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -45,14 +45,8 @@ if (!class_exists('configuration')) {
         $this->_local_files = $config_cascade['main']['local'];
         $this->_protected_files = $config_cascade['main']['protected'];
 
-#        if (isset($file['default'])) $this->_default_file = $file['default'];
-#        if (isset($file['local'])) $this->_local_file = $file['local'];
-#        if (isset($file['protected'])) $this->_protected_file = $file['protected'];
-
         $this->locked = $this->_is_locked();
-
         $this->_metadata = array_merge($meta, $this->get_plugintpl_metadata($conf['template']));
-
         $this->retrieve_settings();
     }
 
@@ -147,7 +141,6 @@ if (!class_exists('configuration')) {
       if (!$file) return array();
 
       $config = array();
-#      $file = eval('return '.$file.';');
 
       if ($this->_format == 'php') {
 
@@ -195,9 +188,6 @@ if (!class_exists('configuration')) {
     function _out_footer() {
       $out = '';
       if ($this->_format == 'php') {
- #         if ($this->_protected_file) {
- #           $out .= "\n@include(".$this->_protected_file.");\n";
- #         }
           $out .= "\n// end auto-generated content\n";
       }
 
@@ -209,7 +199,6 @@ if (!class_exists('configuration')) {
     function _is_locked() {
       if (!$this->_local_files) return true;
 
-#      $local = eval('return '.$this->_local_file.';');
       $local = $this->_local_files[0];
 
       if (!is_writable(dirname($local))) return true;
@@ -425,8 +414,6 @@ if (!class_exists('setting')) {
       $out = '';
 
       if ($fmt=='php') {
-        // translation string needs to be improved FIXME
-        $tr = array("\n"=>'\n', "\r"=>'\r', "\t"=>'\t', "\\" => '\\\\', "'" => '\\\'');
         $tr = array("\\" => '\\\\', "'" => '\\\'');
 
         $out =  '$'.$var."['".$this->_out_key()."'] = '".strtr($this->_local, $tr)."';\n";
-- 
cgit v1.2.3


From b8f41ef0bac4e82cb3b02cd318efaddbaaeb1a78 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 10 Nov 2012 18:13:09 +0100
Subject: config manager: let PHP parse the config file

Until now, the config manager did read and parse the various PHP config
files itself. This fails for more complex setups like arrays.

I'm not really sure why this was done. This patch replaces the parsing
with a simple include() call. Everything still seems to work.
---
 lib/plugins/config/settings/config.class.php | 25 +++----------------------
 1 file changed, 3 insertions(+), 22 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index ebf638526..722c8df7b 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -139,32 +139,13 @@ if (!class_exists('configuration')) {
     function _read_config($file) {
 
       if (!$file) return array();
+      if (!file_exists($file)) return array();
 
       $config = array();
 
       if ($this->_format == 'php') {
-
-        if(@file_exists($file)){
-            $contents = @php_strip_whitespace($file);
-        }else{
-            $contents = '';
-        }
-        $pattern = '/\$'.$this->_name.'\[[\'"]([^=]+)[\'"]\] ?= ?(.*?);(?=[^;]*(?:\$'.$this->_name.'|$))/s';
-        $matches=array();
-        preg_match_all($pattern,$contents,$matches,PREG_SET_ORDER);
-
-        for ($i=0; $i'\\','\\\''=>'\'','\\"'=>'"'));
-
-          $config[$key] = $value;
-        }
+          include($file);
+          $config = ${$this->_name};
       }
 
       return $config;
-- 
cgit v1.2.3


From 60dd32d957e6c4ce2d969c45cc60497f55a39abe Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 10 Nov 2012 18:18:05 +0100
Subject: added 'array' type for config manager

This allows to use simple arrays in the config file but have a comma
separated list in the config manager.
---
 lib/plugins/config/settings/config.class.php    | 104 ++++++++++++++++++++++++
 lib/plugins/config/settings/config.metadata.php |   3 +
 2 files changed, 107 insertions(+)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 722c8df7b..e4a638eb0 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -435,6 +435,110 @@ if (!class_exists('setting')) {
   }
 }
 
+
+if (!class_exists('setting_array')) {
+    class setting_array extends setting {
+
+        /**
+         * Create an array from a string
+         *
+         * @param $string
+         * @return array
+         */
+        protected function _from_string($string){
+            $array = explode(',', $string);
+            $array = array_map('trim', $array);
+            $array = array_filter($array);
+            $array = array_unique($array);
+            return $array;
+        }
+
+        /**
+         * Create a string from an array
+         *
+         * @param $array
+         * @return string
+         */
+        protected function _from_array($array){
+            return join(', ', (array) $array);
+        }
+
+        /**
+         * update setting with user provided value $input
+         * if value fails error check, save it
+         *
+         * @param string $input
+         * @return bool true if changed, false otherwise (incl. on error)
+         */
+        function update($input) {
+            if (is_null($input)) return false;
+            if ($this->is_protected()) return false;
+
+            $input = $this->_from_string($input);
+
+            $value = is_null($this->_local) ? $this->_default : $this->_local;
+            if ($value == $input) return false;
+
+            foreach($input as $item){
+                if ($this->_pattern && !preg_match($this->_pattern,$item)) {
+                    $this->_error = true;
+                    $this->_input = $input;
+                    return false;
+                }
+            }
+
+            $this->_local = $input;
+            return true;
+        }
+
+        protected function _escape($string) {
+            $tr = array("\\" => '\\\\', "'" => '\\\'');
+            return "'".strtr( cleanText($string), $tr)."'";
+        }
+
+        /**
+         * generate string to save setting value to file according to $fmt
+         */
+        function out($var, $fmt='php') {
+
+            if ($this->is_protected()) return '';
+            if (is_null($this->_local) || ($this->_default == $this->_local)) return '';
+
+            $out = '';
+
+            if ($fmt=='php') {
+                $vals = array_map(array($this, '_escape'), $this->_local);
+                $out =  '$'.$var."['".$this->_out_key()."'] = array(".join(', ',$vals).");\n";
+            }
+
+            return $out;
+        }
+
+        function html(&$plugin, $echo=false) {
+            $value = '';
+            $disable = '';
+
+            if ($this->is_protected()) {
+                $value = $this->_protected;
+                $disable = 'disabled="disabled"';
+            } else {
+                if ($echo && $this->_error) {
+                    $value = $this->_input;
+                } else {
+                    $value = is_null($this->_local) ? $this->_default : $this->_local;
+                }
+            }
+
+            $key = htmlspecialchars($this->_key);
+            $value = htmlspecialchars($this->_from_array($value));
+
+            $label = '';
+            $input = '';
+            return array($label,$input);
+        }
+    }
+}
+
 if (!class_exists('setting_string')) {
   class setting_string extends setting {
     function html(&$plugin, $echo=false) {
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 3607f56c6..582452917 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -32,6 +32,9 @@
  *                    separated list of checked choices
  *   'fieldset'     - used to group configuration settings, but is not itself a setting. To make this clear in
  *                    the language files the keys for this type should start with '_'.
+ *   'array'        - a simple (one dimensional) array of string values, shown as comma separated list in the
+ *                    config manager but saved as PHP array(). Values may not contain commas themselves.
+ *                    _pattern matching on the array values supported.
  *
  *  Single Setting (source: settings/extra.class.php)
  *  -------------------------------------------------
-- 
cgit v1.2.3


From d30b165d18ab3a6868d3b3e96e7bac782fb58441 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Fri, 16 Nov 2012 13:28:15 +0100
Subject: Revert "config manager: let PHP parse the config file"

This reverts commit b8f41ef0bac4e82cb3b02cd318efaddbaaeb1a78.

We had good reasons for parsing the file ourselves. For example to keep
expressions like 7*60*60*24 intact.
---
 lib/plugins/config/settings/config.class.php | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index e4a638eb0..e71a7e5f9 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -139,13 +139,32 @@ if (!class_exists('configuration')) {
     function _read_config($file) {
 
       if (!$file) return array();
-      if (!file_exists($file)) return array();
 
       $config = array();
 
       if ($this->_format == 'php') {
-          include($file);
-          $config = ${$this->_name};
+
+        if(@file_exists($file)){
+            $contents = @php_strip_whitespace($file);
+        }else{
+            $contents = '';
+        }
+        $pattern = '/\$'.$this->_name.'\[[\'"]([^=]+)[\'"]\] ?= ?(.*?);(?=[^;]*(?:\$'.$this->_name.'|$))/s';
+        $matches=array();
+        preg_match_all($pattern,$contents,$matches,PREG_SET_ORDER);
+
+        for ($i=0; $i'\\','\\\''=>'\'','\\"'=>'"'));
+
+          $config[$key] = $value;
+        }
       }
 
       return $config;
-- 
cgit v1.2.3


From cba21baacb4880eefd35279b0589e035c5a5c78e Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Fri, 16 Nov 2012 13:59:17 +0100
Subject: started to add some unit tests to config manager

Parsing the config file should be completely tested before we can rely
on it and safely extend it. This just adds the first very basic tests.
---
 lib/plugins/config/_test/configuration.test.php | 31 +++++++++++++++++++++++++
 lib/plugins/config/_test/data/config.php        | 14 +++++++++++
 lib/plugins/config/_test/data/metadata.php      | 11 +++++++++
 lib/plugins/config/settings/config.class.php    |  3 +++
 4 files changed, 59 insertions(+)
 create mode 100644 lib/plugins/config/_test/configuration.test.php
 create mode 100644 lib/plugins/config/_test/data/config.php
 create mode 100644 lib/plugins/config/_test/data/metadata.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/_test/configuration.test.php b/lib/plugins/config/_test/configuration.test.php
new file mode 100644
index 000000000..eeeff61a3
--- /dev/null
+++ b/lib/plugins/config/_test/configuration.test.php
@@ -0,0 +1,31 @@
+config = dirname(__FILE__).'/data/config.php';
+        $this->meta   = dirname(__FILE__).'/data/metadata.php';
+        require_once(dirname(__FILE__).'/../settings/config.class.php');
+    }
+
+    function test_readconfig() {
+        $confmgr = new configuration($this->meta);
+
+        $conf = $confmgr->_read_config($this->config);
+
+        //print_r($conf);
+
+        $this->assertEquals('42', $conf['int1']);
+        $this->assertEquals('6*7', $conf['int2']);
+
+        $this->assertEquals('Hello World', $conf['str1']);
+        $this->assertEquals('G\'day World', $conf['str2']);
+        $this->assertEquals('Hello World', $conf['str3']);
+        $this->assertEquals("Hello 'World'", $conf['str4']);
+        $this->assertEquals('Hello "World"', $conf['str5']);
+    }
+
+}
\ No newline at end of file
diff --git a/lib/plugins/config/_test/data/config.php b/lib/plugins/config/_test/data/config.php
new file mode 100644
index 000000000..4ed450e93
--- /dev/null
+++ b/lib/plugins/config/_test/data/config.php
@@ -0,0 +1,14 @@
+
  */
 
+
+if(!defined('CM_KEYMARKER')) define('CM_KEYMARKER','____');
+
 if (!class_exists('configuration')) {
 
   class configuration {
-- 
cgit v1.2.3


From a24fc53e2623640cf5e2d00de741c1b67c9bb294 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Fri, 16 Nov 2012 14:48:14 +0100
Subject: added failing test for array type

---
 lib/plugins/config/_test/configuration.test.php | 2 ++
 lib/plugins/config/_test/data/config.php        | 2 ++
 lib/plugins/config/_test/data/metadata.php      | 2 ++
 3 files changed, 6 insertions(+)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/_test/configuration.test.php b/lib/plugins/config/_test/configuration.test.php
index eeeff61a3..ee03f3849 100644
--- a/lib/plugins/config/_test/configuration.test.php
+++ b/lib/plugins/config/_test/configuration.test.php
@@ -26,6 +26,8 @@ class plugin_config_configuration_test extends DokuWikiTest {
         $this->assertEquals('Hello World', $conf['str3']);
         $this->assertEquals("Hello 'World'", $conf['str4']);
         $this->assertEquals('Hello "World"', $conf['str5']);
+
+        $this->assertEquals(array('foo', 'bar', 'baz'), $conf['arr1']);
     }
 
 }
\ No newline at end of file
diff --git a/lib/plugins/config/_test/data/config.php b/lib/plugins/config/_test/data/config.php
index 4ed450e93..15d6359ad 100644
--- a/lib/plugins/config/_test/data/config.php
+++ b/lib/plugins/config/_test/data/config.php
@@ -10,5 +10,7 @@ $conf['str3']  = "Hello World";
 $conf['str4']  = "Hello 'World'";
 $conf['str5']  = "Hello \"World\"";
 
+$conf['arr1']  = array('foo','bar','baz');
+
 $conf['foo']['bar'] = 'x1';
 $conf['foo']['baz'] = 'x2';
diff --git a/lib/plugins/config/_test/data/metadata.php b/lib/plugins/config/_test/data/metadata.php
index 34ab42be7..12902e525 100644
--- a/lib/plugins/config/_test/data/metadata.php
+++ b/lib/plugins/config/_test/data/metadata.php
@@ -9,3 +9,5 @@ $meta['str3'] = array('string');
 $meta['str4'] = array('string');
 $meta['str5'] = array('string');
 
+$meta['arr1'] = array('array');
+
-- 
cgit v1.2.3


From 741c52751f7b22a3167d9475b2adb1a79f5eeea6 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Wed, 16 Jan 2013 13:41:42 +0100
Subject: parse arrays from config file

---
 lib/plugins/config/_test/configuration.test.php |  2 +-
 lib/plugins/config/settings/config.class.php    | 23 ++++++++++++++++++++---
 2 files changed, 21 insertions(+), 4 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/_test/configuration.test.php b/lib/plugins/config/_test/configuration.test.php
index ee03f3849..b808ad505 100644
--- a/lib/plugins/config/_test/configuration.test.php
+++ b/lib/plugins/config/_test/configuration.test.php
@@ -30,4 +30,4 @@ class plugin_config_configuration_test extends DokuWikiTest {
         $this->assertEquals(array('foo', 'bar', 'baz'), $conf['arr1']);
     }
 
-}
\ No newline at end of file
+}
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 5a2aa2980..7f15df6fb 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -157,14 +157,31 @@ if (!class_exists('configuration')) {
         preg_match_all($pattern,$contents,$matches,PREG_SET_ORDER);
 
         for ($i=0; $i'\\','\\\''=>'\'','\\"'=>'"'));
+
+          // handle arrays
+          if(preg_match('/array ?\((.*)\)/', $value, $match)){
+            $arr = explode(',', $match[1]);
+
+            // remove quotes from quoted strings & unescape escaped data
+            $len = count($arr);
+            for($j=0; $j<$len; $j++){
+                $arr[$j] = preg_replace('/^(\'|")(.*)(?'\\','\\\''=>'\'','\\"'=>'"'));
+            }
+
+            $value = $arr;
+          }else{
+            // remove quotes from quoted strings & unescape escaped data
+            $value = preg_replace('/^(\'|")(.*)(?'\\','\\\''=>'\'','\\"'=>'"'));
+          }
 
           $config[$key] = $value;
         }
-- 
cgit v1.2.3


From d12150d88f5fe8d5718313ab6c14ab8c907c61ff Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Wed, 16 Jan 2013 13:59:41 +0100
Subject: fixed problems with spaced arrays

---
 lib/plugins/config/_test/data/config.php     | 2 +-
 lib/plugins/config/settings/config.class.php | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/_test/data/config.php b/lib/plugins/config/_test/data/config.php
index 15d6359ad..83255f937 100644
--- a/lib/plugins/config/_test/data/config.php
+++ b/lib/plugins/config/_test/data/config.php
@@ -10,7 +10,7 @@ $conf['str3']  = "Hello World";
 $conf['str4']  = "Hello 'World'";
 $conf['str5']  = "Hello \"World\"";
 
-$conf['arr1']  = array('foo','bar','baz');
+$conf['arr1']  = array('foo','bar', 'baz');
 
 $conf['foo']['bar'] = 'x1';
 $conf['foo']['baz'] = 'x2';
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 7f15df6fb..7ff310b20 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -166,12 +166,13 @@ if (!class_exists('configuration')) {
 
 
           // handle arrays
-          if(preg_match('/array ?\((.*)\)/', $value, $match)){
+          if(preg_match('/^array ?\((.*)\)/', $value, $match)){
             $arr = explode(',', $match[1]);
 
             // remove quotes from quoted strings & unescape escaped data
             $len = count($arr);
             for($j=0; $j<$len; $j++){
+                $arr[$j] = trim($arr[$j]);
                 $arr[$j] = preg_replace('/^(\'|")(.*)(?'\\','\\\''=>'\'','\\"'=>'"'));
             }
-- 
cgit v1.2.3


From fec2accc99487e0dee7300c58566bb82225f8afd Mon Sep 17 00:00:00 2001
From: Klap-in 
Date: Sat, 26 Jan 2013 13:13:51 +0100
Subject: Added loadHelper() to DokuWiki_Syntax_Plugin.

---
 lib/plugins/syntax.php | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

(limited to 'lib/plugins')

diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index 552cc747a..f3f234316 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -277,6 +277,26 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
     return $conf;
   }
 
+    /**
+     * Loads a given helper plugin (if enabled)
+     *
+     * @author  Esther Brunner 
+     *
+     * @param   string $name   name of plugin to load
+     * @param   bool   $msg    if a message should be displayed in case the plugin is not available
+     *
+     * @return  object  helper plugin object
+     */
+    function loadHelper($name, $msg){
+        if (!plugin_isdisabled($name)){
+            $obj = plugin_load('helper',$name);
+        }else{
+            $obj = null;
+        }
+        if (is_null($obj) && $msg) msg("Helper plugin $name is not available or invalid.",-1);
+        return $obj;
+    }
+
     /**
      * Allow the plugin to prevent DokuWiki from reusing an instance
      *
-- 
cgit v1.2.3


From 5fd9b829e7d9947de0eeead685e0a0cf707eff88 Mon Sep 17 00:00:00 2001
From: Klap-in 
Date: Sat, 26 Jan 2013 20:59:00 +0100
Subject: Reformat last bottom end of the syntax plugin file

---
 lib/plugins/syntax.php | 96 +++++++++++++++++++++++++-------------------------
 1 file changed, 48 insertions(+), 48 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index f3f234316..a6d7ce92c 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -226,56 +226,56 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
       $this->localised = true;
     }
 
-  // configuration methods
-  /**
-   * getConf($setting)
-   *
-   * use this function to access plugin configuration variables
-   */
-  function getConf($setting){
-
-    if (!$this->configloaded){ $this->loadConfig(); }
-
-    return $this->conf[$setting];
-  }
-
-  /**
-   * loadConfig()
-   * merges the plugin's default settings with any local settings
-   * this function is automatically called through getConf()
-   */
-  function loadConfig(){
-    global $conf;
-
-    $defaults = $this->readDefaultSettings();
-    $plugin = $this->getPluginName();
-
-    foreach ($defaults as $key => $value) {
-      if (isset($conf['plugin'][$plugin][$key])) continue;
-      $conf['plugin'][$plugin][$key] = $value;
+    // configuration methods
+    /**
+     * getConf($setting)
+     *
+     * use this function to access plugin configuration variables
+     */
+    function getConf($setting) {
+
+        if(!$this->configloaded) { $this->loadConfig(); }
+
+        return $this->conf[$setting];
     }
 
-    $this->configloaded = true;
-    $this->conf =& $conf['plugin'][$plugin];
-  }
+    /**
+     * loadConfig()
+     * merges the plugin's default settings with any local settings
+     * this function is automatically called through getConf()
+     */
+    function loadConfig() {
+        global $conf;
 
-  /**
-   * read the plugin's default configuration settings from conf/default.php
-   * this function is automatically called through getConf()
-   *
-   * @return    array    setting => value
-   */
-  function readDefaultSettings() {
+        $defaults = $this->readDefaultSettings();
+        $plugin   = $this->getPluginName();
 
-    $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
-    $conf = array();
+        foreach($defaults as $key => $value) {
+            if(isset($conf['plugin'][$plugin][$key])) continue;
+            $conf['plugin'][$plugin][$key] = $value;
+        }
 
-    if (@file_exists($path.'default.php')) {
-      include($path.'default.php');
+        $this->configloaded = true;
+        $this->conf         =& $conf['plugin'][$plugin];
     }
 
-    return $conf;
-  }
+    /**
+     * read the plugin's default configuration settings from conf/default.php
+     * this function is automatically called through getConf()
+     *
+     * @return    array    setting => value
+     */
+    function readDefaultSettings() {
+
+        $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
+        $conf = array();
+
+        if(@file_exists($path.'default.php')) {
+            include($path.'default.php');
+        }
+
+        return $conf;
+    }
 
     /**
      * Loads a given helper plugin (if enabled)
@@ -287,13 +287,13 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
      *
      * @return  object  helper plugin object
      */
-    function loadHelper($name, $msg){
-        if (!plugin_isdisabled($name)){
-            $obj = plugin_load('helper',$name);
-        }else{
+    function loadHelper($name, $msg) {
+        if(!plugin_isdisabled($name)) {
+            $obj = plugin_load('helper', $name);
+        } else {
             $obj = null;
         }
-        if (is_null($obj) && $msg) msg("Helper plugin $name is not available or invalid.",-1);
+        if(is_null($obj) && $msg) msg("Helper plugin $name is not available or invalid.", -1);
         return $obj;
     }
 
-- 
cgit v1.2.3


From 97f59cf7ce28a342fe19606999a65f18d264ef3d Mon Sep 17 00:00:00 2001
From: Klap-in 
Date: Sun, 27 Jan 2013 22:42:33 +0100
Subject: set $msg argument of loadHelper() default to true.

---
 lib/plugins/syntax.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index a6d7ce92c..b7839b2b2 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -287,7 +287,7 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
      *
      * @return  object  helper plugin object
      */
-    function loadHelper($name, $msg) {
+    function loadHelper($name, $msg = true) {
         if(!plugin_isdisabled($name)) {
             $obj = plugin_load('helper', $name);
         } else {
-- 
cgit v1.2.3


From e0e514e1850d0f52a3fdeeee54712050fd0fe5c7 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Thu, 31 Jan 2013 16:28:25 +0100
Subject: touch the config on save, even if no changes were made

---
 lib/plugins/config/admin.php                 | 2 ++
 lib/plugins/config/settings/config.class.php | 9 +++++++++
 2 files changed, 11 insertions(+)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/admin.php b/lib/plugins/config/admin.php
index 0d314d2e6..930eb30c6 100644
--- a/lib/plugins/config/admin.php
+++ b/lib/plugins/config/admin.php
@@ -67,6 +67,8 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
         $this->_close_session();
         header("Location: ".wl($ID,array('do'=>'admin','page'=>'config'),true,'&'));
         exit();
+      } elseif(!$this->_error) {
+          $this->_config->touch_settings(); // just touch to refresh cache
       }
 
       $this->_close_session();
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index a30a0605b..334e617dd 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -130,6 +130,15 @@ if (!class_exists('configuration')) {
       return true;
     }
 
+    /**
+     * Update last modified time stamp of the config file
+     */
+    function touch_settings(){
+        if ($this->locked) return false;
+        $file = end($this->_local_files);
+        return @touch($file);
+    }
+
     function _read_config_group($files) {
       $config = array();
       foreach ($files as $file) {
-- 
cgit v1.2.3


From 957e84c6d04b3287613860d79d564d971531db98 Mon Sep 17 00:00:00 2001
From: Rodrigo Rega 
Date: Fri, 1 Feb 2013 09:37:45 +0100
Subject: Galician language update

---
 lib/plugins/acl/lang/gl/lang.php         |  2 +-
 lib/plugins/config/lang/gl/lang.php      | 22 +++++++++++-----------
 lib/plugins/plugin/lang/gl/lang.php      |  2 +-
 lib/plugins/popularity/lang/gl/lang.php  |  2 +-
 lib/plugins/revert/lang/gl/lang.php      |  2 +-
 lib/plugins/usermanager/lang/gl/lang.php |  2 +-
 6 files changed, 16 insertions(+), 16 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/acl/lang/gl/lang.php b/lib/plugins/acl/lang/gl/lang.php
index 537e03eef..3325bfd07 100644
--- a/lib/plugins/acl/lang/gl/lang.php
+++ b/lib/plugins/acl/lang/gl/lang.php
@@ -4,7 +4,7 @@
  *
  * @author Medúlio 
  * @author Oscar M. Lage 
- * @author Leandro Regueiro 
+ * @author Rodrigo Rega 
  */
 $lang['admin_acl']             = 'Xestión da Lista de Control de Acceso (ACL)';
 $lang['acl_group']             = 'Grupo';
diff --git a/lib/plugins/config/lang/gl/lang.php b/lib/plugins/config/lang/gl/lang.php
index 5ba3be2ec..21fe17452 100644
--- a/lib/plugins/config/lang/gl/lang.php
+++ b/lib/plugins/config/lang/gl/lang.php
@@ -4,7 +4,7 @@
  *
  * @author Medúlio 
  * @author Oscar M. Lage 
- * @author Leandro Regueiro 
+ * @author Rodrigo Rega 
  */
 $lang['menu']                  = 'Opcións de Configuración';
 $lang['error']                 = 'Configuración non actualizada debido a un valor inválido, por favor revisa os teus trocos e volta envialos de novo.
@@ -28,8 +28,8 @@ $lang['_anti_spam']            = 'Configuración de Anti-Correo-lixo';
 $lang['_editing']              = 'Configuración de Edición';
 $lang['_links']                = 'Configuración de Ligazóns';
 $lang['_media']                = 'Configuración de Media';
-$lang['_notifications']        = 'Configuración de notificación';
-$lang['_syndication']          = 'Configuración de afiliación';
+$lang['_notifications']        = 'Opcións de Notificación';
+$lang['_syndication']          = 'Opcións de Sindicación';
 $lang['_advanced']             = 'Configuración Avanzada';
 $lang['_network']              = 'Configuración de Rede';
 $lang['_plugin_sufix']         = 'Configuración de Extensións';
@@ -41,8 +41,8 @@ $lang['title']                 = 'Título do Wiki';
 $lang['start']                 = 'Nome da páxina inicial';
 $lang['lang']                  = 'Idioma';
 $lang['template']              = 'Sobreplanta';
-$lang['tagline']               = 'Slogan (se o modelo o admite)';
-$lang['sidebar']               = 'Nome da páxina de barra lateral (se o modelo o admite), se o campo está baleiro desactívase a barra lateral';
+$lang['tagline']               = 'Tagline (si a plantilla o soporta)';
+$lang['sidebar']               = 'Nome de páxina da barra lateral (si a platilla o soporta), o campo en baleiro deshabilita a barra lateral';
 $lang['license']               = 'Baixo de que licenza será ceibado o teu contido?';
 $lang['savedir']               = 'Directorio no que se gardarán os datos';
 $lang['basedir']               = 'Directorio base';
@@ -85,8 +85,8 @@ $lang['disableactions_wikicode'] = 'Ver fonte/Exportar Datos Raw';
 $lang['disableactions_other']  = 'Outras accións (separadas por comas)';
 $lang['auth_security_timeout'] = 'Tempo Límite de Seguridade de Autenticación (segundos)';
 $lang['securecookie']          = 'Deben enviarse só vía HTTPS polo navegador as cookies configuradas vía HTTPS? Desactiva esta opción cando só o inicio de sesión do teu wiki estea asegurado con SSL pero a navegación do mesmo se faga de xeito inseguro.';
-$lang['remote']                = 'Activar o sistema de API remota. Isto permítelle a outras aplicacións acceder ao wiki a través de XML-RPC ou outros mecanismos.';
-$lang['remoteuser']            = 'Restrinxir o acceso remoto á API aos grupos ou usuarios separados por comas especificados aquí. Déixeo baleiro para concederlle acceso a todos.';
+$lang['remote']                = 'Permite o uso do sistema API remoto. Isto permite a outras aplicacións acceder ao wiki mediante XML-RPC ou outros mecanismos.';
+$lang['remoteuser']            = 'Restrinxe o uso remoto da API aos grupos ou usuarios indicados, separados por comas. Deixar baleiro para dar acceso a todo o mundo.';
 $lang['usewordblock']          = 'Bloquear correo-lixo segundo unha lista de verbas';
 $lang['relnofollow']           = 'Utilizar rel="nofollow" nas ligazóns externas';
 $lang['indexdelay']            = 'Retardo denantes de indexar (seg)';
@@ -115,14 +115,14 @@ $lang['notify']                = 'Enviar notificacións de trocos a este enderez
 $lang['registernotify']        = 'Enviar información de novos usuarios rexistrados a este enderezo de correo-e';
 $lang['mailfrom']              = 'Enderezo de correo-e a usar para as mensaxes automáticas';
 $lang['mailprefix']            = 'Prefixo de asunto de correo-e para as mensaxes automáticas';
-$lang['htmlmail']              = 'Enviar mensaxes de e-mail HTML multiparte con mellor aspecto, pero de tamaño maior. Desactivar para as mensaxes de só texto plano.';
+$lang['htmlmail']              = 'Enviar correos electrónicos HTML multiparte máis estéticos, pero máis grande en tamaño. Deshabilitar para mandar correos electrónicos en texto claro.';
 $lang['sitemap']               = 'Xerar mapa do sitio co Google (días)';
 $lang['rss_type']              = 'Tipo de corrente RSS XML';
 $lang['rss_linkto']            = 'A corrente XML liga para';
 $lang['rss_content']           = 'Que queres amosar nos elementos da corrente XML?';
 $lang['rss_update']            = 'Intervalo de actualización da corrente XML (seg.)';
 $lang['rss_show_summary']      = 'Amosar sumario no título da corrente XML';
-$lang['rss_media']             = 'Que tipo de cambios se deben mostrar na fonte XML?';
+$lang['rss_media']             = 'Qué tipo de cambios deben ser listados no feed XML?';
 $lang['updatecheck']           = 'Comprobar se hai actualizacións e avisos de seguridade? O DokuWiki precisa contactar con update.dokuwiki.org para executar esta característica.';
 $lang['userewrite']            = 'Utilizar URLs amigábeis';
 $lang['useslash']              = 'Utilizar a barra inclinada (/) como separador de nome de espazo nos URLs';
@@ -133,14 +133,14 @@ $lang['autoplural']            = 'Comprobar formas plurais nas ligazóns';
 $lang['compression']           = 'Método de compresión para arquivos attic';
 $lang['gzip_output']           = 'Utilizar Contido-Codificación gzip para o xhtml';
 $lang['compress']              = 'Saída compacta de CSS e Javascript';
-$lang['cssdatauri']            = 'Tamaño en bytes ata o cal as imaxes referenciadas nos ficheiros CSS se deben incorporar directamente na folla de estilos para reducir o exceso de cabeceiras de solicitudes HTTP. Esta técnica non funciona con IE 7 ou inferior! Valores entre 400 e 600 son axeitados. Defina 0 para desactivar.';
+$lang['cssdatauri']            = 'Tamaño en bytes ata o cal as imaxes referenciadas nos CSS serán incrustadas na folla de estilos para disminuir o tamaño das cabeceiras das solicitudes HTTP. Esta técnica non funcionará en IE 7 ou anteriores! entre 400 e 600 bytes é un valor axeitado. Establecer a 0 para deshabilitar.';
 $lang['send404']               = 'Enviar "HTTP 404/Páxina non atopada" para as páxinas inexistentes';
 $lang['broken_iua']            = 'Rachou a función ignore_user_abort no teu sistema? Isto podería causar que o índice de procura non funcione. Coñécese que o IIS+PHP/CGI ráchaa. Bótalle un ollo ao Bug 852 para obter máis información.';
 $lang['xsendfile']             = 'Empregar a cabeceira X-Sendfile para que o servidor web envie arquivos estáticos? O teu servidor web precisa soportar isto.';
 $lang['renderer_xhtml']        = 'Intérprete a empregar para a saída principal (XHTML) do Wiki';
 $lang['renderer__core']        = '%s (núcleo do Dokuwiki)';
 $lang['renderer__plugin']      = '%s (extensión)';
-$lang['dnslookups']            = 'DokuWiki buscará os nomes de máquina ou enderezos IP remotos dos usuarios que editen páxinas. Se ten un servidor DNS lento ou que non funciona ou en caso de non querer esta característica, desactive esta opción.';
+$lang['dnslookups']            = 'DokuWiki resolverá os nomes de host das direccións IP dos usuarios que editan as páxinas. Si contas un servidor DNS lento, que non funciona ou non che interesa esta característica, deshabilita esta opción';
 $lang['proxy____host']         = 'Nome do servidor Proxy';
 $lang['proxy____port']         = 'Porto do Proxy';
 $lang['proxy____user']         = 'Nome de usuario do Proxy';
diff --git a/lib/plugins/plugin/lang/gl/lang.php b/lib/plugins/plugin/lang/gl/lang.php
index fecdf9425..b3da44096 100644
--- a/lib/plugins/plugin/lang/gl/lang.php
+++ b/lib/plugins/plugin/lang/gl/lang.php
@@ -4,7 +4,7 @@
  *
  * @author Medúlio 
  * @author Oscar M. Lage 
- * @author Leandro Regueiro 
+ * @author Rodrigo Rega 
  */
 $lang['menu']                  = 'Xestionar Extensións';
 $lang['download']              = 'Descargar e instalar unha nova extensión';
diff --git a/lib/plugins/popularity/lang/gl/lang.php b/lib/plugins/popularity/lang/gl/lang.php
index 8032fccb0..86cd34db6 100644
--- a/lib/plugins/popularity/lang/gl/lang.php
+++ b/lib/plugins/popularity/lang/gl/lang.php
@@ -4,7 +4,7 @@
  *
  * @author Medúlio 
  * @author Oscar M. Lage 
- * @author Leandro Regueiro 
+ * @author Rodrigo Rega 
  */
 $lang['name']                  = 'Resposta de Popularidade (pode demorar un tempo a cargar)';
 $lang['submit']                = 'Enviar Datos';
diff --git a/lib/plugins/revert/lang/gl/lang.php b/lib/plugins/revert/lang/gl/lang.php
index ad4fe4045..0e376d9a7 100644
--- a/lib/plugins/revert/lang/gl/lang.php
+++ b/lib/plugins/revert/lang/gl/lang.php
@@ -4,7 +4,7 @@
  *
  * @author Medúlio 
  * @author Oscar M. Lage 
- * @author Leandro Regueiro 
+ * @author Rodrigo Rega 
  */
 $lang['menu']                  = 'Xestor de Reversión';
 $lang['filter']                = 'Procurar páxinas con correo-lixo';
diff --git a/lib/plugins/usermanager/lang/gl/lang.php b/lib/plugins/usermanager/lang/gl/lang.php
index fb965985f..f3a7ef281 100644
--- a/lib/plugins/usermanager/lang/gl/lang.php
+++ b/lib/plugins/usermanager/lang/gl/lang.php
@@ -4,7 +4,7 @@
  *
  * @author Medúlio 
  * @author Oscar M. Lage 
- * @author Leandro Regueiro 
+ * @author Rodrigo Rega 
  */
 $lang['menu']                  = 'Xestor de Usuarios';
 $lang['noauth']                = '(autenticación de usuarios non dispoñible)';
-- 
cgit v1.2.3


From 3dfd89ae0a4887f817ed5b51c2bbd42a5a17bed3 Mon Sep 17 00:00:00 2001
From: Klap-in 
Date: Thu, 31 Jan 2013 14:13:46 +0100
Subject: Use list in acl help text, for more structure

---
 lib/plugins/acl/lang/en/help.txt | 9 +++------
 lib/plugins/acl/lang/nl/help.txt | 9 +++------
 2 files changed, 6 insertions(+), 12 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/acl/lang/en/help.txt b/lib/plugins/acl/lang/en/help.txt
index 2b80cc4c7..e865bbb23 100644
--- a/lib/plugins/acl/lang/en/help.txt
+++ b/lib/plugins/acl/lang/en/help.txt
@@ -1,12 +1,9 @@
 === Quick Help: ===
 
 On this page you can add and remove permissions for namespaces and pages in your wiki.
-
-The left pane displays all available namespaces and pages.
-
-The form above allows you to see and modify the permissions of a selected user or group.
-
-In the table below all currently set access control rules are shown. You can use it to quickly delete or change multiple rules.
+  * The left pane displays all available namespaces and pages.
+  * The form above allows you to see and modify the permissions of a selected user or group.
+  * In the table below all currently set access control rules are shown. You can use it to quickly delete or change multiple rules.
 
 Reading the [[doku>acl|official documentation on ACL]] might help you to fully understand how access control works in DokuWiki.
 
diff --git a/lib/plugins/acl/lang/nl/help.txt b/lib/plugins/acl/lang/nl/help.txt
index 255f21ba0..14c78e20a 100644
--- a/lib/plugins/acl/lang/nl/help.txt
+++ b/lib/plugins/acl/lang/nl/help.txt
@@ -1,11 +1,8 @@
 === Snelle hulp: ===
 
 Op deze pagina kun je bevoegdheden toevoegen en verwijderen voor namespaces en pagina's in je wiki.
-
-Het linkerpaneel geeft alle beschikbare namespaces en pagina's weer.
-
-In het formulier hierboven kun je bevoegdheden zien en aanpassen voor een selecteerde gebruiker of groep.
-
-In de tabel hieronder worden alle momenteel ingestelde toegangsregels weergegeven. Je kunt hier snel regels wijzigen of verwijderen.
+  * Het linkerpaneel geeft alle beschikbare namespaces en pagina's weer.
+  * In het formulier hierboven kun je bevoegdheden zien en aanpassen voor een selecteerde gebruiker of groep.
+  * In de tabel hieronder worden alle momenteel ingestelde toegangsregels weergegeven. Je kunt hier snel regels wijzigen of verwijderen.
 
 Lees de  [[doku>acl|documentatie over ACLs]] om de mogelijkheden volledig te begrijpen.
-- 
cgit v1.2.3


From 58e982182a58f0728ae6d223fd65016aded52b46 Mon Sep 17 00:00:00 2001
From: Vasileios Karavasilis 
Date: Fri, 1 Feb 2013 15:41:02 +0100
Subject: Greek language update

---
 lib/plugins/acl/lang/el/lang.php         |   1 +
 lib/plugins/config/lang/el/lang.php      | 105 +++++++++++++++++--------------
 lib/plugins/plugin/lang/el/lang.php      |   1 +
 lib/plugins/popularity/lang/el/lang.php  |   1 +
 lib/plugins/revert/lang/el/lang.php      |   1 +
 lib/plugins/usermanager/lang/el/lang.php |   1 +
 6 files changed, 63 insertions(+), 47 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/acl/lang/el/lang.php b/lib/plugins/acl/lang/el/lang.php
index e1cd26755..516d7bdf5 100644
--- a/lib/plugins/acl/lang/el/lang.php
+++ b/lib/plugins/acl/lang/el/lang.php
@@ -14,6 +14,7 @@
  * @author Konstantinos Koryllos 
  * @author George Petsagourakis 
  * @author Petros Vidalis 
+ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
  */
 $lang['admin_acl']             = 'Διαχείριση Δικαιωμάτων Πρόσβασης';
 $lang['acl_group']             = 'Ομάδα';
diff --git a/lib/plugins/config/lang/el/lang.php b/lib/plugins/config/lang/el/lang.php
index 093212664..d2801e507 100644
--- a/lib/plugins/config/lang/el/lang.php
+++ b/lib/plugins/config/lang/el/lang.php
@@ -12,6 +12,7 @@
  * @author Konstantinos Koryllos 
  * @author George Petsagourakis 
  * @author Petros Vidalis 
+ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
  */
 $lang['menu']                  = 'Ρυθμίσεις';
 $lang['error']                 = 'Οι ρυθμίσεις σας δεν έγιναν δεκτές λόγω λανθασμένης τιμής κάποιας ρύθμισης. Διορθώστε την λάθος τιμή και προσπαθήστε ξανά.
@@ -34,6 +35,8 @@ $lang['_anti_spam']            = 'Ρυθμίσεις Anti-Spam';
 $lang['_editing']              = 'Ρυθμίσεις Σύνταξης σελίδων';
 $lang['_links']                = 'Ρυθμίσεις Συνδέσμων';
 $lang['_media']                = 'Ρυθμίσεις Αρχείων';
+$lang['_notifications']        = 'Ρυθμίσεις ενημερώσεων';
+$lang['_syndication']          = 'Ρυθμίσεις σύνδεσης';
 $lang['_advanced']             = 'Ρυθμίσεις για Προχωρημένους';
 $lang['_network']              = 'Ρυθμίσεις Δικτύου';
 $lang['_plugin_sufix']         = 'Ρυθμίσεις Επεκτάσεων';
@@ -41,26 +44,29 @@ $lang['_template_sufix']       = 'Ρυθμίσεις Προτύπων παρου
 $lang['_msg_setting_undefined'] = 'Δεν έχουν οριστεί metadata.';
 $lang['_msg_setting_no_class'] = 'Δεν έχει οριστεί κλάση.';
 $lang['_msg_setting_no_default'] = 'Δεν υπάρχει τιμή εξ ορισμού.';
-$lang['fmode']                 = 'Δικαιώματα πρόσβασης δημιουργούμενων αρχείων';
-$lang['dmode']                 = 'Δικαιώματα πρόσβασης δημιουργούμενων φακέλων';
+$lang['title']                 = 'Τίτλος Wiki';
+$lang['start']                 = 'Ονομασία αρχικής σελίδας';
 $lang['lang']                  = 'Γλώσσα';
+$lang['template']              = 'Πρότυπο προβολής';
+$lang['tagline']               = 'Tagline';
+$lang['sidebar']               = 'Sidebar page name';
+$lang['license']               = 'Κάτω από ποια άδεια θέλετε να δημοσιευτεί το υλικό σας?';
+$lang['savedir']               = 'Φάκελος για την αποθήκευση δεδομένων';
 $lang['basedir']               = 'Αρχικός Φάκελος';
 $lang['baseurl']               = 'Αρχικό URL';
-$lang['savedir']               = 'Φάκελος για την αποθήκευση δεδομένων';
 $lang['cookiedir']             = 'Διαδρομή cookie. Αφήστε την κενή για την χρησιμοποίηση της αρχικής URL.';
-$lang['start']                 = 'Ονομασία αρχικής σελίδας';
-$lang['title']                 = 'Τίτλος Wiki';
-$lang['template']              = 'Πρότυπο προβολής';
-$lang['license']               = 'Κάτω από ποια άδεια θέλετε να δημοσιευτεί το υλικό σας?';
-$lang['fullpath']              = 'Εμφάνιση πλήρους διαδρομής σελίδας στην υποκεφαλίδα';
+$lang['dmode']                 = 'Δικαιώματα πρόσβασης δημιουργούμενων φακέλων';
+$lang['fmode']                 = 'Δικαιώματα πρόσβασης δημιουργούμενων αρχείων';
+$lang['allowdebug']            = 'Δεδομένα εκσφαλμάτωσης (debug) απενεργοποιήστε τα εάν δεν τα έχετε ανάγκη!';
 $lang['recent']                = 'Αριθμός πρόσφατων αλλαγών ανά σελίδα';
+$lang['recent_days']           = 'Πόσο παλιές αλλαγές να εμφανίζονται (ημέρες)';
 $lang['breadcrumbs']           = 'Αριθμός συνδέσμων ιστορικού';
 $lang['youarehere']            = 'Εμφάνιση ιεραρχικής προβολής τρέχουσας σελίδας';
+$lang['fullpath']              = 'Εμφάνιση πλήρους διαδρομής σελίδας στην υποκεφαλίδα';
 $lang['typography']            = 'Μετατροπή ειδικών χαρακτήρων στο τυπογραφικό ισοδύναμό τους';
-$lang['htmlok']                = 'Να επιτρέπεται η ενσωμάτωση HTML';
-$lang['phpok']                 = 'Να επιτρέπεται η ενσωμάτωση PHP';
 $lang['dformat']               = 'Μορφή ημερομηνίας (βλέπε την strftime function της PHP)';
 $lang['signature']             = 'Υπογραφή';
+$lang['showuseras']            = 'Τι να εμφανίζεται όταν φαίνεται ο χρήστης που τροποποίησε τελευταίος μία σελίδα';
 $lang['toptoclevel']           = 'Ανώτατο επίπεδο πίνακα περιεχομένων σελίδας';
 $lang['tocminheads']           = 'Ελάχιστος αριθμός κεφαλίδων για την δημιουργία πίνακα περιεχομένων - TOC';
 $lang['maxtoclevel']           = 'Μέγιστο επίπεδο για πίνακα περιεχομένων σελίδας';
@@ -68,15 +74,8 @@ $lang['maxseclevel']           = 'Μέγιστο επίπεδο για εμφά
 $lang['camelcase']             = 'Χρήση CamelCase στους συνδέσμους';
 $lang['deaccent']              = 'Αφαίρεση σημείων στίξης από ονόματα σελίδων';
 $lang['useheading']            = 'Χρήση κεφαλίδας πρώτου επιπέδου σαν τίτλο συνδέσμων';
-$lang['refcheck']              = 'Πριν τη διαγραφή ενός αρχείου να ελέγχεται η ύπαρξη σελίδων που το χρησιμοποιούν';
-$lang['refshow']               = 'Εμφανιζόμενος αριθμός σελίδων που χρησιμοποιούν ένα αρχείο';
-$lang['allowdebug']            = 'Δεδομένα εκσφαλμάτωσης (debug) απενεργοποιήστε τα εάν δεν τα έχετε ανάγκη!';
-$lang['usewordblock']          = 'Χρήστη λίστα απαγορευμένων λέξεων για καταπολέμηση του spam';
-$lang['indexdelay']            = 'Χρόνος αναμονής προτού επιτραπεί σε μηχανές αναζήτησης να ευρετηριάσουν μια τροποποιημένη σελίδα (sec)';
-$lang['relnofollow']           = 'Χρήση rel="nofollow"';
-$lang['mailguard']             = 'Κωδικοποίηση e-mail διευθύνσεων';
-$lang['iexssprotect']          = 'Έλεγχος μεταφορτώσεων για πιθανώς επικίνδυνο κώδικα JavaScript ή HTML';
-$lang['showuseras']            = 'Τι να εμφανίζεται όταν φαίνεται ο χρήστης που τροποποίησε τελευταίος μία σελίδα';
+$lang['sneaky_index']          = 'Εξ ορισμού, η εφαρμογή DokuWiki δείχνει όλους τους φακέλους στην προβολή Καταλόγου. Ενεργοποιώντας αυτή την επιλογή, δεν θα εμφανίζονται οι φάκελοι για τους οποίους ο χρήστης δεν έχει δικαιώματα ανάγνωσης αλλά και οι υπο-φάκελοί τους ανεξαρτήτως δικαιωμάτων πρόσβασης.';
+$lang['hidepages']             = 'Φίλτρο απόκρυψης σελίδων (regular expressions)';
 $lang['useacl']                = 'Χρήση Λίστας Δικαιωμάτων Πρόσβασης (ACL)';
 $lang['autopasswd']            = 'Αυτόματη δημιουργία κωδικού χρήστη';
 $lang['authtype']              = 'Τύπος πιστοποίησης στοιχείων χρήστη';
@@ -85,58 +84,70 @@ $lang['defaultgroup']          = 'Προεπιλεγμένη ομάδα χρησ
 $lang['superuser']             = 'Υπερ-χρήστης - μία ομάδα ή ένας χρήστης με πλήρη δικαιώματα πρόσβασης σε όλες τις σελίδες και όλες τις λειτουργίες ανεξάρτητα από τις ρυθμίσεις των Λιστών Δικαιωμάτων Πρόσβασης (ACL)';
 $lang['manager']               = 'Διαχειριστής - μία ομάδα ή ένας χρήστης με δικαιώματα πρόσβασης σε ορισμένες από τις λειτουργίες της εφαρμογής';
 $lang['profileconfirm']        = 'Να απαιτείται ο κωδικός χρήστη για την επιβεβαίωση αλλαγών στο προφίλ χρήστη';
+$lang['rememberme']            = 'Να επιτρέπονται τα cookies λογαρισμού χρήστη αορίστου χρόνου (Απομνημόνευση στοιχείων λογαριασμού)';
 $lang['disableactions']        = 'Απενεργοποίηση λειτουργιών DokuWiki';
 $lang['disableactions_check']  = 'Έλεγχος';
 $lang['disableactions_subscription'] = 'Εγγραφή/Διαγραφή χρήστη';
 $lang['disableactions_wikicode'] = 'Προβολή κώδικα σελίδας';
 $lang['disableactions_other']  = 'Άλλες λειτουργίες (διαχωρίστε τις με κόμμα)';
-$lang['sneaky_index']          = 'Εξ ορισμού, η εφαρμογή DokuWiki δείχνει όλους τους φακέλους στην προβολή Καταλόγου. Ενεργοποιώντας αυτή την επιλογή, δεν θα εμφανίζονται οι φάκελοι για τους οποίους ο χρήστης δεν έχει δικαιώματα ανάγνωσης αλλά και οι υπο-φάκελοί τους ανεξαρτήτως δικαιωμάτων πρόσβασης.';
 $lang['auth_security_timeout'] = 'Διάρκεια χρόνου για ασφάλεια πιστοποίησης (δευτερόλεπτα)';
 $lang['securecookie']          = 'Τα cookies που έχουν οριστεί μέσω HTTPS πρέπει επίσης να αποστέλλονται μόνο μέσω HTTPS από τον φυλλομετρητή? Απενεργοποιήστε αυτή την επιλογή όταν μόνο η είσοδος στο wiki σας διασφαλίζεται μέσω SSL αλλά η περιήγηση γίνεται και χωρίς αυτό.';
+$lang['remote']                = 'Ενεργοποίησης απομακρυσμένης προγραμματιστικής διεπαφής εφαρμογών (API). Με αυτό τον τρόπο επιτρέπεται η πρόσβαση στο wiki με το XML-RPC ή με άλλα πρωτόκολλα επικοινωνίας.';
+$lang['remoteuser']            = 'Απενεργοποίησης απομακρυσμένης προγραμματιστικής διεπαφής εφαρμογών (API). Αφήστε το κενό για να είναι δυνατή η πρόσβαση στον οποιοδήποτε.';
+$lang['usewordblock']          = 'Χρήστη λίστα απαγορευμένων λέξεων για καταπολέμηση του spam';
+$lang['relnofollow']           = 'Χρήση rel="nofollow"';
+$lang['indexdelay']            = 'Χρόνος αναμονής προτού επιτραπεί σε μηχανές αναζήτησης να ευρετηριάσουν μια τροποποιημένη σελίδα (sec)';
+$lang['mailguard']             = 'Κωδικοποίηση e-mail διευθύνσεων';
+$lang['iexssprotect']          = 'Έλεγχος μεταφορτώσεων για πιθανώς επικίνδυνο κώδικα JavaScript ή HTML';
+$lang['usedraft']              = 'Αυτόματη αποθήκευση αντιγράφων κατά την τροποποίηση σελίδων';
+$lang['htmlok']                = 'Να επιτρέπεται η ενσωμάτωση HTML';
+$lang['phpok']                 = 'Να επιτρέπεται η ενσωμάτωση PHP';
+$lang['locktime']              = 'Μέγιστος χρόνος κλειδώματος αρχείου υπό τροποποίηση (sec)';
+$lang['cachetime']             = 'Μέγιστη ηλικία cache (sec)';
+$lang['target____wiki']        = 'Παράθυρο-στόχος για εσωτερικούς συνδέσμους';
+$lang['target____interwiki']   = 'Παράθυρο-στόχος για συνδέσμους interwiki';
+$lang['target____extern']      = 'Παράθυρο-στόχος για εξωτερικούς σθνδέσμους';
+$lang['target____media']       = 'Παράθυρο-στόχος για συνδέσμους αρχείων';
+$lang['target____windows']     = 'Παράθυρο-στόχος για συνδέσμους σε Windows shares';
+$lang['mediarevisions']        = 'Ενεργοποίηση Mediarevisions;';
+$lang['refcheck']              = 'Πριν τη διαγραφή ενός αρχείου να ελέγχεται η ύπαρξη σελίδων που το χρησιμοποιούν';
+$lang['refshow']               = 'Εμφανιζόμενος αριθμός σελίδων που χρησιμοποιούν ένα αρχείο';
+$lang['gdlib']                 = 'Έκδοση βιβλιοθήκης GD';
+$lang['im_convert']            = 'Διαδρομή προς το εργαλείο μετατροπής εικόνων του ImageMagick';
+$lang['jpg_quality']           = 'Ποιότητα συμπίεσης JPG (0-100)';
+$lang['fetchsize']             = 'Μέγιστο μέγεθος (σε bytes) εξωτερικού αρχείου που επιτρέπεται να μεταφέρει η fetch.php';
+$lang['subscribers']           = 'Να επιτρέπεται η εγγραφή στην ενημέρωση αλλαγών σελίδας';
+$lang['subscribe_time']        = 'Χρόνος μετά τον οποίο οι λίστες ειδοποιήσεων και τα συνοπτικά θα αποστέλλονται (δευτερόλεπτα). Αυτό θα πρέπει να είναι μικρότερο από τον χρόνο που έχει η ρύθμιση recent_days.';
+$lang['notify']                = 'Αποστολή ενημέρωσης για αλλαγές σε αυτή την e-mail διεύθυνση';
+$lang['registernotify']        = 'Αποστολή ενημερωτικών μηνυμάτων σε αυτή την e-mail διεύθυνση κατά την εγγραφή νέων χρηστών';
+$lang['mailfrom']              = 'e-mail διεύθυνση αποστολέα για μηνύματα από την εφαρμογή';
+$lang['mailprefix']            = 'Πρόθεμα θέματος που να χρησιμοποιείται για τα αυτόματα μηνύματα ηλεκτρονικού ταχυδρομείου.';
+$lang['htmlmail']              = 'Αποστολή οπτικά καλύτερου, αλλά μεγαλύτερου σε μέγεθος email με χρήση HTML. Απενεργοποιήστε το για αποστέλλονται μόνο email απλού κειμένου.';
+$lang['sitemap']               = 'Δημιουργία Google sitemap (ημέρες)';
+$lang['rss_type']              = 'Τύπος XML feed';
+$lang['rss_linkto']            = 'Τύπος συνδέσμων στο XML feed';
+$lang['rss_content']           = 'Τι να εμφανίζεται στα XML feed items?';
+$lang['rss_update']            = 'Χρόνος ανανέωσης XML feed (sec)';
+$lang['rss_show_summary']      = 'Να εμφανίζεται σύνοψη του XML feed στον τίτλο';
+$lang['rss_media']             = 'Τι είδους αλλαγές πρέπει να εμφανίζονται στο XLM feed;';
 $lang['updatecheck']           = 'Έλεγχος για ύπαρξη νέων εκδόσεων και ενημερώσεων ασφαλείας της εφαρμογής? Απαιτείται η σύνδεση με το update.dokuwiki.org για να λειτουργήσει σωστά αυτή η επιλογή.';
 $lang['userewrite']            = 'Χρήση ωραίων URLs';
 $lang['useslash']              = 'Χρήση slash σαν διαχωριστικό φακέλων στα URLs';
-$lang['usedraft']              = 'Αυτόματη αποθήκευση αντιγράφων κατά την τροποποίηση σελίδων';
 $lang['sepchar']               = 'Διαχωριστικός χαρακτήρας για κανονικοποίηση ονόματος σελίδας';
 $lang['canonical']             = 'Πλήρη και κανονικοποιημένα URLs';
 $lang['fnencode']              = 'Μέθοδος κωδικοποίησης για ονόματα αρχείων μη-ASCII';
 $lang['autoplural']            = 'Ταίριασμα πληθυντικού στους συνδέσμους';
 $lang['compression']           = 'Μέθοδος συμπίεσης για αρχεία attic';
-$lang['cachetime']             = 'Μέγιστη ηλικία cache (sec)';
-$lang['locktime']              = 'Μέγιστος χρόνος κλειδώματος αρχείου υπό τροποποίηση (sec)';
-$lang['fetchsize']             = 'Μέγιστο μέγεθος (σε bytes) εξωτερικού αρχείου που επιτρέπεται να μεταφέρει η fetch.php';
-$lang['notify']                = 'Αποστολή ενημέρωσης για αλλαγές σε αυτή την e-mail διεύθυνση';
-$lang['registernotify']        = 'Αποστολή ενημερωτικών μηνυμάτων σε αυτή την e-mail διεύθυνση κατά την εγγραφή νέων χρηστών';
-$lang['mailfrom']              = 'e-mail διεύθυνση αποστολέα για μηνύματα από την εφαρμογή';
-$lang['mailprefix']            = 'Πρόθεμα θέματος που να χρησιμοποιείται για τα αυτόματα μηνύματα ηλεκτρονικού ταχυδρομείου.';
 $lang['gzip_output']           = 'Χρήση gzip Content-Encoding για την xhtml';
-$lang['gdlib']                 = 'Έκδοση βιβλιοθήκης GD';
-$lang['im_convert']            = 'Διαδρομή προς το εργαλείο μετατροπής εικόνων του ImageMagick';
-$lang['jpg_quality']           = 'Ποιότητα συμπίεσης JPG (0-100)';
-$lang['subscribers']           = 'Να επιτρέπεται η εγγραφή στην ενημέρωση αλλαγών σελίδας';
-$lang['subscribe_time']        = 'Χρόνος μετά τον οποίο οι λίστες ειδοποιήσεων και τα συνοπτικά θα αποστέλλονται (δευτερόλεπτα). Αυτό θα πρέπει να είναι μικρότερο από τον χρόνο που έχει η ρύθμιση recent_days.';
 $lang['compress']              = 'Συμπίεση αρχείων CSS και javascript';
 $lang['cssdatauri']            = 'Το μέγεθος σε bytes στο οποίο οι εικόνες που αναφέρονται σε CSS αρχεία θα πρέπει να είναι ενσωματωμένες για τη μείωση των απαιτήσεων μιας κεφαλίδας αίτησης HTTP . Αυτή η τεχνική δεν θα λειτουργήσει σε IE <8!  400  με  600  bytes είναι μια καλή τιμή. Ορίστε την τιμή  0  για να το απενεργοποιήσετε.';
-$lang['hidepages']             = 'Φίλτρο απόκρυψης σελίδων (regular expressions)';
 $lang['send404']               = 'Αποστολή "HTTP 404/Page Not Found" για σελίδες που δεν υπάρχουν';
-$lang['sitemap']               = 'Δημιουργία Google sitemap (ημέρες)';
 $lang['broken_iua']            = 'Η συνάρτηση ignore_user_abort δεν λειτουργεί σωστά στο σύστημά σας? Σε αυτή την περίπτωση μπορεί να μην δουλεύει σωστά η λειτουργία Καταλόγου. Ο συνδυασμός IIS+PHP/CGI είναι γνωστό ότι έχει τέτοιο πρόβλημα. Δείτε και Bug 852 για λεπτομέρειες.';
 $lang['xsendfile']             = 'Χρήση της κεφαλίδας X-Sendfile από τον εξυπηρετητή κατά την φόρτωση στατικών αρχείων? Ο εξυπηρετητής σας πρέπει να υποστηρίζει αυτή την δυνατότητα.';
 $lang['renderer_xhtml']        = 'Πρόγραμμα δημιουργίας βασικής (xhtml) εξόδου wiki.';
 $lang['renderer__core']        = '%s (βασικός κώδικας dokuwiki)';
 $lang['renderer__plugin']      = '%s (επέκταση)';
-$lang['rememberme']            = 'Να επιτρέπονται τα cookies λογαρισμού χρήστη αορίστου χρόνου (Απομνημόνευση στοιχείων λογαριασμού)';
-$lang['rss_type']              = 'Τύπος XML feed';
-$lang['rss_linkto']            = 'Τύπος συνδέσμων στο XML feed';
-$lang['rss_content']           = 'Τι να εμφανίζεται στα XML feed items?';
-$lang['rss_update']            = 'Χρόνος ανανέωσης XML feed (sec)';
-$lang['recent_days']           = 'Πόσο παλιές αλλαγές να εμφανίζονται (ημέρες)';
-$lang['rss_show_summary']      = 'Να εμφανίζεται σύνοψη του XML feed στον τίτλο';
-$lang['target____wiki']        = 'Παράθυρο-στόχος για εσωτερικούς συνδέσμους';
-$lang['target____interwiki']   = 'Παράθυρο-στόχος για συνδέσμους interwiki';
-$lang['target____extern']      = 'Παράθυρο-στόχος για εξωτερικούς σθνδέσμους';
-$lang['target____media']       = 'Παράθυρο-στόχος για συνδέσμους αρχείων';
-$lang['target____windows']     = 'Παράθυρο-στόχος για συνδέσμους σε Windows shares';
+$lang['dnslookups']            = 'Το DokuWiki θα ψάξει τα ονόματα υπολογιστών που αντιστοιχούν σε διευθύνσεις IP των χρηστών που γράφουν στις σελίδες. Αν ο DNS είναι αργός, δεν δουλεύει ή δεν χρειάζεστε αυτή την λειτουργία, απενεργοποιήστε την.';
 $lang['proxy____host']         = 'Διακομιστής Proxy';
 $lang['proxy____port']         = 'Θύρα Proxy';
 $lang['proxy____user']         = 'Όνομα χρήστη Proxy';
diff --git a/lib/plugins/plugin/lang/el/lang.php b/lib/plugins/plugin/lang/el/lang.php
index bd6dc2013..4a6f1dbfd 100644
--- a/lib/plugins/plugin/lang/el/lang.php
+++ b/lib/plugins/plugin/lang/el/lang.php
@@ -12,6 +12,7 @@
  * @author Konstantinos Koryllos 
  * @author George Petsagourakis 
  * @author Petros Vidalis 
+ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
  */
 $lang['menu']                  = 'Διαχείριση Επεκτάσεων';
 $lang['download']              = 'Κατεβάστε και εγκαταστήστε μια νέα επέκταση (plugin)';
diff --git a/lib/plugins/popularity/lang/el/lang.php b/lib/plugins/popularity/lang/el/lang.php
index 32558b060..10268a4c3 100644
--- a/lib/plugins/popularity/lang/el/lang.php
+++ b/lib/plugins/popularity/lang/el/lang.php
@@ -5,6 +5,7 @@
  * @author Konstantinos Koryllos 
  * @author George Petsagourakis 
  * @author Petros Vidalis 
+ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
  */
 $lang['name']                  = 'Αναφορά Δημοτικότητας (ίσως αργήσει λίγο να εμφανιστεί)';
 $lang['submit']                = 'Αποστολή Δεδομένων';
diff --git a/lib/plugins/revert/lang/el/lang.php b/lib/plugins/revert/lang/el/lang.php
index 63454e4e9..c6e8bd56c 100644
--- a/lib/plugins/revert/lang/el/lang.php
+++ b/lib/plugins/revert/lang/el/lang.php
@@ -10,6 +10,7 @@
  * @author Konstantinos Koryllos 
  * @author George Petsagourakis 
  * @author Petros Vidalis 
+ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
  */
 $lang['menu']                  = 'Αποκατάσταση κακόβουλων αλλαγών σελίδων';
 $lang['filter']                = 'Αναζήτηση σελίδων που περιέχουν spam';
diff --git a/lib/plugins/usermanager/lang/el/lang.php b/lib/plugins/usermanager/lang/el/lang.php
index 4b4d95379..da7c8fb0f 100644
--- a/lib/plugins/usermanager/lang/el/lang.php
+++ b/lib/plugins/usermanager/lang/el/lang.php
@@ -11,6 +11,7 @@
  * @author Konstantinos Koryllos 
  * @author George Petsagourakis 
  * @author Petros Vidalis 
+ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
  */
 $lang['menu']                  = 'Διαχείριση Χρηστών';
 $lang['noauth']                = '(η είσοδος χρηστών δεν είναι δυνατή)';
-- 
cgit v1.2.3


From 52c3bef90b80185350a565ba379ce81ccf5fce2a Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 2 Feb 2013 13:04:37 +0100
Subject: added config metadata to authad plugin

---
 lib/plugins/authad/conf/metadata.php    | 14 ++++++++++++++
 lib/plugins/authad/lang/en/settings.php | 14 ++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 lib/plugins/authad/conf/metadata.php
 create mode 100644 lib/plugins/authad/lang/en/settings.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authad/conf/metadata.php b/lib/plugins/authad/conf/metadata.php
new file mode 100644
index 000000000..dc251a108
--- /dev/null
+++ b/lib/plugins/authad/conf/metadata.php
@@ -0,0 +1,14 @@
+0);
+$meta['additional']         = array('string');
\ No newline at end of file
diff --git a/lib/plugins/authad/lang/en/settings.php b/lib/plugins/authad/lang/en/settings.php
new file mode 100644
index 000000000..41176847a
--- /dev/null
+++ b/lib/plugins/authad/lang/en/settings.php
@@ -0,0 +1,14 @@
+@my.domain.org';
+$lang['base_dn']            = 'Your base DN. Eg. DC=my,DC=domain,DC=org';
+$lang['domain_controllers'] = 'A comma separated list of Domain controllers. Eg. srv1.domain.org,srv2.domain.org';
+$lang['ad_username']        = 'A privileged Active Directory user with access to all other user\'s data. Optional, but needed for certain actions like sending subscription mails.';
+$lang['ad_password']        = 'The password of the above user.';
+$lang['sso']                = 'Should Single-Sign-On via Kerberos or NTLM be used?';
+$lang['real_primarygroup']  = 'Should the real primary group be resolved instead of assuming "Domain Users" (slower)';
+$lang['use_ssl']            = 'Use SSL connection? If used, do not enable TLS below.';
+$lang['use_tls']            = 'Use TLS connection? If used, do not enable SSL above.';
+$lang['debug']              = 'Display additional debugging output on errors?';
+$lang['expirywarn']         = 'Days in advance to warn user about expiring password. 0 to disable.';
+$lang['additional']         = 'A comma separated list of additional AD attributes to fetch from user data. Used by some plugins.';
\ No newline at end of file
-- 
cgit v1.2.3


From 10bf81481e437a9c202db678672484b74c05bbf6 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 2 Feb 2013 13:32:24 +0100
Subject: dded config metadata for authldap plugin

---
 lib/plugins/authldap/conf/metadata.php    | 17 +++++++++++++++++
 lib/plugins/authldap/lang/en/settings.php | 15 +++++++++++++++
 2 files changed, 32 insertions(+)
 create mode 100644 lib/plugins/authldap/conf/metadata.php
 create mode 100644 lib/plugins/authldap/lang/en/settings.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authldap/conf/metadata.php b/lib/plugins/authldap/conf/metadata.php
new file mode 100644
index 000000000..e0815f789
--- /dev/null
+++ b/lib/plugins/authldap/conf/metadata.php
@@ -0,0 +1,17 @@
+ array('sub','one','base'));
+$meta['groupscope']  = array('multichoice','_choices' => array('sub','one','base'));
+$meta['debug']       = array('onoff');
\ No newline at end of file
diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php
new file mode 100644
index 000000000..e3f4bab31
--- /dev/null
+++ b/lib/plugins/authldap/lang/en/settings.php
@@ -0,0 +1,15 @@
+localhost) or full qualified URL (ldap://server.tld:389)';
+$lang['port']        = 'LDAP server port if no full URL was given above';
+$lang['usertree']    = 'Where to finde the user accounts. Eg. ou=People, dc=server, dc=tld';
+$lang['grouptree']   = 'Where to find the user groups. Eg. ou=Group, dc=server, dc=tld';
+$lang['userfilter']  = 'LDAP filter to search for user accounts. Eg. (&(uid=%{user})(objectClass=posixAccount))';
+$lang['groupfilter'] = 'LDAP filter to search for groups. Eg. (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))';
+$lang['version']     = 'The protocol version to use. You may need to set this to 3';
+$lang['starttls']    = 'Use TLS connections?';
+$lang['referrals']   = 'Shall referrals be followed?';
+$lang['binddn']      = 'DN of an ptional bind user if anonymous bind is not sufficient. Eg. cn=admin, dc=my, dc=home';
+$lang['bindpw']      = 'Password of above user';
+$lang['userscope']   = 'Limit search scope for user search';
+$lang['groupscope']  = 'Limit search scope for group search';
+$lang['debug']       = 'Display additional debug information on errors';
\ No newline at end of file
-- 
cgit v1.2.3


From 9a391616efdc0db6a96841c0a7666f3eff558dad Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 2 Feb 2013 18:13:27 +0100
Subject: added config metadata for authmysql plugin

---
 lib/plugins/authmysql/conf/metadata.php    | 33 ++++++++++++++++++++++++++
 lib/plugins/authmysql/lang/en/settings.php | 38 ++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+)
 create mode 100644 lib/plugins/authmysql/conf/metadata.php
 create mode 100644 lib/plugins/authmysql/lang/en/settings.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authmysql/conf/metadata.php b/lib/plugins/authmysql/conf/metadata.php
new file mode 100644
index 000000000..f63bbe481
--- /dev/null
+++ b/lib/plugins/authmysql/conf/metadata.php
@@ -0,0 +1,33 @@
+ array(0,1,2));
+$meta['forwardClearPass'] = array('onoff');
+$meta['TablesToLock']     = array('array');
+$meta['checkPass']        = array('');
+$meta['getUserInfo']      = array('');
+$meta['getGroups']        = array('');
+$meta['getUsers']         = array('');
+$meta['FilterLogin']      = array('string');
+$meta['FilterName']       = array('string');
+$meta['FilterEmail']      = array('string');
+$meta['FilterGroup']      = array('string');
+$meta['SortOrder']        = array('string');
+$meta['addUser']          = array('');
+$meta['addGroup']         = array('');
+$meta['addUserGroup']     = array('');
+$meta['delGroup']         = array('');
+$meta['getUserID']        = array('');
+$meta['delUser']          = array('');
+$meta['delUserRefs']      = array('');
+$meta['updateUser']       = array('string');
+$meta['UpdateLogin']      = array('string');
+$meta['UpdatePass']       = array('string');
+$meta['UpdateEmail']      = array('string');
+$meta['UpdateName']       = array('string');
+$meta['UpdateTarget']     = array('string');
+$meta['delUserGroup']     = array('');
+$meta['getGroupID']       = array('');
\ No newline at end of file
diff --git a/lib/plugins/authmysql/lang/en/settings.php b/lib/plugins/authmysql/lang/en/settings.php
new file mode 100644
index 000000000..dcdbbb16b
--- /dev/null
+++ b/lib/plugins/authmysql/lang/en/settings.php
@@ -0,0 +1,38 @@
+
Date: Sat, 2 Feb 2013 18:28:59 +0100
Subject: added config metadata for authpgsql plugin

---
 lib/plugins/authpgsql/conf/metadata.php    | 33 ++++++++++++++++++++++++++++++
 lib/plugins/authpgsql/lang/en/settings.php | 33 ++++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+)
 create mode 100644 lib/plugins/authpgsql/conf/metadata.php
 create mode 100644 lib/plugins/authpgsql/lang/en/settings.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authpgsql/conf/metadata.php b/lib/plugins/authpgsql/conf/metadata.php
new file mode 100644
index 000000000..d52a17865
--- /dev/null
+++ b/lib/plugins/authpgsql/conf/metadata.php
@@ -0,0 +1,33 @@
+
Date: Tue, 5 Feb 2013 13:55:30 +0100
Subject: fixed authpg plugin info

---
 lib/plugins/authpgsql/plugin.info.txt | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt
index 598eb848b..9699d3365 100644
--- a/lib/plugins/authpgsql/plugin.info.txt
+++ b/lib/plugins/authpgsql/plugin.info.txt
@@ -1,7 +1,7 @@
-base   authad
+base   authpg
 author Andreas Gohr
 email  andi@splitbrain.org
 date   2012-10-06
-name   active directory auth plugin
-desc   Provides authentication against a Microsoft Active Directory
-url    http://www.dokuwiki.org/plugin:authad
+name   PostgreSQL auth plugin
+desc   Provides authentication against a PostgreSQL database
+url    http://www.dokuwiki.org/plugin:authpg
-- 
cgit v1.2.3


From ed2c6a71b7c05ed9ffb9031519900a6bd9e64d0a Mon Sep 17 00:00:00 2001
From: Klap-in 
Date: Tue, 5 Feb 2013 20:15:04 +0100
Subject: use consistent name for authpgsql

---
 lib/plugins/authpgsql/plugin.info.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt
index 9699d3365..ad71771b4 100644
--- a/lib/plugins/authpgsql/plugin.info.txt
+++ b/lib/plugins/authpgsql/plugin.info.txt
@@ -1,7 +1,7 @@
-base   authpg
+base   authpgsql
 author Andreas Gohr
 email  andi@splitbrain.org
 date   2012-10-06
 name   PostgreSQL auth plugin
 desc   Provides authentication against a PostgreSQL database
-url    http://www.dokuwiki.org/plugin:authpg
+url    http://www.dokuwiki.org/plugin:authpgsql
-- 
cgit v1.2.3


From a701b283f573ba104a34ba98717e3855c6b20621 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Fri, 8 Feb 2013 13:20:59 +0100
Subject: fixed config loading for auth plugins

---
 lib/plugins/auth.php | 1 +
 1 file changed, 1 insertion(+)

(limited to 'lib/plugins')

diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php
index 42dbf1859..c14a04dfb 100644
--- a/lib/plugins/auth.php
+++ b/lib/plugins/auth.php
@@ -434,6 +434,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
         if(isset($conf['auth'][$plugin])) $oldconf = (array) $conf['auth'][$plugin];
 
         $conf['plugin'][$plugin] = array_merge($default, $oldconf, $conf['plugin'][$plugin]);
+	$this->conf =& $conf['plugin'][$plugin];
         $this->configloaded = true;
     }
 }
-- 
cgit v1.2.3


From 62147bf8b4df365c8f4e0cf74f115edd2d154406 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 16 Feb 2013 14:02:11 +0100
Subject: don't expose version in info plugin FS#2701

---
 lib/plugins/info/plugin.info.txt | 2 +-
 lib/plugins/info/syntax.php      | 3 ---
 2 files changed, 1 insertion(+), 4 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/info/plugin.info.txt b/lib/plugins/info/plugin.info.txt
index 5c7d583c0..053743639 100644
--- a/lib/plugins/info/plugin.info.txt
+++ b/lib/plugins/info/plugin.info.txt
@@ -1,7 +1,7 @@
 base info
 author Andreas Gohr
 email andi@splitbrain.org
-date 2012-02-04
+date 2013-02-16
 name Info Plugin
 desc Displays information about various DokuWiki internals
 url http://dokuwiki.org/plugin:info
diff --git a/lib/plugins/info/syntax.php b/lib/plugins/info/syntax.php
index d813aa23a..97b28076b 100644
--- a/lib/plugins/info/syntax.php
+++ b/lib/plugins/info/syntax.php
@@ -60,9 +60,6 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
         if($format == 'xhtml'){
             //handle various info stuff
             switch ($data[0]){
-                case 'version':
-                    $renderer->doc .= getVersion();
-                    break;
                 case 'syntaxmodes':
                     $renderer->doc .= $this->_syntaxmodes_xhtml();
                     break;
-- 
cgit v1.2.3


From a9b6a8b59a0be9ff45f5675c3b032ad8d2afd6eb Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 16 Feb 2013 14:37:12 +0100
Subject: allow richer email addresses in notify and registernotify FS#2689

This deprecates the "richemail" config class
---
 lib/plugins/config/settings/config.class.php    | 85 +++++++++++--------------
 lib/plugins/config/settings/config.metadata.php |  8 +--
 2 files changed, 41 insertions(+), 52 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 16be9a689..5b81be782 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -79,7 +79,7 @@ if (!class_exists('configuration')) {
               array_shift($param);
             } else {
               $class = 'setting_undefined';
-              $param = NULL;
+              $param = null;
             }
 
             if (!in_array($class, $no_default_check) && !isset($default[$key])) {
@@ -353,13 +353,13 @@ if (!class_exists('setting')) {
   class setting {
 
     var $_key = '';
-    var $_default = NULL;
-    var $_local = NULL;
-    var $_protected = NULL;
+    var $_default = null;
+    var $_local = null;
+    var $_protected = null;
 
     var $_pattern = '';
     var $_error = false;            // only used by those classes which error check
-    var $_input = NULL;             // only used by those classes which error check
+    var $_input = null;             // only used by those classes which error check
 
     var $_cautionList = array(
         'basedir' => 'danger', 'baseurl' => 'danger', 'savedir' => 'danger', 'cookiedir' => 'danger', 'useacl' => 'danger', 'authtype' => 'danger', 'superuser' => 'danger', 'userewrite' => 'danger',
@@ -367,7 +367,7 @@ if (!class_exists('setting')) {
         'allowdebug' => 'security', 'htmlok' => 'security', 'phpok' => 'security', 'iexssprotect' => 'security', 'xmlrpc' => 'security', 'fullpath' => 'security'
     );
 
-    function setting($key, $params=NULL) {
+    function setting($key, $params=null) {
         $this->_key = $key;
 
         if (is_array($params)) {
@@ -656,6 +656,7 @@ if (!class_exists('setting_email')) {
   class setting_email extends setting_string {
     var $_pattern = SETTING_EMAIL_PATTERN;       // no longer required, retained for backward compatibility - FIXME, may not be necessary
     var $_multiple = false;
+    var $_placeholders = false;
 
     /**
      *  update setting with user provided value $input
@@ -669,15 +670,36 @@ if (!class_exists('setting_email')) {
 
         $value = is_null($this->_local) ? $this->_default : $this->_local;
         if ($value == $input) return false;
+        if($input === ''){
+            $this->_local = $input;
+            return true;
+        }
+        $mail = $input;
+
+        if($this->_placeholders){
+            // replace variables with pseudo values
+            $mail = str_replace('@USER@','joe',$mail);
+            $mail = str_replace('@NAME@','Joe Schmoe',$mail);
+            $mail = str_replace('@MAIL@','joe@example.com',$mail);
+        }
 
+        // multiple mail addresses?
         if ($this->_multiple) {
-            $mails = array_filter(array_map('trim', explode(',', $input)));
+            $mails = array_filter(array_map('trim', explode(',', $mail)));
         } else {
-            $mails = array($input);
+            $mails = array($mail);
         }
 
+        // check them all
         foreach ($mails as $mail) {
-            if (!mail_isvalid($mail)) {
+            // only check the address part
+            if(preg_match('#(.*?)<(.*?)>#', $mail, $matches)){
+                $addr = $matches[2];
+            }else{
+                $addr = $mail;
+            }
+
+            if (!mail_isvalid($addr)) {
               $this->_error = true;
               $this->_input = $input;
               return false;
@@ -690,46 +712,15 @@ if (!class_exists('setting_email')) {
   }
 }
 
+/**
+ * @deprecated 2013-02-16
+ */
 if (!class_exists('setting_richemail')) {
   class setting_richemail extends setting_email {
-
-    /**
-     *  update setting with user provided value $input
-     *  if value fails error check, save it
-     *
-     *  @return boolean true if changed, false otherwise (incl. on error)
-     */
-    function update($input) {
-        if (is_null($input)) return false;
-        if ($this->is_protected()) return false;
-
-        $value = is_null($this->_local) ? $this->_default : $this->_local;
-        if ($value == $input) return false;
-
-        // replace variables with pseudo values
-        $test = $input;
-        $test = str_replace('@USER@','joe',$test);
-        $test = str_replace('@NAME@','Joe Schmoe',$test);
-        $test = str_replace('@MAIL@','joe@example.com',$test);
-
-        // now only check the address part
-        if(preg_match('#(.*?)<(.*?)>#',$test,$matches)){
-          $text = trim($matches[1]);
-          $addr = $matches[2];
-        }else{
-          $addr = $test;
-        }
-
-        if ($test !== '' && !mail_isvalid($addr)) {
-          $this->_error = true;
-          $this->_input = $input;
-          return false;
-        }
-
-        $this->_local = $input;
-        return true;
-    }
-
+      function update($input) {
+          $this->_placeholders = true;
+          return parent::update($input);
+      }
   }
 }
 
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 585015085..663eab9dd 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -20,9 +20,7 @@
  *   'numericopt'   - like above, but accepts empty values
  *   'onoff'        - checkbox input, setting output  0|1
  *   'multichoice'  - select input (single choice), setting output with quotes, required _choices parameter
- *   'email'        - text input, input must conform to email address format, setting output in quotes
- *   'richemail'    - text input, input must conform to email address format but accepts variables and
- *                    emails with a real name prepended (when email address is given in <>)
+ *   'email'        - text input, input must conform to email address format
  *   'password'     - password input, minimal input validation, setting output text in quotes, maybe encoded
  *                    according to the _code parameter
  *   'dirchoice'    - as multichoice, selection choices based on folders found at location specified in _dir
@@ -177,8 +175,8 @@ $meta['_notifications'] = array('fieldset');
 $meta['subscribers']    = array('onoff');
 $meta['subscribe_time'] = array('numeric');
 $meta['notify']         = array('email', '_multiple' => true);
-$meta['registernotify'] = array('email');
-$meta['mailfrom']       = array('richemail');
+$meta['registernotify'] = array('email', '_multiple' => true);
+$meta['mailfrom']       = array('email', '_placeholders' => true);
 $meta['mailprefix']     = array('string');
 $meta['htmlmail']       = array('onoff');
 
-- 
cgit v1.2.3


From 73afc609162729f45fdfcc2b04b9a467ccdec71f Mon Sep 17 00:00:00 2001
From: Anika Henke 
Date: Sat, 16 Feb 2013 14:06:27 +0000
Subject: removed useless css from config manager (causing issues in Opera,
 FS#2678)

---
 lib/plugins/config/style.css | 9 ---------
 1 file changed, 9 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/style.css b/lib/plugins/config/style.css
index 397328937..054021ed8 100644
--- a/lib/plugins/config/style.css
+++ b/lib/plugins/config/style.css
@@ -154,15 +154,6 @@
 }
 
 
-/* IE6 correction */
-* html #config__manager .selection label {
-  padding-top: 2px;
-}
-
-#config__manager .selection input.checkbox {
-  padding-left: 0.7em;
-}
-
 #config__manager .other {
   clear: both;
   padding-top: 0.5em;
-- 
cgit v1.2.3


From 71f791fff9c3912682e5e0c8866e695a0749aa82 Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 16 Feb 2013 19:08:57 +0100
Subject: removed deprecated ACL wrapper object

---
 lib/plugins/acl/script.js | 8 --------
 1 file changed, 8 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js
index 0ba91cdc9..c3763dc8d 100644
--- a/lib/plugins/acl/script.js
+++ b/lib/plugins/acl/script.js
@@ -117,11 +117,3 @@ var dw_acl = {
 };
 
 jQuery(dw_acl.init);
-
-var acl = {
-    init: DEPRECATED_WRAP(dw_acl.init, dw_acl),
-    userselhandler: DEPRECATED_WRAP(dw_acl.userselhandler, dw_acl),
-    loadinfo: DEPRECATED_WRAP(dw_acl.loadinfo, dw_acl),
-    parseatt: DEPRECATED_WRAP(dw_acl.parseatt, dw_acl),
-    treehandler: DEPRECATED_WRAP(dw_acl.treehandler, dw_acl)
-};
-- 
cgit v1.2.3


From 87bba75a4043643511c89cb89ef9cf11e59fbf2c Mon Sep 17 00:00:00 2001
From: Tom N Harris 
Date: Sat, 16 Feb 2013 12:53:24 -0500
Subject: Add django compatible hashes to the config options.

---
 lib/plugins/config/settings/config.metadata.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 663eab9dd..bdbc4311f 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -127,7 +127,7 @@ $meta['_authentication'] = array('fieldset');
 $meta['useacl']      = array('onoff');
 $meta['autopasswd']  = array('onoff');
 $meta['authtype']    = array('authtype');
-$meta['passcrypt']   = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','lsmd5','crypt','mysql','my411','kmd5','pmd5','hmd5','mediawiki','bcrypt','sha512'));
+$meta['passcrypt']   = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','lsmd5','crypt','mysql','my411','kmd5','pmd5','hmd5','mediawiki','bcrypt','djangomd5','djangosha1','sha512'));
 $meta['defaultgroup']= array('string');
 $meta['superuser']   = array('string');
 $meta['manager']     = array('string');
-- 
cgit v1.2.3


From 5398a7b652eabdd0a20f154b97b60f89cad72f8c Mon Sep 17 00:00:00 2001
From: Andreas Gohr 
Date: Sat, 16 Feb 2013 19:57:01 +0100
Subject: fixed language file placeholders FS#2682

---
 lib/plugins/plugin/lang/ar/lang.php               | 2 +-
 lib/plugins/plugin/lang/hi/lang.php               | 1 -
 lib/plugins/plugin/lang/pl/lang.php               | 2 +-
 lib/plugins/plugin/lang/zh-tw/lang.php            | 2 +-
 lib/plugins/usermanager/lang/ca-valencia/lang.php | 2 +-
 5 files changed, 4 insertions(+), 5 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/plugin/lang/ar/lang.php b/lib/plugins/plugin/lang/ar/lang.php
index 8327e5ce3..a1a778131 100644
--- a/lib/plugins/plugin/lang/ar/lang.php
+++ b/lib/plugins/plugin/lang/ar/lang.php
@@ -50,4 +50,4 @@ $lang['enabled']               = 'الاضافة %s فُعلت.	';
 $lang['notenabled']            = 'تعذر تفعيل الاضافة %s، تحقق من اذونات الملف.';
 $lang['disabled']              = 'عُطلت الإضافة %s.';
 $lang['notdisabled']           = 'تعذر تعطيل الإضافة %s، تحقق من اذونات الملف.';
-$lang['packageinstalled']      = 'حزمة الإضافة (%d plugin(s): %Xs) ثبتت بنجاج.';
+$lang['packageinstalled']      = 'حزمة الإضافة (%d plugin(s): %s) ثبتت بنجاج.';
diff --git a/lib/plugins/plugin/lang/hi/lang.php b/lib/plugins/plugin/lang/hi/lang.php
index ab29c6550..67b177256 100644
--- a/lib/plugins/plugin/lang/hi/lang.php
+++ b/lib/plugins/plugin/lang/hi/lang.php
@@ -6,7 +6,6 @@
  * @author yndesai@gmail.com
  */
 $lang['unknown']               = 'अज्ञात';
-$lang['deleted']               = 'मिटाया हुआ';
 $lang['date']                  = 'दिनांक:';
 $lang['author']                = 'लेखक:';
 $lang['error']                 = 'अज्ञात त्रुटि हुइ';
diff --git a/lib/plugins/plugin/lang/pl/lang.php b/lib/plugins/plugin/lang/pl/lang.php
index 1d3bbbc03..faaa69630 100644
--- a/lib/plugins/plugin/lang/pl/lang.php
+++ b/lib/plugins/plugin/lang/pl/lang.php
@@ -60,4 +60,4 @@ $lang['enabled']               = 'Wtyczka %s włączona.';
 $lang['notenabled']            = 'Nie udało się uruchomić wtyczki %s, sprawdź uprawnienia dostępu do plików.';
 $lang['disabled']              = 'Wtyczka %s wyłączona.';
 $lang['notdisabled']           = 'Nie udało się wyłączyć wtyczki %s, sprawdź uprawnienia dostępu do plików.';
-$lang['packageinstalled']      = 'Pakiet wtyczek (%d wtyczki:% s) zainstalowany pomyślnie.';
+$lang['packageinstalled']      = 'Pakiet wtyczek (%d wtyczki: %s) zainstalowany pomyślnie.';
diff --git a/lib/plugins/plugin/lang/zh-tw/lang.php b/lib/plugins/plugin/lang/zh-tw/lang.php
index 7b38a02c8..56149e79e 100644
--- a/lib/plugins/plugin/lang/zh-tw/lang.php
+++ b/lib/plugins/plugin/lang/zh-tw/lang.php
@@ -56,4 +56,4 @@ $lang['enabled']               = '附加元件 %s 已啟用。';
 $lang['notenabled']            = '附加元件 %s 無法啟用,請檢查檔案權限。';
 $lang['disabled']              = '附加元件 %s 已停用。';
 $lang['notdisabled']           = '附加元件 %s 無法停用,請檢查檔案權限。';
-$lang['packageinstalled']      = '附加元件 (%d 附加元件%s: %s) 已安裝好。';
+$lang['packageinstalled']      = '附加元件 (%d 附加元件: %s) 已安裝好。';
diff --git a/lib/plugins/usermanager/lang/ca-valencia/lang.php b/lib/plugins/usermanager/lang/ca-valencia/lang.php
index 5b0c628ed..c39c2f9b3 100644
--- a/lib/plugins/usermanager/lang/ca-valencia/lang.php
+++ b/lib/plugins/usermanager/lang/ca-valencia/lang.php
@@ -33,7 +33,7 @@ $lang['delete_ok']             = '%d usuaris borrats';
 $lang['delete_fail']           = 'Erro borrant %d.';
 $lang['update_ok']             = 'Usuari actualisat correctament';
 $lang['update_fail']           = 'Erro actualisant usuari';
-$lang['update_exists']         = 'Erro canviant el nom de l\'usuari, el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
+$lang['update_exists']         = 'Erro canviant el nom de l\'usuari (%s), el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
 $lang['start']                 = 'primera';
 $lang['prev']                  = 'anterior';
 $lang['next']                  = 'següent';
-- 
cgit v1.2.3


From 45970804e69e3d087fe19ad9cefaff0ef44be795 Mon Sep 17 00:00:00 2001
From: Klap-in 
Date: Sat, 16 Feb 2013 22:53:38 +0100
Subject: Complete metadata and defaults of auth plugin configs

---
 lib/plugins/authad/conf/default.php        | 14 +++++++++++++
 lib/plugins/authldap/conf/default.php      | 20 ++++++++++++++----
 lib/plugins/authldap/conf/metadata.php     |  1 +
 lib/plugins/authldap/lang/en/settings.php  |  5 ++++-
 lib/plugins/authmysql/conf/default.php     | 33 +++++++++++++++++++++++++++++-
 lib/plugins/authmysql/conf/metadata.php    |  1 +
 lib/plugins/authmysql/lang/en/settings.php |  1 +
 lib/plugins/authpgsql/conf/default.php     | 32 ++++++++++++++++++++++++++++-
 8 files changed, 100 insertions(+), 7 deletions(-)
 create mode 100644 lib/plugins/authad/conf/default.php

(limited to 'lib/plugins')

diff --git a/lib/plugins/authad/conf/default.php b/lib/plugins/authad/conf/default.php
new file mode 100644
index 000000000..05d6c328e
--- /dev/null
+++ b/lib/plugins/authad/conf/default.php
@@ -0,0 +1,14 @@
+ array('sub','one','base'));
 $meta['groupscope']  = array('multichoice','_choices' => array('sub','one','base'));
+$meta['groupkey']    = array('string');
 $meta['debug']       = array('onoff');
\ No newline at end of file
diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php
index e3f4bab31..f20b7d2a3 100644
--- a/lib/plugins/authldap/lang/en/settings.php
+++ b/lib/plugins/authldap/lang/en/settings.php
@@ -12,4 +12,7 @@ $lang['binddn']      = 'DN of an ptional bind user if anonymous bind is not suff
 $lang['bindpw']      = 'Password of above user';
 $lang['userscope']   = 'Limit search scope for user search';
 $lang['groupscope']  = 'Limit search scope for group search';
-$lang['debug']       = 'Display additional debug information on errors';
\ No newline at end of file
+$lang['groupkey']    = 'Group member ship from any user attribute (instead of standard AD groups) e.g. group from department or telephone number';
+$lang['debug']       = 'Display additional debug information on errors';
+
+
diff --git a/lib/plugins/authmysql/conf/default.php b/lib/plugins/authmysql/conf/default.php
index ea2cdad72..4add3f57c 100644
--- a/lib/plugins/authmysql/conf/default.php
+++ b/lib/plugins/authmysql/conf/default.php
@@ -1,3 +1,34 @@
  array(0,1,2));
 $meta['forwardClearPass'] = array('onoff');
 $meta['TablesToLock']     = array('array');
diff --git a/lib/plugins/authmysql/lang/en/settings.php b/lib/plugins/authmysql/lang/en/settings.php
index dcdbbb16b..7b409ee1c 100644
--- a/lib/plugins/authmysql/lang/en/settings.php
+++ b/lib/plugins/authmysql/lang/en/settings.php
@@ -4,6 +4,7 @@ $lang['server']           = 'Your MySQL server';
 $lang['user']             = 'MySQL user name';
 $lang['password']         = 'Password for above user';
 $lang['database']         = 'Database to use';
+$lang['charset']          = 'Character set used in database';
 $lang['debug']            = 'Display additional debug information';
 $lang['forwardClearPass'] = 'Pass user passwords as cleartext to the SQL statements below, instead of using the passcrypt option';
 $lang['TablesToLock']     = 'Comma separated list of tables that should be locked on write operations';
diff --git a/lib/plugins/authpgsql/conf/default.php b/lib/plugins/authpgsql/conf/default.php
index 401da80b7..7f78280f9 100644
--- a/lib/plugins/authpgsql/conf/default.php
+++ b/lib/plugins/authpgsql/conf/default.php
@@ -1,3 +1,33 @@
 
Date: Sat, 16 Feb 2013 23:03:01 +0100
Subject: separate default settings from non-existing settings setting type
 read from metadata eqaul to empty string is default 'setting' class (a
 textarea), everything else should be a existing class otherwise
 'setting_no_class' is loaded

---
 lib/plugins/config/settings/config.class.php | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 16be9a689..a3cfae9f8 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -70,9 +70,14 @@ if (!class_exists('configuration')) {
           foreach ($keys as $key) {
             if (isset($this->_metadata[$key])) {
               $class = $this->_metadata[$key][0];
-              $class = ($class && class_exists('setting_'.$class)) ? 'setting_'.$class : 'setting';
-              if ($class=='setting') {
-                $this->setting[] = new setting_no_class($key,$param);
+
+              if($class && class_exists('setting_'.$class)){
+                $class = 'setting_'.$class;
+              } else {
+                if($class != '') {
+                  $this->setting[] = new setting_no_class($key,$param);
+                }
+                $class = 'setting';
               }
 
               $param = $this->_metadata[$key];
-- 
cgit v1.2.3


From 4005b0809260fbd36cb8652c7d726a5ee417c6f6 Mon Sep 17 00:00:00 2001
From: Anika Henke 
Date: Sat, 16 Feb 2013 19:42:38 +0000
Subject: fixed html error in plugin lang file

---
 lib/plugins/authldap/lang/en/settings.php | 4 ++--
 lib/plugins/config/lang/en/intro.txt      | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php
index e3f4bab31..cc9143169 100644
--- a/lib/plugins/authldap/lang/en/settings.php
+++ b/lib/plugins/authldap/lang/en/settings.php
@@ -3,8 +3,8 @@ $lang['server']      = 'Your LDAP server. Either hostname (localhost
Date: Sat, 16 Feb 2013 23:55:52 +0100
Subject: litte fixes

---
 lib/plugins/authldap/lang/en/settings.php  | 2 --
 lib/plugins/authmysql/conf/default.php     | 2 +-
 lib/plugins/authmysql/lang/en/settings.php | 2 +-
 3 files changed, 2 insertions(+), 4 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php
index bca666e9f..0bb397be5 100644
--- a/lib/plugins/authldap/lang/en/settings.php
+++ b/lib/plugins/authldap/lang/en/settings.php
@@ -14,5 +14,3 @@ $lang['userscope']   = 'Limit search scope for user search';
 $lang['groupscope']  = 'Limit search scope for group search';
 $lang['groupkey']    = 'Group member ship from any user attribute (instead of standard AD groups) e.g. group from department or telephone number';
 $lang['debug']       = 'Display additional debug information on errors';
-
-
diff --git a/lib/plugins/authmysql/conf/default.php b/lib/plugins/authmysql/conf/default.php
index 4add3f57c..647f3d96c 100644
--- a/lib/plugins/authmysql/conf/default.php
+++ b/lib/plugins/authmysql/conf/default.php
@@ -2,7 +2,7 @@
 
 $conf['charset']          = 'utf8';
 $conf['server']           = '';
-$conf['user']             ='';
+$conf['user']             = '';
 $conf['password']         = '';
 $conf['database']         = '';
 $conf['debug']            = 0;
diff --git a/lib/plugins/authmysql/lang/en/settings.php b/lib/plugins/authmysql/lang/en/settings.php
index 7b409ee1c..77e4806b9 100644
--- a/lib/plugins/authmysql/lang/en/settings.php
+++ b/lib/plugins/authmysql/lang/en/settings.php
@@ -21,7 +21,7 @@ $lang['addUser']          = 'SQL statement to add a new user';
 $lang['addGroup']         = 'SQL statement to add a new group';
 $lang['addUserGroup']     = 'SQL statment to add a user to an existing group';
 $lang['delGroup']         = 'SQL statement to remove a group';
-$lang['getUserID']        = 'SQL statement to get the primary ey of a user';
+$lang['getUserID']        = 'SQL statement to get the primary key of a user';
 $lang['delUser']          = 'SQL statement to delete a user';
 $lang['delUserRefs']      = 'SQL statement to remove a user from all groups';
 $lang['updateUser']       = 'SQL statement to update a user profile';
-- 
cgit v1.2.3


From 0fc50f81064736071e053d874b60a990fd1af8c2 Mon Sep 17 00:00:00 2001
From: Christopher Smith 
Date: Sun, 17 Feb 2013 15:47:42 +0000
Subject: add property to show disabled plugins, set it to false (to hide by
 default)

---
 lib/plugins/config/settings/config.class.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 5b81be782..46e27654b 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -20,6 +20,7 @@ if (!class_exists('configuration')) {
     var $_metadata = array();      // holds metadata describing the settings
     var $setting = array();        // array of setting objects
     var $locked = false;           // configuration is considered locked if it can't be updated
+    var $show_disabled_plugins = false;
 
     // configuration filenames
     var $_default_files  = array();
@@ -262,7 +263,7 @@ if (!class_exists('configuration')) {
 
     function get_plugin_list() {
       if (is_null($this->_plugin_list)) {
-        $list = plugin_list('',true);     // all plugins, including disabled ones
+        $list = plugin_list('',$this->show_disabled_plugins);
 
         // remove this plugin from the list
         $idx = array_search('config',$list);
-- 
cgit v1.2.3


From aae735fc981470a44856ec34a838c4910ac68062 Mon Sep 17 00:00:00 2001
From: Christopher Smith 
Date: Sun, 17 Feb 2013 16:54:23 +0000
Subject: tidy up authtype setting class (incl. fix issue with auth
 change/logoff occurring when only one auth plugin is enabled and other
 settings are updated)

---
 lib/plugins/config/settings/extra.class.php | 74 +++++++++++++----------------
 1 file changed, 34 insertions(+), 40 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php
index 6998e1fbf..e4b97eb01 100644
--- a/lib/plugins/config/settings/extra.class.php
+++ b/lib/plugins/config/settings/extra.class.php
@@ -43,56 +43,50 @@ if (!class_exists('setting_authtype')) {
   class setting_authtype extends setting_multichoice {
 
     function initialize($default,$local,$protected) {
-	  global $plugin_controller;
+        global $plugin_controller;
 
-      // retrive auth types provided by plugins
-      foreach ($plugin_controller->getList('auth') as $plugin) {
-      	$this->_choices[] = $plugin;
-      }
+        // retrieve auth types provided by plugins
+        foreach ($plugin_controller->getList('auth') as $plugin) {
+            $this->_choices[] = $plugin;
+        }
 
-      parent::initialize($default,$local,$protected);
+        parent::initialize($default,$local,$protected);
     }
 
     function update($input) {
-    	global $plugin_controller;
-
-		// is an update posible?
-    	$mayUpdate = parent::update($input);
-
-    	// is it an auth plugin?
-    	if (in_array($input, $plugin_controller->getList('auth'))) {
-    		// reject disabled plugins
-    		if ($plugin_controller->isdisabled($input)) {
-	    		$this->_error = true;
-	    		msg('Auth type ' . $input . ' is disabled.', -1);
-	    		return false;
-    		}
-
-    		// load the plugin
-	    	$auth_plugin = $plugin_controller->load('auth', $input);
-
-	    	// @TODO: throw an error in plugin controller instead of returning null
-	    	if (is_null($auth_plugin)) {
-	    		$this->_error = true;
-	    		msg('Cannot load Auth Plugin "' . $input . '"', -1);
-	    		return false;
-	    	}
-
-	    	// verify proper instanciation (is this really a plugin?) @TODO use instanceof? impement interface?
-	    	if (is_object($auth_plugin) && !method_exists($auth_plugin, 'getPluginName')) {
-	    		$this->_error = true;
-				msg('Cannot create Auth Plugin "' . $input . '"', -1);
-	    		return false;
-	    	}
-    	}
+        global $plugin_controller;
+
+        // is an update possible/requested?
+        $local = $this->_local;                       // save this, parent::update() may change it
+        if (!parent::update($input)) return false;    // nothing changed or an error caught by parent
+        $this->_local = $local;                       // restore original, more error checking to come
+
+        // attempt to load the plugin
+        $auth_plugin = $plugin_controller->load('auth', $input);
+
+        // @TODO: throw an error in plugin controller instead of returning null
+        if (is_null($auth_plugin)) {
+            $this->_error = true;
+            msg('Cannot load Auth Plugin "' . $input . '"', -1);
+            return false;
+        }
+
+        // verify proper instantiation (is this really a plugin?) @TODO use instanceof? implement interface?
+        if (is_object($auth_plugin) && !method_exists($auth_plugin, 'getPluginName')) {
+            $this->_error = true;
+            msg('Cannot create Auth Plugin "' . $input . '"', -1);
+            return false;
+        }
 
         // did we change the auth type? logout
         global $conf;
         if($conf['authtype'] != $input) {
-    	    msg('Authentication system changed. Please re-login.');
-    	    auth_logoff();
+            msg('Authentication system changed. Please re-login.');
+            auth_logoff();
         }
-    	return true;
+
+        $this->_local = $input;
+        return true;
     }
   }
 }
-- 
cgit v1.2.3


From 22b77eded0c1fe0f6866972d97895a9e9dc26a1f Mon Sep 17 00:00:00 2001
From: Christopher Smith 
Date: Sun, 17 Feb 2013 16:55:12 +0000
Subject: improve comments on settings::update() method

---
 lib/plugins/config/settings/config.class.php | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 46e27654b..8be53b145 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -388,10 +388,12 @@ if (!class_exists('setting')) {
     }
 
     /**
-     *  update setting with user provided value $input
-     *  if value fails error check, save it
+     *  update changed setting with user provided value $input
+     *  - if changed value fails error check, save it to $this->_input (to allow echoing later)
+     *  - if changed value passes error check, set $this->_local to the new value
      *
-     *  @return boolean true if changed, false otherwise (incl. on error)
+     *  @param  mixed   $input   the new value
+     *  @return boolean          true if changed, false otherwise (incl. on error)
      */
     function update($input) {
         if (is_null($input)) return false;
-- 
cgit v1.2.3


From e5f0efe2a3ff34ae70388fe8d068935416174f1c Mon Sep 17 00:00:00 2001
From: Anika Henke 
Date: Sun, 17 Feb 2013 22:52:28 +0000
Subject: improved disabled acl permission styling (FS#2714)

---
 lib/plugins/acl/style.css | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/acl/style.css b/lib/plugins/acl/style.css
index f4277c341..f8574fe58 100644
--- a/lib/plugins/acl/style.css
+++ b/lib/plugins/acl/style.css
@@ -116,7 +116,8 @@ div#acl_manager .aclns {
 }
 
 div#acl_manager label.disabled {
-  color: __text_neu__!important;
+  opacity: .5;
+  cursor: auto;
 }
 
 #acl_manager label {
-- 
cgit v1.2.3


From eda319e6664ad3c786312ffee7ce7cfbfa4eda1c Mon Sep 17 00:00:00 2001
From: Anika Henke 
Date: Sun, 17 Feb 2013 22:55:55 +0000
Subject: removed unnecessary css parts

---
 lib/plugins/acl/style.css | 58 +++++++++++++++++++++++------------------------
 1 file changed, 29 insertions(+), 29 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/acl/style.css b/lib/plugins/acl/style.css
index f8574fe58..d8f0b53f3 100644
--- a/lib/plugins/acl/style.css
+++ b/lib/plugins/acl/style.css
@@ -1,5 +1,5 @@
 
-div#acl_manager div#acl__tree {
+#acl__tree {
     font-size: 90%;
     width: 25%;
     height: 300px;
@@ -8,61 +8,61 @@ div#acl_manager div#acl__tree {
     border: 1px solid __border__;
     text-align: left;
 }
-[dir=rtl] div#acl_manager div#acl__tree {
+[dir=rtl] #acl__tree {
     float: right;
     text-align: right;
 }
 
-div#acl_manager div#acl__tree a.cur {
+#acl__tree a.cur {
     background-color: __highlight__;
     font-weight: bold;
 }
 
-div#acl_manager div#acl__tree ul {
+#acl__tree ul {
     list-style-type: none;
     margin: 0;
     padding: 0;
 }
 
-div#acl_manager div#acl__tree li {
+#acl__tree li {
     padding-left: 1em;
     list-style-image: none;
 }
-[dir=rtl] div#acl_manager div#acl__tree li {
+[dir=rtl] #acl__tree li {
     padding-left: 0em;
     padding-right: 1em;
 }
 
-div#acl_manager div#acl__tree ul img {
+#acl__tree ul img {
     margin-right: 0.25em;
     cursor: pointer;
 }
-[dir=rtl] div#acl_manager div#acl__tree ul img {
+[dir=rtl] #acl__tree ul img {
     margin-left: 0.25em;
     margin-right: 0em;
 }
 
-div#acl_manager div#acl__detail {
+#acl__detail {
     width: 73%;
     height: 300px;
     float: right;
     overflow: auto;
 }
-[dir=rtl] div#acl_manager div#acl__detail {
+[dir=rtl] #acl__detail {
     float: left;
 }
 
-div#acl_manager div#acl__detail fieldset {
+#acl__detail fieldset {
     width: 90%;
 }
 
-div#acl_manager div#acl__detail div#acl__user {
+#acl__detail div#acl__user {
     border: 1px solid __border__;
     padding: 0.5em;
     margin-bottom: 0.6em;
 }
 
-div#acl_manager table.inline {
+#acl_manager table.inline {
     width: 100%;
     margin: 0;
 }
@@ -75,60 +75,60 @@ div#acl_manager table.inline {
     text-align: right;
 }
 
-div#acl_manager .aclgroup {
+#acl_manager .aclgroup {
     background: transparent url(pix/group.png) 0px 1px no-repeat;
     padding: 1px 0px 1px 18px;
 }
-[dir=rtl] div#acl_manager .aclgroup {
+[dir=rtl] #acl_manager .aclgroup {
     background: transparent url(pix/group.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
     display: inline-block; /* needed for IE7 */
 }
 
-div#acl_manager .acluser {
+#acl_manager .acluser {
     background: transparent url(pix/user.png) 0px 1px no-repeat;
     padding: 1px 0px 1px 18px;
 }
-[dir=rtl] div#acl_manager .acluser {
+[dir=rtl] #acl_manager .acluser {
     background: transparent url(pix/user.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
     display: inline-block; /* needed for IE7 */
 }
 
-div#acl_manager .aclpage {
+#acl_manager .aclpage {
     background: transparent url(pix/page.png) 0px 1px no-repeat;
     padding: 1px 0px 1px 18px;
 }
-[dir=rtl] div#acl_manager .aclpage {
+[dir=rtl] #acl_manager .aclpage {
     background: transparent url(pix/page.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
     display: inline-block; /* needed for IE7 */
 }
 
-div#acl_manager .aclns {
+#acl_manager .aclns {
     background: transparent url(pix/ns.png) 0px 1px no-repeat;
     padding: 1px 0px 1px 18px;
 }
-[dir=rtl] div#acl_manager .aclns {
+[dir=rtl] #acl_manager .aclns {
     background: transparent url(pix/ns.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
     display: inline-block; /* needed for IE7 */
 }
 
-div#acl_manager label.disabled {
-  opacity: .5;
-  cursor: auto;
+#acl_manager label.disabled {
+    opacity: .5;
+    cursor: auto;
 }
 
 #acl_manager label {
-  text-align: left;
-  font-weight: normal;
-  display: inline;
+    text-align: left;
+    font-weight: normal;
+    display: inline;
 }
 
 #acl_manager table {
-  margin-left: 10%;
-  width: 80%;
+    margin-left: 10%;
+    width: 80%;
 }
 
 #acl_manager table tr {
-- 
cgit v1.2.3


From c33b315b06b3a52a61cb1ecc2b3beadd4ecd0311 Mon Sep 17 00:00:00 2001
From: Anika Henke 
Date: Mon, 18 Feb 2013 01:08:40 +0000
Subject: removed a bunch of functions which were deprecated in 2005/2006

---
 lib/plugins/config/settings/config.metadata.php | 8 --------
 1 file changed, 8 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index bdbc4311f..22e76a013 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -70,14 +70,6 @@ $config['varname'] = 'conf';     // name of the config variable, sans $
 // this value can be overriden when calling save_settings() method
 $config['heading'] = 'Dokuwiki\'s Main Configuration File - Local Settings';
 
-/* DEPRECATED
-// ---------------[ setting files ]--------------------------------------
-// these values can be string expressions, they will be eval'd before use
-$file['local']     = "DOKU_CONF.'local.php'";            // mandatory (file doesn't have to exist)
-$file['default']   = "DOKU_CONF.'dokuwiki.php'";         // optional
-$file['protected'] = "DOKU_CONF.'local.protected.php'";  // optional
- */
-
 // test value (FIXME, remove before publishing)
 //$meta['test']     = array('multichoice','_choices' => array(''));
 
-- 
cgit v1.2.3


From 07a30891fae578fc908dc88ad4ee02ee336fffe7 Mon Sep 17 00:00:00 2001
From: Anika Henke 
Date: Mon, 18 Feb 2013 01:21:07 +0000
Subject: fixed line endings

---
 lib/plugins/acl/lang/vi/help.txt | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/acl/lang/vi/help.txt b/lib/plugins/acl/lang/vi/help.txt
index 23e258678..816e5ee71 100644
--- a/lib/plugins/acl/lang/vi/help.txt
+++ b/lib/plugins/acl/lang/vi/help.txt
@@ -1,12 +1,12 @@
-=== Trợ giúp nhanh: ===
-
-Trang này giúp bạn thêm hoặc xóa quyền được cấp cho 1 thư mục hoặc trang wiki của bạn.
-
-Của sổ bên trái hiển thị tất cả các thư mục và trang văn bản.
-
-Khung trên đây cho phép bạn xem và sửa quyền của một nhóm hoặc thành viên đã chọn.
-
-Bảng bên dưới hiển thị tất cả các quyền được cấp. Bạn có thể sửa hoặc hóa các quyền đó một cách nhanh chóng.
-
-Đọc [[doku>acl|tài liệu chính thức về ACL]] sẽ giúp bạn hiểu hơn về cách phân quyền ở DokuWiki.
-
+=== Trợ giúp nhanh: ===
+
+Trang này giúp bạn thêm hoặc xóa quyền được cấp cho 1 thư mục hoặc trang wiki của bạn.
+
+Của sổ bên trái hiển thị tất cả các thư mục và trang văn bản.
+
+Khung trên đây cho phép bạn xem và sửa quyền của một nhóm hoặc thành viên đã chọn.
+
+Bảng bên dưới hiển thị tất cả các quyền được cấp. Bạn có thể sửa hoặc hóa các quyền đó một cách nhanh chóng.
+
+Đọc [[doku>acl|tài liệu chính thức về ACL]] sẽ giúp bạn hiểu hơn về cách phân quyền ở DokuWiki.
+
-- 
cgit v1.2.3


From 00d58927261c5bed6f093ca4aa2064a18139a228 Mon Sep 17 00:00:00 2001
From: Michael Hamann 
Date: Wed, 20 Feb 2013 20:26:05 +0100
Subject: Fix remaining missing $INPUT uses FS#2577

This adds $INPUT in all places where it was still missing and available.
$INPUT is now also used in places where using $_REQUEST/... was okay in
order to make the code consistent.
---
 lib/plugins/authad/auth.php       |  5 +++--
 lib/plugins/plugin/admin.php      |  3 ++-
 lib/plugins/revert/admin.php      | 13 +++++++------
 lib/plugins/usermanager/admin.php | 25 +++++++++++++------------
 4 files changed, 25 insertions(+), 21 deletions(-)

(limited to 'lib/plugins')

diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index f651d87a1..6c49eafbb 100644
--- a/lib/plugins/authad/auth.php
+++ b/lib/plugins/authad/auth.php
@@ -71,6 +71,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
      * Constructor
      */
     public function __construct() {
+        global $INPUT;
         parent::__construct();
 
         // we load the config early to modify it a bit here
@@ -99,8 +100,8 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
 
             // we need to simulate a login
             if(empty($_COOKIE[DOKU_COOKIE])) {
-                $_REQUEST['u'] = $_SERVER['REMOTE_USER'];
-                $_REQUEST['p'] = 'sso_only';
+                $INPUT->set('u', $_SERVER['REMOTE_USER']);
+                $INPUT->set('p', 'sso_only');
             }
         }
 
diff --git a/lib/plugins/plugin/admin.php b/lib/plugins/plugin/admin.php
index 8b1ee3c7d..de4de6aef 100644
--- a/lib/plugins/plugin/admin.php
+++ b/lib/plugins/plugin/admin.php
@@ -61,11 +61,12 @@ class admin_plugin_plugin extends DokuWiki_Admin_Plugin {
      * handle user request
      */
     function handle() {
+        global $INPUT;
         // enable direct access to language strings
         $this->setupLocale();
 
 
-        $fn = $_REQUEST['fn'];
+        $fn = $INPUT->param('fn');
         if (is_array($fn)) {
             $this->cmd = key($fn);
             $this->plugin = is_array($fn[$this->cmd]) ? key($fn[$this->cmd]) : null;
diff --git a/lib/plugins/revert/admin.php b/lib/plugins/revert/admin.php
index fcdaa230d..847e38876 100644
--- a/lib/plugins/revert/admin.php
+++ b/lib/plugins/revert/admin.php
@@ -44,15 +44,16 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
      * output appropriate html
      */
     function html() {
+        global $INPUT;
 
         echo $this->plugin_locale_xhtml('intro');
 
         $this->_searchform();
 
-        if(is_array($_REQUEST['revert']) && checkSecurityToken()){
-            $this->_revert($_REQUEST['revert'],$_REQUEST['filter']);
-        }elseif(isset($_REQUEST['filter'])){
-            $this->_list($_REQUEST['filter']);
+        if(is_array($INPUT->param('revert')) && checkSecurityToken()){
+            $this->_revert($INPUT->arr('revert'),$INPUT->str('filter'));
+        }elseif($INPUT->has('filter')){
+            $this->_list($INPUT->str('filter'));
         }
     }
 
@@ -60,10 +61,10 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
      * Display the form for searching spam pages
      */
     function _searchform(){
-        global $lang;
+        global $lang, $INPUT;
         echo '
'; echo ''; - echo ''; + echo ''; echo ' '; echo ' '.$this->getLang('note1').''; echo '


'; diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php index cf8963e64..01f4a4cdb 100644 --- a/lib/plugins/usermanager/admin.php +++ b/lib/plugins/usermanager/admin.php @@ -73,11 +73,12 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { * handle user request */ function handle() { + global $INPUT; if (is_null($this->_auth)) return false; // extract the command and any specific parameters // submit button name is of the form - fn[cmd][param(s)] - $fn = $_REQUEST['fn']; + $fn = $INPUT->param('fn'); if (is_array($fn)) { $cmd = key($fn); @@ -88,8 +89,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { } if ($cmd != "search") { - if (!empty($_REQUEST['start'])) - $this->_start = $_REQUEST['start']; + $this->_start = $INPUT->int('start', 0); $this->_filter = $this->_retrieveFilter(); } @@ -345,6 +345,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { } function _addUser(){ + global $INPUT; if (!checkSecurityToken()) return false; if (!$this->_auth->canDo('addUser')) return false; @@ -353,7 +354,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { if ($this->_auth->canDo('modPass')){ if (empty($pass)){ - if(!empty($_REQUEST['usernotify'])){ + if($INPUT->has('usernotify')){ $pass = auth_pwgen(); } else { msg($this->lang['add_fail'], -1); @@ -393,7 +394,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { msg($this->lang['add_ok'], 1); - if (!empty($_REQUEST['usernotify']) && $pass) { + if ($INPUT->has('usernotify') && $pass) { $this->_notifyUser($user,$pass); } } else { @@ -407,13 +408,13 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { * Delete user */ function _deleteUser(){ - global $conf; + global $conf, $INPUT; if (!checkSecurityToken()) return false; if (!$this->_auth->canDo('delUser')) return false; - $selected = $_REQUEST['delete']; - if (!is_array($selected) || empty($selected)) return false; + $selected = $INPUT->arr('delete'); + if (empty($selected)) return false; $selected = array_keys($selected); if(in_array($_SERVER['REMOTE_USER'], $selected)) { @@ -463,13 +464,13 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { * Modify user (modified user data has been recieved) */ function _modifyUser(){ - global $conf; + global $conf, $INPUT; if (!checkSecurityToken()) return false; if (!$this->_auth->canDo('UserMod')) return false; // get currently valid user data - $olduser = cleanID(preg_replace('/.*:/','',$_REQUEST['userid_old'])); + $olduser = cleanID(preg_replace('/.*:/','',$INPUT->str('userid_old'))); $oldinfo = $this->_auth->getUserData($olduser); // get new user data subject to change @@ -494,7 +495,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { } // generate password if left empty and notification is on - if(!empty($_REQUEST['usernotify']) && empty($newpass)){ + if($INPUT->has('usernotify') && empty($newpass)){ $newpass = auth_pwgen(); } @@ -510,7 +511,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) { msg($this->lang['update_ok'],1); - if (!empty($_REQUEST['usernotify']) && $newpass) { + if ($INPUT->has('usernotify') && $newpass) { $notify = empty($changes['user']) ? $olduser : $newuser; $this->_notifyUser($notify,$newpass); } -- cgit v1.2.3 From d00152be83dd30024aa5dd89b9ad9a70eb25d80f Mon Sep 17 00:00:00 2001 From: Lorenzo Radaelli Date: Sun, 24 Feb 2013 10:36:18 +0100 Subject: Italian language update --- lib/plugins/authad/lang/it/settings.php | 5 +++++ lib/plugins/authldap/lang/it/settings.php | 5 +++++ lib/plugins/authmysql/lang/it/settings.php | 5 +++++ lib/plugins/authpgsql/lang/it/settings.php | 5 +++++ lib/plugins/config/lang/it/lang.php | 1 + 5 files changed, 21 insertions(+) create mode 100644 lib/plugins/authad/lang/it/settings.php create mode 100644 lib/plugins/authldap/lang/it/settings.php create mode 100644 lib/plugins/authmysql/lang/it/settings.php create mode 100644 lib/plugins/authpgsql/lang/it/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/it/settings.php b/lib/plugins/authad/lang/it/settings.php new file mode 100644 index 000000000..10ae72f87 --- /dev/null +++ b/lib/plugins/authad/lang/it/settings.php @@ -0,0 +1,5 @@ + Date: Sun, 24 Feb 2013 10:37:45 +0100 Subject: Simplified Chinese language update --- lib/plugins/authad/lang/zh/settings.php | 18 ++++++++++++++ lib/plugins/authldap/lang/zh/settings.php | 20 +++++++++++++++ lib/plugins/authmysql/lang/zh/settings.php | 40 ++++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/zh/settings.php | 37 +++++++++++++++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 lib/plugins/authad/lang/zh/settings.php create mode 100644 lib/plugins/authldap/lang/zh/settings.php create mode 100644 lib/plugins/authmysql/lang/zh/settings.php create mode 100644 lib/plugins/authpgsql/lang/zh/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/zh/settings.php b/lib/plugins/authad/lang/zh/settings.php new file mode 100644 index 000000000..9fd3c4e35 --- /dev/null +++ b/lib/plugins/authad/lang/zh/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['account_suffix'] = '您的账户后缀。例如 @my.domain.org'; +$lang['base_dn'] = '您的基本分辨名。例如 DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = '逗号分隔的域名控制器列表。例如 srv1.domain.org,srv2.domain.org'; +$lang['ad_username'] = '一个活动目录的特权用户,可以查看其他所有用户的数据。可选,但对某些活动例如发送订阅邮件是必须的。'; +$lang['ad_password'] = '上述用户的密码。'; +$lang['sso'] = '是否使用经由 Kerberos 和 NTLM 的 Single-Sign-On?'; +$lang['real_primarygroup'] = ' 是否解析真实的主要组,而不是假设为“域用户” (较慢)'; +$lang['use_ssl'] = '使用 SSL 连接?如果是,不要激活下面的 TLS。'; +$lang['use_tls'] = '使用 TLS 连接?如果是 ,不要激活上面的 SSL。'; +$lang['debug'] = '有错误时显示额外的调试信息?'; +$lang['expirywarn'] = '提前多少天警告用户密码即将到期。0 则禁用。'; +$lang['additional'] = '需要从用户数据中获取的额外 AD 属性的列表,以逗号分隔。用于某些插件。'; diff --git a/lib/plugins/authldap/lang/zh/settings.php b/lib/plugins/authldap/lang/zh/settings.php new file mode 100644 index 000000000..e84511b42 --- /dev/null +++ b/lib/plugins/authldap/lang/zh/settings.php @@ -0,0 +1,20 @@ + + */ +$lang['server'] = '您的 LDAP 服务器。填写主机名 (localhost) 或者完整的 URL (ldap://server.tld:389)'; +$lang['port'] = 'LDAP 服务器端口 (如果上面没有给出完整的 URL)'; +$lang['usertree'] = '何处查找用户账户。例如 ou=People, dc=server, dc=tld'; +$lang['grouptree'] = '何处查找用户组。例如 ou=Group, dc=server, dc=tld'; +$lang['userfilter'] = '用于搜索用户账户的 LDAP 筛选器。例如 (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = '用于搜索组的 LDAP 筛选器。例如 (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = '使用的协议版本。您或许需要设置为 3'; +$lang['starttls'] = '使用 TLS 连接?'; +$lang['referrals'] = '是否允许引用 (referrals)?'; +$lang['binddn'] = '一个可选的绑定用户的 DN (如果匿名绑定不满足要求)。例如 Eg. cn=admin, dc=my, dc=home'; +$lang['bindpw'] = '上述用户的密码'; +$lang['userscope'] = '限制用户搜索的范围'; +$lang['groupscope'] = '限制组搜索的范围'; +$lang['debug'] = '有错误时显示额外的调试信息'; diff --git a/lib/plugins/authmysql/lang/zh/settings.php b/lib/plugins/authmysql/lang/zh/settings.php new file mode 100644 index 000000000..43cfbb3c0 --- /dev/null +++ b/lib/plugins/authmysql/lang/zh/settings.php @@ -0,0 +1,40 @@ + + */ +$lang['server'] = '您的 MySQL 服务器'; +$lang['user'] = 'MySQL 用户名'; +$lang['password'] = '上述用户的密码'; +$lang['database'] = '使用的数据库'; +$lang['debug'] = '显示额外调试信息'; +$lang['forwardClearPass'] = '将用户密码以明文形式传送给下面的 SQL 语句,而不使用 passcrypt 密码加密选项'; +$lang['TablesToLock'] = '在写操作时需要锁定的数据表列表,以逗号分隔'; +$lang['checkPass'] = '检查密码的 SQL 语句'; +$lang['getUserInfo'] = '获取用户信息的 SQL 语句'; +$lang['getGroups'] = '或许用户的组成员身份的 SQL 语句'; +$lang['getUsers'] = '列出所有用户的 SQL 语句'; +$lang['FilterLogin'] = '根据登录名筛选用户的 SQL 子句'; +$lang['FilterName'] = '根据全名筛选用户的 SQL 子句'; +$lang['FilterEmail'] = '根据电子邮件地址筛选用户的 SQL 子句'; +$lang['FilterGroup'] = '根据组成员身份筛选用户的 SQL 子句'; +$lang['SortOrder'] = '对用户排序的 SQL 子句'; +$lang['addUser'] = '添加新用户的 SQL 语句'; +$lang['addGroup'] = '添加新组的 SQL 语句'; +$lang['addUserGroup'] = '将用户添加到现有组的 SQL 语句'; +$lang['delGroup'] = '删除组的 SQL 语句'; +$lang['getUserID'] = '获取用户主键的 SQL 语句'; +$lang['delUser'] = '删除用户的 SQL 语句'; +$lang['delUserRefs'] = '从所有组中删除一个用户的 SQL 语句'; +$lang['updateUser'] = '更新用户信息的 SQL 语句'; +$lang['UpdateLogin'] = '更新用户登录名的 Update 子句'; +$lang['UpdatePass'] = '更新用户密码的 Update 子句'; +$lang['UpdateEmail'] = '更新用户电子邮件地址的 Update 子句'; +$lang['UpdateName'] = '更新用户全名的 Update 子句'; +$lang['UpdateTarget'] = '更新时识别用户的 Limit 子句'; +$lang['delUserGroup'] = '从指定组删除用户的 SQL 语句'; +$lang['getGroupID'] = '获取指定组主键的 SQL 语句'; +$lang['debug_o_0'] = '无'; +$lang['debug_o_1'] = '仅在有错误时'; +$lang['debug_o_2'] = '所有 SQL 查询'; diff --git a/lib/plugins/authpgsql/lang/zh/settings.php b/lib/plugins/authpgsql/lang/zh/settings.php new file mode 100644 index 000000000..dc7223d89 --- /dev/null +++ b/lib/plugins/authpgsql/lang/zh/settings.php @@ -0,0 +1,37 @@ + + */ +$lang['server'] = '您的 PostgreSQL 服务器'; +$lang['port'] = '您的 PostgreSQL 服务器端口'; +$lang['user'] = 'PostgreSQL 用户名'; +$lang['password'] = '上述用户的密码'; +$lang['database'] = '使用的数据库'; +$lang['debug'] = '显示额外调试信息'; +$lang['forwardClearPass'] = '将用户密码以明文形式传送给下面的 SQL 语句,而不使用 passcrypt 密码加密选项'; +$lang['checkPass'] = '检查密码的 SQL 语句'; +$lang['getUserInfo'] = '获取用户信息的 SQL 语句'; +$lang['getGroups'] = '获取用户的组成员身份的 SQL 语句'; +$lang['getUsers'] = '列出所有用户的 SQL 语句'; +$lang['FilterLogin'] = '根据登录名筛选用户的 SQL 子句'; +$lang['FilterName'] = '根据全名筛选用户的 SQL 子句'; +$lang['FilterEmail'] = '根据电子邮件地址筛选用户的 SQL 子句'; +$lang['FilterGroup'] = '根据组成员身份筛选用户的 SQL 子句'; +$lang['SortOrder'] = '对用户排序的 SQL 子句'; +$lang['addUser'] = '添加新用户的 SQL 语句'; +$lang['addGroup'] = '添加新组的 SQL 语句'; +$lang['addUserGroup'] = '将用户添加到现有组的 SQL 语句'; +$lang['delGroup'] = '删除组的 SQL 语句'; +$lang['getUserID'] = '获取用户主键的 SQL 语句'; +$lang['delUser'] = '删除用户的 SQL 语句'; +$lang['delUserRefs'] = '从所有组中删除一个用户的 SQL 语句'; +$lang['updateUser'] = '更新用户信息的 SQL 语句'; +$lang['UpdateLogin'] = '更新用户登录名的 Update 子句'; +$lang['UpdatePass'] = '更新用户密码的 Update 子句'; +$lang['UpdateEmail'] = '更新用户电子邮件地址的 Update 子句'; +$lang['UpdateName'] = '更新用户全名的 Update 子句'; +$lang['UpdateTarget'] = '更新时识别用户的 Limit 子句'; +$lang['delUserGroup'] = '从指定组删除用户的 SQL 语句'; +$lang['getGroupID'] = '获取指定组主键的 SQL 语句'; -- cgit v1.2.3 From 338ac38c748d94f32ca394dc604dda97ce6762e3 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 24 Feb 2013 10:39:52 +0100 Subject: fixed typos --- lib/plugins/authldap/lang/en/settings.php | 4 ++-- lib/plugins/authpgsql/lang/en/settings.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php index 0bb397be5..ddedf8ae3 100644 --- a/lib/plugins/authldap/lang/en/settings.php +++ b/lib/plugins/authldap/lang/en/settings.php @@ -1,14 +1,14 @@ localhost) or full qualified URL (ldap://server.tld:389)'; $lang['port'] = 'LDAP server port if no full URL was given above'; -$lang['usertree'] = 'Where to finde the user accounts. Eg. ou=People, dc=server, dc=tld'; +$lang['usertree'] = 'Where to find the user accounts. Eg. ou=People, dc=server, dc=tld'; $lang['grouptree'] = 'Where to find the user groups. Eg. ou=Group, dc=server, dc=tld'; $lang['userfilter'] = 'LDAP filter to search for user accounts. Eg. (&(uid=%{user})(objectClass=posixAccount))'; $lang['groupfilter'] = 'LDAP filter to search for groups. Eg. (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; $lang['version'] = 'The protocol version to use. You may need to set this to 3'; $lang['starttls'] = 'Use TLS connections?'; $lang['referrals'] = 'Shall referrals be followed?'; -$lang['binddn'] = 'DN of an ptional bind user if anonymous bind is not sufficient. Eg. cn=admin, dc=my, dc=home'; +$lang['binddn'] = 'DN of an optional bind user if anonymous bind is not sufficient. Eg. cn=admin, dc=my, dc=home'; $lang['bindpw'] = 'Password of above user'; $lang['userscope'] = 'Limit search scope for user search'; $lang['groupscope'] = 'Limit search scope for group search'; diff --git a/lib/plugins/authpgsql/lang/en/settings.php b/lib/plugins/authpgsql/lang/en/settings.php index 74a1c1cc9..8c048fa0f 100644 --- a/lib/plugins/authpgsql/lang/en/settings.php +++ b/lib/plugins/authpgsql/lang/en/settings.php @@ -20,7 +20,7 @@ $lang['addUser'] = 'SQL statement to add a new user'; $lang['addGroup'] = 'SQL statement to add a new group'; $lang['addUserGroup'] = 'SQL statment to add a user to an existing group'; $lang['delGroup'] = 'SQL statement to remove a group'; -$lang['getUserID'] = 'SQL statement to get the primary ey of a user'; +$lang['getUserID'] = 'SQL statement to get the primary key of a user'; $lang['delUser'] = 'SQL statement to delete a user'; $lang['delUserRefs'] = 'SQL statement to remove a user from all groups'; $lang['updateUser'] = 'SQL statement to update a user profile'; -- cgit v1.2.3 From e0d6578c4fcc8130316f82645446333b06849a0e Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Mon, 18 Feb 2013 17:32:13 +0000 Subject: fix security caution for 'remote' setting (was 'xmlrpc') --- lib/plugins/config/settings/config.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php index e5e09d8f8..8eb99284d 100644 --- a/lib/plugins/config/settings/config.class.php +++ b/lib/plugins/config/settings/config.class.php @@ -370,7 +370,7 @@ if (!class_exists('setting')) { var $_cautionList = array( 'basedir' => 'danger', 'baseurl' => 'danger', 'savedir' => 'danger', 'cookiedir' => 'danger', 'useacl' => 'danger', 'authtype' => 'danger', 'superuser' => 'danger', 'userewrite' => 'danger', 'start' => 'warning', 'camelcase' => 'warning', 'deaccent' => 'warning', 'sepchar' => 'warning', 'compression' => 'warning', 'xsendfile' => 'warning', 'renderer_xhtml' => 'warning', 'fnencode' => 'warning', - 'allowdebug' => 'security', 'htmlok' => 'security', 'phpok' => 'security', 'iexssprotect' => 'security', 'xmlrpc' => 'security', 'fullpath' => 'security' + 'allowdebug' => 'security', 'htmlok' => 'security', 'phpok' => 'security', 'iexssprotect' => 'security', 'remote' => 'security', 'fullpath' => 'security' ); function setting($key, $params=null) { -- cgit v1.2.3 From 6535e29c55fe997fa55a4f755bff8a41fbd9d525 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 1 Mar 2013 15:11:23 +0100 Subject: fixed loading of old configuration for auth plugins --- lib/plugins/auth.php | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php index c14a04dfb..ec8ed7e58 100644 --- a/lib/plugins/auth.php +++ b/lib/plugins/auth.php @@ -9,8 +9,8 @@ if(!defined('DOKU_INC')) die(); * all auth classes should inherit from this class * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) - * @author Chris Smith - * @author Jan Schumann + * @author Chris Smith + * @author Jan Schumann */ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { public $success = true; @@ -21,18 +21,18 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * in the constructor. */ protected $cando = array( - 'addUser' => false, // can Users be created? - 'delUser' => false, // can Users be deleted? - 'modLogin' => false, // can login names be changed? - 'modPass' => false, // can passwords be changed? - 'modName' => false, // can real names be changed? - 'modMail' => false, // can emails be changed? - 'modGroups' => false, // can groups be changed? - 'getUsers' => false, // can a (filtered) list of users be retrieved? - 'getUserCount'=> false, // can the number of users be retrieved? - 'getGroups' => false, // can a list of available groups be retrieved? - 'external' => false, // does the module do external auth checking? - 'logout' => true, // can the user logout again? (eg. not possible with HTTP auth) + 'addUser' => false, // can Users be created? + 'delUser' => false, // can Users be deleted? + 'modLogin' => false, // can login names be changed? + 'modPass' => false, // can passwords be changed? + 'modName' => false, // can real names be changed? + 'modMail' => false, // can emails be changed? + 'modGroups' => false, // can groups be changed? + 'getUsers' => false, // can a (filtered) list of users be retrieved? + 'getUserCount' => false, // can the number of users be retrieved? + 'getGroups' => false, // can a list of available groups be retrieved? + 'external' => false, // does the module do external auth checking? + 'logout' => true, // can the user logout again? (eg. not possible with HTTP auth) ); /** @@ -102,7 +102,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * example for enforcing a user name schema. * * @author Gabriel Birke - * @param string $type Modification type ('create', 'modify', 'delete') + * @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 */ @@ -162,7 +162,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * The function needs to set some globals needed by * DokuWiki like auth_login() does. * - * @see auth_login() + * @see auth_login() * @author Andreas Gohr * * @param string $user Username @@ -425,16 +425,17 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin { * * @deprecated 2012-11-09 */ - public function loadConfig(){ + public function loadConfig() { global $conf; - $plugin = $this->getPluginName(); + $plugin = $this->getPluginName(); + $oldname = preg_replace('/^auth/', '', $plugin); $default = $this->readDefaultSettings(); $oldconf = array(); - if(isset($conf['auth'][$plugin])) $oldconf = (array) $conf['auth'][$plugin]; + if(isset($conf['auth'][$oldname])) $oldconf = (array) $conf['auth'][$oldname]; + $conf['plugin'][$plugin] = array_merge($default, $oldconf, (array) $conf['plugin'][$plugin]); - $conf['plugin'][$plugin] = array_merge($default, $oldconf, $conf['plugin'][$plugin]); - $this->conf =& $conf['plugin'][$plugin]; + $this->conf =& $conf['plugin'][$plugin]; $this->configloaded = true; } } -- cgit v1.2.3 From 03583750eb3b0245839ba46c1b1fb25eac66f3a0 Mon Sep 17 00:00:00 2001 From: Kiril LastName Date: Wed, 6 Mar 2013 23:10:47 +0200 Subject: Bulgarian language update --- lib/plugins/authad/lang/bg/settings.php | 18 ++++++++++++++++++ lib/plugins/authldap/lang/bg/settings.php | 19 +++++++++++++++++++ lib/plugins/authmysql/lang/bg/settings.php | 17 +++++++++++++++++ lib/plugins/authpgsql/lang/bg/settings.php | 12 ++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 lib/plugins/authad/lang/bg/settings.php create mode 100644 lib/plugins/authldap/lang/bg/settings.php create mode 100644 lib/plugins/authmysql/lang/bg/settings.php create mode 100644 lib/plugins/authpgsql/lang/bg/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/bg/settings.php b/lib/plugins/authad/lang/bg/settings.php new file mode 100644 index 000000000..d63331078 --- /dev/null +++ b/lib/plugins/authad/lang/bg/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['account_suffix'] = 'Наставка на акаунта Ви. Например @някакъв.домейн.org'; +$lang['base_dn'] = 'Вашият основен DN. Например DC=моят,DC=домейн,DC=org'; +$lang['domain_controllers'] = 'Domain controller списък, разделете сървърите със запетая. Например сървър1.домейн.org,сървър2.домейн.org'; +$lang['ad_username'] = 'Привилегирован Active Directory потребител с достъп до данните на останалите потребители. Не е задължително, но е необходимо за някои функционалности като изпращането на имейл за абонаменти.'; +$lang['ad_password'] = 'Паролата на горния потребител.'; +$lang['sso'] = 'Да се ползва ли еднократно вписване чрез Kerberos или NTLM?'; +$lang['real_primarygroup'] = 'Да се извлича ли истинската група вместо да се предполага "Domain Users" (по-бавно)'; +$lang['use_ssl'] = 'Ползване на SSL свързаност? Не отбелязвайте TLS (по-долу) ако включите опцията.'; +$lang['use_tls'] = 'Ползване на TLS свързаност? Не отбелязвайте SSL (по-горе) ако включите опцията.'; +$lang['debug'] = 'Показване на допълнителна debug информация при грешка?'; +$lang['expirywarn'] = 'Предупреждаване на потребителите Х дни преди изтичане валидността на паролата им. Въведете 0 за изключване.'; +$lang['additional'] = 'Списък с допълнителни AD атрибути за извличане от потребителските данни (разделяйте ги със запетая). Ползва се от няколко приставки.'; \ No newline at end of file diff --git a/lib/plugins/authldap/lang/bg/settings.php b/lib/plugins/authldap/lang/bg/settings.php new file mode 100644 index 000000000..644672ca7 --- /dev/null +++ b/lib/plugins/authldap/lang/bg/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['server'] = 'Вашият LDAP сървър. Име на хоста (localhost) или целият URL адрес (ldap://сървър.tld:389)'; +$lang['port'] = 'Порт на LDAP сървъра, ако не сте въвели целия URL адрес по-горе'; +$lang['usertree'] = 'Къде да се търси за потребителски акаунти. Например ou=People, dc=server, dc=tld'; +$lang['grouptree'] = 'Къде да се търси за потребителски групи. Например ou=Group, dc=server, dc=tld'; +$lang['userfilter'] = 'LDAP филтър за търсене на потребителски акаунти. Например (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = 'LDAP филтър за търсене на потребителски групи. Например (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = 'Коя версия на протокола да се ползва? Вероятно ще се наложи да зададете 3'; +$lang['starttls'] = 'Ползване на TLS свързаност?'; +$lang['referrals'] = 'Да бъдат ли следвани препратките (препращанията)?'; +$lang['bindpw'] = 'Парола за горния потребител'; +$lang['userscope'] = 'Ограничаване на обхвата за търсене на потребители'; +$lang['groupscope'] = 'Ограничаване на обхвата за търсене на потребителски групи'; +$lang['debug'] = 'Показване на допълнителна debug информация при грешка'; \ No newline at end of file diff --git a/lib/plugins/authmysql/lang/bg/settings.php b/lib/plugins/authmysql/lang/bg/settings.php new file mode 100644 index 000000000..fcc7f625d --- /dev/null +++ b/lib/plugins/authmysql/lang/bg/settings.php @@ -0,0 +1,17 @@ + + */ +$lang['server'] = 'Вашият MySQL сървър'; +$lang['user'] = 'MySQL потребителско име'; +$lang['password'] = 'Парола за горния потребител'; +$lang['database'] = 'Име на базата от данни'; +$lang['charset'] = 'Набор от знаци, който се ползва в базата от данни'; +$lang['debug'] = 'Показване на допълнителна debug информация'; + + +$lang['debug_o_0'] = 'не'; +$lang['debug_o_1'] = 'само при грешка'; +$lang['debug_o_2'] = 'за всяко SQL запитване'; \ No newline at end of file diff --git a/lib/plugins/authpgsql/lang/bg/settings.php b/lib/plugins/authpgsql/lang/bg/settings.php new file mode 100644 index 000000000..0defdc4ff --- /dev/null +++ b/lib/plugins/authpgsql/lang/bg/settings.php @@ -0,0 +1,12 @@ + + */ +$lang['server'] = 'Вашият PostgreSQL сървър'; +$lang['port'] = 'Порт за PostgreSQL сървъра'; +$lang['user'] = 'PostgreSQL потребител'; +$lang['password'] = 'Парола за горния потребител'; +$lang['database'] = 'Име на базата от данни'; +$lang['debug'] = 'Показване на допълнителна debug информация'; \ No newline at end of file -- cgit v1.2.3 From 19ff1b0b4db62e68869a2b375ae736b4c7a1fe65 Mon Sep 17 00:00:00 2001 From: Anika Henke Date: Sat, 9 Mar 2013 13:47:53 +0000 Subject: fixed use of removed plugin function in revert plugin (FS#2744) --- lib/plugins/revert/admin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/revert/admin.php b/lib/plugins/revert/admin.php index 847e38876..ccad6e9de 100644 --- a/lib/plugins/revert/admin.php +++ b/lib/plugins/revert/admin.php @@ -46,7 +46,7 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin { function html() { global $INPUT; - echo $this->plugin_locale_xhtml('intro'); + echo $this->locale_xhtml('intro'); $this->_searchform(); -- cgit v1.2.3 From 5b84f8e9c9749b424f3813f7126245330a7deb1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A5=E5=90=91=E5=B0=8F=E9=83=8E?= Date: Mon, 11 Mar 2013 15:33:07 +0100 Subject: Traditional chinese language update --- lib/plugins/authad/lang/zh-tw/settings.php | 18 ++++++++++++ lib/plugins/authldap/lang/zh-tw/settings.php | 21 ++++++++++++++ lib/plugins/authmysql/lang/zh-tw/settings.php | 41 +++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/zh-tw/settings.php | 37 ++++++++++++++++++++++++ lib/plugins/config/lang/zh-tw/lang.php | 26 ++++++++--------- lib/plugins/popularity/lang/zh-tw/intro.txt | 4 +-- lib/plugins/popularity/lang/zh-tw/lang.php | 2 +- lib/plugins/revert/lang/zh-tw/lang.php | 2 +- lib/plugins/usermanager/lang/zh-tw/lang.php | 4 +-- 9 files changed, 136 insertions(+), 19 deletions(-) create mode 100644 lib/plugins/authad/lang/zh-tw/settings.php create mode 100644 lib/plugins/authldap/lang/zh-tw/settings.php create mode 100644 lib/plugins/authmysql/lang/zh-tw/settings.php create mode 100644 lib/plugins/authpgsql/lang/zh-tw/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/zh-tw/settings.php b/lib/plugins/authad/lang/zh-tw/settings.php new file mode 100644 index 000000000..e38a2c007 --- /dev/null +++ b/lib/plugins/authad/lang/zh-tw/settings.php @@ -0,0 +1,18 @@ +@my.domain.org'; +$lang['base_dn'] = '您的基本識別名。如: DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = '以逗號分隔的域名控制器列表。如: srv1.domain.org,srv2.domain.org'; +$lang['ad_username'] = 'Active Directory 的特權使用者,可以查看所有使用者的數據。(非必要,但對發送訂閱郵件等活動來說,這是必須的。)'; +$lang['ad_password'] = '上述使用者的密碼。'; +$lang['sso'] = '是否使用 Kerberos 或 NTLM 的單一登入系統 (Single-Sign-On)?'; +$lang['real_primarygroup'] = '是否視作真正的主要群組,而不是假設為網域使用者 (比較慢)'; +$lang['use_ssl'] = '使用 SSL 連接嗎?如果要使用,請不要啟用下方的 TLS。'; +$lang['use_tls'] = '使用 TLS 連接嗎?如果要使用,請不要啟用上方的 SSL。'; +$lang['debug'] = '有錯誤時,顯示額外除錯資訊嗎?'; +$lang['expirywarn'] = '提前多少天警告使用者密碼即將到期。輸入0表示停用。'; +$lang['additional'] = '從使用者數據中取得額外 AD 屬性列表,以供某些附加元件使用。列表以逗號分隔。'; diff --git a/lib/plugins/authldap/lang/zh-tw/settings.php b/lib/plugins/authldap/lang/zh-tw/settings.php new file mode 100644 index 000000000..e93190516 --- /dev/null +++ b/lib/plugins/authldap/lang/zh-tw/settings.php @@ -0,0 +1,21 @@ +localhost) 或完整的 URL (ldap://server.tld:389)'; +$lang['port'] = 'LDAP 伺服器端口 (若上方沒填寫完整的 URL)'; +$lang['usertree'] = '到哪裏尋找使用者帳號?如: ou=People, dc=server, dc=tld'; +$lang['grouptree'] = '到哪裏尋找使用者群組?如: ou=Group, dc=server, dc=tld'; +$lang['userfilter'] = '用於搜索使用者賬號的 LDAP 篩選器。如: (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = '用於搜索群組的 LDAP 篩選器。例如 (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = '使用的通訊協定版本。您可能要設置為 3'; +$lang['starttls'] = '使用 TLS 連接嗎?'; +$lang['referrals'] = '是否允許引用 (referrals)?'; +$lang['binddn'] = '非必要綁定使用者 (optional bind user) 的 DN (匿名綁定不能滿足要求時使用)。如: cn=admin, dc=my, dc=home'; +$lang['bindpw'] = '上述使用者的密碼'; +$lang['userscope'] = '限制使用者搜索的範圍'; +$lang['groupscope'] = '限制群組搜索的範圍'; +$lang['groupkey'] = '以其他使用者屬性 (而非標準 AD 群組) 來把使用者分組,例如以部門或電話號碼分類'; +$lang['debug'] = '有錯誤時,顯示額外除錯資訊'; diff --git a/lib/plugins/authmysql/lang/zh-tw/settings.php b/lib/plugins/authmysql/lang/zh-tw/settings.php new file mode 100644 index 000000000..95d068150 --- /dev/null +++ b/lib/plugins/authmysql/lang/zh-tw/settings.php @@ -0,0 +1,41 @@ +(不需要請停用!)'; $lang['recent'] = '最近更新'; $lang['recent_days'] = '儲存多少天內的變更'; -$lang['breadcrumbs'] = '導覽鏈數量'; -$lang['youarehere'] = '顯示階層式導覽鏈'; +$lang['breadcrumbs'] = '導覽路徑數量。輸入0表示停用。'; +$lang['youarehere'] = '顯示階層式導覽路徑 (若要用此功能,建議停用上方的選項)'; $lang['fullpath'] = '顯示完整的路徑於頁面底部'; $lang['typography'] = '進行字元替換'; $lang['dformat'] = '日期格式 (參見 PHP 的 strftime 函數)'; @@ -71,7 +71,7 @@ $lang['maxtoclevel'] = '目錄表顯示的最大層級'; $lang['maxseclevel'] = '可編輯段落的最大層級'; $lang['camelcase'] = '對連結使用 CamelCase'; $lang['deaccent'] = '清理頁面名稱'; -$lang['useheading'] = '使用第一個標題作為頁面名稱'; +$lang['useheading'] = '使用第一個標題作頁面名稱'; $lang['sneaky_index'] = '預設情況下,DokuWiki 會在索引頁會顯示所有分類名稱。啟用此選項,會隱藏使用者沒有閱讀權限的頁面,但也可能將他可以閱讀的子頁面一併隱藏。在特定 ACL 設定下,這可能導致索引無法使用。'; $lang['hidepages'] = '隱藏匹配的界面 (正規式)'; $lang['useacl'] = '使用存取控制名單'; @@ -121,7 +121,7 @@ $lang['registernotify'] = '寄送新使用者註冊資訊到這個電郵 $lang['mailfrom'] = '自動發送郵件時使用的郵件地址'; $lang['mailprefix'] = '自動發送郵件時使用的標題前綴'; $lang['htmlmail'] = '發送更加美觀,但體積會更大的 HTML 多部份電郵。若停用它,表示只發送純文字電郵。'; -$lang['sitemap'] = '產生 Google 站台地圖 (以多少天計算) 。輸入0表示停用'; +$lang['sitemap'] = '產生 Google 網站地圖 (以多少天計算) 。輸入0表示停用'; $lang['rss_type'] = 'XML feed 類型'; $lang['rss_linkto'] = 'XML feed 連結到'; $lang['rss_content'] = 'XML feed 項目中顯示什麼呢?'; @@ -130,7 +130,7 @@ $lang['rss_show_summary'] = '於標題中顯示簡要的 XML feed'; $lang['rss_media'] = '在 XML feed 中應列出哪些變更?'; $lang['updatecheck'] = '檢查更新與安全性警告?DokuWiki 需要聯繫 update.dokuwiki.org 才能使用此功能。'; $lang['userewrite'] = '使用好看的 URL'; -$lang['useslash'] = '在 URL 中使用斜線作為分類名稱的分隔字元'; +$lang['useslash'] = '在 URL 中使用斜線作分類名稱的分隔字元'; $lang['sepchar'] = '頁面名稱中單字的分隔字元'; $lang['canonical'] = '使用最典型的 URL'; $lang['fnencode'] = '非 ASCII 文件名稱的編輯方法。'; @@ -140,12 +140,12 @@ $lang['gzip_output'] = '對 xhtml 使用 gzip 內容編碼'; $lang['compress'] = '壓縮 CSS 與 JavaScript 的輸出'; $lang['cssdatauri'] = '假如 CSS 中所引用的圖片小於該數字大小(bytes),圖片將被直接嵌入 CSS 中,以減少 HTTP Request 的發送。 IE 7 及以下的版本並不支援此功能。推薦把此數值設定成 400600 bytes 之間。若輸入 0 則停用此功能。'; $lang['send404'] = '存取不存在的頁面時送出 "HTTP 404/Page Not Found"'; -$lang['broken_iua'] = 'ignore_user_abort 功能失效了?這有可能導致搜索索引不可用。IIS+PHP/CGI 已損壞。請參閱 Bug 852 獲取更多信息。'; -$lang['xsendfile'] = '使用 X-Sendfile 頭讓服務器發送狀態文件?您的服務器需要支持該功能。'; -$lang['renderer_xhtml'] = '主要wiki輸出 (xhtml) 的渲染器'; +$lang['broken_iua'] = 'ignore_user_abort 功能失效了?這有可能導致搜索索引不可用。IIS+PHP/CGI 已損壞。請參閱 Bug 852 獲取更多訊息。'; +$lang['xsendfile'] = '使用 X-Sendfile 頭讓網頁伺服器發送狀態文件?您的網頁伺服器需要支持該功能。'; +$lang['renderer_xhtml'] = '主要 wiki 輸出 (xhtml) 的渲染器'; $lang['renderer__core'] = '%s (dokuwiki 核心)'; $lang['renderer__plugin'] = '%s (附加元件)'; -$lang['dnslookups'] = 'Dokuwiki 將查詢使用者編輯頁面的遠程 IP 位址主機名稱。若您的 DNS 服務器速度較慢、失效,或者您不想要此功能,请停用此選項'; +$lang['dnslookups'] = 'Dokuwiki 將查詢使用者編輯頁面的遠程 IP 位址主機名稱。若您的 DNS 伺服器速度較慢、失效,或者您不想要此功能,请停用此選項'; $lang['proxy____host'] = 'Proxy 伺服器名稱'; $lang['proxy____port'] = 'Proxy 連接埠'; $lang['proxy____user'] = 'Proxy 使用者名稱'; @@ -188,7 +188,7 @@ $lang['compression_o_0'] = '無'; $lang['compression_o_gz'] = 'gzip'; $lang['compression_o_bz2'] = 'bz2'; $lang['xsendfile_o_0'] = '不使用'; -$lang['xsendfile_o_1'] = '專有 lighttpd 標頭 (1.5 發布前)'; +$lang['xsendfile_o_1'] = '專有 lighttpd 標頭 (1.5 發佈前)'; $lang['xsendfile_o_2'] = '標準 X-Sendfile 標頭'; $lang['xsendfile_o_3'] = '專有 Nginx X-Accel-Redirect 標頭'; $lang['showuseras_o_loginname'] = '登入名稱'; diff --git a/lib/plugins/popularity/lang/zh-tw/intro.txt b/lib/plugins/popularity/lang/zh-tw/intro.txt index 2a6337237..5ba42c5b9 100644 --- a/lib/plugins/popularity/lang/zh-tw/intro.txt +++ b/lib/plugins/popularity/lang/zh-tw/intro.txt @@ -1,8 +1,8 @@ ====== 人氣回饋 ====== -本工具會從您的 wiki 站台收集訊息,並以匿名的方式發送給 DokuWiki 的開發者。這有助於他們了解使用者們如何使用 DokuWiki ,並能基於實際統計資料對未來開發做出更準確的決策。 +本工具會從您的 wiki 網站收集訊息,並以匿名的方式發送給 DokuWiki 的開發者。這有助於他們了解使用者們如何使用 DokuWiki ,並能基於實際統計資料對未來開發做出更準確的決策。 -我們鼓勵您經常重複這個步驟,讓開發者了解您的 wiki 站台的成長情形。您的資料集將會被標識為一個匿名的識別碼 (ID) 。 +我們鼓勵您經常重複這個步驟,讓開發者了解您的 wiki 網站的成長情形。您的資料集將會被標識為一個匿名的識別碼 (ID) 。 收集的資料包括 DokuWiki 版本、頁面數量、檔案大小、安裝的附加元件,以及伺服器的 PHP 資訊。 diff --git a/lib/plugins/popularity/lang/zh-tw/lang.php b/lib/plugins/popularity/lang/zh-tw/lang.php index 890c23bfa..b34efe995 100644 --- a/lib/plugins/popularity/lang/zh-tw/lang.php +++ b/lib/plugins/popularity/lang/zh-tw/lang.php @@ -12,7 +12,7 @@ * @author syaoranhinata@gmail.com * @author Ichirou Uchiki */ -$lang['name'] = '人氣回饋(可能需要一些時間載入)'; +$lang['name'] = '人氣回饋 (可能需要一些時間載入) '; $lang['submit'] = '發送資料'; $lang['autosubmit'] = '每月自動發送'; $lang['submissionFailed'] = '由於以下原因,資料無法發送:'; diff --git a/lib/plugins/revert/lang/zh-tw/lang.php b/lib/plugins/revert/lang/zh-tw/lang.php index afd858455..88a77f7a1 100644 --- a/lib/plugins/revert/lang/zh-tw/lang.php +++ b/lib/plugins/revert/lang/zh-tw/lang.php @@ -15,7 +15,7 @@ $lang['menu'] = '還原管理'; $lang['filter'] = '搜索包含垃圾訊息的頁面'; $lang['revert'] = '還原選取的頁面'; -$lang['reverted'] = '%s 已還原為版本 %s'; +$lang['reverted'] = '%s 已還原成版本 %s'; $lang['removed'] = '%s 已移除'; $lang['revstart'] = '已開始還原操作。有可能需要很長時間。如果程式執行逾時,請嘗試分次還原少量內容。'; $lang['revstop'] = '還原程序已完成。'; diff --git a/lib/plugins/usermanager/lang/zh-tw/lang.php b/lib/plugins/usermanager/lang/zh-tw/lang.php index 1db35cc82..980d974cc 100644 --- a/lib/plugins/usermanager/lang/zh-tw/lang.php +++ b/lib/plugins/usermanager/lang/zh-tw/lang.php @@ -33,7 +33,7 @@ $lang['modify'] = '儲存變更'; $lang['search'] = '搜尋'; $lang['search_prompt'] = '開始搜尋'; $lang['clear'] = '重設篩選條件'; -$lang['filter'] = '篩選條件(Filter)'; +$lang['filter'] = '篩選條件 (Filter)'; $lang['summary'] = '顯示帳號 %1$d-%2$d,共 %3$d 筆符合。共有 %4$d 個帳號。'; $lang['nonefound'] = '找不到帳號。共有 %d 個帳號。'; $lang['delete_ok'] = '已刪除 %d 個帳號'; @@ -49,7 +49,7 @@ $lang['edit_usermissing'] = '找不到選取的帳號,可能已被刪除 $lang['user_notify'] = '通知使用者'; $lang['note_notify'] = '通知信只會在指定使用者新密碼時寄送。'; $lang['note_group'] = '如果沒有指定群組,新使用者將會列入至預設群組(%s)當中。'; -$lang['note_pass'] = '如果沒有輸入這個欄位而且有勾選通知使用者,則會自動產生一組密碼。'; +$lang['note_pass'] = '如果勾選了通知使用者,而沒有輸入這個欄位,則會自動產生一組密碼。'; $lang['add_ok'] = '已新增使用者'; $lang['add_fail'] = '無法新增使用者'; $lang['notify_ok'] = '通知信已寄出'; -- cgit v1.2.3 From df60eba1d79b8a3e9a5dda87cb3466f0b7b9d454 Mon Sep 17 00:00:00 2001 From: Bruno Veilleux Date: Mon, 11 Mar 2013 15:34:55 +0100 Subject: French language update --- lib/plugins/acl/lang/fr/lang.php | 1 + lib/plugins/authad/lang/fr/settings.php | 18 +++++++++++++ lib/plugins/authldap/lang/fr/settings.php | 21 +++++++++++++++ lib/plugins/authmysql/lang/fr/settings.php | 41 ++++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/fr/settings.php | 37 +++++++++++++++++++++++++++ lib/plugins/config/lang/fr/lang.php | 1 + lib/plugins/plugin/lang/fr/lang.php | 1 + lib/plugins/popularity/lang/fr/lang.php | 1 + lib/plugins/revert/lang/fr/lang.php | 1 + lib/plugins/usermanager/lang/fr/lang.php | 1 + 10 files changed, 123 insertions(+) create mode 100644 lib/plugins/authad/lang/fr/settings.php create mode 100644 lib/plugins/authldap/lang/fr/settings.php create mode 100644 lib/plugins/authmysql/lang/fr/settings.php create mode 100644 lib/plugins/authpgsql/lang/fr/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/fr/lang.php b/lib/plugins/acl/lang/fr/lang.php index e52bf51a0..538dd14d3 100644 --- a/lib/plugins/acl/lang/fr/lang.php +++ b/lib/plugins/acl/lang/fr/lang.php @@ -25,6 +25,7 @@ * @author Yannick Aure * @author Olivier DUVAL * @author Anael Mobilia + * @author Bruno Veilleux */ $lang['admin_acl'] = 'Gestion de la liste des contrôles d\'accès (ACL)'; $lang['acl_group'] = 'Groupe'; diff --git a/lib/plugins/authad/lang/fr/settings.php b/lib/plugins/authad/lang/fr/settings.php new file mode 100644 index 000000000..efbca89f9 --- /dev/null +++ b/lib/plugins/authad/lang/fr/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['account_suffix'] = 'Le suffixe de votre compte. Ex.: @mon.domaine.org'; +$lang['base_dn'] = 'Votre nom de domaine de base. DC=mon,DC=domaine,DC=org'; +$lang['domain_controllers'] = 'Une liste de contrôleurs de domaine séparés par des virgules. Ex.: srv1.domaine.org,srv2.domaine.org'; +$lang['ad_username'] = 'Un utilisateur Active Directory avec accès aux données de tous les autres utilisateurs. Facultatif, mais nécessaire pour certaines actions telles que l\'envoi de courriels d\'abonnement.'; +$lang['ad_password'] = 'Le mot de passe de l\'utilisateur ci-dessus.'; +$lang['sso'] = 'Est-ce que la connexion unique (Single-Sign-On) par Kerberos ou NTLM doit être utilisée?'; +$lang['real_primarygroup'] = 'Est-ce que le véritable groupe principal doit être résolu au lieu de présumer "Domain Users" (plus lent)?'; +$lang['use_ssl'] = 'Utiliser une connexion SSL? Si utilisée, n\'activez pas TLS ci-dessous.'; +$lang['use_tls'] = 'Utiliser une connexion TLS? Si utilisée, n\'activez pas SSL ci-dessus.'; +$lang['debug'] = 'Afficher des informations de débogage supplémentaires pour les erreurs?'; +$lang['expirywarn'] = 'Jours d\'avance pour l\'avertissement envoyé aux utilisateurs lorsque leur mot de passe va expirer. 0 pour désactiver.'; +$lang['additional'] = 'Une liste séparée par des virgules d\'attributs AD supplémentaires à récupérer dans les données utilisateur. Utilisée par certains modules.'; diff --git a/lib/plugins/authldap/lang/fr/settings.php b/lib/plugins/authldap/lang/fr/settings.php new file mode 100644 index 000000000..3df09eb7c --- /dev/null +++ b/lib/plugins/authldap/lang/fr/settings.php @@ -0,0 +1,21 @@ + + */ +$lang['server'] = 'Votre serveur LDAP. Soit le nom d\'hôte (localhost) ou l\'URL complète (ldap://serveur.dom:389)'; +$lang['port'] = 'Port du serveur LDAP si l\'URL complète n\'a pas été indiquée ci-dessus'; +$lang['usertree'] = 'Où trouver les comptes utilisateur. Ex.: ou=Utilisateurs, dc=serveur, dc=dom'; +$lang['grouptree'] = 'Où trouver les groupes d\'utilisateurs. Ex.: ou=Groupes, dc=serveur, dc=dom'; +$lang['userfilter'] = 'Filtre LDAP pour rechercher les comptes utilisateur. Ex.: (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = 'Filtre LDAP pour rechercher les groupes. Ex.: (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = 'La version de protocole à utiliser. Il se peut que vous deviez utiliser 3'; +$lang['starttls'] = 'Utiliser les connexions TLS?'; +$lang['referrals'] = 'Suivre les références?'; +$lang['binddn'] = 'Nom de domaine d\'un utilisateur de connexion facultatif si une connexion anonyme n\'est pas suffisante. Ex. : cn=admin, dc=mon, dc=accueil'; +$lang['bindpw'] = 'Mot de passe de l\'utilisateur ci-dessus.'; +$lang['userscope'] = 'Limiter la portée de recherche d\'utilisateurs'; +$lang['groupscope'] = 'Limiter la portée de recherche de groupes'; +$lang['groupkey'] = 'Affiliation aux groupes à partir de n\'importe quel attribut utilisateur (au lieu des groupes AD standards), p. ex. groupes par département ou numéro de téléphone'; +$lang['debug'] = 'Afficher des informations de bégogage supplémentaires pour les erreurs'; diff --git a/lib/plugins/authmysql/lang/fr/settings.php b/lib/plugins/authmysql/lang/fr/settings.php new file mode 100644 index 000000000..dfb79b545 --- /dev/null +++ b/lib/plugins/authmysql/lang/fr/settings.php @@ -0,0 +1,41 @@ + + */ +$lang['server'] = 'Votre serveur MySQL'; +$lang['user'] = 'Nom d\'utilisateur MySQL'; +$lang['password'] = 'Mot de passe pour l\'utilisateur ci-dessus'; +$lang['database'] = 'Base de données à utiliser'; +$lang['charset'] = 'Jeu de caractères utilisé dans la base de données'; +$lang['debug'] = 'Afficher des informations de débogage supplémentaires'; +$lang['forwardClearPass'] = 'Passer les mots de passe aux requêtes SQL ci-dessous en cleartext plutôt qu\'avec l\'option passcrypt'; +$lang['TablesToLock'] = 'Liste séparée par des virgules des tables devant être verrouillées par les opérations d\'écriture'; +$lang['checkPass'] = 'Requête SQL pour la vérification des mots de passe'; +$lang['getUserInfo'] = 'Requête SQL pour la récupération des informations d\'un utilisateur'; +$lang['getGroups'] = 'Requête SQL pour la récupération des groupes d\'un utilisateur'; +$lang['getUsers'] = 'Requête SQL pour énumérer tous les utilisateurs'; +$lang['FilterLogin'] = 'Clause SQL pour filtrer les utilisateurs par identifiant'; +$lang['FilterName'] = 'Clause SQL pour filtrer les utilisateurs par nom complet'; +$lang['FilterEmail'] = 'Clause SQL pour filtrer les utilisateurs par adresse électronique'; +$lang['FilterGroup'] = 'Clause SQL pour filtrer les utilisateurs par groupes'; +$lang['SortOrder'] = 'Clause SQL pour trier les utilisateurs'; +$lang['addUser'] = 'Requête SQL pour ajouter un nouvel utilisateur'; +$lang['addGroup'] = 'Requête SQL pour ajouter un nouveau groupe'; +$lang['addUserGroup'] = 'Requête SQL pour ajouter un utilisateur à un groupe existant'; +$lang['delGroup'] = 'Requête SQL pour retirer un groupe'; +$lang['getUserID'] = 'Requête SQL pour obtenir la clé primaire d\'un utilisateur'; +$lang['delUser'] = 'Requête SQL pour supprimer un utilisateur'; +$lang['delUserRefs'] = 'Requête SQL pour retirer un utilisateur de tous les groupes'; +$lang['updateUser'] = 'Requête SQL pour mettre à jour le profil d\'un utilisateur'; +$lang['UpdateLogin'] = 'Clause de mise à jour pour mettre à jour l\'identifiant d\'un utilisateur'; +$lang['UpdatePass'] = 'Clause de mise à jour pour mettre à jour le mot de passe d\'un utilisateur'; +$lang['UpdateEmail'] = 'Clause de mise à jour pour mettre à jour l\'adresse électronique d\'un utilisateur'; +$lang['UpdateName'] = 'Clause de mise à jour pour mettre à jour le nom complet d\'un utilisateur'; +$lang['UpdateTarget'] = 'Clause de limite pour identifier l\'utilisateur durant une mise à jour'; +$lang['delUserGroup'] = 'Requête SQL pour retirer un utilisateur d\'un groupe donné'; +$lang['getGroupID'] = 'Requête SQL pour obtenir la clé primaire d\'un groupe donné'; +$lang['debug_o_0'] = 'aucun'; +$lang['debug_o_1'] = 'sur erreur seulement'; +$lang['debug_o_2'] = 'toutes les requêtes SQL'; diff --git a/lib/plugins/authpgsql/lang/fr/settings.php b/lib/plugins/authpgsql/lang/fr/settings.php new file mode 100644 index 000000000..ec425bd49 --- /dev/null +++ b/lib/plugins/authpgsql/lang/fr/settings.php @@ -0,0 +1,37 @@ + + */ +$lang['server'] = 'Votre serveur PostgreSQL'; +$lang['port'] = 'Le port de votre serveur PostgreSQL'; +$lang['user'] = 'Nom d\'utilisateur PostgreSQL'; +$lang['password'] = 'Mot de passe pour l\'utilisateur ci-dessus'; +$lang['database'] = 'Base de données à utiliser'; +$lang['debug'] = 'Afficher des informations de débogage supplémentaires'; +$lang['forwardClearPass'] = 'Passer les mots de passe aux requêtes SQL ci-dessous en cleartext plutôt qu\'avec l\'option passcrypt'; +$lang['checkPass'] = 'Requête SQL pour la vérification des mots de passe'; +$lang['getUserInfo'] = 'Requête SQL pour la récupération des informations d\'un utilisateur'; +$lang['getGroups'] = 'Requête SQL pour la récupération des groupes d\'un utilisateur'; +$lang['getUsers'] = 'Requête SQL pour énumérer tous les utilisateurs'; +$lang['FilterLogin'] = 'Clause SQL pour filtrer les utilisateurs par identifiant'; +$lang['FilterName'] = 'Clause SQL pour filtrer les utilisateurs par nom complet'; +$lang['FilterEmail'] = 'Clause SQL pour filtrer les utilisateurs par adresse électronique'; +$lang['FilterGroup'] = 'Clause SQL pour filtrer les utilisateurs par groupes'; +$lang['SortOrder'] = 'Clause SQL pour trier les utilisateurs'; +$lang['addUser'] = 'Requête SQL pour ajouter un nouvel utilisateur'; +$lang['addGroup'] = 'Requête SQL pour ajouter un nouveau groupe'; +$lang['addUserGroup'] = 'Requête SQL pour ajouter un utilisateur à un groupe existant'; +$lang['delGroup'] = 'Requête SQL pour retirer un groupe'; +$lang['getUserID'] = 'Requête SQL pour obtenir la clé primaire d\'un utilisateur'; +$lang['delUser'] = 'Requête SQL pour supprimer un utilisateur'; +$lang['delUserRefs'] = 'Requête SQL pour retirer un utilisateur de tous les groupes'; +$lang['updateUser'] = 'Requête SQL pour mettre à jour le profil d\'un utilisateur'; +$lang['UpdateLogin'] = 'Clause de mise à jour pour mettre à jour l\'identifiant d\'un utilisateur'; +$lang['UpdatePass'] = 'Clause de mise à jour pour mettre à jour le mot de passe d\'un utilisateur'; +$lang['UpdateEmail'] = 'Clause de mise à jour pour mettre à jour l\'adresse électronique d\'un utilisateur'; +$lang['UpdateName'] = 'Clause de mise à jour pour mettre à jour le nom complet d\'un utilisateur'; +$lang['UpdateTarget'] = 'Clause de limite pour identifier l\'utilisateur durant une mise à jour'; +$lang['delUserGroup'] = 'Requête SQL pour retirer un utilisateur d\'un groupe donné'; +$lang['getGroupID'] = 'Requête SQL pour obtenir la clé primaire d\'un groupe donné'; diff --git a/lib/plugins/config/lang/fr/lang.php b/lib/plugins/config/lang/fr/lang.php index c4b521497..f9e89f603 100644 --- a/lib/plugins/config/lang/fr/lang.php +++ b/lib/plugins/config/lang/fr/lang.php @@ -20,6 +20,7 @@ * @author Yannick Aure * @author Olivier DUVAL * @author Anael Mobilia + * @author Bruno Veilleux */ $lang['menu'] = 'Paramètres de configuration'; $lang['error'] = 'Paramètres non modifiés en raison d\'une valeur invalide, vérifiez vos réglages puis réessayez.
Les valeurs erronées sont entourées d\'une bordure rouge.'; diff --git a/lib/plugins/plugin/lang/fr/lang.php b/lib/plugins/plugin/lang/fr/lang.php index 06cd1ab8d..2926225ed 100644 --- a/lib/plugins/plugin/lang/fr/lang.php +++ b/lib/plugins/plugin/lang/fr/lang.php @@ -20,6 +20,7 @@ * @author Yannick Aure * @author Olivier DUVAL * @author Anael Mobilia + * @author Bruno Veilleux */ $lang['menu'] = 'Gestion des extensions'; $lang['download'] = 'Télécharger et installer une nouvelle extension'; diff --git a/lib/plugins/popularity/lang/fr/lang.php b/lib/plugins/popularity/lang/fr/lang.php index d5bc92081..b7e053197 100644 --- a/lib/plugins/popularity/lang/fr/lang.php +++ b/lib/plugins/popularity/lang/fr/lang.php @@ -17,6 +17,7 @@ * @author Yannick Aure * @author Olivier DUVAL * @author Anael Mobilia + * @author Bruno Veilleux */ $lang['name'] = 'Enquête de popularité (peut nécessiter un certain temps pour être chargée)'; $lang['submit'] = 'Envoyer les données'; diff --git a/lib/plugins/revert/lang/fr/lang.php b/lib/plugins/revert/lang/fr/lang.php index 07b012e38..a063c8996 100644 --- a/lib/plugins/revert/lang/fr/lang.php +++ b/lib/plugins/revert/lang/fr/lang.php @@ -18,6 +18,7 @@ * @author Yannick Aure * @author Olivier DUVAL * @author Anael Mobilia + * @author Bruno Veilleux */ $lang['menu'] = 'Gestionnaire des réversions'; $lang['filter'] = 'Trouver les pages spammées '; diff --git a/lib/plugins/usermanager/lang/fr/lang.php b/lib/plugins/usermanager/lang/fr/lang.php index 7e602d0ce..40e878bbb 100644 --- a/lib/plugins/usermanager/lang/fr/lang.php +++ b/lib/plugins/usermanager/lang/fr/lang.php @@ -19,6 +19,7 @@ * @author Yannick Aure * @author Olivier DUVAL * @author Anael Mobilia + * @author Bruno Veilleux */ $lang['menu'] = 'Gestion des utilisateurs'; $lang['noauth'] = '(authentification de l\'utilisateur non disponible)'; -- cgit v1.2.3 From f5f59c48d1de4c01eeb7757b5d1f9a0ea186312c Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Mon, 11 Mar 2013 15:35:47 +0100 Subject: typo fix --- lib/plugins/authpgsql/lang/en/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authpgsql/lang/en/settings.php b/lib/plugins/authpgsql/lang/en/settings.php index 8c048fa0f..e67235cfa 100644 --- a/lib/plugins/authpgsql/lang/en/settings.php +++ b/lib/plugins/authpgsql/lang/en/settings.php @@ -2,7 +2,7 @@ $lang['server'] = 'Your PostgreSQL server'; $lang['port'] = 'Your PostgreSQL server\'s port'; -$lang['user'] = 'PostreSQL user name'; +$lang['user'] = 'PostgreSQL user name'; $lang['password'] = 'Password for above user'; $lang['database'] = 'Database to use'; $lang['debug'] = 'Display additional debug information'; -- cgit v1.2.3 From 421bfa826519712385983d37cb67a4f69b918674 Mon Sep 17 00:00:00 2001 From: Robert Bogenschneider Date: Mon, 11 Mar 2013 15:37:25 +0100 Subject: Esperanto language update --- lib/plugins/authad/lang/eo/settings.php | 17 +++++++++++++ lib/plugins/authldap/lang/eo/settings.php | 20 +++++++++++++++ lib/plugins/authmysql/lang/eo/settings.php | 40 ++++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/eo/settings.php | 36 +++++++++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 lib/plugins/authad/lang/eo/settings.php create mode 100644 lib/plugins/authldap/lang/eo/settings.php create mode 100644 lib/plugins/authmysql/lang/eo/settings.php create mode 100644 lib/plugins/authpgsql/lang/eo/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/eo/settings.php b/lib/plugins/authad/lang/eo/settings.php new file mode 100644 index 000000000..85a6abd98 --- /dev/null +++ b/lib/plugins/authad/lang/eo/settings.php @@ -0,0 +1,17 @@ +@mia.domajno.lando'; +$lang['base_dn'] = 'Via baza DN, ekz. DC=mia,DC=domajno,DC=lando'; +$lang['domain_controllers'] = 'Komodisigita listo de domajno-serviloj, ekz. srv1.domajno.lando,srv2.domajno.lando'; +$lang['ad_username'] = 'Privilegiita Aktiv-Dosieruja uzanto kun aliro al ĉiuj uzantaj datumoj. Libervole, sed necesa por iuj agadoj kiel sendi abonan retpoŝton.'; +$lang['ad_password'] = 'La pasvorto de tiu uzanto.'; +$lang['sso'] = 'Ĉu uzi Sola Aliro tra Kerberos aŭ NTLM?'; +$lang['real_primarygroup'] = 'Ĉu trovi la veran ĉefan grupon anstataŭ supozi "Domajnuzantoj" (pli malrapida)?'; +$lang['use_ssl'] = 'Ĉu uzi SSL-konekton? Se jes, ne aktivigu TLS sube.'; +$lang['use_tls'] = 'Ĉu uzi TLS-konekton? Se jes, ne aktivigu SSL supre.'; +$lang['debug'] = 'Ĉu montri aldonajn informojn dum eraroj?'; +$lang['expirywarn'] = 'Tagoj da antaŭaverto pri malvalidiĝonta pasvorto. 0 por malebligi.'; +$lang['additional'] = 'Komodisigita listo de aldonaj AD-atributoj por preni el uzantaj datumoj. Uzita de iuj kromaĵoj.'; diff --git a/lib/plugins/authldap/lang/eo/settings.php b/lib/plugins/authldap/lang/eo/settings.php new file mode 100644 index 000000000..2863a1125 --- /dev/null +++ b/lib/plugins/authldap/lang/eo/settings.php @@ -0,0 +1,20 @@ +localhost) aŭ plene detala URL (ldap://servilo.lando:389)'; +$lang['port'] = 'LDAP-servila pordego, se vi supre ne indikis la plenan URL'; +$lang['usertree'] = 'Kie trovi uzantajn kontojn, ekz. ou=Personoj, dc=servilo, dc=lando'; +$lang['grouptree'] = 'Kie trovi uzantogrupojn, ekz. ou=Grupo, dc=servilo, dc=lando'; +$lang['userfilter'] = 'LDAP-filtrilo por serĉi uzantokontojn, ekz. (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = 'LDAP-filtrilo por serĉi grupojn, ekz. (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = 'La uzenda protokolversio. Eble necesas indiki 3'; +$lang['starttls'] = 'Ĉu uzi TLS-konektojn?'; +$lang['referrals'] = 'Ĉu sekvi referencojn?'; +$lang['binddn'] = 'DN de opcie bindita uzanto, se anonima bindado ne sufiĉas, ekz. cn=admin, dc=mia, dc=hejmo'; +$lang['bindpw'] = 'Pasvorto de tiu uzanto'; +$lang['userscope'] = 'Limigi serĉospacon de uzantaj serĉoj'; +$lang['groupscope'] = 'Limigi serĉospacon por grupaj serĉoj'; +$lang['groupkey'] = 'Grupa membreco de iu uzanta atributo (anstataŭ standardaj AD-grupoj), ekz. grupo de departemento aŭ telefonnumero'; +$lang['debug'] = 'Ĉu montri aldonajn erarinformojn?'; diff --git a/lib/plugins/authmysql/lang/eo/settings.php b/lib/plugins/authmysql/lang/eo/settings.php new file mode 100644 index 000000000..907c761f8 --- /dev/null +++ b/lib/plugins/authmysql/lang/eo/settings.php @@ -0,0 +1,40 @@ + Date: Mon, 11 Mar 2013 15:39:37 +0100 Subject: Simplified Chinese language update --- lib/plugins/authldap/lang/zh/settings.php | 1 + lib/plugins/authmysql/lang/zh/settings.php | 1 + 2 files changed, 2 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/authldap/lang/zh/settings.php b/lib/plugins/authldap/lang/zh/settings.php index e84511b42..2dfbeb464 100644 --- a/lib/plugins/authldap/lang/zh/settings.php +++ b/lib/plugins/authldap/lang/zh/settings.php @@ -17,4 +17,5 @@ $lang['binddn'] = '一个可选的绑定用户的 DN (如果匿 $lang['bindpw'] = '上述用户的密码'; $lang['userscope'] = '限制用户搜索的范围'; $lang['groupscope'] = '限制组搜索的范围'; +$lang['groupkey'] = '根据任何用户属性得来的组成员(而不是标准的 AD 组),例如根据部门或者电话号码得到的组。'; $lang['debug'] = '有错误时显示额外的调试信息'; diff --git a/lib/plugins/authmysql/lang/zh/settings.php b/lib/plugins/authmysql/lang/zh/settings.php index 43cfbb3c0..772f75ecd 100644 --- a/lib/plugins/authmysql/lang/zh/settings.php +++ b/lib/plugins/authmysql/lang/zh/settings.php @@ -8,6 +8,7 @@ $lang['server'] = '您的 MySQL 服务器'; $lang['user'] = 'MySQL 用户名'; $lang['password'] = '上述用户的密码'; $lang['database'] = '使用的数据库'; +$lang['charset'] = '数据库中使用的字符集'; $lang['debug'] = '显示额外调试信息'; $lang['forwardClearPass'] = '将用户密码以明文形式传送给下面的 SQL 语句,而不使用 passcrypt 密码加密选项'; $lang['TablesToLock'] = '在写操作时需要锁定的数据表列表,以逗号分隔'; -- cgit v1.2.3 From 2ab296805f9b647d3fe46cad4a7f275c45f171a8 Mon Sep 17 00:00:00 2001 From: Dominik Eckelmann Date: Tue, 19 Mar 2013 12:42:22 +0100 Subject: removed unsused translation file --- lib/plugins/info/lang/sl/lang.php | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 lib/plugins/info/lang/sl/lang.php (limited to 'lib/plugins') diff --git a/lib/plugins/info/lang/sl/lang.php b/lib/plugins/info/lang/sl/lang.php deleted file mode 100644 index 62936947c..000000000 --- a/lib/plugins/info/lang/sl/lang.php +++ /dev/null @@ -1,12 +0,0 @@ - - */ - -$lang['encoding'] = 'utf-8'; -$lang['direction'] = 'ltr'; -$lang['onHidden'] = 'Click to display ⇲'; -$lang['onVisible'] = 'Click to hide ⇱'; -- cgit v1.2.3 From e20faad8330af3e6f2edbd6e8dc3f70c05305492 Mon Sep 17 00:00:00 2001 From: Victor Westmann Date: Sun, 24 Mar 2013 10:28:51 +0100 Subject: Brazilian Portuguese language update --- lib/plugins/acl/lang/pt-br/lang.php | 1 + lib/plugins/authad/lang/pt-br/settings.php | 16 ++++++++++++++++ lib/plugins/authldap/lang/pt-br/settings.php | 19 +++++++++++++++++++ lib/plugins/authmysql/lang/pt-br/settings.php | 18 ++++++++++++++++++ lib/plugins/authpgsql/lang/pt-br/settings.php | 25 +++++++++++++++++++++++++ lib/plugins/config/lang/pt-br/lang.php | 1 + lib/plugins/plugin/lang/pt-br/lang.php | 1 + lib/plugins/popularity/lang/pt-br/lang.php | 1 + lib/plugins/revert/lang/pt-br/lang.php | 1 + lib/plugins/usermanager/lang/pt-br/lang.php | 1 + 10 files changed, 84 insertions(+) create mode 100644 lib/plugins/authad/lang/pt-br/settings.php create mode 100644 lib/plugins/authldap/lang/pt-br/settings.php create mode 100644 lib/plugins/authmysql/lang/pt-br/settings.php create mode 100644 lib/plugins/authpgsql/lang/pt-br/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/pt-br/lang.php b/lib/plugins/acl/lang/pt-br/lang.php index a0c997600..c49b430f8 100644 --- a/lib/plugins/acl/lang/pt-br/lang.php +++ b/lib/plugins/acl/lang/pt-br/lang.php @@ -19,6 +19,7 @@ * @author Sergio Motta sergio@cisne.com.br * @author Isaias Masiero Filho * @author Balaco Baco + * @author Victor Westmann */ $lang['admin_acl'] = 'Administração da Lista de Controles de Acesso'; $lang['acl_group'] = 'Grupo'; diff --git a/lib/plugins/authad/lang/pt-br/settings.php b/lib/plugins/authad/lang/pt-br/settings.php new file mode 100644 index 000000000..b8b1efd42 --- /dev/null +++ b/lib/plugins/authad/lang/pt-br/settings.php @@ -0,0 +1,16 @@ + + */ +$lang['account_suffix'] = 'Sufixo de sua conta. Eg. @meu.domínio.org'; +$lang['base_dn'] = 'Sua base DN. Eg. DC=meu,DC=domínio,DC=org'; +$lang['domain_controllers'] = 'Uma lista de controles de domínios separada por vírgulas. Eg. srv1.domínio.org,srv2.domínio.org'; +$lang['ad_password'] = 'A senha do usuário acima.'; +$lang['sso'] = 'Usar Single-Sign-On através do Kerberos ou NTLM?'; +$lang['use_ssl'] = 'Usar conexão SSL? Se usar, não habilitar TLS abaixo.'; +$lang['use_tls'] = 'Usar conexão TLS? se usar, não habilitar SSL acima.'; +$lang['debug'] = 'Mostrar saída adicional de depuração em mensagens de erros?'; +$lang['expirywarn'] = 'Dias com antecedência para avisar o usuário de uma senha que vai expirar. 0 para desabilitar.'; +$lang['additional'] = 'Uma lista separada de vírgulas de atributos adicionais AD para pegar dados de usuários. Usados por alguns plugins.'; diff --git a/lib/plugins/authldap/lang/pt-br/settings.php b/lib/plugins/authldap/lang/pt-br/settings.php new file mode 100644 index 000000000..daf9efd00 --- /dev/null +++ b/lib/plugins/authldap/lang/pt-br/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['server'] = 'Seu servidor LDAP. Ou hostname (localhost) ou uma URL completa (ldap://server.tld:389)'; +$lang['port'] = 'Porta LDAP do servidor se nenhuma URL completa tiver sido fornecida acima'; +$lang['usertree'] = 'Onde encontrar as contas de usuários. Eg. ou=Pessoas, dc=servidor, dc=tld'; +$lang['grouptree'] = 'Onde encontrar os grupos de usuários. Eg. ou=Pessoas, dc=servidor, dc=tld'; +$lang['version'] = 'A versão do protocolo para usar. Você talvez deva definir isto para 3'; +$lang['starttls'] = 'Usar conexões TLS?'; +$lang['referrals'] = 'Permitir referências serem seguidas?'; +$lang['binddn'] = 'DN de um vínculo opcional de usuário se vínculo anônimo não for suficiente. Eg. cn=admin, dc=my, dc=home'; +$lang['bindpw'] = 'Senha do usuário acima'; +$lang['userscope'] = 'Limitar escopo da busca para busca de usuário'; +$lang['groupscope'] = 'Limitar escopo da busca para busca de grupo'; +$lang['groupkey'] = 'Membro de grupo vem de qualquer atributo do usuário (ao invés de grupos padrões AD) e.g. departamento de grupo ou número de telefone'; +$lang['debug'] = 'Mostrar informações adicionais de depuração em erros'; diff --git a/lib/plugins/authmysql/lang/pt-br/settings.php b/lib/plugins/authmysql/lang/pt-br/settings.php new file mode 100644 index 000000000..59976ed65 --- /dev/null +++ b/lib/plugins/authmysql/lang/pt-br/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['server'] = 'Seu servidor MySQL'; +$lang['user'] = 'usuário MySQL'; +$lang['password'] = 'Senha do usuário acima'; +$lang['database'] = 'Base de dados para usar'; +$lang['charset'] = 'Codificação de caracter usado na base de dados'; +$lang['debug'] = 'Mostrar informações adicionais de depuração'; +$lang['forwardClearPass'] = 'Passar senhas de usuários como texto puro para comandos SQL abaixo, ao invés de usar opção passcrypt'; +$lang['TablesToLock'] = 'Lista separada por vírgulas para tabelas que devem estar travadas em operações de escrita'; +$lang['checkPass'] = 'Comandos SQL para verificar senhas'; +$lang['debug_o_0'] = 'nenhum'; +$lang['debug_o_1'] = 'apenas em erros'; +$lang['debug_o_2'] = 'todas as queries SQL'; diff --git a/lib/plugins/authpgsql/lang/pt-br/settings.php b/lib/plugins/authpgsql/lang/pt-br/settings.php new file mode 100644 index 000000000..714f01163 --- /dev/null +++ b/lib/plugins/authpgsql/lang/pt-br/settings.php @@ -0,0 +1,25 @@ + + */ +$lang['server'] = 'Seu servidor PostgreSQL'; +$lang['port'] = 'Sua porta do servidor PostgreSQL'; +$lang['user'] = 'Nome de usuário PostgreSQL'; +$lang['password'] = 'Senha do usuário acima'; +$lang['database'] = 'Base de dados para usar'; +$lang['getUsers'] = 'Comando SQL para listar todos os usuários'; +$lang['FilterLogin'] = 'Cláusula SQL para filtrar usuários pelo nome de login'; +$lang['FilterName'] = 'Cláusula SQL para filtrar usuários pelo nome completo'; +$lang['FilterEmail'] = 'Cláusula SQL para filtrar usuários pelo endereço de email'; +$lang['FilterGroup'] = 'Cláusula SQL para filtrar usuários pelo grupo que pertencem'; +$lang['SortOrder'] = 'Comando SQL para adicionar novo grupo'; +$lang['addUser'] = 'Comando SQL para adicionar novo usuário'; +$lang['addGroup'] = 'Comando SQL para adicionar novo grupo'; +$lang['addUserGroup'] = 'Comando SQL para adicionar um usuário a um grupo existente'; +$lang['delGroup'] = 'Comando SQL para remover um grupo'; +$lang['getUserID'] = 'Comando SQL para obter chave primária de usuário'; +$lang['delUser'] = 'Comando SQL para apagar usuário'; +$lang['delUserRefs'] = 'Comando SQL para remover um usuário de todos os grupos'; +$lang['updateUser'] = 'Comando SQL para atualizar perfil de usuário'; diff --git a/lib/plugins/config/lang/pt-br/lang.php b/lib/plugins/config/lang/pt-br/lang.php index 7151713d8..85218439a 100644 --- a/lib/plugins/config/lang/pt-br/lang.php +++ b/lib/plugins/config/lang/pt-br/lang.php @@ -16,6 +16,7 @@ * @author Sergio Motta sergio@cisne.com.br * @author Isaias Masiero Filho * @author Balaco Baco + * @author Victor Westmann */ $lang['menu'] = 'Configurações do DokuWiki'; $lang['error'] = 'As configurações não foram atualizadas devido a um valor inválido. Por favor, reveja suas alterações e reenvie-as.
O(s) valor(es) incorreto(s) serão exibidos contornados por uma borda vermelha.'; diff --git a/lib/plugins/plugin/lang/pt-br/lang.php b/lib/plugins/plugin/lang/pt-br/lang.php index 26e73f4fc..437b6ca57 100644 --- a/lib/plugins/plugin/lang/pt-br/lang.php +++ b/lib/plugins/plugin/lang/pt-br/lang.php @@ -16,6 +16,7 @@ * @author Sergio Motta sergio@cisne.com.br * @author Isaias Masiero Filho * @author Balaco Baco + * @author Victor Westmann */ $lang['menu'] = 'Gerenciar Plug-ins'; $lang['download'] = 'Baixar e instalar um novo plug-in'; diff --git a/lib/plugins/popularity/lang/pt-br/lang.php b/lib/plugins/popularity/lang/pt-br/lang.php index 44d811d81..c2ec36145 100644 --- a/lib/plugins/popularity/lang/pt-br/lang.php +++ b/lib/plugins/popularity/lang/pt-br/lang.php @@ -15,6 +15,7 @@ * @author Sergio Motta sergio@cisne.com.br * @author Isaias Masiero Filho * @author Balaco Baco + * @author Victor Westmann */ $lang['name'] = 'Retorno de popularidade (pode demorar um pouco para carregar)'; $lang['submit'] = 'Enviar dados'; diff --git a/lib/plugins/revert/lang/pt-br/lang.php b/lib/plugins/revert/lang/pt-br/lang.php index c4a2f742b..b74e0408f 100644 --- a/lib/plugins/revert/lang/pt-br/lang.php +++ b/lib/plugins/revert/lang/pt-br/lang.php @@ -16,6 +16,7 @@ * @author Sergio Motta sergio@cisne.com.br * @author Isaias Masiero Filho * @author Balaco Baco + * @author Victor Westmann */ $lang['menu'] = 'Gerenciador de reversões'; $lang['filter'] = 'Procura por páginas com spam'; diff --git a/lib/plugins/usermanager/lang/pt-br/lang.php b/lib/plugins/usermanager/lang/pt-br/lang.php index 285231f35..637be8860 100644 --- a/lib/plugins/usermanager/lang/pt-br/lang.php +++ b/lib/plugins/usermanager/lang/pt-br/lang.php @@ -16,6 +16,7 @@ * @author Sergio Motta sergio@cisne.com.br * @author Isaias Masiero Filho * @author Balaco Baco + * @author Victor Westmann */ $lang['menu'] = 'Gerenciamento de Usuários'; $lang['noauth'] = '(o gerenciamento de usuários não está disponível)'; -- cgit v1.2.3 From 14bc69e3e1db81c4d329a140cb0e095f0dcf9b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=AA=85=EC=A7=84?= Date: Sun, 24 Mar 2013 10:30:58 +0100 Subject: Korean language update --- lib/plugins/acl/lang/ko/help.txt | 11 +++----- lib/plugins/acl/lang/ko/lang.php | 11 ++++---- lib/plugins/authad/lang/ko/settings.php | 14 ++++++++++ lib/plugins/authldap/lang/ko/settings.php | 10 +++++++ lib/plugins/authmysql/lang/ko/settings.php | 41 ++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/ko/settings.php | 37 +++++++++++++++++++++++++ lib/plugins/config/lang/ko/lang.php | 23 ++++++++-------- lib/plugins/plugin/lang/ko/lang.php | 13 ++++----- lib/plugins/popularity/lang/ko/intro.txt | 4 +-- lib/plugins/popularity/lang/ko/lang.php | 11 ++++---- lib/plugins/popularity/lang/ko/submitted.txt | 2 +- lib/plugins/revert/lang/ko/intro.txt | 4 +-- lib/plugins/revert/lang/ko/lang.php | 21 +++++++------- lib/plugins/usermanager/lang/ko/lang.php | 29 ++++++++++---------- 14 files changed, 162 insertions(+), 69 deletions(-) create mode 100644 lib/plugins/authad/lang/ko/settings.php create mode 100644 lib/plugins/authldap/lang/ko/settings.php create mode 100644 lib/plugins/authmysql/lang/ko/settings.php create mode 100644 lib/plugins/authpgsql/lang/ko/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/ko/help.txt b/lib/plugins/acl/lang/ko/help.txt index 6a15b7a2e..0386b5990 100644 --- a/lib/plugins/acl/lang/ko/help.txt +++ b/lib/plugins/acl/lang/ko/help.txt @@ -1,11 +1,8 @@ === 빠른 도움말: === 현재 문서에서 위키 이름공간과 문서에 대한 접근 권한을 추가하거나 삭제할 수 있습니다. +* 왼쪽 영역에는 선택 가능한 이름공간과 문서 목록을 보여줍니다. +* 위쪽 입력 양식에서 선택된 사용자와 그룹의 접근 권한을 보거나 바꿀 수 있습니다. +* 아래 테이블에서 현재 설정된 모든 접근 제어 규칙을 볼 수 있으며, 즉시 여러 규칙을 삭제하거나 바꿀 수 있습니다. -왼쪽 영역에는 선택 가능한 이름공간과 문서 목록을 보여줍니다. - -위쪽 입력 양식에서 선택된 사용자와 그룹의 접근 권한을 보거나 바꿀 수 있습니다. - -아래 테이블에서 현재 설정된 모든 접근 제어 규칙을 볼 수 있으며, 즉시 여러 규칙을 삭제하거나 바꿀 수 있습니다. - -DokuWiki에서 접근 제어가 어떻게 동작되는지 알아보려면 [[doku>acl|ACL 공식 문서]]를 읽어보기 바랍니다. \ No newline at end of file +DokuWiki에서 접근 제어가 어떻게 동작되는지 알아보려면 [[doku>acl|ACL 공식 문서]]를 읽어보시기 바랍니다. \ No newline at end of file diff --git a/lib/plugins/acl/lang/ko/lang.php b/lib/plugins/acl/lang/ko/lang.php index 5d2662ef8..5cec4b8fd 100644 --- a/lib/plugins/acl/lang/ko/lang.php +++ b/lib/plugins/acl/lang/ko/lang.php @@ -1,16 +1,15 @@ * @author Anika Henke * @author Matthias Grimm * @author jk Lee * @author dongnak@gmail.com * @author Song Younghwan - * @author SONG Younghwan - * @author Seung-Chul Yoo + * @author Seung-Chul Yoo * @author erial2@gmail.com * @author Myeongjin */ @@ -25,8 +24,8 @@ $lang['p_user_id'] = '%s 사용자는 현재 $lang['p_user_ns'] = '%s 사용자는 현재 %s: %s 이름공간 접근이 가능합니다.'; $lang['p_group_id'] = '%s 그룹 구성원은 현재 %s: %s 문서 접근이 가능합니다.'; $lang['p_group_ns'] = '%s 그룹 구성원은 현재 %s: %s 이름공간 접근이 가능합니다.'; -$lang['p_choose_id'] = '%s 문서 접근 권한을 보거나 바꾸려면 사용자그룹을 위 양식에 입력하기 바랍니다.'; -$lang['p_choose_ns'] = '%s 이름공간 접근 권한을 보거나 바꾸려면 사용자그룹을 위 양식에 입력하기 바랍니다.'; +$lang['p_choose_id'] = '%s 문서 접근 권한을 보거나 바꾸려면 사용자그룹을 위 양식에 입력하세요.'; +$lang['p_choose_ns'] = '%s 이름공간 접근 권한을 보거나 바꾸려면 사용자그룹을 위 양식에 입력하세요.'; $lang['p_inherited'] = '참고: 권한이 명시적으로 설정되지 않았으므로 다른 그룹이나 상위 이름공간으로부터 가져왔습니다.'; $lang['p_isadmin'] = '참고: 슈퍼유저로 설정되어 있으므로 선택된 그룹이나 사용자는 언제나 모든 접근 권한을 가집니다.'; $lang['p_include'] = '더 높은 접근 권한은 하위를 포함합니다. 문서가 아닌 이름공간에는 만들기, 올리기, 삭제 권한만 적용됩니다.'; diff --git a/lib/plugins/authad/lang/ko/settings.php b/lib/plugins/authad/lang/ko/settings.php new file mode 100644 index 000000000..31071e9a3 --- /dev/null +++ b/lib/plugins/authad/lang/ko/settings.php @@ -0,0 +1,14 @@ + + */ +$lang['account_suffix'] = '계정 접미어. 예를 들어 @my.domain.org'; +$lang['base_dn'] = '기본 DN. 예를 들어 DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = '도메인 컨트롤러의 쉼표로 구분한 목록입니다. 예를 들어 srv1.domain.org,srv2.domain.org'; +$lang['ad_password'] = '위 사용자의 비밀번호입니다.'; +$lang['sso'] = 'Kerberos나 NTLM을 통해 Single-Sign-On을 사용해야 합니까?'; +$lang['use_ssl'] = 'SSL 연결을 사용합니까? 사용한다면 아래 TLS을 활성화하지 마세요.'; +$lang['use_tls'] = 'TLS 연결을 사용합니까? 사용한다면 위 SSL을 활성화하지 마세요.'; +$lang['debug'] = '오류에 대한 추가적인 디버그 정보를 보이겠습니까?'; diff --git a/lib/plugins/authldap/lang/ko/settings.php b/lib/plugins/authldap/lang/ko/settings.php new file mode 100644 index 000000000..6c80414d3 --- /dev/null +++ b/lib/plugins/authldap/lang/ko/settings.php @@ -0,0 +1,10 @@ + + */ +$lang['server'] = 'LDAP 서버. 호스트 이름(localhost)이나 전체 자격 URL(ldap://server.tld:389) 중 하나'; +$lang['port'] = '위에 주어진 전체 URL이 없을 때의 LDAP 서버 포트'; +$lang['starttls'] = 'TLS 연결을 사용하겠습니까?'; +$lang['debug'] = '오류에 대한 추가적인 디버그 정보를 보이기'; diff --git a/lib/plugins/authmysql/lang/ko/settings.php b/lib/plugins/authmysql/lang/ko/settings.php new file mode 100644 index 000000000..c5518b8cc --- /dev/null +++ b/lib/plugins/authmysql/lang/ko/settings.php @@ -0,0 +1,41 @@ + + */ +$lang['server'] = 'MySQL 서버'; +$lang['user'] = 'MySQL 사용자 이름'; +$lang['password'] = '위 사용자의 비밀번호'; +$lang['database'] = '사용할 데이터베이스'; +$lang['charset'] = '데이터베이스에 사용하는 문자 집합'; +$lang['debug'] = '추가적인 디버그 정보 보이기'; +$lang['forwardClearPass'] = 'passcrypt 옵션을 사용하는 대신 아래 SQL 문에 일반 텍스트로 사용자 비밀번호를 전달'; +$lang['TablesToLock'] = '쓰기 작업에 잠궈야 하는 테이블의 쉼표로 구분한 목록'; +$lang['checkPass'] = '비밀번호를 확인하기 위한 SQL 문'; +$lang['getUserInfo'] = '사용자 정보를 가져오기 위한 SQL 문'; +$lang['getGroups'] = '사용자의 그룹 구성원을 가져오기 위한 SQL 문'; +$lang['getUsers'] = '모든 사용자를 나타낼 SQL 문'; +$lang['FilterLogin'] = '로그인 이름 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['FilterName'] = '전체 이름 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['FilterEmail'] = '이메일 주소 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['FilterGroup'] = '그룹 구성원 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['SortOrder'] = '사용자를 정렬할 SQL 조항'; +$lang['addUser'] = '새 사용자를 추가할 SQL 문'; +$lang['addGroup'] = '새 그룹을 추가할 SQL 문'; +$lang['addUserGroup'] = '기존 그룹에 사용자를 추가할 SQL 문'; +$lang['delGroup'] = '그룹을 제거할 SQL 문'; +$lang['getUserID'] = '사용자의 기본 키를 얻을 SQL 문'; +$lang['delUser'] = '사용자를 삭제할 SQL 문'; +$lang['delUserRefs'] = '모든 그룹에서 사용자를 제거할 SQL 문'; +$lang['updateUser'] = '사용자 프로필을 업데이트할 SQL 문'; +$lang['UpdateLogin'] = '사용자의 로그인 이름을 업데이트하기 위한 Update 조항'; +$lang['UpdatePass'] = '사용자의 비밀번호를 업데이트하기 위한 Update 조항'; +$lang['UpdateEmail'] = '사용자의 이메일 주소를 업데이트하기 위한 Update 조항'; +$lang['UpdateName'] = '사용자의 전체 이름을 업데이트하기 위한 Update 조항'; +$lang['UpdateTarget'] = '업데이트할 때 사용자를 식별할 Limit 조항'; +$lang['delUserGroup'] = '주어진 그룹에서 사용자를 제거할 SQL 문'; +$lang['getGroupID'] = '주어진 그룹의 기본 키를 얻을 SQL 문'; +$lang['debug_o_0'] = '없음'; +$lang['debug_o_1'] = '오류에만'; +$lang['debug_o_2'] = '모든 SQL 쿼리'; diff --git a/lib/plugins/authpgsql/lang/ko/settings.php b/lib/plugins/authpgsql/lang/ko/settings.php new file mode 100644 index 000000000..d21e81cd6 --- /dev/null +++ b/lib/plugins/authpgsql/lang/ko/settings.php @@ -0,0 +1,37 @@ + + */ +$lang['server'] = 'PostgreSQL 서버'; +$lang['port'] = 'PostgreSQL 서버의 포트'; +$lang['user'] = 'PostgreSQL 사용자 이름'; +$lang['password'] = '위 사용자의 비밀번호'; +$lang['database'] = '사용할 데이터베이스'; +$lang['debug'] = '추가적인 디버그 정보 보이기'; +$lang['forwardClearPass'] = 'passcrypt 옵션을 사용하는 대신 아래 SQL 문에 일반 텍스트로 사용자 비밀번호를 전달'; +$lang['checkPass'] = '비밀번호를 확인하기 위한 SQL 문'; +$lang['getUserInfo'] = '사용자 정보를 가져오기 위한 SQL 문'; +$lang['getGroups'] = '사용자의 그룹 구성원을 가져오기 위한 SQL 문'; +$lang['getUsers'] = '모든 사용자를 나타낼 SQL 문'; +$lang['FilterLogin'] = '로그인 이름 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['FilterName'] = '전체 이름 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['FilterEmail'] = '이메일 주소 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['FilterGroup'] = '그룹 구성원 별로 사용자를 필터하기 위한 SQL 조항'; +$lang['SortOrder'] = '사용자를 정렬할 SQL 조항'; +$lang['addUser'] = '새 사용자를 추가할 SQL 문'; +$lang['addGroup'] = '새 그룹을 추가할 SQL 문'; +$lang['addUserGroup'] = '기존 그룹에 사용자를 추가할 SQL 문'; +$lang['delGroup'] = '그룹을 제거할 SQL 문'; +$lang['getUserID'] = '사용자의 기본 키를 얻을 SQL 문'; +$lang['delUser'] = '사용자를 삭제할 SQL 문'; +$lang['delUserRefs'] = '모든 그룹에서 사용자를 제거할 SQL 문'; +$lang['updateUser'] = '사용자 프로필을 업데이트할 SQL 문'; +$lang['UpdateLogin'] = '사용자의 로그인 이름을 업데이트하기 위한 Update 조항'; +$lang['UpdatePass'] = '사용자의 비밀번호를 업데이트하기 위한 Update 조항'; +$lang['UpdateEmail'] = '사용자의 이메일 주소를 업데이트하기 위한 Update 조항'; +$lang['UpdateName'] = '사용자의 전체 이름을 업데이트하기 위한 Update 조항'; +$lang['UpdateTarget'] = '업데이트할 때 사용자를 식별할 Limit 조항'; +$lang['delUserGroup'] = '주어진 그룹에서 사용자를 제거할 SQL 문'; +$lang['getGroupID'] = '주어진 그룹의 기본 키를 얻을 SQL 문'; diff --git a/lib/plugins/config/lang/ko/lang.php b/lib/plugins/config/lang/ko/lang.php index cd2cc6d6c..7737af70f 100644 --- a/lib/plugins/config/lang/ko/lang.php +++ b/lib/plugins/config/lang/ko/lang.php @@ -1,13 +1,12 @@ - * @author SONG Younghwan - * @author Seung-Chul Yoo + * @author Seung-Chul Yoo * @author erial2@gmail.com * @author Myeongjin */ @@ -15,9 +14,9 @@ $lang['menu'] = '환경 설정'; $lang['error'] = '잘못된 값 때문에 설정을 바꿀 수 없습니다. 수정한 값을 검토하고 확인을 누르세요.
잘못된 값은 빨간 선으로 둘러싸여 있습니다.'; $lang['updated'] = '설정이 성공적으로 바뀌었습니다.'; -$lang['nochoice'] = '(다른 선택이 불가능합니다.)'; +$lang['nochoice'] = '(다른 선택이 불가능합니다)'; $lang['locked'] = '환경 설정 파일을 수정할 수 없습니다. 의도한 행동이 아니라면,
-파일 이름과 권한이 맞는지 확인하기 바랍니다. '; +파일 이름과 권한이 맞는지 확인하세요.'; $lang['danger'] = '위험: 이 옵션을 잘못 수정하면 환경설정 메뉴를 사용할 수 없을 수도 있습니다.'; $lang['warning'] = '경고: 이 옵션을 잘못 수정하면 잘못 동작할 수 있습니다.'; $lang['security'] = '보안 경고: 이 옵션은 보안에 위험이 있을 수 있습니다.'; @@ -47,7 +46,7 @@ $lang['start'] = '각 이름공간에서 사용할 시작 문서 $lang['lang'] = '인터페이스 언어'; $lang['template'] = '템플릿 (위키 디자인)'; $lang['tagline'] = '태그 라인 (템플릿이 지원할 때에 한함)'; -$lang['sidebar'] = '사이드바 문서 이름 (템플릿이 지원할 때에 한함). 비워두면 사이드바를 비활성화'; +$lang['sidebar'] = '사이드바 문서 이름 (템플릿이 지원할 때에 한함), 비워두면 사이드바를 비활성화'; $lang['license'] = '콘텐츠에 어떤 라이선스를 적용하겠습니까?'; $lang['savedir'] = '데이타 저장 디렉토리'; $lang['basedir'] = '서버 경로 (예를 들어 /dokuwiki/). 자동 감지를 하려면 비우세요.'; @@ -59,7 +58,7 @@ $lang['allowdebug'] = '디버그 허용 필요하지 않으면 금 $lang['recent'] = '최근 바뀐 문서당 항목 수'; $lang['recent_days'] = '최근 바뀐 문서 기준 시간 (날짜)'; $lang['breadcrumbs'] = '위치 "추적" 수. 0으로 설정하면 비활성화합니다.'; -$lang['youarehere'] = '계층형 위치 추적 (다음 위의 옵션을 비활성화하고 싶습니다)'; +$lang['youarehere'] = '계층형 위치 추적 (다음 위의 옵션을 비활성화하게 됩니다)'; $lang['fullpath'] = '문서 하단에 전체 경로 보여주기'; $lang['typography'] = '기호 대체'; $lang['dformat'] = '날짜 형식 (PHP strftime 기능 참고)'; @@ -108,7 +107,7 @@ $lang['target____interwiki'] = '인터위키 링크에 대한 타겟 창'; $lang['target____extern'] = '바깥 링크에 대한 타겟 창'; $lang['target____media'] = '미디어 링크에 대한 타겟 창'; $lang['target____windows'] = '창 링크에 대한 타겟 창'; -$lang['mediarevisions'] = '미디어 버전 관리를 사용하겠습니까?'; +$lang['mediarevisions'] = '미디어 판 관리를 사용하겠습니까?'; $lang['refcheck'] = '미디어 파일을 삭제하기 전에 사용하고 있는지 검사'; $lang['refshow'] = '위의 설정이 활성화되었을 때 보여줄 미디어 참고 수'; $lang['gdlib'] = 'GD 라이브러리 버전'; @@ -121,7 +120,7 @@ $lang['notify'] = '항상 이 이메일 주소로 바뀜 알림 $lang['registernotify'] = '항상 새 사용자한테 이 이메일 주소로 정보를 보냄'; $lang['mailfrom'] = '자동으로 보내지는 메일 발신자'; $lang['mailprefix'] = '자동으로 보내지는 메일의 제목 말머리 내용. 비웠을 경우 위키 제목 사용'; -$lang['htmlmail'] = '용량은 조금 더 크지만 보기 좋은 HTML 태그가 포함된 메일을 발송합니다. 텍스트만의 메일을 보내고자하면 비활성화하세요.'; +$lang['htmlmail'] = '용량은 조금 더 크지만 보기 좋은 HTML 태그가 포함된 메일을 보냅니다. 텍스트만의 메일을 보내고자하면 비활성화하세요.'; $lang['sitemap'] = '구글 사이트맵 생성 (날짜). 0일 경우 비활성화'; $lang['rss_type'] = 'XML 피드 타입'; $lang['rss_linkto'] = 'XML 피드 링크 정보'; @@ -141,12 +140,12 @@ $lang['gzip_output'] = 'xhml 내용 gzip 압축 사용'; $lang['compress'] = '최적화된 CSS, 자바스크립트 출력'; $lang['cssdatauri'] = '그림이 렌더링될 최대 용량 크기를 CSS에 규정해야 HTTP 요청 헤더 오버헤드 크기를 감소시킬 수 있습니다. 이 기술은 IE 7 이하에서는 작동하지 않습니다! 400에서 600 정도면 좋은 효율을 가져옵니다. 0로 지정할 경우 비활성화 됩니다.'; $lang['send404'] = '존재하지 않는 페이지에 대해 "HTTP 404/Page Not Found" 응답'; -$lang['broken_iua'] = '설치된 시스템에서 ignore_user_abort 기능에 문제가 있습니까? 문제가 있다면 색인이 정상적으로 동작하지 않습니다. 이 기능이 IIS+PHP/CGI에서 문제가 있는 것으로 알려졌습니다. 자세한 정보는 버그 852를 참고하기 바랍니다.'; +$lang['broken_iua'] = '설치된 시스템에서 ignore_user_abort 기능에 문제가 있습니까? 문제가 있다면 색인이 정상적으로 동작하지 않습니다. 이 기능이 IIS+PHP/CGI에서 문제가 있는 것으로 알려졌습니다. 자세한 정보는 버그 852를 참고하시기 바랍니다.'; $lang['xsendfile'] = '웹 서버가 정적 파일을 제공하도록 X-Sendfile 헤더를 사용하겠습니까? 웹 서버가 이 기능을 지원해야 합니다.'; $lang['renderer_xhtml'] = '주 (xhtml) 위키 출력 처리기'; $lang['renderer__core'] = '%s (DokuWiki 내부 기능)'; $lang['renderer__plugin'] = '%s (플러그인)'; -$lang['dnslookups'] = '이 옵션을 활성화하면 도쿠위키가 문서를 수정하는 사용자의 호스트 네임과 원격 IP 주소를 확인합니다. 서버가 느리거나, DNS를 운영하지 않거나 이 기능을 원치 않으면 비활성화 시켜주세요.'; +$lang['dnslookups'] = '이 옵션을 활성화하면 DokuWiki가 문서를 수정하는 사용자의 호스트 네임과 원격 IP 주소를 확인합니다. 서버가 느리거나, DNS를 운영하지 않거나 이 기능을 원치 않으면 비활성화 시켜주세요.'; $lang['proxy____host'] = '프록시 서버 이름'; $lang['proxy____port'] = '프록시 서버 포트'; $lang['proxy____user'] = '프록시 사용자 이름'; diff --git a/lib/plugins/plugin/lang/ko/lang.php b/lib/plugins/plugin/lang/ko/lang.php index 4fc6fd1d9..7ca021ac4 100644 --- a/lib/plugins/plugin/lang/ko/lang.php +++ b/lib/plugins/plugin/lang/ko/lang.php @@ -1,13 +1,12 @@ - * @author SONG Younghwan - * @author Seung-Chul Yoo + * @author Seung-Chul Yoo * @author erial2@gmail.com * @author Myeongjin */ @@ -48,11 +47,11 @@ $lang['error'] = '알 수 없는 문제가 발생했습니다.'; $lang['error_download'] = '플러그인 파일을 다운로드 할 수 없습니다: %s'; $lang['error_badurl'] = '잘못된 URL 같습니다 - URL에서 파일 이름을 알 수 없습니다.'; $lang['error_dircreate'] = '다운로드를 받기 위한 임시 디렉토리를 만들 수 없습니다.'; -$lang['error_decompress'] = '플러그인 관리자가 다운로드 받은 파일을 압축을 풀 수 없습니다. 잘못 다운로드 받았을 수도 있으니 다시 한번 시도해보기 바랍니다. 또는 압축 포맷을 알 수 없는 경우에는 다운로드한 후 수동으로 직접 설치하기 바랍니다.'; +$lang['error_decompress'] = '플러그인 관리자가 다운로드 받은 파일을 압축을 풀 수 없습니다. 잘못 다운로드 받았을 수도 있으니 다시 한번 시도하거나 압축 포맷을 알 수 없는 경우에는 다운로드한 후 수동으로 직접 설치하세요.'; $lang['error_copy'] = '플러그인을 설치하는 동안 파일 복사하는 데 오류가 발생했습니다. %s: 디스크가 꽉 찼거나 파일 접근 권한이 잘못된 경우입니다. 플러그인 설치가 부분적으로만 이루어졌을 것입니다. 설치가 불완전합니다.'; $lang['error_delete'] = '%s 플러그인을 삭제하는 동안 오류가 발생했습니다. 대부분의 경우 불완전한 파일이거나 디렉토리 접근 권한이 잘못된 경우입니다.'; $lang['enabled'] = '%s 플러그인을 활성화했습니다.'; -$lang['notenabled'] = '%s 플러그인을 활성화할 수 없습니다. 파일 권한을 확인하십시오.'; +$lang['notenabled'] = '%s 플러그인을 활성화할 수 없습니다. 파일 권한을 확인하세요.'; $lang['disabled'] = '%s 플러그인을 비활성화했습니다.'; -$lang['notdisabled'] = '%s 플러그인을 비활성화할 수 없습니다. 파일 권한을 확인하십시오.'; +$lang['notdisabled'] = '%s 플러그인을 비활성화할 수 없습니다. 파일 권한을 확인하하세요.'; $lang['packageinstalled'] = '플러그인 패키지(플러그인 %d개: %s)가 성공적으로 설치되었습니다.'; diff --git a/lib/plugins/popularity/lang/ko/intro.txt b/lib/plugins/popularity/lang/ko/intro.txt index b9e66094e..2513b77b4 100644 --- a/lib/plugins/popularity/lang/ko/intro.txt +++ b/lib/plugins/popularity/lang/ko/intro.txt @@ -4,6 +4,6 @@ 설치된 위키가 커짐에 따라서 이 과정을 반복할 필요가 있습니다. 반복된 데이타는 익명 ID로 구별되어집니다. -전송 데이타는 설치 DokuWiki 버전, 문서와 파일 수, 크기, 설치 플러그인, 설치 PHP 정보등을 포함하고 있습니다. +보내려는 데이터는 설치 DokuWiki 버전, 문서와 파일 수, 크기, 설치 플러그인, 설치 PHP 정보등을 포함하고 있습니다. -실제 보내질 자료는 아래와 같습니다. 정보를 보내려면 "자료 보내기" 버튼을 클릭합니다. \ No newline at end of file +실제 보내질 자료는 아래와 같습니다. 정보를 보내려면 "자료 보내기" 버튼을 클릭하세요. \ No newline at end of file diff --git a/lib/plugins/popularity/lang/ko/lang.php b/lib/plugins/popularity/lang/ko/lang.php index 5e6966402..c881b5a5a 100644 --- a/lib/plugins/popularity/lang/ko/lang.php +++ b/lib/plugins/popularity/lang/ko/lang.php @@ -2,18 +2,17 @@ /** * Korean language file * - * @author jk lee + * @author jk Lee * @author dongnak@gmail.com * @author Song Younghwan - * @author SONG Younghwan - * @author Seung-Chul Yoo + * @author Seung-Chul Yoo * @author erial2@gmail.com * @author Myeongjin */ $lang['name'] = '인기도 조사 (불러오는데 시간이 걸릴 수 있습니다.)'; $lang['submit'] = '자료 보내기'; $lang['autosubmit'] = '자료를 자동으로 매달 한번씩 보내기'; -$lang['submissionFailed'] = '다음과 같은 이유로 자료 전송에 실패했습니다:'; +$lang['submissionFailed'] = '다음과 같은 이유로 자료 보내기에 실패했습니다:'; $lang['submitDirectly'] = '아래의 양식에 맞춰 수동으로 작성된 자료를 보낼 수 있습니다'; -$lang['autosubmitError'] = '다음과 같은 이유로 자동 자료 전송에 실패했습니다:'; -$lang['lastSent'] = '자료가 전송되었습니다'; +$lang['autosubmitError'] = '다음과 같은 이유로 자동 자료 보내기에 실패했습니다:'; +$lang['lastSent'] = '자료를 보냈습니다'; diff --git a/lib/plugins/popularity/lang/ko/submitted.txt b/lib/plugins/popularity/lang/ko/submitted.txt index 12f0efe45..37cfbd8f2 100644 --- a/lib/plugins/popularity/lang/ko/submitted.txt +++ b/lib/plugins/popularity/lang/ko/submitted.txt @@ -1,3 +1,3 @@ ====== 인기도 조사 ====== -자료 전송이 성공적으로 완료되었습니다. \ No newline at end of file +자료를 성공적으로 보냈습니다. \ No newline at end of file diff --git a/lib/plugins/revert/lang/ko/intro.txt b/lib/plugins/revert/lang/ko/intro.txt index 30813fe49..548890ecd 100644 --- a/lib/plugins/revert/lang/ko/intro.txt +++ b/lib/plugins/revert/lang/ko/intro.txt @@ -1,3 +1,3 @@ -====== 복구 관리자 ====== +====== 되돌리기 관리자 ====== -스팸 공격으로 부터 자동으로 복구하는데 이 페이지가 도움이 될 수 있습니다. 스팸 공격받은 문서 목록을 찾으려면 문자열을 입력하기 바랍니다 (예를 들어 스팸 URL), 그 후 찾은 문서가 스팸 공격을 받았는지 확인하고 복구합니다. +스팸 공격으로부터 자동으로 되돌리는데 이 페이지가 도움이 될 수 있습니다. 스팸 공격받은 문서 목록을 찾으려면 문자열을 입력하고(예를 들어 스팸 URL) 나서 찾은 문서가 스팸 공격을 받았는지 확인하고 되돌리세요. diff --git a/lib/plugins/revert/lang/ko/lang.php b/lib/plugins/revert/lang/ko/lang.php index 90cba9bce..d36726279 100644 --- a/lib/plugins/revert/lang/ko/lang.php +++ b/lib/plugins/revert/lang/ko/lang.php @@ -2,20 +2,19 @@ /** * Korean language file * - * @author jk lee + * @author jk Lee * @author dongnak@gmail.com * @author Song Younghwan - * @author SONG Younghwan - * @author Seung-Chul Yoo + * @author Seung-Chul Yoo * @author erial2@gmail.com * @author Myeongjin */ -$lang['menu'] = '복구 관리자'; +$lang['menu'] = '되돌리기 관리자'; $lang['filter'] = '스팸 문서 찾기'; -$lang['revert'] = '선택한 문서 복구'; -$lang['reverted'] = '%s 버전을 %s 버전으로 복구'; -$lang['removed'] = '%s 삭제'; -$lang['revstart'] = '복구 작업을 시작합니다. 오랜 시간이 걸릴 수 있습니다. 완료되기 전에 스크립트 시간 초과가 발생한다면 더 작은 작업으로 나누어서 복구하기 바랍니다.'; -$lang['revstop'] = '복구 작업이 성공적으로 끝났습니다.'; -$lang['note1'] = '참고: 대소문자 구별하여 찾습니다.'; -$lang['note2'] = '참고: 이 문서는 %s 스팸 단어를 포함하지 않은 최근 이전 버전으로 복구됩니다. '; +$lang['revert'] = '선택한 문서 되돌리기'; +$lang['reverted'] = '%s 판을 %s 판으로 되돌림'; +$lang['removed'] = '%s 삭제함'; +$lang['revstart'] = '되돌리기 작업을 시작합니다. 오랜 시간이 걸릴 수 있습니다. 완료되기 전에 스크립트 시간 초과가 발생한다면 더 작은 작업으로 나누어서 되돌리시기 바랍니다.'; +$lang['revstop'] = '되돌리기 작업이 성공적으로 끝났습니다.'; +$lang['note1'] = '참고: 대소문자를 구별하여 찾습니다'; +$lang['note2'] = '참고: 이 문서는 %s 스팸 단어를 포함하지 않은 최근 이전 판으로 되돌립니다. '; diff --git a/lib/plugins/usermanager/lang/ko/lang.php b/lib/plugins/usermanager/lang/ko/lang.php index 58f9bf14a..f8c400d19 100644 --- a/lib/plugins/usermanager/lang/ko/lang.php +++ b/lib/plugins/usermanager/lang/ko/lang.php @@ -1,19 +1,18 @@ - * @author SONG Younghwan - * @author Seung-Chul Yoo + * @author Seung-Chul Yoo * @author erial2@gmail.com * @author Myeongjin */ $lang['menu'] = '사용자 관리자'; -$lang['noauth'] = '(사용자 인증이 불가능합니다.)'; -$lang['nosupport'] = '(사용자 관리가 지원되지 않습니다.)'; -$lang['badauth'] = '잘못된 인증 메카니즘'; +$lang['noauth'] = '(사용자 인증이 불가능합니다)'; +$lang['nosupport'] = '(사용자 관리가 지원되지 않습니다)'; +$lang['badauth'] = '인증 메카니즘이 잘못되었습니다'; $lang['user_id'] = '사용자'; $lang['user_pass'] = '비밀번호'; $lang['user_name'] = '실제 이름'; @@ -31,13 +30,13 @@ $lang['search'] = '찾기'; $lang['search_prompt'] = '찾기 실행'; $lang['clear'] = '찾기 필터 초기화'; $lang['filter'] = '필터'; -$lang['summary'] = '찾은 사용자 %3$d 중 %1$d-%2$d 보기. 전체 사용자 %4$d명.'; -$lang['nonefound'] = '찾은 사용자가 없습니다. 전체 사용자 %d명.'; +$lang['summary'] = '찾은 사용자 %3$d 중 %1$d-%2$d을(를) 봅니다. 전체 사용자는 %4$d명입니다.'; +$lang['nonefound'] = '찾은 사용자가 없습니다. 전체 사용자는 %d명입니다.'; $lang['delete_ok'] = '사용자 %d명이 삭제되었습니다'; $lang['delete_fail'] = '사용자 %d명의 삭제가 실패했습니다.'; -$lang['update_ok'] = '사용자 정보를 성공적으로 바꾸었습니다.'; -$lang['update_fail'] = '사용자 정보를 바꾸는 데 실패했습니다.'; -$lang['update_exists'] = '사용자 이름을 바꾸기는 데 실패했습니다. 사용자 이름(%s)이 이미 존재합니다. (다른 항목의 바뀜은 적용됩니다.)'; +$lang['update_ok'] = '사용자 정보를 성공적으로 바꾸었습니다'; +$lang['update_fail'] = '사용자 정보를 바꾸는 데 실패했습니다'; +$lang['update_exists'] = '사용자 이름을 바꾸는 데 실패했습니다. 사용자 이름(%s)이 이미 존재합니다. (다른 항목의 바뀜은 적용됩니다.)'; $lang['start'] = '시작'; $lang['prev'] = '이전'; $lang['next'] = '다음'; @@ -47,7 +46,7 @@ $lang['user_notify'] = '사용자에게 알림'; $lang['note_notify'] = '사용자에게 새로운 비밀번호를 준 경우에만 알림 이메일이 보내집니다.'; $lang['note_group'] = '새로운 사용자는 어떤 그룹도 설정하지 않은 경우에 기본 그룹(%s)에 추가됩니다.'; $lang['note_pass'] = '사용자 통지가 지정되어 있을 때 필드에 아무 값도 입력하지 않으면 비밀번호가 자동으로 만들어집니다.'; -$lang['add_ok'] = '사용자가 성공적으로 추가되었습니다.'; -$lang['add_fail'] = '사용자 추가가 실패했습니다.'; -$lang['notify_ok'] = '알림 이메일이 성공적으로 발송되었습니다. '; -$lang['notify_fail'] = '알림 이메일 발송이 실패했습니다.'; +$lang['add_ok'] = '사용자를 성공적으로 추가했습니다'; +$lang['add_fail'] = '사용자 추가를 실패했습니다'; +$lang['notify_ok'] = '알림 이메일을 성공적으로 보냈습니다'; +$lang['notify_fail'] = '알림 이메일을 보낼 수 없습니다'; -- cgit v1.2.3 From f2b500f5e7be771601ea1b1bc110337883d7caf2 Mon Sep 17 00:00:00 2001 From: Frank Loizzi Date: Sun, 24 Mar 2013 10:32:26 +0100 Subject: German (informal) language update --- lib/plugins/acl/lang/de-informal/lang.php | 1 + lib/plugins/authad/lang/de-informal/settings.php | 18 ++++ lib/plugins/authldap/lang/de-informal/settings.php | 6 ++ .../authmysql/lang/de-informal/settings.php | 6 ++ .../authpgsql/lang/de-informal/settings.php | 6 ++ lib/plugins/config/lang/de-informal/lang.php | 103 +++++++++++---------- lib/plugins/plugin/lang/de-informal/lang.php | 1 + lib/plugins/popularity/lang/de-informal/lang.php | 1 + lib/plugins/revert/lang/de-informal/lang.php | 1 + lib/plugins/usermanager/lang/de-informal/lang.php | 1 + 10 files changed, 93 insertions(+), 51 deletions(-) create mode 100644 lib/plugins/authad/lang/de-informal/settings.php create mode 100644 lib/plugins/authldap/lang/de-informal/settings.php create mode 100644 lib/plugins/authmysql/lang/de-informal/settings.php create mode 100644 lib/plugins/authpgsql/lang/de-informal/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/de-informal/lang.php b/lib/plugins/acl/lang/de-informal/lang.php index 05f7df037..8b1416137 100644 --- a/lib/plugins/acl/lang/de-informal/lang.php +++ b/lib/plugins/acl/lang/de-informal/lang.php @@ -8,6 +8,7 @@ * @author Matthias Schulte * @author Christian Wichmann * @author Pierre Corell + * @author Frank Loizzi */ $lang['admin_acl'] = 'Zugangsverwaltung'; $lang['acl_group'] = 'Gruppe'; diff --git a/lib/plugins/authad/lang/de-informal/settings.php b/lib/plugins/authad/lang/de-informal/settings.php new file mode 100644 index 000000000..da33a2e98 --- /dev/null +++ b/lib/plugins/authad/lang/de-informal/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['account_suffix'] = 'Ihre Kontoendung. Z.B. @my.domain.org'; +$lang['base_dn'] = 'Ihre base DN. Z.B. DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = 'Eine kommaseparierte Liste von Domänenkontrollern. Z.B. srv1.domain.org,srv2.domain.org'; +$lang['ad_username'] = 'Ein priviligierter Active Directory Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional aber benötigt für einige Aktionen wie das Senden von Mitglieder E-Mails.'; +$lang['ad_password'] = 'Das Passwort des obigen Benutzers.'; +$lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; +$lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; +$lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterhalb nicht aktivieren.'; +$lang['use_tls'] = 'TLS-Verbindung benutzen? Falls ja, SSL oberhalb nicht aktivieren.'; +$lang['debug'] = 'Zusätzliche Debug-Informationen bei Fehlern anzeigen?'; +$lang['expirywarn'] = 'Tage im Voraus um Benutzer über ablaufende Passwörter zu informieren. 0 zum Ausschalten.'; +$lang['additional'] = 'Eine kommaseparierte Liste von zusätzlichen AD Attributen von den Benutzdedaten abrufen. Wird von einigen Plugins benutzt.'; diff --git a/lib/plugins/authldap/lang/de-informal/settings.php b/lib/plugins/authldap/lang/de-informal/settings.php new file mode 100644 index 000000000..e7b3d2673 --- /dev/null +++ b/lib/plugins/authldap/lang/de-informal/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authmysql/lang/de-informal/settings.php b/lib/plugins/authmysql/lang/de-informal/settings.php new file mode 100644 index 000000000..e7b3d2673 --- /dev/null +++ b/lib/plugins/authmysql/lang/de-informal/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authpgsql/lang/de-informal/settings.php b/lib/plugins/authpgsql/lang/de-informal/settings.php new file mode 100644 index 000000000..e7b3d2673 --- /dev/null +++ b/lib/plugins/authpgsql/lang/de-informal/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php index d86c2d809..58a78fe47 100644 --- a/lib/plugins/config/lang/de-informal/lang.php +++ b/lib/plugins/config/lang/de-informal/lang.php @@ -8,6 +8,7 @@ * @author Matthias Schulte * @author Christian Wichmann * @author Pierre Corell + * @author Frank Loizzi */ $lang['menu'] = 'Einstellungen'; $lang['error'] = 'Einstellungen wurden nicht aktualisiert auf Grund eines ungültigen Wertes. Bitte überprüfe deine Änderungen und versuche es erneut.
Die/der ungültige(n) Wert(e) werden durch eine rote Umrandung hervorgehoben.'; @@ -38,28 +39,29 @@ $lang['_template_sufix'] = 'Vorlageneinstellungen'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; $lang['_msg_setting_no_default'] = 'Kein Standardwert.'; -$lang['fmode'] = 'Zugriffsrechte bei Dateierstellung'; -$lang['dmode'] = 'Zugriffsrechte bei Verzeichniserstellung'; -$lang['lang'] = 'Sprache'; -$lang['basedir'] = 'Installationsverzeichnis'; -$lang['baseurl'] = 'Installationspfad (URL)'; -$lang['savedir'] = 'Ordner zum Speichern von Daten'; -$lang['cookiedir'] = 'Cookie Pfad. Leer lassen, um die Standard-Url zu belassen.'; -$lang['start'] = 'Name der Startseite'; $lang['title'] = 'Wiki Titel'; +$lang['start'] = 'Name der Startseite'; +$lang['lang'] = 'Sprache'; $lang['template'] = 'Vorlage'; $lang['tagline'] = 'Tag-Linie (nur, wenn vom Template unterstützt)'; $lang['sidebar'] = 'Name der Sidebar-Seite (nur, wenn vom Template unterstützt)), ein leeres Feld deaktiviert die Sidebar'; $lang['license'] = 'Unter welcher Lizenz sollte Ihr Inhalt veröffentlicht werden?'; -$lang['fullpath'] = 'Zeige vollen Pfad der Datei in Fußzeile an'; +$lang['savedir'] = 'Ordner zum Speichern von Daten'; +$lang['basedir'] = 'Installationsverzeichnis'; +$lang['baseurl'] = 'Installationspfad (URL)'; +$lang['cookiedir'] = 'Cookie Pfad. Leer lassen, um die Standard-Url zu belassen.'; +$lang['dmode'] = 'Zugriffsrechte bei Verzeichniserstellung'; +$lang['fmode'] = 'Zugriffsrechte bei Dateierstellung'; +$lang['allowdebug'] = 'Debug-Ausgaben erlauben Abschalten wenn nicht benötigt!'; $lang['recent'] = 'letzte Änderungen'; +$lang['recent_days'] = 'Wie viele Änderungen sollen vorgehalten werden? (Tage)'; $lang['breadcrumbs'] = 'Anzahl der Einträge im "Krümelpfad"'; $lang['youarehere'] = 'Hierarchische Pfadnavigation verwenden'; +$lang['fullpath'] = 'Zeige vollen Pfad der Datei in Fußzeile an'; $lang['typography'] = 'Mach drucktechnische Ersetzungen'; -$lang['htmlok'] = 'Erlaube eingebettetes HTML'; -$lang['phpok'] = 'Erlaube eingebettetes PHP'; $lang['dformat'] = 'Datumsformat (siehe PHPs strftime Funktion)'; $lang['signature'] = 'Signatur'; +$lang['showuseras'] = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird'; $lang['toptoclevel'] = 'Inhaltsverzeichnis bei dieser Überschriftengröße beginnen'; $lang['tocminheads'] = 'Mindestanzahl der Überschriften die entscheidet, ob ein Inhaltsverzeichnis erscheinen soll'; $lang['maxtoclevel'] = 'Maximale Überschriftsgröße für Inhaltsverzeichnis'; @@ -67,16 +69,8 @@ $lang['maxseclevel'] = 'Abschnitte bis zu dieser Stufe einzeln editier $lang['camelcase'] = 'CamelCase-Verlinkungen verwenden'; $lang['deaccent'] = 'Seitennamen bereinigen'; $lang['useheading'] = 'Erste Überschrift als Seitennamen verwenden'; -$lang['refcheck'] = 'Auf Verwendung beim Löschen von Media-Dateien testen'; -$lang['refshow'] = 'Wie viele Verwendungsorte der Media-Datei zeigen'; -$lang['allowdebug'] = 'Debug-Ausgaben erlauben Abschalten wenn nicht benötigt!'; -$lang['mediarevisions'] = 'Media-Revisionen (ältere Versionen) aktivieren?'; -$lang['usewordblock'] = 'Blockiere Spam basierend auf der Wortliste'; -$lang['indexdelay'] = 'Zeit bevor Suchmaschinenindexierung erlaubt ist'; -$lang['relnofollow'] = 'rel="nofollow" verwenden'; -$lang['mailguard'] = 'E-Mail-Adressen schützen'; -$lang['iexssprotect'] = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen'; -$lang['showuseras'] = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird'; +$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Indexansicht an. Bei Aktivierung dieser Einstellung werden alle Namensräume versteckt, in welchen der Benutzer keine Leserechte hat. Dies könnte dazu führen, dass lesbare Unternamensräume versteckt werden. Dies kann die Indexansicht bei bestimmten Zugangskontrolleinstellungen unbenutzbar machen.'; +$lang['hidepages'] = 'Seiten verstecken (Regulärer Ausdruck)'; $lang['useacl'] = 'Benutze Zugangskontrollliste'; $lang['autopasswd'] = 'Automatisch erzeugte Passwörter'; $lang['authtype'] = 'Authentifizierungsmethode'; @@ -85,62 +79,69 @@ $lang['defaultgroup'] = 'Standardgruppe'; $lang['superuser'] = 'Administrator - Eine Gruppe oder Nutzer mit vollem Zugriff auf alle Seiten und Administrationswerkzeuge.'; $lang['manager'] = 'Manager - Eine Gruppe oder Nutzer mit Zugriff auf einige Administrationswerkzeuge.'; $lang['profileconfirm'] = 'Änderungen am Benutzerprofil mit Passwort bestätigen'; +$lang['rememberme'] = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)'; $lang['disableactions'] = 'Deaktiviere DokuWiki\'s Zugriffe'; $lang['disableactions_check'] = 'Check'; $lang['disableactions_subscription'] = 'Bestellen/Abbestellen'; $lang['disableactions_wikicode'] = 'Zeige Quelle/Exportiere Rohdaten'; $lang['disableactions_other'] = 'Weitere Aktionen (durch Komma getrennt)'; -$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Indexansicht an. Bei Aktivierung dieser Einstellung werden alle Namensräume versteckt, in welchen der Benutzer keine Leserechte hat. Dies könnte dazu führen, dass lesbare Unternamensräume versteckt werden. Dies kann die Indexansicht bei bestimmten Zugangskontrolleinstellungen unbenutzbar machen.'; $lang['auth_security_timeout'] = 'Zeitüberschreitung bei der Authentifizierung (Sekunden)'; $lang['securecookie'] = 'Sollen Cookies, die via HTTPS gesetzt wurden nur per HTTPS versendet werden? Deaktiviere diese Option, wenn nur der Login deines Wikis mit SSL gesichert ist, aber das Betrachten des Wikis ungesichert geschieht.'; $lang['remote'] = 'Aktiviert den externen API-Zugang. Diese Option erlaubt es externen Anwendungen von außen auf die XML-RPC-Schnittstelle oder anderweitigen Schnittstellen zuzugreifen.'; $lang['remoteuser'] = 'Zugriff auf die externen Schnittstellen durch kommaseparierte Angabe von Benutzern oder Gruppen einschränken. Ein leeres Feld erlaubt Zugriff für jeden.'; -$lang['updatecheck'] = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.'; -$lang['userewrite'] = 'Benutze schöne URLs'; -$lang['useslash'] = 'Benutze Schrägstrich als Namensraumtrenner in URLs'; +$lang['usewordblock'] = 'Blockiere Spam basierend auf der Wortliste'; +$lang['relnofollow'] = 'rel="nofollow" verwenden'; +$lang['indexdelay'] = 'Zeit bevor Suchmaschinenindexierung erlaubt ist'; +$lang['mailguard'] = 'E-Mail-Adressen schützen'; +$lang['iexssprotect'] = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen'; $lang['usedraft'] = 'Speichere automatisch Entwürfe während der Bearbeitung'; -$lang['sepchar'] = 'Worttrenner für Seitennamen in URLs'; -$lang['canonical'] = 'Immer Links mit vollständigen URLs erzeugen'; -$lang['fnencode'] = 'Methode um nicht-ASCII Dateinamen zu kodieren.'; -$lang['autoplural'] = 'Bei Links automatisch nach vorhandenen Pluralformen suchen'; -$lang['compression'] = 'Komprimierungsmethode für alte Seitenrevisionen'; -$lang['cachetime'] = 'Maximale Cachespeicherung (Sekunden)'; +$lang['htmlok'] = 'Erlaube eingebettetes HTML'; +$lang['phpok'] = 'Erlaube eingebettetes PHP'; $lang['locktime'] = 'Maximales Alter für Seitensperren (Sekunden)'; +$lang['cachetime'] = 'Maximale Cachespeicherung (Sekunden)'; +$lang['target____wiki'] = 'Zielfenstername für interne Links'; +$lang['target____interwiki'] = 'Zielfenstername für InterWiki-Links'; +$lang['target____extern'] = 'Zielfenstername für externe Links'; +$lang['target____media'] = 'Zielfenstername für Medienlinks'; +$lang['target____windows'] = 'Zielfenstername für Windows-Freigaben-Links'; +$lang['mediarevisions'] = 'Media-Revisionen (ältere Versionen) aktivieren?'; +$lang['refcheck'] = 'Auf Verwendung beim Löschen von Media-Dateien testen'; +$lang['refshow'] = 'Wie viele Verwendungsorte der Media-Datei zeigen'; +$lang['gdlib'] = 'GD Lib Version'; +$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug'; +$lang['jpg_quality'] = 'JPEG Kompressionsqualität (0-100)'; $lang['fetchsize'] = 'Maximale Größe (in Bytes), die fetch.php von extern herunterladen darf'; +$lang['subscribers'] = 'E-Mail-Abos zulassen'; +$lang['subscribe_time'] = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.'; $lang['notify'] = 'Sende Änderungsbenachrichtigungen an diese E-Mail-Adresse.'; $lang['registernotify'] = 'Sende Information bei neu registrierten Benutzern an diese E-Mail-Adresse.'; $lang['mailfrom'] = 'Absenderadresse für automatisch erzeugte E-Mails'; $lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen'; $lang['htmlmail'] = 'Versendet optisch angenehmere, aber größere E-Mails im HTML-Format (multipart). Deaktivieren, um Text-Mails zu versenden.'; +$lang['sitemap'] = 'Erzeuge Google Sitemaps (Tage)'; +$lang['rss_type'] = 'XML-Feed-Format'; +$lang['rss_linkto'] = 'XML-Feed verlinken auf'; +$lang['rss_content'] = 'Was soll in XML-Feedinhalten angezeigt werden?'; +$lang['rss_update'] = 'Aktualisierungsintervall für XML-Feeds (Sekunden)'; +$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen'; +$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?'; +$lang['updatecheck'] = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.'; +$lang['userewrite'] = 'Benutze schöne URLs'; +$lang['useslash'] = 'Benutze Schrägstrich als Namensraumtrenner in URLs'; +$lang['sepchar'] = 'Worttrenner für Seitennamen in URLs'; +$lang['canonical'] = 'Immer Links mit vollständigen URLs erzeugen'; +$lang['fnencode'] = 'Methode um nicht-ASCII Dateinamen zu kodieren.'; +$lang['autoplural'] = 'Bei Links automatisch nach vorhandenen Pluralformen suchen'; +$lang['compression'] = 'Komprimierungsmethode für alte Seitenrevisionen'; $lang['gzip_output'] = 'Seiten mit gzip komprimiert ausliefern'; -$lang['gdlib'] = 'GD Lib Version'; -$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug'; -$lang['jpg_quality'] = 'JPEG Kompressionsqualität (0-100)'; -$lang['subscribers'] = 'E-Mail-Abos zulassen'; -$lang['subscribe_time'] = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.'; $lang['compress'] = 'JavaScript und Stylesheets komprimieren'; $lang['cssdatauri'] = 'Größe in Bytes, bis zu der Bilder in css-Dateien referenziert werden können, um HTTP-Anfragen zu minimieren. Diese Technik funktioniert nicht im IE 7 und älter! 400 bis 600 Bytes sind gute Werte. Setze 0 für inaktive Funktion.'; -$lang['hidepages'] = 'Seiten verstecken (Regulärer Ausdruck)'; $lang['send404'] = 'Sende "HTTP 404/Seite nicht gefunden" für nicht existierende Seiten'; -$lang['sitemap'] = 'Erzeuge Google Sitemaps (Tage)'; $lang['broken_iua'] = 'Falls die Funktion ignore_user_abort auf deinem System nicht funktioniert, könnte der Such-Index nicht funktionieren. IIS+PHP/CGI ist bekannt dafür. Siehe auch Bug 852.'; $lang['xsendfile'] = 'Den X-Sendfile-Header nutzen, um Dateien direkt vom Webserver ausliefern zu lassen? Dein Webserver muss dies unterstützen!'; $lang['renderer_xhtml'] = 'Standard-Renderer für die normale (XHTML) Wiki-Ausgabe.'; $lang['renderer__core'] = '%s (DokuWiki Kern)'; $lang['renderer__plugin'] = '%s (Erweiterung)'; -$lang['rememberme'] = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)'; -$lang['rss_type'] = 'XML-Feed-Format'; -$lang['rss_linkto'] = 'XML-Feed verlinken auf'; -$lang['rss_content'] = 'Was soll in XML-Feedinhalten angezeigt werden?'; -$lang['rss_update'] = 'Aktualisierungsintervall für XML-Feeds (Sekunden)'; -$lang['recent_days'] = 'Wie viele Änderungen sollen vorgehalten werden? (Tage)'; -$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen'; -$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?'; -$lang['target____wiki'] = 'Zielfenstername für interne Links'; -$lang['target____interwiki'] = 'Zielfenstername für InterWiki-Links'; -$lang['target____extern'] = 'Zielfenstername für externe Links'; -$lang['target____media'] = 'Zielfenstername für Medienlinks'; -$lang['target____windows'] = 'Zielfenstername für Windows-Freigaben-Links'; $lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn du einen langsamen, unbrauchbaren DNS-Server verwendest oder die Funktion nicht benötigst, dann sollte diese Option deaktivert sein.'; $lang['proxy____host'] = 'Proxyadresse'; $lang['proxy____port'] = 'Proxyport'; diff --git a/lib/plugins/plugin/lang/de-informal/lang.php b/lib/plugins/plugin/lang/de-informal/lang.php index abcdf2c83..a082218d8 100644 --- a/lib/plugins/plugin/lang/de-informal/lang.php +++ b/lib/plugins/plugin/lang/de-informal/lang.php @@ -8,6 +8,7 @@ * @author Matthias Schulte * @author Christian Wichmann * @author Pierre Corell + * @author Frank Loizzi */ $lang['menu'] = 'Plugins verwalten'; $lang['download'] = 'Herunterladen und installieren einer neuen Erweiterung'; diff --git a/lib/plugins/popularity/lang/de-informal/lang.php b/lib/plugins/popularity/lang/de-informal/lang.php index 40e6c4343..513a1b6e1 100644 --- a/lib/plugins/popularity/lang/de-informal/lang.php +++ b/lib/plugins/popularity/lang/de-informal/lang.php @@ -8,6 +8,7 @@ * @author Matthias Schulte * @author Christian Wichmann * @author Pierre Corell + * @author Frank Loizzi */ $lang['name'] = 'Popularitätsrückmeldung (kann eine Weile dauern, bis es fertig geladen wurde)'; $lang['submit'] = 'Sende Daten'; diff --git a/lib/plugins/revert/lang/de-informal/lang.php b/lib/plugins/revert/lang/de-informal/lang.php index c199bb55b..3a96429c7 100644 --- a/lib/plugins/revert/lang/de-informal/lang.php +++ b/lib/plugins/revert/lang/de-informal/lang.php @@ -8,6 +8,7 @@ * @author Matthias Schulte * @author Christian Wichmann * @author Pierre Corell + * @author Frank Loizzi */ $lang['menu'] = 'Zurückstellungsmanager'; $lang['filter'] = 'Durchsuche als Spam markierte Seiten'; diff --git a/lib/plugins/usermanager/lang/de-informal/lang.php b/lib/plugins/usermanager/lang/de-informal/lang.php index e53781c77..07390854f 100644 --- a/lib/plugins/usermanager/lang/de-informal/lang.php +++ b/lib/plugins/usermanager/lang/de-informal/lang.php @@ -8,6 +8,7 @@ * @author Matthias Schulte * @author Christian Wichmann * @author Pierre Corell + * @author Frank Loizzi */ $lang['menu'] = 'Benutzerverwaltung'; $lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)'; -- cgit v1.2.3 From 939baf40725d16e0cd929a9dadbf12ae6b0412c6 Mon Sep 17 00:00:00 2001 From: senorandy Date: Tue, 26 Mar 2013 10:14:44 +0100 Subject: Update default.php Wihtout this, unable to fetch any AD info.. also allows SSO. --- lib/plugins/authad/conf/default.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/conf/default.php b/lib/plugins/authad/conf/default.php index 05d6c328e..9274db209 100644 --- a/lib/plugins/authad/conf/default.php +++ b/lib/plugins/authad/conf/default.php @@ -4,11 +4,11 @@ $conf['account_suffix'] = ''; $conf['base_dn'] = ''; $conf['domain_controllers'] = ''; $conf['sso'] = 0; -$conf['ad_username'] = ''; -$conf['ad_password'] = ''; +$conf['admin_username'] = ''; +$conf['admin_password'] = ''; $conf['real_primarygroup'] = 0; $conf['use_ssl'] = 0; $conf['use_tls'] = 0; $conf['debug'] = 0; $conf['expirywarn'] = 0; -$conf['additional'] = ''; \ No newline at end of file +$conf['additional'] = ''; -- cgit v1.2.3 From 0bb7340a11736568d7b537dfca36e52d5032c193 Mon Sep 17 00:00:00 2001 From: senorandy Date: Tue, 26 Mar 2013 10:15:31 +0100 Subject: Update metadata.php Without this unable to access AD info. Also allows SSO. --- lib/plugins/authad/conf/metadata.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/conf/metadata.php b/lib/plugins/authad/conf/metadata.php index dc251a108..fbc3f163c 100644 --- a/lib/plugins/authad/conf/metadata.php +++ b/lib/plugins/authad/conf/metadata.php @@ -4,11 +4,11 @@ $meta['account_suffix'] = array('string'); $meta['base_dn'] = array('string'); $meta['domain_controllers'] = array('string'); $meta['sso'] = array('onoff'); -$meta['ad_username'] = array('string'); -$meta['ad_password'] = array('password'); +$meta['admin_username'] = array('string'); +$meta['admin_password'] = array('password'); $meta['real_primarygroup'] = array('onoff'); $meta['use_ssl'] = array('onoff'); $meta['use_tls'] = array('onoff'); $meta['debug'] = array('onoff'); $meta['expirywarn'] = array('numeric', '_min'=>0); -$meta['additional'] = array('string'); \ No newline at end of file +$meta['additional'] = array('string'); -- cgit v1.2.3 From 3bca6c65969446444ec4e8945d670c815b6ba066 Mon Sep 17 00:00:00 2001 From: senorandy Date: Tue, 26 Mar 2013 10:16:05 +0100 Subject: Update settings.php --- lib/plugins/authad/lang/en/settings.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/en/settings.php b/lib/plugins/authad/lang/en/settings.php index 41176847a..7728d5ac4 100644 --- a/lib/plugins/authad/lang/en/settings.php +++ b/lib/plugins/authad/lang/en/settings.php @@ -3,12 +3,12 @@ $lang['account_suffix'] = 'Your account suffix. Eg. @my.domain.org'; $lang['base_dn'] = 'Your base DN. Eg. DC=my,DC=domain,DC=org'; $lang['domain_controllers'] = 'A comma separated list of Domain controllers. Eg. srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = 'A privileged Active Directory user with access to all other user\'s data. Optional, but needed for certain actions like sending subscription mails.'; -$lang['ad_password'] = 'The password of the above user.'; +$lang['admin_username'] = 'A privileged Active Directory user with access to all other user\'s data. Optional, but needed for certain actions like sending subscription mails.'; +$lang['admin_password'] = 'The password of the above user.'; $lang['sso'] = 'Should Single-Sign-On via Kerberos or NTLM be used?'; $lang['real_primarygroup'] = 'Should the real primary group be resolved instead of assuming "Domain Users" (slower)'; $lang['use_ssl'] = 'Use SSL connection? If used, do not enable TLS below.'; $lang['use_tls'] = 'Use TLS connection? If used, do not enable SSL above.'; $lang['debug'] = 'Display additional debugging output on errors?'; $lang['expirywarn'] = 'Days in advance to warn user about expiring password. 0 to disable.'; -$lang['additional'] = 'A comma separated list of additional AD attributes to fetch from user data. Used by some plugins.'; \ No newline at end of file +$lang['additional'] = 'A comma separated list of additional AD attributes to fetch from user data. Used by some plugins.'; -- cgit v1.2.3 From f6af1fe63a13b2734d1b69817ec800c51e6def9c Mon Sep 17 00:00:00 2001 From: lupo49 Date: Sun, 31 Mar 2013 20:40:03 +0200 Subject: de/de-informal: language updates for the core, authldap, authmysql, authpgsql --- lib/plugins/authad/lang/de-informal/settings.php | 11 +++--- lib/plugins/authad/lang/de/settings.php | 19 ++++++++++ lib/plugins/authldap/lang/de-informal/settings.php | 20 +++++++++-- lib/plugins/authldap/lang/de/settings.php | 22 ++++++++++++ lib/plugins/authmysql/auth.php | 18 ++++++++-- .../authmysql/lang/de-informal/settings.php | 40 +++++++++++++++++++-- lib/plugins/authmysql/lang/de/settings.php | 42 ++++++++++++++++++++++ .../authpgsql/lang/de-informal/settings.php | 36 +++++++++++++++++-- lib/plugins/authpgsql/lang/de/settings.php | 38 ++++++++++++++++++++ 9 files changed, 233 insertions(+), 13 deletions(-) create mode 100644 lib/plugins/authad/lang/de/settings.php create mode 100644 lib/plugins/authldap/lang/de/settings.php create mode 100644 lib/plugins/authmysql/lang/de/settings.php create mode 100644 lib/plugins/authpgsql/lang/de/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/de-informal/settings.php b/lib/plugins/authad/lang/de-informal/settings.php index da33a2e98..f6ba679ff 100644 --- a/lib/plugins/authad/lang/de-informal/settings.php +++ b/lib/plugins/authad/lang/de-informal/settings.php @@ -3,11 +3,12 @@ * German (informal) language file * * @author Frank Loizzi + * @author Matthias Schulte */ -$lang['account_suffix'] = 'Ihre Kontoendung. Z.B. @my.domain.org'; -$lang['base_dn'] = 'Ihre base DN. Z.B. DC=my,DC=domain,DC=org'; -$lang['domain_controllers'] = 'Eine kommaseparierte Liste von Domänenkontrollern. Z.B. srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = 'Ein priviligierter Active Directory Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional aber benötigt für einige Aktionen wie das Senden von Mitglieder E-Mails.'; +$lang['account_suffix'] = 'Dein Account-Suffix. Z.B. @my.domain.org'; +$lang['base_dn'] = 'Dein Base-DN. Z.B. DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z.B. srv1.domain.org,srv2.domain.org'; +$lang['ad_username'] = 'Ein privilegierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; $lang['ad_password'] = 'Das Passwort des obigen Benutzers.'; $lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; $lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; @@ -15,4 +16,4 @@ $lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterha $lang['use_tls'] = 'TLS-Verbindung benutzen? Falls ja, SSL oberhalb nicht aktivieren.'; $lang['debug'] = 'Zusätzliche Debug-Informationen bei Fehlern anzeigen?'; $lang['expirywarn'] = 'Tage im Voraus um Benutzer über ablaufende Passwörter zu informieren. 0 zum Ausschalten.'; -$lang['additional'] = 'Eine kommaseparierte Liste von zusätzlichen AD Attributen von den Benutzdedaten abrufen. Wird von einigen Plugins benutzt.'; +$lang['additional'] = 'Eine Komma-separierte Liste von zusätzlichen AD-Attributen, die von den Benutzerobjekten abgefragt werden. Wird von einigen Plugins benutzt.'; diff --git a/lib/plugins/authad/lang/de/settings.php b/lib/plugins/authad/lang/de/settings.php new file mode 100644 index 000000000..38bccbf24 --- /dev/null +++ b/lib/plugins/authad/lang/de/settings.php @@ -0,0 +1,19 @@ + + * @author Matthias Schulte + */ +$lang['account_suffix'] = 'Ihr Account-Suffix. Z.B. @my.domain.org'; +$lang['base_dn'] = 'Ihre Base-DN. Z.B. DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z.B. srv1.domain.org,srv2.domain.org'; +$lang['ad_username'] = 'Ein priviligierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; +$lang['ad_password'] = 'Das Passwort des obigen Benutzers.'; +$lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; +$lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; +$lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterhalb nicht aktivieren.'; +$lang['use_tls'] = 'TLS-Verbindung benutzen? Falls ja, SSL oberhalb nicht aktivieren.'; +$lang['debug'] = 'Zusätzliche Debug-Informationen bei Fehlern anzeigen?'; +$lang['expirywarn'] = 'Tage im Voraus um Benutzer über ablaufende Passwörter zu informieren. 0 zum Ausschalten.'; +$lang['additional'] = 'Eine Komma-separierte Liste von zusätzlichen AD-Attributen, die von den Benutzerobjekten abgefragt werden. Wird von einigen Plugins benutzt.'; diff --git a/lib/plugins/authldap/lang/de-informal/settings.php b/lib/plugins/authldap/lang/de-informal/settings.php index e7b3d2673..fa0fc1521 100644 --- a/lib/plugins/authldap/lang/de-informal/settings.php +++ b/lib/plugins/authldap/lang/de-informal/settings.php @@ -1,6 +1,22 @@ + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Matthias Schulte */ +$lang['server'] = 'Adresse zum LDAP-Server. Entweder als Hostname (localhost) oder als FQDN (ldap://server.tld:389).'; +$lang['port'] = 'Port des LDAP-Servers, falls kein Port angegeben wurde.'; +$lang['usertree'] = 'Zweig, in dem die die Benutzeraccounts gespeichert sind. Zum Beispiel: ou=People, dc=server, dc=tld.'; +$lang['grouptree'] = 'Zweig, in dem die Benutzergruppen gespeichert sind. Zum Beispiel: ou=Group, dc=server, dc=tld.'; +$lang['userfilter'] = 'LDAP-Filter, um die Benutzeraccounts zu suchen. Zum Beispiel: (&(uid=%{user})(objectClass=posixAccount)).'; +$lang['groupfilter'] = 'LDAP-Filter, um die Benutzergruppen zu suchen. Zum Beispiel: (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user}))).'; +$lang['version'] = 'Zu verwendende Protokollversion von LDAP.'; +$lang['starttls'] = 'Verbindung über TLS aufbauen?'; +$lang['referrals'] = 'Weiterverfolgen von LDAP-Referrals (Verweise)?'; +$lang['binddn'] = 'DN eines optionalen Benutzers, wenn der anonyme Zugriff nicht ausreichend ist. Zum Beispiel: cn=admin, dc=my, dc=home.'; +$lang['bindpw'] = 'Passwort des angegebenen Benutzers.'; +$lang['userscope'] = 'Die Suchweite nach Benutzeraccounts.'; +$lang['groupscope'] = 'Die Suchweite nach Benutzergruppen.'; +$lang['groupkey'] = 'Gruppieren der Benutzeraccounts anhand eines beliebigen Benutzerattributes z. B. Telefonnummer oder Abteilung, anstelle der Standard-Gruppen).'; +$lang['debug'] = 'Debug-Informationen beim Auftreten von Fehlern anzeigen?'; diff --git a/lib/plugins/authldap/lang/de/settings.php b/lib/plugins/authldap/lang/de/settings.php new file mode 100644 index 000000000..b237201d8 --- /dev/null +++ b/lib/plugins/authldap/lang/de/settings.php @@ -0,0 +1,22 @@ + + */ +$lang['server'] = 'Adresse zum LDAP-Server. Entweder als Hostname (localhost) oder als FQDN (ldap://server.tld:389).'; +$lang['port'] = 'Port des LDAP-Servers, falls kein Port angegeben wurde.'; +$lang['usertree'] = 'Zweig, in dem die die Benutzeraccounts gespeichert sind. Zum Beispiel: ou=People, dc=server, dc=tld.'; +$lang['grouptree'] = 'Zweig, in dem die Benutzergruppen gespeichert sind. Zum Beispiel: ou=Group, dc=server, dc=tld.'; +$lang['userfilter'] = 'LDAP-Filter, um die Benutzeraccounts zu suchen. Zum Beispiel: (&(uid=%{user})(objectClass=posixAccount)).'; +$lang['groupfilter'] = 'LDAP-Filter, um die Benutzergruppen zu suchen. Zum Beispiel: (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user}))).'; +$lang['version'] = 'Zu verwendende Protokollversion von LDAP.'; +$lang['starttls'] = 'Verbindung über TLS aufbauen?'; +$lang['referrals'] = 'Weiterverfolgen von LDAP-Referrals (Verweise)?'; +$lang['binddn'] = 'DN eines optionalen Benutzers, wenn der anonyme Zugriff nicht ausreichend ist. Zum Beispiel: cn=admin, dc=my, dc=home.'; +$lang['bindpw'] = 'Passwort des angegebenen Benutzers.'; +$lang['userscope'] = 'Die Suchweite nach Benutzeraccounts.'; +$lang['groupscope'] = 'Die Suchweite nach Benutzergruppen.'; +$lang['groupkey'] = 'Gruppieren der Benutzeraccounts anhand eines beliebigen Benutzerattributes z. B. Telefonnummer oder Abteilung, anstelle der Standard-Gruppen).'; +$lang['debug'] = 'Debug-Informationen beim Auftreten von Fehlern anzeigen?'; diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php index 7d303726b..5f6e86c71 100644 --- a/lib/plugins/authmysql/auth.php +++ b/lib/plugins/authmysql/auth.php @@ -97,6 +97,15 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin { ), false ); $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'), false); + + if($this->getConf('debug') >= 2) { + $candoDebug = ''; + foreach($this->cando as $cd => $value) { + if($value) { $value = 'yes'; } else { $value = 'no'; } + $candoDebug .= $cd . ": " . $value . " | "; + } + $this->_debug("authmysql cando: " . $candoDebug, 0, __LINE__, __FILE__); + } } /** @@ -816,6 +825,10 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin { * @return int|bool insert id or 0, false on error */ protected function _modifyDB($query) { + if($this->getConf('debug') >= 2) { + msg('MySQL query: '.hsc($query), 0, __LINE__, __FILE__); + } + if($this->dbcon) { $result = @mysql_query($query, $this->dbcon); if($result) { @@ -848,11 +861,12 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin { */ protected function _lockTables($mode) { if($this->dbcon) { - if(is_array($this->getConf('TablesToLock'))) { + $ttl = $this->getConf('TablesToLock'); + if(is_array($ttl) && !empty($ttl)) { if($mode == "READ" || $mode == "WRITE") { $sql = "LOCK TABLES "; $cnt = 0; - foreach($this->getConf('TablesToLock') as $table) { + foreach($ttl as $table) { if($cnt++ != 0) $sql .= ", "; $sql .= "$table $mode"; } diff --git a/lib/plugins/authmysql/lang/de-informal/settings.php b/lib/plugins/authmysql/lang/de-informal/settings.php index e7b3d2673..0c9bc85fe 100644 --- a/lib/plugins/authmysql/lang/de-informal/settings.php +++ b/lib/plugins/authmysql/lang/de-informal/settings.php @@ -1,6 +1,42 @@ + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Matthias Schulte */ +$lang['server'] = 'MySQL-Server'; +$lang['user'] = 'Benutzername für den Zugriff auf den MySQL-Server.'; +$lang['password'] = 'Passwort des angegebenen Benutzers.'; +$lang['database'] = 'Zu verwendende Datenbank.'; +$lang['charset'] = 'Verwendetes Character-Set in der Datenbank.'; +$lang['debug'] = 'Debug-Informationen anzeigen?'; +$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; +$lang['TablesToLock'] = 'Eine Komma-separierte Liste von Tabellen, die vor Schreiboperationen gesperrt werden müssen.'; +$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; +$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; +$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; +$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; +$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; +$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; +$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; +$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; +$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; +$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; +$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; +$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; +$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; +$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; +$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; +$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; +$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; +$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; +$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; +$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; +$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; +$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; +$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; +$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; +$lang['debug_o_0'] = 'Keine.'; +$lang['debug_o_1'] = 'Nur Fehler.'; +$lang['debug_o_2'] = 'Alle SQL-Abfragen.'; diff --git a/lib/plugins/authmysql/lang/de/settings.php b/lib/plugins/authmysql/lang/de/settings.php new file mode 100644 index 000000000..97ba06a9d --- /dev/null +++ b/lib/plugins/authmysql/lang/de/settings.php @@ -0,0 +1,42 @@ + + */ +$lang['server'] = 'MySQL-Server'; +$lang['user'] = 'Benutzername für den Zugriff auf den MySQL-Server.'; +$lang['password'] = 'Passwort des angegebenen Benutzers.'; +$lang['database'] = 'Zu verwendende Datenbank.'; +$lang['charset'] = 'Verwendetes Character-Set in der Datenbank.'; +$lang['debug'] = 'Debug-Informationen anzeigen?'; +$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; +$lang['TablesToLock'] = 'Eine Komma-separierte Liste von Tabellen, die vor Schreiboperationen gesperrt werden müssen.'; +$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; +$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; +$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; +$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; +$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; +$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; +$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; +$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; +$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; +$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; +$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; +$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; +$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; +$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; +$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; +$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; +$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; +$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; +$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; +$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; +$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; +$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; +$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; +$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; +$lang['debug_o_0'] = 'Keine.'; +$lang['debug_o_1'] = 'Nur Fehler.'; +$lang['debug_o_2'] = 'Alle SQL-Abfragen.'; diff --git a/lib/plugins/authpgsql/lang/de-informal/settings.php b/lib/plugins/authpgsql/lang/de-informal/settings.php index e7b3d2673..4c80245d6 100644 --- a/lib/plugins/authpgsql/lang/de-informal/settings.php +++ b/lib/plugins/authpgsql/lang/de-informal/settings.php @@ -1,6 +1,38 @@ + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Matthias Schulte */ +$lang['server'] = 'PostgreSQL-Server'; +$lang['port'] = 'Port des PostgreSQL-Servers.'; +$lang['user'] = 'Benutzername für den Zugriff auf den PostgreSQL-Server.'; +$lang['password'] = 'Passwort des angegebenen Benutzers.'; +$lang['database'] = 'Zu verwendende Datenbank.'; +$lang['debug'] = 'Debug-Informationen anzeigen?'; +$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; +$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; +$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; +$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; +$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; +$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; +$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; +$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; +$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; +$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; +$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; +$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; +$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; +$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; +$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; +$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; +$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; +$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; +$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; +$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; +$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; +$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; +$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; +$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; +$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; diff --git a/lib/plugins/authpgsql/lang/de/settings.php b/lib/plugins/authpgsql/lang/de/settings.php new file mode 100644 index 000000000..4c80245d6 --- /dev/null +++ b/lib/plugins/authpgsql/lang/de/settings.php @@ -0,0 +1,38 @@ + + */ +$lang['server'] = 'PostgreSQL-Server'; +$lang['port'] = 'Port des PostgreSQL-Servers.'; +$lang['user'] = 'Benutzername für den Zugriff auf den PostgreSQL-Server.'; +$lang['password'] = 'Passwort des angegebenen Benutzers.'; +$lang['database'] = 'Zu verwendende Datenbank.'; +$lang['debug'] = 'Debug-Informationen anzeigen?'; +$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; +$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; +$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; +$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; +$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; +$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; +$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; +$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; +$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; +$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; +$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; +$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; +$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; +$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; +$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; +$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; +$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; +$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; +$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; +$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; +$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; +$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; +$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; +$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; +$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; -- cgit v1.2.3 From 83fd0ad628216c2bea2997cd6c5c1b703ac08ac3 Mon Sep 17 00:00:00 2001 From: lupo49 Date: Sun, 31 Mar 2013 20:41:30 +0200 Subject: de/de-informal: config plugin - Clean up the TOC in the configuration page / No need to add "Konfiguration" or "Plugin" to every element if the heading tells you that. --- lib/plugins/config/lang/de-informal/lang.php | 44 ++++++++++++++-------------- lib/plugins/config/lang/de/lang.php | 42 +++++++++++++------------- 2 files changed, 42 insertions(+), 44 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php index 58a78fe47..72823c0de 100644 --- a/lib/plugins/config/lang/de-informal/lang.php +++ b/lib/plugins/config/lang/de-informal/lang.php @@ -10,31 +10,31 @@ * @author Pierre Corell * @author Frank Loizzi */ -$lang['menu'] = 'Einstellungen'; -$lang['error'] = 'Einstellungen wurden nicht aktualisiert auf Grund eines ungültigen Wertes. Bitte überprüfe deine Änderungen und versuche es erneut.
Die/der ungültige(n) Wert(e) werden durch eine rote Umrandung hervorgehoben.'; -$lang['updated'] = 'Einstellungen erfolgreich aktualisiert.'; +$lang['menu'] = 'Konfiguration'; +$lang['error'] = 'Konfiguration wurde nicht aktualisiert auf Grund eines ungültigen Wertes. Bitte überprüfe deine Änderungen und versuche es erneut.
Die/der ungültige(n) Wert(e) werden durch eine rote Umrandung hervorgehoben.'; +$lang['updated'] = 'Konfiguration erfolgreich aktualisiert.'; $lang['nochoice'] = '(keine andere Option möglich)'; -$lang['locked'] = 'Die Einstellungsdatei kann nicht aktualisiert werden. Wenn dies unbeabsichtigt ist stelle sicher, dass der Name und die Zugriffsrechte der Einstellungsdatei richtig sind.'; +$lang['locked'] = 'Die Konfigurationsdatei kann nicht aktualisiert werden. Wenn dies unbeabsichtigt ist stelle sicher, dass der Name und die Zugriffsrechte der Konfigurationsdatei richtig sind.'; $lang['danger'] = '**Achtung**: Eine Änderung dieser Einstellung kann dein Wiki und das Einstellungsmenü unerreichbar machen.'; $lang['warning'] = 'Achtung: Eine Änderungen dieser Option kann zu unbeabsichtigtem Verhalten führen.'; $lang['security'] = 'Sicherheitswarnung: Eine Änderungen dieser Option können ein Sicherheitsrisiko bedeuten.'; -$lang['_configuration_manager'] = 'Einstellungen'; -$lang['_header_dokuwiki'] = 'DokuWiki-Einstellungen'; -$lang['_header_plugin'] = 'Plugin-Einstellungen'; -$lang['_header_template'] = 'Vorlageneinstellungen'; -$lang['_header_undefined'] = 'unbestimmte Einstellungen'; -$lang['_basic'] = 'Grundeinstellungen'; -$lang['_display'] = 'Darstellungs-Einstellungen'; -$lang['_authentication'] = 'Bestätigungseinstellungen'; -$lang['_anti_spam'] = 'Anti-Spam-Einstellungen'; -$lang['_editing'] = 'Bearbeitungseinstellungen'; -$lang['_links'] = 'Link-Einstellungen'; -$lang['_media'] = 'Media-Einstellungen'; -$lang['_notifications'] = 'Benachrichtigungs-Konfiguration'; -$lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; -$lang['_advanced'] = 'erweiterte Einstellungen'; -$lang['_network'] = 'Netzwerk-Einstellungen'; -$lang['_plugin_sufix'] = 'Plugin-Einstellungen'; +$lang['_configuration_manager'] = 'Konfiguration'; +$lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; +$lang['_header_plugin'] = 'Plugin-Konfiguration'; +$lang['_header_template'] = 'Vorlagen'; +$lang['_header_undefined'] = 'Unbekannte Werte'; +$lang['_basic'] = 'Grundkonfiguration'; +$lang['_display'] = 'Darstellung'; +$lang['_authentication'] = 'Authentifizierung'; +$lang['_anti_spam'] = 'Anti-Spam'; +$lang['_editing'] = 'Bearbeitung'; +$lang['_links'] = 'Links'; +$lang['_media'] = 'Medien'; +$lang['_notifications'] = 'Benachrichtigungen'; +$lang['_syndication'] = 'Syndication (RSS)'; +$lang['_advanced'] = 'Erweiterte Konfiguration'; +$lang['_network'] = 'Netzwerk'; +$lang['_plugin_sufix'] = ''; $lang['_template_sufix'] = 'Vorlageneinstellungen'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; @@ -190,7 +190,7 @@ $lang['xsendfile_o_2'] = 'Standard X-Sendfile-Header'; $lang['xsendfile_o_3'] = 'Proprietärer Nginx X-Accel-Redirect-Header'; $lang['showuseras_o_loginname'] = 'Login-Name'; $lang['showuseras_o_username'] = 'Voller Name des Nutzers'; -$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (je nach Mailguard-Einstellung verschleiert)'; +$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (Beachte "mailguard"-Einstellung)'; $lang['showuseras_o_email_link'] = 'E-Mail-Adresse des Benutzers als mailto:-Link'; $lang['useheading_o_0'] = 'Niemals'; $lang['useheading_o_navigation'] = 'Nur Navigation'; diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php index bcbc061a3..063ee40ad 100644 --- a/lib/plugins/config/lang/de/lang.php +++ b/lib/plugins/config/lang/de/lang.php @@ -19,38 +19,36 @@ * @author Matthias Schulte */ $lang['menu'] = 'Konfiguration'; -$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert. -
Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.'; +$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert.
Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.'; $lang['updated'] = 'Einstellungen erfolgreich gespeichert.'; $lang['nochoice'] = '(keine Auswahlmöglichkeiten vorhanden)'; -$lang['locked'] = 'Die Konfigurationsdatei kann nicht geändert werden, wenn dies unbeabsichtigt ist -
überprüfen Sie, dass die Dateiberechtigungen korrekt gesetzt sind.'; +$lang['locked'] = 'Die Konfigurationsdatei kann nicht geändert werden. Wenn dies unbeabsichtigt ist,
überprüfen Sie, ob die Dateiberechtigungen korrekt gesetzt sind.'; $lang['danger'] = 'Vorsicht: Die Änderung dieser Option könnte Ihr Wiki und das Konfigurationsmenü unzugänglich machen.'; $lang['warning'] = 'Hinweis: Die Änderung dieser Option könnte unbeabsichtigtes Verhalten hervorrufen.'; $lang['security'] = 'Sicherheitswarnung: Die Änderung dieser Option könnte ein Sicherheitsrisiko darstellen.'; $lang['_configuration_manager'] = 'Konfiguration'; $lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; $lang['_header_plugin'] = 'Plugin-Konfiguration'; -$lang['_header_template'] = 'Template-Konfiguration'; -$lang['_header_undefined'] = 'Unbekannte Einstellungen'; -$lang['_basic'] = 'Grund-Konfiguration'; -$lang['_display'] = 'Anzeige-Konfiguration'; -$lang['_authentication'] = 'Authentifizierungs-Konfiguration'; -$lang['_anti_spam'] = 'Anti-Spam-Konfiguration'; -$lang['_editing'] = 'Bearbeitungs-Konfiguration'; -$lang['_links'] = 'Link-Konfiguration'; -$lang['_media'] = 'Medien-Konfiguration'; -$lang['_notifications'] = 'Benachrichtigungs-Konfiguration'; -$lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; +$lang['_header_template'] = 'Vorlagen'; +$lang['_header_undefined'] = 'Unbekannte Werte'; +$lang['_basic'] = 'Grundkonfiguration'; +$lang['_display'] = 'Darstellung'; +$lang['_authentication'] = 'Authentifizierung'; +$lang['_anti_spam'] = 'Anti-Spam'; +$lang['_editing'] = 'Bearbeitung'; +$lang['_links'] = 'Links'; +$lang['_media'] = 'Medien'; +$lang['_notifications'] = 'Benachrichtigungen'; +$lang['_syndication'] = 'Syndication (RSS)'; $lang['_advanced'] = 'Erweiterte Konfiguration'; -$lang['_network'] = 'Netzwerk-Konfiguration'; -$lang['_plugin_sufix'] = 'Plugin-Konfiguration'; -$lang['_template_sufix'] = 'Template-Konfiguration'; +$lang['_network'] = 'Netzwerk'; +$lang['_plugin_sufix'] = ''; +$lang['_template_sufix'] = 'Vorlagen-Konfiguration'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; $lang['_msg_setting_no_default'] = 'Kein Standardwert.'; -$lang['fmode'] = 'Rechte für neue Dateien'; -$lang['dmode'] = 'Rechte für neue Verzeichnisse'; +$lang['fmode'] = 'Berechtigungen für neue Dateien'; +$lang['dmode'] = 'Berechtigungen für neue Verzeichnisse'; $lang['lang'] = 'Sprache'; $lang['basedir'] = 'Installationsverzeichnis'; $lang['baseurl'] = 'Installationspfad (URL)'; @@ -198,9 +196,9 @@ $lang['xsendfile_o_0'] = 'nicht benutzen'; $lang['xsendfile_o_1'] = 'Proprietärer lighttpd-Header (vor Release 1.5)'; $lang['xsendfile_o_2'] = 'Standard X-Sendfile-Header'; $lang['xsendfile_o_3'] = 'Proprietärer Nginx X-Accel-Redirect-Header'; -$lang['showuseras_o_loginname'] = 'Loginname'; +$lang['showuseras_o_loginname'] = 'Login-Name'; $lang['showuseras_o_username'] = 'Vollständiger Name des Benutzers'; -$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (je nach Mailguard-Einstellung verschleiert)'; +$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (Beachte "mailguard"-Einstellung)'; $lang['showuseras_o_email_link'] = 'E-Mail-Adresse des Benutzers als mailto:-Link'; $lang['useheading_o_0'] = 'Nie'; $lang['useheading_o_navigation'] = 'Nur Navigation'; -- cgit v1.2.3 From 8ee0487708ea528ade7e43e3688cfd14cf6a7582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=AA=85=EC=A7=84?= Date: Thu, 4 Apr 2013 20:43:19 +0200 Subject: Korean language update --- lib/plugins/authad/lang/ko/settings.php | 8 ++++++-- lib/plugins/authldap/lang/ko/settings.php | 11 +++++++++++ lib/plugins/config/lang/ko/intro.txt | 2 +- lib/plugins/config/lang/ko/lang.php | 20 ++++++++++---------- lib/plugins/plugin/lang/ko/admin_plugin.txt | 4 +--- lib/plugins/plugin/lang/ko/lang.php | 8 ++++---- lib/plugins/popularity/lang/ko/lang.php | 4 ++-- lib/plugins/revert/lang/ko/intro.txt | 2 +- lib/plugins/usermanager/lang/ko/add.txt | 2 +- lib/plugins/usermanager/lang/ko/delete.txt | 2 +- lib/plugins/usermanager/lang/ko/edit.txt | 2 +- lib/plugins/usermanager/lang/ko/intro.txt | 2 +- lib/plugins/usermanager/lang/ko/list.txt | 2 +- 13 files changed, 41 insertions(+), 28 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/ko/settings.php b/lib/plugins/authad/lang/ko/settings.php index 31071e9a3..6134bd657 100644 --- a/lib/plugins/authad/lang/ko/settings.php +++ b/lib/plugins/authad/lang/ko/settings.php @@ -6,9 +6,13 @@ */ $lang['account_suffix'] = '계정 접미어. 예를 들어 @my.domain.org'; $lang['base_dn'] = '기본 DN. 예를 들어 DC=my,DC=domain,DC=org'; -$lang['domain_controllers'] = '도메인 컨트롤러의 쉼표로 구분한 목록입니다. 예를 들어 srv1.domain.org,srv2.domain.org'; -$lang['ad_password'] = '위 사용자의 비밀번호입니다.'; +$lang['domain_controllers'] = '도메인 컨트롤러의 쉼표로 구분한 목록. 예를 들어 srv1.domain.org,srv2.domain.org'; +$lang['ad_username'] = '다른 모든 사용자의 데이터에 접근할 수 있는 권한이 있는 Active Directory 사용자. 선택적이지만 구독 메일을 보내는 등의 특정 작업에 필요합니다.'; +$lang['ad_password'] = '위 사용자의 비밀번호.'; $lang['sso'] = 'Kerberos나 NTLM을 통해 Single-Sign-On을 사용해야 합니까?'; +$lang['real_primarygroup'] = '실제 기본 그룹은 "도메인 사용자"를 가정하는 대신 해결될 것입니다 (느림)'; $lang['use_ssl'] = 'SSL 연결을 사용합니까? 사용한다면 아래 TLS을 활성화하지 마세요.'; $lang['use_tls'] = 'TLS 연결을 사용합니까? 사용한다면 위 SSL을 활성화하지 마세요.'; $lang['debug'] = '오류에 대한 추가적인 디버그 정보를 보이겠습니까?'; +$lang['expirywarn'] = '미리 비밀번호 만료를 사용자에게 경고할 날짜. 0일 경우 비활성화합니다.'; +$lang['additional'] = '사용자 데이터에서 가져올 추가적인 AD 속성의 쉼표로 구분한 목록. 일부 플러그인이 사용합니다.'; diff --git a/lib/plugins/authldap/lang/ko/settings.php b/lib/plugins/authldap/lang/ko/settings.php index 6c80414d3..7f7efe8d0 100644 --- a/lib/plugins/authldap/lang/ko/settings.php +++ b/lib/plugins/authldap/lang/ko/settings.php @@ -6,5 +6,16 @@ */ $lang['server'] = 'LDAP 서버. 호스트 이름(localhost)이나 전체 자격 URL(ldap://server.tld:389) 중 하나'; $lang['port'] = '위에 주어진 전체 URL이 없을 때의 LDAP 서버 포트'; +$lang['usertree'] = '사용자 계정을 찾을 장소. 예를 들어 ou=People, dc=server, dc=tld'; +$lang['grouptree'] = '사용자 그룹을 찾을 장소. 예를 들어 ou=Group, dc=server, dc=tld'; +$lang['userfilter'] = '사용자 계정을 찾을 LDAP 필터. 예를 들어 (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = '그룹을 찾을 LDAP 필터. 예를 들어 (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = '사용할 프로토콜 버전. 3으로 설정해야 할 수도 있습니다'; $lang['starttls'] = 'TLS 연결을 사용하겠습니까?'; +$lang['referrals'] = '참고(referrals)를 허용하겠습니까? '; +$lang['binddn'] = '익명 바인드가 충분하지 않으면 선택적인 바인드 사용자의 DN. 예를 들어 cn=admin, dc=my, dc=home'; +$lang['bindpw'] = '위 사용자의 비밀번호'; +$lang['userscope'] = '사용자 찾기에 대한 찾기 범위 제한'; +$lang['groupscope'] = '그룹 찾기에 대한 찾기 범위 제한'; +$lang['groupkey'] = '(표준 AD 그룹 대신) 사용자 속성에서 그룹 구성원. 예를 들어 부서나 전화에서 그룹'; $lang['debug'] = '오류에 대한 추가적인 디버그 정보를 보이기'; diff --git a/lib/plugins/config/lang/ko/intro.txt b/lib/plugins/config/lang/ko/intro.txt index 5ef34df64..a2dc7b6f6 100644 --- a/lib/plugins/config/lang/ko/intro.txt +++ b/lib/plugins/config/lang/ko/intro.txt @@ -4,4 +4,4 @@ DokuWiki 설치할 때 설정을 바꾸기 위해 사용하는 페이지입니 플러그인에 대한 자세한 정보가 필요하다면 [[doku>plugin:config|플러그인 설정]] 문서를 참고하세요. 빨간 배경색으로 보이는 설정은 이 플러그인에서 바꾸지 못하도록 되어있습니다. 파란 배경색으로 보이는 설정은 기본 설정값을 가지고 있습니다. 하얀 배경색으로 보이는 설정은 특별한 설치를 위해 설정되어 있습니다. 파란색과 하얀색 배경으로 된 설정은 수정이 가능합니다. -이 페이지를 끝내기 전에 **저장** 버튼을 누르지 않으면 설정값은 적용되지 않습니다. +이 페이지를 떠나기 전에 **저장** 버튼을 누르지 않으면 바뀐 값은 적용되지 않습니다. \ No newline at end of file diff --git a/lib/plugins/config/lang/ko/lang.php b/lib/plugins/config/lang/ko/lang.php index 7737af70f..f69af2df6 100644 --- a/lib/plugins/config/lang/ko/lang.php +++ b/lib/plugins/config/lang/ko/lang.php @@ -54,9 +54,9 @@ $lang['baseurl'] = '서버 URL (예를 들어 http://www.you $lang['cookiedir'] = '쿠키 위치. 비워두면 기본 URL 위치로 지정됩니다.'; $lang['dmode'] = '디렉토리 만들기 모드'; $lang['fmode'] = '파일 만들기 모드'; -$lang['allowdebug'] = '디버그 허용 필요하지 않으면 금지!'; +$lang['allowdebug'] = '디버그 허용 필요하지 않으면 비활성화할 것!'; $lang['recent'] = '최근 바뀐 문서당 항목 수'; -$lang['recent_days'] = '최근 바뀐 문서 기준 시간 (날짜)'; +$lang['recent_days'] = '최근 바뀐 문서 기준 시간 (일)'; $lang['breadcrumbs'] = '위치 "추적" 수. 0으로 설정하면 비활성화합니다.'; $lang['youarehere'] = '계층형 위치 추적 (다음 위의 옵션을 비활성화하게 됩니다)'; $lang['fullpath'] = '문서 하단에 전체 경로 보여주기'; @@ -85,8 +85,8 @@ $lang['profileconfirm'] = '개인 정보를 바꿀 때 비밀번호 다 $lang['rememberme'] = '항상 로그인 정보 저장 허용 (기억하기)'; $lang['disableactions'] = 'DokuWiki 활동 비활성화'; $lang['disableactions_check'] = '검사'; -$lang['disableactions_subscription'] = '구독 신청/해지'; -$lang['disableactions_wikicode'] = '내용 보기/원본 내보대기'; +$lang['disableactions_subscription'] = '구독 신청/구독 취소'; +$lang['disableactions_wikicode'] = '내용 보기/원본 내보내기'; $lang['disableactions_other'] = '다른 활동 (쉼표로 구분)'; $lang['auth_security_timeout'] = '인증 보안 초과 시간 (초)'; $lang['securecookie'] = 'HTTPS로 보내진 쿠키는 HTTPS에만 적용 할까요? 위키의 로그인 페이지만 SSL로 암호화하고 위키 문서는 그렇지 않은 경우 비활성화 합니다.'; @@ -121,10 +121,10 @@ $lang['registernotify'] = '항상 새 사용자한테 이 이메일 주 $lang['mailfrom'] = '자동으로 보내지는 메일 발신자'; $lang['mailprefix'] = '자동으로 보내지는 메일의 제목 말머리 내용. 비웠을 경우 위키 제목 사용'; $lang['htmlmail'] = '용량은 조금 더 크지만 보기 좋은 HTML 태그가 포함된 메일을 보냅니다. 텍스트만의 메일을 보내고자하면 비활성화하세요.'; -$lang['sitemap'] = '구글 사이트맵 생성 (날짜). 0일 경우 비활성화'; +$lang['sitemap'] = '구글 사이트맵 생성 날짜 빈도. 0일 경우 비활성화합니다'; $lang['rss_type'] = 'XML 피드 타입'; $lang['rss_linkto'] = 'XML 피드 링크 정보'; -$lang['rss_content'] = 'XML 피드 항목에 표시되는 내용은?'; +$lang['rss_content'] = 'XML 피드 항목에 표시되는 내용은 무엇입니까?'; $lang['rss_update'] = 'XML 피드 업데이트 주기 (초)'; $lang['rss_show_summary'] = 'XML 피드 제목에서 요약 보여주기'; $lang['rss_media'] = '어떤 규격으로 XML 피드를 받아보시겠습니까?'; @@ -145,7 +145,7 @@ $lang['xsendfile'] = '웹 서버가 정적 파일을 제공하도록 $lang['renderer_xhtml'] = '주 (xhtml) 위키 출력 처리기'; $lang['renderer__core'] = '%s (DokuWiki 내부 기능)'; $lang['renderer__plugin'] = '%s (플러그인)'; -$lang['dnslookups'] = '이 옵션을 활성화하면 DokuWiki가 문서를 수정하는 사용자의 호스트 네임과 원격 IP 주소를 확인합니다. 서버가 느리거나, DNS를 운영하지 않거나 이 기능을 원치 않으면 비활성화 시켜주세요.'; +$lang['dnslookups'] = '이 옵션을 활성화하면 DokuWiki가 문서를 수정하는 사용자의 호스트 네임과 원격 IP 주소를 확인합니다. 서버가 느리거나, DNS를 운영하지 않거나 이 기능을 원치 않으면 비활성화하세요'; $lang['proxy____host'] = '프록시 서버 이름'; $lang['proxy____port'] = '프록시 서버 포트'; $lang['proxy____user'] = '프록시 사용자 이름'; @@ -165,7 +165,7 @@ $lang['typography_o_2'] = '모든 가능한 인용 부호 (동작 안될 $lang['userewrite_o_0'] = '사용 안함'; $lang['userewrite_o_1'] = '.htaccess'; $lang['userewrite_o_2'] = 'DokuWiki 내부 기능'; -$lang['deaccent_o_0'] = '사용 안함'; +$lang['deaccent_o_0'] = '끄기'; $lang['deaccent_o_1'] = '악센트 제거'; $lang['deaccent_o_2'] = '라틴문자화'; $lang['gdlib_o_0'] = 'GD 라이브러리 사용 불가'; @@ -192,8 +192,8 @@ $lang['xsendfile_o_1'] = '비공개 lighttpd 헤더 (1.5 이전 버전)' $lang['xsendfile_o_2'] = '표준 X-Sendfile 헤더'; $lang['xsendfile_o_3'] = '비공개 Nginx X-Accel-Redirect 헤더'; $lang['showuseras_o_loginname'] = '로그인 이름'; -$lang['showuseras_o_username'] = '사용자 이름'; -$lang['showuseras_o_email'] = '사용자 이메일 주소 (메일 주소 보호 설정에 따라 안보일 수 있음)'; +$lang['showuseras_o_username'] = '사용자의 전체 이름'; +$lang['showuseras_o_email'] = '사용자의 이메일 주소 (메일 주소 보호 설정에 따라 안보일 수 있음)'; $lang['showuseras_o_email_link'] = 'mailto: link로 표현될 사용자 이메일 주소'; $lang['useheading_o_0'] = '아니오'; $lang['useheading_o_navigation'] = '둘러보기에만'; diff --git a/lib/plugins/plugin/lang/ko/admin_plugin.txt b/lib/plugins/plugin/lang/ko/admin_plugin.txt index b553d622b..7cbd08f7a 100644 --- a/lib/plugins/plugin/lang/ko/admin_plugin.txt +++ b/lib/plugins/plugin/lang/ko/admin_plugin.txt @@ -1,5 +1,3 @@ ====== 플러그인 관리 ====== -이 페이지에서 Dokuwiki [[doku>plugins|플러그인]]에 관련된 모든 관리 작업을 합니다. 플러그인을 다운로드하거나 설치하기 위해서는 웹 서버가 플러그인 디렉토리에 대해 쓰기 권한을 가지고 있어야 합니다. - - +이 페이지에서 Dokuwiki [[doku>plugins|플러그인]]에 관련된 모든 관리 작업을 합니다. 플러그인을 다운로드하거나 설치하기 위해서는 웹 서버가 플러그인 디렉토리에 대해 쓰기 권한을 가지고 있어야 합니다. \ No newline at end of file diff --git a/lib/plugins/plugin/lang/ko/lang.php b/lib/plugins/plugin/lang/ko/lang.php index 7ca021ac4..447fe667b 100644 --- a/lib/plugins/plugin/lang/ko/lang.php +++ b/lib/plugins/plugin/lang/ko/lang.php @@ -31,7 +31,7 @@ $lang['update_none'] = '업데이트를 찾을 수 없습니다.'; $lang['deleting'] = '삭제 중 ...'; $lang['deleted'] = '%s 플러그인이 삭제되었습니다.'; $lang['downloading'] = '다운로드 중 ...'; -$lang['downloaded'] = '%s 플러그인이 성공적으로 설치되었습니다.'; +$lang['downloaded'] = '%s 플러그인이 성공적으로 설치되었습니다'; $lang['downloads'] = '다음 플러그인이 성공적으로 설치되었습니다:'; $lang['download_none'] = '플러그인이 없거나 다운로드 또는 설치 중에 알 수 없는 문제가 발생했습니다.'; $lang['plugin'] = '플러그인:'; @@ -45,11 +45,11 @@ $lang['author'] = '만든이:'; $lang['www'] = '웹:'; $lang['error'] = '알 수 없는 문제가 발생했습니다.'; $lang['error_download'] = '플러그인 파일을 다운로드 할 수 없습니다: %s'; -$lang['error_badurl'] = '잘못된 URL 같습니다 - URL에서 파일 이름을 알 수 없습니다.'; -$lang['error_dircreate'] = '다운로드를 받기 위한 임시 디렉토리를 만들 수 없습니다.'; +$lang['error_badurl'] = '잘못된 URL 같습니다 - URL에서 파일 이름을 알 수 없습니다'; +$lang['error_dircreate'] = '다운로드를 받기 위한 임시 디렉토리를 만들 수 없습니다'; $lang['error_decompress'] = '플러그인 관리자가 다운로드 받은 파일을 압축을 풀 수 없습니다. 잘못 다운로드 받았을 수도 있으니 다시 한번 시도하거나 압축 포맷을 알 수 없는 경우에는 다운로드한 후 수동으로 직접 설치하세요.'; $lang['error_copy'] = '플러그인을 설치하는 동안 파일 복사하는 데 오류가 발생했습니다. %s: 디스크가 꽉 찼거나 파일 접근 권한이 잘못된 경우입니다. 플러그인 설치가 부분적으로만 이루어졌을 것입니다. 설치가 불완전합니다.'; -$lang['error_delete'] = '%s 플러그인을 삭제하는 동안 오류가 발생했습니다. 대부분의 경우 불완전한 파일이거나 디렉토리 접근 권한이 잘못된 경우입니다.'; +$lang['error_delete'] = '%s 플러그인을 삭제하는 동안 오류가 발생했습니다. 대부분의 경우 불완전한 파일이거나 디렉토리 접근 권한이 잘못된 경우입니다'; $lang['enabled'] = '%s 플러그인을 활성화했습니다.'; $lang['notenabled'] = '%s 플러그인을 활성화할 수 없습니다. 파일 권한을 확인하세요.'; $lang['disabled'] = '%s 플러그인을 비활성화했습니다.'; diff --git a/lib/plugins/popularity/lang/ko/lang.php b/lib/plugins/popularity/lang/ko/lang.php index c881b5a5a..3463f4f8e 100644 --- a/lib/plugins/popularity/lang/ko/lang.php +++ b/lib/plugins/popularity/lang/ko/lang.php @@ -9,10 +9,10 @@ * @author erial2@gmail.com * @author Myeongjin */ -$lang['name'] = '인기도 조사 (불러오는데 시간이 걸릴 수 있습니다.)'; +$lang['name'] = '인기도 조사 (불러오는 데 시간이 걸릴 수 있습니다)'; $lang['submit'] = '자료 보내기'; $lang['autosubmit'] = '자료를 자동으로 매달 한번씩 보내기'; $lang['submissionFailed'] = '다음과 같은 이유로 자료 보내기에 실패했습니다:'; -$lang['submitDirectly'] = '아래의 양식에 맞춰 수동으로 작성된 자료를 보낼 수 있습니다'; +$lang['submitDirectly'] = '아래의 양식에 맞춰 수동으로 작성된 자료를 보낼 수 있습니다.'; $lang['autosubmitError'] = '다음과 같은 이유로 자동 자료 보내기에 실패했습니다:'; $lang['lastSent'] = '자료를 보냈습니다'; diff --git a/lib/plugins/revert/lang/ko/intro.txt b/lib/plugins/revert/lang/ko/intro.txt index 548890ecd..7aa618ba6 100644 --- a/lib/plugins/revert/lang/ko/intro.txt +++ b/lib/plugins/revert/lang/ko/intro.txt @@ -1,3 +1,3 @@ ====== 되돌리기 관리자 ====== -스팸 공격으로부터 자동으로 되돌리는데 이 페이지가 도움이 될 수 있습니다. 스팸 공격받은 문서 목록을 찾으려면 문자열을 입력하고(예를 들어 스팸 URL) 나서 찾은 문서가 스팸 공격을 받았는지 확인하고 되돌리세요. +스팸 공격으로부터 자동으로 되돌리는데 이 페이지가 도움이 될 수 있습니다. 스팸 공격받은 문서 목록을 찾으려면 문자열을 입력하고(예를 들어 스팸 URL) 나서 찾은 문서가 스팸 공격을 받았는지 확인하고 되돌리세요. \ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ko/add.txt b/lib/plugins/usermanager/lang/ko/add.txt index 578ba5636..845d8090a 100644 --- a/lib/plugins/usermanager/lang/ko/add.txt +++ b/lib/plugins/usermanager/lang/ko/add.txt @@ -1 +1 @@ -===== 사용자 추가 ===== +===== 사용자 추가 ===== \ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ko/delete.txt b/lib/plugins/usermanager/lang/ko/delete.txt index 1e9c0ba73..52b8209a1 100644 --- a/lib/plugins/usermanager/lang/ko/delete.txt +++ b/lib/plugins/usermanager/lang/ko/delete.txt @@ -1 +1 @@ -===== 사용자 삭제 ===== +===== 사용자 삭제 ===== \ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ko/edit.txt b/lib/plugins/usermanager/lang/ko/edit.txt index ebb5bb002..a938c5b2e 100644 --- a/lib/plugins/usermanager/lang/ko/edit.txt +++ b/lib/plugins/usermanager/lang/ko/edit.txt @@ -1 +1 @@ -===== 사용자 정보 편집 ===== +===== 사용자 정보 편집 ===== \ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ko/intro.txt b/lib/plugins/usermanager/lang/ko/intro.txt index 8c8bfa5b9..d75680c71 100644 --- a/lib/plugins/usermanager/lang/ko/intro.txt +++ b/lib/plugins/usermanager/lang/ko/intro.txt @@ -1 +1 @@ -====== 사용자 관리 ====== +====== 사용자 관리 ====== \ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ko/list.txt b/lib/plugins/usermanager/lang/ko/list.txt index 93fa3d6f2..2a1b45bfb 100644 --- a/lib/plugins/usermanager/lang/ko/list.txt +++ b/lib/plugins/usermanager/lang/ko/list.txt @@ -1 +1 @@ -===== 사용자 목록 ===== +===== 사용자 목록 ===== \ No newline at end of file -- cgit v1.2.3 From e0c4e620222bfa7d72897f0ab783cd1d30ef1d66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=AA=85=EC=A7=84?= Date: Thu, 4 Apr 2013 20:44:23 +0200 Subject: Chinese language update --- lib/plugins/authldap/lang/zh/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authldap/lang/zh/settings.php b/lib/plugins/authldap/lang/zh/settings.php index 2dfbeb464..3f38deae9 100644 --- a/lib/plugins/authldap/lang/zh/settings.php +++ b/lib/plugins/authldap/lang/zh/settings.php @@ -13,7 +13,7 @@ $lang['groupfilter'] = '用于搜索组的 LDAP 筛选器。例如 Date: Thu, 4 Apr 2013 20:46:28 +0200 Subject: Latvian language update --- lib/plugins/authad/lang/lv/settings.php | 6 ++++++ lib/plugins/authldap/lang/lv/settings.php | 6 ++++++ lib/plugins/authmysql/lang/lv/settings.php | 6 ++++++ lib/plugins/authpgsql/lang/lv/settings.php | 6 ++++++ lib/plugins/config/lang/lv/lang.php | 1 + 5 files changed, 25 insertions(+) create mode 100644 lib/plugins/authad/lang/lv/settings.php create mode 100644 lib/plugins/authldap/lang/lv/settings.php create mode 100644 lib/plugins/authmysql/lang/lv/settings.php create mode 100644 lib/plugins/authpgsql/lang/lv/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/lv/settings.php b/lib/plugins/authad/lang/lv/settings.php new file mode 100644 index 000000000..ced5dabf8 --- /dev/null +++ b/lib/plugins/authad/lang/lv/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authldap/lang/lv/settings.php b/lib/plugins/authldap/lang/lv/settings.php new file mode 100644 index 000000000..ced5dabf8 --- /dev/null +++ b/lib/plugins/authldap/lang/lv/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authmysql/lang/lv/settings.php b/lib/plugins/authmysql/lang/lv/settings.php new file mode 100644 index 000000000..ced5dabf8 --- /dev/null +++ b/lib/plugins/authmysql/lang/lv/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authpgsql/lang/lv/settings.php b/lib/plugins/authpgsql/lang/lv/settings.php new file mode 100644 index 000000000..ced5dabf8 --- /dev/null +++ b/lib/plugins/authpgsql/lang/lv/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/config/lang/lv/lang.php b/lib/plugins/config/lang/lv/lang.php index 50031d5e5..3adfd1871 100644 --- a/lib/plugins/config/lang/lv/lang.php +++ b/lib/plugins/config/lang/lv/lang.php @@ -26,6 +26,7 @@ $lang['_anti_spam'] = 'Pretspama iestatījumi'; $lang['_editing'] = 'Labošanas iestatījumi'; $lang['_links'] = 'Saišu iestatījumi'; $lang['_media'] = 'Mēdiju iestatījumi'; +$lang['_notifications'] = 'Brīdinājumu iestatījumi'; $lang['_advanced'] = 'Smalkāka iestatīšana'; $lang['_network'] = 'Tīkla iestatījumi'; $lang['_plugin_sufix'] = 'moduļa iestatījumi'; -- cgit v1.2.3 From f9cfe5598c5d3e6dfec2c783e228482375339db3 Mon Sep 17 00:00:00 2001 From: Victor Westmann Date: Thu, 4 Apr 2013 20:47:44 +0200 Subject: Brazilian Portuguese language update --- lib/plugins/authmysql/lang/pt-br/settings.php | 12 ++++++++++++ lib/plugins/authpgsql/lang/pt-br/settings.php | 6 ++++++ 2 files changed, 18 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/authmysql/lang/pt-br/settings.php b/lib/plugins/authmysql/lang/pt-br/settings.php index 59976ed65..c37690314 100644 --- a/lib/plugins/authmysql/lang/pt-br/settings.php +++ b/lib/plugins/authmysql/lang/pt-br/settings.php @@ -13,6 +13,18 @@ $lang['debug'] = 'Mostrar informações adicionais de depuraçã $lang['forwardClearPass'] = 'Passar senhas de usuários como texto puro para comandos SQL abaixo, ao invés de usar opção passcrypt'; $lang['TablesToLock'] = 'Lista separada por vírgulas para tabelas que devem estar travadas em operações de escrita'; $lang['checkPass'] = 'Comandos SQL para verificar senhas'; +$lang['getUserInfo'] = 'Comando SQL para obter informações de usuário'; +$lang['getGroups'] = 'Comando SQL para obter as credenciais de grupo de um usuário'; +$lang['getUsers'] = 'Comando SQL para listar todos os usuários'; +$lang['FilterLogin'] = 'Comando SQL para filtrar usuários pelo login'; +$lang['addGroup'] = 'Comando SQL para adicionar um novo grupo'; +$lang['addUserGroup'] = 'Comando SQL para adicionar um usuário a um determinado grupo'; +$lang['delGroup'] = 'Comando SQL para remover um grupo'; +$lang['delUser'] = 'Comando SQL para apagar um usuário'; +$lang['delUserRefs'] = 'Comando SQL para apagar um usuário de todos os grupos'; +$lang['updateUser'] = 'Comando SQL para atualizar perfil de usuário'; +$lang['delUserGroup'] = 'Comando SQL para remover um usuário de um grupo determinado'; +$lang['getGroupID'] = 'Comando SQL para obter a chave primária de um grupo determinado'; $lang['debug_o_0'] = 'nenhum'; $lang['debug_o_1'] = 'apenas em erros'; $lang['debug_o_2'] = 'todas as queries SQL'; diff --git a/lib/plugins/authpgsql/lang/pt-br/settings.php b/lib/plugins/authpgsql/lang/pt-br/settings.php index 714f01163..fea309496 100644 --- a/lib/plugins/authpgsql/lang/pt-br/settings.php +++ b/lib/plugins/authpgsql/lang/pt-br/settings.php @@ -9,6 +9,10 @@ $lang['port'] = 'Sua porta do servidor PostgreSQL'; $lang['user'] = 'Nome de usuário PostgreSQL'; $lang['password'] = 'Senha do usuário acima'; $lang['database'] = 'Base de dados para usar'; +$lang['debug'] = 'Mostrar informações adicionais de depuração'; +$lang['checkPass'] = 'Comando SQL para verificar senhas'; +$lang['getUserInfo'] = 'Comando SQL para obter informações do usuário'; +$lang['getGroups'] = 'Comando SQL para obter as credenciais de um usuário de um determinado grupo'; $lang['getUsers'] = 'Comando SQL para listar todos os usuários'; $lang['FilterLogin'] = 'Cláusula SQL para filtrar usuários pelo nome de login'; $lang['FilterName'] = 'Cláusula SQL para filtrar usuários pelo nome completo'; @@ -23,3 +27,5 @@ $lang['getUserID'] = 'Comando SQL para obter chave primária de usu $lang['delUser'] = 'Comando SQL para apagar usuário'; $lang['delUserRefs'] = 'Comando SQL para remover um usuário de todos os grupos'; $lang['updateUser'] = 'Comando SQL para atualizar perfil de usuário'; +$lang['delUserGroup'] = 'Comando SQL para remover um usuário de um determinado grupo'; +$lang['getGroupID'] = 'Comando SQL para obter a chave primária de um determinado grupo'; -- cgit v1.2.3 From 02ea0357f6a255b0f65c967112e6a6d9ec1fa116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Koot?= Date: Thu, 4 Apr 2013 20:48:39 +0200 Subject: Dutch language update --- lib/plugins/authad/lang/nl/settings.php | 17 +++++++++++++ lib/plugins/authldap/lang/nl/settings.php | 20 +++++++++++++++ lib/plugins/authmysql/lang/nl/settings.php | 40 ++++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/nl/settings.php | 36 +++++++++++++++++++++++++++ lib/plugins/config/lang/nl/lang.php | 2 +- lib/plugins/usermanager/lang/nl/lang.php | 2 +- 6 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 lib/plugins/authad/lang/nl/settings.php create mode 100644 lib/plugins/authldap/lang/nl/settings.php create mode 100644 lib/plugins/authmysql/lang/nl/settings.php create mode 100644 lib/plugins/authpgsql/lang/nl/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/nl/settings.php b/lib/plugins/authad/lang/nl/settings.php new file mode 100644 index 000000000..e73cac75d --- /dev/null +++ b/lib/plugins/authad/lang/nl/settings.php @@ -0,0 +1,17 @@ +@mijn.domein.org'; +$lang['base_dn'] = 'Je basis DN. Bijv. DC=mijn,DC=domein,DC=org'; +$lang['domain_controllers'] = 'Eeen commagesepareerde lijst van domeinservers. Bijv. srv1.domein.org,srv2.domein.org'; +$lang['ad_username'] = 'Een geprivilegeerde Active Directory gebruiker die bij alle gebruikersgegevens kan komen. Optioneel, maar kan nodig zijn voor bepaalde acties, zoals het versturen van abonnementsmailtjes.'; +$lang['ad_password'] = 'Het wachtwoord van bovernvermelde gebruiker.'; +$lang['sso'] = 'Wordt voor Single-Sign-on Kerberos of NTLM gebruikt?'; +$lang['real_primarygroup'] = 'Moet de echte primaire groep worden opgezocht in plaats van het aannemen van "Domeingebruikers" (langzamer)'; +$lang['use_ssl'] = 'SSL verbinding gebruiken? Zo ja, gebruik dan TLS hieronder niet.'; +$lang['use_tls'] = 'TLS verbinding gebruiken? Zo ja, activeer dan niet de SSL verbinding hierboven.'; +$lang['debug'] = 'Aanvullende debug informatie tonen bij fouten?'; +$lang['expirywarn'] = 'Waarschuwingstermijn voor vervallen wachtwoord. 0 om te deactiveren.'; +$lang['additional'] = 'Commagesepareerde lijst van aanvullend uit AD op te halen attributen. Gebruikt door sommige plugins.'; diff --git a/lib/plugins/authldap/lang/nl/settings.php b/lib/plugins/authldap/lang/nl/settings.php new file mode 100644 index 000000000..274c3b7fc --- /dev/null +++ b/lib/plugins/authldap/lang/nl/settings.php @@ -0,0 +1,20 @@ +localhost) of volledige URL (ldap://server.tld:389)'; +$lang['port'] = 'LDAP server poort als hiervoor geen volledige URL is opgegeven'; +$lang['usertree'] = 'Locatie van de gebruikersaccounts. Bijv. ou=Personen,dc=server,dc=tld'; +$lang['grouptree'] = 'Locatie van de gebruikersgroepen. Bijv. ou=Group,dc=server,dc=tld'; +$lang['userfilter'] = 'LDAP gebruikersfilter. Bijv. (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = 'LDAP groepsfilter. Bijv. (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = 'Te gebruiken protocolversie. Je zou het moeten kunnen instellen op 3'; +$lang['starttls'] = 'Gebruiken TLS verbindingen'; +$lang['referrals'] = 'Moeten verwijzingen worden gevolg'; +$lang['binddn'] = 'DN van een optionele bind gebruiker als anonieme bind niet genoeg is. Bijv. cn=beheer, dc=mijn, dc=thuis'; +$lang['bindpw'] = 'Wachtwoord van bovenstaande gebruiker'; +$lang['userscope'] = 'Beperken scope van zoekfuncties voor gebruikers'; +$lang['groupscope'] = 'Beperken scope van zoekfuncties voor groepen'; +$lang['groupkey'] = 'Groepslidmaatschap van enig gebruikersattribuut (in plaats van standaard AD groepen), bijv. groep van afdeling of telefoonnummer'; +$lang['debug'] = 'Tonen van aanvullende debuginformatie bij fouten'; diff --git a/lib/plugins/authmysql/lang/nl/settings.php b/lib/plugins/authmysql/lang/nl/settings.php new file mode 100644 index 000000000..dc85b7eee --- /dev/null +++ b/lib/plugins/authmysql/lang/nl/settings.php @@ -0,0 +1,40 @@ +uitzetten indien niet noodza $lang['recent'] = 'Het aantal regels in Recente wijzigingen'; $lang['recent_days'] = 'Hoeveel recente wijzigingen bewaren (dagen)'; $lang['breadcrumbs'] = 'Aantal broodkruimels. Zet dit op 0 om uit te schakelen.'; -$lang['youarehere'] = 'Gebruik hierarchische broodkruimels (waarschijnlijk wil je dan de optie hierboven uitschakelen)'; +$lang['youarehere'] = 'Gebruik hiërarchische broodkruimels (waarschijnlijk wil je dan de optie hierboven uitschakelen)'; $lang['fullpath'] = 'Volledig pad van pagina\'s in de footer weergeven'; $lang['typography'] = 'Breng typografische wijzigingen aan'; $lang['dformat'] = 'Datum formaat (zie de PHP strftime functie)'; diff --git a/lib/plugins/usermanager/lang/nl/lang.php b/lib/plugins/usermanager/lang/nl/lang.php index 8f30ce3ea..e960e9a14 100644 --- a/lib/plugins/usermanager/lang/nl/lang.php +++ b/lib/plugins/usermanager/lang/nl/lang.php @@ -17,7 +17,7 @@ */ $lang['menu'] = 'Gebruikersmanager'; $lang['noauth'] = '(gebruikersauthenticatie niet beschikbaar)'; -$lang['nosupport'] = '(gebruikersmanagement niet ondersteund)'; +$lang['nosupport'] = '(gebruikersbeheer niet ondersteund)'; $lang['badauth'] = 'ongeldige authenticatiemethode'; $lang['user_id'] = 'Gebruiker'; $lang['user_pass'] = 'Wachtwoord'; -- cgit v1.2.3 From ba09710ad34bb383ae3526e84490a3d545f78866 Mon Sep 17 00:00:00 2001 From: Martin Terber Date: Mon, 15 Apr 2013 21:55:41 +0200 Subject: German language update --- lib/plugins/acl/lang/de/lang.php | 1 + lib/plugins/authad/lang/de/settings.php | 17 +--- lib/plugins/authldap/lang/de/settings.php | 18 +--- lib/plugins/authmysql/lang/de/settings.php | 38 +------- lib/plugins/authpgsql/lang/de/settings.php | 34 +------ lib/plugins/config/lang/de/lang.php | 141 +++++++++++++++-------------- lib/plugins/plugin/lang/de/lang.php | 1 + lib/plugins/popularity/lang/de/lang.php | 1 + lib/plugins/revert/lang/de/lang.php | 1 + lib/plugins/usermanager/lang/de/lang.php | 1 + 10 files changed, 82 insertions(+), 171 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/de/lang.php b/lib/plugins/acl/lang/de/lang.php index eb23636c4..e2ac98cd7 100644 --- a/lib/plugins/acl/lang/de/lang.php +++ b/lib/plugins/acl/lang/de/lang.php @@ -21,6 +21,7 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell + * @author Mateng Schimmerlos ) */ $lang['admin_acl'] = 'Zugangsverwaltung'; $lang['acl_group'] = 'Gruppe'; diff --git a/lib/plugins/authad/lang/de/settings.php b/lib/plugins/authad/lang/de/settings.php index 38bccbf24..a1a99b6d6 100644 --- a/lib/plugins/authad/lang/de/settings.php +++ b/lib/plugins/authad/lang/de/settings.php @@ -1,19 +1,6 @@ - * @author Matthias Schulte + * @author Mateng Schimmerlos ) */ -$lang['account_suffix'] = 'Ihr Account-Suffix. Z.B. @my.domain.org'; -$lang['base_dn'] = 'Ihre Base-DN. Z.B. DC=my,DC=domain,DC=org'; -$lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z.B. srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = 'Ein priviligierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; -$lang['ad_password'] = 'Das Passwort des obigen Benutzers.'; -$lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; -$lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; -$lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterhalb nicht aktivieren.'; -$lang['use_tls'] = 'TLS-Verbindung benutzen? Falls ja, SSL oberhalb nicht aktivieren.'; -$lang['debug'] = 'Zusätzliche Debug-Informationen bei Fehlern anzeigen?'; -$lang['expirywarn'] = 'Tage im Voraus um Benutzer über ablaufende Passwörter zu informieren. 0 zum Ausschalten.'; -$lang['additional'] = 'Eine Komma-separierte Liste von zusätzlichen AD-Attributen, die von den Benutzerobjekten abgefragt werden. Wird von einigen Plugins benutzt.'; diff --git a/lib/plugins/authldap/lang/de/settings.php b/lib/plugins/authldap/lang/de/settings.php index b237201d8..a1a99b6d6 100644 --- a/lib/plugins/authldap/lang/de/settings.php +++ b/lib/plugins/authldap/lang/de/settings.php @@ -2,21 +2,5 @@ /** * German language file * - * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) - * @author Matthias Schulte + * @author Mateng Schimmerlos ) */ -$lang['server'] = 'Adresse zum LDAP-Server. Entweder als Hostname (localhost) oder als FQDN (ldap://server.tld:389).'; -$lang['port'] = 'Port des LDAP-Servers, falls kein Port angegeben wurde.'; -$lang['usertree'] = 'Zweig, in dem die die Benutzeraccounts gespeichert sind. Zum Beispiel: ou=People, dc=server, dc=tld.'; -$lang['grouptree'] = 'Zweig, in dem die Benutzergruppen gespeichert sind. Zum Beispiel: ou=Group, dc=server, dc=tld.'; -$lang['userfilter'] = 'LDAP-Filter, um die Benutzeraccounts zu suchen. Zum Beispiel: (&(uid=%{user})(objectClass=posixAccount)).'; -$lang['groupfilter'] = 'LDAP-Filter, um die Benutzergruppen zu suchen. Zum Beispiel: (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user}))).'; -$lang['version'] = 'Zu verwendende Protokollversion von LDAP.'; -$lang['starttls'] = 'Verbindung über TLS aufbauen?'; -$lang['referrals'] = 'Weiterverfolgen von LDAP-Referrals (Verweise)?'; -$lang['binddn'] = 'DN eines optionalen Benutzers, wenn der anonyme Zugriff nicht ausreichend ist. Zum Beispiel: cn=admin, dc=my, dc=home.'; -$lang['bindpw'] = 'Passwort des angegebenen Benutzers.'; -$lang['userscope'] = 'Die Suchweite nach Benutzeraccounts.'; -$lang['groupscope'] = 'Die Suchweite nach Benutzergruppen.'; -$lang['groupkey'] = 'Gruppieren der Benutzeraccounts anhand eines beliebigen Benutzerattributes z. B. Telefonnummer oder Abteilung, anstelle der Standard-Gruppen).'; -$lang['debug'] = 'Debug-Informationen beim Auftreten von Fehlern anzeigen?'; diff --git a/lib/plugins/authmysql/lang/de/settings.php b/lib/plugins/authmysql/lang/de/settings.php index 97ba06a9d..a1a99b6d6 100644 --- a/lib/plugins/authmysql/lang/de/settings.php +++ b/lib/plugins/authmysql/lang/de/settings.php @@ -2,41 +2,5 @@ /** * German language file * - * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) - * @author Matthias Schulte + * @author Mateng Schimmerlos ) */ -$lang['server'] = 'MySQL-Server'; -$lang['user'] = 'Benutzername für den Zugriff auf den MySQL-Server.'; -$lang['password'] = 'Passwort des angegebenen Benutzers.'; -$lang['database'] = 'Zu verwendende Datenbank.'; -$lang['charset'] = 'Verwendetes Character-Set in der Datenbank.'; -$lang['debug'] = 'Debug-Informationen anzeigen?'; -$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; -$lang['TablesToLock'] = 'Eine Komma-separierte Liste von Tabellen, die vor Schreiboperationen gesperrt werden müssen.'; -$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; -$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; -$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; -$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; -$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; -$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; -$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; -$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; -$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; -$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; -$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; -$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; -$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; -$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; -$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; -$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; -$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; -$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; -$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; -$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; -$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; -$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; -$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; -$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; -$lang['debug_o_0'] = 'Keine.'; -$lang['debug_o_1'] = 'Nur Fehler.'; -$lang['debug_o_2'] = 'Alle SQL-Abfragen.'; diff --git a/lib/plugins/authpgsql/lang/de/settings.php b/lib/plugins/authpgsql/lang/de/settings.php index 4c80245d6..a1a99b6d6 100644 --- a/lib/plugins/authpgsql/lang/de/settings.php +++ b/lib/plugins/authpgsql/lang/de/settings.php @@ -2,37 +2,5 @@ /** * German language file * - * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) - * @author Matthias Schulte + * @author Mateng Schimmerlos ) */ -$lang['server'] = 'PostgreSQL-Server'; -$lang['port'] = 'Port des PostgreSQL-Servers.'; -$lang['user'] = 'Benutzername für den Zugriff auf den PostgreSQL-Server.'; -$lang['password'] = 'Passwort des angegebenen Benutzers.'; -$lang['database'] = 'Zu verwendende Datenbank.'; -$lang['debug'] = 'Debug-Informationen anzeigen?'; -$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; -$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; -$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; -$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; -$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; -$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; -$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; -$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; -$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; -$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; -$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; -$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; -$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; -$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; -$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; -$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; -$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; -$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; -$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; -$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; -$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; -$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; -$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; -$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; -$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php index 063ee40ad..d72056236 100644 --- a/lib/plugins/config/lang/de/lang.php +++ b/lib/plugins/config/lang/de/lang.php @@ -17,58 +17,62 @@ * @author Paul Lachewsky * @author Pierre Corell * @author Matthias Schulte + * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Konfiguration'; -$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert.
Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.'; +$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert. +
Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.'; $lang['updated'] = 'Einstellungen erfolgreich gespeichert.'; $lang['nochoice'] = '(keine Auswahlmöglichkeiten vorhanden)'; -$lang['locked'] = 'Die Konfigurationsdatei kann nicht geändert werden. Wenn dies unbeabsichtigt ist,
überprüfen Sie, ob die Dateiberechtigungen korrekt gesetzt sind.'; +$lang['locked'] = 'Die Konfigurationsdatei kann nicht geändert werden, wenn dies unbeabsichtigt ist +
überprüfen Sie, dass die Dateiberechtigungen korrekt gesetzt sind.'; $lang['danger'] = 'Vorsicht: Die Änderung dieser Option könnte Ihr Wiki und das Konfigurationsmenü unzugänglich machen.'; $lang['warning'] = 'Hinweis: Die Änderung dieser Option könnte unbeabsichtigtes Verhalten hervorrufen.'; $lang['security'] = 'Sicherheitswarnung: Die Änderung dieser Option könnte ein Sicherheitsrisiko darstellen.'; $lang['_configuration_manager'] = 'Konfiguration'; $lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; $lang['_header_plugin'] = 'Plugin-Konfiguration'; -$lang['_header_template'] = 'Vorlagen'; -$lang['_header_undefined'] = 'Unbekannte Werte'; -$lang['_basic'] = 'Grundkonfiguration'; -$lang['_display'] = 'Darstellung'; -$lang['_authentication'] = 'Authentifizierung'; -$lang['_anti_spam'] = 'Anti-Spam'; -$lang['_editing'] = 'Bearbeitung'; -$lang['_links'] = 'Links'; -$lang['_media'] = 'Medien'; -$lang['_notifications'] = 'Benachrichtigungen'; -$lang['_syndication'] = 'Syndication (RSS)'; +$lang['_header_template'] = 'Template-Konfiguration'; +$lang['_header_undefined'] = 'Unbekannte Einstellungen'; +$lang['_basic'] = 'Grund-Konfiguration'; +$lang['_display'] = 'Anzeige-Konfiguration'; +$lang['_authentication'] = 'Authentifizierungs-Konfiguration'; +$lang['_anti_spam'] = 'Anti-Spam-Konfiguration'; +$lang['_editing'] = 'Bearbeitungs-Konfiguration'; +$lang['_links'] = 'Link-Konfiguration'; +$lang['_media'] = 'Medien-Konfiguration'; +$lang['_notifications'] = 'Benachrichtigungs-Konfiguration'; +$lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; $lang['_advanced'] = 'Erweiterte Konfiguration'; -$lang['_network'] = 'Netzwerk'; -$lang['_plugin_sufix'] = ''; -$lang['_template_sufix'] = 'Vorlagen-Konfiguration'; +$lang['_network'] = 'Netzwerk-Konfiguration'; +$lang['_plugin_sufix'] = 'Plugin-Konfiguration'; +$lang['_template_sufix'] = 'Template-Konfiguration'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; $lang['_msg_setting_no_default'] = 'Kein Standardwert.'; -$lang['fmode'] = 'Berechtigungen für neue Dateien'; -$lang['dmode'] = 'Berechtigungen für neue Verzeichnisse'; -$lang['lang'] = 'Sprache'; -$lang['basedir'] = 'Installationsverzeichnis'; -$lang['baseurl'] = 'Installationspfad (URL)'; -$lang['savedir'] = 'Speicherverzeichnis'; -$lang['cookiedir'] = 'Cookiepfad. Frei lassen, um den gleichen Pfad wie "baseurl" zu benutzen.'; -$lang['start'] = 'Startseitenname'; $lang['title'] = 'Titel des Wikis'; +$lang['start'] = 'Startseitenname'; +$lang['lang'] = 'Sprache'; $lang['template'] = 'Designvorlage (Template)'; $lang['tagline'] = 'Tag-Linie (nur, wenn vom Template unterstützt)'; $lang['sidebar'] = 'Name der Sidebar-Seite (nur, wenn vom Template unterstützt)), ein leeres Feld deaktiviert die Sidebar'; $lang['license'] = 'Unter welcher Lizenz sollen Ihre Inhalte veröffentlicht werden?'; -$lang['fullpath'] = 'Den kompletten Dateipfad im Footer anzeigen'; +$lang['savedir'] = 'Speicherverzeichnis'; +$lang['basedir'] = 'Installationsverzeichnis'; +$lang['baseurl'] = 'Installationspfad (URL)'; +$lang['cookiedir'] = 'Cookiepfad. Frei lassen, um den gleichen Pfad wie "baseurl" zu benutzen.'; +$lang['dmode'] = 'Rechte für neue Verzeichnisse'; +$lang['fmode'] = 'Rechte für neue Dateien'; +$lang['allowdebug'] = 'Debug-Ausgaben erlauben Abschalten wenn nicht benötigt!'; $lang['recent'] = 'Anzahl der Einträge in der Änderungsliste'; +$lang['recent_days'] = 'Wieviele letzte Änderungen sollen einsehbar bleiben? (Tage)'; $lang['breadcrumbs'] = 'Anzahl der Einträge im "Krümelpfad"'; $lang['youarehere'] = 'Hierarchische Pfadnavigation verwenden'; +$lang['fullpath'] = 'Den kompletten Dateipfad im Footer anzeigen'; $lang['typography'] = 'Typographische Ersetzungen'; -$lang['htmlok'] = 'HTML erlauben'; -$lang['phpok'] = 'PHP erlauben'; $lang['dformat'] = 'Datumsformat (Siehe PHP strftime Funktion)'; $lang['signature'] = 'Signatur'; +$lang['showuseras'] = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird'; $lang['toptoclevel'] = 'Inhaltsverzeichnis bei dieser Überschriftengröße beginnen'; $lang['tocminheads'] = 'Mindestanzahl der Überschriften die entscheidet, ob ein Inhaltsverzeichnis erscheinen soll'; $lang['maxtoclevel'] = 'Maximale Überschriftsgröße für Inhaltsverzeichnis'; @@ -76,16 +80,8 @@ $lang['maxseclevel'] = 'Abschnitte bis zu dieser Stufe einzeln editier $lang['camelcase'] = 'CamelCase-Verlinkungen verwenden'; $lang['deaccent'] = 'Seitennamen bereinigen'; $lang['useheading'] = 'Erste Überschrift als Seitennamen verwenden'; -$lang['refcheck'] = 'Auf Verwendung beim Löschen von Media-Dateien testen'; -$lang['refshow'] = 'Wiev iele Verwendungsorte der Media-Datei zeigen'; -$lang['allowdebug'] = 'Debug-Ausgaben erlauben Abschalten wenn nicht benötigt!'; -$lang['mediarevisions'] = 'Media-Revisionen (ältere Versionen) aktivieren?'; -$lang['usewordblock'] = 'Spam-Blocking benutzen'; -$lang['indexdelay'] = 'Zeit bevor Suchmaschinenindexierung erlaubt ist'; -$lang['relnofollow'] = 'rel="nofollow" verwenden'; -$lang['mailguard'] = 'E-Mail-Adressen schützen'; -$lang['iexssprotect'] = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen'; -$lang['showuseras'] = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird'; +$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Übersicht. Wenn diese Option aktiviert wird, werden alle Namensräume, für die der Benutzer keine Lese-Rechte hat, nicht angezeigt. Dies kann unter Umständen dazu führen, das lesbare Unter-Namensräume nicht angezeigt werden und macht die Übersicht evtl. unbrauchbar in Kombination mit bestimmten ACL Einstellungen.'; +$lang['hidepages'] = 'Seiten verstecken (Regulärer Ausdruck)'; $lang['useacl'] = 'Zugangskontrolle verwenden'; $lang['autopasswd'] = 'Passwort automatisch generieren'; $lang['authtype'] = 'Authentifizierungsmechanismus'; @@ -94,62 +90,69 @@ $lang['defaultgroup'] = 'Standardgruppe'; $lang['superuser'] = 'Administrator - Eine Gruppe oder Nutzer mit vollem Zugriff auf alle Seiten und Administrationswerkzeuge.'; $lang['manager'] = 'Manager - Eine Gruppe oder Nutzer mit Zugriff auf einige Administrationswerkzeuge.'; $lang['profileconfirm'] = 'Profiländerung nur nach Passwortbestätigung'; +$lang['rememberme'] = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)'; $lang['disableactions'] = 'DokuWiki-Aktionen deaktivieren'; $lang['disableactions_check'] = 'Check'; $lang['disableactions_subscription'] = 'Seiten-Abonnements'; $lang['disableactions_wikicode'] = 'Quelltext betrachten/exportieren'; $lang['disableactions_other'] = 'Andere Aktionen (durch Komma getrennt)'; -$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Übersicht. Wenn diese Option aktiviert wird, werden alle Namensräume, für die der Benutzer keine Lese-Rechte hat, nicht angezeigt. Dies kann unter Umständen dazu führen, das lesbare Unter-Namensräume nicht angezeigt werden und macht die Übersicht evtl. unbrauchbar in Kombination mit bestimmten ACL Einstellungen.'; $lang['auth_security_timeout'] = 'Authentifikations-Timeout (Sekunden)'; $lang['securecookie'] = 'Sollen Cookies, die via HTTPS gesetzt wurden nur per HTTPS versendet werden? Deaktivieren Sie diese Option, wenn nur der Login Ihres Wikis mit SSL gesichert ist, aber das Betrachten des Wikis ungesichert geschieht.'; $lang['remote'] = 'Aktiviert den externen API-Zugang. Diese Option erlaubt es externen Anwendungen von außen auf die XML-RPC-Schnittstelle oder anderweitigen Schnittstellen zuzugreifen.'; $lang['remoteuser'] = 'Zugriff auf die externen Schnittstellen durch kommaseparierte Angabe von Benutzern oder Gruppen einschränken. Ein leeres Feld erlaubt Zugriff für jeden.'; -$lang['updatecheck'] = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.'; -$lang['userewrite'] = 'URL rewriting'; -$lang['useslash'] = 'Schrägstrich (/) als Namensraumtrenner in URLs verwenden'; +$lang['usewordblock'] = 'Spam-Blocking benutzen'; +$lang['relnofollow'] = 'rel="nofollow" verwenden'; +$lang['indexdelay'] = 'Zeit bevor Suchmaschinenindexierung erlaubt ist'; +$lang['mailguard'] = 'E-Mail-Adressen schützen'; +$lang['iexssprotect'] = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen'; $lang['usedraft'] = 'Während des Bearbeitens automatisch Zwischenentwürfe speichern'; -$lang['sepchar'] = 'Worttrenner für Seitennamen in URLs'; -$lang['canonical'] = 'Immer Links mit vollständigen URLs erzeugen'; -$lang['fnencode'] = 'Methode um nicht-ASCII Dateinamen zu kodieren.'; -$lang['autoplural'] = 'Bei Links automatisch nach vorhandenen Pluralformen suchen'; -$lang['compression'] = 'Komprimierungsmethode für alte Seitenrevisionen'; -$lang['cachetime'] = 'Maximale Cachespeicherung (Sekunden)'; +$lang['htmlok'] = 'HTML erlauben'; +$lang['phpok'] = 'PHP erlauben'; $lang['locktime'] = 'Maximales Alter für Seitensperren (Sekunden)'; +$lang['cachetime'] = 'Maximale Cachespeicherung (Sekunden)'; +$lang['target____wiki'] = 'Zielfenster für interne Links (target Attribut)'; +$lang['target____interwiki'] = 'Zielfenster für InterWiki-Links (target Attribut)'; +$lang['target____extern'] = 'Zielfenster für Externe Links (target Attribut)'; +$lang['target____media'] = 'Zielfenster für (Bild-)Dateien (target Attribut)'; +$lang['target____windows'] = 'Zielfenster für Windows Freigaben (target Attribut)'; +$lang['mediarevisions'] = 'Media-Revisionen (ältere Versionen) aktivieren?'; +$lang['refcheck'] = 'Auf Verwendung beim Löschen von Media-Dateien testen'; +$lang['refshow'] = 'Wiev iele Verwendungsorte der Media-Datei zeigen'; +$lang['gdlib'] = 'GD Lib Version'; +$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug'; +$lang['jpg_quality'] = 'JPEG Kompressionsqualität (0-100)'; $lang['fetchsize'] = 'Maximale Größe (in Bytes), die fetch.php von extern herunterladen darf'; +$lang['subscribers'] = 'E-Mail-Abos zulassen'; +$lang['subscribe_time'] = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.'; $lang['notify'] = 'Änderungsmitteilungen an diese E-Mail-Adresse versenden'; $lang['registernotify'] = 'Information über neu registrierte Nutzer an diese E-Mail-Adresse senden'; $lang['mailfrom'] = 'Absender-E-Mail-Adresse für automatische Mails'; $lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen'; $lang['htmlmail'] = 'Versendet optisch angenehmere, aber größere E-Mails im HTML-Format (multipart). Deaktivieren, um Text-Mails zu versenden.'; +$lang['sitemap'] = 'Google Sitemap erzeugen (Tage)'; +$lang['rss_type'] = 'XML-Feed-Format'; +$lang['rss_linkto'] = 'XML-Feed verlinken auf'; +$lang['rss_content'] = 'Welche Inhalte sollen im XML-Feed dargestellt werden?'; +$lang['rss_update'] = 'XML-Feed Aktualisierungsintervall (Sekunden)'; +$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen'; +$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?'; +$lang['updatecheck'] = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.'; +$lang['userewrite'] = 'URL rewriting'; +$lang['useslash'] = 'Schrägstrich (/) als Namensraumtrenner in URLs verwenden'; +$lang['sepchar'] = 'Worttrenner für Seitennamen in URLs'; +$lang['canonical'] = 'Immer Links mit vollständigen URLs erzeugen'; +$lang['fnencode'] = 'Methode um nicht-ASCII Dateinamen zu kodieren.'; +$lang['autoplural'] = 'Bei Links automatisch nach vorhandenen Pluralformen suchen'; +$lang['compression'] = 'Komprimierungsmethode für alte Seitenrevisionen'; $lang['gzip_output'] = 'Seiten mit gzip komprimiert ausliefern'; -$lang['gdlib'] = 'GD Lib Version'; -$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug'; -$lang['jpg_quality'] = 'JPEG Kompressionsqualität (0-100)'; -$lang['subscribers'] = 'E-Mail-Abos zulassen'; -$lang['subscribe_time'] = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.'; $lang['compress'] = 'JavaScript und Stylesheets komprimieren'; $lang['cssdatauri'] = 'Größe in Bytes, bis zu der Bilder in css-Dateien referenziert werden können, um HTTP-Anfragen zu minimieren. Diese Technik funktioniert nicht im IE 7 und älter! Empfohlene Einstellung: 400 to 600 Bytes. Setzen Sie die Einstellung auf 0 um die Funktion zu deaktivieren.'; -$lang['hidepages'] = 'Seiten verstecken (Regulärer Ausdruck)'; $lang['send404'] = 'Bei nicht vorhandenen Seiten mit 404 Fehlercode antworten'; -$lang['sitemap'] = 'Google Sitemap erzeugen (Tage)'; $lang['broken_iua'] = 'Falls die Funktion ignore_user_abort auf Ihrem System nicht funktioniert, könnte der Such-Index nicht funktionieren. IIS+PHP/CGI ist bekannt dafür. Siehe auch Bug 852.'; $lang['xsendfile'] = 'Den X-Sendfile-Header nutzen, um Dateien direkt vom Webserver ausliefern zu lassen? Ihr Webserver muss dies unterstützen!'; $lang['renderer_xhtml'] = 'Standard-Renderer für die normale (XHTML) Wiki-Ausgabe.'; $lang['renderer__core'] = '%s (DokuWiki Kern)'; $lang['renderer__plugin'] = '%s (Plugin)'; -$lang['rememberme'] = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)'; -$lang['rss_type'] = 'XML-Feed-Format'; -$lang['rss_linkto'] = 'XML-Feed verlinken auf'; -$lang['rss_content'] = 'Welche Inhalte sollen im XML-Feed dargestellt werden?'; -$lang['rss_update'] = 'XML-Feed Aktualisierungsintervall (Sekunden)'; -$lang['recent_days'] = 'Wieviele letzte Änderungen sollen einsehbar bleiben? (Tage)'; -$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen'; -$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?'; -$lang['target____wiki'] = 'Zielfenster für interne Links (target Attribut)'; -$lang['target____interwiki'] = 'Zielfenster für InterWiki-Links (target Attribut)'; -$lang['target____extern'] = 'Zielfenster für Externe Links (target Attribut)'; -$lang['target____media'] = 'Zielfenster für (Bild-)Dateien (target Attribut)'; -$lang['target____windows'] = 'Zielfenster für Windows Freigaben (target Attribut)'; $lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn du einen langsamen, unbrauchbaren DNS-Server verwendest oder die Funktion nicht benötigst, dann sollte diese Option deaktivert sein.'; $lang['proxy____host'] = 'Proxy-Server'; $lang['proxy____port'] = 'Proxy-Port'; @@ -196,9 +199,9 @@ $lang['xsendfile_o_0'] = 'nicht benutzen'; $lang['xsendfile_o_1'] = 'Proprietärer lighttpd-Header (vor Release 1.5)'; $lang['xsendfile_o_2'] = 'Standard X-Sendfile-Header'; $lang['xsendfile_o_3'] = 'Proprietärer Nginx X-Accel-Redirect-Header'; -$lang['showuseras_o_loginname'] = 'Login-Name'; +$lang['showuseras_o_loginname'] = 'Loginname'; $lang['showuseras_o_username'] = 'Vollständiger Name des Benutzers'; -$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (Beachte "mailguard"-Einstellung)'; +$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (je nach Mailguard-Einstellung verschleiert)'; $lang['showuseras_o_email_link'] = 'E-Mail-Adresse des Benutzers als mailto:-Link'; $lang['useheading_o_0'] = 'Nie'; $lang['useheading_o_navigation'] = 'Nur Navigation'; diff --git a/lib/plugins/plugin/lang/de/lang.php b/lib/plugins/plugin/lang/de/lang.php index 9f26a2933..0c560537f 100644 --- a/lib/plugins/plugin/lang/de/lang.php +++ b/lib/plugins/plugin/lang/de/lang.php @@ -18,6 +18,7 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell + * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Plugins verwalten'; $lang['download'] = 'Neues Plugin herunterladen und installieren'; diff --git a/lib/plugins/popularity/lang/de/lang.php b/lib/plugins/popularity/lang/de/lang.php index 42bdc14d5..4c1ba1391 100644 --- a/lib/plugins/popularity/lang/de/lang.php +++ b/lib/plugins/popularity/lang/de/lang.php @@ -15,6 +15,7 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell + * @author Mateng Schimmerlos ) */ $lang['name'] = 'Popularitäts-Feedback (Eventuell längere Ladezeit)'; $lang['submit'] = 'Daten senden'; diff --git a/lib/plugins/revert/lang/de/lang.php b/lib/plugins/revert/lang/de/lang.php index b430ce876..39acd3c37 100644 --- a/lib/plugins/revert/lang/de/lang.php +++ b/lib/plugins/revert/lang/de/lang.php @@ -16,6 +16,7 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell + * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Seiten wieder herstellen'; $lang['filter'] = 'Nach betroffenen Seiten suchen'; diff --git a/lib/plugins/usermanager/lang/de/lang.php b/lib/plugins/usermanager/lang/de/lang.php index 0dd90cc68..cfe528823 100644 --- a/lib/plugins/usermanager/lang/de/lang.php +++ b/lib/plugins/usermanager/lang/de/lang.php @@ -17,6 +17,7 @@ * @author Paul Lachewsky * @author Pierre Corell * @author Matthias Schulte + * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Benutzerverwaltung'; $lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)'; -- cgit v1.2.3 From 4931ae526572ef290d7337eca9a37786c7108f59 Mon Sep 17 00:00:00 2001 From: Otto Vainio Date: Mon, 15 Apr 2013 21:56:46 +0200 Subject: Finnish language update --- lib/plugins/authad/lang/fi/settings.php | 6 ++++++ lib/plugins/authldap/lang/fi/settings.php | 6 ++++++ lib/plugins/authmysql/lang/fi/settings.php | 6 ++++++ lib/plugins/authpgsql/lang/fi/settings.php | 6 ++++++ lib/plugins/config/lang/fi/lang.php | 6 ++++++ 5 files changed, 30 insertions(+) create mode 100644 lib/plugins/authad/lang/fi/settings.php create mode 100644 lib/plugins/authldap/lang/fi/settings.php create mode 100644 lib/plugins/authmysql/lang/fi/settings.php create mode 100644 lib/plugins/authpgsql/lang/fi/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/fi/settings.php b/lib/plugins/authad/lang/fi/settings.php new file mode 100644 index 000000000..d3aa13e07 --- /dev/null +++ b/lib/plugins/authad/lang/fi/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authldap/lang/fi/settings.php b/lib/plugins/authldap/lang/fi/settings.php new file mode 100644 index 000000000..d3aa13e07 --- /dev/null +++ b/lib/plugins/authldap/lang/fi/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authmysql/lang/fi/settings.php b/lib/plugins/authmysql/lang/fi/settings.php new file mode 100644 index 000000000..d3aa13e07 --- /dev/null +++ b/lib/plugins/authmysql/lang/fi/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/authpgsql/lang/fi/settings.php b/lib/plugins/authpgsql/lang/fi/settings.php new file mode 100644 index 000000000..d3aa13e07 --- /dev/null +++ b/lib/plugins/authpgsql/lang/fi/settings.php @@ -0,0 +1,6 @@ + + */ diff --git a/lib/plugins/config/lang/fi/lang.php b/lib/plugins/config/lang/fi/lang.php index f3c57d10e..990852f99 100644 --- a/lib/plugins/config/lang/fi/lang.php +++ b/lib/plugins/config/lang/fi/lang.php @@ -30,6 +30,7 @@ $lang['_editing'] = 'Sivumuokkauksen asetukset'; $lang['_links'] = 'Linkkien asetukset'; $lang['_media'] = 'Media-asetukset'; $lang['_notifications'] = 'Ilmoitus-asetukset'; +$lang['_syndication'] = 'Syöteasetukset'; $lang['_advanced'] = 'Lisäasetukset'; $lang['_network'] = 'Verkkoasetukset'; $lang['_plugin_sufix'] = 'liitännäisen asetukset'; @@ -85,6 +86,8 @@ $lang['disableactions_wikicode'] = 'Näytä lähdekoodi/Vie raakana'; $lang['disableactions_other'] = 'Muut toiminnot (pilkulla erotettuna)'; $lang['auth_security_timeout'] = 'Autentikoinnin aikakatkaisu (sekunteja)'; $lang['securecookie'] = 'Lähetetäänkö HTTPS:n kautta asetetut evästetiedot HTTPS-yhteydellä? Kytke pois, jos vain wikisi kirjautuminen on suojattu SSL:n avulla, mutta muuten wikiä käytetään ilman suojausta.'; +$lang['remote'] = 'Kytke "remote API" käyttöön. Tämä sallii muiden sovellusten päästä wikiin XML-RPC:n avulla'; +$lang['remoteuser'] = 'Salli "remote API" pääsy vain pilkulla erotetuille ryhmille tai käyttäjille tässä. Jätä tyhjäksi, jos haluat sallia käytön kaikille.'; $lang['usewordblock'] = 'Estä spam sanalistan avulla'; $lang['relnofollow'] = 'Käytä rel="nofollow" ulkoisille linkeille'; $lang['indexdelay'] = 'Aikaraja indeksoinnille (sek)'; @@ -113,12 +116,14 @@ $lang['notify'] = 'Lähetä muutosilmoitukset tähän osoitteesee $lang['registernotify'] = 'Lähetä ilmoitus uusista rekisteröitymisistä tähän osoitteeseen'; $lang['mailfrom'] = 'Sähköpostiosoite automaattisia postituksia varten'; $lang['mailprefix'] = 'Etuliite automaattisesti lähetettyihin dähköposteihin'; +$lang['htmlmail'] = 'Lähetä paremman näköisiä, mutta isompia HTML multipart sähköposteja. Ota pois päältä, jos haluat vain tekstimuotoisia posteja.'; $lang['sitemap'] = 'Luo Google sitemap (päiviä)'; $lang['rss_type'] = 'XML-syötteen tyyppi'; $lang['rss_linkto'] = 'XML-syöte kytkeytyy'; $lang['rss_content'] = 'Mitä XML-syöte näyttää?'; $lang['rss_update'] = 'XML-syötteen päivitystahti (sek)'; $lang['rss_show_summary'] = 'XML-syöte näyttää yhteenvedon otsikossa'; +$lang['rss_media'] = 'Millaiset muutokset pitäisi olla mukana XML-syötteessä.'; $lang['updatecheck'] = 'Tarkista päivityksiä ja turvavaroituksia? Tätä varten DokuWikin pitää ottaa yhteys update.dokuwiki.orgiin.'; $lang['userewrite'] = 'Käytä siivottuja URLeja'; $lang['useslash'] = 'Käytä kauttaviivaa nimiavaruuksien erottimena URL-osoitteissa'; @@ -137,6 +142,7 @@ $lang['xsendfile'] = 'Käytä X-Sendfile otsikkoa, kun web-palvelin $lang['renderer_xhtml'] = 'Renderöinti, jota käytetään wikin pääasialliseen (xhtml) tulostukseen'; $lang['renderer__core'] = '%s (dokuwiki core)'; $lang['renderer__plugin'] = '%s (liitännäinen)'; +$lang['dnslookups'] = 'DokuWiki tarkistaa sivun päivittäjän koneen IP-osoitteen isäntänimen. Kytke pois, jos käytät hidasta tai toimimatonta DNS-palvelinta, tai et halua tätä ominaisuutta.'; $lang['proxy____host'] = 'Proxy-palvelimen nimi'; $lang['proxy____port'] = 'Proxy portti'; $lang['proxy____user'] = 'Proxy käyttäjän nimi'; -- cgit v1.2.3 From 0fb6b47f24d6914847f97a98b1598e9af7dab99b Mon Sep 17 00:00:00 2001 From: Victor Westmann Date: Mon, 15 Apr 2013 21:59:37 +0200 Subject: Brazilian Portuguese language update --- lib/plugins/authmysql/lang/pt-br/settings.php | 11 +++++++++++ lib/plugins/authpgsql/lang/pt-br/settings.php | 6 ++++++ 2 files changed, 17 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/authmysql/lang/pt-br/settings.php b/lib/plugins/authmysql/lang/pt-br/settings.php index c37690314..5febedd13 100644 --- a/lib/plugins/authmysql/lang/pt-br/settings.php +++ b/lib/plugins/authmysql/lang/pt-br/settings.php @@ -17,12 +17,23 @@ $lang['getUserInfo'] = 'Comando SQL para obter informações de usuár $lang['getGroups'] = 'Comando SQL para obter as credenciais de grupo de um usuário'; $lang['getUsers'] = 'Comando SQL para listar todos os usuários'; $lang['FilterLogin'] = 'Comando SQL para filtrar usuários pelo login'; +$lang['FilterName'] = 'Cláusula SQL para filtrar usuários por nome completo'; +$lang['FilterEmail'] = 'Cláusula SQL para filtrar usuários por endereço de email'; +$lang['FilterGroup'] = 'Cláusula SQL para filtrar usuários por membros de grupos'; +$lang['SortOrder'] = 'Cláusula SQL para ordenar usuários'; +$lang['addUser'] = 'Comando SQL para adicionar um novo usuário'; $lang['addGroup'] = 'Comando SQL para adicionar um novo grupo'; $lang['addUserGroup'] = 'Comando SQL para adicionar um usuário a um determinado grupo'; $lang['delGroup'] = 'Comando SQL para remover um grupo'; +$lang['getUserID'] = 'Comando SQL para obter a chave primária de um usuário'; $lang['delUser'] = 'Comando SQL para apagar um usuário'; $lang['delUserRefs'] = 'Comando SQL para apagar um usuário de todos os grupos'; $lang['updateUser'] = 'Comando SQL para atualizar perfil de usuário'; +$lang['UpdateLogin'] = 'Comando SQL para atualizar o login de um usuário'; +$lang['UpdatePass'] = 'Cláusula de atualização para atualizar senha de usuário'; +$lang['UpdateEmail'] = 'Cláusula de atualização para atualizar email do usuário'; +$lang['UpdateName'] = 'Cláusula de atualização para atualizar nome completo do usuário'; +$lang['UpdateTarget'] = 'Limitar cláusula para identificar usuário quando estiver atualizando'; $lang['delUserGroup'] = 'Comando SQL para remover um usuário de um grupo determinado'; $lang['getGroupID'] = 'Comando SQL para obter a chave primária de um grupo determinado'; $lang['debug_o_0'] = 'nenhum'; diff --git a/lib/plugins/authpgsql/lang/pt-br/settings.php b/lib/plugins/authpgsql/lang/pt-br/settings.php index fea309496..d91e9c8e5 100644 --- a/lib/plugins/authpgsql/lang/pt-br/settings.php +++ b/lib/plugins/authpgsql/lang/pt-br/settings.php @@ -10,6 +10,7 @@ $lang['user'] = 'Nome de usuário PostgreSQL'; $lang['password'] = 'Senha do usuário acima'; $lang['database'] = 'Base de dados para usar'; $lang['debug'] = 'Mostrar informações adicionais de depuração'; +$lang['forwardClearPass'] = 'Transmitir senhas de usuário como texto puro para comandos SQL abaixo, ao invés de usar a opção passcrypt'; $lang['checkPass'] = 'Comando SQL para verificar senhas'; $lang['getUserInfo'] = 'Comando SQL para obter informações do usuário'; $lang['getGroups'] = 'Comando SQL para obter as credenciais de um usuário de um determinado grupo'; @@ -27,5 +28,10 @@ $lang['getUserID'] = 'Comando SQL para obter chave primária de usu $lang['delUser'] = 'Comando SQL para apagar usuário'; $lang['delUserRefs'] = 'Comando SQL para remover um usuário de todos os grupos'; $lang['updateUser'] = 'Comando SQL para atualizar perfil de usuário'; +$lang['UpdateLogin'] = 'Atualizar cláusula para atualizar o login do usuário'; +$lang['UpdatePass'] = 'Atualizar cláusula para atualizar a senha do usuário'; +$lang['UpdateEmail'] = 'Atualizar cláusula para atualizar o endereço de email'; +$lang['UpdateName'] = 'Atualizar cláusula para atualizar o nome completo do usuário'; +$lang['UpdateTarget'] = 'Limitar cláusula para identificar quando um usuário estiver atualizando'; $lang['delUserGroup'] = 'Comando SQL para remover um usuário de um determinado grupo'; $lang['getGroupID'] = 'Comando SQL para obter a chave primária de um determinado grupo'; -- cgit v1.2.3 From a426a6cd90e703479b2f5a57d16b97d5ded495af Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Apr 2013 09:28:22 +0200 Subject: LDAP: do not bind anonymously if superuser is set FS#2607 --- lib/plugins/authldap/auth.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php index 6e7bde1f0..b49aa4792 100644 --- a/lib/plugins/authldap/auth.php +++ b/lib/plugins/authldap/auth.php @@ -465,7 +465,13 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin { if(defined('LDAP_OPT_NETWORK_TIMEOUT')) { ldap_set_option($this->con, LDAP_OPT_NETWORK_TIMEOUT, 1); } - $bound = @ldap_bind($this->con); + + if($this->getConf('binddn') && $this->getConf('bindpw')) { + $bound = @ldap_bind($this->con, $this->getConf('binddn'), $this->getConf('bindpw')); + $this->bound = 2; + } else { + $bound = @ldap_bind($this->con); + } if($bound) { break; } -- cgit v1.2.3 From 3002d731a466d09ce747cfbbe930444ee584f118 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Apr 2013 10:25:36 +0200 Subject: adjusted authad language files for config option change --- lib/plugins/authad/auth.php | 4 ++-- lib/plugins/authad/lang/bg/settings.php | 4 ++-- lib/plugins/authad/lang/de-informal/settings.php | 4 ++-- lib/plugins/authad/lang/de/settings.php | 17 +++++++++++++++-- lib/plugins/authad/lang/en/settings.php | 4 ++-- lib/plugins/authad/lang/eo/settings.php | 4 ++-- lib/plugins/authad/lang/fr/settings.php | 4 ++-- lib/plugins/authad/lang/ko/settings.php | 4 ++-- lib/plugins/authad/lang/nl/settings.php | 4 ++-- lib/plugins/authad/lang/pt-br/settings.php | 2 +- lib/plugins/authad/lang/zh-tw/settings.php | 4 ++-- lib/plugins/authad/lang/zh/settings.php | 4 ++-- 12 files changed, 36 insertions(+), 23 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index 6c49eafbb..f7f350c3f 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -21,8 +21,8 @@ require_once(DOKU_PLUGIN.'authad/adLDAP/adLDAP.php'); * * //optional: * $conf['plugin']['authad']['sso'] = 1; - * $conf['plugin']['authad']['ad_username'] = 'root'; - * $conf['plugin']['authad']['ad_password'] = 'pass'; + * $conf['plugin']['authad']['admin_username'] = 'root'; + * $conf['plugin']['authad']['admin_password'] = 'pass'; * $conf['plugin']['authad']['real_primarygroup'] = 1; * $conf['plugin']['authad']['use_ssl'] = 1; * $conf['plugin']['authad']['use_tls'] = 1; diff --git a/lib/plugins/authad/lang/bg/settings.php b/lib/plugins/authad/lang/bg/settings.php index d63331078..877810c4e 100644 --- a/lib/plugins/authad/lang/bg/settings.php +++ b/lib/plugins/authad/lang/bg/settings.php @@ -7,8 +7,8 @@ $lang['account_suffix'] = 'Наставка на акаунта Ви. Например @някакъв.домейн.org'; $lang['base_dn'] = 'Вашият основен DN. Например DC=моят,DC=домейн,DC=org'; $lang['domain_controllers'] = 'Domain controller списък, разделете сървърите със запетая. Например сървър1.домейн.org,сървър2.домейн.org'; -$lang['ad_username'] = 'Привилегирован Active Directory потребител с достъп до данните на останалите потребители. Не е задължително, но е необходимо за някои функционалности като изпращането на имейл за абонаменти.'; -$lang['ad_password'] = 'Паролата на горния потребител.'; +$lang['admin_username'] = 'Привилегирован Active Directory потребител с достъп до данните на останалите потребители. Не е задължително, но е необходимо за някои функционалности като изпращането на имейл за абонаменти.'; +$lang['admin_password'] = 'Паролата на горния потребител.'; $lang['sso'] = 'Да се ползва ли еднократно вписване чрез Kerberos или NTLM?'; $lang['real_primarygroup'] = 'Да се извлича ли истинската група вместо да се предполага "Domain Users" (по-бавно)'; $lang['use_ssl'] = 'Ползване на SSL свързаност? Не отбелязвайте TLS (по-долу) ако включите опцията.'; diff --git a/lib/plugins/authad/lang/de-informal/settings.php b/lib/plugins/authad/lang/de-informal/settings.php index f6ba679ff..4d0b93e5d 100644 --- a/lib/plugins/authad/lang/de-informal/settings.php +++ b/lib/plugins/authad/lang/de-informal/settings.php @@ -8,8 +8,8 @@ $lang['account_suffix'] = 'Dein Account-Suffix. Z.B. @my.domain.org'; $lang['base_dn'] = 'Dein Base-DN. Z.B. DC=my,DC=domain,DC=org'; $lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z.B. srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = 'Ein privilegierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; -$lang['ad_password'] = 'Das Passwort des obigen Benutzers.'; +$lang['admin_username'] = 'Ein privilegierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; +$lang['admin_password'] = 'Das Passwort des obigen Benutzers.'; $lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; $lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; $lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterhalb nicht aktivieren.'; diff --git a/lib/plugins/authad/lang/de/settings.php b/lib/plugins/authad/lang/de/settings.php index a1a99b6d6..acfa7e574 100644 --- a/lib/plugins/authad/lang/de/settings.php +++ b/lib/plugins/authad/lang/de/settings.php @@ -1,6 +1,19 @@ ) + * @author Frank Loizzi + * @author Matthias Schulte */ +$lang['account_suffix'] = 'Ihr Account-Suffix. Z.B. @my.domain.org'; +$lang['base_dn'] = 'Ihr Base-DN. z.B. DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z.B. srv1.domain.org,srv2.domain.org'; +$lang['admin_username'] = 'Ein privilegierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; +$lang['admin_password'] = 'Das Passwort des obigen Benutzers.'; +$lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; +$lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; +$lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterhalb nicht aktivieren.'; +$lang['use_tls'] = 'TLS-Verbindung benutzen? Falls ja, SSL oberhalb nicht aktivieren.'; +$lang['debug'] = 'Zusätzliche Debug-Informationen bei Fehlern anzeigen?'; +$lang['expirywarn'] = 'Tage im Voraus um Benutzer über ablaufende Passwörter zu informieren. 0 zum Ausschalten.'; +$lang['additional'] = 'Eine Komma-separierte Liste von zusätzlichen AD-Attributen, die von den Benutzerobjekten abgefragt werden. Wird von einigen Plugins benutzt.'; diff --git a/lib/plugins/authad/lang/en/settings.php b/lib/plugins/authad/lang/en/settings.php index 7728d5ac4..aff49550b 100644 --- a/lib/plugins/authad/lang/en/settings.php +++ b/lib/plugins/authad/lang/en/settings.php @@ -3,8 +3,8 @@ $lang['account_suffix'] = 'Your account suffix. Eg. @my.domain.org'; $lang['base_dn'] = 'Your base DN. Eg. DC=my,DC=domain,DC=org'; $lang['domain_controllers'] = 'A comma separated list of Domain controllers. Eg. srv1.domain.org,srv2.domain.org'; -$lang['admin_username'] = 'A privileged Active Directory user with access to all other user\'s data. Optional, but needed for certain actions like sending subscription mails.'; -$lang['admin_password'] = 'The password of the above user.'; +$lang['admin_username'] = 'A privileged Active Directory user with access to all other user\'s data. Optional, but needed for certain actions like sending subscription mails.'; +$lang['admin_password'] = 'The password of the above user.'; $lang['sso'] = 'Should Single-Sign-On via Kerberos or NTLM be used?'; $lang['real_primarygroup'] = 'Should the real primary group be resolved instead of assuming "Domain Users" (slower)'; $lang['use_ssl'] = 'Use SSL connection? If used, do not enable TLS below.'; diff --git a/lib/plugins/authad/lang/eo/settings.php b/lib/plugins/authad/lang/eo/settings.php index 85a6abd98..8bd34b439 100644 --- a/lib/plugins/authad/lang/eo/settings.php +++ b/lib/plugins/authad/lang/eo/settings.php @@ -6,8 +6,8 @@ $lang['account_suffix'] = 'Via konto-aldonaĵo, ekz. @mia.domajno.lando'; $lang['base_dn'] = 'Via baza DN, ekz. DC=mia,DC=domajno,DC=lando'; $lang['domain_controllers'] = 'Komodisigita listo de domajno-serviloj, ekz. srv1.domajno.lando,srv2.domajno.lando'; -$lang['ad_username'] = 'Privilegiita Aktiv-Dosieruja uzanto kun aliro al ĉiuj uzantaj datumoj. Libervole, sed necesa por iuj agadoj kiel sendi abonan retpoŝton.'; -$lang['ad_password'] = 'La pasvorto de tiu uzanto.'; +$lang['admin_username'] = 'Privilegiita Aktiv-Dosieruja uzanto kun aliro al ĉiuj uzantaj datumoj. Libervole, sed necesa por iuj agadoj kiel sendi abonan retpoŝton.'; +$lang['admin_password'] = 'La pasvorto de tiu uzanto.'; $lang['sso'] = 'Ĉu uzi Sola Aliro tra Kerberos aŭ NTLM?'; $lang['real_primarygroup'] = 'Ĉu trovi la veran ĉefan grupon anstataŭ supozi "Domajnuzantoj" (pli malrapida)?'; $lang['use_ssl'] = 'Ĉu uzi SSL-konekton? Se jes, ne aktivigu TLS sube.'; diff --git a/lib/plugins/authad/lang/fr/settings.php b/lib/plugins/authad/lang/fr/settings.php index efbca89f9..5480a3d44 100644 --- a/lib/plugins/authad/lang/fr/settings.php +++ b/lib/plugins/authad/lang/fr/settings.php @@ -7,8 +7,8 @@ $lang['account_suffix'] = 'Le suffixe de votre compte. Ex.: @mon.domaine.org'; $lang['base_dn'] = 'Votre nom de domaine de base. DC=mon,DC=domaine,DC=org'; $lang['domain_controllers'] = 'Une liste de contrôleurs de domaine séparés par des virgules. Ex.: srv1.domaine.org,srv2.domaine.org'; -$lang['ad_username'] = 'Un utilisateur Active Directory avec accès aux données de tous les autres utilisateurs. Facultatif, mais nécessaire pour certaines actions telles que l\'envoi de courriels d\'abonnement.'; -$lang['ad_password'] = 'Le mot de passe de l\'utilisateur ci-dessus.'; +$lang['admin_username'] = 'Un utilisateur Active Directory avec accès aux données de tous les autres utilisateurs. Facultatif, mais nécessaire pour certaines actions telles que l\'envoi de courriels d\'abonnement.'; +$lang['admin_password'] = 'Le mot de passe de l\'utilisateur ci-dessus.'; $lang['sso'] = 'Est-ce que la connexion unique (Single-Sign-On) par Kerberos ou NTLM doit être utilisée?'; $lang['real_primarygroup'] = 'Est-ce que le véritable groupe principal doit être résolu au lieu de présumer "Domain Users" (plus lent)?'; $lang['use_ssl'] = 'Utiliser une connexion SSL? Si utilisée, n\'activez pas TLS ci-dessous.'; diff --git a/lib/plugins/authad/lang/ko/settings.php b/lib/plugins/authad/lang/ko/settings.php index 6134bd657..f2bf52681 100644 --- a/lib/plugins/authad/lang/ko/settings.php +++ b/lib/plugins/authad/lang/ko/settings.php @@ -7,8 +7,8 @@ $lang['account_suffix'] = '계정 접미어. 예를 들어 @my.domain.org'; $lang['base_dn'] = '기본 DN. 예를 들어 DC=my,DC=domain,DC=org'; $lang['domain_controllers'] = '도메인 컨트롤러의 쉼표로 구분한 목록. 예를 들어 srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = '다른 모든 사용자의 데이터에 접근할 수 있는 권한이 있는 Active Directory 사용자. 선택적이지만 구독 메일을 보내는 등의 특정 작업에 필요합니다.'; -$lang['ad_password'] = '위 사용자의 비밀번호.'; +$lang['admin_username'] = '다른 모든 사용자의 데이터에 접근할 수 있는 권한이 있는 Active Directory 사용자. 선택적이지만 구독 메일을 보내는 등의 특정 작업에 필요합니다.'; +$lang['admin_password'] = '위 사용자의 비밀번호.'; $lang['sso'] = 'Kerberos나 NTLM을 통해 Single-Sign-On을 사용해야 합니까?'; $lang['real_primarygroup'] = '실제 기본 그룹은 "도메인 사용자"를 가정하는 대신 해결될 것입니다 (느림)'; $lang['use_ssl'] = 'SSL 연결을 사용합니까? 사용한다면 아래 TLS을 활성화하지 마세요.'; diff --git a/lib/plugins/authad/lang/nl/settings.php b/lib/plugins/authad/lang/nl/settings.php index e73cac75d..933566d18 100644 --- a/lib/plugins/authad/lang/nl/settings.php +++ b/lib/plugins/authad/lang/nl/settings.php @@ -6,8 +6,8 @@ $lang['account_suffix'] = 'Je account domeinnaam. Bijv @mijn.domein.org'; $lang['base_dn'] = 'Je basis DN. Bijv. DC=mijn,DC=domein,DC=org'; $lang['domain_controllers'] = 'Eeen commagesepareerde lijst van domeinservers. Bijv. srv1.domein.org,srv2.domein.org'; -$lang['ad_username'] = 'Een geprivilegeerde Active Directory gebruiker die bij alle gebruikersgegevens kan komen. Optioneel, maar kan nodig zijn voor bepaalde acties, zoals het versturen van abonnementsmailtjes.'; -$lang['ad_password'] = 'Het wachtwoord van bovernvermelde gebruiker.'; +$lang['admin_username'] = 'Een geprivilegeerde Active Directory gebruiker die bij alle gebruikersgegevens kan komen. Optioneel, maar kan nodig zijn voor bepaalde acties, zoals het versturen van abonnementsmailtjes.'; +$lang['admin_password'] = 'Het wachtwoord van bovernvermelde gebruiker.'; $lang['sso'] = 'Wordt voor Single-Sign-on Kerberos of NTLM gebruikt?'; $lang['real_primarygroup'] = 'Moet de echte primaire groep worden opgezocht in plaats van het aannemen van "Domeingebruikers" (langzamer)'; $lang['use_ssl'] = 'SSL verbinding gebruiken? Zo ja, gebruik dan TLS hieronder niet.'; diff --git a/lib/plugins/authad/lang/pt-br/settings.php b/lib/plugins/authad/lang/pt-br/settings.php index b8b1efd42..29f8db4ad 100644 --- a/lib/plugins/authad/lang/pt-br/settings.php +++ b/lib/plugins/authad/lang/pt-br/settings.php @@ -7,7 +7,7 @@ $lang['account_suffix'] = 'Sufixo de sua conta. Eg. @meu.domínio.org'; $lang['base_dn'] = 'Sua base DN. Eg. DC=meu,DC=domínio,DC=org'; $lang['domain_controllers'] = 'Uma lista de controles de domínios separada por vírgulas. Eg. srv1.domínio.org,srv2.domínio.org'; -$lang['ad_password'] = 'A senha do usuário acima.'; +$lang['admin_password'] = 'A senha do usuário acima.'; $lang['sso'] = 'Usar Single-Sign-On através do Kerberos ou NTLM?'; $lang['use_ssl'] = 'Usar conexão SSL? Se usar, não habilitar TLS abaixo.'; $lang['use_tls'] = 'Usar conexão TLS? se usar, não habilitar SSL acima.'; diff --git a/lib/plugins/authad/lang/zh-tw/settings.php b/lib/plugins/authad/lang/zh-tw/settings.php index e38a2c007..c46e5f96f 100644 --- a/lib/plugins/authad/lang/zh-tw/settings.php +++ b/lib/plugins/authad/lang/zh-tw/settings.php @@ -7,8 +7,8 @@ $lang['account_suffix'] = '您的帳號後綴。如: @my.domain.org'; $lang['base_dn'] = '您的基本識別名。如: DC=my,DC=domain,DC=org'; $lang['domain_controllers'] = '以逗號分隔的域名控制器列表。如: srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = 'Active Directory 的特權使用者,可以查看所有使用者的數據。(非必要,但對發送訂閱郵件等活動來說,這是必須的。)'; -$lang['ad_password'] = '上述使用者的密碼。'; +$lang['admin_username'] = 'Active Directory 的特權使用者,可以查看所有使用者的數據。(非必要,但對發送訂閱郵件等活動來說,這是必須的。)'; +$lang['admin_password'] = '上述使用者的密碼。'; $lang['sso'] = '是否使用 Kerberos 或 NTLM 的單一登入系統 (Single-Sign-On)?'; $lang['real_primarygroup'] = '是否視作真正的主要群組,而不是假設為網域使用者 (比較慢)'; $lang['use_ssl'] = '使用 SSL 連接嗎?如果要使用,請不要啟用下方的 TLS。'; diff --git a/lib/plugins/authad/lang/zh/settings.php b/lib/plugins/authad/lang/zh/settings.php index 9fd3c4e35..0ad8d4e4f 100644 --- a/lib/plugins/authad/lang/zh/settings.php +++ b/lib/plugins/authad/lang/zh/settings.php @@ -7,8 +7,8 @@ $lang['account_suffix'] = '您的账户后缀。例如 @my.domain.org'; $lang['base_dn'] = '您的基本分辨名。例如 DC=my,DC=domain,DC=org'; $lang['domain_controllers'] = '逗号分隔的域名控制器列表。例如 srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = '一个活动目录的特权用户,可以查看其他所有用户的数据。可选,但对某些活动例如发送订阅邮件是必须的。'; -$lang['ad_password'] = '上述用户的密码。'; +$lang['admin_username'] = '一个活动目录的特权用户,可以查看其他所有用户的数据。可选,但对某些活动例如发送订阅邮件是必须的。'; +$lang['admin_password'] = '上述用户的密码。'; $lang['sso'] = '是否使用经由 Kerberos 和 NTLM 的 Single-Sign-On?'; $lang['real_primarygroup'] = ' 是否解析真实的主要组,而不是假设为“域用户” (较慢)'; $lang['use_ssl'] = '使用 SSL 连接?如果是,不要激活下面的 TLS。'; -- cgit v1.2.3 From bba10e63fd89accbcf180b64adbd26e32ffb1810 Mon Sep 17 00:00:00 2001 From: lupo49 Date: Sun, 21 Apr 2013 21:24:28 +0200 Subject: Revert "German language update" This reverts commit ba09710ad34bb383ae3526e84490a3d545f78866. Conflicts: lib/plugins/authad/lang/de/settings.php --- lib/plugins/acl/lang/de/lang.php | 1 - lib/plugins/authad/lang/de/settings.php | 10 +- lib/plugins/authldap/lang/de/settings.php | 18 +++- lib/plugins/authmysql/lang/de/settings.php | 38 +++++++- lib/plugins/authpgsql/lang/de/settings.php | 34 ++++++- lib/plugins/config/lang/de/lang.php | 141 ++++++++++++++--------------- lib/plugins/plugin/lang/de/lang.php | 1 - lib/plugins/popularity/lang/de/lang.php | 1 - lib/plugins/revert/lang/de/lang.php | 1 - lib/plugins/usermanager/lang/de/lang.php | 1 - 10 files changed, 161 insertions(+), 85 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/de/lang.php b/lib/plugins/acl/lang/de/lang.php index e2ac98cd7..eb23636c4 100644 --- a/lib/plugins/acl/lang/de/lang.php +++ b/lib/plugins/acl/lang/de/lang.php @@ -21,7 +21,6 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell - * @author Mateng Schimmerlos ) */ $lang['admin_acl'] = 'Zugangsverwaltung'; $lang['acl_group'] = 'Gruppe'; diff --git a/lib/plugins/authad/lang/de/settings.php b/lib/plugins/authad/lang/de/settings.php index acfa7e574..650f9f362 100644 --- a/lib/plugins/authad/lang/de/settings.php +++ b/lib/plugins/authad/lang/de/settings.php @@ -5,11 +5,11 @@ * @author Frank Loizzi * @author Matthias Schulte */ -$lang['account_suffix'] = 'Ihr Account-Suffix. Z.B. @my.domain.org'; -$lang['base_dn'] = 'Ihr Base-DN. z.B. DC=my,DC=domain,DC=org'; -$lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z.B. srv1.domain.org,srv2.domain.org'; -$lang['admin_username'] = 'Ein privilegierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; -$lang['admin_password'] = 'Das Passwort des obigen Benutzers.'; +$lang['account_suffix'] = 'Ihr Account-Suffix. Z. B. @my.domain.org'; +$lang['base_dn'] = 'Ihr Base-DN. Z. B. DC=my,DC=domain,DC=org'; +$lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z. B. srv1.domain.org,srv2.domain.org'; +$lang['ad_username'] = 'Ein priviligierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; +$lang['ad_password'] = 'Das Passwort des obigen Benutzers.'; $lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; $lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; $lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterhalb nicht aktivieren.'; diff --git a/lib/plugins/authldap/lang/de/settings.php b/lib/plugins/authldap/lang/de/settings.php index a1a99b6d6..b237201d8 100644 --- a/lib/plugins/authldap/lang/de/settings.php +++ b/lib/plugins/authldap/lang/de/settings.php @@ -2,5 +2,21 @@ /** * German language file * - * @author Mateng Schimmerlos ) + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Matthias Schulte */ +$lang['server'] = 'Adresse zum LDAP-Server. Entweder als Hostname (localhost) oder als FQDN (ldap://server.tld:389).'; +$lang['port'] = 'Port des LDAP-Servers, falls kein Port angegeben wurde.'; +$lang['usertree'] = 'Zweig, in dem die die Benutzeraccounts gespeichert sind. Zum Beispiel: ou=People, dc=server, dc=tld.'; +$lang['grouptree'] = 'Zweig, in dem die Benutzergruppen gespeichert sind. Zum Beispiel: ou=Group, dc=server, dc=tld.'; +$lang['userfilter'] = 'LDAP-Filter, um die Benutzeraccounts zu suchen. Zum Beispiel: (&(uid=%{user})(objectClass=posixAccount)).'; +$lang['groupfilter'] = 'LDAP-Filter, um die Benutzergruppen zu suchen. Zum Beispiel: (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user}))).'; +$lang['version'] = 'Zu verwendende Protokollversion von LDAP.'; +$lang['starttls'] = 'Verbindung über TLS aufbauen?'; +$lang['referrals'] = 'Weiterverfolgen von LDAP-Referrals (Verweise)?'; +$lang['binddn'] = 'DN eines optionalen Benutzers, wenn der anonyme Zugriff nicht ausreichend ist. Zum Beispiel: cn=admin, dc=my, dc=home.'; +$lang['bindpw'] = 'Passwort des angegebenen Benutzers.'; +$lang['userscope'] = 'Die Suchweite nach Benutzeraccounts.'; +$lang['groupscope'] = 'Die Suchweite nach Benutzergruppen.'; +$lang['groupkey'] = 'Gruppieren der Benutzeraccounts anhand eines beliebigen Benutzerattributes z. B. Telefonnummer oder Abteilung, anstelle der Standard-Gruppen).'; +$lang['debug'] = 'Debug-Informationen beim Auftreten von Fehlern anzeigen?'; diff --git a/lib/plugins/authmysql/lang/de/settings.php b/lib/plugins/authmysql/lang/de/settings.php index a1a99b6d6..97ba06a9d 100644 --- a/lib/plugins/authmysql/lang/de/settings.php +++ b/lib/plugins/authmysql/lang/de/settings.php @@ -2,5 +2,41 @@ /** * German language file * - * @author Mateng Schimmerlos ) + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Matthias Schulte */ +$lang['server'] = 'MySQL-Server'; +$lang['user'] = 'Benutzername für den Zugriff auf den MySQL-Server.'; +$lang['password'] = 'Passwort des angegebenen Benutzers.'; +$lang['database'] = 'Zu verwendende Datenbank.'; +$lang['charset'] = 'Verwendetes Character-Set in der Datenbank.'; +$lang['debug'] = 'Debug-Informationen anzeigen?'; +$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; +$lang['TablesToLock'] = 'Eine Komma-separierte Liste von Tabellen, die vor Schreiboperationen gesperrt werden müssen.'; +$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; +$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; +$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; +$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; +$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; +$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; +$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; +$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; +$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; +$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; +$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; +$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; +$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; +$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; +$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; +$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; +$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; +$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; +$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; +$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; +$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; +$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; +$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; +$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; +$lang['debug_o_0'] = 'Keine.'; +$lang['debug_o_1'] = 'Nur Fehler.'; +$lang['debug_o_2'] = 'Alle SQL-Abfragen.'; diff --git a/lib/plugins/authpgsql/lang/de/settings.php b/lib/plugins/authpgsql/lang/de/settings.php index a1a99b6d6..4c80245d6 100644 --- a/lib/plugins/authpgsql/lang/de/settings.php +++ b/lib/plugins/authpgsql/lang/de/settings.php @@ -2,5 +2,37 @@ /** * German language file * - * @author Mateng Schimmerlos ) + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Matthias Schulte */ +$lang['server'] = 'PostgreSQL-Server'; +$lang['port'] = 'Port des PostgreSQL-Servers.'; +$lang['user'] = 'Benutzername für den Zugriff auf den PostgreSQL-Server.'; +$lang['password'] = 'Passwort des angegebenen Benutzers.'; +$lang['database'] = 'Zu verwendende Datenbank.'; +$lang['debug'] = 'Debug-Informationen anzeigen?'; +$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)'; +$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.'; +$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.'; +$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.'; +$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.'; +$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.'; +$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.'; +$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.'; +$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.'; +$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.'; +$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.'; +$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.'; +$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.'; +$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.'; +$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.'; +$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.'; +$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.'; +$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.'; +$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.'; +$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.'; +$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.'; +$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.'; +$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.'; +$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.'; +$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.'; diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php index d72056236..063ee40ad 100644 --- a/lib/plugins/config/lang/de/lang.php +++ b/lib/plugins/config/lang/de/lang.php @@ -17,62 +17,58 @@ * @author Paul Lachewsky * @author Pierre Corell * @author Matthias Schulte - * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Konfiguration'; -$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert. -
Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.'; +$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert.
Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.'; $lang['updated'] = 'Einstellungen erfolgreich gespeichert.'; $lang['nochoice'] = '(keine Auswahlmöglichkeiten vorhanden)'; -$lang['locked'] = 'Die Konfigurationsdatei kann nicht geändert werden, wenn dies unbeabsichtigt ist -
überprüfen Sie, dass die Dateiberechtigungen korrekt gesetzt sind.'; +$lang['locked'] = 'Die Konfigurationsdatei kann nicht geändert werden. Wenn dies unbeabsichtigt ist,
überprüfen Sie, ob die Dateiberechtigungen korrekt gesetzt sind.'; $lang['danger'] = 'Vorsicht: Die Änderung dieser Option könnte Ihr Wiki und das Konfigurationsmenü unzugänglich machen.'; $lang['warning'] = 'Hinweis: Die Änderung dieser Option könnte unbeabsichtigtes Verhalten hervorrufen.'; $lang['security'] = 'Sicherheitswarnung: Die Änderung dieser Option könnte ein Sicherheitsrisiko darstellen.'; $lang['_configuration_manager'] = 'Konfiguration'; $lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; $lang['_header_plugin'] = 'Plugin-Konfiguration'; -$lang['_header_template'] = 'Template-Konfiguration'; -$lang['_header_undefined'] = 'Unbekannte Einstellungen'; -$lang['_basic'] = 'Grund-Konfiguration'; -$lang['_display'] = 'Anzeige-Konfiguration'; -$lang['_authentication'] = 'Authentifizierungs-Konfiguration'; -$lang['_anti_spam'] = 'Anti-Spam-Konfiguration'; -$lang['_editing'] = 'Bearbeitungs-Konfiguration'; -$lang['_links'] = 'Link-Konfiguration'; -$lang['_media'] = 'Medien-Konfiguration'; -$lang['_notifications'] = 'Benachrichtigungs-Konfiguration'; -$lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; +$lang['_header_template'] = 'Vorlagen'; +$lang['_header_undefined'] = 'Unbekannte Werte'; +$lang['_basic'] = 'Grundkonfiguration'; +$lang['_display'] = 'Darstellung'; +$lang['_authentication'] = 'Authentifizierung'; +$lang['_anti_spam'] = 'Anti-Spam'; +$lang['_editing'] = 'Bearbeitung'; +$lang['_links'] = 'Links'; +$lang['_media'] = 'Medien'; +$lang['_notifications'] = 'Benachrichtigungen'; +$lang['_syndication'] = 'Syndication (RSS)'; $lang['_advanced'] = 'Erweiterte Konfiguration'; -$lang['_network'] = 'Netzwerk-Konfiguration'; -$lang['_plugin_sufix'] = 'Plugin-Konfiguration'; -$lang['_template_sufix'] = 'Template-Konfiguration'; +$lang['_network'] = 'Netzwerk'; +$lang['_plugin_sufix'] = ''; +$lang['_template_sufix'] = 'Vorlagen-Konfiguration'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; $lang['_msg_setting_no_default'] = 'Kein Standardwert.'; -$lang['title'] = 'Titel des Wikis'; -$lang['start'] = 'Startseitenname'; +$lang['fmode'] = 'Berechtigungen für neue Dateien'; +$lang['dmode'] = 'Berechtigungen für neue Verzeichnisse'; $lang['lang'] = 'Sprache'; +$lang['basedir'] = 'Installationsverzeichnis'; +$lang['baseurl'] = 'Installationspfad (URL)'; +$lang['savedir'] = 'Speicherverzeichnis'; +$lang['cookiedir'] = 'Cookiepfad. Frei lassen, um den gleichen Pfad wie "baseurl" zu benutzen.'; +$lang['start'] = 'Startseitenname'; +$lang['title'] = 'Titel des Wikis'; $lang['template'] = 'Designvorlage (Template)'; $lang['tagline'] = 'Tag-Linie (nur, wenn vom Template unterstützt)'; $lang['sidebar'] = 'Name der Sidebar-Seite (nur, wenn vom Template unterstützt)), ein leeres Feld deaktiviert die Sidebar'; $lang['license'] = 'Unter welcher Lizenz sollen Ihre Inhalte veröffentlicht werden?'; -$lang['savedir'] = 'Speicherverzeichnis'; -$lang['basedir'] = 'Installationsverzeichnis'; -$lang['baseurl'] = 'Installationspfad (URL)'; -$lang['cookiedir'] = 'Cookiepfad. Frei lassen, um den gleichen Pfad wie "baseurl" zu benutzen.'; -$lang['dmode'] = 'Rechte für neue Verzeichnisse'; -$lang['fmode'] = 'Rechte für neue Dateien'; -$lang['allowdebug'] = 'Debug-Ausgaben erlauben Abschalten wenn nicht benötigt!'; +$lang['fullpath'] = 'Den kompletten Dateipfad im Footer anzeigen'; $lang['recent'] = 'Anzahl der Einträge in der Änderungsliste'; -$lang['recent_days'] = 'Wieviele letzte Änderungen sollen einsehbar bleiben? (Tage)'; $lang['breadcrumbs'] = 'Anzahl der Einträge im "Krümelpfad"'; $lang['youarehere'] = 'Hierarchische Pfadnavigation verwenden'; -$lang['fullpath'] = 'Den kompletten Dateipfad im Footer anzeigen'; $lang['typography'] = 'Typographische Ersetzungen'; +$lang['htmlok'] = 'HTML erlauben'; +$lang['phpok'] = 'PHP erlauben'; $lang['dformat'] = 'Datumsformat (Siehe PHP strftime Funktion)'; $lang['signature'] = 'Signatur'; -$lang['showuseras'] = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird'; $lang['toptoclevel'] = 'Inhaltsverzeichnis bei dieser Überschriftengröße beginnen'; $lang['tocminheads'] = 'Mindestanzahl der Überschriften die entscheidet, ob ein Inhaltsverzeichnis erscheinen soll'; $lang['maxtoclevel'] = 'Maximale Überschriftsgröße für Inhaltsverzeichnis'; @@ -80,8 +76,16 @@ $lang['maxseclevel'] = 'Abschnitte bis zu dieser Stufe einzeln editier $lang['camelcase'] = 'CamelCase-Verlinkungen verwenden'; $lang['deaccent'] = 'Seitennamen bereinigen'; $lang['useheading'] = 'Erste Überschrift als Seitennamen verwenden'; -$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Übersicht. Wenn diese Option aktiviert wird, werden alle Namensräume, für die der Benutzer keine Lese-Rechte hat, nicht angezeigt. Dies kann unter Umständen dazu führen, das lesbare Unter-Namensräume nicht angezeigt werden und macht die Übersicht evtl. unbrauchbar in Kombination mit bestimmten ACL Einstellungen.'; -$lang['hidepages'] = 'Seiten verstecken (Regulärer Ausdruck)'; +$lang['refcheck'] = 'Auf Verwendung beim Löschen von Media-Dateien testen'; +$lang['refshow'] = 'Wiev iele Verwendungsorte der Media-Datei zeigen'; +$lang['allowdebug'] = 'Debug-Ausgaben erlauben Abschalten wenn nicht benötigt!'; +$lang['mediarevisions'] = 'Media-Revisionen (ältere Versionen) aktivieren?'; +$lang['usewordblock'] = 'Spam-Blocking benutzen'; +$lang['indexdelay'] = 'Zeit bevor Suchmaschinenindexierung erlaubt ist'; +$lang['relnofollow'] = 'rel="nofollow" verwenden'; +$lang['mailguard'] = 'E-Mail-Adressen schützen'; +$lang['iexssprotect'] = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen'; +$lang['showuseras'] = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird'; $lang['useacl'] = 'Zugangskontrolle verwenden'; $lang['autopasswd'] = 'Passwort automatisch generieren'; $lang['authtype'] = 'Authentifizierungsmechanismus'; @@ -90,69 +94,62 @@ $lang['defaultgroup'] = 'Standardgruppe'; $lang['superuser'] = 'Administrator - Eine Gruppe oder Nutzer mit vollem Zugriff auf alle Seiten und Administrationswerkzeuge.'; $lang['manager'] = 'Manager - Eine Gruppe oder Nutzer mit Zugriff auf einige Administrationswerkzeuge.'; $lang['profileconfirm'] = 'Profiländerung nur nach Passwortbestätigung'; -$lang['rememberme'] = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)'; $lang['disableactions'] = 'DokuWiki-Aktionen deaktivieren'; $lang['disableactions_check'] = 'Check'; $lang['disableactions_subscription'] = 'Seiten-Abonnements'; $lang['disableactions_wikicode'] = 'Quelltext betrachten/exportieren'; $lang['disableactions_other'] = 'Andere Aktionen (durch Komma getrennt)'; +$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Übersicht. Wenn diese Option aktiviert wird, werden alle Namensräume, für die der Benutzer keine Lese-Rechte hat, nicht angezeigt. Dies kann unter Umständen dazu führen, das lesbare Unter-Namensräume nicht angezeigt werden und macht die Übersicht evtl. unbrauchbar in Kombination mit bestimmten ACL Einstellungen.'; $lang['auth_security_timeout'] = 'Authentifikations-Timeout (Sekunden)'; $lang['securecookie'] = 'Sollen Cookies, die via HTTPS gesetzt wurden nur per HTTPS versendet werden? Deaktivieren Sie diese Option, wenn nur der Login Ihres Wikis mit SSL gesichert ist, aber das Betrachten des Wikis ungesichert geschieht.'; $lang['remote'] = 'Aktiviert den externen API-Zugang. Diese Option erlaubt es externen Anwendungen von außen auf die XML-RPC-Schnittstelle oder anderweitigen Schnittstellen zuzugreifen.'; $lang['remoteuser'] = 'Zugriff auf die externen Schnittstellen durch kommaseparierte Angabe von Benutzern oder Gruppen einschränken. Ein leeres Feld erlaubt Zugriff für jeden.'; -$lang['usewordblock'] = 'Spam-Blocking benutzen'; -$lang['relnofollow'] = 'rel="nofollow" verwenden'; -$lang['indexdelay'] = 'Zeit bevor Suchmaschinenindexierung erlaubt ist'; -$lang['mailguard'] = 'E-Mail-Adressen schützen'; -$lang['iexssprotect'] = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen'; -$lang['usedraft'] = 'Während des Bearbeitens automatisch Zwischenentwürfe speichern'; -$lang['htmlok'] = 'HTML erlauben'; -$lang['phpok'] = 'PHP erlauben'; -$lang['locktime'] = 'Maximales Alter für Seitensperren (Sekunden)'; -$lang['cachetime'] = 'Maximale Cachespeicherung (Sekunden)'; -$lang['target____wiki'] = 'Zielfenster für interne Links (target Attribut)'; -$lang['target____interwiki'] = 'Zielfenster für InterWiki-Links (target Attribut)'; -$lang['target____extern'] = 'Zielfenster für Externe Links (target Attribut)'; -$lang['target____media'] = 'Zielfenster für (Bild-)Dateien (target Attribut)'; -$lang['target____windows'] = 'Zielfenster für Windows Freigaben (target Attribut)'; -$lang['mediarevisions'] = 'Media-Revisionen (ältere Versionen) aktivieren?'; -$lang['refcheck'] = 'Auf Verwendung beim Löschen von Media-Dateien testen'; -$lang['refshow'] = 'Wiev iele Verwendungsorte der Media-Datei zeigen'; -$lang['gdlib'] = 'GD Lib Version'; -$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug'; -$lang['jpg_quality'] = 'JPEG Kompressionsqualität (0-100)'; -$lang['fetchsize'] = 'Maximale Größe (in Bytes), die fetch.php von extern herunterladen darf'; -$lang['subscribers'] = 'E-Mail-Abos zulassen'; -$lang['subscribe_time'] = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.'; -$lang['notify'] = 'Änderungsmitteilungen an diese E-Mail-Adresse versenden'; -$lang['registernotify'] = 'Information über neu registrierte Nutzer an diese E-Mail-Adresse senden'; -$lang['mailfrom'] = 'Absender-E-Mail-Adresse für automatische Mails'; -$lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen'; -$lang['htmlmail'] = 'Versendet optisch angenehmere, aber größere E-Mails im HTML-Format (multipart). Deaktivieren, um Text-Mails zu versenden.'; -$lang['sitemap'] = 'Google Sitemap erzeugen (Tage)'; -$lang['rss_type'] = 'XML-Feed-Format'; -$lang['rss_linkto'] = 'XML-Feed verlinken auf'; -$lang['rss_content'] = 'Welche Inhalte sollen im XML-Feed dargestellt werden?'; -$lang['rss_update'] = 'XML-Feed Aktualisierungsintervall (Sekunden)'; -$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen'; -$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?'; $lang['updatecheck'] = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.'; $lang['userewrite'] = 'URL rewriting'; $lang['useslash'] = 'Schrägstrich (/) als Namensraumtrenner in URLs verwenden'; +$lang['usedraft'] = 'Während des Bearbeitens automatisch Zwischenentwürfe speichern'; $lang['sepchar'] = 'Worttrenner für Seitennamen in URLs'; $lang['canonical'] = 'Immer Links mit vollständigen URLs erzeugen'; $lang['fnencode'] = 'Methode um nicht-ASCII Dateinamen zu kodieren.'; $lang['autoplural'] = 'Bei Links automatisch nach vorhandenen Pluralformen suchen'; $lang['compression'] = 'Komprimierungsmethode für alte Seitenrevisionen'; +$lang['cachetime'] = 'Maximale Cachespeicherung (Sekunden)'; +$lang['locktime'] = 'Maximales Alter für Seitensperren (Sekunden)'; +$lang['fetchsize'] = 'Maximale Größe (in Bytes), die fetch.php von extern herunterladen darf'; +$lang['notify'] = 'Änderungsmitteilungen an diese E-Mail-Adresse versenden'; +$lang['registernotify'] = 'Information über neu registrierte Nutzer an diese E-Mail-Adresse senden'; +$lang['mailfrom'] = 'Absender-E-Mail-Adresse für automatische Mails'; +$lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen'; +$lang['htmlmail'] = 'Versendet optisch angenehmere, aber größere E-Mails im HTML-Format (multipart). Deaktivieren, um Text-Mails zu versenden.'; $lang['gzip_output'] = 'Seiten mit gzip komprimiert ausliefern'; +$lang['gdlib'] = 'GD Lib Version'; +$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug'; +$lang['jpg_quality'] = 'JPEG Kompressionsqualität (0-100)'; +$lang['subscribers'] = 'E-Mail-Abos zulassen'; +$lang['subscribe_time'] = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.'; $lang['compress'] = 'JavaScript und Stylesheets komprimieren'; $lang['cssdatauri'] = 'Größe in Bytes, bis zu der Bilder in css-Dateien referenziert werden können, um HTTP-Anfragen zu minimieren. Diese Technik funktioniert nicht im IE 7 und älter! Empfohlene Einstellung: 400 to 600 Bytes. Setzen Sie die Einstellung auf 0 um die Funktion zu deaktivieren.'; +$lang['hidepages'] = 'Seiten verstecken (Regulärer Ausdruck)'; $lang['send404'] = 'Bei nicht vorhandenen Seiten mit 404 Fehlercode antworten'; +$lang['sitemap'] = 'Google Sitemap erzeugen (Tage)'; $lang['broken_iua'] = 'Falls die Funktion ignore_user_abort auf Ihrem System nicht funktioniert, könnte der Such-Index nicht funktionieren. IIS+PHP/CGI ist bekannt dafür. Siehe auch Bug 852.'; $lang['xsendfile'] = 'Den X-Sendfile-Header nutzen, um Dateien direkt vom Webserver ausliefern zu lassen? Ihr Webserver muss dies unterstützen!'; $lang['renderer_xhtml'] = 'Standard-Renderer für die normale (XHTML) Wiki-Ausgabe.'; $lang['renderer__core'] = '%s (DokuWiki Kern)'; $lang['renderer__plugin'] = '%s (Plugin)'; +$lang['rememberme'] = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)'; +$lang['rss_type'] = 'XML-Feed-Format'; +$lang['rss_linkto'] = 'XML-Feed verlinken auf'; +$lang['rss_content'] = 'Welche Inhalte sollen im XML-Feed dargestellt werden?'; +$lang['rss_update'] = 'XML-Feed Aktualisierungsintervall (Sekunden)'; +$lang['recent_days'] = 'Wieviele letzte Änderungen sollen einsehbar bleiben? (Tage)'; +$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen'; +$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?'; +$lang['target____wiki'] = 'Zielfenster für interne Links (target Attribut)'; +$lang['target____interwiki'] = 'Zielfenster für InterWiki-Links (target Attribut)'; +$lang['target____extern'] = 'Zielfenster für Externe Links (target Attribut)'; +$lang['target____media'] = 'Zielfenster für (Bild-)Dateien (target Attribut)'; +$lang['target____windows'] = 'Zielfenster für Windows Freigaben (target Attribut)'; $lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn du einen langsamen, unbrauchbaren DNS-Server verwendest oder die Funktion nicht benötigst, dann sollte diese Option deaktivert sein.'; $lang['proxy____host'] = 'Proxy-Server'; $lang['proxy____port'] = 'Proxy-Port'; @@ -199,9 +196,9 @@ $lang['xsendfile_o_0'] = 'nicht benutzen'; $lang['xsendfile_o_1'] = 'Proprietärer lighttpd-Header (vor Release 1.5)'; $lang['xsendfile_o_2'] = 'Standard X-Sendfile-Header'; $lang['xsendfile_o_3'] = 'Proprietärer Nginx X-Accel-Redirect-Header'; -$lang['showuseras_o_loginname'] = 'Loginname'; +$lang['showuseras_o_loginname'] = 'Login-Name'; $lang['showuseras_o_username'] = 'Vollständiger Name des Benutzers'; -$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (je nach Mailguard-Einstellung verschleiert)'; +$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (Beachte "mailguard"-Einstellung)'; $lang['showuseras_o_email_link'] = 'E-Mail-Adresse des Benutzers als mailto:-Link'; $lang['useheading_o_0'] = 'Nie'; $lang['useheading_o_navigation'] = 'Nur Navigation'; diff --git a/lib/plugins/plugin/lang/de/lang.php b/lib/plugins/plugin/lang/de/lang.php index 0c560537f..9f26a2933 100644 --- a/lib/plugins/plugin/lang/de/lang.php +++ b/lib/plugins/plugin/lang/de/lang.php @@ -18,7 +18,6 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell - * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Plugins verwalten'; $lang['download'] = 'Neues Plugin herunterladen und installieren'; diff --git a/lib/plugins/popularity/lang/de/lang.php b/lib/plugins/popularity/lang/de/lang.php index 4c1ba1391..42bdc14d5 100644 --- a/lib/plugins/popularity/lang/de/lang.php +++ b/lib/plugins/popularity/lang/de/lang.php @@ -15,7 +15,6 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell - * @author Mateng Schimmerlos ) */ $lang['name'] = 'Popularitäts-Feedback (Eventuell längere Ladezeit)'; $lang['submit'] = 'Daten senden'; diff --git a/lib/plugins/revert/lang/de/lang.php b/lib/plugins/revert/lang/de/lang.php index 39acd3c37..b430ce876 100644 --- a/lib/plugins/revert/lang/de/lang.php +++ b/lib/plugins/revert/lang/de/lang.php @@ -16,7 +16,6 @@ * @author Christian Wichmann * @author Paul Lachewsky * @author Pierre Corell - * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Seiten wieder herstellen'; $lang['filter'] = 'Nach betroffenen Seiten suchen'; diff --git a/lib/plugins/usermanager/lang/de/lang.php b/lib/plugins/usermanager/lang/de/lang.php index cfe528823..0dd90cc68 100644 --- a/lib/plugins/usermanager/lang/de/lang.php +++ b/lib/plugins/usermanager/lang/de/lang.php @@ -17,7 +17,6 @@ * @author Paul Lachewsky * @author Pierre Corell * @author Matthias Schulte - * @author Mateng Schimmerlos ) */ $lang['menu'] = 'Benutzerverwaltung'; $lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)'; -- cgit v1.2.3 From 1b228d28eda480cd189c68eadd1172c9409c6ef7 Mon Sep 17 00:00:00 2001 From: Klap-in Date: Sun, 21 Apr 2013 21:24:33 +0200 Subject: Rename ad_username to admin_username canDo getUsers to false when unavailable --- lib/plugins/authad/auth.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index f7f350c3f..5985cd18f 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -469,10 +469,10 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { $this->cando['modPass'] = false; } - if(isset($opts['ad_username']) && isset($opts['ad_password'])) { + if(isset($opts['admin_username']) && isset($opts['admin_password'])) { $this->cando['getUsers'] = true; } else { - $this->cando['getUsers'] = true; + $this->cando['getUsers'] = false; } return $opts; -- cgit v1.2.3 From 4c1219f3b8d93b4dd5d55b4246cd44bb5828fbc9 Mon Sep 17 00:00:00 2001 From: Mateng Schimmerlos Date: Sun, 21 Apr 2013 21:31:49 +0200 Subject: de/de-informal: Re-apply the updates of ba09710ad34bb383ae3526e84490a3d545f78866 --- lib/plugins/config/lang/de-informal/lang.php | 3 ++- lib/plugins/config/lang/de/lang.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php index 72823c0de..dcf970726 100644 --- a/lib/plugins/config/lang/de-informal/lang.php +++ b/lib/plugins/config/lang/de-informal/lang.php @@ -9,6 +9,7 @@ * @author Christian Wichmann * @author Pierre Corell * @author Frank Loizzi + * @author Mateng Schimmerlos */ $lang['menu'] = 'Konfiguration'; $lang['error'] = 'Konfiguration wurde nicht aktualisiert auf Grund eines ungültigen Wertes. Bitte überprüfe deine Änderungen und versuche es erneut.
Die/der ungültige(n) Wert(e) werden durch eine rote Umrandung hervorgehoben.'; @@ -190,7 +191,7 @@ $lang['xsendfile_o_2'] = 'Standard X-Sendfile-Header'; $lang['xsendfile_o_3'] = 'Proprietärer Nginx X-Accel-Redirect-Header'; $lang['showuseras_o_loginname'] = 'Login-Name'; $lang['showuseras_o_username'] = 'Voller Name des Nutzers'; -$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (Beachte "mailguard"-Einstellung)'; +$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (je nach Mailguard-Einstellung verschleiert)'; $lang['showuseras_o_email_link'] = 'E-Mail-Adresse des Benutzers als mailto:-Link'; $lang['useheading_o_0'] = 'Niemals'; $lang['useheading_o_navigation'] = 'Nur Navigation'; diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php index 063ee40ad..b50a99cda 100644 --- a/lib/plugins/config/lang/de/lang.php +++ b/lib/plugins/config/lang/de/lang.php @@ -17,6 +17,7 @@ * @author Paul Lachewsky * @author Pierre Corell * @author Matthias Schulte + * @author Mateng Schimmerlos */ $lang['menu'] = 'Konfiguration'; $lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert.
Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.'; @@ -198,7 +199,7 @@ $lang['xsendfile_o_2'] = 'Standard X-Sendfile-Header'; $lang['xsendfile_o_3'] = 'Proprietärer Nginx X-Accel-Redirect-Header'; $lang['showuseras_o_loginname'] = 'Login-Name'; $lang['showuseras_o_username'] = 'Vollständiger Name des Benutzers'; -$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (Beachte "mailguard"-Einstellung)'; +$lang['showuseras_o_email'] = 'E-Mail-Adresse des Benutzers (je nach Mailguard-Einstellung verschleiert)'; $lang['showuseras_o_email_link'] = 'E-Mail-Adresse des Benutzers als mailto:-Link'; $lang['useheading_o_0'] = 'Nie'; $lang['useheading_o_navigation'] = 'Nur Navigation'; -- cgit v1.2.3 From bb7b8a518eac7d3c3dc2b465600047bd10b3f82a Mon Sep 17 00:00:00 2001 From: lupo49 Date: Sun, 21 Apr 2013 21:39:06 +0200 Subject: de/de-informal: Re-add TOC suffixes (Will be removed after the release again) --- lib/plugins/config/lang/de-informal/lang.php | 26 +++++++++++++------------- lib/plugins/config/lang/de/lang.php | 24 ++++++++++++------------ 2 files changed, 25 insertions(+), 25 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php index dcf970726..5cc7b0add 100644 --- a/lib/plugins/config/lang/de-informal/lang.php +++ b/lib/plugins/config/lang/de-informal/lang.php @@ -22,21 +22,21 @@ $lang['security'] = 'Sicherheitswarnung: Eine Änderungen dieser Op $lang['_configuration_manager'] = 'Konfiguration'; $lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; $lang['_header_plugin'] = 'Plugin-Konfiguration'; -$lang['_header_template'] = 'Vorlagen'; +$lang['_header_template'] = 'Vorlagen-Konfiguration'; $lang['_header_undefined'] = 'Unbekannte Werte'; -$lang['_basic'] = 'Grundkonfiguration'; -$lang['_display'] = 'Darstellung'; -$lang['_authentication'] = 'Authentifizierung'; -$lang['_anti_spam'] = 'Anti-Spam'; -$lang['_editing'] = 'Bearbeitung'; -$lang['_links'] = 'Links'; -$lang['_media'] = 'Medien'; -$lang['_notifications'] = 'Benachrichtigungen'; -$lang['_syndication'] = 'Syndication (RSS)'; +$lang['_basic'] = 'Grund-Konfiguration'; +$lang['_display'] = 'Darstellungs-Konfiguration'; +$lang['_authentication'] = 'Authentifizierung-Konfiguration'; +$lang['_anti_spam'] = 'Anti-Spam-Konfiguration'; +$lang['_editing'] = 'Bearbeitungs-Konfiguration'; +$lang['_links'] = 'Links-Konfiguration'; +$lang['_media'] = 'Medien-Konfiguration'; +$lang['_notifications'] = 'Benachrichtigungs-Konfiguration'; +$lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; $lang['_advanced'] = 'Erweiterte Konfiguration'; -$lang['_network'] = 'Netzwerk'; -$lang['_plugin_sufix'] = ''; -$lang['_template_sufix'] = 'Vorlageneinstellungen'; +$lang['_network'] = 'Netzwerk-Konfiguration'; +$lang['_plugin_sufix'] = 'Plugin-Konfiguration'; +$lang['_template_sufix'] = 'Vorlagen-Konfiguration'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; $lang['_msg_setting_no_default'] = 'Kein Standardwert.'; diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php index b50a99cda..c550caa39 100644 --- a/lib/plugins/config/lang/de/lang.php +++ b/lib/plugins/config/lang/de/lang.php @@ -30,20 +30,20 @@ $lang['security'] = 'Sicherheitswarnung: Die Änderung dieser Optio $lang['_configuration_manager'] = 'Konfiguration'; $lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; $lang['_header_plugin'] = 'Plugin-Konfiguration'; -$lang['_header_template'] = 'Vorlagen'; +$lang['_header_template'] = 'Vorlagen-Konfiguration'; $lang['_header_undefined'] = 'Unbekannte Werte'; -$lang['_basic'] = 'Grundkonfiguration'; -$lang['_display'] = 'Darstellung'; -$lang['_authentication'] = 'Authentifizierung'; -$lang['_anti_spam'] = 'Anti-Spam'; -$lang['_editing'] = 'Bearbeitung'; -$lang['_links'] = 'Links'; -$lang['_media'] = 'Medien'; -$lang['_notifications'] = 'Benachrichtigungen'; -$lang['_syndication'] = 'Syndication (RSS)'; +$lang['_basic'] = 'Grund-Konfiguration'; +$lang['_display'] = 'Darstellungs-Konfiguration'; +$lang['_authentication'] = 'Authentifizierungs-Konfiguration'; +$lang['_anti_spam'] = 'Anti-Spam-Konfiguration'; +$lang['_editing'] = 'Bearbeitungs-Konfiguration'; +$lang['_links'] = 'Links-Konfiguration'; +$lang['_media'] = 'Medien-Konfiguration'; +$lang['_notifications'] = 'Benachrichtigungs-Konfiguration'; +$lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; $lang['_advanced'] = 'Erweiterte Konfiguration'; -$lang['_network'] = 'Netzwerk'; -$lang['_plugin_sufix'] = ''; +$lang['_network'] = 'Netzwerk-Konfiguration'; +$lang['_plugin_sufix'] = 'Plugin-Konfiguration'; $lang['_template_sufix'] = 'Vorlagen-Konfiguration'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; -- cgit v1.2.3 From 2de592cb4bbca69698b25fb0b11f0f73df46e395 Mon Sep 17 00:00:00 2001 From: lupo49 Date: Sun, 21 Apr 2013 21:42:58 +0200 Subject: de/de-informal: Change "Vorlage" to "Template" --- lib/plugins/config/lang/de-informal/lang.php | 4 ++-- lib/plugins/config/lang/de/lang.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php index 5cc7b0add..ac61e4c85 100644 --- a/lib/plugins/config/lang/de-informal/lang.php +++ b/lib/plugins/config/lang/de-informal/lang.php @@ -22,7 +22,7 @@ $lang['security'] = 'Sicherheitswarnung: Eine Änderungen dieser Op $lang['_configuration_manager'] = 'Konfiguration'; $lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; $lang['_header_plugin'] = 'Plugin-Konfiguration'; -$lang['_header_template'] = 'Vorlagen-Konfiguration'; +$lang['_header_template'] = 'Template-Konfiguration'; $lang['_header_undefined'] = 'Unbekannte Werte'; $lang['_basic'] = 'Grund-Konfiguration'; $lang['_display'] = 'Darstellungs-Konfiguration'; @@ -36,7 +36,7 @@ $lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; $lang['_advanced'] = 'Erweiterte Konfiguration'; $lang['_network'] = 'Netzwerk-Konfiguration'; $lang['_plugin_sufix'] = 'Plugin-Konfiguration'; -$lang['_template_sufix'] = 'Vorlagen-Konfiguration'; +$lang['_template_sufix'] = 'Template-Konfiguration'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; $lang['_msg_setting_no_default'] = 'Kein Standardwert.'; diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php index c550caa39..dd29f8038 100644 --- a/lib/plugins/config/lang/de/lang.php +++ b/lib/plugins/config/lang/de/lang.php @@ -30,7 +30,7 @@ $lang['security'] = 'Sicherheitswarnung: Die Änderung dieser Optio $lang['_configuration_manager'] = 'Konfiguration'; $lang['_header_dokuwiki'] = 'DokuWiki-Konfiguration'; $lang['_header_plugin'] = 'Plugin-Konfiguration'; -$lang['_header_template'] = 'Vorlagen-Konfiguration'; +$lang['_header_template'] = 'Template-Konfiguration'; $lang['_header_undefined'] = 'Unbekannte Werte'; $lang['_basic'] = 'Grund-Konfiguration'; $lang['_display'] = 'Darstellungs-Konfiguration'; @@ -44,7 +44,7 @@ $lang['_syndication'] = 'Syndication-Konfiguration (RSS)'; $lang['_advanced'] = 'Erweiterte Konfiguration'; $lang['_network'] = 'Netzwerk-Konfiguration'; $lang['_plugin_sufix'] = 'Plugin-Konfiguration'; -$lang['_template_sufix'] = 'Vorlagen-Konfiguration'; +$lang['_template_sufix'] = 'Template-Konfiguration'; $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.'; $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.'; $lang['_msg_setting_no_default'] = 'Kein Standardwert.'; -- cgit v1.2.3 From eb12065057595644fb1dcd333930e0653c024049 Mon Sep 17 00:00:00 2001 From: Klap-in Date: Mon, 22 Apr 2013 20:46:05 +0200 Subject: fix ids in de lang of authAD --- lib/plugins/authad/lang/de/settings.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/de/settings.php b/lib/plugins/authad/lang/de/settings.php index 650f9f362..f4e86dedd 100644 --- a/lib/plugins/authad/lang/de/settings.php +++ b/lib/plugins/authad/lang/de/settings.php @@ -8,8 +8,8 @@ $lang['account_suffix'] = 'Ihr Account-Suffix. Z. B. @my.domain.org'; $lang['base_dn'] = 'Ihr Base-DN. Z. B. DC=my,DC=domain,DC=org'; $lang['domain_controllers'] = 'Eine Komma-separierte Liste von Domänen-Controllern. Z. B. srv1.domain.org,srv2.domain.org'; -$lang['ad_username'] = 'Ein priviligierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; -$lang['ad_password'] = 'Das Passwort des obigen Benutzers.'; +$lang['admin_username'] = 'Ein priviligierter Active Directory-Benutzer mit Zugriff zu allen anderen Benutzerdaten. Optional, aber wird benötigt für Aktionen wie z. B. dass Senden von Benachrichtigungs-Mails.'; +$lang['admin_password'] = 'Das Passwort des obigen Benutzers.'; $lang['sso'] = 'Soll Single-Sign-On via Kerberos oder NTLM benutzt werden?'; $lang['real_primarygroup'] = 'Soll die echte primäre Gruppe aufgelöst werden anstelle der Annahme "Domain Users" (langsamer)'; $lang['use_ssl'] = 'SSL-Verbindung benutzen? Falls ja, TLS unterhalb nicht aktivieren.'; -- cgit v1.2.3 From 87945c0e9622dca02b441749b7ed54cc67801475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=AA=85=EC=A7=84?= Date: Mon, 22 Apr 2013 21:50:17 +0200 Subject: Japanese language update --- lib/plugins/authad/lang/ja/settings.php | 5 +++++ lib/plugins/authldap/lang/ja/settings.php | 5 +++++ lib/plugins/authmysql/lang/ja/settings.php | 5 +++++ lib/plugins/authpgsql/lang/ja/settings.php | 5 +++++ 4 files changed, 20 insertions(+) create mode 100644 lib/plugins/authad/lang/ja/settings.php create mode 100644 lib/plugins/authldap/lang/ja/settings.php create mode 100644 lib/plugins/authmysql/lang/ja/settings.php create mode 100644 lib/plugins/authpgsql/lang/ja/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/ja/settings.php b/lib/plugins/authad/lang/ja/settings.php new file mode 100644 index 000000000..576f0eeb5 --- /dev/null +++ b/lib/plugins/authad/lang/ja/settings.php @@ -0,0 +1,5 @@ + Date: Mon, 22 Apr 2013 22:03:13 +0200 Subject: fix expiry check for adLDAP version FS#2759 --- lib/plugins/authad/auth.php | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index 5985cd18f..95a25c5af 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -218,22 +218,24 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { // check expiry time if($info['expires'] && $this->conf['expirywarn']){ - $timeleft = $adldap->user()->passwordExpiry($user); // returns unixtime - $timeleft = round($timeleft/(24*60*60)); - $info['expiresin'] = $timeleft; - - // if this is the current user, warn him (once per request only) - if(($_SERVER['REMOTE_USER'] == $user) && - ($timeleft <= $this->conf['expirywarn']) && - !$this->msgshown - ) { - $msg = sprintf($lang['authpwdexpire'], $timeleft); - if($this->canDo('modPass')) { - $url = wl($ID, array('do'=> 'profile')); - $msg .= ' '.$lang['btn_profile'].''; + $expiry = $adldap->user()->passwordExpiry($user); + if(is_array($expiry)){ + $info['expiresat'] = $expiry['expiryts']; + $info['expiresin'] = round(($info['expiresat'] - time())/(24*60*60)); + + // if this is the current user, warn him (once per request only) + if(($_SERVER['REMOTE_USER'] == $user) && + ($info['expiresin'] <= $this->conf['expirywarn']) && + !$this->msgshown + ) { + $msg = sprintf($lang['authpwdexpire'], $info['expiresin']); + if($this->canDo('modPass')) { + $url = wl($ID, array('do'=> 'profile')); + $msg .= ' '.$lang['btn_profile'].''; + } + msg($msg); + $this->msgshown = true; } - msg($msg); - $this->msgshown = true; } } -- cgit v1.2.3 From 14642325892b50c3a95bead35efca7c5a6f16dc7 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 25 Apr 2013 15:57:55 +0200 Subject: authad: don't request empty fields --- lib/plugins/authad/auth.php | 1 + 1 file changed, 1 insertion(+) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index 95a25c5af..d6455c751 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -172,6 +172,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { // add additional fields to read $fields = array_merge($fields, $this->conf['additional']); $fields = array_unique($fields); + $fields = array_filter($fields); //get info for given user $result = $adldap->user()->info($this->_userName($user), $fields); -- cgit v1.2.3 From 8257d713a47c1819c2c33ddd2b868eea62d9f6fc Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 25 Apr 2013 16:05:53 +0200 Subject: authad: added compatibility for old option names adLDAP renamed the ad_username and ad_password to admin_username admin_password recently. this makes our backend recognize the old settings --- lib/plugins/authad/auth.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index d6455c751..5d5f532b6 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -465,6 +465,10 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { $opts['domain_controllers'] = array_map('trim', $opts['domain_controllers']); $opts['domain_controllers'] = array_filter($opts['domain_controllers']); + // compatibility with old option name + if(empty($opts['admin_username']) && !empty($opts['ad_username'])) $opts['admin_username'] = $opts['ad_username']; + if(empty($opts['admin_password']) && !empty($opts['ad_password'])) $opts['admin_password'] = $opts['ad_password']; + // we can change the password if SSL is set if($opts['use_ssl'] || $opts['use_tls']) { $this->cando['modPass'] = true; @@ -472,7 +476,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { $this->cando['modPass'] = false; } - if(isset($opts['admin_username']) && isset($opts['admin_password'])) { + if(!empty($opts['admin_username']) && !empty($opts['admin_password'])) { $this->cando['getUsers'] = true; } else { $this->cando['getUsers'] = false; -- cgit v1.2.3 From a154806fb54c04841a42641bf5d66716d89c1554 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 25 Apr 2013 16:43:54 +0200 Subject: authad: capabilities depend on userdomain specific config --- lib/plugins/authad/auth.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index 5d5f532b6..b6b5dd268 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -110,6 +110,19 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { $this->cando['modMail'] = true; } + /** + * Load domain config on capability check + * + * @param string $cap + * @return bool + */ + public function canDo($cap) { + //capabilities depend on config, which may change depending on domain + $domain = $this->_userDomain($_SERVER['REMOTE_USER']); + $this->_loadServerConfig($domain); + return parent::canDo($cap); + } + /** * Check user+password [required auth function] * -- cgit v1.2.3 From 28cac1091e0363924084330e38c0a35e1cdc06b6 Mon Sep 17 00:00:00 2001 From: Satoshi Sahara Date: Fri, 26 Apr 2013 14:31:42 +0200 Subject: Japanese language update --- lib/plugins/usermanager/lang/ja/lang.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/usermanager/lang/ja/lang.php b/lib/plugins/usermanager/lang/ja/lang.php index b5fd556dc..f9ad0814c 100644 --- a/lib/plugins/usermanager/lang/ja/lang.php +++ b/lib/plugins/usermanager/lang/ja/lang.php @@ -7,6 +7,7 @@ * @author Daniel Dupriest * @author Kazutaka Miyasaka * @author Taisuke Shimamoto + * @author Satoshi Sahara */ $lang['menu'] = 'ユーザー管理'; $lang['noauth'] = '(ユーザー認証が無効です)'; @@ -43,7 +44,7 @@ $lang['last'] = '最後'; $lang['edit_usermissing'] = '選択したユーザーは見つかりません。削除もしくは変更された可能性があります。'; $lang['user_notify'] = '通知するユーザー'; $lang['note_notify'] = 'ユーザーが新しいパスワードを設定した場合のみ、通知メールが送信されます。'; -$lang['note_group'] = 'グループを指定しない場合は、既定のグループ(%s)に登録されいます。'; +$lang['note_group'] = 'グループを指定しない場合は、既定のグループ(%s)に登録されます。'; $lang['note_pass'] = 'パスワードを空欄とした場合は、パスワードを自動的に生成します。この場合、ユーザーへの通知が有効となります。'; $lang['add_ok'] = 'ユーザーを登録しました'; $lang['add_fail'] = 'ユーザーの登録に失敗しました'; -- cgit v1.2.3 From 9199f1a464f80d9c6b8a996a508ba051e3223eac Mon Sep 17 00:00:00 2001 From: "Ivan I. Udovichenko" Date: Fri, 26 Apr 2013 14:32:47 +0200 Subject: Russian language update --- lib/plugins/acl/lang/ru/lang.php | 1 + lib/plugins/authad/lang/ru/settings.php | 6 +++++ lib/plugins/authldap/lang/ru/settings.php | 6 +++++ lib/plugins/authmysql/lang/ru/settings.php | 41 ++++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/ru/settings.php | 6 +++++ lib/plugins/config/lang/ru/lang.php | 1 + lib/plugins/plugin/lang/ru/lang.php | 1 + lib/plugins/popularity/lang/ru/lang.php | 1 + lib/plugins/revert/lang/ru/lang.php | 1 + lib/plugins/usermanager/lang/ru/lang.php | 1 + 10 files changed, 65 insertions(+) create mode 100644 lib/plugins/authad/lang/ru/settings.php create mode 100644 lib/plugins/authldap/lang/ru/settings.php create mode 100644 lib/plugins/authmysql/lang/ru/settings.php create mode 100644 lib/plugins/authpgsql/lang/ru/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/ru/lang.php b/lib/plugins/acl/lang/ru/lang.php index 15ba78ef6..2501c00e2 100644 --- a/lib/plugins/acl/lang/ru/lang.php +++ b/lib/plugins/acl/lang/ru/lang.php @@ -16,6 +16,7 @@ * @author Ladyko Andrey * @author Eugene * @author Johnny Utah + * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) */ $lang['admin_acl'] = 'Управление списками контроля доступа'; $lang['acl_group'] = 'Группа'; diff --git a/lib/plugins/authad/lang/ru/settings.php b/lib/plugins/authad/lang/ru/settings.php new file mode 100644 index 000000000..4c394080e --- /dev/null +++ b/lib/plugins/authad/lang/ru/settings.php @@ -0,0 +1,6 @@ + * @author Eugene * @author Johnny Utah + * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) */ $lang['menu'] = 'Настройки вики'; $lang['error'] = 'Настройки не были сохранены из-за ошибки в одном из значений. Пожалуйста, проверьте свои изменения и попробуйте ещё раз.
Неправильные значения будут обведены красной рамкой.'; diff --git a/lib/plugins/plugin/lang/ru/lang.php b/lib/plugins/plugin/lang/ru/lang.php index f011c9954..7b9579e96 100644 --- a/lib/plugins/plugin/lang/ru/lang.php +++ b/lib/plugins/plugin/lang/ru/lang.php @@ -17,6 +17,7 @@ * @author Ladyko Andrey * @author Eugene * @author Johnny Utah + * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) */ $lang['menu'] = 'Управление плагинами'; $lang['download'] = 'Скачать и установить новый плагин'; diff --git a/lib/plugins/popularity/lang/ru/lang.php b/lib/plugins/popularity/lang/ru/lang.php index 0e29c795d..a7f33156f 100644 --- a/lib/plugins/popularity/lang/ru/lang.php +++ b/lib/plugins/popularity/lang/ru/lang.php @@ -14,6 +14,7 @@ * @author Ladyko Andrey * @author Eugene * @author Johnny Utah + * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) */ $lang['name'] = 'Сбор информации о популярности (для загрузки может потребоваться некоторое время)'; $lang['submit'] = 'Отправить данные'; diff --git a/lib/plugins/revert/lang/ru/lang.php b/lib/plugins/revert/lang/ru/lang.php index 4abe37e6a..817bd1064 100644 --- a/lib/plugins/revert/lang/ru/lang.php +++ b/lib/plugins/revert/lang/ru/lang.php @@ -15,6 +15,7 @@ * @author Ladyko Andrey * @author Eugene * @author Johnny Utah + * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) */ $lang['menu'] = 'Менеджер откаток'; $lang['filter'] = 'Поиск спам-страниц'; diff --git a/lib/plugins/usermanager/lang/ru/lang.php b/lib/plugins/usermanager/lang/ru/lang.php index eb9f26be6..29cee6576 100644 --- a/lib/plugins/usermanager/lang/ru/lang.php +++ b/lib/plugins/usermanager/lang/ru/lang.php @@ -17,6 +17,7 @@ * @author Ladyko Andrey * @author Eugene * @author Johnny Utah + * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) */ $lang['menu'] = 'Управление пользователями'; $lang['noauth'] = '(авторизация пользователей недоступна)'; -- cgit v1.2.3 From b055d7074c8f9415798be4f2fce8dfdea30d4f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Ku=C4=8Dera?= Date: Sun, 5 May 2013 20:03:01 +0200 Subject: Czech language update --- lib/plugins/acl/lang/cs/lang.php | 1 + lib/plugins/authad/lang/cs/settings.php | 18 +++++++++++++ lib/plugins/authldap/lang/cs/settings.php | 21 +++++++++++++++ lib/plugins/authmysql/lang/cs/settings.php | 41 ++++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/cs/settings.php | 37 +++++++++++++++++++++++++++ lib/plugins/config/lang/cs/lang.php | 1 + lib/plugins/plugin/lang/cs/lang.php | 1 + lib/plugins/popularity/lang/cs/lang.php | 1 + lib/plugins/revert/lang/cs/lang.php | 1 + lib/plugins/usermanager/lang/cs/lang.php | 1 + 10 files changed, 123 insertions(+) create mode 100644 lib/plugins/authad/lang/cs/settings.php create mode 100644 lib/plugins/authldap/lang/cs/settings.php create mode 100644 lib/plugins/authmysql/lang/cs/settings.php create mode 100644 lib/plugins/authpgsql/lang/cs/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/cs/lang.php b/lib/plugins/acl/lang/cs/lang.php index feb160a02..a4e59287a 100644 --- a/lib/plugins/acl/lang/cs/lang.php +++ b/lib/plugins/acl/lang/cs/lang.php @@ -12,6 +12,7 @@ * @author zbynek.krivka@seznam.cz * @author Bohumir Zamecnik * @author Jakub A. Těšínský (j@kub.cz) + * @author mkucera66@seznam.cz */ $lang['admin_acl'] = 'Správa přístupových práv'; $lang['acl_group'] = 'Skupina'; diff --git a/lib/plugins/authad/lang/cs/settings.php b/lib/plugins/authad/lang/cs/settings.php new file mode 100644 index 000000000..71f83afda --- /dev/null +++ b/lib/plugins/authad/lang/cs/settings.php @@ -0,0 +1,18 @@ +@moje.domena.org'; +$lang['base_dn'] = 'Vaše doménové jméno DN. tj. DC=moje,DC=domena,DC=org'; +$lang['domain_controllers'] = 'Čárkou oddělenových kontrol=rů, tj. srv1.domena.org,srv2.domena.org'; +$lang['admin_username'] = 'Privilegovaný uživatel Active Directory s přístupem ke všem datům. Volitelně, ale nutné pro určité akce typu zasílání mailů.'; +$lang['admin_password'] = 'Heslo uživatele výše'; +$lang['sso'] = 'Chcete přihlašování Single-Sign-On pomocí jádra Kerberos nebo NTLM ( autentizační protokol obvyklý ve Windows)?'; +$lang['real_primarygroup'] = 'Má být zjištěna primární skupina namísto vyhodnocení hodnoty "doménoví uživatelé" (pomalejší)'; +$lang['use_ssl'] = 'Použít spojení SSL? Pokud ano, nevyužívejte TLS níže.'; +$lang['use_tls'] = 'Použít spojení TLS? Pokud ano, nevyužívejte SSL výše.'; +$lang['debug'] = 'Zobrazit dodatečné debugovací výstupy při chybách?'; +$lang['expirywarn'] = 'Dny mezi varováním o vyprčšení hesla uživatele a jeho vypršením. 0 znaší vypnuto.'; +$lang['additional'] = 'Čárkou oddělený seznam dodatečných atributů získávaných z uživatelských dat. Využito některými pluginy.'; diff --git a/lib/plugins/authldap/lang/cs/settings.php b/lib/plugins/authldap/lang/cs/settings.php new file mode 100644 index 000000000..783d2a3ae --- /dev/null +++ b/lib/plugins/authldap/lang/cs/settings.php @@ -0,0 +1,21 @@ +localhost) nebo plně kvalifikovaný popis URL (ldap://server.tld:389)'; +$lang['port'] = 'Port serveru LDAP. Pokud není, bude využito URL výše'; +$lang['usertree'] = 'Kde najít uživatelské účty, tj. ou=Lide, dc=server, dc=tld'; +$lang['grouptree'] = 'Kde najít uživatelské skupiny, tj. ou=Skupina, dc=server, dc=tld'; +$lang['userfilter'] = 'Filter LDAPu pro vyhledávání uživatelských účtů, tj. (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = 'Filter LDAPu pro vyhledávání uživatelských skupin, tj. (&(uid=%{user})(objectClass=posixAccount))'; +$lang['version'] = 'Verze použitého protokolu. Můžete potřebovat jej nastavit na 3'; +$lang['starttls'] = 'Využít spojení TLS?'; +$lang['referrals'] = 'Přeposílat odkazy?'; +$lang['binddn'] = 'Doménový název DN volitelně připojeného uživatele, pokus anonymní připojení není vyhovující, tj. cn=admin, dc=muj, dc=domov'; +$lang['bindpw'] = 'Heslo uživatele výše'; +$lang['userscope'] = 'Omezení rozsahu vyhledávání uživatele'; +$lang['groupscope'] = 'Omezení rozsahu vyhledávání skupiny'; +$lang['groupkey'] = 'Atribut šlenství uživatele ve skupinách (namísto standardních AD skupin), tj. skupina z oddělení nebo telefonní číslo'; +$lang['debug'] = 'Zobrazit dodatečné debugovací informace'; diff --git a/lib/plugins/authmysql/lang/cs/settings.php b/lib/plugins/authmysql/lang/cs/settings.php new file mode 100644 index 000000000..7fedefbbb --- /dev/null +++ b/lib/plugins/authmysql/lang/cs/settings.php @@ -0,0 +1,41 @@ + * @author Jakub A. Těšínský (j@kub.cz) + * @author mkucera66@seznam.cz */ $lang['menu'] = 'Správa nastavení'; $lang['error'] = 'Nastavení nebyla změněna kvůli alespoň jedné neplatné položce, diff --git a/lib/plugins/plugin/lang/cs/lang.php b/lib/plugins/plugin/lang/cs/lang.php index 20a015cd4..98fae12c7 100644 --- a/lib/plugins/plugin/lang/cs/lang.php +++ b/lib/plugins/plugin/lang/cs/lang.php @@ -13,6 +13,7 @@ * @author zbynek.krivka@seznam.cz * @author Bohumir Zamecnik * @author Jakub A. Těšínský (j@kub.cz) + * @author mkucera66@seznam.cz */ $lang['menu'] = 'Správa pluginů'; $lang['download'] = 'Stáhnout a instalovat plugin'; diff --git a/lib/plugins/popularity/lang/cs/lang.php b/lib/plugins/popularity/lang/cs/lang.php index 0b0dbae7f..ee090a131 100644 --- a/lib/plugins/popularity/lang/cs/lang.php +++ b/lib/plugins/popularity/lang/cs/lang.php @@ -10,6 +10,7 @@ * @author zbynek.krivka@seznam.cz * @author Bohumir Zamecnik * @author Jakub A. Těšínský (j@kub.cz) + * @author mkucera66@seznam.cz */ $lang['name'] = 'Průzkum používání (může chviličku trvat, než se natáhne)'; $lang['submit'] = 'Odeslat data'; diff --git a/lib/plugins/revert/lang/cs/lang.php b/lib/plugins/revert/lang/cs/lang.php index dd8d7845c..eef3295ba 100644 --- a/lib/plugins/revert/lang/cs/lang.php +++ b/lib/plugins/revert/lang/cs/lang.php @@ -13,6 +13,7 @@ * @author zbynek.krivka@seznam.cz * @author Bohumir Zamecnik * @author Jakub A. Těšínský (j@kub.cz) + * @author mkucera66@seznam.cz */ $lang['menu'] = 'Obnova zaspamovaných stránek'; $lang['filter'] = 'Hledat zaspamované stránky'; diff --git a/lib/plugins/usermanager/lang/cs/lang.php b/lib/plugins/usermanager/lang/cs/lang.php index 6de408e14..9fc3a5e75 100644 --- a/lib/plugins/usermanager/lang/cs/lang.php +++ b/lib/plugins/usermanager/lang/cs/lang.php @@ -12,6 +12,7 @@ * @author zbynek.krivka@seznam.cz * @author Bohumir Zamecnik * @author Jakub A. Těšínský (j@kub.cz) + * @author mkucera66@seznam.cz */ $lang['menu'] = 'Správa uživatelů'; $lang['noauth'] = '(autentizace uživatelů není k dispozici)'; -- cgit v1.2.3 From 8fb341d2133fef951e0a7bb959440b93d5ca2e4a Mon Sep 17 00:00:00 2001 From: Satoshi Sahara Date: Sun, 5 May 2013 20:04:04 +0200 Subject: Japanese language update --- lib/plugins/acl/lang/ja/lang.php | 1 + lib/plugins/authad/lang/ja/settings.php | 1 + lib/plugins/authldap/lang/ja/settings.php | 1 + lib/plugins/authmysql/lang/ja/settings.php | 36 ++++++++++++++++++++++++++++++ lib/plugins/authpgsql/lang/ja/settings.php | 32 ++++++++++++++++++++++++++ lib/plugins/config/lang/ja/lang.php | 7 ++++-- lib/plugins/plugin/lang/ja/lang.php | 1 + lib/plugins/popularity/lang/ja/lang.php | 1 + lib/plugins/revert/lang/ja/lang.php | 1 + lib/plugins/usermanager/lang/ja/lang.php | 8 +++---- 10 files changed, 83 insertions(+), 6 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/ja/lang.php b/lib/plugins/acl/lang/ja/lang.php index 5bebb58a9..0dd4d09c6 100644 --- a/lib/plugins/acl/lang/ja/lang.php +++ b/lib/plugins/acl/lang/ja/lang.php @@ -9,6 +9,7 @@ * @author Daniel Dupriest * @author Kazutaka Miyasaka * @author Taisuke Shimamoto + * @author Satoshi Sahara */ $lang['admin_acl'] = 'アクセスコントロール管理'; $lang['acl_group'] = 'グループ'; diff --git a/lib/plugins/authad/lang/ja/settings.php b/lib/plugins/authad/lang/ja/settings.php index 576f0eeb5..fdc6fc434 100644 --- a/lib/plugins/authad/lang/ja/settings.php +++ b/lib/plugins/authad/lang/ja/settings.php @@ -2,4 +2,5 @@ /** * Japanese language file * + * @author Satoshi Sahara */ diff --git a/lib/plugins/authldap/lang/ja/settings.php b/lib/plugins/authldap/lang/ja/settings.php index 576f0eeb5..fdc6fc434 100644 --- a/lib/plugins/authldap/lang/ja/settings.php +++ b/lib/plugins/authldap/lang/ja/settings.php @@ -2,4 +2,5 @@ /** * Japanese language file * + * @author Satoshi Sahara */ diff --git a/lib/plugins/authmysql/lang/ja/settings.php b/lib/plugins/authmysql/lang/ja/settings.php index 576f0eeb5..45f938fec 100644 --- a/lib/plugins/authmysql/lang/ja/settings.php +++ b/lib/plugins/authmysql/lang/ja/settings.php @@ -2,4 +2,40 @@ /** * Japanese language file * + * @author Satoshi Sahara */ +$lang['server'] = 'MySQL のホスト名'; +$lang['user'] = 'MySQL 接続用ユーザー名'; +$lang['password'] = 'MySQL 接続用ユーザーのパスワード'; +$lang['database'] = '使用するデータベース名'; +$lang['charset'] = 'データベースの文字コード'; +$lang['debug'] = 'デバック情報を表示する'; +$lang['forwardClearPass'] = '以下で定義する SQL ステートメントにおいて, パスワード変数 %{pass} を平文とする(DokiWiki側で暗号化しない)'; +$lang['TablesToLock'] = '書き込み時にロックするテーブル(コンマ区切りで列挙)'; +$lang['checkPass'] = 'パスワードの照合に用いる SQL ステートメント'; +$lang['getUserInfo'] = 'ユーザー情報の取得に用いる SQL ステートメント'; +$lang['getGroups'] = 'ユーザーが所属する全てのグループの取得に用いる SQL ステートメント'; +$lang['getUsers'] = 'ユーザーリストを取得する SQL ステートメント'; +$lang['FilterLogin'] = 'ユーザーリストをログイン名で絞り込む SQL 句'; +$lang['FilterName'] = 'ユーザーリストをフルネームで絞り込む SQL 句'; +$lang['FilterEmail'] = 'ユーザーリストをメールアドレスで絞り込む SQL 句'; +$lang['FilterGroup'] = 'ユーザーリストを所属グループで絞り込む SQL 句'; +$lang['SortOrder'] = 'ユーザーリストのソート方法を指定する SQL 句'; +$lang['addUser'] = '新規ユーザーを追加する SQL ステートメント'; +$lang['addGroup'] = '新規グループを追加する SQL ステートメント'; +$lang['addUserGroup'] = 'ユーザーをグループに配属する SQL ステートメント'; +$lang['delGroup'] = 'グループを削除する SQL ステートメント'; +$lang['getUserID'] = 'ユーザーIDの取得に用いる SQL ステートメント'; +$lang['delUser'] = 'ユーザーを削除する SQL ステートメント'; +$lang['delUserRefs'] = 'ユーザーのグループ所属を全て取り消す SQL ステートメント'; +$lang['updateUser'] = 'ユーザー情報を変更する SQL ステートメント'; +$lang['UpdateLogin'] = '変更後のログイン名を指定する SQL 句'; +$lang['UpdatePass'] = '変更後のパスワードを指定する SQL 句'; +$lang['UpdateEmail'] = '変更後のメールアドレスを指定する SQL 句'; +$lang['UpdateName'] = '変更後のフルネームを指定する SQL 句'; +$lang['UpdateTarget'] = '変更対象のユーザを特定するための SQL 句'; +$lang['delUserGroup'] = 'ユーザーをグループから除名する SQL ステートメント'; +$lang['getGroupID'] = 'グループIDの取得に用いる SQL ステートメント'; +$lang['debug_o_0'] = '表示しない'; +$lang['debug_o_1'] = 'エラー発生時のみ表示'; +$lang['debug_o_2'] = '全ての SQLクエリで表示'; diff --git a/lib/plugins/authpgsql/lang/ja/settings.php b/lib/plugins/authpgsql/lang/ja/settings.php index 576f0eeb5..4883caa4c 100644 --- a/lib/plugins/authpgsql/lang/ja/settings.php +++ b/lib/plugins/authpgsql/lang/ja/settings.php @@ -2,4 +2,36 @@ /** * Japanese language file * + * @author Satoshi Sahara */ +$lang['server'] = 'PostgreSQL のサーバー名'; +$lang['port'] = 'PostgreSQL サーバーのポート番号'; +$lang['user'] = 'PostgreSQL 接続用ユーザー名'; +$lang['password'] = 'PostgreSQL 接続用ユーザーのパスワード'; +$lang['database'] = '使用するデータベース名'; +$lang['debug'] = 'デバック情報を表示する'; +$lang['forwardClearPass'] = '以下で定義する SQL ステートメントにおいて, パスワード変数 %{pass} を平文とする(DokiWiki側で暗号化しない)'; +$lang['checkPass'] = 'パスワードの照合に用いる SQL ステートメント'; +$lang['getUserInfo'] = 'ユーザー情報の取得に用いる SQL ステートメント'; +$lang['getGroups'] = 'ユーザーが所属する全てのグループの取得に用いる SQL ステートメント'; +$lang['getUsers'] = 'ユーザーリストを取得する SQL ステートメント'; +$lang['FilterLogin'] = 'ユーザーリストをログイン名で絞り込む SQL 句'; +$lang['FilterName'] = 'ユーザーリストをフルネームで絞り込む SQL 句'; +$lang['FilterEmail'] = 'ユーザーリストをメールアドレスで絞り込む SQL 句'; +$lang['FilterGroup'] = 'ユーザーリストを所属グループで絞り込む SQL 句'; +$lang['SortOrder'] = 'ユーザーリストのソート方法を指定する SQL 句'; +$lang['addUser'] = '新規ユーザーを追加する SQL ステートメント'; +$lang['addGroup'] = '新規グループを追加する SQL ステートメント'; +$lang['addUserGroup'] = 'ユーザーをグループに配属する SQL ステートメント'; +$lang['delGroup'] = 'グループを削除する SQL ステートメント'; +$lang['getUserID'] = 'ユーザーIDの取得に用いる SQL ステートメン'; +$lang['delUser'] = 'ユーザーを削除する SQL ステートメント'; +$lang['delUserRefs'] = 'ユーザーのグループ所属を全て取り消す SQL ステートメント'; +$lang['updateUser'] = 'ユーザー情報を変更する SQL ステートメント'; +$lang['UpdateLogin'] = '変更後のログイン名を指定する SQL 句'; +$lang['UpdatePass'] = '変更後のパスワードを指定する SQL 句'; +$lang['UpdateEmail'] = '変更後のメールアドレスを指定する SQL 句'; +$lang['UpdateName'] = '変更後のフルネームを指定する SQL 句'; +$lang['UpdateTarget'] = '変更対象のユーザを特定するための SQL 句'; +$lang['delUserGroup'] = 'ユーザーをグループから除名する SQL ステートメント'; +$lang['getGroupID'] = 'グループIDの取得に用いる SQL ステートメント'; diff --git a/lib/plugins/config/lang/ja/lang.php b/lib/plugins/config/lang/ja/lang.php index a89123f8c..807436cca 100644 --- a/lib/plugins/config/lang/ja/lang.php +++ b/lib/plugins/config/lang/ja/lang.php @@ -9,6 +9,7 @@ * @author Daniel Dupriest * @author Kazutaka Miyasaka * @author Taisuke Shimamoto + * @author Satoshi Sahara */ $lang['menu'] = 'サイト設定'; $lang['error'] = '不正な値が存在するため、設定は更新されませんでした。入力値を確認してから、再度更新してください。 @@ -72,7 +73,7 @@ $lang['camelcase'] = 'キャメルケースリンク'; $lang['deaccent'] = 'ページ名アクセント'; $lang['useheading'] = '最初の見出しをページ名とする'; $lang['sneaky_index'] = 'デフォルトでは索引にすべての名前空間を表示しますが、この機能はユーザーに閲覧権限のない名前空間を非表示にします。ただし、閲覧が可能な副名前空間まで表示されなくなるため、ACLの設定が適正でない場合は索引機能が使えなくなる場合があります。'; -$lang['hidepages'] = '非公開ページ(Regex)'; +$lang['hidepages'] = '検索、サイトマップ、その他の自動インデックスの結果に表示しないページ(Regex)'; $lang['useacl'] = 'アクセス管理を行う(ACL)'; $lang['autopasswd'] = 'パスワードの自動生成(ACL)'; $lang['authtype'] = '認証方法(ACL)'; @@ -119,6 +120,7 @@ $lang['notify'] = '変更を通知するメールアドレス'; $lang['registernotify'] = '新規ユーザー登録を通知するメールアドレス'; $lang['mailfrom'] = 'メール送信時の送信元アドレス'; $lang['mailprefix'] = '自動メールの題名に使用する接頭語'; +$lang['htmlmail'] = 'メールをテキスト形式ではなく、HTML形式で送信する。'; $lang['sitemap'] = 'Googleサイトマップ作成頻度(日数)'; $lang['rss_type'] = 'RSSフィード形式'; $lang['rss_linkto'] = 'RSS内リンク先'; @@ -143,6 +145,7 @@ $lang['xsendfile'] = 'ウェブサーバーが静的ファイルを $lang['renderer_xhtml'] = 'Wikiの出力(xhtml)にレンダラーを使用する'; $lang['renderer__core'] = '%s (Dokuwikiコア)'; $lang['renderer__plugin'] = '%s (プラグイン)'; +$lang['dnslookups'] = 'ページを編集しているユーザーのIPアドレスからホスト名を逆引きする。利用できるDNSサーバーがない、あるいはこの機能が不要な場合にはオフにします。'; $lang['proxy____host'] = 'プロキシ - サーバー名'; $lang['proxy____port'] = 'プロキシ - ポート'; $lang['proxy____user'] = 'プロキシ - ユーザー名'; @@ -156,7 +159,7 @@ $lang['ftp____user'] = 'FTP ユーザー名(セーフモード対策 $lang['ftp____pass'] = 'FTP パスワード(セーフモード対策)'; $lang['ftp____root'] = 'FTP ルートディレクトリ(セーフモード対策)'; $lang['license_o_'] = '選択されていません'; -$lang['typography_o_0'] = '無し'; +$lang['typography_o_0'] = '変換しない'; $lang['typography_o_1'] = '二重引用符(ダブルクオート)のみ'; $lang['typography_o_2'] = 'すべての引用符(動作しない場合があります)'; $lang['userewrite_o_0'] = '使用しない'; diff --git a/lib/plugins/plugin/lang/ja/lang.php b/lib/plugins/plugin/lang/ja/lang.php index d366806c3..73f295157 100644 --- a/lib/plugins/plugin/lang/ja/lang.php +++ b/lib/plugins/plugin/lang/ja/lang.php @@ -9,6 +9,7 @@ * @author Daniel Dupriest * @author Kazutaka Miyasaka * @author Taisuke Shimamoto + * @author Satoshi Sahara */ $lang['menu'] = 'プラグイン管理'; $lang['download'] = 'プラグインのダウンロードとインストール'; diff --git a/lib/plugins/popularity/lang/ja/lang.php b/lib/plugins/popularity/lang/ja/lang.php index f5e280db5..774785511 100644 --- a/lib/plugins/popularity/lang/ja/lang.php +++ b/lib/plugins/popularity/lang/ja/lang.php @@ -7,6 +7,7 @@ * @author Kazutaka Miyasaka * @author Yuji Takenaka * @author Taisuke Shimamoto + * @author Satoshi Sahara */ $lang['name'] = '利用状況調査(ロードに少し時間が掛かります)'; $lang['submit'] = 'データ送信'; diff --git a/lib/plugins/revert/lang/ja/lang.php b/lib/plugins/revert/lang/ja/lang.php index bb5a9c150..7ef850ea7 100644 --- a/lib/plugins/revert/lang/ja/lang.php +++ b/lib/plugins/revert/lang/ja/lang.php @@ -6,6 +6,7 @@ * @author Daniel Dupriest * @author Kazutaka Miyasaka * @author Taisuke Shimamoto + * @author Satoshi Sahara */ $lang['menu'] = '復元管理'; $lang['filter'] = 'スパムを受けたページを検索'; diff --git a/lib/plugins/usermanager/lang/ja/lang.php b/lib/plugins/usermanager/lang/ja/lang.php index f9ad0814c..1510d1eb0 100644 --- a/lib/plugins/usermanager/lang/ja/lang.php +++ b/lib/plugins/usermanager/lang/ja/lang.php @@ -42,10 +42,10 @@ $lang['prev'] = '前へ'; $lang['next'] = '次へ'; $lang['last'] = '最後'; $lang['edit_usermissing'] = '選択したユーザーは見つかりません。削除もしくは変更された可能性があります。'; -$lang['user_notify'] = '通知するユーザー'; -$lang['note_notify'] = 'ユーザーが新しいパスワードを設定した場合のみ、通知メールが送信されます。'; -$lang['note_group'] = 'グループを指定しない場合は、既定のグループ(%s)に登録されます。'; -$lang['note_pass'] = 'パスワードを空欄とした場合は、パスワードを自動的に生成します。この場合、ユーザーへの通知が有効となります。'; +$lang['user_notify'] = 'ユーザーに通知する'; +$lang['note_notify'] = '通知メールは、ユーザーに新たなパスワードが設定された場合のみ送信されます。'; +$lang['note_group'] = 'グループを指定しない場合は、既定のグループ(%s)に配属されます。'; +$lang['note_pass'] = 'パスワードを空欄とした場合は、(”ユーザーに通知する”がチェックされていなくとも)自動生成したパスワードの通知がユーザー宛てに送信されます。'; $lang['add_ok'] = 'ユーザーを登録しました'; $lang['add_fail'] = 'ユーザーの登録に失敗しました'; $lang['notify_ok'] = '通知メールを送信しました'; -- cgit v1.2.3 From 0e748a96cda77fa0131fc0b9601de54a41592ca7 Mon Sep 17 00:00:00 2001 From: Anika Henke Date: Mon, 6 May 2013 12:25:27 +0100 Subject: updated dates in templates' and plugins' info.txt files --- lib/plugins/acl/plugin.info.txt | 2 +- lib/plugins/authad/plugin.info.txt | 2 +- lib/plugins/authldap/plugin.info.txt | 2 +- lib/plugins/authmysql/plugin.info.txt | 2 +- lib/plugins/authpgsql/plugin.info.txt | 2 +- lib/plugins/authplain/plugin.info.txt | 2 +- lib/plugins/config/plugin.info.txt | 2 +- lib/plugins/plugin/plugin.info.txt | 2 +- lib/plugins/popularity/plugin.info.txt | 2 +- lib/plugins/revert/plugin.info.txt | 2 +- lib/plugins/safefnrecode/plugin.info.txt | 2 +- lib/plugins/testing/plugin.info.txt | 2 +- lib/plugins/usermanager/plugin.info.txt | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/acl/plugin.info.txt b/lib/plugins/acl/plugin.info.txt index 42babd71c..029dc82e7 100644 --- a/lib/plugins/acl/plugin.info.txt +++ b/lib/plugins/acl/plugin.info.txt @@ -1,7 +1,7 @@ base acl author Andreas Gohr email andi@splitbrain.org -date 2012-09-06 +date 2013-02-17 name ACL Manager desc Manage Page Access Control Lists url http://dokuwiki.org/plugin:acl diff --git a/lib/plugins/authad/plugin.info.txt b/lib/plugins/authad/plugin.info.txt index f02b5118c..996813bc5 100644 --- a/lib/plugins/authad/plugin.info.txt +++ b/lib/plugins/authad/plugin.info.txt @@ -1,7 +1,7 @@ base authad author Andreas Gohr email andi@splitbrain.org -date 2012-11-09 +date 2013-04-25 name Active Directory auth plugin desc Provides authentication against a Microsoft Active Directory url http://www.dokuwiki.org/plugin:authad diff --git a/lib/plugins/authldap/plugin.info.txt b/lib/plugins/authldap/plugin.info.txt index 2af8cf00a..94809a75b 100644 --- a/lib/plugins/authldap/plugin.info.txt +++ b/lib/plugins/authldap/plugin.info.txt @@ -1,7 +1,7 @@ base authldap author Andreas Gohr email andi@splitbrain.org -date 2012-10-06 +date 2013-04-19 name ldap auth plugin desc Provides authentication against am LDAP server url http://www.dokuwiki.org/plugin:authldap diff --git a/lib/plugins/authmysql/plugin.info.txt b/lib/plugins/authmysql/plugin.info.txt index c1e118427..16fe27e74 100644 --- a/lib/plugins/authmysql/plugin.info.txt +++ b/lib/plugins/authmysql/plugin.info.txt @@ -1,7 +1,7 @@ base authmysql author Andreas Gohr email andi@splitbrain.org -date 2012-10-06 +date 2013-02-16 name mysql auth plugin desc Provides authentication against a MySQL Server url http://www.dokuwiki.org/plugin:authmysql diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt index ad71771b4..af33cec3e 100644 --- a/lib/plugins/authpgsql/plugin.info.txt +++ b/lib/plugins/authpgsql/plugin.info.txt @@ -1,7 +1,7 @@ base authpgsql author Andreas Gohr email andi@splitbrain.org -date 2012-10-06 +date 2013-02-16 name PostgreSQL auth plugin desc Provides authentication against a PostgreSQL database url http://www.dokuwiki.org/plugin:authpgsql diff --git a/lib/plugins/authplain/plugin.info.txt b/lib/plugins/authplain/plugin.info.txt index cde38eaac..8d9d3a82d 100644 --- a/lib/plugins/authplain/plugin.info.txt +++ b/lib/plugins/authplain/plugin.info.txt @@ -1,7 +1,7 @@ base authplain author Andreas Gohr email andi@splitbrain.org -date 2012-10-06 +date 2012-11-09 name auth plugin desc Provides authentication against local password storage url http://www.dokuwiki.org/plugin:authplain diff --git a/lib/plugins/config/plugin.info.txt b/lib/plugins/config/plugin.info.txt index 1f9968154..510be3be4 100644 --- a/lib/plugins/config/plugin.info.txt +++ b/lib/plugins/config/plugin.info.txt @@ -1,7 +1,7 @@ base config author Christopher Smith email chris@jalakai.co.uk -date 2012-09-08 +date 2013-02-24 name Configuration Manager desc Manage Dokuwiki's Configuration Settings url http://dokuwiki.org/plugin:config diff --git a/lib/plugins/plugin/plugin.info.txt b/lib/plugins/plugin/plugin.info.txt index c2f72d998..cdf866842 100644 --- a/lib/plugins/plugin/plugin.info.txt +++ b/lib/plugins/plugin/plugin.info.txt @@ -1,7 +1,7 @@ base plugin author Christopher Smith email chris@jalakai.co.uk -date 2012-09-08 +date 2013-02-20 name Plugin Manager plugin desc Manage and install plugins url http://www.dokuwiki.org/plugin:plugin diff --git a/lib/plugins/popularity/plugin.info.txt b/lib/plugins/popularity/plugin.info.txt index 2f1451c4a..17f3110c4 100644 --- a/lib/plugins/popularity/plugin.info.txt +++ b/lib/plugins/popularity/plugin.info.txt @@ -1,7 +1,7 @@ base popularity author Andreas Gohr email andi@splitbrain.org -date 2012-10-07 +date 2012-11-29 name Popularity Feedback Plugin desc Send anonymous data about your wiki to the developers. url http://www.dokuwiki.org/plugin:popularity diff --git a/lib/plugins/revert/plugin.info.txt b/lib/plugins/revert/plugin.info.txt index 205fe9177..984a531b3 100644 --- a/lib/plugins/revert/plugin.info.txt +++ b/lib/plugins/revert/plugin.info.txt @@ -1,7 +1,7 @@ base revert author Andreas Gohr email andi@splitbrain.org -date 2012-08-05 +date 2013-03-09 name Revert Manager desc Allows you to mass revert recent edits url http://dokuwiki.org/plugin:revert diff --git a/lib/plugins/safefnrecode/plugin.info.txt b/lib/plugins/safefnrecode/plugin.info.txt index 2b42399b0..3c6249d73 100644 --- a/lib/plugins/safefnrecode/plugin.info.txt +++ b/lib/plugins/safefnrecode/plugin.info.txt @@ -1,7 +1,7 @@ base safefnrecode author Andreas Gohr email andi@splitbrain.org -date 2011-04-06 +date 2012-07-28 name safefnrecode plugin desc Changes existing page and foldernames for the change in the safe filename encoding url http://www.dokuwiki.org/plugin:safefnrecode diff --git a/lib/plugins/testing/plugin.info.txt b/lib/plugins/testing/plugin.info.txt index c78c07739..64ab0b62e 100644 --- a/lib/plugins/testing/plugin.info.txt +++ b/lib/plugins/testing/plugin.info.txt @@ -1,7 +1,7 @@ base testing author Tobias Sarnowski email tobias@trustedco.de -date 2012-04-26 +date 2012-07-28 name Testing Plugin desc Used to test the test framework. Should always be disabled. url http://www.dokuwiki.org/plugin:testing diff --git a/lib/plugins/usermanager/plugin.info.txt b/lib/plugins/usermanager/plugin.info.txt index f4495bb19..1f8c2282b 100644 --- a/lib/plugins/usermanager/plugin.info.txt +++ b/lib/plugins/usermanager/plugin.info.txt @@ -1,7 +1,7 @@ base usermanager author Chris Smith email chris@jalakai.co.uk -date 2012-09-08 +date 2013-02-20 name User Manager desc Manage users url http://dokuwiki.org/plugin:usermanager -- cgit v1.2.3 From 6b519690e45cefe83fbef5691e372c6078c3fb9b Mon Sep 17 00:00:00 2001 From: Anika Henke Date: Mon, 27 May 2013 16:26:40 +0100 Subject: fixed broken default config options (FS#2789) --- lib/plugins/authldap/conf/default.php | 2 +- lib/plugins/authmysql/conf/default.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authldap/conf/default.php b/lib/plugins/authldap/conf/default.php index d07f9c82e..d530d59c9 100644 --- a/lib/plugins/authldap/conf/default.php +++ b/lib/plugins/authldap/conf/default.php @@ -16,4 +16,4 @@ $conf['bindpw'] = ''; $conf['userscope'] = 'sub'; $conf['groupscope'] = 'sub'; $conf['groupkey'] = 'cn'; -$conf['debug'] = array('onoff'); \ No newline at end of file +$conf['debug'] = 0; \ No newline at end of file diff --git a/lib/plugins/authmysql/conf/default.php b/lib/plugins/authmysql/conf/default.php index 647f3d96c..427bea273 100644 --- a/lib/plugins/authmysql/conf/default.php +++ b/lib/plugins/authmysql/conf/default.php @@ -7,7 +7,7 @@ $conf['password'] = ''; $conf['database'] = ''; $conf['debug'] = 0; $conf['forwardClearPass'] = 0; -$conf['TablesToLock'] = ''; +$conf['TablesToLock'] = array(); $conf['checkPass'] = ''; $conf['getUserInfo'] = ''; $conf['getGroups'] = ''; -- cgit v1.2.3 From 01fb97e278338569ebf861059b81adff5f4a55c6 Mon Sep 17 00:00:00 2001 From: Anika Henke Date: Mon, 27 May 2013 17:01:43 +0100 Subject: fixed references from old mysql authtype to new mysql plugin in mysql.conf example --- lib/plugins/authmysql/auth.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php index 5f6e86c71..036644a67 100644 --- a/lib/plugins/authmysql/auth.php +++ b/lib/plugins/authmysql/auth.php @@ -843,7 +843,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin { /** * Locked a list of tables for exclusive access so that modifications * to the database can't be disturbed by other threads. The list - * could be set with $conf['auth']['mysql']['TablesToLock'] = array() + * could be set with $conf['plugin']['authmysql']['TablesToLock'] = array() * * If aliases for tables are used in SQL statements, also this aliases * must be locked. For eg. you use a table 'user' and the alias 'u' in -- cgit v1.2.3 From 7482f2d6e43ea5768b2de40d89c7e7ea836a60df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=AA=85=EC=A7=84?= Date: Fri, 7 Jun 2013 11:30:39 +0200 Subject: Korean language update --- lib/plugins/acl/lang/ko/lang.php | 2 +- lib/plugins/config/lang/ko/intro.txt | 2 +- lib/plugins/config/lang/ko/lang.php | 22 +++++++++++----------- lib/plugins/popularity/lang/ko/intro.txt | 2 +- lib/plugins/revert/lang/ko/lang.php | 2 +- lib/plugins/usermanager/lang/ko/lang.php | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/ko/lang.php b/lib/plugins/acl/lang/ko/lang.php index 5cec4b8fd..7c1e9a43d 100644 --- a/lib/plugins/acl/lang/ko/lang.php +++ b/lib/plugins/acl/lang/ko/lang.php @@ -40,4 +40,4 @@ $lang['acl_perm4'] = '만들기'; $lang['acl_perm8'] = '올리기'; $lang['acl_perm16'] = '삭제'; $lang['acl_new'] = '새 항목 추가'; -$lang['acl_mod'] = '선택 항목 수정'; +$lang['acl_mod'] = '항목 수정'; diff --git a/lib/plugins/config/lang/ko/intro.txt b/lib/plugins/config/lang/ko/intro.txt index a2dc7b6f6..b9eb763a4 100644 --- a/lib/plugins/config/lang/ko/intro.txt +++ b/lib/plugins/config/lang/ko/intro.txt @@ -2,6 +2,6 @@ DokuWiki 설치할 때 설정을 바꾸기 위해 사용하는 페이지입니다. 각 설정에 대한 자세한 도움말이 필요하다면 [[doku>ko:config|설정 문서 (한국어)]]와 [[doku>config|설정 문서 (영어)]]를 참고하세요. -플러그인에 대한 자세한 정보가 필요하다면 [[doku>plugin:config|플러그인 설정]] 문서를 참고하세요. 빨간 배경색으로 보이는 설정은 이 플러그인에서 바꾸지 못하도록 되어있습니다. 파란 배경색으로 보이는 설정은 기본 설정값을 가지고 있습니다. 하얀 배경색으로 보이는 설정은 특별한 설치를 위해 설정되어 있습니다. 파란색과 하얀색 배경으로 된 설정은 수정이 가능합니다. +플러그인에 대한 자세한 정보가 필요하다면 [[doku>plugin:config|플러그인 설정]] 문서를 참고하세요. 빨간 배경색으로 보이는 설정은 이 플러그인에서 바꾸지 못하도록 되어있습니다. 파란 배경색으로 보이는 설정은 기본 설정값을 가지고 있습니다. 하얀 배경색으로 보이는 설정은 특별한 설치를 위해 설정되어 있습니다. 파란색과 하얀색 배경으로 된 설정은 바꿀 수 있습니다. 이 페이지를 떠나기 전에 **저장** 버튼을 누르지 않으면 바뀐 값은 적용되지 않습니다. \ No newline at end of file diff --git a/lib/plugins/config/lang/ko/lang.php b/lib/plugins/config/lang/ko/lang.php index f69af2df6..da155bcef 100644 --- a/lib/plugins/config/lang/ko/lang.php +++ b/lib/plugins/config/lang/ko/lang.php @@ -11,14 +11,14 @@ * @author Myeongjin */ $lang['menu'] = '환경 설정'; -$lang['error'] = '잘못된 값 때문에 설정을 바꿀 수 없습니다. 수정한 값을 검토하고 확인을 누르세요. +$lang['error'] = '잘못된 값 때문에 설정을 바꿀 수 없습니다. 바뀜을 검토하고 확인을 누르세요.
잘못된 값은 빨간 선으로 둘러싸여 있습니다.'; $lang['updated'] = '설정이 성공적으로 바뀌었습니다.'; $lang['nochoice'] = '(다른 선택이 불가능합니다)'; -$lang['locked'] = '환경 설정 파일을 수정할 수 없습니다. 의도한 행동이 아니라면,
+$lang['locked'] = '환경 설정 파일을 바꿀 수 없습니다. 의도한 행동이 아니라면,
파일 이름과 권한이 맞는지 확인하세요.'; -$lang['danger'] = '위험: 이 옵션을 잘못 수정하면 환경설정 메뉴를 사용할 수 없을 수도 있습니다.'; -$lang['warning'] = '경고: 이 옵션을 잘못 수정하면 잘못 동작할 수 있습니다.'; +$lang['danger'] = '위험: 이 옵션을 잘못 바꾸면 환경 설정 메뉴를 사용할 수 없을 수도 있습니다.'; +$lang['warning'] = '경고: 이 옵션을 잘못 바꾸면 잘못 동작할 수 있습니다.'; $lang['security'] = '보안 경고: 이 옵션은 보안에 위험이 있을 수 있습니다.'; $lang['_configuration_manager'] = '환경 설정 관리자'; $lang['_header_dokuwiki'] = 'DokuWiki 설정'; @@ -48,13 +48,13 @@ $lang['template'] = '템플릿 (위키 디자인)'; $lang['tagline'] = '태그 라인 (템플릿이 지원할 때에 한함)'; $lang['sidebar'] = '사이드바 문서 이름 (템플릿이 지원할 때에 한함), 비워두면 사이드바를 비활성화'; $lang['license'] = '콘텐츠에 어떤 라이선스를 적용하겠습니까?'; -$lang['savedir'] = '데이타 저장 디렉토리'; +$lang['savedir'] = '데이터 저장 디렉토리'; $lang['basedir'] = '서버 경로 (예를 들어 /dokuwiki/). 자동 감지를 하려면 비우세요.'; $lang['baseurl'] = '서버 URL (예를 들어 http://www.yourserver.com). 자동 감지를 하려면 비우세요.'; $lang['cookiedir'] = '쿠키 위치. 비워두면 기본 URL 위치로 지정됩니다.'; $lang['dmode'] = '디렉토리 만들기 모드'; $lang['fmode'] = '파일 만들기 모드'; -$lang['allowdebug'] = '디버그 허용 필요하지 않으면 비활성화할 것!'; +$lang['allowdebug'] = '디버그 허용 필요하지 않으면 비활성화하세요!'; $lang['recent'] = '최근 바뀐 문서당 항목 수'; $lang['recent_days'] = '최근 바뀐 문서 기준 시간 (일)'; $lang['breadcrumbs'] = '위치 "추적" 수. 0으로 설정하면 비활성화합니다.'; @@ -63,7 +63,7 @@ $lang['fullpath'] = '문서 하단에 전체 경로 보여주기'; $lang['typography'] = '기호 대체'; $lang['dformat'] = '날짜 형식 (PHP strftime 기능 참고)'; $lang['signature'] = '편집기에서 서명 버튼을 누를 때 삽입할 내용'; -$lang['showuseras'] = '마지막에 문서를 수정한 사용자를 보여줄지 여부'; +$lang['showuseras'] = '마지막에 문서를 편집한 사용자를 보여줄지 여부'; $lang['toptoclevel'] = '목차 최상위 항목'; $lang['tocminheads'] = '목차 표시 여부를 결정할 최소한의 문단 제목 항목의 수'; $lang['maxtoclevel'] = '목차 최대 단계'; @@ -102,7 +102,7 @@ $lang['htmlok'] = 'HTML 내장 허용'; $lang['phpok'] = 'PHP 내장 허용'; $lang['locktime'] = '최대 파일 잠금 시간(초)'; $lang['cachetime'] = '최대 캐시 생존 시간 (초)'; -$lang['target____wiki'] = '내부 링크에 대한 타겟 창'; +$lang['target____wiki'] = '안쪽 링크에 대한 타겟 창'; $lang['target____interwiki'] = '인터위키 링크에 대한 타겟 창'; $lang['target____extern'] = '바깥 링크에 대한 타겟 창'; $lang['target____media'] = '미디어 링크에 대한 타겟 창'; @@ -133,7 +133,7 @@ $lang['userewrite'] = '멋진 URL 사용'; $lang['useslash'] = 'URL에서 이름 구분자로 슬래시 문자 사용'; $lang['sepchar'] = '문서 이름 단어 구분자'; $lang['canonical'] = '완전한 canonical URL 사용'; -$lang['fnencode'] = '아스키가 아닌 파일 이름을 인코딩 하는 방법.'; +$lang['fnencode'] = 'ASCII가 아닌 파일 이름을 인코딩 하는 방법.'; $lang['autoplural'] = '링크 연결시 복수 양식 검사'; $lang['compression'] = '첨부 파일 압축 방법 선택'; $lang['gzip_output'] = 'xhml 내용 gzip 압축 사용'; @@ -143,9 +143,9 @@ $lang['send404'] = '존재하지 않는 페이지에 대해 "HTTP $lang['broken_iua'] = '설치된 시스템에서 ignore_user_abort 기능에 문제가 있습니까? 문제가 있다면 색인이 정상적으로 동작하지 않습니다. 이 기능이 IIS+PHP/CGI에서 문제가 있는 것으로 알려졌습니다. 자세한 정보는 버그 852를 참고하시기 바랍니다.'; $lang['xsendfile'] = '웹 서버가 정적 파일을 제공하도록 X-Sendfile 헤더를 사용하겠습니까? 웹 서버가 이 기능을 지원해야 합니다.'; $lang['renderer_xhtml'] = '주 (xhtml) 위키 출력 처리기'; -$lang['renderer__core'] = '%s (DokuWiki 내부 기능)'; +$lang['renderer__core'] = '%s (DokuWiki 내부)'; $lang['renderer__plugin'] = '%s (플러그인)'; -$lang['dnslookups'] = '이 옵션을 활성화하면 DokuWiki가 문서를 수정하는 사용자의 호스트 네임과 원격 IP 주소를 확인합니다. 서버가 느리거나, DNS를 운영하지 않거나 이 기능을 원치 않으면 비활성화하세요'; +$lang['dnslookups'] = '이 옵션을 활성화하면 DokuWiki가 문서를 편집하는 사용자의 호스트 네임과 원격 IP 주소를 확인합니다. 서버가 느리거나, DNS를 운영하지 않거나 이 기능을 원치 않으면 비활성화하세요'; $lang['proxy____host'] = '프록시 서버 이름'; $lang['proxy____port'] = '프록시 서버 포트'; $lang['proxy____user'] = '프록시 사용자 이름'; diff --git a/lib/plugins/popularity/lang/ko/intro.txt b/lib/plugins/popularity/lang/ko/intro.txt index 2513b77b4..c75c57ba5 100644 --- a/lib/plugins/popularity/lang/ko/intro.txt +++ b/lib/plugins/popularity/lang/ko/intro.txt @@ -2,7 +2,7 @@ 설치된 위키의 익명 정보를 DokuWiki 개발자에게 보냅니다. 이 [[doku>popularity|도구]]는 DokuWiki가 실제 사용자에게 어떻게 사용되는지 DokuWiki 개발자에게 알려줌으로써 이 후 개발 시 참고가 됩니다. -설치된 위키가 커짐에 따라서 이 과정을 반복할 필요가 있습니다. 반복된 데이타는 익명 ID로 구별되어집니다. +설치된 위키가 커짐에 따라서 이 과정을 반복할 필요가 있습니다. 반복된 데이터는 익명 ID로 구별되어집니다. 보내려는 데이터는 설치 DokuWiki 버전, 문서와 파일 수, 크기, 설치 플러그인, 설치 PHP 정보등을 포함하고 있습니다. diff --git a/lib/plugins/revert/lang/ko/lang.php b/lib/plugins/revert/lang/ko/lang.php index d36726279..f944361b8 100644 --- a/lib/plugins/revert/lang/ko/lang.php +++ b/lib/plugins/revert/lang/ko/lang.php @@ -16,5 +16,5 @@ $lang['reverted'] = '%s 판을 %s 판으로 되돌림'; $lang['removed'] = '%s 삭제함'; $lang['revstart'] = '되돌리기 작업을 시작합니다. 오랜 시간이 걸릴 수 있습니다. 완료되기 전에 스크립트 시간 초과가 발생한다면 더 작은 작업으로 나누어서 되돌리시기 바랍니다.'; $lang['revstop'] = '되돌리기 작업이 성공적으로 끝났습니다.'; -$lang['note1'] = '참고: 대소문자를 구별하여 찾습니다'; +$lang['note1'] = '참고: 대소문자를 구별해 찾습니다'; $lang['note2'] = '참고: 이 문서는 %s 스팸 단어를 포함하지 않은 최근 이전 판으로 되돌립니다. '; diff --git a/lib/plugins/usermanager/lang/ko/lang.php b/lib/plugins/usermanager/lang/ko/lang.php index f8c400d19..57bfbc4a2 100644 --- a/lib/plugins/usermanager/lang/ko/lang.php +++ b/lib/plugins/usermanager/lang/ko/lang.php @@ -23,8 +23,8 @@ $lang['value'] = '값'; $lang['add'] = '추가'; $lang['delete'] = '삭제'; $lang['delete_selected'] = '선택 삭제'; -$lang['edit'] = '수정'; -$lang['edit_prompt'] = '이 사용자 수정'; +$lang['edit'] = '편집'; +$lang['edit_prompt'] = '이 사용자 편집'; $lang['modify'] = '바뀜 저장'; $lang['search'] = '찾기'; $lang['search_prompt'] = '찾기 실행'; -- cgit v1.2.3 From 12d195ab7189878b41dc4d211befafc79ae402a6 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 7 Jun 2013 12:48:07 +0200 Subject: treat empty AD credentials as NULL values FS#2781 --- lib/plugins/authad/auth.php | 5 +++++ lib/plugins/authad/conf/default.php | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php index b6b5dd268..fcbd2eeef 100644 --- a/lib/plugins/authad/auth.php +++ b/lib/plugins/authad/auth.php @@ -489,6 +489,11 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin { $this->cando['modPass'] = false; } + // adLDAP expects empty user/pass as NULL, we're less strict FS#2781 + if(empty($opts['admin_username'])) $opts['admin_username'] = null; + if(empty($opts['admin_password'])) $opts['admin_password'] = null; + + // user listing needs admin priviledges if(!empty($opts['admin_username']) && !empty($opts['admin_password'])) { $this->cando['getUsers'] = true; } else { diff --git a/lib/plugins/authad/conf/default.php b/lib/plugins/authad/conf/default.php index 9274db209..f71202cfc 100644 --- a/lib/plugins/authad/conf/default.php +++ b/lib/plugins/authad/conf/default.php @@ -4,8 +4,8 @@ $conf['account_suffix'] = ''; $conf['base_dn'] = ''; $conf['domain_controllers'] = ''; $conf['sso'] = 0; -$conf['admin_username'] = ''; -$conf['admin_password'] = ''; +$conf['admin_username'] = ''; +$conf['admin_password'] = ''; $conf['real_primarygroup'] = 0; $conf['use_ssl'] = 0; $conf['use_tls'] = 0; -- cgit v1.2.3 From e7fbe18945e8d94fd400fd66f36e67174951f290 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 7 Jun 2013 13:23:40 +0200 Subject: fix ldap deref option FS2798 Do not pass timelimit and deref settings to ldap_search. These values should be set globally via ldap_set_option() instead (as we do for deref). --- lib/plugins/authldap/auth.php | 8 ++++---- lib/plugins/authldap/conf/default.php | 1 + lib/plugins/authldap/conf/metadata.php | 1 + lib/plugins/authldap/lang/en/settings.php | 9 ++++++++- 4 files changed, 14 insertions(+), 5 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php index b49aa4792..e43c3f828 100644 --- a/lib/plugins/authldap/auth.php +++ b/lib/plugins/authldap/auth.php @@ -502,23 +502,23 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin { * @return resource */ protected function _ldapsearch($link_identifier, $base_dn, $filter, $scope = 'sub', $attributes = null, - $attrsonly = 0, $sizelimit = 0, $timelimit = 0, $deref = LDAP_DEREF_NEVER) { + $attrsonly = 0, $sizelimit = 0) { if(is_null($attributes)) $attributes = array(); if($scope == 'base') { return @ldap_read( $link_identifier, $base_dn, $filter, $attributes, - $attrsonly, $sizelimit, $timelimit, $deref + $attrsonly, $sizelimit ); } elseif($scope == 'one') { return @ldap_list( $link_identifier, $base_dn, $filter, $attributes, - $attrsonly, $sizelimit, $timelimit, $deref + $attrsonly, $sizelimit ); } else { return @ldap_search( $link_identifier, $base_dn, $filter, $attributes, - $attrsonly, $sizelimit, $timelimit, $deref + $attrsonly, $sizelimit ); } } diff --git a/lib/plugins/authldap/conf/default.php b/lib/plugins/authldap/conf/default.php index d530d59c9..2c295eeeb 100644 --- a/lib/plugins/authldap/conf/default.php +++ b/lib/plugins/authldap/conf/default.php @@ -9,6 +9,7 @@ $conf['groupfilter'] = ''; $conf['version'] = 2; $conf['starttls'] = 0; $conf['referrals'] = 0; +$conf['deref'] = 0; $conf['binddn'] = ''; $conf['bindpw'] = ''; //$conf['mapping']['name'] unsupported in config manager diff --git a/lib/plugins/authldap/conf/metadata.php b/lib/plugins/authldap/conf/metadata.php index fc5b2e63c..a3256628c 100644 --- a/lib/plugins/authldap/conf/metadata.php +++ b/lib/plugins/authldap/conf/metadata.php @@ -8,6 +8,7 @@ $meta['groupfilter'] = array('string'); $meta['version'] = array('numeric'); $meta['starttls'] = array('onoff'); $meta['referrals'] = array('onoff'); +$meta['deref'] = array('multichoice','_choices' => array(0,1,2,3)); $meta['binddn'] = array('string'); $meta['bindpw'] = array('password'); //$meta['mapping']['name'] unsupported in config manager diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php index ddedf8ae3..e3f385f99 100644 --- a/lib/plugins/authldap/lang/en/settings.php +++ b/lib/plugins/authldap/lang/en/settings.php @@ -8,9 +8,16 @@ $lang['groupfilter'] = 'LDAP filter to search for groups. Eg. (&(objec $lang['version'] = 'The protocol version to use. You may need to set this to 3'; $lang['starttls'] = 'Use TLS connections?'; $lang['referrals'] = 'Shall referrals be followed?'; +$lang['deref'] = 'How to dereference aliases?'; $lang['binddn'] = 'DN of an optional bind user if anonymous bind is not sufficient. Eg. cn=admin, dc=my, dc=home'; $lang['bindpw'] = 'Password of above user'; $lang['userscope'] = 'Limit search scope for user search'; $lang['groupscope'] = 'Limit search scope for group search'; -$lang['groupkey'] = 'Group member ship from any user attribute (instead of standard AD groups) e.g. group from department or telephone number'; +$lang['groupkey'] = 'Group membership from any user attribute (instead of standard AD groups) e.g. group from department or telephone number'; $lang['debug'] = 'Display additional debug information on errors'; + + +$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'; \ No newline at end of file -- cgit v1.2.3 From 04e4890db370bdb57201f76581fe3dc0a3adb614 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 7 Jun 2013 13:50:46 +0200 Subject: fix problem when ldap returns no groups FS#2788 --- lib/plugins/authldap/auth.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php index e43c3f828..6a967a6d4 100644 --- a/lib/plugins/authldap/auth.php +++ b/lib/plugins/authldap/auth.php @@ -248,7 +248,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin { } // always add the default group to the list of groups - if(!in_array($conf['defaultgroup'], $info['grps'])) { + if(!$info['grps'] or !in_array($conf['defaultgroup'], $info['grps'])) { $info['grps'][] = $conf['defaultgroup']; } return $info; -- cgit v1.2.3 From 8a285f7fa7f09ae969e12cf4b7bda0f5123bb0fb Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 9 Jun 2013 02:29:27 +0200 Subject: AUTH_PASSWORD_GENERATE event added This is needed to replace the password generator by a plugin implementation. Related to PR #166 and FS#2147 --- lib/plugins/usermanager/admin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php index 01f4a4cdb..445836a50 100644 --- a/lib/plugins/usermanager/admin.php +++ b/lib/plugins/usermanager/admin.php @@ -355,7 +355,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { if ($this->_auth->canDo('modPass')){ if (empty($pass)){ if($INPUT->has('usernotify')){ - $pass = auth_pwgen(); + $pass = auth_pwgen($user); } else { msg($this->lang['add_fail'], -1); return false; @@ -496,7 +496,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { // generate password if left empty and notification is on if($INPUT->has('usernotify') && empty($newpass)){ - $newpass = auth_pwgen(); + $newpass = auth_pwgen($olduser); } if (!empty($newpass) && $this->_auth->canDo('modPass')) -- cgit v1.2.3 From 9d24536dd8ad865dfad2c0259d6b00273e826c12 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 14 Jun 2013 17:11:37 +0200 Subject: correctly count deleted users in plain auth FS#2800 reloading the user list after the delete action will make sure the count is always correct. --- lib/plugins/authplain/auth.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'lib/plugins') diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php index 3416ede89..8c4ce0dd9 100644 --- a/lib/plugins/authplain/auth.php +++ b/lib/plugins/authplain/auth.php @@ -198,13 +198,9 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin { if(empty($deleted)) return 0; $pattern = '/^('.join('|', $deleted).'):/'; + io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true); - if(io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true)) { - foreach($deleted as $user) unset($this->users[$user]); - return count($deleted); - } - - // problem deleting, reload the user list and count the difference + // reload the user list and count the difference $count = count($this->users); $this->_loadUserData(); $count -= count($this->users); -- cgit v1.2.3 From 81ee3b1c4ea669b4278fc1160162c686b82e559c Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 16 Jun 2013 18:09:34 +0200 Subject: Swedish language update --- lib/plugins/acl/lang/sv/lang.php | 1 + lib/plugins/authad/lang/sv/settings.php | 11 ++++ lib/plugins/authldap/lang/sv/settings.php | 16 +++++ lib/plugins/authmysql/lang/sv/settings.php | 25 ++++++++ lib/plugins/authpgsql/lang/sv/settings.php | 28 ++++++++ lib/plugins/config/lang/sv/lang.php | 100 ++++++++++++++++------------- lib/plugins/plugin/lang/sv/lang.php | 2 + lib/plugins/popularity/lang/sv/lang.php | 1 + lib/plugins/revert/lang/sv/lang.php | 1 + lib/plugins/usermanager/lang/sv/lang.php | 1 + 10 files changed, 140 insertions(+), 46 deletions(-) create mode 100644 lib/plugins/authad/lang/sv/settings.php create mode 100644 lib/plugins/authldap/lang/sv/settings.php create mode 100644 lib/plugins/authmysql/lang/sv/settings.php create mode 100644 lib/plugins/authpgsql/lang/sv/settings.php (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/sv/lang.php b/lib/plugins/acl/lang/sv/lang.php index 7f963d5e1..388672fc0 100644 --- a/lib/plugins/acl/lang/sv/lang.php +++ b/lib/plugins/acl/lang/sv/lang.php @@ -16,6 +16,7 @@ * @author Peter Åström * @author Håkan Sandell * @author mikael@mallander.net + * @author Smorkster Andersson smorkster@gmail.com */ $lang['admin_acl'] = 'Hantera behörighetslistan (ACL)'; $lang['acl_group'] = 'Grupp'; diff --git a/lib/plugins/authad/lang/sv/settings.php b/lib/plugins/authad/lang/sv/settings.php new file mode 100644 index 000000000..b1eb1cb96 --- /dev/null +++ b/lib/plugins/authad/lang/sv/settings.php @@ -0,0 +1,11 @@ +min.domän.org'; +$lang['admin_password'] = 'Lösenord för användare ovan.'; +$lang['sso'] = 'Ska Single-Sign-On via Kerberos eller NTLM användas?'; +$lang['use_ssl'] = 'Använda SSL anslutning? Om använd, möjliggör inte TLS nedan.'; +$lang['use_tls'] = 'Använda TLS anslutning? Om använd, möjliggör inte SSL ovan.'; diff --git a/lib/plugins/authldap/lang/sv/settings.php b/lib/plugins/authldap/lang/sv/settings.php new file mode 100644 index 000000000..0fdcad147 --- /dev/null +++ b/lib/plugins/authldap/lang/sv/settings.php @@ -0,0 +1,16 @@ +localhost) eller giltig full URL (ldap://server.tld:389)'; +$lang['port'] = 'LDAP server port, om det inte angavs full URL ovan'; +$lang['usertree'] = 'Specificera var användarkonton finns. T.ex. ou=Användare, dc=server, dc=tld'; +$lang['grouptree'] = 'Specificera var grupper finns. T.ex. ou=Grupp, dc=server, dc=tld'; +$lang['userfilter'] = 'LDAP filter för att söka efter användarkonton. T.ex. (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = 'LDAP filter för att söka efter grupper. T.ex. (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; +$lang['version'] = 'Version av protokoll att använda. Du kan behöva sätta detta till 3'; +$lang['bindpw'] = 'Lösenord för användare ovan'; +$lang['groupkey'] = 'Gruppmedlemskap från något användarattribut (istället för standard AD grupp) t.ex. grupp från avdelning eller telefonnummer'; +$lang['debug'] = 'Visa ytterligare felsökningsinformation vid fel'; diff --git a/lib/plugins/authmysql/lang/sv/settings.php b/lib/plugins/authmysql/lang/sv/settings.php new file mode 100644 index 000000000..027c64025 --- /dev/null +++ b/lib/plugins/authmysql/lang/sv/settings.php @@ -0,0 +1,25 @@ + * @author Håkan Sandell * @author mikael@mallander.net + * @author Smorkster Andersson smorkster@gmail.com */ $lang['menu'] = 'Hantera inställningar'; $lang['error'] = 'Inställningarna uppdaterades inte på grund av ett felaktigt värde. Titta igenom dina ändringar och försök sedan spara igen. @@ -39,6 +40,8 @@ $lang['_anti_spam'] = 'Inställningar för anti-spam'; $lang['_editing'] = 'Inställningar för redigering'; $lang['_links'] = 'Inställningar för länkar'; $lang['_media'] = 'Inställningar för medier'; +$lang['_notifications'] = 'Noterings inställningar'; +$lang['_syndication'] = 'Syndikats inställningar'; $lang['_advanced'] = 'Avancerade inställningar'; $lang['_network'] = 'Nätverksinställningar'; $lang['_plugin_sufix'] = '(inställningar för insticksmodul)'; @@ -46,25 +49,27 @@ $lang['_template_sufix'] = '(inställningar för mall)'; $lang['_msg_setting_undefined'] = 'Ingen inställningsmetadata.'; $lang['_msg_setting_no_class'] = 'Ingen inställningsklass.'; $lang['_msg_setting_no_default'] = 'Inget standardvärde.'; -$lang['fmode'] = 'Filskydd för nya filer'; -$lang['dmode'] = 'Filskydd för nya kataloger'; -$lang['lang'] = 'Språk'; -$lang['basedir'] = 'Grundkatalog'; -$lang['baseurl'] = 'Grund-webbadress'; -$lang['savedir'] = 'Katalog för att spara data'; -$lang['start'] = 'Startsidans namn'; $lang['title'] = 'Wikins namn'; +$lang['start'] = 'Startsidans namn'; +$lang['lang'] = 'Språk'; $lang['template'] = 'Mall'; $lang['license'] = 'Under vilken licens skall ditt innehåll publiceras?'; -$lang['fullpath'] = 'Visa fullständig sökväg i sidfoten'; +$lang['savedir'] = 'Katalog för att spara data'; +$lang['basedir'] = 'Grundkatalog'; +$lang['baseurl'] = 'Grund-webbadress'; +$lang['cookiedir'] = 'Cookie sökväg. Lämna blankt för att använda basurl.'; +$lang['dmode'] = 'Filskydd för nya kataloger'; +$lang['fmode'] = 'Filskydd för nya filer'; +$lang['allowdebug'] = 'Tillåt felsökning stäng av om det inte behövs!'; $lang['recent'] = 'Antal poster under "Nyligen ändrat"'; +$lang['recent_days'] = 'Hur många ändringar som ska sparas (dagar)'; $lang['breadcrumbs'] = 'Antal spår'; $lang['youarehere'] = 'Hierarkiska spår'; +$lang['fullpath'] = 'Visa fullständig sökväg i sidfoten'; $lang['typography'] = 'Aktivera typografiska ersättningar'; -$lang['htmlok'] = 'Tillåt inbäddad HTML'; -$lang['phpok'] = 'Tillåt inbäddad PHP'; $lang['dformat'] = 'Datumformat (se PHP:s strftime-funktion)'; $lang['signature'] = 'Signatur'; +$lang['showuseras'] = 'Vad som skall visas när man visar den användare som senast redigerade en sida'; $lang['toptoclevel'] = 'Toppnivå för innehållsförteckning'; $lang['tocminheads'] = 'Minimalt antal rubriker för att avgöra om innehållsförteckning byggs'; $lang['maxtoclevel'] = 'Maximal nivå för innehållsförteckning'; @@ -72,15 +77,8 @@ $lang['maxseclevel'] = 'Maximal nivå för redigering av rubriker'; $lang['camelcase'] = 'Använd CamelCase för länkar'; $lang['deaccent'] = 'Rena sidnamn'; $lang['useheading'] = 'Använda första rubriken som sidnamn'; -$lang['refcheck'] = 'Kontrollera referenser till mediafiler'; -$lang['refshow'] = 'Antal mediareferenser som ska visas'; -$lang['allowdebug'] = 'Tillåt felsökning stäng av om det inte behövs!'; -$lang['usewordblock'] = 'Blockera spam baserat på ordlista'; -$lang['indexdelay'] = 'Tidsfördröjning före indexering (sek)'; -$lang['relnofollow'] = 'Använd rel="nofollow" för externa länkar'; -$lang['mailguard'] = 'Koda e-postadresser'; -$lang['iexssprotect'] = 'Kontrollera om uppladdade filer innehåller eventuellt skadlig JavaScript eller HTML-kod'; -$lang['showuseras'] = 'Vad som skall visas när man visar den användare som senast redigerade en sida'; +$lang['sneaky_index'] = 'Som standard visar DokuWiki alla namnrymder på indexsidan. Genom att aktivera det här valet döljer man namnrymder som användaren inte har behörighet att läsa. Det kan leda till att man döljer åtkomliga undernamnrymder, och gör indexet oanvändbart med vissa ACL-inställningar.'; +$lang['hidepages'] = 'Dölj matchande sidor (reguljära uttryck)'; $lang['useacl'] = 'Använd behörighetslista (ACL)'; $lang['autopasswd'] = 'Autogenerera lösenord'; $lang['authtype'] = 'System för autentisering'; @@ -89,60 +87,69 @@ $lang['defaultgroup'] = 'Förvald grupp'; $lang['superuser'] = 'Huvudadministratör - en grupp eller en användare med full tillgång till alla sidor och funktioner, oavsett behörighetsinställningars'; $lang['manager'] = 'Administratör -- en grupp eller användare med tillgång till vissa administrativa funktioner.'; $lang['profileconfirm'] = 'Bekräfta ändringarna i profilen med lösenordet'; +$lang['rememberme'] = 'Tillåt permanenta inloggningscookies (kom ihåg mig)'; $lang['disableactions'] = 'Stäng av funktioner i DokuWiki'; $lang['disableactions_check'] = 'Kontroll'; $lang['disableactions_subscription'] = 'Prenumerera/Säg upp prenumeration'; $lang['disableactions_wikicode'] = 'Visa källkod/Exportera råtext'; $lang['disableactions_other'] = 'Andra funktioner (kommaseparerade)'; -$lang['sneaky_index'] = 'Som standard visar DokuWiki alla namnrymder på indexsidan. Genom att aktivera det här valet döljer man namnrymder som användaren inte har behörighet att läsa. Det kan leda till att man döljer åtkomliga undernamnrymder, och gör indexet oanvändbart med vissa ACL-inställningar.'; $lang['auth_security_timeout'] = 'Autentisieringssäkerhets timeout (sekunder)'; $lang['securecookie'] = 'Skall cookies som sätts via HTTPS endast skickas via HTTPS från webbläsaren? Avaktivera detta alternativ endast om inloggningen till din wiki är säkrad med SSL men läsning av wikin är osäkrad.'; -$lang['updatecheck'] = 'Kontrollera uppdateringar och säkerhetsvarningar? DokuWiki behöver kontakta update.dokuwiki.org för den här funktionen.'; -$lang['userewrite'] = 'Använd rena webbadresser'; -$lang['useslash'] = 'Använd snedstreck för att separera namnrymder i webbadresser'; +$lang['usewordblock'] = 'Blockera spam baserat på ordlista'; +$lang['relnofollow'] = 'Använd rel="nofollow" för externa länkar'; +$lang['indexdelay'] = 'Tidsfördröjning före indexering (sek)'; +$lang['mailguard'] = 'Koda e-postadresser'; +$lang['iexssprotect'] = 'Kontrollera om uppladdade filer innehåller eventuellt skadlig JavaScript eller HTML-kod'; $lang['usedraft'] = 'Spara utkast automatiskt under redigering'; -$lang['sepchar'] = 'Ersätt blanktecken i webbadresser med'; -$lang['canonical'] = 'Använd fullständiga webbadresser'; -$lang['autoplural'] = 'Leta efter pluralformer av länkar'; -$lang['compression'] = 'Metod för komprimering av gamla versioner'; -$lang['cachetime'] = 'Maximal livslängd för cache (sek)'; +$lang['htmlok'] = 'Tillåt inbäddad HTML'; +$lang['phpok'] = 'Tillåt inbäddad PHP'; $lang['locktime'] = 'Maximal livslängd för fillåsning (sek)'; +$lang['cachetime'] = 'Maximal livslängd för cache (sek)'; +$lang['target____wiki'] = 'Målfönster för interna länkar'; +$lang['target____interwiki'] = 'Målfönster för interwiki-länkar'; +$lang['target____extern'] = 'Målfönster för externa länkar'; +$lang['target____media'] = 'Målfönster för medialänkar'; +$lang['target____windows'] = 'Målfönster för windowslänkar'; +$lang['refcheck'] = 'Kontrollera referenser till mediafiler'; +$lang['refshow'] = 'Antal mediareferenser som ska visas'; +$lang['gdlib'] = 'Version av GD-biblioteket'; +$lang['im_convert'] = 'Sökväg till ImageMagicks konverteringsverktyg'; +$lang['jpg_quality'] = 'Kvalitet för JPG-komprimering (0-100)'; $lang['fetchsize'] = 'Maximal storlek (bytes) som fetch.php får ladda ned externt'; +$lang['subscribers'] = 'Aktivera stöd för prenumeration på ändringar'; $lang['notify'] = 'Skicka meddelande om ändrade sidor till den här e-postadressen'; $lang['registernotify'] = 'Skicka meddelande om nyregistrerade användare till en här e-postadressen'; $lang['mailfrom'] = 'Avsändaradress i automatiska e-postmeddelanden'; $lang['mailprefix'] = 'Prefix i början på ämnesraden vid automatiska e-postmeddelanden'; +$lang['sitemap'] = 'Skapa Google sitemap (dagar)'; +$lang['rss_type'] = 'Typ av XML-flöde'; +$lang['rss_linkto'] = 'XML-flöde pekar på'; +$lang['rss_content'] = 'Vad ska visas för saker i XML-flödet?'; +$lang['rss_update'] = 'Uppdateringsintervall för XML-flöde (sek)'; +$lang['rss_show_summary'] = 'XML-flöde visar sammanfattning i rubriken'; +$lang['rss_media'] = 'Vilka ändringar ska listas i XML flödet?'; +$lang['updatecheck'] = 'Kontrollera uppdateringar och säkerhetsvarningar? DokuWiki behöver kontakta update.dokuwiki.org för den här funktionen.'; +$lang['userewrite'] = 'Använd rena webbadresser'; +$lang['useslash'] = 'Använd snedstreck för att separera namnrymder i webbadresser'; +$lang['sepchar'] = 'Ersätt blanktecken i webbadresser med'; +$lang['canonical'] = 'Använd fullständiga webbadresser'; +$lang['fnencode'] = 'Metod för kodning av icke-ASCII filnamn.'; +$lang['autoplural'] = 'Leta efter pluralformer av länkar'; +$lang['compression'] = 'Metod för komprimering av gamla versioner'; $lang['gzip_output'] = 'Använd gzip Content-Encoding för xhtml'; -$lang['gdlib'] = 'Version av GD-biblioteket'; -$lang['im_convert'] = 'Sökväg till ImageMagicks konverteringsverktyg'; -$lang['jpg_quality'] = 'Kvalitet för JPG-komprimering (0-100)'; -$lang['subscribers'] = 'Aktivera stöd för prenumeration på ändringar'; $lang['compress'] = 'Komprimera CSS och javascript'; -$lang['hidepages'] = 'Dölj matchande sidor (reguljära uttryck)'; $lang['send404'] = 'Skicka "HTTP 404/Page Not Found" för sidor som inte finns'; -$lang['sitemap'] = 'Skapa Google sitemap (dagar)'; $lang['broken_iua'] = 'Är funktionen ignore_user_abort trasig på ditt system? Det kan i så fall leda till att indexering av sökningar inte fungerar. Detta är ett känt problem med IIS+PHP/CGI. Se Bug 852 för mer info.'; $lang['xsendfile'] = 'Använd X-Sendfile huvudet för att låta webservern leverera statiska filer? Din webserver behöver stöd för detta.'; $lang['renderer_xhtml'] = 'Generera för användning i huvudwikipresentation (xhtml)'; $lang['renderer__core'] = '%s (dokuwiki core)'; $lang['renderer__plugin'] = '%s (plugin)'; -$lang['rememberme'] = 'Tillåt permanenta inloggningscookies (kom ihåg mig)'; -$lang['rss_type'] = 'Typ av XML-flöde'; -$lang['rss_linkto'] = 'XML-flöde pekar på'; -$lang['rss_content'] = 'Vad ska visas för saker i XML-flödet?'; -$lang['rss_update'] = 'Uppdateringsintervall för XML-flöde (sek)'; -$lang['recent_days'] = 'Hur många ändringar som ska sparas (dagar)'; -$lang['rss_show_summary'] = 'XML-flöde visar sammanfattning i rubriken'; -$lang['target____wiki'] = 'Målfönster för interna länkar'; -$lang['target____interwiki'] = 'Målfönster för interwiki-länkar'; -$lang['target____extern'] = 'Målfönster för externa länkar'; -$lang['target____media'] = 'Målfönster för medialänkar'; -$lang['target____windows'] = 'Målfönster för windowslänkar'; $lang['proxy____host'] = 'Proxyserver'; $lang['proxy____port'] = 'Proxyport'; $lang['proxy____user'] = 'Användarnamn för proxy'; $lang['proxy____pass'] = 'Lösenord för proxy'; $lang['proxy____ssl'] = 'Använd ssl för anslutning till proxy'; +$lang['proxy____except'] = 'Regular expression för matchning av URL som proxy ska hoppa över.'; $lang['safemodehack'] = 'Aktivera safemode hack'; $lang['ftp____host'] = 'FTP-server för safemode hack'; $lang['ftp____port'] = 'FTP-port för safemode hack'; @@ -190,3 +197,4 @@ $lang['useheading_o_0'] = 'Aldrig'; $lang['useheading_o_navigation'] = 'Endst navigering'; $lang['useheading_o_content'] = 'Endast innehåll i wiki'; $lang['useheading_o_1'] = 'Alltid'; +$lang['readdircache'] = 'Max ålder för readdir cache (sek)'; diff --git a/lib/plugins/plugin/lang/sv/lang.php b/lib/plugins/plugin/lang/sv/lang.php index 5892e42b5..a8578c03c 100644 --- a/lib/plugins/plugin/lang/sv/lang.php +++ b/lib/plugins/plugin/lang/sv/lang.php @@ -16,6 +16,7 @@ * @author Peter Åström * @author Håkan Sandell * @author mikael@mallander.net + * @author Smorkster Andersson smorkster@gmail.com */ $lang['menu'] = 'Hantera insticksmoduler'; $lang['download'] = 'Ladda ned och installera en ny insticksmodul'; @@ -61,3 +62,4 @@ $lang['enabled'] = 'Tilläggsmodulen %s är aktiverad.'; $lang['notenabled'] = 'Tilläggsmodulen %s kunde inte aktiveras, kontrollera filrättigheterna.'; $lang['disabled'] = 'Tiläggsmodulen %s är avaktiverad.'; $lang['notdisabled'] = 'Tilläggsmodulen %s kunde inte avaktiveras, kontrollera filrättigheterna.'; +$lang['packageinstalled'] = 'Tilläggs paket (%d tillägg: %s) har installerats.'; diff --git a/lib/plugins/popularity/lang/sv/lang.php b/lib/plugins/popularity/lang/sv/lang.php index 8be542e7f..90d820ba0 100644 --- a/lib/plugins/popularity/lang/sv/lang.php +++ b/lib/plugins/popularity/lang/sv/lang.php @@ -13,6 +13,7 @@ * @author Peter Åström * @author Håkan Sandell * @author mikael@mallander.net + * @author Smorkster Andersson smorkster@gmail.com */ $lang['name'] = 'Popularitets-feedback (det kan ta en stund att ladda sidan)'; $lang['submit'] = 'Sänd data'; diff --git a/lib/plugins/revert/lang/sv/lang.php b/lib/plugins/revert/lang/sv/lang.php index 29c6702eb..4a727b339 100644 --- a/lib/plugins/revert/lang/sv/lang.php +++ b/lib/plugins/revert/lang/sv/lang.php @@ -15,6 +15,7 @@ * @author Peter Åström * @author Håkan Sandell * @author mikael@mallander.net + * @author Smorkster Andersson smorkster@gmail.com */ $lang['menu'] = 'Hantera återställningar'; $lang['filter'] = 'Sök efter spamsidor'; diff --git a/lib/plugins/usermanager/lang/sv/lang.php b/lib/plugins/usermanager/lang/sv/lang.php index bd747927e..f8b530d90 100644 --- a/lib/plugins/usermanager/lang/sv/lang.php +++ b/lib/plugins/usermanager/lang/sv/lang.php @@ -15,6 +15,7 @@ * @author Peter Åström * @author Håkan Sandell * @author mikael@mallander.net + * @author Smorkster Andersson smorkster@gmail.com */ $lang['menu'] = 'Hantera användare'; $lang['noauth'] = '(användarautentisering ej tillgänlig)'; -- cgit v1.2.3 From 603a638180749a2925e589bc0c13f19899b6c732 Mon Sep 17 00:00:00 2001 From: Klap-in Date: Tue, 18 Jun 2013 21:18:20 +0200 Subject: add newest plugin types to info plugin --- lib/plugins/info/syntax.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/info/syntax.php b/lib/plugins/info/syntax.php index 97b28076b..5e7543603 100644 --- a/lib/plugins/info/syntax.php +++ b/lib/plugins/info/syntax.php @@ -81,6 +81,12 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { case 'helperplugins': $this->_plugins_xhtml('helper', $renderer); break; + case 'authplugins': + $this->_plugins_xhtml('auth', $renderer); + break; + case 'remoteplugins': + $this->_plugins_xhtml('remote', $renderer); + break; case 'helpermethods': $this->_helpermethods_xhtml($renderer); break; -- cgit v1.2.3 From b243b168571b08a674d34701cfbb7ac0a03239e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volker=20B=C3=B6dker?= Date: Fri, 12 Jul 2013 17:04:41 +0200 Subject: Informal German language update --- lib/plugins/acl/lang/de-informal/lang.php | 1 + lib/plugins/authad/lang/de-informal/settings.php | 1 + lib/plugins/authldap/lang/de-informal/settings.php | 6 ++++++ lib/plugins/authmysql/lang/de-informal/settings.php | 1 + lib/plugins/authpgsql/lang/de-informal/settings.php | 1 + lib/plugins/config/lang/de-informal/lang.php | 1 + lib/plugins/plugin/lang/de-informal/lang.php | 1 + lib/plugins/popularity/lang/de-informal/lang.php | 1 + lib/plugins/revert/lang/de-informal/lang.php | 1 + lib/plugins/usermanager/lang/de-informal/lang.php | 1 + 10 files changed, 15 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/acl/lang/de-informal/lang.php b/lib/plugins/acl/lang/de-informal/lang.php index 8b1416137..45a993982 100644 --- a/lib/plugins/acl/lang/de-informal/lang.php +++ b/lib/plugins/acl/lang/de-informal/lang.php @@ -9,6 +9,7 @@ * @author Christian Wichmann * @author Pierre Corell * @author Frank Loizzi + * @author Volker Bödker */ $lang['admin_acl'] = 'Zugangsverwaltung'; $lang['acl_group'] = 'Gruppe'; diff --git a/lib/plugins/authad/lang/de-informal/settings.php b/lib/plugins/authad/lang/de-informal/settings.php index 4d0b93e5d..a458617b8 100644 --- a/lib/plugins/authad/lang/de-informal/settings.php +++ b/lib/plugins/authad/lang/de-informal/settings.php @@ -4,6 +4,7 @@ * * @author Frank Loizzi * @author Matthias Schulte + * @author Volker Bödker */ $lang['account_suffix'] = 'Dein Account-Suffix. Z.B. @my.domain.org'; $lang['base_dn'] = 'Dein Base-DN. Z.B. DC=my,DC=domain,DC=org'; diff --git a/lib/plugins/authldap/lang/de-informal/settings.php b/lib/plugins/authldap/lang/de-informal/settings.php index fa0fc1521..15e4d8129 100644 --- a/lib/plugins/authldap/lang/de-informal/settings.php +++ b/lib/plugins/authldap/lang/de-informal/settings.php @@ -4,6 +4,7 @@ * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Matthias Schulte + * @author Volker Bödker */ $lang['server'] = 'Adresse zum LDAP-Server. Entweder als Hostname (localhost) oder als FQDN (ldap://server.tld:389).'; $lang['port'] = 'Port des LDAP-Servers, falls kein Port angegeben wurde.'; @@ -14,9 +15,14 @@ $lang['groupfilter'] = 'LDAP-Filter, um die Benutzergruppen zu suchen. $lang['version'] = 'Zu verwendende Protokollversion von LDAP.'; $lang['starttls'] = 'Verbindung über TLS aufbauen?'; $lang['referrals'] = 'Weiterverfolgen von LDAP-Referrals (Verweise)?'; +$lang['deref'] = 'Wie sollen Aliasse derefernziert werden?'; $lang['binddn'] = 'DN eines optionalen Benutzers, wenn der anonyme Zugriff nicht ausreichend ist. Zum Beispiel: cn=admin, dc=my, dc=home.'; $lang['bindpw'] = 'Passwort des angegebenen Benutzers.'; $lang['userscope'] = 'Die Suchweite nach Benutzeraccounts.'; $lang['groupscope'] = 'Die Suchweite nach Benutzergruppen.'; $lang['groupkey'] = 'Gruppieren der Benutzeraccounts anhand eines beliebigen Benutzerattributes z. B. Telefonnummer oder Abteilung, anstelle der Standard-Gruppen).'; $lang['debug'] = 'Debug-Informationen beim Auftreten von Fehlern anzeigen?'; +$lang['deref_o_0'] = 'LDAP_DEREF_NIEMALS'; +$lang['deref_o_1'] = 'LDAP_DEREF_SUCHEN'; +$lang['deref_o_2'] = 'LDAP_DEREF_FINDEN'; +$lang['deref_o_3'] = 'LDAP_DEREF_IMMER'; diff --git a/lib/plugins/authmysql/lang/de-informal/settings.php b/lib/plugins/authmysql/lang/de-informal/settings.php index 0c9bc85fe..540979cf4 100644 --- a/lib/plugins/authmysql/lang/de-informal/settings.php +++ b/lib/plugins/authmysql/lang/de-informal/settings.php @@ -4,6 +4,7 @@ * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Matthias Schulte + * @author Volker Bödker */ $lang['server'] = 'MySQL-Server'; $lang['user'] = 'Benutzername für den Zugriff auf den MySQL-Server.'; diff --git a/lib/plugins/authpgsql/lang/de-informal/settings.php b/lib/plugins/authpgsql/lang/de-informal/settings.php index 4c80245d6..d864d14d4 100644 --- a/lib/plugins/authpgsql/lang/de-informal/settings.php +++ b/lib/plugins/authpgsql/lang/de-informal/settings.php @@ -4,6 +4,7 @@ * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Matthias Schulte + * @author Volker Bödker */ $lang['server'] = 'PostgreSQL-Server'; $lang['port'] = 'Port des PostgreSQL-Servers.'; diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php index ac61e4c85..10fa363dc 100644 --- a/lib/plugins/config/lang/de-informal/lang.php +++ b/lib/plugins/config/lang/de-informal/lang.php @@ -10,6 +10,7 @@ * @author Pierre Corell * @author Frank Loizzi * @author Mateng Schimmerlos + * @author Volker Bödker */ $lang['menu'] = 'Konfiguration'; $lang['error'] = 'Konfiguration wurde nicht aktualisiert auf Grund eines ungültigen Wertes. Bitte überprüfe deine Änderungen und versuche es erneut.
Die/der ungültige(n) Wert(e) werden durch eine rote Umrandung hervorgehoben.'; diff --git a/lib/plugins/plugin/lang/de-informal/lang.php b/lib/plugins/plugin/lang/de-informal/lang.php index a082218d8..5d1649434 100644 --- a/lib/plugins/plugin/lang/de-informal/lang.php +++ b/lib/plugins/plugin/lang/de-informal/lang.php @@ -9,6 +9,7 @@ * @author Christian Wichmann * @author Pierre Corell * @author Frank Loizzi + * @author Volker Bödker */ $lang['menu'] = 'Plugins verwalten'; $lang['download'] = 'Herunterladen und installieren einer neuen Erweiterung'; diff --git a/lib/plugins/popularity/lang/de-informal/lang.php b/lib/plugins/popularity/lang/de-informal/lang.php index 513a1b6e1..0abf90b0b 100644 --- a/lib/plugins/popularity/lang/de-informal/lang.php +++ b/lib/plugins/popularity/lang/de-informal/lang.php @@ -9,6 +9,7 @@ * @author Christian Wichmann * @author Pierre Corell * @author Frank Loizzi + * @author Volker Bödker */ $lang['name'] = 'Popularitätsrückmeldung (kann eine Weile dauern, bis es fertig geladen wurde)'; $lang['submit'] = 'Sende Daten'; diff --git a/lib/plugins/revert/lang/de-informal/lang.php b/lib/plugins/revert/lang/de-informal/lang.php index 3a96429c7..b702e7727 100644 --- a/lib/plugins/revert/lang/de-informal/lang.php +++ b/lib/plugins/revert/lang/de-informal/lang.php @@ -9,6 +9,7 @@ * @author Christian Wichmann * @author Pierre Corell * @author Frank Loizzi + * @author Volker Bödker */ $lang['menu'] = 'Zurückstellungsmanager'; $lang['filter'] = 'Durchsuche als Spam markierte Seiten'; diff --git a/lib/plugins/usermanager/lang/de-informal/lang.php b/lib/plugins/usermanager/lang/de-informal/lang.php index 07390854f..791cfa74f 100644 --- a/lib/plugins/usermanager/lang/de-informal/lang.php +++ b/lib/plugins/usermanager/lang/de-informal/lang.php @@ -9,6 +9,7 @@ * @author Christian Wichmann * @author Pierre Corell * @author Frank Loizzi + * @author Volker Bödker */ $lang['menu'] = 'Benutzerverwaltung'; $lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)'; -- cgit v1.2.3 From dbd5b4caeac5f2f45d05da38f1a54282d972b3ce Mon Sep 17 00:00:00 2001 From: Victor Westmann Date: Fri, 12 Jul 2013 17:06:30 +0200 Subject: Brazilian Portuguese language update --- lib/plugins/authad/lang/pt-br/settings.php | 2 ++ lib/plugins/authldap/lang/pt-br/settings.php | 7 +++++++ 2 files changed, 9 insertions(+) (limited to 'lib/plugins') diff --git a/lib/plugins/authad/lang/pt-br/settings.php b/lib/plugins/authad/lang/pt-br/settings.php index 29f8db4ad..308d122dd 100644 --- a/lib/plugins/authad/lang/pt-br/settings.php +++ b/lib/plugins/authad/lang/pt-br/settings.php @@ -7,8 +7,10 @@ $lang['account_suffix'] = 'Sufixo de sua conta. Eg. @meu.domínio.org'; $lang['base_dn'] = 'Sua base DN. Eg. DC=meu,DC=domínio,DC=org'; $lang['domain_controllers'] = 'Uma lista de controles de domínios separada por vírgulas. Eg. srv1.domínio.org,srv2.domínio.org'; +$lang['admin_username'] = 'Um usuário com privilégios do Active Directory com acesso a todos os dados dos outros usuários. Opcional, mas necessário para certas ações como enviar emails de inscrição.'; $lang['admin_password'] = 'A senha do usuário acima.'; $lang['sso'] = 'Usar Single-Sign-On através do Kerberos ou NTLM?'; +$lang['real_primarygroup'] = 'Deverá o grupo real primário ser resolvido ao invés de assumir "Usuários de domínio" (mais lento) '; $lang['use_ssl'] = 'Usar conexão SSL? Se usar, não habilitar TLS abaixo.'; $lang['use_tls'] = 'Usar conexão TLS? se usar, não habilitar SSL acima.'; $lang['debug'] = 'Mostrar saída adicional de depuração em mensagens de erros?'; diff --git a/lib/plugins/authldap/lang/pt-br/settings.php b/lib/plugins/authldap/lang/pt-br/settings.php index daf9efd00..70b68b289 100644 --- a/lib/plugins/authldap/lang/pt-br/settings.php +++ b/lib/plugins/authldap/lang/pt-br/settings.php @@ -8,12 +8,19 @@ $lang['server'] = 'Seu servidor LDAP. Ou hostname (localhos $lang['port'] = 'Porta LDAP do servidor se nenhuma URL completa tiver sido fornecida acima'; $lang['usertree'] = 'Onde encontrar as contas de usuários. Eg. ou=Pessoas, dc=servidor, dc=tld'; $lang['grouptree'] = 'Onde encontrar os grupos de usuários. Eg. ou=Pessoas, dc=servidor, dc=tld'; +$lang['userfilter'] = 'Filtro do LDAP para procurar por contas de usuários. Eg. (&(uid=%{user})(objectClass=posixAccount))'; +$lang['groupfilter'] = 'Filtro do LDAP 0ara procurar por grupos. Eg. (&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))'; $lang['version'] = 'A versão do protocolo para usar. Você talvez deva definir isto para 3'; $lang['starttls'] = 'Usar conexões TLS?'; $lang['referrals'] = 'Permitir referências serem seguidas?'; +$lang['deref'] = 'Como respeitar aliases ?'; $lang['binddn'] = 'DN de um vínculo opcional de usuário se vínculo anônimo não for suficiente. Eg. cn=admin, dc=my, dc=home'; $lang['bindpw'] = 'Senha do usuário acima'; $lang['userscope'] = 'Limitar escopo da busca para busca de usuário'; $lang['groupscope'] = 'Limitar escopo da busca para busca de grupo'; $lang['groupkey'] = 'Membro de grupo vem de qualquer atributo do usuário (ao invés de grupos padrões AD) e.g. departamento de grupo ou número de telefone'; $lang['debug'] = 'Mostrar informações adicionais de depuração em erros'; +$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'; -- cgit v1.2.3