From f9facbeffee0044625b69171c3919a611cfc7f38 Mon Sep 17 00:00:00 2001 From: Nate Jones Date: Fri, 20 Jun 2014 22:21:39 +0000 Subject: [PATCH] User Manager: Ability to edit Username, verifies unique. --- core/users/app_languages.php | 17 +-- core/users/usersupdate.php | 193 +++++++++++++---------------------- 2 files changed, 80 insertions(+), 130 deletions(-) diff --git a/core/users/app_languages.php b/core/users/app_languages.php index 16333db91b..616ab44b17 100644 --- a/core/users/app_languages.php +++ b/core/users/app_languages.php @@ -242,7 +242,7 @@ $text['description-contact_view']['pt-pt'] = "Ver"; $text['description-contact_view']['fr-fr'] = "Voir"; - $text['description-status']['en-us'] = "Set the user\'s presence."; + $text['description-status']['en-us'] = "Set the user's presence."; $text['description-status']['es-cl'] = "Configure la presencia del usuario."; $text['description-status']['pt-pt'] = "Escolher o estado de presença do utilizador."; $text['description-status']['fr-fr'] = "Choisir l'état de présence de l'utilisateur."; @@ -382,12 +382,17 @@ $text['message-required']['pt-pt'] = "Por favor indique: "; $text['message-required']['fr-fr'] = "Merci d'indiquer: "; - $text['message-password_blank']['en-us'] = "Password cannot be blank."; - $text['message-password_blank']['es-cl'] = "La contraseña no puede estar en blanco"; - $text['message-password_blank']['pt-pt'] = "O campo password não pode ser vazio."; - $text['message-password_blank']['fr-fr'] = "Le mot de passe ne peut pas être vide."; + $text['message-username_exists']['en-us'] = "Username Already Exists"; + $text['message-username_exists']['es-cl'] = "Ya existe Nombre de usuario"; + $text['message-username_exists']['pt-pt'] = "Nome de usuário já existe"; + $text['message-username_exists']['fr-fr'] = "Nom d'utilisateur existe déjà"; - $text['message-password_mismatch']['en-us'] = "Passwords did not match."; + $text['message-password_blank']['en-us'] = "Invalid Password"; + $text['message-password_blank']['es-cl'] = "Contraseña No Válida"; + $text['message-password_blank']['pt-pt'] = "Senha Inválida"; + $text['message-password_blank']['fr-fr'] = "Mot de Passe Incorrect"; + + $text['message-password_mismatch']['en-us'] = "Password Mismatch"; $text['message-password_mismatch']['es-cl'] = "Contraseñas no coinciden"; $text['message-password_mismatch']['pt-pt'] = "As passwords não correspondem."; $text['message-password_mismatch']['fr-fr'] = "les mots de passe ne correspondent pas"; diff --git a/core/users/usersupdate.php b/core/users/usersupdate.php index b3fee44ad2..c6e3207e8c 100644 --- a/core/users/usersupdate.php +++ b/core/users/usersupdate.php @@ -47,26 +47,9 @@ else { } //get data from the db - if (strlen($_REQUEST["id"])> 0) { + if (strlen($_REQUEST["id"]) > 0) { $user_uuid = $_REQUEST["id"]; } - else { - if (strlen($_SESSION["username"]) > 0) { - $username = $_SESSION["username"]; - } - } - -//get the username from v_users - $sql = "select * from v_users "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and user_uuid = '$user_uuid' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach ($result as &$row) { - $username = $row["username"]; - } - unset ($prep_statement); //required to be a superadmin to update an account that is a member of the superadmin group $superadmins = superadmin_list($db); @@ -119,10 +102,11 @@ if (count($_POST) > 0 && $_POST["persistform"] != "1") { //get the HTTP values and set as variables $user_uuid = $_REQUEST["id"]; + $username_old = check_str($_POST["username_old"]); + $username = check_str($_POST["username"]); $password = check_str($_POST["password"]); $confirm_password = check_str($_POST["confirm_password"]); $user_status = check_str($_POST["user_status"]); - //$user_template_name = check_str($_POST["user_template_name"]); $user_language = check_str($_POST["user_language"]); $user_time_zone = check_str($_POST["user_time_zone"]); $contact_uuid = check_str($_POST["contact_uuid"]); @@ -130,23 +114,26 @@ if (count($_POST) > 0 && $_POST["persistform"] != "1") { $user_enabled = check_str($_POST["user_enabled"]); $api_key = check_str($_POST["api_key"]); - //set the required values - if ($password != $confirm_password) { $msg_error .= $text['message-password_mismatch']."
\n"; } - //if (strlen($contact_uuid) == 0) { $msg_error .= $text['message-required'].$text['label-email']."
\n"; } - //if (strlen($user_time_zone) == 0) { $msg_error .= $text['message-required'].$text['label-time_zone']."
\n"; } - if (strlen($user_enabled) == 0) { $msg_error .= $text['message-required'].$text['label-enabled']."
\n"; } + //check required values + if ($username != $username_old) { + $sql = "select count(*) as num_rows from v_users where domain_uuid = '".$domain_uuid."' and username = '".$username."'"; + $prep_statement = $db->prepare(check_sql($sql)); + if ($prep_statement) { + $prep_statement->execute(); + $row = $prep_statement->fetch(PDO::FETCH_ASSOC); + if (0 < $row['num_rows']) { + $msg_error = $text['message-username_exists']; + } + } + unset($sql); + } + + if ($password != $confirm_password) { $msg_error = $text['message-password_mismatch']; } + if ($msg_error) { - require_once "resources/header.php"; - echo "
"; - echo "
"; - echo $msg_error; - echo "
"; - echo "
\n"; - require_once "resources/persist_form.php"; - echo persistform($_POST); - echo "
"; - require_once "resources/footer.php"; - return; + $_SESSION["message"] = $msg_error; + header("Location: usersupdate.php?id=".$user_uuid); + exit; } //check to see if user language is set @@ -239,6 +226,7 @@ if (count($_POST) > 0 && $_POST["persistform"] != "1") { $sql .= "'".$user_uuid."' "; $sql .= ")"; $db->exec(check_sql($sql)); + unset($sql); } else { if (strlen($user_time_zone) == 0) { @@ -257,6 +245,7 @@ if (count($_POST) > 0 && $_POST["persistform"] != "1") { $sql .= "and user_setting_subcategory = 'time_zone' "; $sql .= "and user_uuid = '".$user_uuid."' "; $db->exec(check_sql($sql)); + unset($sql); } } } @@ -288,17 +277,9 @@ if (count($_POST) > 0 && $_POST["persistform"] != "1") { } } - //if the template has not been assigned by the superadmin - //if (strlen($_SESSION['domain']['template']['name']) == 0) { - //set the session theme for the active user - // if ($_SESSION["username"] == $username) { - // $_SESSION['domain']['template']['name'] = $user_template_name; - // } - //} - //sql update $sql = "update v_users set "; - if (if_group("admin") && strlen($_POST["username"])> 0) { + if (strlen($username) > 0 && $username != $username_old) { $sql .= "username = '$username', "; } if (strlen($password) > 0 && $confirm_password == $password) { @@ -322,63 +303,57 @@ if (count($_POST) > 0 && $_POST["persistform"] != "1") { else { $sql .= "contact_uuid = '$contact_uuid' "; } - if (strlen($user_uuid)> 0) { - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and user_uuid = '$user_uuid' "; - } - else { - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and username = '$username' "; - } + $sql .= "where domain_uuid = '$domain_uuid' "; + $sql .= "and user_uuid = '$user_uuid' "; $db->exec(check_sql($sql)); - //update the user_status - $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); - $switch_cmd .= "callcenter_config agent set status ".$username."@".$_SESSION['domain_name']." '".$user_status."'"; - $switch_result = event_socket_request($fp, 'api '.$switch_cmd); - //update the user state - $cmd = "api callcenter_config agent set state ".$username."@".$_SESSION['domain_name']." Waiting"; - $response = event_socket_request($fp, $cmd); + // if call center installed + if (file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/app/call_center/app_config.php")) { - //clear the template so it will rebuild in case the template was changed - //$_SESSION["template_content"] = ''; + // update agent and tiers tables + $sql = "update v_call_center_agents set agent_name = '".$username."' where domain_uuid = '".$domain_uuid."' and agent_name = '".$username_old."' "; + $db->exec(check_sql($sql)); + unset($sql); + + $sql = "update v_call_center_tiers set agent_name = '".$username."' where domain_uuid = '".$domain_uuid."' and agent_name = '".$username_old."' "; + $db->exec(check_sql($sql)); + unset($sql); + + //syncrhonize the configuration + save_call_center_xml(); + + //update the user_status + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + $switch_cmd .= "callcenter_config agent set status ".$username."@".$_SESSION['domain_name']." '".$user_status."'"; + $switch_result = event_socket_request($fp, 'api '.$switch_cmd); + + //update the user state + $cmd = "api callcenter_config agent set state ".$username."@".$_SESSION['domain_name']." Waiting"; + $response = event_socket_request($fp, $cmd); + + } //redirect the browser $_SESSION["message"] = $text['message-update']; - if (if_group("admin") || if_group("superadmin")) { - header("Location: usersupdate.php?id=".$user_uuid); - } - else { - header("Location: usersupdate.php"); - } + header("Location: index.php"); return; + } else { + $sql = "select * from v_users "; //allow admin access if (if_group("admin") || if_group("superadmin")) { - if (strlen($user_uuid)> 0) { - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and user_uuid = '$user_uuid' "; - } - else { - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and username = '$username' "; - } - } - else { $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and username = '$username' "; + $sql .= "and user_uuid = '$user_uuid' "; } $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); foreach ($result as &$row) { $user_uuid = $row["user_uuid"]; - if (if_group("admin")) { - $username = $row["username"]; - } + $username = $row["username"]; $password = $row["password"]; $api_key = $row["api_key"]; $user_enabled = $row["user_enabled"]; @@ -389,6 +364,7 @@ else { //get the groups the user is a member of //group_members function defined in config.php $group_members = group_members($db, $user_uuid); + } //include the header @@ -427,7 +403,14 @@ else { echo " "; echo " ".$text['label-username'].":"; - echo " $username"; + echo " "; + if (if_group("admin") || if_group("superadmin")) { + echo " "; + } + else { + echo " ".$username; + } + echo " "; echo " "; echo " "; @@ -463,6 +446,7 @@ else { } echo " \n"; echo "\n"; + $assigned_groups[] = $field['group_name']; } } echo "\n"; @@ -476,13 +460,8 @@ else { echo "\n"; $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); foreach($result as $field) { - if ($field['group_name'] == "superadmin") { - //only show the superadmin group to other users in the superadmin group - if (if_group("superadmin")) { - echo "\n"; - } - } - else { + if ($field['group_name'] == "superadmin" && !if_group("superadmin")) { continue; } //only show the superadmin group to other users in the superadmin group + if (!in_array($field["group_name"], $assigned_groups)) { echo "\n"; } } @@ -592,40 +571,6 @@ else { echo " \n"; } - //if the template has not been assigned by the superadmin - /* - if (strlen($_SESSION['domain']['template']['name']) == 0) { - echo " \n"; - echo " \n"; - echo " Template: \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo " Select a template to set as the default and then press save.
\n"; - echo " \n"; - echo " \n"; - } - */ - echo " \n"; echo " \n"; echo " ".$text['label-user_language'].": \n"; @@ -726,7 +671,7 @@ else { echo " "; echo " "; echo " "; - echo " "; + echo " "; echo " "; echo " "; echo " ";