function batchImportUsers() { global $tiki_p_admin, $prefs, $userGroups; $userlib = TikiLib::lib('user'); $tikilib = TikiLib::lib('tiki'); $smarty = TikiLib::lib('smarty'); $logslib = TikiLib::lib('logs'); $fname = $_FILES['csvlist']['tmp_name']; $fhandle = fopen($fname, 'r'); $fields = fgetcsv($fhandle, 1000); if (!$fields[0]) { $smarty->assign('msg', tra('The file has incorrect syntax or is not a CSV file')); $smarty->display('error.tpl'); die; } if (!in_array('login', $fields) || !in_array('email', $fields) || !in_array('password', $fields)) { $smarty->assign('msg', tra('The file does not have the required header:') . ' login, password, email'); $smarty->display('error.tpl'); die; } while (!feof($fhandle)) { $data = fgetcsv($fhandle, 1000); if (empty($data)) { continue; } $temp_max = count($fields); for ($i = 0; $i < $temp_max; $i++) { if ($fields[$i] == 'login' && function_exists('mb_detect_encoding') && mb_detect_encoding($data[$i], 'ASCII, UTF-8, ISO-8859-1') == 'ISO-8859-1') { $data[$i] = utf8_encode($data[$i]); } @($ar[$fields[$i]] = $data[$i]); } $userrecs[] = $ar; } fclose($fhandle); if (empty($userrecs) or !is_array($userrecs)) { $smarty->assign('msg', tra('No records were found. Check the file please!')); $smarty->display('error.tpl'); die; } // whether to force password change on first login or not $pass_first_login = isset($_REQUEST['forcePasswordChange']) && $_REQUEST['forcePasswordChange'] == 'on'; $added = 0; $errors = array(); $discarded = array(); foreach ($userrecs as $u) { $local = array(); $exist = false; if ($prefs['feature_intertiki'] == 'y' && !empty($prefs['feature_intertiki_mymaster'])) { if (empty($u['login']) && empty($u['email'])) { $local[] = discardUser($u, tra('User login or email is required')); } else { // pick up the info on the master $info = $userlib->interGetUserInfo($prefs['interlist'][$prefs['feature_intertiki_mymaster']], empty($u['login']) ? '' : $u['login'], empty($u['email']) ? '' : $u['email']); if (empty($info)) { $local[] = discardUser($u, tra('User does not exist on master')); } else { $u['login'] = $info['login']; $u['email'] = $info['email']; } } } else { if (empty($u['login'])) { $local[] = discardUser($u, tra('User login is required')); } if (empty($u['password'])) { if (!empty($_REQUEST['notification'])) { $u['password'] = $tikilib->genPass(); } else { $local[] = discardUser($u, tra('Password is required')); } } if (empty($u['email'])) { $local[] = discardUser($u, tra('Email is required')); } } if (!empty($local)) { $discarded = array_merge($discarded, $local); continue; } if ($userlib->user_exists($u['login'])) { // exist on local $exist = true; } if ($exist && $_REQUEST['overwrite'] == 'n') { $discarded[] = discardUser($u, tra('User is duplicated')); continue; } if (!$exist) { if (!empty($_REQUEST['notification'])) { $apass = md5($tikilib->genPass()); } else { $apass = ''; } $userlib->add_user($u['login'], $u['password'], $u['email'], $pass_first_login ? $u['password'] : '', $pass_first_login, $apass, NULL, !empty($_REQUEST['notification']) ? 'u' : NULL); global $user; $logslib->add_log('adminusers', sprintf(tra('Created account %s <%s>'), $u['login'], $u['email']), $user); if (!empty($_REQUEST['notification'])) { $realpass = $pass_first_login ? '' : $u['password']; $userlib->send_validation_email($u['login'], $apass, $u['email'], '', '', '', 'user_creation_validation_mail', $realpass); } } $userlib->set_user_fields($u); if ($exist && isset($_REQUEST['overwriteGroup'])) { $userlib->remove_user_from_all_groups($u['login']); } if (!empty($u['groups'])) { $grps = preg_split('/(?<!,),(?!,)/', $u['groups']); foreach ($grps as $grp) { $grp = preg_replace('/,,/', ',', preg_replace('/^ *(.*) *$/u', "\$1", $grp)); $existg = false; if ($userlib->group_exists($grp)) { $existg = true; } elseif (!empty($_REQUEST['createGroup']) && $userlib->add_group($grp)) { $existg = true; } if (!$existg) { $err = tra('Unknown') . ": {$grp}"; if (!in_array($err, $errors)) { $errors[] = $err; } } elseif ($tiki_p_admin != 'y' && !array_key_exists($grp, $userGroups)) { $smarty->assign('errortype', 401); $err = tra('Permission denied') . ": {$grp}"; if (!in_array($err, $errors)) { $errors[] = $err; } } else { $userlib->assign_user_to_group($u['login'], $grp); $logslib->add_log('perms', sprintf(tra('Assigned %s in group %s'), $u['login'], $grp), $user); } } } if (!empty($u['default_group'])) { $userlib->set_default_group($u['login'], $u['default_group']); } if (!empty($u['realName'])) { $tikilib->set_user_preference($u['login'], 'realName', $u['realName']); } $added++; } $smarty->assign('added', $added); if (count($discarded)) { $smarty->assign('discarded', count($discarded)); $smarty->assign_by_ref('discardlist', $discarded); } if (count($errors)) { array_unique($errors); $smarty->assign_by_ref('batcherrors', $errors); } }
function batchImportUsers() { global $userlib, $smarty, $logslib, $tiki_p_admin, $user; $fname = $_FILES['csvlist']['tmp_name']; $fhandle = fopen($fname, "r"); $fields = fgetcsv($fhandle, 1000); if (!$fields[0]) { $smarty->assign('msg', tra("The file is not a CSV file or has not a correct syntax")); $smarty->display("error.tpl"); die; } while (!feof($fhandle)) { $data = fgetcsv($fhandle, 1000); $temp_max = count($fields); for ($i = 0; $i < $temp_max; $i++) { if ($fields[$i] == "login" && function_exists("mb_detect_encoding") && mb_detect_encoding($data[$i], "ASCII, UTF-8, ISO-8859-1") == "ISO-8859-1") { $data[$i] = utf8_encode($data[$i]); } @($ar[$fields[$i]] = $data[$i]); } $userrecs[] = $ar; } fclose($fhandle); if (!is_array($userrecs)) { $smarty->assign('msg', tra("No records were found. Check the file please!")); $smarty->display("error.tpl"); die; } $added = 0; $errors = array(); if ($tiki_p_admin != 'y') { $userGroups = $userlib->get_user_groups_inclusion($user); } foreach ($userrecs as $u) { if (empty($u['login'])) { $discarded[] = discardUser($u, tra("User login is required")); } elseif (empty($u['password'])) { $discarded[] = discardUser($u, tra("Password is required")); } elseif (empty($u['email'])) { $discarded[] = discardUser($u, tra("Email is required")); } elseif ($userlib->user_exists($u['login']) and !isset($_REQUEST['overwrite'])) { $discarded[] = discardUser($u, tra("User is duplicated")); } else { if (!$userlib->user_exists($u['login'])) { $userlib->add_user($u['login'], $u['password'], $u['email']); $logslib->add_log('users', sprintf(tra("Created account %s <%s>"), $u["login"], $u["email"])); } $userlib->set_user_fields($u); if (@$u['groups']) { $grps = explode(",", $u['groups']); foreach ($grps as $grp) { $grp = preg_replace("/^ *(.*) *\$/u", "\$1", $grp); if (!$userlib->group_exists($grp)) { $err = tra("Unknown") . ": {$grp}"; if (!in_array($err, $errors)) { $errors[] = $err; } } elseif ($tiki_p_admin != 'y' && !array_key_exists($grp, $userGroups)) { $err = tra("Permission denied") . ": {$grp}"; if (!in_array($err, $errors)) { $errors[] = $err; } } else { $userlib->assign_user_to_group($u['login'], $grp); $logslib->add_log('perms', sprintf(tra("Assigned %s in group %s"), $u["login"], $grp)); } } } $added++; } } $smarty->assign('added', $added); if (@is_array($discarded)) { $smarty->assign('discarded', count($discarded)); } @$smarty->assign('discardlist', $discarded); if (count($errors)) { array_unique($errors); $smarty->assign_by_ref('errors', $errors); } }
function batchImportUsers() { $patterns['login'] = "******"; global $userlib, $smarty, $logslib, $tiki_p_admin, $user, $prefs; $fname = $_FILES['csvlist']['tmp_name']; $fhandle = fopen($fname, "r"); $fields = fgetcsv($fhandle, 1000); if (!$fields[0]) { $smarty->assign('msg', tra("The file is not a CSV file or has not a correct syntax")); $smarty->display("error.tpl"); die; } if ($fields[0] != "login" && $fields[0] != "password" && $fields[0] != "email" && $fields[0] != "groups") { $smarty->assign('msg', tra("The file does not have the required header:") . " login, email, password, groups"); $smarty->display("error.tpl"); die; } while (!feof($fhandle)) { $data = fgetcsv($fhandle, 1000); if (empty($data)) { continue; } $temp_max = count($fields); for ($i = 0; $i < $temp_max; $i++) { if ($fields[$i] == "login" && function_exists("mb_detect_encoding") && mb_detect_encoding($data[$i], "ASCII, UTF-8, ISO-8859-1") == "ISO-8859-1") { $data[$i] = utf8_encode($data[$i]); } @($ar[$fields[$i]] = $data[$i]); } $userrecs[] = $ar; } fclose($fhandle); if (empty($userrecs) or !is_array($userrecs)) { $smarty->assign('msg', tra("No records were found. Check the file please!")); $smarty->display("error.tpl"); die; } $added = 0; $errors = array(); $discarded = array(); if ($tiki_p_admin != 'y') { $userGroups = $userlib->get_user_groups_inclusion($user); } foreach ($userrecs as $u) { $local = array(); $exist = false; if ($prefs['feature_intertiki'] == 'y' && !empty($prefs['feature_intertiki_mymaster'])) { if (empty($u['login']) && empty($u['email'])) { $local[] = discardUser($u, tra("User login or email is required")); } else { // pick up the info on the master $info = $userlib->interGetUserInfo($prefs['interlist'][$prefs['feature_intertiki_mymaster']], empty($u['login']) ? '' : $u['login'], empty($u['email']) ? '' : $u['email']); if (empty($info)) { $local[] = discardUser($u, tra("User does not exist on master")); } else { $u['login'] = $info['login']; $u['email'] = $info['email']; } } } else { if (empty($u['login'])) { $local[] = discardUser($u, tra("User login is required")); } if (empty($u['password'])) { $local[] = discardUser($u, tra("Password is required")); } if (empty($u['email'])) { $local[] = discardUser($u, tra("Email is required")); } } if (!empty($local)) { $discarded = array_merge($discarded, $local); continue; } if ($userlib->user_exists($u['login'])) { // exist on local $exist = true; } if ($exist && $_REQUEST['overwrite'] == 'n') { $discarded[] = discardUser($u, tra("User is duplicated")); continue; } if (!$exist) { $pass_first_login = isset($_REQUEST['pass_first_login']) && $_REQUEST['pass_first_login'] == 'on' ? true : false; $userlib->add_user($u['login'], $u['password'], $u['email'], '', $pass_first_login); $logslib->add_log('users', sprintf(tra("Created account %s <%s>"), $u['login'], $u['email'])); } $userlib->set_user_fields($u); if ($exist && isset($_REQUEST['overwriteGroup'])) { $userlib->remove_user_from_all_groups($u['login']); } if (@$u['groups']) { $grps = explode(",", $u['groups']); foreach ($grps as $grp) { $grp = preg_replace("/^ *(.*) *\$/u", "\$1", $grp); if (!$userlib->group_exists($grp)) { $err = tra("Unknown") . ": {$grp}"; if (!in_array($err, $errors)) { $errors[] = $err; } } elseif ($tiki_p_admin != 'y' && !array_key_exists($grp, $userGroups)) { $smarty->assign('errortype', 401); $err = tra("Permission denied") . ": {$grp}"; if (!in_array($err, $errors)) { $errors[] = $err; } } else { $userlib->assign_user_to_group($u['login'], $grp); $logslib->add_log('perms', sprintf(tra("Assigned %s in group %s"), $u["login"], $grp)); } } } $added++; } $smarty->assign('added', $added); if (count($discarded)) { $smarty->assign('discarded', count($discarded)); $smarty->assign_by_ref('discardlist', $discarded); } if (count($errors)) { array_unique($errors); $smarty->assign_by_ref('errors', $errors); } }