Exemplo n.º 1
0
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);
    }
}
Exemplo n.º 2
0
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);
    }
}