User Add/Edit: Display password requirements, additional checks for required fields.

This commit is contained in:
Nate 2019-04-10 19:35:34 -06:00
parent 722c0482ff
commit 0993f32149
2 changed files with 266 additions and 119 deletions

View File

@ -402,44 +402,64 @@ $text['message-cannot_delete_own_account']['sv-se'] = "Du kan inte ta bort ditt
$text['message-cannot_delete_own_account']['uk-ua'] = "Ви не можете видалити власний обліковий запис. Будь ласка, увійдіть під іншим користувачем, потім повторіть спробу.";
$text['message-invalid_user']['en-us'] = "Invalid User";
$text['message-invalid_user']['ar-eg'] = "";
$text['message-invalid_user']['de-at'] = ""; //copied from de-de
$text['message-invalid_user']['de-ch'] = ""; //copied from de-de
$text['message-invalid_user']['de-de'] = "";
$text['message-invalid_user']['es-cl'] = "";
$text['message-invalid_user']['es-mx'] = ""; //copied from es-cl
$text['message-invalid_user']['fr-ca'] = ""; //copied from fr-fr
$text['message-invalid_user']['fr-fr'] = "";
$text['message-invalid_user']['he-il'] = "";
$text['message-invalid_user']['it-it'] = "";
$text['message-invalid_user']['nl-nl'] = "";
$text['message-invalid_user']['pl-pl'] = "";
$text['message-invalid_user']['pt-br'] = ""; //copied from pt-pt
$text['message-invalid_user']['pt-pt'] = "";
$text['message-invalid_user']['ro-ro'] = "";
$text['message-invalid_user']['ru-ru'] = "";
$text['message-invalid_user']['sv-se'] = "";
$text['message-invalid_user']['uk-ua'] = "";
$text['message-invalid_user']['ar-eg'] = "Invalid User";
$text['message-invalid_user']['de-at'] = "Invalid User";
$text['message-invalid_user']['de-ch'] = "Invalid User";
$text['message-invalid_user']['de-de'] = "Invalid User";
$text['message-invalid_user']['es-cl'] = "Invalid User";
$text['message-invalid_user']['es-mx'] = "Invalid User";
$text['message-invalid_user']['fr-ca'] = "Invalid User";
$text['message-invalid_user']['fr-fr'] = "Invalid User";
$text['message-invalid_user']['he-il'] = "Invalid User";
$text['message-invalid_user']['it-it'] = "Invalid User";
$text['message-invalid_user']['nl-nl'] = "Invalid User";
$text['message-invalid_user']['pl-pl'] = "Invalid User";
$text['message-invalid_user']['pt-br'] = "Invalid User";
$text['message-invalid_user']['pt-pt'] = "Invalid User";
$text['message-invalid_user']['ro-ro'] = "Invalid User";
$text['message-invalid_user']['ru-ru'] = "Invalid User";
$text['message-invalid_user']['sv-se'] = "Invalid User";
$text['message-invalid_user']['uk-ua'] = "Invalid User";
$text['message-unsaved_changes']['en-us'] = "Unsaved Changes";
$text['message-unsaved_changes']['ar-eg'] = "";
$text['message-unsaved_changes']['de-at'] = ""; //copied from de-de
$text['message-unsaved_changes']['de-ch'] = ""; //copied from de-de
$text['message-unsaved_changes']['de-de'] = "";
$text['message-unsaved_changes']['es-cl'] = "";
$text['message-unsaved_changes']['es-mx'] = ""; //copied from es-cl
$text['message-unsaved_changes']['fr-ca'] = ""; //copied from fr-fr
$text['message-unsaved_changes']['fr-fr'] = "";
$text['message-unsaved_changes']['he-il'] = "";
$text['message-unsaved_changes']['it-it'] = "";
$text['message-unsaved_changes']['nl-nl'] = "";
$text['message-unsaved_changes']['pl-pl'] = "";
$text['message-unsaved_changes']['pt-br'] = ""; //copied from pt-pt
$text['message-unsaved_changes']['pt-pt'] = "";
$text['message-unsaved_changes']['ro-ro'] = "";
$text['message-unsaved_changes']['ru-ru'] = "";
$text['message-unsaved_changes']['sv-se'] = "";
$text['message-unsaved_changes']['uk-ua'] = "";
$text['message-unsaved_changes']['ar-eg'] = "Unsaved Changes";
$text['message-unsaved_changes']['de-at'] = "Unsaved Changes";
$text['message-unsaved_changes']['de-ch'] = "Unsaved Changes";
$text['message-unsaved_changes']['de-de'] = "Unsaved Changes";
$text['message-unsaved_changes']['es-cl'] = "Unsaved Changes";
$text['message-unsaved_changes']['es-mx'] = "Unsaved Changes";
$text['message-unsaved_changes']['fr-ca'] = "Unsaved Changes";
$text['message-unsaved_changes']['fr-fr'] = "Unsaved Changes";
$text['message-unsaved_changes']['he-il'] = "Unsaved Changes";
$text['message-unsaved_changes']['it-it'] = "Unsaved Changes";
$text['message-unsaved_changes']['nl-nl'] = "Unsaved Changes";
$text['message-unsaved_changes']['pl-pl'] = "Unsaved Changes";
$text['message-unsaved_changes']['pt-br'] = "Unsaved Changes";
$text['message-unsaved_changes']['pt-pt'] = "Unsaved Changes";
$text['message-unsaved_changes']['ro-ro'] = "Unsaved Changes";
$text['message-unsaved_changes']['ru-ru'] = "Unsaved Changes";
$text['message-unsaved_changes']['sv-se'] = "Unsaved Changes";
$text['message-unsaved_changes']['uk-ua'] = "Unsaved Changes";
$text['message-green_border_passwords_match']['en-us'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['ar-eg'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['de-at'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['de-ch'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['de-de'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['es-cl'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['es-mx'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['fr-ca'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['fr-fr'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['he-il'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['it-it'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['nl-nl'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['pl-pl'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['pt-br'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['pt-pt'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['ro-ro'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['ru-ru'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['sv-se'] = "Green field borders indicate typed passwords match.";
$text['message-green_border_passwords_match']['uk-ua'] = "Green field borders indicate typed passwords match.";
$text['label-web_fonts']['en-us'] = "Web Fonts";
$text['label-web_fonts']['ar-eg'] = "الخطوط على شبكة الإنترنت";
@ -1161,6 +1181,106 @@ $text['label-characters']['ru-ru'] = "символов";
$text['label-characters']['sv-se'] = "Tecken";
$text['label-characters']['uk-ua'] = "персонажі";
$text['label-required']['en-us'] = "Required";
$text['label-required']['ar-eg'] = "Required";
$text['label-required']['de-at'] = "Required";
$text['label-required']['de-ch'] = "Required";
$text['label-required']['de-de'] = "Required";
$text['label-required']['es-cl'] = "Required";
$text['label-required']['es-mx'] = "Required";
$text['label-required']['fr-ca'] = "Required";
$text['label-required']['fr-fr'] = "Required";
$text['label-required']['he-il'] = "Required";
$text['label-required']['it-it'] = "Required";
$text['label-required']['nl-nl'] = "Required";
$text['label-required']['pl-pl'] = "Required";
$text['label-required']['pt-br'] = "Required";
$text['label-required']['pt-pt'] = "Required";
$text['label-required']['ro-ro'] = "Required";
$text['label-required']['ru-ru'] = "Required";
$text['label-required']['sv-se'] = "Required";
$text['label-required']['uk-ua'] = "Required";
$text['label-number']['en-us'] = "Number";
$text['label-number']['ar-eg'] = "Number";
$text['label-number']['de-at'] = "Number";
$text['label-number']['de-ch'] = "Number";
$text['label-number']['de-de'] = "Number";
$text['label-number']['es-cl'] = "Number";
$text['label-number']['es-mx'] = "Number";
$text['label-number']['fr-ca'] = "Number";
$text['label-number']['fr-fr'] = "Number";
$text['label-number']['he-il'] = "Number";
$text['label-number']['it-it'] = "Number";
$text['label-number']['nl-nl'] = "Number";
$text['label-number']['pl-pl'] = "Number";
$text['label-number']['pt-br'] = "Number";
$text['label-number']['pt-pt'] = "Number";
$text['label-number']['ro-ro'] = "Number";
$text['label-number']['ru-ru'] = "Number";
$text['label-number']['sv-se'] = "Number";
$text['label-number']['uk-ua'] = "Number";
$text['label-lowercase']['en-us'] = "Lowercase";
$text['label-lowercase']['ar-eg'] = "Lowercase";
$text['label-lowercase']['de-at'] = "Lowercase";
$text['label-lowercase']['de-ch'] = "Lowercase";
$text['label-lowercase']['de-de'] = "Lowercase";
$text['label-lowercase']['es-cl'] = "Lowercase";
$text['label-lowercase']['es-mx'] = "Lowercase";
$text['label-lowercase']['fr-ca'] = "Lowercase";
$text['label-lowercase']['fr-fr'] = "Lowercase";
$text['label-lowercase']['he-il'] = "Lowercase";
$text['label-lowercase']['it-it'] = "Lowercase";
$text['label-lowercase']['nl-nl'] = "Lowercase";
$text['label-lowercase']['pl-pl'] = "Lowercase";
$text['label-lowercase']['pt-br'] = "Lowercase";
$text['label-lowercase']['pt-pt'] = "Lowercase";
$text['label-lowercase']['ro-ro'] = "Lowercase";
$text['label-lowercase']['ru-ru'] = "Lowercase";
$text['label-lowercase']['sv-se'] = "Lowercase";
$text['label-lowercase']['uk-ua'] = "Lowercase";
$text['label-uppercase']['en-us'] = "Uppercase";
$text['label-uppercase']['ar-eg'] = "Uppercase";
$text['label-uppercase']['de-at'] = "Uppercase";
$text['label-uppercase']['de-ch'] = "Uppercase";
$text['label-uppercase']['de-de'] = "Uppercase";
$text['label-uppercase']['es-cl'] = "Uppercase";
$text['label-uppercase']['es-mx'] = "Uppercase";
$text['label-uppercase']['fr-ca'] = "Uppercase";
$text['label-uppercase']['fr-fr'] = "Uppercase";
$text['label-uppercase']['he-il'] = "Uppercase";
$text['label-uppercase']['it-it'] = "Uppercase";
$text['label-uppercase']['nl-nl'] = "Uppercase";
$text['label-uppercase']['pl-pl'] = "Uppercase";
$text['label-uppercase']['pt-br'] = "Uppercase";
$text['label-uppercase']['pt-pt'] = "Uppercase";
$text['label-uppercase']['ro-ro'] = "Uppercase";
$text['label-uppercase']['ru-ru'] = "Uppercase";
$text['label-uppercase']['sv-se'] = "Uppercase";
$text['label-uppercase']['uk-ua'] = "Uppercase";
$text['label-special']['en-us'] = "Special";
$text['label-special']['ar-eg'] = "Special";
$text['label-special']['de-at'] = "Special";
$text['label-special']['de-ch'] = "Special";
$text['label-special']['de-de'] = "Special";
$text['label-special']['es-cl'] = "Special";
$text['label-special']['es-mx'] = "Special";
$text['label-special']['fr-ca'] = "Special";
$text['label-special']['fr-fr'] = "Special";
$text['label-special']['he-il'] = "Special";
$text['label-special']['it-it'] = "Special";
$text['label-special']['nl-nl'] = "Special";
$text['label-special']['pl-pl'] = "Special";
$text['label-special']['pt-br'] = "Special";
$text['label-special']['pt-pt'] = "Special";
$text['label-special']['ro-ro'] = "Special";
$text['label-special']['ru-ru'] = "Special";
$text['label-special']['sv-se'] = "Special";
$text['label-special']['uk-ua'] = "Special";
$text['label-center']['en-us'] = "Center";
$text['label-center']['ar-eg'] = "مركز";
$text['label-center']['de-at'] = "Mitte"; //copied from de-de

View File

@ -97,6 +97,13 @@
return;
}
//retrieve password requirements
$required['length'] = $_SESSION['user']['password_length']['numeric'];
$required['number'] = ($_SESSION['user']['password_number']['boolean'] == 'true') ? true : false;
$required['lowercase'] = ($_SESSION['user']['password_lowercase']['boolean'] == 'true') ? true : false;
$required['uppercase'] = ($_SESSION['user']['password_uppercase']['boolean'] == 'true') ? true : false;
$required['special'] = ($_SESSION['user']['password_special']['boolean'] == 'true') ? true : false;
//prepare the data
if (count($_POST) > 0) {
@ -128,13 +135,6 @@
$message_key = check_str($_POST["message_key"]);
}
//get the password requirements
$required['length'] = $_SESSION['user']['password_length']['numeric'];
$required['number'] = ($_SESSION['user']['password_number']['boolean'] == 'true') ? true : false;
$required['lowercase'] = ($_SESSION['user']['password_lowercase']['boolean'] == 'true') ? true : false;
$required['uppercase'] = ($_SESSION['user']['password_uppercase']['boolean'] == 'true') ? true : false;
$required['special'] = ($_SESSION['user']['password_special']['boolean'] == 'true') ? true : false;
//check required values
if ($username == '') {
message::add($text['message-required'].$text['label-username'], 'negative', 7500);
@ -202,7 +202,7 @@
//return if error
if (message::count() != 0) {
$_SESSION['tmp'][$_SERVER['PHP_SELF']]['user'] = $_POST;
header("Location: user_edit.php?id=".$user_uuid);
header("Location: user_edit.php".(permission_exists('user_edit') && $action != 'add' ? "?id=".$user_uuid : null));
exit;
}
@ -511,82 +511,79 @@
exit;
}
//pre-populate the form
if ($action == 'edit') {
//populate the form with values from session variable
if (
is_array($_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']) &&
sizeof($_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']) != 0
) {
$domain_uuid = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["domain_uuid"];
$username = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["username"];
$password = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["password"];
$password_confirm = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["password_confirm"];
$api_key = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["api_key"];
$user_enabled = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["user_enabled"];
$contact_uuid = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["contact_uuid"];
$user_status = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["user_status"];
$password_confirm = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['password_confirm'];
$user_settings['domain']['language']['code'] = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['user_language'];
$user_settings['domain']['time_zone']['name'] = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['user_time_zone'];
$user_email = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['user_email'];
$contact_name_given = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['contact_name_given'];
$contact_name_family = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['contact_name_family'];
$contact_organization = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['contact_organization'];
$user_settings["message"]["key"]["text"] = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['message_key'];
//get values from session variable
if (
is_array($_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']) &&
sizeof($_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']) != 0)
{
$domain_uuid = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["domain_uuid"];
$username = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["username"];
$api_key = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["api_key"];
$user_enabled = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["user_enabled"];
$contact_uuid = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["contact_uuid"];
$user_status = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']["user_status"];
$password_confirm = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['password_confirm'];
$user_settings['domain']['language']['code'] = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['user_language'];
$user_settings['domain']['time_zone']['name'] = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['user_time_zone'];
$user_email = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['user_email'];
$contact_name_given = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['contact_name_given'];
$contact_name_family = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['contact_name_family'];
$contact_organization = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['contact_organization'];
$user_settings["message"]["key"]["text"] = $_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']['message_key'];
$unsaved = true;
unset($_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']);
}
$unsaved = true;
unset($_SESSION['tmp'][$_SERVER['PHP_SELF']]['user']);
}
//populate the form with values from db
else {
if ($action == 'edit') {
$sql = "select * from v_users where user_uuid = '".$user_uuid."' ";
if (!permission_exists('user_all')) {
$sql .= "and domain_uuid = '".$domain_uuid."' ";
}
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_NAMED);
if (is_array($row) && sizeof($row) > 0) {
$domain_uuid = $row["domain_uuid"];
$user_uuid = $row["user_uuid"];
$username = $row["username"];
$api_key = $row["api_key"];
$user_enabled = $row["user_enabled"];
$contact_uuid = $row["contact_uuid"];
$user_status = $row["user_status"];
}
else {
message::add($text['message-invalid_user'], 'negative', 7500);
header("Location: user_edit.php?id=".$_SESSION['user_uuid']);
exit;
}
unset($sql, $prep_statement, $row);
//get values from db
else {
//get user data
$sql = "select * from v_users where user_uuid = '".$user_uuid."' ";
if (!permission_exists('user_all')) {
$sql .= "and domain_uuid = '".$domain_uuid."' ";
}
$prep_statement = $db->prepare(check_sql($sql));
//get user settings
$sql = "select * from v_user_settings ";
$sql .= "where user_uuid = '".$user_uuid."' ";
$sql .= "and user_setting_enabled = 'true' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_NAMED);
if (is_array($row) && sizeof($row) > 0) {
$domain_uuid = $row["domain_uuid"];
$user_uuid = $row["user_uuid"];
$username = $row["username"];
$password = $row["password"];
$api_key = $row["api_key"];
$user_enabled = $row["user_enabled"];
$contact_uuid = $row["contact_uuid"];
$user_status = $row["user_status"];
}
else {
message::add($text['message-invalid_user'], 'negative', 7500);
header("Location: user_edit.php?id=".$_SESSION['user_uuid']);
exit;
}
unset($sql, $prep_statement, $row);
//get user settings
$sql = "select * from v_user_settings ";
$sql .= "where user_uuid = '".$user_uuid."' ";
$sql .= "and user_setting_enabled = 'true' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach($result as $row) {
$name = $row['user_setting_name'];
$category = $row['user_setting_category'];
$subcategory = $row['user_setting_subcategory'];
if (strlen($subcategory) == 0) {
//$$category[$name] = $row['domain_setting_value'];
$user_settings[$category][$name] = $row['user_setting_value'];
}
else {
$user_settings[$category][$subcategory][$name] = $row['user_setting_value'];
}
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach($result as $row) {
$name = $row['user_setting_name'];
$category = $row['user_setting_category'];
$subcategory = $row['user_setting_subcategory'];
if (strlen($subcategory) == 0) {
//$$category[$name] = $row['domain_setting_value'];
$user_settings[$category][$name] = $row['user_setting_value'];
}
else {
$user_settings[$category][$subcategory][$name] = $row['user_setting_value'];
}
}
}
}
}
@ -648,6 +645,7 @@
echo " <td width='70%' class='vtable'>";
if (permission_exists("user_edit")) {
echo " <input type='text' class='formfld' name='username' id='username' autocomplete='new-password' value='".escape($username)."' required='required'>\n";
echo " <input type='text' id='autofill_honeypot' style='display: none;'>\n";
}
else {
echo " ".escape($username)."\n";
@ -660,14 +658,43 @@
echo " <td class='vncell".(($action == 'add') ? 'req' : null)."' valign='top'>".$text['label-password']."</td>";
echo " <td class='vtable'>";
echo " <input style='display: none;' type='password'>";
echo " <input type='password' autocomplete='new-password' class='formfld' name='password' id='password' value='' onkeypress='show_strength_meter();' onfocus='compare_passwords();' onkeyup='compare_passwords();' onblur='compare_passwords();'>";
echo " <div id='pwstrength_progress' class='pwstrength_progress'></div>";
echo " <input type='password' autocomplete='new-password' class='formfld' name='password' id='password' value=\"".escape($password)."\" ".($action == 'add' ? "required='required'" : null)." onkeypress='show_strength_meter();' onfocus='compare_passwords();' onkeyup='compare_passwords();' onblur='compare_passwords();'>";
echo " <div id='pwstrength_progress' class='pwstrength_progress'></div><br />\n";
if ((is_numeric($required['length']) && $required['length'] != 0) || $required['number'] || $required['lowercase'] || $required['uppercase'] || $required['special']) {
echo $text['label-required'].': ';
if (is_numeric($required['length']) && $required['length'] != 0) {
echo $required['length']." ".$text['label-characters'];
if ($required['number'] || $required['lowercase'] || $required['uppercase'] || $required['special']) {
echo " (";
}
}
if ($required['number']) {
$required_temp[] = $text['label-number'];
}
if ($required['lowercase']) {
$required_temp[] = $text['label-lowercase'];
}
if ($required['uppercase']) {
$required_temp[] = $text['label-uppercase'];
}
if ($required['special']) {
$required_temp[] = $text['label-special'];
}
if (is_array($required_temp) && sizeof($required_temp) != 0) {
echo implode(', ',$required_temp);
if (is_numeric($required['length']) && $required['length'] != 0) {
echo ")";
}
}
unset($required_temp);
}
echo " </td>";
echo " </tr>";
echo " <tr>";
echo " <td class='vncell".(($action == 'add') ? 'req' : null)."' valign='top'>".$text['label-confirm_password']."</td>";
echo " <td class='vtable'>";
echo " <input type='password' autocomplete='new-password' class='formfld' name='password_confirm' id='password_confirm' value='' onfocus='compare_passwords();' onkeyup='compare_passwords();' onblur='compare_passwords();'>";
echo " <input type='password' autocomplete='new-password' class='formfld' name='password_confirm' id='password_confirm' value=\"".escape($password_confirm)."\" ".($action == 'add' ? "required='required'" : null)." onfocus='compare_passwords();' onkeyup='compare_passwords();' onblur='compare_passwords();'><br />\n";
echo " ".$text['message-green_border_passwords_match']."\n";
echo " </td>";
echo " </tr>";
@ -811,7 +838,7 @@
else if ($action == 'add' && permission_exists("user_add")) {
echo " <tr>";
echo " <td class='vncellreq'>".$text['label-email']."</td>";
echo " <td class='vtable'><input type='text' class='formfld' name='user_email' value='".escape($user_email)."'></td>";
echo " <td class='vtable'><input type='text' class='formfld' name='user_email' value='".escape($user_email)."' ".($action == 'add' ? "required='required'" : null)."></td>";
echo " </tr>";
echo " <tr>";
echo " <td class='vncell'>".$text['label-first_name']."</td>";
@ -885,7 +912,7 @@
$groups = $prep_statement->fetchAll(PDO::FETCH_NAMED);
if (is_array($groups)) {
if (isset($assigned_groups)) { echo "<br />\n"; }
echo "<select name='group_uuid_name' class='formfld' style='width: auto; margin-right: 3px;'>\n";
echo "<select name='group_uuid_name' class='formfld' style='width: auto; margin-right: 3px;' ".($action == 'add' ? "required='required'" : null).">\n";
echo " <option value=''></option>\n";
foreach($groups as $field) {
if ($field['group_name'] == "superadmin" && !if_group("superadmin")) { continue; } //only show the superadmin group to other superadmins