diff --git a/module/user/config/form.php b/module/user/config/form.php new file mode 100644 index 0000000000..906aad1d23 --- /dev/null +++ b/module/user/config/form.php @@ -0,0 +1,16 @@ +user->form = new stdclass(); +$config->user->form->batchCreate = common::formConfig('user', 'batchCreate'); +$config->user->form->batchCreate['dept'] = array('required' => false, 'type' => 'int', 'default' => 0); +$config->user->form->batchCreate['company'] = array('required' => false, 'type' => 'int', 'default' => 0); +$config->user->form->batchCreate['new'] = array('required' => false, 'type' => 'int', 'default' => 0); +$config->user->form->batchCreate['newName'] = array('required' => false, 'type' => 'string', 'default' => ''); +$config->user->form->batchCreate['account'] = array('required' => true, 'type' => 'string', 'default' => '', 'base' => true); +$config->user->form->batchCreate['realname'] = array('required' => true, 'type' => 'string', 'default' => ''); +$config->user->form->batchCreate['visions'] = array('required' => true, 'type' => 'string', 'default' => $config->vision); +$config->user->form->batchCreate['role'] = array('required' => false, 'type' => 'string', 'default' => ''); +$config->user->form->batchCreate['group'] = array('required' => false, 'type' => 'string', 'default' => '', 'filter' => 'join'); +$config->user->form->batchCreate['email'] = array('required' => false, 'type' => 'string', 'default' => ''); +$config->user->form->batchCreate['gender'] = array('required' => false, 'type' => 'string', 'default' => ''); +$config->user->form->batchCreate['password'] = array('required' => true, 'type' => 'string', 'default' => ''); +$config->user->form->batchCreate['join'] = array('required' => false, 'type' => 'date', 'default' => null); diff --git a/module/user/control.php b/module/user/control.php index 759056d016..e1b51b26cf 100755 --- a/module/user/control.php +++ b/module/user/control.php @@ -563,6 +563,15 @@ class user extends control */ public function batchCreate($deptID = 0) { + if(!empty($_POST)) + { + $userIdList = $this->user->batchCreate(); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $userIdList)); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $this->createLink('company', 'browse'))); + } + $groups = $this->dao->select('id, name, role') ->from(TABLE_GROUP) ->where('vision')->eq($this->config->vision) @@ -578,14 +587,6 @@ class user extends control $this->lang->user->menu = $this->lang->company->menu; $this->lang->user->menuOrder = $this->lang->company->menuOrder; - if(!empty($_POST)) - { - $userIDList = $this->user->batchCreate(); - - if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $userIDList)); - return print(js::locate($this->createLink('company', 'browse'), 'parent')); - } - /* Set custom. */ foreach(explode(',', $this->config->user->availableBatchCreateFields) as $field) { @@ -598,17 +599,14 @@ class user extends control $this->view->customFields = $customFields; $this->view->showFields = join(',', $showFields); - $title = $this->lang->company->common . $this->lang->colon . $this->lang->user->batchCreate; - $position[] = $this->lang->user->batchCreate; - $this->view->title = $title; - $this->view->position = $position; + $this->view->title = $this->lang->company->common . $this->lang->colon . $this->lang->user->batchCreate; $this->view->depts = $this->dept->getOptionMenu(); $this->view->deptID = $deptID; $this->view->groupList = $groupList; $this->view->roleGroup = $roleGroup; $this->view->rand = $this->user->updateSessionRandom(); $this->view->visionList = $this->user->getVisionList(); - $this->view->companies = $this->loadModel('company')->getOutsideCompanies() + array('ditto' => $this->lang->user->ditto); + $this->view->companies = $this->loadModel('company')->getOutsideCompanies(); $this->display(); } diff --git a/module/user/css/batchcreate.ui.css b/module/user/css/batchcreate.ui.css new file mode 100644 index 0000000000..30b78b922b --- /dev/null +++ b/module/user/css/batchcreate.ui.css @@ -0,0 +1 @@ +.user-batchcreate-heading {justify-content: flex-start;} diff --git a/module/user/js/batchcreate.ui.js b/module/user/js/batchcreate.ui.js new file mode 100644 index 0000000000..06e9eb9fad --- /dev/null +++ b/module/user/js/batchcreate.ui.js @@ -0,0 +1,39 @@ +function changeType(event) +{ + const type = $(event.target).val(); + const $dept = $('[data-name="dept"]'); + const $company = $('[data-name="companyItem"]'); + const $join = $('[data-name="join"]'); + if(type == 'inside') + { + $dept.removeClass('hidden'); + $company.addClass('hidden'); + $join.removeClass('hidden'); + } + else + { + $dept.addClass('hidden'); + $company.removeClass('hidden'); + $join.addClass('hidden'); + } + $('#userType').val(type); +} + +function toggleNew(event) +{ + const $target = $(event.target); + const $currentRow = $target.closest('tr'); + const $company = $currentRow.find('select[data-name = "company"]'); + const $newCompany = $currentRow.find('input[data-name = "company"]'); + $target.toggleClass('checked'); + if($target.hasClass('checked')) + { + $company.addClass('hidden'); + $newCompany.removeClass('hidden'); + } + else + { + $company.removeClass('hidden'); + $newCompany.addClass('hidden'); + } +} diff --git a/module/user/js/common.ui.js b/module/user/js/common.ui.js index 7ea5d3ae44..c1e26662dd 100644 --- a/module/user/js/common.ui.js +++ b/module/user/js/common.ui.js @@ -46,3 +46,24 @@ function computePasswordStrength(password) return strength; } + +/** + * Switch account + * + * @param string $account + * @param string $method + * @access public + * @return void + */ +$(document).ready(function() +{ + var verifyEncrypted = false; + $('#verifyPassword').on('change', function(){verifyEncrypted = false}); + $('#verifyPassword').closest('form').find('button[type="submit"]').on('click', function() + { + var password = $('input#verifyPassword').val().trim(); + var rand = $('input#verifyRand').val(); + if(!verifyEncrypted && password) $('input#verifyPassword').val(md5(md5(password) + rand)); + verifyEncrypted = true; + }); +}); diff --git a/module/user/lang/de.php b/module/user/lang/de.php index f27713ce8e..113027c854 100644 --- a/module/user/lang/de.php +++ b/module/user/lang/de.php @@ -82,6 +82,9 @@ $lang->user->submit = 'Submit'; $lang->user->resetPWD = 'Reset Password'; $lang->user->resetTitle = 'Admin reset the password'; +$lang->user->abbr = new stdclass(); +$lang->user->abbr->id = 'ID'; + $lang->user->legendBasic = 'Basic Information'; $lang->user->legendContribution = 'Contribution'; @@ -233,14 +236,14 @@ $lang->user->placeholder->passwordStrengthCheck[1] = 'The password should be ≥ $lang->user->placeholder->passwordStrengthCheck[2] = 'The password should be ≥ 10 letters, combination of uppercase, lowercase letters, numbers, and special symbols.'; $lang->user->error = new stdclass(); -$lang->user->error->account = "ID %s,Konto muss Buchstaben, Unterstriche oder Ziffern enthalten. Mindestens 3 Zeichen."; -$lang->user->error->accountDupl = "ID %s,Konto wurde genutzt."; -$lang->user->error->realname = "ID %s,muss der Realname sein"; -$lang->user->error->visions = "ID %s,must be version type"; -$lang->user->error->password = "ID %s,passwort muss mindestens 6 Zeichen lang sein."; -$lang->user->error->mail = "ID %s,bitte geben Sie eine gültige Emailadresse an."; -$lang->user->error->reserved = "ID %s,Konto ist reserviert."; -$lang->user->error->weakPassword = "ID %s,the password strength is less than the system setting."; +$lang->user->error->account = 'ID %s,Konto muss Buchstaben, Unterstriche oder Ziffern enthalten. Mindestens 3 Zeichen.'; +$lang->user->error->accountDupl = 'ID %s,Konto wurde genutzt.'; +$lang->user->error->realname = 'ID %s,muss der Realname sein'; +$lang->user->error->visions = 'ID %s,must be version type'; +$lang->user->error->password = 'ID %s,passwort muss mindestens 6 Zeichen lang sein.'; +$lang->user->error->mail = 'ID %s,bitte geben Sie eine gültige Emailadresse an.'; +$lang->user->error->reserved = 'ID %s,Konto ist reserviert.'; +$lang->user->error->weakPassword = 'ID %s,the password strength is less than the system setting.'; $lang->user->error->dangerPassword = "ID %s,Passwords cannot be used with [%s] these commonly used if-passwords."; $lang->user->error->url = "Invalid address. Please contact your ZenTao Admin."; diff --git a/module/user/lang/en.php b/module/user/lang/en.php index 4715fc972f..8117342a80 100644 --- a/module/user/lang/en.php +++ b/module/user/lang/en.php @@ -82,6 +82,9 @@ $lang->user->submit = 'Submit'; $lang->user->resetPWD = 'Reset Password'; $lang->user->resetTitle = 'Admin reset the password'; +$lang->user->abbr = new stdclass(); +$lang->user->abbr->id = 'ID'; + $lang->user->legendBasic = 'Basic Information'; $lang->user->legendContribution = 'Contribution'; @@ -233,15 +236,15 @@ $lang->user->placeholder->passwordStrengthCheck[1] = 'The password should be ≥ $lang->user->placeholder->passwordStrengthCheck[2] = 'The password should be ≥ 10 letters, combination of uppercase, lowercase letters, numbers, and special symbols.'; $lang->user->error = new stdclass(); -$lang->user->error->account = "ID %s,account must be >= 3 letters, underline or numbers"; -$lang->user->error->accountDupl = "ID %s,account is used."; -$lang->user->error->realname = "ID %s,must be real name"; -$lang->user->error->visions = "ID %s,must be version type"; -$lang->user->error->password = "ID %s,password must be >= 6 characters."; -$lang->user->error->mail = "ID %s,enter valid Email address"; -$lang->user->error->reserved = "ID %s,account is reserved."; -$lang->user->error->weakPassword = "ID %s,the password strength is less than the system setting."; -$lang->user->error->dangerPassword = "ID %s,passwords cannot be used with [%s] these commonly used if-passwords."; +$lang->user->error->account = 'account must be >= 3 letters, underline or numbers'; +$lang->user->error->accountDupl = 'account is used.'; +$lang->user->error->realname = 'must be real name'; +$lang->user->error->visions = 'must be version type'; +$lang->user->error->password = 'password must be >= 6 characters.'; +$lang->user->error->mail = 'enter valid Email address'; +$lang->user->error->reserved = 'account is reserved.'; +$lang->user->error->weakPassword = 'the password strength is less than the system setting.'; +$lang->user->error->dangerPassword = "passwords cannot be used with [%s] these commonly used if-passwords."; $lang->user->error->url = "Invalid address. Please contact your ZenTao Admin."; $lang->user->error->verify = "Wrong account or password."; diff --git a/module/user/lang/fr.php b/module/user/lang/fr.php index 606d9d3426..063d2fc664 100644 --- a/module/user/lang/fr.php +++ b/module/user/lang/fr.php @@ -82,6 +82,9 @@ $lang->user->submit = 'Submit'; $lang->user->resetPWD = 'Reset Password'; $lang->user->resetTitle = 'Admin reset the password'; +$lang->user->abbr = new stdclass(); +$lang->user->abbr->id = 'ID'; + $lang->user->legendBasic = 'Informations de Base'; $lang->user->legendContribution = 'Contribution'; @@ -233,15 +236,15 @@ $lang->user->placeholder->passwordStrengthCheck[1] = 'Le mot de passe doit ≥ 6 $lang->user->placeholder->passwordStrengthCheck[2] = 'Le mot de passe doit ≥ 10 caractères, combinaison de lettres majuscules, minuscules, de chiffres et de symboles spéciaux.'; $lang->user->error = new stdclass(); -$lang->user->error->account = "ID %s,compte doit être >= 3 lettres, souligné ou chiffres"; -$lang->user->error->accountDupl = "ID %s,compte déjà utilisé par quelqu'un d'autre."; -$lang->user->error->realname = "ID %s,doit être votre véritable nom"; -$lang->user->error->visions = "ID %s,must be version type"; -$lang->user->error->password = "ID %s,Mot de passe doit être >= 6 caractères."; -$lang->user->error->mail = "ID %s,entrez une adresse mail valide"; -$lang->user->error->reserved = "ID %s,compte réservé. Vous ne pouvez pas l'utiliser."; -$lang->user->error->weakPassword = "ID %s,la force du mot de passe est inférieure au paramètrage système."; -$lang->user->error->dangerPassword = "ID %s,Les mots de passe ne peuvent pas utiliser ces [%s] mots de passe faibles couramment utilisés."; +$lang->user->error->account = 'compte doit être >= 3 lettres, souligné ou chiffres'; +$lang->user->error->accountDupl = 'compte déjà utilisé par quelqu\'un d\'autre.'; +$lang->user->error->realname = 'doit être votre véritable nom'; +$lang->user->error->visions = 'must be version type'; +$lang->user->error->password = 'Mot de passe doit être >= 6 caractères.'; +$lang->user->error->mail = 'entrez une adresse mail valide'; +$lang->user->error->reserved = 'compte réservé. Vous ne pouvez pas l\'utiliser.'; +$lang->user->error->weakPassword = 'la force du mot de passe est inférieure au paramètrage système.'; +$lang->user->error->dangerPassword = "Les mots de passe ne peuvent pas utiliser ces [%s] mots de passe faibles couramment utilisés."; $lang->user->error->url = "Invalid address. Please contact your ZenTao Admin."; $lang->user->error->verify = "Wrong account or password."; diff --git a/module/user/lang/zh-cn.php b/module/user/lang/zh-cn.php index 6fd1d4d8d0..ab66e10cfc 100644 --- a/module/user/lang/zh-cn.php +++ b/module/user/lang/zh-cn.php @@ -82,6 +82,9 @@ $lang->user->submit = '提交'; $lang->user->resetPWD = '重置密码'; $lang->user->resetTitle = '系统管理员重置密码'; +$lang->user->abbr = new stdclass(); +$lang->user->abbr->id = '序号'; + $lang->user->legendBasic = '基本资料'; $lang->user->legendContribution = '个人贡献'; @@ -233,15 +236,15 @@ $lang->user->placeholder->passwordStrengthCheck[1] = '密码必须6位及以上 $lang->user->placeholder->passwordStrengthCheck[2] = '密码必须10位及以上,且包含大小写字母、数字、特殊符号。'; $lang->user->error = new stdclass(); -$lang->user->error->account = "【ID %s】的用户名应该为:三位以上的英文、数字或下划线的组合"; -$lang->user->error->accountDupl = "【ID %s】的用户名已经存在"; -$lang->user->error->realname = "【ID %s】的真实姓名必须填写"; -$lang->user->error->visions = "【ID %s】的界面类型必须填写"; -$lang->user->error->password = "【ID %s】的密码必须为六位及以上"; -$lang->user->error->mail = "【ID %s】的邮箱地址不正确"; -$lang->user->error->reserved = "【ID %s】的用户名已被系统预留"; -$lang->user->error->weakPassword = "【ID %s】的密码强度小于系统设定。"; -$lang->user->error->dangerPassword = "【ID %s】的密码不能使用【%s】这些常用若口令。"; +$lang->user->error->account = '用户名应该为:三位以上的英文、数字或下划线的组合'; +$lang->user->error->accountDupl = '用户名已经存在'; +$lang->user->error->realname = '真实姓名必须填写'; +$lang->user->error->visions = '界面类型必须填写'; +$lang->user->error->password = '密码必须为六位及以上'; +$lang->user->error->mail = '地址不正确'; +$lang->user->error->reserved = '用户名已被系统预留'; +$lang->user->error->weakPassword = '密码强度小于系统设定。'; +$lang->user->error->dangerPassword = "密码不能使用【%s】这些常用若口令。"; $lang->user->error->url = "网址不正确,请联系管理员"; $lang->user->error->verify = "用户名或密码错误"; diff --git a/module/user/model.php b/module/user/model.php index 3dde9c9ed6..dfd14f1dfb 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -397,54 +397,53 @@ class userModel extends model */ public function batchCreate() { - if(empty($_POST['verifyPassword']) or $this->post->verifyPassword != md5($this->app->user->password . $this->session->rand)) helper::end(js::alert($this->lang->user->error->verifyPassword)); + if(empty($_POST['verifyPassword']) or $this->post->verifyPassword != md5($this->app->user->password . $this->session->rand)) dao::$errors['verifyPassword'][] = $this->lang->user->error->verifyPassword; $users = fixer::input('post')->get(); $data = array(); $accounts = array(); - for($i = 1; $i <= $this->config->user->batchCreate; $i++) + for($i = 0; $i < $this->config->user->batchCreate; $i++) { $users->account[$i] = trim($users->account[$i]); if($users->account[$i] != '') { - if(strtolower($users->account[$i]) == 'guest') helper::end(js::error(sprintf($this->lang->user->error->reserved, $i))); + if(strtolower($users->account[$i]) == 'guest') dao::$errors["account{$i}"][] = $this->lang->user->error->reserved; $account = $this->dao->select('account')->from(TABLE_USER)->where('account')->eq($users->account[$i])->fetch(); - if($account) helper::end(js::error(sprintf($this->lang->user->error->accountDupl, $i))); - if(in_array($users->account[$i], $accounts)) helper::end(js::error(sprintf($this->lang->user->error->accountDupl, $i))); - if(!validater::checkAccount($users->account[$i])) helper::end(js::error(sprintf($this->lang->user->error->account, $i))); - if($users->realname[$i] == '') helper::end(js::error(sprintf($this->lang->user->error->realname, $i))); - if(empty($users->visions[$i])) helper::end(js::error(sprintf($this->lang->user->error->visions, $i))); - if($users->email[$i] and !validater::checkEmail($users->email[$i])) helper::end(js::error(sprintf($this->lang->user->error->mail, $i))); - $users->password[$i] = (isset($prev['password']) and $users->ditto[$i] == 'on' and !$this->post->password[$i]) ? $prev['password'] : $this->post->password[$i]; - if(!validater::checkReg($users->password[$i], '|(.){6,}|')) helper::end(js::error(sprintf($this->lang->user->error->password, $i))); - $role = $users->role[$i] == 'ditto' ? (isset($prev['role']) ? $prev['role'] : '') : $users->role[$i]; - $visions = in_array('ditto', $users->visions[$i]) ? (isset($prev['visions']) ? $prev['visions'] : array()) : $users->visions[$i]; + if($account) dao::$errors["account[{$i}]"][] = $this->lang->user->error->accountDupl; + if(in_array($users->account[$i], $accounts)) dao::$errors["account[{$i}]"][] = $this->lang->user->error->accountDupl; + if(!validater::checkAccount($users->account[$i])) dao::$errors["account[{$i}]"][] = $this->lang->user->error->account; + + if($users->email[$i] and !validater::checkEmail($users->email[$i])) dao::$errors["email[{$i}]"][] = $this->lang->user->error->mail; + $users->password[$i] = $this->post->password[$i]; + if(!validater::checkReg($users->password[$i], '|(.){6,}|')) dao::$errors["password[{$i}]"][] = $this->lang->user->error->password; /* Check weak and common weak password. */ - if(isset($this->config->safe->mode) and $this->computePasswordStrength($users->password[$i]) < $this->config->safe->mode) helper::end(js::error(sprintf($this->lang->user->error->weakPassword, $i))); + if(isset($this->config->safe->mode) and $this->computePasswordStrength($users->password[$i]) < $this->config->safe->mode) dao::$errors["password[{$i}]"][] = $this->lang->user->error->weakPassword; if(!empty($this->config->safe->changeWeak)) { if(!isset($this->config->safe->weak)) $this->app->loadConfig('admin'); - if(strpos(",{$this->config->safe->weak},", ",{$users->password[$i]},") !== false) helper::end(js::error(sprintf($this->lang->user->error->dangerPassword, $i, $this->config->safe->weak))); + if(strpos(",{$this->config->safe->weak},", ",{$users->password[$i]},") !== false) dao::$errors["password[{$i}]"][] = sprintf($this->lang->user->error->dangerPassword, $this->config->safe->weak); } $data[$i] = new stdclass(); if($users->userType == 'outside') { - $data[$i]->company = $users->company[$i] == 'ditto' ? (isset($prev['company']) ? $prev['company'] : 0) : $users->company[$i]; + $data[$i]->company = isset($users->new[$i]) ? $users->newCompany[$i] : $users->company[$i]; $data[$i]->newCompany = isset($users->new[$i]) ? true : false; $data[$i]->type = 'outside'; + $data[$i]->dept = 0; + $data[$i]->join = null; } else { - $data[$i]->dept = $users->dept[$i] == 'ditto' ? (isset($prev['dept']) ? $prev['dept'] : 0) : $users->dept[$i]; - $data[$i]->join = empty($users->join[$i]) ? '0000-00-00' : ($users->join[$i]); + $data[$i]->dept = $users->dept[$i]; + $data[$i]->join = empty($users->join[$i]) ? null : ($users->join[$i]); $data[$i]->type = 'inside'; } $data[$i]->account = $users->account[$i]; $data[$i]->realname = $users->realname[$i]; - $data[$i]->role = $role; - $data[$i]->group = in_array('ditto', isset($users->group[$i]) ? $users->group[$i] : array()) ? (isset($prev['group']) ? $prev['group'] : '') : $users->group[$i]; + $data[$i]->role = $users->role[$i]; + $data[$i]->group = $users->group[$i]; $data[$i]->email = $users->email[$i]; $data[$i]->gender = $users->gender[$i]; $data[$i]->password = md5(trim($users->password[$i])); @@ -459,7 +458,7 @@ class userModel extends model $data[$i]->phone = $users->phone[$i]; $data[$i]->address = $users->address[$i]; $data[$i]->zipcode = $users->zipcode[$i]; - $data[$i]->visions = join(',', $visions); + $data[$i]->visions = is_array($users->visions[$i]) ? join(',', $users->visions[$i]) : $users->visions[$i]; /* Check required fields. */ foreach(explode(',', $this->config->user->create->requiredFields) as $field) @@ -470,7 +469,7 @@ class userModel extends model if(!isset($data[$i]->$field)) continue; if(!empty($data[$i]->$field)) continue; - helper::end(js::error(sprintf($this->lang->error->notempty, $this->lang->user->$field))); + dao::$errors["{$field}[{$i}]"][] = sprintf($this->lang->error->notempty, $this->lang->user->$field); } /* Change for append field, such as feedback. */ @@ -486,18 +485,13 @@ class userModel extends model } } - $accounts[$i] = $data[$i]->account; - if($users->userType == 'outside') $prev['company'] = $data[$i]->company; - $prev['dept'] = $data[$i]->dept; - $prev['role'] = $data[$i]->role; - $prev['group'] = $data[$i]->group; - $prev['visions'] = $visions; - $prev['password'] = $users->password[$i]; + $accounts[$i] = $data[$i]->account; } } + if(dao::isError()) return false; $this->loadModel('mail'); - $userIDList = array(); + $userIdList = array(); foreach($data as $user) { if($user->type == 'outside' and $user->newCompany) @@ -527,24 +521,20 @@ class userModel extends model ->checkIF($user->phone != '', 'phone', 'phone') ->checkIF($user->mobile != '', 'mobile', 'mobile') ->exec(); + if(dao::isError()) return false; /* Fix bug #2941 */ $userID = $this->dao->lastInsertID(); - $userIDList[] = $userID; + $userIdList[] = $userID; $this->loadModel('action')->create('user', $userID, 'Created'); - if(dao::isError()) - { - echo js::error(dao::getError()); - helper::end(js::reload('parent')); - } - else - { - $this->computeUserView($user->account); - if($this->config->mail->mta == 'sendcloud' and !empty($user->email)) $this->mail->syncSendCloud('sync', $user->email, $user->realname); - } + if(dao::isError()) return false; + + $this->computeUserView($user->account); + if($this->config->mail->mta == 'sendcloud' and !empty($user->email)) $this->mail->syncSendCloud('sync', $user->email, $user->realname); + } - return $userIDList; + return $userIdList; } /** diff --git a/module/user/ui/batchcreate.html.php b/module/user/ui/batchcreate.html.php new file mode 100644 index 0000000000..fbf478b77d --- /dev/null +++ b/module/user/ui/batchcreate.html.php @@ -0,0 +1,289 @@ + + * @package user + * @link https://www.zentao.net + */ +namespace zin; + +jsVar('passwordStrengthList', $lang->user->passwordStrengthList); +jsVar('batchCreateCount', $config->user->batchCreate); + +$visibleFields = array(); +foreach(explode(',', $showFields) as $field) +{ + if(strpos(",{$config->user->availableBatchCreateFields},", ",{$field},") === false) continue; + if($field) $visibleFields[$field] = ''; +} + +foreach(explode(',', $config->user->create->requiredFields) as $field) +{ + if($field && strpos(",{$config->user->availableBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; +} + +formBatchPanel +( + import('/js/md5.js', 'js'), + set::headingClass('user-batchcreate-heading'), + set::title($lang->user->batchCreate), + on::change('[data-name="new"]', 'toggleNew'), + to::headingActions + ( + radioList + ( + on::change('changeType'), + set::name('type'), + set::value('inside'), + set::inline(true), + set::items($lang->user->typeList), + ), + ), + formBatchItem + ( + set::name('id'), + set::label($lang->user->abbr->id), + set::control('index'), + set::width('38px'), + ), + formBatchItem + ( + set::name('dept'), + set::label($lang->user->dept), + set::control('select'), + set::width('200px'), + set::items($depts), + set::value($deptID), + set::ditto(true), + set::hidden(zget($visibleFields, 'dept', true, false)), + ), + formBatchItem + ( + set::label($lang->user->company), + set::control('inputGroup'), + set::width('240px'), + set::name('companyItem'), + set::hidden(true), + inputGroup + ( + set::id('companyBox'), + select + ( + set::name('company'), + set::items($companies), + set::value(''), + width('135px'), + ), + input + ( + set::name('newCompany'), + set::value(''), + setClass('hidden'), + width('135px'), + ), + checkbox + ( + set::id('new'), + set::name('new'), + set::value(0), + set::text($lang->company->create), + set::rootClass('ml-4'), + ), + ), + ), + formBatchItem + ( + set::name('account'), + set::label($lang->user->account), + set::control('input'), + set::width('160px'), + ), + formBatchItem + ( + set::name('realname'), + set::label($lang->user->realname), + set::control('input'), + set::value(''), + set::width('96px'), + ), + count($visionList) > 1 ? formBatchItem + ( + set::name('visions'), + set::label($lang->user->visions), + set::control(array('type' => 'select', 'items' => $visionList, 'multiple' => true)), + set::width('200px'), + set::value(isset($visionList[$this->config->vision]) ? $this->config->vision : key($visionList)), + set::ditto(true), + ) : '', + formBatchItem + ( + set::name('role'), + set::label($lang->user->role), + set::control('select'), + set::width('200px'), + set::items($lang->user->roleList), + set::value(''), + set::ditto(true), + ), + formBatchItem + ( + set::name('group'), + set::label($lang->user->group), + set::control(array('type' => 'select', 'items' => $groupList, 'multiple' => true)), + set::width('200px'), + set::value(''), + set::ditto(true), + ), + formBatchItem + ( + set::name('email'), + set::label($lang->user->email), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'email', true, false)), + ), + formBatchItem + ( + set::name('gender'), + set::label($lang->user->gender), + set::control('radioListInline'), + set::items($lang->user->genderList), + set::value('m'), + set::width('160px'), + set::hidden(zget($visibleFields, 'gender', true, false)), + ), + formBatchItem + ( + set::name('password'), + set::label($lang->user->password), + set::control('input'), + set::width('200px'), + ), + formBatchItem + ( + set::name('commiter'), + set::label($lang->user->commiter), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'commiter', true, false)), + ), + formBatchItem + ( + set::name('join'), + set::label($lang->user->join), + set::control('date'), + set::width('160px'), + ), + formBatchItem + ( + set::name('skype'), + set::label($lang->user->skype), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'skype', true, false)), + ), + formBatchItem + ( + set::name('qq'), + set::label($lang->user->qq), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'qq', true, false)), + ), + formBatchItem + ( + set::name('dingding'), + set::label($lang->user->dingding), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'dingding', true, false)), + ), + formBatchItem + ( + set::name('weixin'), + set::label($lang->user->weixin), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'weixin', true, false)), + ), + formBatchItem + ( + set::name('mobile'), + set::label($lang->user->mobile), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'mobile', true, false)), + ), + formBatchItem + ( + set::name('slack'), + set::label($lang->user->slack), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'slack', true, false)), + ), + formBatchItem + ( + set::name('whatsapp'), + set::label($lang->user->whatsapp), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'whatsapp', true, false)), + ), + formBatchItem + ( + set::name('phone'), + set::label($lang->user->phone), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'phone', true, false)), + ), + formBatchItem + ( + set::name('address'), + set::label($lang->user->address), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'address', true, false)), + ), + formBatchItem + ( + set::name('zipcode'), + set::label($lang->user->zipcode), + set::control('input'), + set::width('160px'), + set::hidden(zget($visibleFields, 'zipcode', true, false)), + ), + div + ( + setClass('form-grid'), + formGroup + ( + setClass('flex verify-box'), + set::width('400px'), + set::label($lang->user->verifyPassword), + set::labelClass('w-10 mr-2'), + set::name('verifyPassword'), + set::value(''), + set::required(true), + ), + ), + formGroup + ( + setClass('hidden'), + set::name('verifyRand'), + set::value($rand), + ), + formGroup + ( + setClass('hidden'), + set::name('userType'), + set::value('inside'), + ), +); + +render(); +