Result for testrun

Added mass delete of users
refactores user table refresh
Bugfix for sorting with selected users
Bugfix delete books #1938
This commit is contained in:
Ozzie Isaacs 2021-04-21 19:23:11 +02:00
parent 6e5a1a1f4d
commit bb4749c65b
7 changed files with 219 additions and 499 deletions

View File

@ -289,15 +289,30 @@ def list_users():
@login_required
@admin_required
def delete_user():
user_id = request.values.get('userid', -1)
content = ub.session.query(ub.User).filter(ub.User.id == int(user_id)).one_or_none()
try:
message = _delete_user(content)
return Response(json.dumps({'type': "success", 'message': message}), mimetype='application/json')
except Exception as ex:
return Response(json.dumps({'type': "danger", 'message':str(ex)}), mimetype='application/json')
log.error("User not found")
return Response(json.dumps({'type': "danger", 'message':_("User not found")}), mimetype='application/json')
user_ids = request.form.to_dict(flat=False)
if "userid[]" in user_ids:
users = ub.session.query(ub.User).filter(ub.User.id.in_(user_ids['userid[]'])).all()
elif "userid" in user_ids:
users = ub.session.query(ub.User).filter(ub.User.id == user_ids['userid'][0]).all()
count = 0
errors = list()
success = list()
if not users:
log.error("User not found")
return Response(json.dumps({'type': "danger", 'message': _("User not found")}), mimetype='application/json')
for user in users:
try:
message = _delete_user(user)
count += 1
except Exception as ex:
errors.append({'type': "danger", 'message': str(ex)})
if count == 1:
success = [{'type': "success", 'message': message}]
elif count > 1:
success = [{'type': "success", 'message': _("{} users deleted successfully").format(count)}]
success.extend(errors)
return Response(json.dumps(success), mimetype='application/json')
@admi.route("/ajax/getlocale")
@login_required
@ -367,9 +382,9 @@ def edit_list_user(param):
if not ub.session.query(ub.User).\
filter(ub.User.role.op('&')(constants.ROLE_ADMIN) == constants.ROLE_ADMIN,
ub.User.id != user.id).count():
return Response(json.dumps({'type': "danger",
return Response(json.dumps([{'type': "danger",
'message':_(u"No admin user remaining, can't remove admin role",
nick=user.name)}), mimetype='application/json')
nick=user.name)}]), mimetype='application/json')
user.role &= ~int(vals['field_index'])
elif param.startswith('sidebar'):
if user.name == "Guest" and int(vals['field_index']) == constants.SIDEBAR_READ_AND_UNREAD:

View File

@ -625,7 +625,10 @@ class CalibreDB():
outcome = list()
elementlist = {ele.id: ele for ele in inputlist}
for entry in state:
outcome.append(elementlist[entry])
try:
outcome.append(elementlist[entry])
except KeyError:
pass
del elementlist[entry]
for entry in elementlist:
outcome.append(elementlist[entry])

View File

@ -1185,6 +1185,6 @@ def merge_list_book():
element.format,
element.uncompressed_size,
to_name))
delete_book(from_book.id,"", True) # json_resp =
delete_book(from_book.id,"", True)
return json.dumps({'success': True})
return ""

View File

