mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-03-28 17:42:57 +01:00
fixes #2441 add password fields for generic users in user creation
Introduces password and password confirmation fields when creating a user with 'generic' status. The password fields are shown or hidden based on the selected user status, and validation is added to ensure passwords are entered and match. Also adds a button to generate random passwords for new generic users.
This commit is contained in:
@@ -175,6 +175,11 @@ $( document ).ready(function() {
|
||||
$('#edit_user_conf_password').val(password);
|
||||
hide_error_edit_user();
|
||||
});
|
||||
$('.AddUserGenPassword span').on('click', function() {
|
||||
const password = gen_password();
|
||||
$('#add_user_pass').val(password);
|
||||
$('#add_user_confpass').val(password);
|
||||
});
|
||||
$('.AddUserSubmit').click(add_user);
|
||||
$('.AddUserCancel').click(add_user_close);
|
||||
$(".CloseAddUser").click(add_user_close);
|
||||
@@ -806,9 +811,19 @@ function add_user_open() {
|
||||
$('#AddUserSuccessContainer').hide();
|
||||
$('#AddUserFieldContainer').show();
|
||||
$('#AddUser :input').val('');
|
||||
$('#add_user_password').hide();
|
||||
fill_new_user();
|
||||
$("#AddUser").fadeIn();
|
||||
$(".AddUserLabelUsername input").first().focus();
|
||||
$('#AddUser .user-property-status .user-property-select').off('change').on('change', function() {
|
||||
const status = $(this).val();
|
||||
$('#add_user_pass ,#add_user_confpass').val('');
|
||||
if ('generic' === status) {
|
||||
$('#add_user_password').show();
|
||||
return;
|
||||
}
|
||||
$('#add_user_password').hide();
|
||||
});
|
||||
}
|
||||
|
||||
/*------------------
|
||||
@@ -1660,6 +1675,8 @@ function fill_user_edit(user_to_edit) {
|
||||
fill_user_edit_update(user_to_edit, pop_in);
|
||||
fill_user_edit_permissions(user_to_edit, pop_in);
|
||||
fill_who_is_the_king(user_to_edit, pop_in);
|
||||
|
||||
// show/hide password button depending on permissions
|
||||
|
||||
// plugins get function
|
||||
if (Object.keys(plugins_get_functions).length > 0) {
|
||||
@@ -2144,20 +2161,27 @@ function add_user() {
|
||||
ajax_data.level = $(".AddUserInputContainer .user-property-level select").val();
|
||||
ajax_data.enabled_high = $(".AddUserInputContainer .user-list-checkbox[name=\"hd_enabled\"]").attr('data-selected') == '1' ? true : false;
|
||||
ajax_data.group_id = groups_selected;
|
||||
ajax_data.auto_password = true;
|
||||
|
||||
// for debug
|
||||
// console.log(ajax_data);
|
||||
|
||||
const data = {
|
||||
username: ajax_data.username,
|
||||
email: ajax_data.email,
|
||||
pwg_token,
|
||||
}
|
||||
|
||||
if ('generic' === ajax_data.status) {
|
||||
data.password = $('#add_user_pass').val();
|
||||
data.password_confirm = $('#add_user_confpass').val();
|
||||
} else {
|
||||
data.auto_password = true;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: "ws.php?format=json&method=pwg.users.add",
|
||||
type:"POST",
|
||||
data: {
|
||||
username: ajax_data.username,
|
||||
auto_password: true,
|
||||
email: ajax_data.email,
|
||||
pwg_token
|
||||
},
|
||||
data: data,
|
||||
beforeSend: function() {
|
||||
$("#AddUser .AddUserErrors").css("visibility", "hidden");
|
||||
if ($(".AddUserLabelUsername .user-property-input").val() == "") {
|
||||
@@ -2165,6 +2189,26 @@ function add_user() {
|
||||
$("#AddUser .AddUserErrors").css("visibility", "visible");
|
||||
return false;
|
||||
}
|
||||
if ('generic' === ajax_data.status) {
|
||||
const pass = $('#add_user_pass').val();
|
||||
const confPass = $('#add_user_confpass').val();
|
||||
if ('' == pass) {
|
||||
$("#AddUser .AddUserErrors").html(missingPassword);
|
||||
$("#AddUser .AddUserErrors").css("visibility", "visible");
|
||||
return false;
|
||||
}
|
||||
if ('' == confPass) {
|
||||
$("#AddUser .AddUserErrors").html(missingConfPassword);
|
||||
$("#AddUser .AddUserErrors").css("visibility", "visible");
|
||||
return false;
|
||||
}
|
||||
if (pass !== confPass) {
|
||||
$("#AddUser .AddUserErrors").html(noMatchPassword);
|
||||
$("#AddUser .AddUserErrors").css("visibility", "visible");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
success: (raw_data) => {
|
||||
let data = jQuery.parseJSON(raw_data);
|
||||
@@ -2202,7 +2246,12 @@ function add_infos_to_new_user(user_id, ajax_data) {
|
||||
// add_user_close();
|
||||
$('#AddUserUpdated').removeClass('icon-red icon-cancel').addClass('icon-green border-green icon-ok');
|
||||
$('#AddUserUpdatedText').html(user_added_str.replace("%s", ajax_data.username));
|
||||
send_new_user_password(new_user_id, ajax_data.email);
|
||||
const status = ['webmaster', 'admin', 'normal'];
|
||||
if (status.includes(ajax_data.status)) {
|
||||
send_new_user_password(new_user_id, ajax_data.email);
|
||||
} else {
|
||||
add_user_close();
|
||||
}
|
||||
$("#AddUser .user-property-input").val("");
|
||||
$("#AddUserSuccess .edit-now").off("click").on("click", () => {
|
||||
last_user_id = new_user_id;
|
||||
|
||||
@@ -25,6 +25,8 @@ const cancel_msg = '{'No, I have changed my mind'|@translate|@escape}';
|
||||
const str_and_others_tags = '{'and %s others'|@translate|escape:javascript}';
|
||||
const missingConfirm = "{'You need to confirm deletion'|translate|escape:javascript}";
|
||||
const missingUsername = "{'Please, enter a login'|translate|escape:javascript}";
|
||||
const missingPassword = "{'Password is missing. Please enter the password.'|translate|escape:javascript}";
|
||||
const missingConfPassword = "{'Password confirmation is missing. Please confirm the chosen password.'|translate|escape:javascript}";
|
||||
const fieldNotEmpty = "{'Name field must not be empty'|@translate|escape:javascript}"
|
||||
const noMatchPassword = "{'The passwords do not match'|@translate|escape:javascript}";
|
||||
const missingField = "{'Please complete all fields'|@translate|escape:javascript}";
|
||||
@@ -1184,12 +1186,30 @@ $(document).ready(function() {
|
||||
<option value="admin">{'user_status_admin'|@translate}</option>
|
||||
<option value="normal">{'user_status_normal'|@translate}</option>
|
||||
<option value="generic">{'user_status_generic'|@translate}</option>
|
||||
<option value="guest">{'user_status_guest'|@translate} ({'Deactivated'|@translate})</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="add_user_password" style="display: none;">
|
||||
<div class="AddUserGenPassword">
|
||||
<label for="add_user_pass" class="user-property-label AddUserLabelPassword">{'Password'|@translate}</label>
|
||||
<span class="icon-dice-solid"> {'Generate random password'|@translate}</span>
|
||||
</div>
|
||||
<div class="user-property-input-icon" style="margin-bottom: 5px;">
|
||||
<input id="add_user_pass" class="user-property-input user-property-input-password" value=""
|
||||
placeholder="{'Password'|@translate}" type="password" />
|
||||
<span class="icon-eye icon-show-password"></span>
|
||||
</div>
|
||||
|
||||
<label for="add_user_confpass" class="user-property-label AddUserLabelPasswordConf">{'Confirm Password'|@translate}</label>
|
||||
<div class="user-property-input-icon" style="margin-bottom: 5px;">
|
||||
<input id="add_user_confpass" class="user-property-input user-property-input-password-conf" value=""
|
||||
placeholder="{'Confirm Password'|@translate}" type="password" />
|
||||
<span class="icon-eye icon-show-password"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="AddUserInputContainer">
|
||||
<div class="user-property-level">
|
||||
<p class="user-property-label">{'Privacy level'|@translate}</p>
|
||||
@@ -2196,19 +2216,26 @@ $(document).ready(function() {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.EditUserGenPassword {
|
||||
.EditUserGenPassword,
|
||||
.AddUserGenPassword {
|
||||
margin-top: 15px;
|
||||
font-size: 1.1em;
|
||||
cursor:pointer;
|
||||
}
|
||||
.EditUserGenPassword:hover, .EditUserGenPassword:active {
|
||||
.EditUserGenPassword:hover, .EditUserGenPassword:active,
|
||||
.AddUserGenPassword span:hover {
|
||||
color:#ffa646;
|
||||
}
|
||||
|
||||
.EditUserGenPassword span {
|
||||
.EditUserGenPassword span,
|
||||
.AddUserGenPassword span {
|
||||
margin-right:10px;
|
||||
}
|
||||
|
||||
.AddUserGenPassword span {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.EditUserErrors {
|
||||
opacity: 0;
|
||||
padding: 7px 0;
|
||||
@@ -2608,6 +2635,10 @@ $(document).ready(function() {
|
||||
display:none;
|
||||
}
|
||||
|
||||
.hide-user-property-password {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.AddUserPopInContainer{
|
||||
display:flex;
|
||||
position:absolute;
|
||||
|
||||
Reference in New Issue
Block a user