diff options
Diffstat (limited to 'lib/plugins/usermanager')
46 files changed, 1107 insertions, 252 deletions
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php index 445836a50..c4d71cb22 100644 --- a/lib/plugins/usermanager/admin.php +++ b/lib/plugins/usermanager/admin.php @@ -21,58 +21,65 @@ if(!defined('DOKU_PLUGIN_IMAGES')) define('DOKU_PLUGIN_IMAGES',DOKU_BASE.'lib/pl */ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { - var $_auth = null; // auth object - var $_user_total = 0; // number of registered users - var $_filter = array(); // user selection filter(s) - var $_start = 0; // index of first user to be displayed - var $_last = 0; // index of the last user to be displayed - var $_pagesize = 20; // number of users to list on one page - var $_edit_user = ''; // set to user selected for editing - var $_edit_userdata = array(); - var $_disabled = ''; // if disabled set to explanatory string + protected $_auth = null; // auth object + protected $_user_total = 0; // number of registered users + protected $_filter = array(); // user selection filter(s) + protected $_start = 0; // index of first user to be displayed + protected $_last = 0; // index of the last user to be displayed + protected $_pagesize = 20; // number of users to list on one page + protected $_edit_user = ''; // set to user selected for editing + protected $_edit_userdata = array(); + protected $_disabled = ''; // if disabled set to explanatory string + protected $_import_failures = array(); /** * Constructor */ - function admin_plugin_usermanager(){ + public function admin_plugin_usermanager(){ + /** @var DokuWiki_Auth_Plugin $auth */ global $auth; $this->setupLocale(); if (!isset($auth)) { - $this->disabled = $this->lang['noauth']; + $this->_disabled = $this->lang['noauth']; } else if (!$auth->canDo('getUsers')) { - $this->disabled = $this->lang['nosupport']; + $this->_disabled = $this->lang['nosupport']; } else { - // we're good to go - $this->_auth = & $auth; + // we're good to go + $this->_auth = & $auth; } + + // attempt to retrieve any import failures from the session + if ($_SESSION['import_failures']){ + $this->_import_failures = $_SESSION['import_failures']; + } } /** - * return prompt for admin menu - */ - function getMenuText($language) { + * Return prompt for admin menu + */ + public function getMenuText($language) { if (!is_null($this->_auth)) return parent::getMenuText($language); - return $this->getLang('menu').' '.$this->disabled; + return $this->getLang('menu').' '.$this->_disabled; } /** * return sort order for position in admin menu */ - function getMenuSort() { + public function getMenuSort() { return 2; } /** - * handle user request + * Handle user request */ - function handle() { + public function handle() { global $INPUT; if (is_null($this->_auth)) return false; @@ -89,36 +96,40 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { } if ($cmd != "search") { - $this->_start = $INPUT->int('start', 0); - $this->_filter = $this->_retrieveFilter(); + $this->_start = $INPUT->int('start', 0); + $this->_filter = $this->_retrieveFilter(); } switch($cmd){ - case "add" : $this->_addUser(); break; - case "delete" : $this->_deleteUser(); break; - case "modify" : $this->_modifyUser(); break; - case "edit" : $this->_editUser($param); break; - case "search" : $this->_setFilter($param); - $this->_start = 0; - break; + case "add" : $this->_addUser(); break; + case "delete" : $this->_deleteUser(); break; + case "modify" : $this->_modifyUser(); break; + case "edit" : $this->_editUser($param); break; + case "search" : $this->_setFilter($param); + $this->_start = 0; + break; + case "export" : $this->_export(); break; + case "import" : $this->_import(); break; + case "importfails" : $this->_downloadImportFailures(); break; } $this->_user_total = $this->_auth->canDo('getUserCount') ? $this->_auth->getUserCount($this->_filter) : -1; // page handling switch($cmd){ - case 'start' : $this->_start = 0; break; - case 'prev' : $this->_start -= $this->_pagesize; break; - case 'next' : $this->_start += $this->_pagesize; break; - case 'last' : $this->_start = $this->_user_total; break; + case 'start' : $this->_start = 0; break; + case 'prev' : $this->_start -= $this->_pagesize; break; + case 'next' : $this->_start += $this->_pagesize; break; + case 'last' : $this->_start = $this->_user_total; break; } $this->_validatePagination(); + return true; } /** - * output appropriate html + * Output appropriate html */ - function html() { + public function html() { global $ID; if(is_null($this->_auth)) { @@ -127,12 +138,12 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { } $user_list = $this->_auth->retrieveUsers($this->_start, $this->_pagesize, $this->_filter); - $users = array_keys($user_list); $page_buttons = $this->_pagination(); $delete_disable = $this->_auth->canDo('delUser') ? '' : 'disabled="disabled"'; $editable = $this->_auth->canDo('UserMod'); + $export_label = empty($this->_filter) ? $this->lang['export_all'] : $this->lang['export_filtered']; print $this->locale_xhtml('intro'); print $this->locale_xhtml('list'); @@ -141,9 +152,14 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { ptln("<div class=\"level2\">"); if ($this->_user_total > 0) { - ptln("<p>".sprintf($this->lang['summary'],$this->_start+1,$this->_last,$this->_user_total,$this->_auth->getUserCount())."</p>"); + ptln("<p>".sprintf($this->lang['summary'],$this->_start+1,$this->_last,$this->_user_total,$this->_auth->getUserCount())."</p>"); } else { - ptln("<p>".sprintf($this->lang['nonefound'],$this->_auth->getUserCount())."</p>"); + if($this->_user_total < 0) { + $allUserTotal = 0; + } else { + $allUserTotal = $this->_auth->getUserCount(); + } + ptln("<p>".sprintf($this->lang['nonefound'], $allUserTotal)."</p>"); } ptln("<form action=\"".wl($ID)."\" method=\"post\">"); formSecurityToken(); @@ -164,25 +180,31 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { ptln(" </thead>"); if ($this->_user_total) { - ptln(" <tbody>"); - foreach ($user_list as $user => $userinfo) { - extract($userinfo); - $groups = join(', ',$grps); - ptln(" <tr class=\"user_info\">"); - ptln(" <td class=\"centeralign\"><input type=\"checkbox\" name=\"delete[".$user."]\" ".$delete_disable." /></td>"); - if ($editable) { - ptln(" <td><a href=\"".wl($ID,array('fn[edit]['.hsc($user).']' => 1, - 'do' => 'admin', - 'page' => 'usermanager', - 'sectok' => getSecurityToken())). - "\" title=\"".$this->lang['edit_prompt']."\">".hsc($user)."</a></td>"); - } else { - ptln(" <td>".hsc($user)."</td>"); + ptln(" <tbody>"); + foreach ($user_list as $user => $userinfo) { + extract($userinfo); + /** + * @var string $name + * @var string $pass + * @var string $mail + * @var array $grps + */ + $groups = join(', ',$grps); + ptln(" <tr class=\"user_info\">"); + ptln(" <td class=\"centeralign\"><input type=\"checkbox\" name=\"delete[".$user."]\" ".$delete_disable." /></td>"); + if ($editable) { + ptln(" <td><a href=\"".wl($ID,array('fn[edit]['.hsc($user).']' => 1, + 'do' => 'admin', + 'page' => 'usermanager', + 'sectok' => getSecurityToken())). + "\" title=\"".$this->lang['edit_prompt']."\">".hsc($user)."</a></td>"); + } else { + ptln(" <td>".hsc($user)."</td>"); + } + ptln(" <td>".hsc($name)."</td><td>".hsc($mail)."</td><td>".hsc($groups)."</td>"); + ptln(" </tr>"); } - ptln(" <td>".hsc($name)."</td><td>".hsc($mail)."</td><td>".hsc($groups)."</td>"); - ptln(" </tr>"); - } - ptln(" </tbody>"); + ptln(" </tbody>"); } ptln(" <tbody>"); @@ -196,7 +218,10 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { ptln(" <input type=\"submit\" name=\"fn[next]\" ".$page_buttons['next']." class=\"button\" value=\"".$this->lang['next']."\" />"); ptln(" <input type=\"submit\" name=\"fn[last]\" ".$page_buttons['last']." class=\"button\" value=\"".$this->lang['last']."\" />"); ptln(" </span>"); - ptln(" <input type=\"submit\" name=\"fn[search][clear]\" class=\"button\" value=\"".$this->lang['clear']."\" />"); + if (!empty($this->_filter)) { + ptln(" <input type=\"submit\" name=\"fn[search][clear]\" class=\"button\" value=\"".$this->lang['clear']."\" />"); + } + ptln(" <input type=\"submit\" name=\"fn[export]\" class=\"button\" value=\"".$export_label."\" />"); ptln(" <input type=\"hidden\" name=\"do\" value=\"admin\" />"); ptln(" <input type=\"hidden\" name=\"page\" value=\"usermanager\" />"); @@ -213,34 +238,43 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { $style = $this->_edit_user ? " class=\"edit_user\"" : ""; if ($this->_auth->canDo('addUser')) { - ptln("<div".$style.">"); - print $this->locale_xhtml('add'); - ptln(" <div class=\"level2\">"); + ptln("<div".$style.">"); + print $this->locale_xhtml('add'); + ptln(" <div class=\"level2\">"); - $this->_htmlUserForm('add',null,array(),4); + $this->_htmlUserForm('add',null,array(),4); - ptln(" </div>"); - ptln("</div>"); + ptln(" </div>"); + ptln("</div>"); } if($this->_edit_user && $this->_auth->canDo('UserMod')){ - ptln("<div".$style." id=\"scroll__here\">"); - print $this->locale_xhtml('edit'); - ptln(" <div class=\"level2\">"); + ptln("<div".$style." id=\"scroll__here\">"); + print $this->locale_xhtml('edit'); + ptln(" <div class=\"level2\">"); - $this->_htmlUserForm('modify',$this->_edit_user,$this->_edit_userdata,4); + $this->_htmlUserForm('modify',$this->_edit_user,$this->_edit_userdata,4); - ptln(" </div>"); - ptln("</div>"); + ptln(" </div>"); + ptln("</div>"); + } + + if ($this->_auth->canDo('addUser')) { + $this->_htmlImportForm(); } ptln("</div>"); + return true; } - /** - * @todo disable fields which the backend can't change + * Display form to add or modify a user + * + * @param string $cmd 'add' or 'modify' + * @param string $user id of user + * @param array $userdata array with name, mail, pass and grps + * @param int $indent */ - function _htmlUserForm($cmd,$user='',$userdata=array(),$indent=0) { + protected function _htmlUserForm($cmd,$user='',$userdata=array(),$indent=0) { global $conf; global $ID; @@ -248,10 +282,10 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { $notes = array(); if ($user) { - extract($userdata); - if (!empty($grps)) $groups = join(',',$grps); + extract($userdata); + if (!empty($grps)) $groups = join(',',$grps); } else { - $notes[] = sprintf($this->lang['note_group'],$conf['defaultgroup']); + $notes[] = sprintf($this->lang['note_group'],$conf['defaultgroup']); } ptln("<form action=\"".wl($ID)."\" method=\"post\">",$indent); @@ -270,12 +304,14 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { $this->_htmlInputField($cmd."_usergroups","usergroups",$this->lang["user_groups"],$groups,$this->_auth->canDo("modGroups"),$indent+6); if ($this->_auth->canDo("modPass")) { - $notes[] = $this->lang['note_pass']; - if ($user) { - $notes[] = $this->lang['note_notify']; - } + if ($cmd == 'add') { + $notes[] = $this->lang['note_pass']; + } + if ($user) { + $notes[] = $this->lang['note_notify']; + } - ptln("<tr><td><label for=\"".$cmd."_usernotify\" >".$this->lang["user_notify"].": </label></td><td><input type=\"checkbox\" id=\"".$cmd."_usernotify\" name=\"usernotify\" value=\"1\" /></td></tr>", $indent); + ptln("<tr><td><label for=\"".$cmd."_usernotify\" >".$this->lang["user_notify"].": </label></td><td><input type=\"checkbox\" id=\"".$cmd."_usernotify\" name=\"usernotify\" value=\"1\" /></td></tr>", $indent); } ptln(" </tbody>",$indent); @@ -296,27 +332,43 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { ptln(" </tr>",$indent); ptln(" </tbody>",$indent); ptln(" </table>",$indent); - ptln(" </div>",$indent); - - foreach ($notes as $note) - ptln("<div class=\"fn\">".$note."</div>",$indent); + if ($notes) { + ptln(" <ul class=\"notes\">"); + foreach ($notes as $note) { + ptln(" <li><span class=\"li\">".$note."</span></li>",$indent); + } + ptln(" </ul>"); + } + ptln(" </div>",$indent); ptln("</form>",$indent); } - function _htmlInputField($id, $name, $label, $value, $cando, $indent=0) { + /** + * Prints a inputfield + * + * @param string $id + * @param string $name + * @param string $label + * @param string $value + * @param bool $cando whether auth backend is capable to do this action + * @param int $indent + */ + protected function _htmlInputField($id, $name, $label, $value, $cando, $indent=0) { $class = $cando ? '' : ' class="disabled"'; echo str_pad('',$indent); if($name == 'userpass'){ $fieldtype = 'password'; $autocomp = 'autocomplete="off"'; + }elseif($name == 'usermail'){ + $fieldtype = 'email'; + $autocomp = ''; }else{ $fieldtype = 'text'; $autocomp = ''; } - echo "<tr $class>"; echo "<td><label for=\"$id\" >$label: </label></td>"; echo "<td>"; @@ -330,21 +382,95 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { echo "</tr>"; } - function _htmlFilter($key) { + /** + * Returns htmlescaped filter value + * + * @param string $key name of search field + * @return string html escaped value + */ + protected function _htmlFilter($key) { if (empty($this->_filter)) return ''; return (isset($this->_filter[$key]) ? hsc($this->_filter[$key]) : ''); } - function _htmlFilterSettings($indent=0) { + /** + * Print hidden inputs with the current filter values + * + * @param int $indent + */ + protected function _htmlFilterSettings($indent=0) { ptln("<input type=\"hidden\" name=\"start\" value=\"".$this->_start."\" />",$indent); foreach ($this->_filter as $key => $filter) { - ptln("<input type=\"hidden\" name=\"filter[".$key."]\" value=\"".hsc($filter)."\" />",$indent); + ptln("<input type=\"hidden\" name=\"filter[".$key."]\" value=\"".hsc($filter)."\" />",$indent); } } - function _addUser(){ + /** + * Print import form and summary of previous import + * + * @param int $indent + */ + protected function _htmlImportForm($indent=0) { + global $ID; + + $failure_download_link = wl($ID,array('do'=>'admin','page'=>'usermanager','fn[importfails]'=>1)); + + ptln('<div class="level2 import_users">',$indent); + print $this->locale_xhtml('import'); + ptln(' <form action="'.wl($ID).'" method="post" enctype="multipart/form-data">',$indent); + formSecurityToken(); + ptln(' <label>'.$this->lang['import_userlistcsv'].'<input type="file" name="import" /></label>',$indent); + ptln(' <input type="submit" name="fn[import]" value="'.$this->lang['import'].'" />',$indent); + ptln(' <input type="hidden" name="do" value="admin" />',$indent); + ptln(' <input type="hidden" name="page" value="usermanager" />',$indent); + + $this->_htmlFilterSettings($indent+4); + ptln(' </form>',$indent); + ptln('</div>'); + + // list failures from the previous import + if ($this->_import_failures) { + $digits = strlen(count($this->_import_failures)); + ptln('<div class="level3 import_failures">',$indent); + ptln(' <h3>'.$this->lang['import_header'].'</h3>'); + ptln(' <table class="import_failures">',$indent); + ptln(' <thead>',$indent); + ptln(' <tr>',$indent); + ptln(' <th class="line">'.$this->lang['line'].'</th>',$indent); + ptln(' <th class="error">'.$this->lang['error'].'</th>',$indent); + ptln(' <th class="userid">'.$this->lang['user_id'].'</th>',$indent); + ptln(' <th class="username">'.$this->lang['user_name'].'</th>',$indent); + ptln(' <th class="usermail">'.$this->lang['user_mail'].'</th>',$indent); + ptln(' <th class="usergroups">'.$this->lang['user_groups'].'</th>',$indent); + ptln(' </tr>',$indent); + ptln(' </thead>',$indent); + ptln(' <tbody>',$indent); + foreach ($this->_import_failures as $line => $failure) { + ptln(' <tr>',$indent); + ptln(' <td class="lineno"> '.sprintf('%0'.$digits.'d',$line).' </td>',$indent); + ptln(' <td class="error">' .$failure['error'].' </td>', $indent); + ptln(' <td class="field userid"> '.hsc($failure['user'][0]).' </td>',$indent); + ptln(' <td class="field username"> '.hsc($failure['user'][2]).' </td>',$indent); + ptln(' <td class="field usermail"> '.hsc($failure['user'][3]).' </td>',$indent); + ptln(' <td class="field usergroups"> '.hsc($failure['user'][4]).' </td>',$indent); + ptln(' </tr>',$indent); + } + ptln(' </tbody>',$indent); + ptln(' </table>',$indent); + ptln(' <p><a href="'.$failure_download_link.'">'.$this->lang['import_downloadfailures'].'</a></p>'); + ptln('</div>'); + } + + } + + /** + * Add an user to auth backend + * + * @return bool whether succesful + */ + protected function _addUser(){ global $INPUT; if (!checkSecurityToken()) return false; if (!$this->_auth->canDo('addUser')) return false; @@ -353,61 +479,63 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { if (empty($user)) return false; if ($this->_auth->canDo('modPass')){ - if (empty($pass)){ - if($INPUT->has('usernotify')){ - $pass = auth_pwgen($user); - } else { - msg($this->lang['add_fail'], -1); - return false; + if (empty($pass)){ + if($INPUT->has('usernotify')){ + $pass = auth_pwgen($user); + } else { + msg($this->lang['add_fail'], -1); + return false; + } } - } } else { - if (!empty($pass)){ - msg($this->lang['add_fail'], -1); - return false; - } + if (!empty($pass)){ + msg($this->lang['add_fail'], -1); + return false; + } } if ($this->_auth->canDo('modName')){ - if (empty($name)){ - msg($this->lang['add_fail'], -1); - return false; - } + if (empty($name)){ + msg($this->lang['add_fail'], -1); + return false; + } } else { - if (!empty($name)){ - return false; - } + if (!empty($name)){ + return false; + } } if ($this->_auth->canDo('modMail')){ - if (empty($mail)){ - msg($this->lang['add_fail'], -1); - return false; - } + if (empty($mail)){ + msg($this->lang['add_fail'], -1); + return false; + } } else { - if (!empty($mail)){ - return false; - } + if (!empty($mail)){ + return false; + } } if ($ok = $this->_auth->triggerUserMod('create', array($user,$pass,$name,$mail,$grps))) { - msg($this->lang['add_ok'], 1); + msg($this->lang['add_ok'], 1); - if ($INPUT->has('usernotify') && $pass) { - $this->_notifyUser($user,$pass); - } + if ($INPUT->has('usernotify') && $pass) { + $this->_notifyUser($user,$pass); + } } else { - msg($this->lang['add_fail'], -1); + msg($this->lang['add_fail'], -1); } return $ok; } /** - * Delete user + * Delete user from auth backend + * + * @return bool whether succesful */ - function _deleteUser(){ + protected function _deleteUser(){ global $conf, $INPUT; if (!checkSecurityToken()) return false; @@ -424,12 +552,12 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { $count = $this->_auth->triggerUserMod('delete', array($selected)); if ($count == count($selected)) { - $text = str_replace('%d', $count, $this->lang['delete_ok']); - msg("$text.", 1); + $text = str_replace('%d', $count, $this->lang['delete_ok']); + msg("$text.", 1); } else { - $part1 = str_replace('%d', $count, $this->lang['delete_ok']); - $part2 = str_replace('%d', (count($selected)-$count), $this->lang['delete_fail']); - msg("$part1, $part2",-1); + $part1 = str_replace('%d', $count, $this->lang['delete_ok']); + $part2 = str_replace('%d', (count($selected)-$count), $this->lang['delete_fail']); + msg("$part1, $part2",-1); } // invalidate all sessions @@ -440,18 +568,20 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { /** * Edit user (a user has been selected for editing) + * + * @param string $param id of the user + * @return bool whether succesful */ - function _editUser($param) { + protected function _editUser($param) { if (!checkSecurityToken()) return false; if (!$this->_auth->canDo('UserMod')) return false; - - $user = cleanID(preg_replace('/.*:/','',$param)); + $user = $this->_auth->cleanUser(preg_replace('/.*[:\/]/','',$param)); $userdata = $this->_auth->getUserData($user); // no user found? if (!$userdata) { - msg($this->lang['edit_usermissing'],-1); - return false; + msg($this->lang['edit_usermissing'],-1); + return false; } $this->_edit_user = $user; @@ -461,16 +591,18 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { } /** - * Modify user (modified user data has been recieved) + * Modify user in the auth backend (modified user data has been recieved) + * + * @return bool whether succesful */ - function _modifyUser(){ + protected function _modifyUser(){ global $conf, $INPUT; if (!checkSecurityToken()) return false; if (!$this->_auth->canDo('UserMod')) return false; // get currently valid user data - $olduser = cleanID(preg_replace('/.*:/','',$INPUT->str('userid_old'))); + $olduser = $this->_auth->cleanUser(preg_replace('/.*[:\/]/','',$INPUT->str('userid_old'))); $oldinfo = $this->_auth->getUserData($olduser); // get new user data subject to change @@ -480,18 +612,18 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { $changes = array(); if ($newuser != $olduser) { - if (!$this->_auth->canDo('modLogin')) { // sanity check, shouldn't be possible - msg($this->lang['update_fail'],-1); - return false; - } + if (!$this->_auth->canDo('modLogin')) { // sanity check, shouldn't be possible + msg($this->lang['update_fail'],-1); + return false; + } - // check if $newuser already exists - if ($this->_auth->getUserData($newuser)) { - msg(sprintf($this->lang['update_exists'],$newuser),-1); - $re_edit = true; - } else { - $changes['user'] = $newuser; - } + // check if $newuser already exists + if ($this->_auth->getUserData($newuser)) { + msg(sprintf($this->lang['update_exists'],$newuser),-1); + $re_edit = true; + } else { + $changes['user'] = $newuser; + } } // generate password if left empty and notification is on @@ -509,18 +641,18 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { $changes['grps'] = $newgrps; if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) { - msg($this->lang['update_ok'],1); + msg($this->lang['update_ok'],1); - if ($INPUT->has('usernotify') && $newpass) { - $notify = empty($changes['user']) ? $olduser : $newuser; - $this->_notifyUser($notify,$newpass); - } + if ($INPUT->has('usernotify') && $newpass) { + $notify = empty($changes['user']) ? $olduser : $newuser; + $this->_notifyUser($notify,$newpass); + } - // invalidate all sessions - io_saveFile($conf['cachedir'].'/sessionpurge',time()); + // invalidate all sessions + io_saveFile($conf['cachedir'].'/sessionpurge',time()); } else { - msg($this->lang['update_fail'],-1); + msg($this->lang['update_fail'],-1); } if (!empty($re_edit)) { @@ -531,25 +663,36 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { } /** - * send password change notification email + * Send password change notification email + * + * @param string $user id of user + * @param string $password plain text + * @param bool $status_alert whether status alert should be shown + * @return bool whether succesful */ - function _notifyUser($user, $password) { + protected function _notifyUser($user, $password, $status_alert=true) { if ($sent = auth_sendPassword($user,$password)) { - msg($this->lang['notify_ok'], 1); + if ($status_alert) { + msg($this->lang['notify_ok'], 1); + } } else { - msg($this->lang['notify_fail'], -1); + if ($status_alert) { + msg($this->lang['notify_fail'], -1); + } } return $sent; } /** - * retrieve & clean user data from the form + * Retrieve & clean user data from the form * + * @param bool $clean whether the cleanUser method of the authentication backend is applied * @return array (user, password, full name, email, array(groups)) */ - function _retrieveUser($clean=true) { + protected function _retrieveUser($clean=true) { + /** @var DokuWiki_Auth_Plugin $auth */ global $auth; global $INPUT; @@ -568,21 +711,31 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { return $user; } - function _setFilter($op) { + /** + * Set the filter with the current search terms or clear the filter + * + * @param string $op 'new' or 'clear' + */ + protected function _setFilter($op) { $this->_filter = array(); if ($op == 'new') { - list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser(false); + list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser(false); - if (!empty($user)) $this->_filter['user'] = $user; - if (!empty($name)) $this->_filter['name'] = $name; - if (!empty($mail)) $this->_filter['mail'] = $mail; - if (!empty($grps)) $this->_filter['grps'] = join('|',$grps); + if (!empty($user)) $this->_filter['user'] = $user; + if (!empty($name)) $this->_filter['name'] = $name; + if (!empty($mail)) $this->_filter['mail'] = $mail; + if (!empty($grps)) $this->_filter['grps'] = join('|',$grps); } } - function _retrieveFilter() { + /** + * Get the current search terms + * + * @return array + */ + protected function _retrieveFilter() { global $INPUT; $t_filter = $INPUT->arr('filter'); @@ -598,32 +751,226 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { return $filter; } - function _validatePagination() { + /** + * Validate and improve the pagination values + */ + protected function _validatePagination() { if ($this->_start >= $this->_user_total) { - $this->_start = $this->_user_total - $this->_pagesize; + $this->_start = $this->_user_total - $this->_pagesize; } if ($this->_start < 0) $this->_start = 0; $this->_last = min($this->_user_total, $this->_start + $this->_pagesize); } - /* - * return an array of strings to enable/disable pagination buttons + /** + * Return an array of strings to enable/disable pagination buttons + * + * @return array with enable/disable attributes */ - function _pagination() { + protected function _pagination() { $disabled = 'disabled="disabled"'; $buttons['start'] = $buttons['prev'] = ($this->_start == 0) ? $disabled : ''; if ($this->_user_total == -1) { - $buttons['last'] = $disabled; - $buttons['next'] = ''; + $buttons['last'] = $disabled; + $buttons['next'] = ''; } else { - $buttons['last'] = $buttons['next'] = (($this->_start + $this->_pagesize) >= $this->_user_total) ? $disabled : ''; + $buttons['last'] = $buttons['next'] = (($this->_start + $this->_pagesize) >= $this->_user_total) ? $disabled : ''; } return $buttons; } + + /** + * Export a list of users in csv format using the current filter criteria + */ + protected function _export() { + // list of users for export - based on current filter criteria + $user_list = $this->_auth->retrieveUsers(0, 0, $this->_filter); + $column_headings = array( + $this->lang["user_id"], + $this->lang["user_name"], + $this->lang["user_mail"], + $this->lang["user_groups"] + ); + + // ============================================================================================== + // GENERATE OUTPUT + // normal headers for downloading... + header('Content-type: text/csv;charset=utf-8'); + header('Content-Disposition: attachment; filename="wikiusers.csv"'); +# // for debugging assistance, send as text plain to the browser +# header('Content-type: text/plain;charset=utf-8'); + + // output the csv + $fd = fopen('php://output','w'); + fputcsv($fd, $column_headings); + foreach ($user_list as $user => $info) { + $line = array($user, $info['name'], $info['mail'], join(',',$info['grps'])); + fputcsv($fd, $line); + } + fclose($fd); + die; + } + + /** + * Import a file of users in csv format + * + * csv file should have 4 columns, user_id, full name, email, groups (comma separated) + * + * @return bool whether succesful + */ + protected function _import() { + // check we are allowed to add users + if (!checkSecurityToken()) return false; + if (!$this->_auth->canDo('addUser')) return false; + + // check file uploaded ok. + if (empty($_FILES['import']['size']) || !empty($FILES['import']['error']) && is_uploaded_file($FILES['import']['tmp_name'])) { + msg($this->lang['import_error_upload'],-1); + return false; + } + // retrieve users from the file + $this->_import_failures = array(); + $import_success_count = 0; + $import_fail_count = 0; + $line = 0; + $fd = fopen($_FILES['import']['tmp_name'],'r'); + if ($fd) { + while($csv = fgets($fd)){ + if (!utf8_check($csv)) { + $csv = utf8_encode($csv); + } + $raw = str_getcsv($csv); + $error = ''; // clean out any errors from the previous line + // data checks... + if (1 == ++$line) { + if ($raw[0] == 'user_id' || $raw[0] == $this->lang['user_id']) continue; // skip headers + } + if (count($raw) < 4) { // need at least four fields + $import_fail_count++; + $error = sprintf($this->lang['import_error_fields'], count($raw)); + $this->_import_failures[$line] = array('error' => $error, 'user' => $raw, 'orig' => $csv); + continue; + } + array_splice($raw,1,0,auth_pwgen()); // splice in a generated password + $clean = $this->_cleanImportUser($raw, $error); + if ($clean && $this->_addImportUser($clean, $error)) { + $sent = $this->_notifyUser($clean[0],$clean[1],false); + if (!$sent){ + msg(sprintf($this->lang['import_notify_fail'],$clean[0],$clean[3]),-1); + } + $import_success_count++; + } else { + $import_fail_count++; + $this->_import_failures[$line] = array('error' => $error, 'user' => $raw, 'orig' => $csv); + } + } + msg(sprintf($this->lang['import_success_count'], ($import_success_count+$import_fail_count), $import_success_count),($import_success_count ? 1 : -1)); + if ($import_fail_count) { + msg(sprintf($this->lang['import_failure_count'], $import_fail_count),-1); + } + } else { + msg($this->lang['import_error_readfail'],-1); + } + + // save import failures into the session + if (!headers_sent()) { + session_start(); + $_SESSION['import_failures'] = $this->_import_failures; + session_write_close(); + } + return true; + } + + /** + * Returns cleaned user data + * + * @param array $candidate raw values of line from input file + * @param $error + * @return array|bool cleaned data or false + */ + protected function _cleanImportUser($candidate, & $error){ + global $INPUT; + + // kludgy .... + $INPUT->set('userid', $candidate[0]); + $INPUT->set('userpass', $candidate[1]); + $INPUT->set('username', $candidate[2]); + $INPUT->set('usermail', $candidate[3]); + $INPUT->set('usergroups', $candidate[4]); + + $cleaned = $this->_retrieveUser(); + list($user,$pass,$name,$mail,$grps) = $cleaned; + if (empty($user)) { + $error = $this->lang['import_error_baduserid']; + return false; + } + + // no need to check password, handled elsewhere + + if (!($this->_auth->canDo('modName') xor empty($name))){ + $error = $this->lang['import_error_badname']; + return false; + } + + if ($this->_auth->canDo('modMail')) { + if (empty($mail) || !mail_isvalid($mail)) { + $error = $this->lang['import_error_badmail']; + return false; + } + } else { + if (!empty($mail)) { + $error = $this->lang['import_error_badmail']; + return false; + } + } + + return $cleaned; + } + + /** + * Adds imported user to auth backend + * + * Required a check of canDo('addUser') before + * + * @param array $user data of user + * @param string &$error reference catched error message + * @return bool whether succesful + */ + protected function _addImportUser($user, & $error){ + if (!$this->_auth->triggerUserMod('create', $user)) { + $error = $this->lang['import_error_create']; + return false; + } + + return true; + } + + /** + * Downloads failures as csv file + */ + protected function _downloadImportFailures(){ + + // ============================================================================================== + // GENERATE OUTPUT + // normal headers for downloading... + header('Content-type: text/csv;charset=utf-8'); + header('Content-Disposition: attachment; filename="importfails.csv"'); +# // for debugging assistance, send as text plain to the browser +# header('Content-type: text/plain;charset=utf-8'); + + // output the csv + $fd = fopen('php://output','w'); + foreach ($this->_import_failures as $fail) { + fputs($fd, $fail['orig']); + } + fclose($fd); + die; + } + } diff --git a/lib/plugins/usermanager/lang/ar/lang.php b/lib/plugins/usermanager/lang/ar/lang.php index d4b891320..0a751e7fb 100644 --- a/lib/plugins/usermanager/lang/ar/lang.php +++ b/lib/plugins/usermanager/lang/ar/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Arabic language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Yaman Hokan <always.smile.yh@hotmail.com> * @author Usama Akkad <uahello@gmail.com> * @author uahello@gmail.com diff --git a/lib/plugins/usermanager/lang/cs/import.txt b/lib/plugins/usermanager/lang/cs/import.txt new file mode 100644 index 000000000..c264ae185 --- /dev/null +++ b/lib/plugins/usermanager/lang/cs/import.txt @@ -0,0 +1,9 @@ +===== Hromadný import uživatelů ===== + +Vyžaduje CSV soubor s uživateli obsahující alespoň 4 sloupce. +Sloupce obsahují (v daném pořadí): user-id, celé jméno, emailovou adresu, seznam skupin. +Položky CSV musí být odděleny čárkou (,) a řetězce umístěny v uvozovkách (""). Zpětné lomítko (\) lze použít pro escapování. +Pro získání příkladu takového souboru využijte funkci "Exportovat uživatele" výše. +Záznamy s duplicitním user-id budou ignorovány. + +Hesla budou vygenerována a zaslána e-mailem všem úspěšně importovaným uživatelům.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/cs/lang.php b/lib/plugins/usermanager/lang/cs/lang.php index 9fc3a5e75..bbb560679 100644 --- a/lib/plugins/usermanager/lang/cs/lang.php +++ b/lib/plugins/usermanager/lang/cs/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Czech language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Tomas Valenta <t.valenta@sh.cvut.cz> * @author Zbynek Krivka <zbynek.krivka@seznam.cz> * @author Bohumir Zamecnik <bohumir@zamecnik.org> @@ -13,6 +14,7 @@ * @author Bohumir Zamecnik <bohumir.zamecnik@gmail.com> * @author Jakub A. Těšínský (j@kub.cz) * @author mkucera66@seznam.cz + * @author Zbyněk Křivka <krivka@fit.vutbr.cz> */ $lang['menu'] = 'Správa uživatelů'; $lang['noauth'] = '(autentizace uživatelů není k dispozici)'; @@ -35,6 +37,11 @@ $lang['search'] = 'Hledání'; $lang['search_prompt'] = 'Prohledat'; $lang['clear'] = 'Zrušit vyhledávací filtr'; $lang['filter'] = 'Filtr'; +$lang['export_all'] = 'Exportovat všechny uživatele (CSV)'; +$lang['export_filtered'] = 'Exportovat filtrovaný seznam uživatelů (CSV)'; +$lang['import'] = 'Importovat nové uživatele'; +$lang['line'] = 'Řádek č.'; +$lang['error'] = 'Chybová zpráva'; $lang['summary'] = 'Zobrazuji uživatele %1$d-%2$d z %3$d nalezených. Celkem %4$d uživatelů.'; $lang['nonefound'] = 'Žadný uživatel nenalezen. Celkem %d uživatelů.'; $lang['delete_ok'] = '%d uživatelů smazáno'; @@ -50,8 +57,18 @@ $lang['edit_usermissing'] = 'Vybraný uživatel nebyl nalezen, zadané uži $lang['user_notify'] = 'Upozornit uživatele'; $lang['note_notify'] = 'Maily s upozorněním se budou posílat pouze, když uživatel dostává nové heslo.'; $lang['note_group'] = 'Noví uživatelé budou přidáváni do této výchozí skupiny (%s), pokud pro ně není uvedena žádná skupina.'; -$lang['note_pass'] = 'Heslo bude automaticky vygenerováno pokud je pole ponecháno prázdné a je zapnutá notifikace uživatele.'; +$lang['note_pass'] = 'Heslo bude automaticky vygenerováno, pokud je pole ponecháno prázdné a je zapnuto upozornění uživatele.'; $lang['add_ok'] = 'Uživatel úspěšně vytvořen'; $lang['add_fail'] = 'Vytvoření uživatele selhalo'; $lang['notify_ok'] = 'Odeslán mail s upozorněním'; $lang['notify_fail'] = 'Mail s upozorněním nebylo možno odeslat'; +$lang['import_success_count'] = 'Import uživatelů: nalezeno %d uživatelů, %d úspěšně importováno.'; +$lang['import_failure_count'] = 'Import uživatelů: %d selhalo. Seznam chybných je níže.'; +$lang['import_error_fields'] = 'Nedostatek položek, nalezena/y %d, požadovány 4.'; +$lang['import_error_baduserid'] = 'Chybí User-id'; +$lang['import_error_badname'] = 'Špatné jméno'; +$lang['import_error_badmail'] = 'Špatná emailová adresa'; +$lang['import_error_upload'] = 'Import selhal. CSV soubor nemohl být nahrán nebo je prázdný.'; +$lang['import_error_readfail'] = 'Import selhal. Nelze číst nahraný soubor.'; +$lang['import_error_create'] = 'Nelze vytvořit uživatele'; +$lang['import_notify_fail'] = 'Importovanému uživateli %s s emailem %s nemohlo být zasláno upozornění.'; diff --git a/lib/plugins/usermanager/lang/da/lang.php b/lib/plugins/usermanager/lang/da/lang.php index 845457f7e..47d7efea2 100644 --- a/lib/plugins/usermanager/lang/da/lang.php +++ b/lib/plugins/usermanager/lang/da/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Danish language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk> * @author Kalle Sommer Nielsen <kalle@php.net> * @author Esben Laursen <hyber@hyber.dk> @@ -11,6 +12,7 @@ * @author rasmus@kinnerup.com * @author Michael Pedersen subben@gmail.com * @author Mikael Lyngvig <mikael@lyngvig.org> + * @author soer9648 <soer9648@eucl.dk> */ $lang['menu'] = 'Brugerstyring'; $lang['noauth'] = '(Brugervalidering er ikke tilgængelig)'; @@ -33,6 +35,11 @@ $lang['search'] = 'Søg'; $lang['search_prompt'] = 'Udfør søgning'; $lang['clear'] = 'Nulstil søgefilter'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Eksportér Alle Brugere (CSV)'; +$lang['export_filtered'] = 'Eksportér Filtrerede Brugerliste (CSV)'; +$lang['import'] = 'Importér Nye Brugere'; +$lang['line'] = 'Linje nr.'; +$lang['error'] = 'Fejlmeddelelse'; $lang['summary'] = 'Viser brugerne %1$d-%2$d ud af %3$d fundne. %4$d brugere totalt.'; $lang['nonefound'] = 'Ingen brugere fundet. %d brugere totalt.'; $lang['delete_ok'] = '%d brugere slettet'; @@ -53,3 +60,15 @@ $lang['add_ok'] = 'Bruger tilføjet uden fejl.'; $lang['add_fail'] = 'Tilføjelse af bruger mislykkedes'; $lang['notify_ok'] = 'Meddelelse sendt'; $lang['notify_fail'] = 'Meddelelse kunne ikke sendes'; +$lang['import_userlistcsv'] = 'Brugerlistefil (CSV):'; +$lang['import_header'] = 'Nyeste Import - Fejl'; +$lang['import_success_count'] = 'Bruger-Import: %d brugere fundet, %d importeret med succes.'; +$lang['import_failure_count'] = 'Bruger-Import: %d fejlet. Fejl er listet nedenfor.'; +$lang['import_error_fields'] = 'Utilstrækkelige felter, fandt %d, påkrævet 4.'; +$lang['import_error_baduserid'] = 'Bruger-id mangler'; +$lang['import_error_badname'] = 'Ugyldigt navn'; +$lang['import_error_badmail'] = 'Ugyldig email-adresse'; +$lang['import_error_upload'] = 'Import Fejlet. CSV-filen kunne ikke uploades eller er tom.'; +$lang['import_error_readfail'] = 'Import Fejlet. Ikke muligt at læse uploadede fil.'; +$lang['import_error_create'] = 'Ikke muligt at oprette brugeren'; +$lang['import_notify_fail'] = 'Notifikationsmeddelelse kunne ikke sendes for importerede bruger %s, med emailen %s.'; diff --git a/lib/plugins/usermanager/lang/de-informal/import.txt b/lib/plugins/usermanager/lang/de-informal/import.txt new file mode 100644 index 000000000..6fd6b8d8c --- /dev/null +++ b/lib/plugins/usermanager/lang/de-informal/import.txt @@ -0,0 +1,7 @@ +===== Massenimport von Benutzern ===== + +Dieser Import benötigt eine CSV-Datei mit mindestens vier Spalten. Diese Spalten müssen die folgenden Daten (in dieser Reihenfolge) enthalten: Benutzername, Name, E-Mailadresse und Gruppenzugehörigkeit. +Die CSV-Felder müssen durch ein Komma (,) getrennt sein. Die Zeichenfolgen müssen von Anführungszeichen ("") umgeben sein. Ein Backslash (\) kann zum Maskieren benutzt werden. +Für eine Beispieldatei kannst Du die "Benutzer exportieren"-Funktion oben benutzen. Doppelte Benutzername werden ignoriert. + +Ein Passwort wird generiert und den einzelnen, erfolgreich importierten Benutzern zugemailt.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/de-informal/lang.php b/lib/plugins/usermanager/lang/de-informal/lang.php index 791cfa74f..bea4159d0 100644 --- a/lib/plugins/usermanager/lang/de-informal/lang.php +++ b/lib/plugins/usermanager/lang/de-informal/lang.php @@ -1,7 +1,8 @@ <?php + /** - * German (informal) language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Alexander Fischer <tbanus@os-forge.net> * @author Juergen Schwarzer <jschwarzer@freenet.de> * @author Marcel Metz <marcel_metz@gmx.de> @@ -10,6 +11,7 @@ * @author Pierre Corell <info@joomla-praxis.de> * @author Frank Loizzi <contact@software.bacal.de> * @author Volker Bödker <volker@boedker.de> + * @author Dennis Plöger <develop@dieploegers.de> */ $lang['menu'] = 'Benutzerverwaltung'; $lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)'; @@ -32,6 +34,11 @@ $lang['search'] = 'Suchen'; $lang['search_prompt'] = 'Suche ausführen'; $lang['clear'] = 'Suchfilter zurücksetzen'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Alle Benutzer exportieren (CSV)'; +$lang['export_filtered'] = 'Gefilterte Benutzerliste exportieren (CSV)'; +$lang['import'] = 'Neue Benutzer importieren'; +$lang['line'] = 'Zeile Nr.'; +$lang['error'] = 'Fehlermeldung'; $lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.'; $lang['nonefound'] = 'Keinen Benutzer gefunden. Insgesamt %d Benutzer.'; $lang['delete_ok'] = '%d Benutzer wurden gelöscht'; @@ -52,3 +59,13 @@ $lang['add_ok'] = 'Benutzer erfolgreich hinzugefügt'; $lang['add_fail'] = 'Hinzufügen des Benutzers fehlgeschlagen'; $lang['notify_ok'] = 'Benachrichtigungsmail wurde versendet'; $lang['notify_fail'] = 'Benachrichtigungsemail konnte nicht gesendet werden'; +$lang['import_success_count'] = 'Benutzerimport: %d Benutzer gefunden, %d erfolgreich importiert.'; +$lang['import_failure_count'] = 'Benutzerimport: %d Benutzerimporte fehlgeschalten. Alle Fehler werden unten angezeigt.'; +$lang['import_error_fields'] = 'Falsche Anzahl Felder. Gefunden: %d. Benötigt: 4.'; +$lang['import_error_baduserid'] = 'Benutzername fehlt'; +$lang['import_error_badname'] = 'Ungültiger Name'; +$lang['import_error_badmail'] = 'Ungültige E-Mailadresse'; +$lang['import_error_upload'] = 'Import fehlgeschlagen. Die CSV-Datei konnte nicht hochgeladen werden oder ist leer.'; +$lang['import_error_readfail'] = 'Import fehlgeschlagen. Konnte die hochgeladene Datei nicht lesen.'; +$lang['import_error_create'] = 'Konnte den Benutzer nicht erzeugen'; +$lang['import_notify_fail'] = 'Benachrichtigung konnte an Benutzer %s (%s) nicht geschickt werden.'; diff --git a/lib/plugins/usermanager/lang/de/import.txt b/lib/plugins/usermanager/lang/de/import.txt new file mode 100644 index 000000000..bf0d2922e --- /dev/null +++ b/lib/plugins/usermanager/lang/de/import.txt @@ -0,0 +1,8 @@ +===== Benutzer-Massenimport ===== + +Um mehrere Benutzer gleichzeitig zu importieren, wird eine CSV-Datei mit den folgenden vier Spalten benötigt (In dieser Reihenfolge): Benutzer-ID, Voller Name, E-Mail-Adresse und Gruppen. +Die CSV-Felder sind Kommata-separiert (,) und mit Anführungszeichen eingefasst ("). Mit Backslashes (\) können Sonderzeichen maskiert werden. +Ein Beispiel für eine gültige Datei kann mit der Benutzer-Export-Funktion oben generiert werden. +Doppelte Benutzer-IDs werden ignoriert. + +Für jeden importierten Benutzer wird ein Passwort generiert und dem Benutzer per Mail zugestellt.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/de/lang.php b/lib/plugins/usermanager/lang/de/lang.php index 0dd90cc68..d1b9b908b 100644 --- a/lib/plugins/usermanager/lang/de/lang.php +++ b/lib/plugins/usermanager/lang/de/lang.php @@ -1,6 +1,7 @@ <?php + /** - * German language file + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net> * @author Andreas Gohr <andi@splitbrain.org> @@ -17,6 +18,10 @@ * @author Paul Lachewsky <kaeptn.haddock@gmail.com> * @author Pierre Corell <info@joomla-praxis.de> * @author Matthias Schulte <dokuwiki@lupo49.de> + * @author Sven <Svenluecke48@gmx.d> + * @author christian studer <cstuder@existenz.ch> + * @author Ben Fey <benedikt.fey@beck-heun.de> + * @author Jonas Gröger <jonas.groeger@gmail.com> */ $lang['menu'] = 'Benutzerverwaltung'; $lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)'; @@ -39,23 +44,41 @@ $lang['search'] = 'Suchen'; $lang['search_prompt'] = 'Benutzerdaten filtern'; $lang['clear'] = 'Filter zurücksetzen'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Alle User exportieren (CSV)'; +$lang['export_filtered'] = 'Exportiere gefilterte Userliste (CSV)'; +$lang['import'] = 'Importiere neue User'; +$lang['line'] = 'Zeilennr.'; +$lang['error'] = 'Fehlermeldung'; $lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.'; $lang['nonefound'] = 'Keine Benutzer gefunden. %d Benutzer insgesamt.'; $lang['delete_ok'] = '%d Benutzer gelöscht'; $lang['delete_fail'] = '%d konnten nicht gelöscht werden.'; $lang['update_ok'] = 'Benutzerdaten erfolgreich geändert.'; $lang['update_fail'] = 'Änderung der Benutzerdaten fehlgeschlagen.'; -$lang['update_exists'] = 'Nutzername konnte nicht geändert werden, weil der angegebene Nutzer (%s) bereits existiert (alle anderen Änderungen wurden durchgeführt).'; +$lang['update_exists'] = 'Benutzername konnte nicht geändert werden, weil der angegebene Benutzer (%s) bereits existiert (alle anderen Änderungen wurden durchgeführt).'; $lang['start'] = 'Anfang'; $lang['prev'] = 'Vorherige'; $lang['next'] = 'Nächste'; $lang['last'] = 'Ende'; -$lang['edit_usermissing'] = 'Der ausgewählte Nutzer wurde nicht gefunden. Möglicherweise wurde er gelöscht oder der Nutzer wurde anderswo geändert.'; +$lang['edit_usermissing'] = 'Der ausgewählte Benutzer wurde nicht gefunden. Möglicherweise wurde er gelöscht oder der Benutzer wurde anderswo geändert.'; $lang['user_notify'] = 'Nutzer benachrichtigen'; $lang['note_notify'] = 'Benachrichtigungs-E-Mails werden nur versandt, wenn ein neues Passwort vergeben wurde.'; -$lang['note_group'] = 'Neue Nutzer werden der Standard-Gruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wurde.'; -$lang['note_pass'] = 'Das Passwort wird automatisch generiert, wenn das entsprechende Feld leergelassen wird und die Benachrichtigung des Nutzers aktiviert ist.'; +$lang['note_group'] = 'Neue Benutzer werden der Standard-Gruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wurde.'; +$lang['note_pass'] = 'Das Passwort wird automatisch generiert, wenn das entsprechende Feld leergelassen wird und die Benachrichtigung des Benutzers aktiviert ist.'; $lang['add_ok'] = 'Nutzer erfolgreich angelegt'; $lang['add_fail'] = 'Nutzer konnte nicht angelegt werden'; $lang['notify_ok'] = 'Benachrichtigungsmail wurde versandt'; $lang['notify_fail'] = 'Benachrichtigungsmail konnte nicht versandt werden'; +$lang['import_userlistcsv'] = 'Benutzerliste (CSV-Datei):'; +$lang['import_header'] = 'Letzte Fehler bei Import'; +$lang['import_success_count'] = 'User-Import: %d User gefunden, %d erfolgreich importiert.'; +$lang['import_failure_count'] = 'User-Import: %d fehlgeschlagen. Fehlgeschlagene User sind nachfolgend aufgelistet.'; +$lang['import_error_fields'] = 'Unzureichende Anzahl an Feldern: %d gefunden, benötigt sind 4.'; +$lang['import_error_baduserid'] = 'User-Id fehlt'; +$lang['import_error_badname'] = 'Ungültiger Name'; +$lang['import_error_badmail'] = 'Ungültige E-Mail'; +$lang['import_error_upload'] = 'Import fehlgeschlagen. Die CSV-Datei konnte nicht hochgeladen werden, oder ist leer.'; +$lang['import_error_readfail'] = 'Import fehlgeschlagen. Die hochgeladene Datei konnte nicht gelesen werden.'; +$lang['import_error_create'] = 'User konnte nicht angelegt werden'; +$lang['import_notify_fail'] = 'Notifikation konnte nicht an den importierten Benutzer %s (E-Mail: %s) gesendet werden.'; +$lang['import_downloadfailures'] = 'Fehler als CSV-Datei zur Korrektur herunterladen'; diff --git a/lib/plugins/usermanager/lang/el/lang.php b/lib/plugins/usermanager/lang/el/lang.php index da7c8fb0f..e14aa615e 100644 --- a/lib/plugins/usermanager/lang/el/lang.php +++ b/lib/plugins/usermanager/lang/el/lang.php @@ -1,10 +1,8 @@ <?php + /** - * Greek language file - * - * Based on DokuWiki Version rc2007-05-24 english language file - * Original english language file contents included for reference - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Chris Smith <chris@jalakai.co.uk> * @author Thanos Massias <tm@thriasio.gr> * @author Αθανάσιος Νταής <homunculus@wana.gr> diff --git a/lib/plugins/usermanager/lang/en/import.txt b/lib/plugins/usermanager/lang/en/import.txt new file mode 100644 index 000000000..2087083e0 --- /dev/null +++ b/lib/plugins/usermanager/lang/en/import.txt @@ -0,0 +1,9 @@ +===== Bulk User Import ===== + +Requires a CSV file of users with at least four columns. +The columns must contain, in order: user-id, full name, email address and groups. +The CSV fields should be separated by commas (,) and strings delimited by quotation marks (""). Backslash (\) can be used for escaping. +For an example of a suitable file, try the "Export Users" function above. +Duplicate user-ids will be ignored. + +A password will be generated and emailed to each successfully imported user. diff --git a/lib/plugins/usermanager/lang/en/lang.php b/lib/plugins/usermanager/lang/en/lang.php index 189a1db20..f87c77afb 100644 --- a/lib/plugins/usermanager/lang/en/lang.php +++ b/lib/plugins/usermanager/lang/en/lang.php @@ -31,6 +31,11 @@ $lang['search'] = 'Search'; $lang['search_prompt'] = 'Perform search'; $lang['clear'] = 'Reset Search Filter'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Export All Users (CSV)'; +$lang['export_filtered'] = 'Export Filtered User list (CSV)'; +$lang['import'] = 'Import New Users'; +$lang['line'] = 'Line no.'; +$lang['error'] = 'Error message'; $lang['summary'] = 'Displaying users %1$d-%2$d of %3$d found. %4$d users total.'; $lang['nonefound'] = 'No users found. %d users total.'; @@ -56,3 +61,19 @@ $lang['add_fail'] = 'User addition failed'; $lang['notify_ok'] = 'Notification email sent'; $lang['notify_fail'] = 'Notification email could not be sent'; +// import & errors +$lang['import_userlistcsv'] = 'User list file (CSV): '; +$lang['import_header'] = 'Most Recent Import - Failures'; +$lang['import_success_count'] = 'User Import: %d users found, %d imported successfully.'; +$lang['import_failure_count'] = 'User Import: %d failed. Failures are listed below.'; +$lang['import_error_fields'] = "Insufficient fields, found %d, require 4."; +$lang['import_error_baduserid'] = "User-id missing"; +$lang['import_error_badname'] = 'Bad name'; +$lang['import_error_badmail'] = 'Bad email address'; +$lang['import_error_upload'] = 'Import Failed. The csv file could not be uploaded or is empty.'; +$lang['import_error_readfail'] = 'Import Failed. Unable to read uploaded file.'; +$lang['import_error_create'] = 'Unable to create the user'; +$lang['import_notify_fail'] = 'Notification message could not be sent for imported user, %s with email %s.'; +$lang['import_downloadfailures'] = 'Download Failures as CSV for correction'; + + diff --git a/lib/plugins/usermanager/lang/eo/import.txt b/lib/plugins/usermanager/lang/eo/import.txt new file mode 100644 index 000000000..61c2c74de --- /dev/null +++ b/lib/plugins/usermanager/lang/eo/import.txt @@ -0,0 +1,9 @@ +===== Amasa importo de uzantoj ===== + +Tio ĉi postulas CSV-dosiero de uzantoj kun minimume kvar kolumnoj. +La kolumnoj devas enhavi, laŭorde: uzant-id, kompleta nomo, retadreso kaj grupoj. +La CSV-kampoj devos esti apartitaj per komoj (,) kaj ĉenoj devas esti limigitaj per citiloj (""). Retroklino (\) povas esti uzata por eskapo. +Por ekzemplo de taŭga dosiero, provu la funkcion "Eksporti uzantojn" supre. +Duobligitaj uzant-id estos preteratentataj. + +Pasvorto estos generata kaj retsendata al ĉiu sukecse importita uzanto.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/eo/lang.php b/lib/plugins/usermanager/lang/eo/lang.php index 75782fe23..ff7818e05 100644 --- a/lib/plugins/usermanager/lang/eo/lang.php +++ b/lib/plugins/usermanager/lang/eo/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Esperantolanguage file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Felipe Castro <fefcas@uol.com.br> * @author Felipe Castro <fefcas@gmail.com> * @author Felipe Castro <fefcas (cxe) gmail (punkto) com> @@ -10,6 +11,7 @@ * @author Erik Pedersen <erik pedersen@shaw.ca> * @author Erik Pedersen <erik.pedersen@shaw.ca> * @author Robert Bogenschneider <bogi@uea.org> + * @author Felipe Castro <fefcas@yahoo.com.br> */ $lang['menu'] = 'Administrado de uzantoj'; $lang['noauth'] = '(identiĝo de uzantoj ne disponeblas)'; @@ -32,6 +34,11 @@ $lang['search'] = 'Serĉi'; $lang['search_prompt'] = 'Fari serĉon'; $lang['clear'] = 'Refari serĉan filtron'; $lang['filter'] = 'Filtro'; +$lang['export_all'] = 'Eksporti ĉiujn uzantojn (CSV)'; +$lang['export_filtered'] = 'Eksporti filtritan uzant-liston (CSV)'; +$lang['import'] = 'Importi novajn uzantojn'; +$lang['line'] = 'Lini-num.'; +$lang['error'] = 'Erar-mesaĝo'; $lang['summary'] = 'Montriĝas uzantoj %1$d-%2$d el %3$d trovitaj. %4$d uzantoj entute.'; $lang['nonefound'] = 'Neniuj uzantoj troviĝas. %d uzantoj entute.'; $lang['delete_ok'] = '%d uzantoj forigiĝis'; @@ -52,3 +59,16 @@ $lang['add_ok'] = 'La uzanto sukcese aldoniĝis'; $lang['add_fail'] = 'Ne eblis aldoni uzanton'; $lang['notify_ok'] = 'Avizanta mesaĝo sendiĝis'; $lang['notify_fail'] = 'La avizanta mesaĝo ne povis esti sendita'; +$lang['import_userlistcsv'] = 'Dosiero kun listo de uzantoj (CSV):'; +$lang['import_header'] = 'Plej lastaj Import-eraroj'; +$lang['import_success_count'] = 'Uzant-importo: %d uzantoj trovataj, %d sukcese importitaj.'; +$lang['import_failure_count'] = 'Uzant-importo: %d fiaskis. Fiaskoj estas sube listitaj.'; +$lang['import_error_fields'] = 'Nesufiĉe da kampoj, ni trovis %d, necesas 4.'; +$lang['import_error_baduserid'] = 'Mankas uzant-id'; +$lang['import_error_badname'] = 'Malĝusta nomo'; +$lang['import_error_badmail'] = 'Malĝusta retadreso'; +$lang['import_error_upload'] = 'Importo fiaskis. La csv-dosiero ne povis esti alŝutata aŭ ĝi estas malplena.'; +$lang['import_error_readfail'] = 'Importo fiaskis. Ne eblas legi alŝutitan dosieron.'; +$lang['import_error_create'] = 'Ne eblas krei la uzanton'; +$lang['import_notify_fail'] = 'Averta mesaĝo ne povis esti sendata al la importita uzanto %s, kun retdreso %s.'; +$lang['import_downloadfailures'] = 'Elŝut-eraroj por korektado (CSV)'; diff --git a/lib/plugins/usermanager/lang/es/lang.php b/lib/plugins/usermanager/lang/es/lang.php index 521191701..26e4200e4 100644 --- a/lib/plugins/usermanager/lang/es/lang.php +++ b/lib/plugins/usermanager/lang/es/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Spanish language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Miguel Pagano <miguel.pagano> * @author Oscar M. Lage <r0sk10@gmail.com> * @author Gabriel Castillo <gch@pumas.ii.unam.mx> diff --git a/lib/plugins/usermanager/lang/fa/lang.php b/lib/plugins/usermanager/lang/fa/lang.php index 8176b776b..a6a484411 100644 --- a/lib/plugins/usermanager/lang/fa/lang.php +++ b/lib/plugins/usermanager/lang/fa/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Persian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author behrad eslamifar <behrad_es@yahoo.com) * @author Mohsen Firoozmandan <info@mambolearn.com> * @author omidmr@gmail.com diff --git a/lib/plugins/usermanager/lang/fr/import.txt b/lib/plugins/usermanager/lang/fr/import.txt new file mode 100644 index 000000000..191bb8370 --- /dev/null +++ b/lib/plugins/usermanager/lang/fr/import.txt @@ -0,0 +1,11 @@ +===== Importation d'utilisateurs par lot ===== + +Requière un fichier [[wpfr>CSV]] d'utilisateurs avec un minimum de quatre colonnes. +Les colonnes doivent comporter, dans l'ordre : identifiant, nom complet, adresse de courriel et groupes. + +Les champs doivent être séparés par une virgule (,), les chaînes sont délimitées par des guillemets (""). On peut utiliser la balance inverse (\) comme caractère d'échappement. +Pour obtenir un exemple de fichier acceptable, essayer la fonction "Exporter les utilisateurs" ci dessus. + +Les identifiants dupliqués seront ignorés. + +L'importation générera un mot de passe et l'enverra à chaque utilisateur correctement importé.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/fr/lang.php b/lib/plugins/usermanager/lang/fr/lang.php index 40e878bbb..7c24ef900 100644 --- a/lib/plugins/usermanager/lang/fr/lang.php +++ b/lib/plugins/usermanager/lang/fr/lang.php @@ -1,7 +1,8 @@ <?php + /** - * french language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Guy Brand <gb@unistra.fr> * @author Delassaux Julien <julien@delassaux.fr> * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca> @@ -20,6 +21,8 @@ * @author Olivier DUVAL <zorky00@gmail.com> * @author Anael Mobilia <contrib@anael.eu> * @author Bruno Veilleux <bruno.vey@gmail.com> + * @author Antoine Turmel <geekshadow@gmail.com> + * @author schplurtz <Schplurtz@laposte.net> */ $lang['menu'] = 'Gestion des utilisateurs'; $lang['noauth'] = '(authentification de l\'utilisateur non disponible)'; @@ -42,6 +45,11 @@ $lang['search'] = 'Rechercher'; $lang['search_prompt'] = 'Effectuer la recherche'; $lang['clear'] = 'Réinitialiser la recherche'; $lang['filter'] = 'Filtre'; +$lang['export_all'] = 'Exporter tous les utilisateurs (CSV)'; +$lang['export_filtered'] = 'Exporter la liste d\'utilisateurs filtrés (CSV)'; +$lang['import'] = 'Importer de nouveaux utilisateurs'; +$lang['line'] = 'Ligne n°'; +$lang['error'] = 'Message d\'erreur'; $lang['summary'] = 'Affichage des utilisateurs %1$d-%2$d parmi %3$d trouvés. %4$d utilisateurs au total.'; $lang['nonefound'] = 'Aucun utilisateur trouvé. %d utilisateurs au total.'; $lang['delete_ok'] = '%d utilisateurs effacés'; @@ -62,3 +70,13 @@ $lang['add_ok'] = 'Utilisateur ajouté avec succès'; $lang['add_fail'] = 'Échec de l\'ajout de l\'utilisateur'; $lang['notify_ok'] = 'Courriel de notification expédié'; $lang['notify_fail'] = 'Échec de l\'expédition du courriel de notification'; +$lang['import_success_count'] = 'Import d’utilisateurs : %d utilisateurs trouvés, %d utilisateurs importés avec succès.'; +$lang['import_failure_count'] = 'Import d\'utilisateurs : %d ont échoué. Les erreurs sont listées ci-dessous.'; +$lang['import_error_fields'] = 'Nombre de champs insuffisant, %d trouvé, 4 requis.'; +$lang['import_error_baduserid'] = 'Identifiant de l\'utilisateur manquant'; +$lang['import_error_badname'] = 'Mauvais nom'; +$lang['import_error_badmail'] = 'Mauvaise adresse e-mail'; +$lang['import_error_upload'] = 'L\'import a échoué. Le fichier csv n\'a pas pu être téléchargé ou bien il est vide.'; +$lang['import_error_readfail'] = 'L\'import a échoué. Impossible de lire le fichier téléchargé.'; +$lang['import_error_create'] = 'Impossible de créer l\'utilisateur'; +$lang['import_notify_fail'] = 'Impossible d\'expédier une notification à l\'utilisateur importé %s, adresse %s.'; diff --git a/lib/plugins/usermanager/lang/he/lang.php b/lib/plugins/usermanager/lang/he/lang.php index 601163013..18202584e 100644 --- a/lib/plugins/usermanager/lang/he/lang.php +++ b/lib/plugins/usermanager/lang/he/lang.php @@ -1,7 +1,8 @@ <?php + /** - * hebrew language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author DoK <kamberd@yahoo.com> * @author Dotan Kamber <kamberd@yahoo.com> * @author Moshe Kaplan <mokplan@gmail.com> diff --git a/lib/plugins/usermanager/lang/hu/import.txt b/lib/plugins/usermanager/lang/hu/import.txt new file mode 100644 index 000000000..5a4bc8b1c --- /dev/null +++ b/lib/plugins/usermanager/lang/hu/import.txt @@ -0,0 +1,9 @@ +==== Felhasználók tömeges importálása ==== + +Egy, legalább 4 oszlopot tartalmazó, felhasználóikat tartalmazó fájl szükséges hozzá. +Az oszlopok kötelező tartalma, megfelelő sorrendben: felhasználói azonosító, teljes név, e-mailcím és csoportjai. +A CSV mezőit vesszővel (,) kell elválasztani, a szövegeket idézőjelek ("") közé kell foglalni. +Mintafájl megtekintéséhez próbáld ki a fenti, "Felhasználók exportálása" funkciót. A fordított törtvonallal (\) lehet kilépni. +Megegyező felhasználói azonosítók esetén, nem kerülnek feldolgozásra. + +Minden sikeresen importált felhasználó kap egy e-mailt, amiben megtalálja a generált jelszavát.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/hu/lang.php b/lib/plugins/usermanager/lang/hu/lang.php index 9b9740cb0..dd76bfd50 100644 --- a/lib/plugins/usermanager/lang/hu/lang.php +++ b/lib/plugins/usermanager/lang/hu/lang.php @@ -1,19 +1,22 @@ <?php + /** - * Hungarian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Sandor TIHANYI <stihanyi+dw@gmail.com> * @author Siaynoq Mage <siaynoqmage@gmail.com> * @author schilling.janos@gmail.com * @author Szabó Dávid <szabo.david@gyumolcstarhely.hu> * @author Sándor TIHANYI <stihanyi+dw@gmail.com> * @author David Szabo <szabo.david@gyumolcstarhely.hu> + * @author Marton Sebok <sebokmarton@gmail.com> + * @author Serenity87HUN <anikototh87@gmail.com> */ $lang['menu'] = 'Felhasználók kezelése'; $lang['noauth'] = '(A felhasználói azonosítás nem működik.)'; $lang['nosupport'] = '(A felhasználók kezelése nem támogatott.)'; $lang['badauth'] = 'nem érvényes autentikációs technika'; -$lang['user_id'] = 'Felhasználó azonosító'; +$lang['user_id'] = 'Felhasználói azonosító'; $lang['user_pass'] = 'Jelszó'; $lang['user_name'] = 'Név'; $lang['user_mail'] = 'E-mail'; @@ -30,8 +33,13 @@ $lang['search'] = 'Keresés'; $lang['search_prompt'] = 'Keresés'; $lang['clear'] = 'Keresési szűrés törlése'; $lang['filter'] = 'Szűrés'; -$lang['summary'] = '%1$d-%2$d. felhasználókat mutatom a(z) %3$d megtalált felhasználóból. %4$d felhasználó van összesen.'; -$lang['nonefound'] = 'Nem találtam ilyen felhasználót. %d felhasználó van összesen.'; +$lang['export_all'] = 'Összes felhasználó exportálása (CSV)'; +$lang['export_filtered'] = 'Kiválasztott felhasználók exportálása (CSV)'; +$lang['import'] = 'Új felhasználók importálása'; +$lang['line'] = 'Sor száma'; +$lang['error'] = 'Hibaüzenet'; +$lang['summary'] = '%1$d-%2$d. felhasználók megjelenítése a(z) %3$d megtalált felhasználóból. %4$d felhasználó van összesen.'; +$lang['nonefound'] = 'Nincs ilyen felhasználó. %d felhasználó van összesen.'; $lang['delete_ok'] = '%d felhasználó törölve.'; $lang['delete_fail'] = '%d felhasználót nem sikerült törölni.'; $lang['update_ok'] = 'A felhasználó adatait sikeresen elmentettem.'; @@ -45,8 +53,21 @@ $lang['edit_usermissing'] = 'A kiválasztott felhasználót nem találom, a $lang['user_notify'] = 'Felhasználó értesítése'; $lang['note_notify'] = 'Csak akkor küld értesítő e-mailt, ha a felhasználó új jelszót kapott.'; $lang['note_group'] = 'Ha nincs csoport meghatározva, az új felhasználó az alapértelmezett csoportba (%s) kerül.'; -$lang['note_pass'] = 'Ha a baloldali mező üres, és a felhasználó értesítés aktív, akkor generált jelszó lesz.'; +$lang['note_pass'] = 'Ha a baloldali mező üres és a felhasználó értesítés aktív, akkor a jelszót a rendszer generálja.'; $lang['add_ok'] = 'A felhasználó sikeresen hozzáadva.'; $lang['add_fail'] = 'A felhasználó hozzáadása nem sikerült.'; $lang['notify_ok'] = 'Értesítő levél elküldve.'; $lang['notify_fail'] = 'Nem sikerült az értesítő levelet elküldeni.'; +$lang['import_userlistcsv'] = 'Felhasználók listája fájl (CSV)'; +$lang['import_header'] = 'Legutóbbi importálás - Hibák'; +$lang['import_success_count'] = 'Felhasználók importálása: %d felhasználót találtunk, ebből %d sikeresen importálva.'; +$lang['import_failure_count'] = 'Felhasználók importálása: %d sikertelen. A sikertelenség okait lejjebb találod.'; +$lang['import_error_fields'] = 'Túl kevés mezőt adtál meg, %d darabot találtunk, legalább 4-re van szükség.'; +$lang['import_error_baduserid'] = 'Felhasználói azonosító hiányzik'; +$lang['import_error_badname'] = 'Nem megfelelő név'; +$lang['import_error_badmail'] = 'Nem megfelelő e-mailcím'; +$lang['import_error_upload'] = 'Sikertelen importálás. A csv fájl nem feltölthető vagy üres.'; +$lang['import_error_readfail'] = 'Sikertelen importálás. A feltöltött fájl nem olvasható.'; +$lang['import_error_create'] = 'Ez a felhasználó nem hozható létre'; +$lang['import_notify_fail'] = 'Az értesítő e-mail nem küldhető el az alábbi importált felhasználónak: %s e-mailcíme: %s.'; +$lang['import_downloadfailures'] = 'Töltsd le a hibákat tartalmazó fájlt CSV formátumban, hogy ki tudd javítani a hibákat'; diff --git a/lib/plugins/usermanager/lang/it/lang.php b/lib/plugins/usermanager/lang/it/lang.php index 0222ff1e4..dfacc6545 100644 --- a/lib/plugins/usermanager/lang/it/lang.php +++ b/lib/plugins/usermanager/lang/it/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Italian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Chris Smith <chris@jalakai.co.uk> * @author Silvia Sargentoni <polinnia@tin.it> * @author Pietro Battiston toobaz@email.it diff --git a/lib/plugins/usermanager/lang/ja/import.txt b/lib/plugins/usermanager/lang/ja/import.txt new file mode 100644 index 000000000..d4f7d08bf --- /dev/null +++ b/lib/plugins/usermanager/lang/ja/import.txt @@ -0,0 +1,10 @@ +===== 一括ユーザーインポート ===== + +少なくとも4列のユーザーCSVファイルが必要です。 +列の順序:ユーザーID、氏名、電子メールアドレス、グループ。 +CSVフィールドはカンマ(,)区切り、文字列は引用符("")区切りです。 +エスケープにバックスラッシュ(\)を使用できます。 +適切なファイル例は、上記の"エクスポートユーザー"機能で試して下さい。 +重複するユーザーIDは無視されます。 + +正常にインポートされたユーザー毎に、パスワードを作成し、電子メールで送付します。
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ja/lang.php b/lib/plugins/usermanager/lang/ja/lang.php index 1510d1eb0..0830416f3 100644 --- a/lib/plugins/usermanager/lang/ja/lang.php +++ b/lib/plugins/usermanager/lang/ja/lang.php @@ -1,6 +1,8 @@ <?php + /** - * japanese language file + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Yuji Takenaka <webmaster@davilin.com> * @author Chris Smith <chris@jalakai.co.uk> * @author Ikuo Obataya <i.obataya@gmail.com> @@ -8,6 +10,8 @@ * @author Kazutaka Miyasaka <kazmiya@gmail.com> * @author Taisuke Shimamoto <dentostar@gmail.com> * @author Satoshi Sahara <sahara.satoshi@gmail.com> + * @author Hideaki SAWADA <sawadakun@live.jp> + * @author Hideaki SAWADA <chuno@live.jp> */ $lang['menu'] = 'ユーザー管理'; $lang['noauth'] = '(ユーザー認証が無効です)'; @@ -30,6 +34,11 @@ $lang['search'] = '検索'; $lang['search_prompt'] = '検索を実行'; $lang['clear'] = '検索フィルターをリセット'; $lang['filter'] = 'フィルター'; +$lang['export_all'] = '全ユーザーのエクスポート(CSV)'; +$lang['export_filtered'] = '抽出したユーザー一覧のエクスポート(CSV)'; +$lang['import'] = '新規ユーザーのインポート'; +$lang['line'] = '行番号'; +$lang['error'] = 'エラーメッセージ'; $lang['summary'] = 'ユーザー %1$d-%2$d / %3$d, 総ユーザー数 %4$d'; $lang['nonefound'] = 'ユーザーが見つかりません, 総ユーザー数 %d'; $lang['delete_ok'] = '%d ユーザーが削除されました'; @@ -50,3 +59,16 @@ $lang['add_ok'] = 'ユーザーを登録しました'; $lang['add_fail'] = 'ユーザーの登録に失敗しました'; $lang['notify_ok'] = '通知メールを送信しました'; $lang['notify_fail'] = '通知メールを送信できませんでした'; +$lang['import_userlistcsv'] = 'ユーザー一覧ファイル(CSV):'; +$lang['import_header'] = '最新インポート - 失敗'; +$lang['import_success_count'] = 'ユーザーインポート:ユーザーが%d件あり、%d件正常にインポートされました。'; +$lang['import_failure_count'] = 'ユーザーインポート:%d件が失敗しました。失敗は次のとおりです。'; +$lang['import_error_fields'] = '列の不足(4列必要)が%d件ありました。'; +$lang['import_error_baduserid'] = '欠落したユーザーID'; +$lang['import_error_badname'] = '不正な氏名'; +$lang['import_error_badmail'] = '不正な電子メールアドレス'; +$lang['import_error_upload'] = 'インポートが失敗しました。CSVファイルをアップロードできなかったか、ファイルが空です。'; +$lang['import_error_readfail'] = 'インポートが失敗しました。アップロードされたファイルが読込できません。'; +$lang['import_error_create'] = 'ユーザーが作成できません。'; +$lang['import_notify_fail'] = '通知メッセージがインポートされたユーザー(%s)・電子メールアドレス(%s)に送信できませんでした。'; +$lang['import_downloadfailures'] = '修正用に失敗を CSVファイルとしてダウンロードする。'; diff --git a/lib/plugins/usermanager/lang/ko/import.txt b/lib/plugins/usermanager/lang/ko/import.txt new file mode 100644 index 000000000..44fe392d0 --- /dev/null +++ b/lib/plugins/usermanager/lang/ko/import.txt @@ -0,0 +1,9 @@ +===== 대량 사용자 가져오기 ===== + +적어도 열 네 개가 있는 사용자의 CSV 파일이 필요합니다. +열은 다음과 같이 포함해야 합니다: 사용자 id, 실명, 이메일 주소와 그룹. +CSV 필드는 인용 부호("")로 쉼표(,)와 구분된 문자열로 구분해야 합니다. 백슬래시(\)는 탈출에 사용할 수 있습니다. +적절한 파일의 예를 들어, 위의 "사용자 목록 내보내기"를 시도하세요. +중복된 사용자 id는 무시됩니다. + +비밀번호는 생성되고 각 성공적으로 가져온 사용자에게 이메일로 보내집니다.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ko/lang.php b/lib/plugins/usermanager/lang/ko/lang.php index 57bfbc4a2..ccc7f9059 100644 --- a/lib/plugins/usermanager/lang/ko/lang.php +++ b/lib/plugins/usermanager/lang/ko/lang.php @@ -1,21 +1,23 @@ <?php + /** - * Korean language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author jk Lee * @author dongnak@gmail.com * @author Song Younghwan <purluno@gmail.com> * @author Seung-Chul Yoo <dryoo@live.com> * @author erial2@gmail.com * @author Myeongjin <aranet100@gmail.com> + * @author Gerrit Uitslag <klapinklapin@gmail.com> */ $lang['menu'] = '사용자 관리자'; $lang['noauth'] = '(사용자 인증이 불가능합니다)'; $lang['nosupport'] = '(사용자 관리가 지원되지 않습니다)'; -$lang['badauth'] = '인증 메카니즘이 잘못되었습니다'; +$lang['badauth'] = '인증 메커니즘이 잘못되었습니다'; $lang['user_id'] = '사용자'; $lang['user_pass'] = '비밀번호'; -$lang['user_name'] = '실제 이름'; +$lang['user_name'] = '실명'; $lang['user_mail'] = '이메일 '; $lang['user_groups'] = '그룹'; $lang['field'] = '항목'; @@ -26,14 +28,19 @@ $lang['delete_selected'] = '선택 삭제'; $lang['edit'] = '편집'; $lang['edit_prompt'] = '이 사용자 편집'; $lang['modify'] = '바뀜 저장'; -$lang['search'] = '찾기'; -$lang['search_prompt'] = '찾기 실행'; -$lang['clear'] = '찾기 필터 초기화'; +$lang['search'] = '검색'; +$lang['search_prompt'] = '검색 수행'; +$lang['clear'] = '검색 필터 재설정'; $lang['filter'] = '필터'; +$lang['export_all'] = '모든 사용자 목록 내보내기 (CSV)'; +$lang['export_filtered'] = '필터된 사용자 목록 내보내기 (CSV)'; +$lang['import'] = '새 사용자 목록 가져오기'; +$lang['line'] = '줄 번호'; +$lang['error'] = '오류 메시지'; $lang['summary'] = '찾은 사용자 %3$d 중 %1$d-%2$d을(를) 봅니다. 전체 사용자는 %4$d명입니다.'; $lang['nonefound'] = '찾은 사용자가 없습니다. 전체 사용자는 %d명입니다.'; $lang['delete_ok'] = '사용자 %d명이 삭제되었습니다'; -$lang['delete_fail'] = '사용자 %d명의 삭제가 실패했습니다.'; +$lang['delete_fail'] = '사용자 %d명을 삭제하는 데 실패했습니다.'; $lang['update_ok'] = '사용자 정보를 성공적으로 바꾸었습니다'; $lang['update_fail'] = '사용자 정보를 바꾸는 데 실패했습니다'; $lang['update_exists'] = '사용자 이름을 바꾸는 데 실패했습니다. 사용자 이름(%s)이 이미 존재합니다. (다른 항목의 바뀜은 적용됩니다.)'; @@ -50,3 +57,16 @@ $lang['add_ok'] = '사용자를 성공적으로 추가했습니 $lang['add_fail'] = '사용자 추가를 실패했습니다'; $lang['notify_ok'] = '알림 이메일을 성공적으로 보냈습니다'; $lang['notify_fail'] = '알림 이메일을 보낼 수 없습니다'; +$lang['import_userlistcsv'] = '사용자 목록 파일 (CSV):'; +$lang['import_header'] = '가장 최근 가져오기 - 실패'; +$lang['import_success_count'] = '사용자 가져오기: 사용자 %d명을 찾았고, %d명을 성공적으로 가져왔습니다.'; +$lang['import_failure_count'] = '사용자 가져오기: %d명을 가져오지 못했습니다. 실패는 아래에 나타나 있습니다.'; +$lang['import_error_fields'] = '충분하지 않은 필드로, %d개를 찾았고, 4개가 필요합니다.'; +$lang['import_error_baduserid'] = '사용자 id 없음'; +$lang['import_error_badname'] = '잘못된 이름'; +$lang['import_error_badmail'] = '잘못된 이메일 주소'; +$lang['import_error_upload'] = '가져오기를 실패했습니다. csv 파일을 올릴 수 없거나 비어 있습니다.'; +$lang['import_error_readfail'] = '가져오기를 실패했습니다. 올린 파일을 읽을 수 없습니다.'; +$lang['import_error_create'] = '사용자를 만들 수 없습니다.'; +$lang['import_notify_fail'] = '알림 메시지를 가져온 %2$s (이메일: %1$s ) 사용자에게 보낼 수 없습니다.'; +$lang['import_downloadfailures'] = '교정을 위한 CSV로 다운로드 실패'; diff --git a/lib/plugins/usermanager/lang/ne/lang.php b/lib/plugins/usermanager/lang/ne/lang.php index f68ed2074..9a44d19ce 100644 --- a/lib/plugins/usermanager/lang/ne/lang.php +++ b/lib/plugins/usermanager/lang/ne/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Nepali language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com> * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com> * @author Saroj Dhakal<lotusnagarkot@yahoo.com> diff --git a/lib/plugins/usermanager/lang/nl/import.txt b/lib/plugins/usermanager/lang/nl/import.txt new file mode 100644 index 000000000..267891098 --- /dev/null +++ b/lib/plugins/usermanager/lang/nl/import.txt @@ -0,0 +1,8 @@ +===== Massa-import van gebruikers ===== + +Hiervoor is een CSV-bestand nodig van de gebruikers met minstens vier kolommen. De kolommen moeten bevatten, in deze volgorde: gebruikers-id, complete naam, e-mailadres en groepen. +Het CSV-velden moeten worden gescheiden met komma's (,) en de teksten moeten worden omringd met dubbele aanhalingstekens (""). Backslash (\) kan worden gebruikt om te escapen. +Voor een voorbeeld van een werkend bestand, probeer de "Exporteer Gebruikers" functie hierboven. +Dubbele gebruikers-id's zullen worden genegeerd. + +Een wachtwoord zal worden gegenereerd en gemaild naar elke gebruiker die succesvol is geïmporteerd.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/nl/lang.php b/lib/plugins/usermanager/lang/nl/lang.php index e960e9a14..5cebede89 100644 --- a/lib/plugins/usermanager/lang/nl/lang.php +++ b/lib/plugins/usermanager/lang/nl/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Dutch language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Wouter Schoot <wouter@schoot.org> * @author John de Graaff <john@de-graaff.net> * @author Niels Schoot <niels.schoot@quintiq.com> @@ -13,7 +14,7 @@ * @author Timon Van Overveldt <timonvo@gmail.com> * @author Jeroen * @author Ricardo Guijt <ricardoguijt@gmail.com> - * @author Gerrit <klapinklapin@gmail.com> + * @author Gerrit Uitslag <klapinklapin@gmail.com> */ $lang['menu'] = 'Gebruikersmanager'; $lang['noauth'] = '(gebruikersauthenticatie niet beschikbaar)'; @@ -36,6 +37,11 @@ $lang['search'] = 'Zoek'; $lang['search_prompt'] = 'Voer zoekopdracht uit'; $lang['clear'] = 'Verwijder zoekfilter'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Exporteer Alle Gebruikers (CSV)'; +$lang['export_filtered'] = 'Exporteer Gefilterde Gebruikers (CSV)'; +$lang['import'] = 'Importeer Nieuwe Gebruikers'; +$lang['line'] = 'Regelnummer'; +$lang['error'] = 'Foutmelding'; $lang['summary'] = 'Weergegeven gebruikers %1$d-%2$d van %3$d gevonden. %4$d gebruikers in totaal.'; $lang['nonefound'] = 'Geen gebruikers gevonden. %d gebruikers in totaal.'; $lang['delete_ok'] = '%d gebruikers verwijderd'; @@ -56,3 +62,16 @@ $lang['add_ok'] = 'Gebruiker succesvol toegevoegd'; $lang['add_fail'] = 'Gebruiker kon niet worden toegevoegd'; $lang['notify_ok'] = 'Notificatie-e-mail verzonden'; $lang['notify_fail'] = 'Notificatie-e-mail kon niet worden verzonden'; +$lang['import_userlistcsv'] = 'Gebruikerslijst (CSV-bestand):'; +$lang['import_header'] = 'Meest recente import - Gevonden fouten'; +$lang['import_success_count'] = 'Gebruikers importeren: %d gebruikers gevonden, %d geïmporteerd'; +$lang['import_failure_count'] = 'Gebruikers importeren: %d mislukt. Fouten zijn hieronder weergegeven.'; +$lang['import_error_fields'] = 'Onvoldoende velden, gevonden %d, nodig 4.'; +$lang['import_error_baduserid'] = 'Gebruikers-id mist'; +$lang['import_error_badname'] = 'Verkeerde naam'; +$lang['import_error_badmail'] = 'Verkeerd e-mailadres'; +$lang['import_error_upload'] = 'Importeren mislukt. Het CSV bestand kon niet worden geüpload of is leeg.'; +$lang['import_error_readfail'] = 'Importeren mislukt. Lezen van het geüploade bestand is mislukt.'; +$lang['import_error_create'] = 'Aanmaken van de gebruiker was niet mogelijk.'; +$lang['import_notify_fail'] = 'Notificatiebericht kon niet naar de geïmporteerde gebruiker worden verstuurd, %s met e-mail %s.'; +$lang['import_downloadfailures'] = 'Download de gevonden fouten als CSV voor correctie'; diff --git a/lib/plugins/usermanager/lang/pt-br/lang.php b/lib/plugins/usermanager/lang/pt-br/lang.php index 637be8860..9bb37742a 100644 --- a/lib/plugins/usermanager/lang/pt-br/lang.php +++ b/lib/plugins/usermanager/lang/pt-br/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Portuguese language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br> * @author Felipe Castro <fefcas@gmail.com> * @author Lucien Raven <lucienraven@yahoo.com.br> @@ -17,6 +18,8 @@ * @author Isaias Masiero Filho <masiero@masiero.org> * @author Balaco Baco <balacobaco@imap.cc> * @author Victor Westmann <victor.westmann@gmail.com> + * @author Leone Lisboa Magevski <leone1983@gmail.com> + * @author Dário Estevão <darioems@gmail.com> */ $lang['menu'] = 'Gerenciamento de Usuários'; $lang['noauth'] = '(o gerenciamento de usuários não está disponível)'; @@ -39,6 +42,10 @@ $lang['search'] = 'Pesquisar'; $lang['search_prompt'] = 'Executar a pesquisa'; $lang['clear'] = 'Limpar o filtro de pesquisa'; $lang['filter'] = 'Filtro'; +$lang['export_all'] = 'Exportar Todos Usuários (CSV)'; +$lang['import'] = 'Importar Novos Usuários'; +$lang['line'] = 'Linha Nº.'; +$lang['error'] = 'Mensagem de Erro'; $lang['summary'] = 'Exibindo usuários %1$d-%2$d de %3$d encontrados. %4$d usuários no total.'; $lang['nonefound'] = 'Nenhum usuário encontrado. %d usuários no total.'; $lang['delete_ok'] = '%d usuários excluídos'; @@ -59,3 +66,12 @@ $lang['add_ok'] = 'O usuário foi adicionado com sucesso'; $lang['add_fail'] = 'O usuário não foi adicionado'; $lang['notify_ok'] = 'O e-mail de notificação foi enviado'; $lang['notify_fail'] = 'Não foi possível enviar o e-mail de notificação'; +$lang['import_success_count'] = 'Importação de Usuário: %d usuário (s) encontrado (s), %d importado (s) com sucesso.'; +$lang['import_failure_count'] = 'Importação de Usuário: %d falhou. As falhas estão listadas abaixo.'; +$lang['import_error_fields'] = 'Campos insuficientes, encontrado (s) %d, necessário 4.'; +$lang['import_error_baduserid'] = 'Id do usuário não encontrado.'; +$lang['import_error_badname'] = 'Nome errado'; +$lang['import_error_badmail'] = 'Endereço de email errado'; +$lang['import_error_upload'] = 'Falha na Importação: O arquivo csv não pode ser carregado ou está vazio.'; +$lang['import_error_readfail'] = 'Falha na Importação: Habilitar para ler o arquivo a ser carregado.'; +$lang['import_error_create'] = 'Habilitar para criar o usuário.'; diff --git a/lib/plugins/usermanager/lang/pt/import.txt b/lib/plugins/usermanager/lang/pt/import.txt new file mode 100644 index 000000000..3a604030c --- /dev/null +++ b/lib/plugins/usermanager/lang/pt/import.txt @@ -0,0 +1,9 @@ +===== Importação de Utilizadores em Massa ===== + +Requer um ficheiro CSV de utilizadores com pelo menos quatro colunas. +As colunas têm de conter, em ordem: id de utilizador, nome completo, endereço de email e grupos. +Os campos CSV devem ser separados por vírgulas (,) e as strings delimitadas por aspas (""). A contra-barra (\) pode ser usada para escapar. +Para um exemplo de um ficheiro adequado, tente a função "Exportar Utilizadores" acima. +Ids de utilizador duplicados serão ignorados. + +Uma senha será gerada e enviada por email a cada utilizador importado com sucesso.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/pt/lang.php b/lib/plugins/usermanager/lang/pt/lang.php index 6d0d85e38..b59649aa1 100644 --- a/lib/plugins/usermanager/lang/pt/lang.php +++ b/lib/plugins/usermanager/lang/pt/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Portugueselanguage file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com> * @author Enrico Nicoletto <liverig@gmail.com> * @author Fil <fil@meteopt.com> @@ -29,6 +30,10 @@ $lang['search'] = 'Pesquisar'; $lang['search_prompt'] = 'Pesquisar'; $lang['clear'] = 'Limpar Filtro de Pesquisa'; $lang['filter'] = 'Filtro'; +$lang['export_all'] = 'Exportar Todos os Utilizadores (CSV)'; +$lang['export_filtered'] = 'Exportar a lista de utilizadores filtrada (CSV)'; +$lang['import'] = 'Importar Novos Utilizadores'; +$lang['error'] = 'Mensagem de erro'; $lang['summary'] = 'Apresentar utilizadores %1$d-%2$d de %3$d encontrados. %4$d inscritos.'; $lang['nonefound'] = 'Nenhum utilizador encontrado. %d inscritos.'; $lang['delete_ok'] = '%d utilizadores removidos'; @@ -49,3 +54,11 @@ $lang['add_ok'] = 'Utilizador adicionado.'; $lang['add_fail'] = 'Utilizador não adicionado.'; $lang['notify_ok'] = 'Mensagem de notificação enviada.'; $lang['notify_fail'] = 'Não foi possível enviar mensagem de notificação'; +$lang['import_success_count'] = 'Importar Utilizadores: %d utiliyadores encontrados, %d importados com sucesso.'; +$lang['import_failure_count'] = 'Importar Utilizadores: %d falharam. As falhas estão listadas abaixo.'; +$lang['import_error_fields'] = 'Campos insuficientes, encontrados %d mas requeridos 4.'; +$lang['import_error_baduserid'] = 'Falta id de utilizador'; +$lang['import_error_upload'] = 'Falhou a importação. O ficheiro csv não pôde ser importado ou está vazio.'; +$lang['import_error_readfail'] = 'Falhou a importação. Não foi possível ler o ficheiro submetido.'; +$lang['import_error_create'] = 'Não foi possível criar o utilizador.'; +$lang['import_notify_fail'] = 'A mensagem de notificação não pôde ser enviada para o utilizador importado, %s com email %s.'; diff --git a/lib/plugins/usermanager/lang/ru/import.txt b/lib/plugins/usermanager/lang/ru/import.txt new file mode 100644 index 000000000..3a25f34ce --- /dev/null +++ b/lib/plugins/usermanager/lang/ru/import.txt @@ -0,0 +1,9 @@ +===== Импорт нескольких пользователей ===== + +Потребуется список пользователей в файле формата CSV, состоящий из 4 столбцов. +Столбцы должны быть заполнены следующим образом: user-id, полное имя, эл. почта, группы. +Поля CSV должны быть отделены запятой (,), а строки должны быть заключены в кавычки (""). Обратный слэш используется как прерывание. +В качестве примера можете взять список пользователей, экспортированный через «Экспорт пользователей». +Повторяющиеся идентификаторы user-id будут игнорироваться. + +Пароль доступа будет сгенерирован и отправлен по почте удачно импортированному пользователю.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/ru/lang.php b/lib/plugins/usermanager/lang/ru/lang.php index 29cee6576..3102ac32a 100644 --- a/lib/plugins/usermanager/lang/ru/lang.php +++ b/lib/plugins/usermanager/lang/ru/lang.php @@ -1,8 +1,8 @@ <?php + /** - * Russian language file - * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Denis Simakov <akinoame1@gmail.com> * @author Andrew Pleshakov <beotiger@mail.ru> * @author Змей Этерийский evil_snake@eternion.ru @@ -18,6 +18,7 @@ * @author Eugene <windy.wanderer@gmail.com> * @author Johnny Utah <pcpa@cyberpunk.su> * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua) + * @author Pavel <ivanovtsk@mail.ru> */ $lang['menu'] = 'Управление пользователями'; $lang['noauth'] = '(авторизация пользователей недоступна)'; @@ -40,7 +41,12 @@ $lang['search'] = 'Поиск'; $lang['search_prompt'] = 'Искать'; $lang['clear'] = 'Сброс фильтра поиска'; $lang['filter'] = 'Фильтр'; -$lang['summary'] = 'Показаны пользователи %1$d-%2$d из %3$d найденных. Всего пользователей: %4$d.'; +$lang['export_all'] = 'Экспорт всех пользователей (CSV)'; +$lang['export_filtered'] = 'Экспорт пользователей с фильтрацией списка (CSV)'; +$lang['import'] = 'Импорт новых пользователей'; +$lang['line'] = 'Строка №'; +$lang['error'] = 'Ошибка'; +$lang['summary'] = 'Показаны пользователи %1$d–%2$d из %3$d найденных. Всего пользователей: %4$d.'; $lang['nonefound'] = 'Не найдено ни одного пользователя. Всего пользователей: %d.'; $lang['delete_ok'] = 'Удалено пользователей: %d'; $lang['delete_fail'] = 'Не удалось удалить %d.'; @@ -60,3 +66,13 @@ $lang['add_ok'] = 'Пользователь успешно доб $lang['add_fail'] = 'Не удалось добавить пользователя'; $lang['notify_ok'] = 'Письмо с уведомлением отправлено'; $lang['notify_fail'] = 'Не удалось отправить письмо с уведомлением'; +$lang['import_success_count'] = 'Импорт пользователей: %d пользователей найдено, %d импортировано успешно.'; +$lang['import_failure_count'] = 'Импорт пользователей: %d не удалось. Список ошибок прочтите ниже.'; +$lang['import_error_fields'] = 'Не все поля заполнены. Найдено %d, а нужно 4.'; +$lang['import_error_baduserid'] = 'Отсутствует идентификатор пользователя'; +$lang['import_error_badname'] = 'Имя не годится'; +$lang['import_error_badmail'] = 'Адрес электронной почты не годится'; +$lang['import_error_upload'] = 'Импорт не удался. CSV файл не загружен или пуст.'; +$lang['import_error_readfail'] = 'Импорт не удался. Невозможно прочесть загруженный файл.'; +$lang['import_error_create'] = 'Невозможно создать пользователя'; +$lang['import_notify_fail'] = 'Оповещение не может быть отправлено импортированному пользователю %s по электронной почте %s.'; diff --git a/lib/plugins/usermanager/lang/sk/import.txt b/lib/plugins/usermanager/lang/sk/import.txt new file mode 100644 index 000000000..91fa3e370 --- /dev/null +++ b/lib/plugins/usermanager/lang/sk/import.txt @@ -0,0 +1,9 @@ +===== Hromadný import používateľov ===== + +Vyžaduje CSV súbor používateľov s minimálne 4 stĺpcami. +Stĺpce musia obsahovať postupne: ID používateľa, meno a priezvisko, emailová adresa a skupiny. +CVS záznamy by mali byť oddelené čiarkou (,) a reťazce uzavreté úvodzovkami (""). Znak (\) sa používa v spojení so špeciálnymi znakmi. +Príklad vhodného súboru je možné získať funkciou "Export používateľov". +Duplicitné ID používateľov budú ignorované. + +Každému úspešne importovanému používateľovi bude vygenerované heslo a zaslaný email.
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/sk/lang.php b/lib/plugins/usermanager/lang/sk/lang.php index 54ed374c6..9aadbb53a 100644 --- a/lib/plugins/usermanager/lang/sk/lang.php +++ b/lib/plugins/usermanager/lang/sk/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Slovak language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Ondrej Végh <ov@vsieti.sk> * @author Michal Mesko <michal.mesko@gmail.com> * @author exusik@gmail.com @@ -28,6 +29,11 @@ $lang['search'] = 'Hľadať'; $lang['search_prompt'] = 'Vykonať vyhľadávanie'; $lang['clear'] = 'Vynulovať vyhľadávací filter'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Export všetkých používateľov (CSV)'; +$lang['export_filtered'] = 'Export zoznamu používateľov na základe filtra (CSV)'; +$lang['import'] = 'Import nových používateľov'; +$lang['line'] = 'Riadok č.'; +$lang['error'] = 'Chybová správa'; $lang['summary'] = 'Zobrazenie užívateľov %1$d-%2$d z %3$d nájdených. %4$d užívateľov celkom.'; $lang['nonefound'] = 'Žiadni užívatelia nenájdení. %d užívateľov celkom.'; $lang['delete_ok'] = '%d užívateľov zmazaných'; @@ -48,3 +54,16 @@ $lang['add_ok'] = 'Používateľ úspešne pridaný'; $lang['add_fail'] = 'Pridávanie užívateľa nebolo úspešné'; $lang['notify_ok'] = 'Notifikačný e-mail bol poslaný'; $lang['notify_fail'] = 'Notifikačný e-mail nemohol byť poslaný'; +$lang['import_userlistcsv'] = 'Súbor so zoznamov používateľov (CSV):'; +$lang['import_header'] = 'Chyby pri poslednom importe'; +$lang['import_success_count'] = 'Import používateľov: %d nájdených, %d úspešne importovaných.'; +$lang['import_failure_count'] = 'Import používateľov: %d neúspešných. Problámy vypísané nižšie.'; +$lang['import_error_fields'] = 'Neúplné záznamy, %d nájdené, 4 požadované.'; +$lang['import_error_baduserid'] = 'Chýba ID používateľa'; +$lang['import_error_badname'] = 'Nesprávne meno'; +$lang['import_error_badmail'] = 'Nesprávna emailová adresa'; +$lang['import_error_upload'] = 'Import neúspešný. CSV súbor nemohol byť nahraný alebo je prázdny.'; +$lang['import_error_readfail'] = 'Import neúspešný. Nie je možné prečítať nahraný súbor.'; +$lang['import_error_create'] = 'Nie je možné vytvoriť pouzívateľa'; +$lang['import_notify_fail'] = 'Správa nemohla byť zaslaná importovanému používatelovi, %s s emailom %s.'; +$lang['import_downloadfailures'] = 'Stiahnuť chyby vo formáte CSV za účelom opravy'; diff --git a/lib/plugins/usermanager/lang/sl/lang.php b/lib/plugins/usermanager/lang/sl/lang.php index 96acfd0af..dc2de375e 100644 --- a/lib/plugins/usermanager/lang/sl/lang.php +++ b/lib/plugins/usermanager/lang/sl/lang.php @@ -1,11 +1,13 @@ <?php + /** - * Slovenian language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Dejan Levec <webphp@gmail.com> * @author Boštjan Seničar <senicar@gmail.com> * @author Gregor Skumavc (grega.skumavc@gmail.com) * @author Matej Urbančič (mateju@svn.gnome.org) + * @author Matej Urbančič <mateju@svn.gnome.org> */ $lang['menu'] = 'Upravljanje uporabnikov'; $lang['noauth'] = '(overjanje istovetnosti uporabnikov ni na voljo)'; @@ -28,6 +30,9 @@ $lang['search'] = 'Iskanje'; $lang['search_prompt'] = 'Poišči'; $lang['clear'] = 'Počisti filter iskanja'; $lang['filter'] = 'Filter'; +$lang['import'] = 'Uvozi nove uporabnike'; +$lang['line'] = 'Številka vrstice'; +$lang['error'] = 'Sporočilo napake'; $lang['summary'] = 'Izpisani so uporabniki %1$d-%2$d od skupno %3$d. Vseh uporabnikov je %4$d.'; $lang['nonefound'] = 'Ni najdenih uporabnikov. Vseh uporabnikov je %d.'; $lang['delete_ok'] = '%d uporabnikov je izbrisanih'; @@ -48,3 +53,11 @@ $lang['add_ok'] = 'Uporabnik je uspešno dodan'; $lang['add_fail'] = 'Dodajanje uporabnika je spodletelo'; $lang['notify_ok'] = 'Obvestilno sporočilo je poslano.'; $lang['notify_fail'] = 'Obvestilnega sporočila ni mogoče poslati.'; +$lang['import_error_fields'] = 'Neustrezno število polj; najdenih je %d, zahtevana pa so 4.'; +$lang['import_error_baduserid'] = 'Manjka ID uporabnika'; +$lang['import_error_badname'] = 'Napačno navedeno ime'; +$lang['import_error_badmail'] = 'Napačno naveden elektronski naslov'; +$lang['import_error_upload'] = 'Uvoz je spodletel. Datoteke CSV ni mogoče naložiti ali pa je prazna.'; +$lang['import_error_readfail'] = 'Uvoz je spodletel. Ni mogoče prebrati vsebine datoteke.'; +$lang['import_error_create'] = 'Ni mogoče ustvariti računa uporabnika'; +$lang['import_notify_fail'] = 'Obvestilnega sporočila za uvoženega uporabnika %s z elektronskim naslovom %s ni mogoče poslati.'; diff --git a/lib/plugins/usermanager/lang/sv/lang.php b/lib/plugins/usermanager/lang/sv/lang.php index f8b530d90..340886578 100644 --- a/lib/plugins/usermanager/lang/sv/lang.php +++ b/lib/plugins/usermanager/lang/sv/lang.php @@ -1,10 +1,11 @@ <?php + /** - * Swedish language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Per Foreby <per@foreby.se> * @author Nicklas Henriksson <nicklas[at]nihe.se> - * @author Håkan Sandell <hakan.sandell[at]mydata.se> + * @author Håkan Sandell <hakan.sandell@home.se> * @author Dennis Karlsson * @author Tormod Otter Johansson <tormod@latast.se> * @author emil@sys.nu @@ -13,9 +14,9 @@ * @author Emil Lind <emil@sys.nu> * @author Bogge Bogge <bogge@bogge.com> * @author Peter Åström <eaustreum@gmail.com> - * @author Håkan Sandell <hakan.sandell@home.se> * @author mikael@mallander.net * @author Smorkster Andersson smorkster@gmail.com + * @author Tor Härnqvist <tor.harnqvist@gmail.com> */ $lang['menu'] = 'Hantera användare'; $lang['noauth'] = '(användarautentisering ej tillgänlig)'; @@ -38,6 +39,10 @@ $lang['search'] = 'Sök'; $lang['search_prompt'] = 'Utför sökning'; $lang['clear'] = 'Återställ sökfilter'; $lang['filter'] = 'Filter'; +$lang['export_all'] = 'Exportera alla användare (CSV)'; +$lang['export_filtered'] = 'Exportera filtrerade användarlistningen (CSV)'; +$lang['import'] = 'Importera nya användare'; +$lang['error'] = 'Error-meddelande'; $lang['summary'] = 'Visar användare %1$d-%2$d av %3$d funna. %4$d användare totalt.'; $lang['nonefound'] = 'Inga användare hittades. %d användare totalt.'; $lang['delete_ok'] = '%d användare raderade'; @@ -58,3 +63,11 @@ $lang['add_ok'] = 'Användaren tillagd'; $lang['add_fail'] = 'Användare kunde inte läggas till'; $lang['notify_ok'] = 'E-postmeddelande skickat'; $lang['notify_fail'] = 'E-postmeddelande kunde inte skickas'; +$lang['import_success_count'] = 'Användar-import: %d användare funna, %d importerade framgångsrikt.'; +$lang['import_failure_count'] = 'Användar-import: %d misslyckades. Misslyckandena listas nedan.'; +$lang['import_error_baduserid'] = 'Användar-id saknas'; +$lang['import_error_badname'] = 'Felaktigt namn'; +$lang['import_error_badmail'] = 'Felaktig e-postadress'; +$lang['import_error_upload'] = 'Import misslyckades. Csv-filen kunde inte laddas upp eller är tom.'; +$lang['import_error_readfail'] = 'Import misslyckades. Den uppladdade filen gick inte att läsa.'; +$lang['import_error_create'] = 'Misslyckades att skapa användaren.'; diff --git a/lib/plugins/usermanager/lang/tr/lang.php b/lib/plugins/usermanager/lang/tr/lang.php index 7ddb7dd5d..6329803a8 100644 --- a/lib/plugins/usermanager/lang/tr/lang.php +++ b/lib/plugins/usermanager/lang/tr/lang.php @@ -1,7 +1,8 @@ <?php + /** - * Turkish language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Aydın Coşkuner <aydinweb@gmail.com> * @author Cihan Kahveci <kahvecicihan@gmail.com> * @author Yavuz Selim <yavuzselim@gmail.com> diff --git a/lib/plugins/usermanager/lang/uk/lang.php b/lib/plugins/usermanager/lang/uk/lang.php index 027c94b44..3afb7b7d6 100644 --- a/lib/plugins/usermanager/lang/uk/lang.php +++ b/lib/plugins/usermanager/lang/uk/lang.php @@ -1,8 +1,8 @@ <?php + /** - * ukrainian language file - * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author Oleksiy Voronin <ovoronin@gmail.com> * @author serg_stetsuk@ukr.net * @author okunia@gmail.com diff --git a/lib/plugins/usermanager/lang/zh-tw/import.txt b/lib/plugins/usermanager/lang/zh-tw/import.txt new file mode 100644 index 000000000..a6bb5f6ef --- /dev/null +++ b/lib/plugins/usermanager/lang/zh-tw/import.txt @@ -0,0 +1,9 @@ +===== 批次匯入使用者 ===== + +需提供 CSV 格式的使用者列表檔案(UTF-8 編碼)。 +每列至少 4 欄,依序為:帳號、姓名、電郵、群組。 +各欄以半形逗號 (,) 分隔,有半形逗號的字串可用半形雙引號 ("") 分開,引號可用反斜線 (\) 跳脫。 +重複的使用者帳號會自動忽略。 +如需要範例檔案,可用上面的「匯出使用者」取得。 + +系統會為成功匯入的使用者產生密碼並寄信通知。 diff --git a/lib/plugins/usermanager/lang/zh-tw/lang.php b/lib/plugins/usermanager/lang/zh-tw/lang.php index 980d974cc..3fb6b6712 100644 --- a/lib/plugins/usermanager/lang/zh-tw/lang.php +++ b/lib/plugins/usermanager/lang/zh-tw/lang.php @@ -1,27 +1,34 @@ <?php + /** - * English language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author chinsan <chinsan.tw@gmail.com> * @author Li-Jiun Huang <ljhuang.tw@gmail.com> * @author http://www.chinese-tools.com/tools/converter-simptrad.html * @author Wayne San <waynesan@zerozone.tw> * @author Li-Jiun Huang <ljhuang.tw@gmai.com> * @author Cheng-Wei Chien <e.cwchien@gmail.com> - * @author Danny Lin <danny0838@pchome.com.tw> * @author Shuo-Ting Jian <shoting@gmail.com> * @author syaoranhinata@gmail.com * @author Ichirou Uchiki <syaoranhinata@gmail.com> + * @author tsangho <ou4222@gmail.com> + * @author Danny Lin <danny0838@gmail.com> */ $lang['menu'] = '帳號管理器'; + +// custom language strings for the plugin $lang['noauth'] = '(帳號認證尚未開放)'; $lang['nosupport'] = '(尚不支援帳號管理)'; + $lang['badauth'] = '錯誤的認證機制'; + $lang['user_id'] = '帳號'; $lang['user_pass'] = '密碼'; $lang['user_name'] = '名稱'; $lang['user_mail'] = '電郵'; $lang['user_groups'] = '群組'; + $lang['field'] = '欄位'; $lang['value'] = '設定值'; $lang['add'] = '增加'; @@ -34,6 +41,12 @@ $lang['search'] = '搜尋'; $lang['search_prompt'] = '開始搜尋'; $lang['clear'] = '重設篩選條件'; $lang['filter'] = '篩選條件 (Filter)'; +$lang['export_all'] = '匯出所有使用者 (CSV)'; +$lang['export_filtered'] = '匯出篩選後的使用者列表 (CSV)'; +$lang['import'] = '匯入新使用者'; +$lang['line'] = '列號'; +$lang['error'] = '錯誤訊息'; + $lang['summary'] = '顯示帳號 %1$d-%2$d,共 %3$d 筆符合。共有 %4$d 個帳號。'; $lang['nonefound'] = '找不到帳號。共有 %d 個帳號。'; $lang['delete_ok'] = '已刪除 %d 個帳號'; @@ -41,10 +54,13 @@ $lang['delete_fail'] = '%d 個帳號無法刪除。'; $lang['update_ok'] = '已更新該帳號'; $lang['update_fail'] = '無法更新該帳號'; $lang['update_exists'] = '無法變更帳號名稱 (%s) ,因為有同名帳號存在。其他修改則已套用。'; + $lang['start'] = '開始'; $lang['prev'] = '上一頁'; $lang['next'] = '下一頁'; $lang['last'] = '最後一頁'; + +// added after 2006-03-09 release $lang['edit_usermissing'] = '找不到選取的帳號,可能已被刪除或改為其他名稱。'; $lang['user_notify'] = '通知使用者'; $lang['note_notify'] = '通知信只會在指定使用者新密碼時寄送。'; @@ -54,3 +70,18 @@ $lang['add_ok'] = '已新增使用者'; $lang['add_fail'] = '無法新增使用者'; $lang['notify_ok'] = '通知信已寄出'; $lang['notify_fail'] = '通知信無法寄出'; + +// import & errors +$lang['import_userlistcsv'] = '使用者列表檔案 (CSV): '; +$lang['import_header'] = '最近一次匯入 - 失敗'; +$lang['import_success_count'] = '使用者匯入:找到 %d 個使用者,已成功匯入 %d 個。'; +$lang['import_failure_count'] = '使用者匯入:%d 個匯入失敗,列出於下。'; +$lang['import_error_fields'] = '欄位不足,需要 4 個,找到 %d 個。'; +$lang['import_error_baduserid'] = '使用者帳號遺失'; +$lang['import_error_badname'] = '名稱不正確'; +$lang['import_error_badmail'] = '電郵位址不正確'; +$lang['import_error_upload'] = '匯入失敗,CSV 檔案內容空白或無法匯入。'; +$lang['import_error_readfail'] = '匯入錯誤,無法讀取上傳的檔案'; +$lang['import_error_create'] = '無法建立使用者'; +$lang['import_notify_fail'] = '通知訊息無法寄給已匯入的使用者 %s(電郵 %s)'; +$lang['import_downloadfailures'] = '下載失敗項的 CSV 檔案以供修正'; diff --git a/lib/plugins/usermanager/lang/zh/import.txt b/lib/plugins/usermanager/lang/zh/import.txt new file mode 100644 index 000000000..eacce5a77 --- /dev/null +++ b/lib/plugins/usermanager/lang/zh/import.txt @@ -0,0 +1,7 @@ +===== 批量导入用户 ===== + +需要至少有 4 列的 CSV 格式用户列表文件。列必须按顺序包括:用户ID、全名、电子邮件地址和组。 +CSV 域需要用逗号 (,) 分隔,字符串用英文双引号 ("") 分开。反斜杠可以用来转义。 +可以尝试上面的“导入用户”功能来查看示例文件。重复的用户ID将被忽略。 + +密码生成后会通过电子邮件发送给每个成功导入的用户。
\ No newline at end of file diff --git a/lib/plugins/usermanager/lang/zh/lang.php b/lib/plugins/usermanager/lang/zh/lang.php index e7a228229..25eb1a294 100644 --- a/lib/plugins/usermanager/lang/zh/lang.php +++ b/lib/plugins/usermanager/lang/zh/lang.php @@ -1,7 +1,8 @@ <?php + /** - * English language file - * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * * @author ZDYX <zhangduyixiong@gmail.com> * @author http://www.chinese-tools.com/tools/converter-tradsimp.html * @author George Sheraton guxd@163.com @@ -14,6 +15,8 @@ * @author caii, patent agent in China <zhoucaiqi@gmail.com> * @author lainme993@gmail.com * @author Shuo-Ting Jian <shoting@gmail.com> + * @author Rachel <rzhang0802@gmail.com> + * @author Yangyu Huang <yangyu.huang@gmail.com> */ $lang['menu'] = '用户管理器'; $lang['noauth'] = '(用户认证不可用)'; @@ -36,6 +39,11 @@ $lang['search'] = '搜索'; $lang['search_prompt'] = '进行搜索'; $lang['clear'] = '重置搜索过滤器'; $lang['filter'] = '过滤器'; +$lang['export_all'] = '导出所有用户(CSV)'; +$lang['export_filtered'] = '导出已筛选的用户列表(CSV)'; +$lang['import'] = '请输入新用户名'; +$lang['line'] = '行号'; +$lang['error'] = '信息错误'; $lang['summary'] = '找到 %3$d 名用户,显示其中第 %1$d 至 %2$d 位用户。数据库中共有 %4$d 名用户。'; $lang['nonefound'] = '没有找到用户。数据库中共有 %d 名用户。'; $lang['delete_ok'] = '用户 %d 已删除'; @@ -56,3 +64,15 @@ $lang['add_ok'] = '用户添加成功'; $lang['add_fail'] = '用户添加失败'; $lang['notify_ok'] = '通知邮件已发送'; $lang['notify_fail'] = '通知邮件无法发送'; +$lang['import_userlistcsv'] = '用户列表文件(CSV)'; +$lang['import_header'] = '最近一次导入 - 失败'; +$lang['import_success_count'] = '用户导入:找到了 %d 个用户,%d 个用户被成功导入。'; +$lang['import_failure_count'] = '用户导入:%d 个用户导入失败。下面列出了失败的用户。'; +$lang['import_error_fields'] = '域的数目不足,发现 %d 个,需要 4 个。'; +$lang['import_error_baduserid'] = '用户ID丢失'; +$lang['import_error_badname'] = '名称错误'; +$lang['import_error_badmail'] = '邮件地址错误'; +$lang['import_error_upload'] = '导入失败。CSV 文件无法上传或是空的。'; +$lang['import_error_readfail'] = '导入失败。无法读取上传的文件。'; +$lang['import_error_create'] = '不能创建新用户'; +$lang['import_notify_fail'] = '通知消息无法发送到导入的用户 %s,电子邮件地址是 %s。'; diff --git a/lib/plugins/usermanager/plugin.info.txt b/lib/plugins/usermanager/plugin.info.txt index 1f8c2282b..315459122 100644 --- a/lib/plugins/usermanager/plugin.info.txt +++ b/lib/plugins/usermanager/plugin.info.txt @@ -3,5 +3,5 @@ author Chris Smith email chris@jalakai.co.uk date 2013-02-20 name User Manager -desc Manage users +desc Manage DokuWiki user accounts url http://dokuwiki.org/plugin:usermanager diff --git a/lib/plugins/usermanager/style.css b/lib/plugins/usermanager/style.css index ff8e5d9d1..d119b195a 100644 --- a/lib/plugins/usermanager/style.css +++ b/lib/plugins/usermanager/style.css @@ -13,8 +13,21 @@ #user__manager table { margin-bottom: 1em; } +#user__manager ul.notes { + padding-left: 0; + padding-right: 1.4em; +} #user__manager input.button[disabled] { color: #ccc!important; border-color: #ccc!important; } +#user__manager .import_users { + margin-top: 1.4em; +} +#user__manager .import_failures { + margin-top: 1.4em; +} +#user__manager .import_failures td.lineno { + text-align: center; +} /* IE won't understand but doesn't require it */ |