@ -178,6 +178,19 @@ $("#delete_confirm").click(function() {
}
});
$("#books-table").bootstrapTable("refresh");
/*$.ajax({
method:"get",
url: window.location.pathname + "/../../ajax/listbooks",
async: true,
timeout: 900,
success:function(data) {
$("#book-table").bootstrapTable("load", data);
loadSuccess();
}
});*/
}
});
} else {

View File

@ -511,22 +511,36 @@ $(function() {
var data = $(this).data("val");
checkboxHeader(val, name, data);
});
$(".button_head").on("click",function() {
var result = $('#user-table').bootstrapTable('getSelections').map(a => a.id);
confirmDialog(
"btndeluser",
"GeneralDeleteModal",
0,
function() {
$.ajax({
method:"post",
url: window.location.pathname + "/../../ajax/deleteuser",
data: {"userid": result},
success: function (data) {
selections = selections.filter( ( el ) => !result.includes( el ) );
// selections = selections.filter(item => item !== userId);
handleListServerResponse(data);
},
error: function (data) {
handleListServerResponse({type:"danger", message:data.responseText})
},
});
}
);
});
function user_handle (userId) {
$.ajax({
method:"post",
url: window.location.pathname + "/../../ajax/deleteuser",
data: {"userid":userId}
});
$.ajax({
method:"get",
url: window.location.pathname + "/../../ajax/listusers",
async: true,
timeout: 900,
success:function(data) {
$("#user-table").bootstrapTable("load", data);
loadSuccess();
}
});
$("#user-table").bootstrapTable("refresh");
}
$("#user-table").on("click-cell.bs.table", function (field, value, row, $element) {
@ -642,23 +656,13 @@ function handleListServerResponse (data, disableButtons) {
$("#flash_success").remove();
$("#flash_danger").remove();
if (!jQuery.isEmptyObject(data)) {
$( ".navbar" ).after( '<div class="row-fluid text-center" style="margin-top: -20px;">' +
'<div id="flash_'+data.type+'" class="alert alert-'+data.type+'">'+data.message+'</div>' +
'</div>');
data.forEach(function(item) {
$(".navbar").after('<div class="row-fluid text-center" style="margin-top: -20px;">' +
'<div id="flash_' + item.type + '" class="alert alert-' + item.type + '">' + item.message + '</div>' +
'</div>');
});
}
$.ajax({
method: "get",
url: window.location.pathname + "/../../ajax/listusers",
async: true,
timeout: 900,
success: function (data) {
$("#user-table").bootstrapTable("load", data);
if (disableButtons) {
deactivateHeaderButtons();
}
loadSuccess();
}
});
$("#user-table").bootstrapTable("refresh");
}
@ -675,14 +679,16 @@ function checkboxChange(checkbox, userId, field, field_index) {
}
function deactivateHeaderButtons() {
$("#user_delete_selection").addClass("disabled");
$("#user_delete_selection").attr("aria-disabled", true);
$(".check_head").attr("aria-disabled", true);
$(".check_head").attr("disabled", true);
$(".check_head").prop('checked', false);
$(".button_head").attr("aria-disabled", true);
$(".button_head").addClass("disabled");
$(".header_select").attr("disabled", true);
if (selections.length < 1) {
$("#user_delete_selection").addClass("disabled");
$("#user_delete_selection").attr("aria-disabled", true);
$(".check_head").attr("aria-disabled", true);
$(".check_head").attr("disabled", true);
$(".check_head").prop('checked', false);
$(".button_head").attr("aria-disabled", true);
$(".button_head").addClass("disabled");
$(".header_select").attr("disabled", true);
}
}
function selectHeader(element, field) {
@ -719,7 +725,7 @@ function checkboxHeader(CheckboxState, field, field_index) {
});
}
function deleteUser(a,b){
function deleteUser(a,id){
confirmDialog(
"btndeluser",
"GeneralDeleteModal",
@ -728,8 +734,12 @@ function deleteUser(a,b){
$.ajax({
method:"post",
url: window.location.pathname + "/../../ajax/deleteuser",
data: {"userid":b},
success: handleListServerResponse,
data: {"userid":id},
success: function (data) {
userId = parseInt(id, 10);
selections = selections.filter(item => item !== userId);
handleListServerResponse(data);
},
error: function (data) {
handleListServerResponse({type:"danger", message:data.responseText})
},

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,4 @@
output_list = Array();
/* Level - 0: Summary; 1: Failed; 2: All; 3: Skipped 4: Error*/
@ -24,9 +25,9 @@ function showCase(level) {
row.classList.add('hiddenRow');
}
}
// Show skipped if all or skipped or summary problems selected
// Show skipped if all or skipped selected
if (id.substr(0,2) == 'st') {
if (level ==2 || level ==3 || level == 5) {
if (level ==2 || level ==3) {
row.classList.remove('hiddenRow');
}
else {