Bugfixes edit user list (Fix #1938)

pull/1977/head
Ozzie Isaacs 3 years ago
parent ed2fa4cdd8
commit 64696fe973

@ -303,6 +303,7 @@ def list_users():
@admin_required @admin_required
def delete_user(): def delete_user():
user_ids = request.form.to_dict(flat=False) user_ids = request.form.to_dict(flat=False)
users = None
if "userid[]" in user_ids: if "userid[]" in user_ids:
users = ub.session.query(ub.User).filter(ub.User.id.in_(user_ids['userid[]'])).all() users = ub.session.query(ub.User).filter(ub.User.id.in_(user_ids['userid[]'])).all()
elif "userid" in user_ids: elif "userid" in user_ids:
@ -394,27 +395,42 @@ def edit_list_user(param):
elif param == 'kindle_mail': elif param == 'kindle_mail':
user.kindle_mail = valid_email(vals['value']) if vals['value'] else "" user.kindle_mail = valid_email(vals['value']) if vals['value'] else ""
elif param.endswith('role'): elif param.endswith('role'):
if user.name == "Guest" and int(vals['field_index']) in \ value = int(vals['field_index'])
if user.name == "Guest" and value in \
[constants.ROLE_ADMIN, constants.ROLE_PASSWD, constants.ROLE_EDIT_SHELFS]: [constants.ROLE_ADMIN, constants.ROLE_PASSWD, constants.ROLE_EDIT_SHELFS]:
raise Exception(_("Guest can't have this role")) raise Exception(_("Guest can't have this role"))
if vals['value'] == 'true': # check for valid value, last on checks for power of 2 value
user.role |= int(vals['field_index']) if value > 0 and value <= constants.ROLE_VIEWER and (value & value-1 == 0 or value == 1):
if vals['value'] == 'true':
user.role |= value
elif vals['value'] == 'false':
if value == constants.ROLE_ADMIN:
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",
'message':_(u"No admin user remaining, can't remove admin role",
nick=user.name)}]), mimetype='application/json')
user.role &= ~value
else:
raise Exception(_("Value has to be true or false"))
else: else:
if int(vals['field_index']) == constants.ROLE_ADMIN: raise Exception(_("Invalid role"))
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",
'message':_(u"No admin user remaining, can't remove admin role",
nick=user.name)}]), mimetype='application/json')
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: value = int(vals['field_index'])
if user.name == "Guest" and value == constants.SIDEBAR_READ_AND_UNREAD:
raise Exception(_("Guest can't have this view")) raise Exception(_("Guest can't have this view"))
if vals['value'] == 'true': # check for valid value, last on checks for power of 2 value
user.sidebar_view |= int(vals['field_index']) if value > 0 and value <= constants.SIDEBAR_LIST and (value & value-1 == 0 or value == 1):
if vals['value'] == 'true':
user.sidebar_view |= value
elif vals['value'] == 'false':
user.sidebar_view &= ~value
else:
raise Exception(_("Value has to be true or false"))
else: else:
user.sidebar_view &= ~int(vals['field_index']) raise Exception(_("Invalid view"))
elif param == 'locale': elif param == 'locale':
if user.name == "Guest": if user.name == "Guest":
raise Exception(_("Guest's Locale is determined automatically and can't be set")) raise Exception(_("Guest's Locale is determined automatically and can't be set"))
@ -664,6 +680,8 @@ def restriction_deletion(element, list_func):
def prepare_tags(user, action, tags_name, id_list): def prepare_tags(user, action, tags_name, id_list):
if "tags" in tags_name: if "tags" in tags_name:
tags = calibre_db.session.query(db.Tags).filter(db.Tags.id.in_(id_list)).all() tags = calibre_db.session.query(db.Tags).filter(db.Tags.id.in_(id_list)).all()
if not tags:
raise Exception(_("Tag not found"))
new_tags_list = [x.name for x in tags] new_tags_list = [x.name for x in tags]
else: else:
tags = calibre_db.session.query(db.cc_classes[config.config_restricted_column])\ tags = calibre_db.session.query(db.cc_classes[config.config_restricted_column])\
@ -672,8 +690,10 @@ def prepare_tags(user, action, tags_name, id_list):
saved_tags_list = user.__dict__[tags_name].split(",") if len(user.__dict__[tags_name]) else [] saved_tags_list = user.__dict__[tags_name].split(",") if len(user.__dict__[tags_name]) else []
if action == "remove": if action == "remove":
saved_tags_list = [x for x in saved_tags_list if x not in new_tags_list] saved_tags_list = [x for x in saved_tags_list if x not in new_tags_list]
else: elif action == "add":
saved_tags_list.extend(x for x in new_tags_list if x not in saved_tags_list) saved_tags_list.extend(x for x in new_tags_list if x not in saved_tags_list)
else:
raise Exception(_("Invalid Action"))
return ",".join(saved_tags_list) return ",".join(saved_tags_list)

