mirror of
https://github.com/janeczku/calibre-web
synced 2024-11-28 12:30:00 +00:00
Bugfixes edit user list (Fix #1938)
This commit is contained in:
parent
ed2fa4cdd8
commit
64696fe973
46
cps/admin.py
46
cps/admin.py
@ -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"))
|
||||||
|
# check for valid value, last on checks for power of 2 value
|
||||||
|
if value > 0 and value <= constants.ROLE_VIEWER and (value & value-1 == 0 or value == 1):
|
||||||
if vals['value'] == 'true':
|
if vals['value'] == 'true':
|
||||||
user.role |= int(vals['field_index'])
|
user.role |= value
|
||||||
else:
|
elif vals['value'] == 'false':
|
||||||
if int(vals['field_index']) == constants.ROLE_ADMIN:
|
if value == constants.ROLE_ADMIN:
|
||||||
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 &= ~value
|
||||||
elif param.startswith('sidebar'):
|
|
||||||
if user.name == "Guest" and int(vals['field_index']) == constants.SIDEBAR_READ_AND_UNREAD:
|
|
||||||
raise Exception(_("Guest can't have this view"))
|
|
||||||
if vals['value'] == 'true':
|
|
||||||
user.sidebar_view |= int(vals['field_index'])
|
|
||||||
else:
|
else:
|
||||||
user.sidebar_view &= ~int(vals['field_index'])
|
raise Exception(_("Value has to be true or false"))
|
||||||
|
else:
|
||||||
|
raise Exception(_("Invalid role"))
|
||||||
|
elif param.startswith('sidebar'):
|
||||||
|
value = int(vals['field_index'])
|
||||||
|
if user.name == "Guest" and value == constants.SIDEBAR_READ_AND_UNREAD:
|
||||||
|
raise Exception(_("Guest can't have this view"))
|
||||||
|
# check for valid value, last on checks for power of 2 value
|
||||||
|
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:
|
||||||
|
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 {
|
||||||
@ -637,6 +636,7 @@ function move_header_elements() {
|
|||||||
});
|
});
|
||||||
$(".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,6 +662,7 @@ function move_header_elements() {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$("#user_delete_selection").click(function () {
|
$("#user_delete_selection").click(function () {
|
||||||
$("#user-table").bootstrapTable("uncheckAll");
|
$("#user-table").bootstrapTable("uncheckAll");
|
||||||
@ -672,13 +673,16 @@ function move_header_elements() {
|
|||||||
$("#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(
|
||||||
@ -702,6 +706,7 @@ function move_header_elements() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function handleListServerResponse (data) {
|
function handleListServerResponse (data) {
|
||||||
$("#flash_success").remove();
|
$("#flash_success").remove();
|
||||||
@ -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…
Reference in New Issue
Block a user