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

View File

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

View File

@ -1185,6 +1185,6 @@ def merge_list_book():
element.format, element.format,
element.uncompressed_size, element.uncompressed_size,
to_name)) to_name))
delete_book(from_book.id,"", True) # json_resp = delete_book(from_book.id,"", True)
return json.dumps({'success': True}) return json.dumps({'success': True})
return "" 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 { } else {

View File

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