@ -318,7 +318,6 @@ $(function() {
}, },
url: getPath() + "/ajax/listrestriction/" + type + "/" + userId, url: getPath() + "/ajax/listrestriction/" + type + "/" + userId,
rowStyle: function(row) { rowStyle: function(row) {
// console.log('Reihe :' + row + " Index :" + index);
if (row.id.charAt(0) === "a") { if (row.id.charAt(0) === "a") {
return {classes: "bg-primary"}; return {classes: "bg-primary"};
} else { } else {
@ -613,30 +612,31 @@ function loadSuccess() {
} }
function move_header_elements() { function move_header_elements() {
$(".header_select").each(function () { $(".header_select").each(function () {
var item = $(this).parent(); var item = $(this).parent();
var parent = item.parent().parent(); var parent = item.parent().parent();
if (parent.prop('nodeName') === "TH") { if (parent.prop('nodeName') === "TH") {
item.prependTo(parent); item.prependTo(parent);
} }
}); });
$(".form-check").each(function () { $(".form-check").each(function () {
var item = $(this).parent(); var item = $(this).parent();
var parent = item.parent().parent(); var parent = item.parent().parent();
if (parent.prop('nodeName') === "TH") { if (parent.prop('nodeName') === "TH") {
item.prependTo(parent); item.prependTo(parent);
} }
}); });
$(".multi_select").each(function () { $(".multi_select").each(function () {
var item = $(this); var item = $(this);
var parent = item.parent().parent(); var parent = item.parent().parent();
if (parent.prop('nodeName') === "TH") { if (parent.prop('nodeName') === "TH") {
item.prependTo(parent); item.prependTo(parent);
item.addClass("myselect"); item.addClass("myselect");
} }
}); });
$(".multi_selector").selectpicker(); $(".multi_selector").selectpicker();
if (! $._data($(".multi_head").get(0), "events") ) {
// Functions have to be here, otherwise the callbacks are not fired if visible columns are changed // Functions have to be here, otherwise the callbacks are not fired if visible columns are changed
$(".multi_head").on("click", function () { $(".multi_head").on("click", function () {
var val = $(this).data("set"); var val = $(this).data("set");
@ -662,23 +662,27 @@ function move_header_elements() {
} }
); );
}); });
}
$("#user_delete_selection").click(function () { $("#user_delete_selection").click(function () {
$("#user-table").bootstrapTable("uncheckAll"); $("#user-table").bootstrapTable("uncheckAll");
}); });
$("#select_locale").on("change", function () { $("#select_locale").on("change", function () {
selectHeader(this, "locale"); selectHeader(this, "locale");
}); });
$("#select_default_language").on("change", function () { $("#select_default_language").on("change", function () {
selectHeader(this, "default_language"); selectHeader(this, "default_language");
}); });
if (! $._data($(".check_head").get(0), "events") ) {
$(".check_head").on("change", function () { $(".check_head").on("change", function () {
var val = $(this).data("set"); var val = $(this).data("set");
var name = $(this).data("name"); var name = $(this).data("name");
var data = $(this).data("val"); var data = $(this).data("val");
checkboxHeader(val, name, data); checkboxHeader(val, name, data);
}); });
}
if (! $._data($(".button_head").get(0), "events") ) {
$(".button_head").on("click", function () { $(".button_head").on("click", function () {
var result = $('#user-table').bootstrapTable('getSelections').map(a => a.id); var result = $('#user-table').bootstrapTable('getSelections').map(a => a.id);
confirmDialog( confirmDialog(
@ -701,6 +705,7 @@ function move_header_elements() {
} }
); );
}); });
}
} }
function handleListServerResponse (data) { function handleListServerResponse (data) {
@ -716,7 +721,6 @@ function handleListServerResponse (data) {
$("#user-table").bootstrapTable("refresh"); $("#user-table").bootstrapTable("refresh");
} }
function checkboxChange(checkbox, userId, field, field_index) { function checkboxChange(checkbox, userId, field, field_index) {
$.ajax({ $.ajax({
method: "post", method: "post",

@ -40,7 +40,7 @@
<div class="form-check"> <div class="form-check">
<div> <div>
<input type="radio" class="check_head" data-set="false" data-val={{value.get(array_field)}} name="options_{{array_field}}" data-name="{{parameter}}" disabled>{{_('Deny')}} <input type="radio" class="check_head" data-set="false" data-val={{value.get(array_field)}} name="options_{{array_field}}" id="false_{{array_field}}" data-name="{{parameter}}" disabled>{{_('Deny')}}
</div> </div>
<div> <div>

Loading…
Cancel
Save