Working Locale and default language selection in user table edit

This commit is contained in:
Ozzie Isaacs
2021-02-20 14:18:27 +01:00
parent a3a11bdf3f
commit e64a504bb1
4 changed files with 132 additions and 49 deletions
+88 -31
View File
@@ -31,6 +31,7 @@ from datetime import datetime, timedelta
from babel import Locale as LC
from babel.dates import format_datetime
from babel.core import UnknownLocaleError
from flask import Blueprint, flash, redirect, url_for, abort, request, make_response, send_from_directory, g
from flask_login import login_required, current_user, logout_user, confirm_login
from flask_babel import gettext as _
@@ -39,7 +40,7 @@ from sqlalchemy.orm.attributes import flag_modified
from sqlalchemy.exc import IntegrityError, OperationalError, InvalidRequestError
from sqlalchemy.sql.expression import func, or_
from . import constants, logger, helper, services
from . import constants, logger, helper, services, isoLanguages
from .cli import filepicker
from . import db, calibre_db, ub, web_server, get_locale, config, updater_thread, babel, gdriveutils
from .helper import check_valid_domain, send_test_mail, reset_password, generate_password_hash
@@ -253,7 +254,21 @@ def list_users():
users = all_user.offset(off).limit(limit).all()
filtered_count = total_count
for user in users:
# set readable locale
#try:
# user.local = LC.parse(user.locale).get_language_name(get_locale())
#except UnknownLocaleError:
# # This should not happen
# user.local = _(isoLanguages.get(part1=user.locale).name)
# Set default language
if user.default_language == "all":
user.default = _("all")
else:
user.default = LC.parse(user.default_language).get_language_name(get_locale())
table_entries = {'totalNotFiltered': total_count, 'total': filtered_count, "rows": users}
js_list = json.dumps(table_entries, cls=db.AlchemyEncoder)
response = make_response(js_list)
@@ -266,10 +281,32 @@ def list_users():
def delete_user():
# ToDo User delete check also not last one
pass
return
return ""
@admi.route("/ajax/getlocale")
@login_required
@admin_required
def table_get_locale():
locale = babel.list_translations() + [LC('en')]
ret = list()
current_locale = get_locale()
for loc in locale:
ret.append({'value':str(loc),'text':loc.get_language_name(current_locale)})
return json.dumps(ret)
@admi.route("/ajax/getdefaultlanguage")
@login_required
@admin_required
def table_get_default_lang():
languages = calibre_db.speaking_language()
ret = list()
ret.append({'value':'all','text':_('Show All')})
for lang in languages:
ret.append({'value':lang.lang_code,'text': lang.name})
return json.dumps(ret)
# @admi.route("/ajax/editlistusers/<param>", defaults={"value": 0}, methods=['POST'])
@admi.route("/ajax/editlistusers/<param>", methods=['POST'])
@login_required
@admin_required
@@ -280,36 +317,56 @@ def edit_list_user(param):
all_user = all_user.filter(ub.User.role.op('&')(constants.ROLE_ANONYMOUS) != constants.ROLE_ANONYMOUS)
# only one user is posted
if "pk" in vals:
user = all_user.filter(ub.User.id == vals['pk']).one_or_none()
users = [all_user.filter(ub.User.id == vals['pk'][0]).one_or_none()]
else:
# ToDo
user = all_user.filter(ub.User.id == vals['pk[]']).all()
if param =='nickname':
if not ub.session.query(ub.User).filter(ub.User.nickname == vals['value']).scalar():
user.nickname = vals['value']
if "pk[]" in vals:
users = all_user.filter(ub.User.id.in_(vals['pk[]'])).all()
else:
log.error(u"This username is already taken")
return _(u"This username is already taken"), 400
elif param =='email':
existing_email = ub.session.query(ub.User).filter(ub.User.email == vals['value'].lower()).first()
if not existing_email:
user.email = vals['value']
else:
log.error(u"Found an existing account for this e-mail address.")
return _(u"Found an existing account for this e-mail address."), 400
elif param =='kindle_mail':
user.kindle_mail = vals['value']
elif param == 'role':
if vals['value'] == 'true':
user.role |= int(vals['field_index'])
else:
user.role &= ~int(vals['field_index'])
elif param == 'sidebar_view':
if vals['value'] == 'true':
user.sidebar_view |= int(vals['field_index'])
else:
user.sidebar_view &= ~int(vals['field_index'])
return ""
if 'field_index' in vals:
vals['field_index'] = vals['field_index'][0]
if 'value' in vals:
vals['value'] = vals['value'][0]
else:
return ""
for user in users:
if param =='nickname':
if not ub.session.query(ub.User).filter(ub.User.nickname == vals['value']).scalar():
user.nickname = vals['value']
else:
log.error(u"This username is already taken")
return _(u"This username is already taken"), 400
elif param =='email':
existing_email = ub.session.query(ub.User).filter(ub.User.email == vals['value'].lower()).first()
if not existing_email:
user.email = vals['value']
else:
log.error(u"Found an existing account for this e-mail address.")
return _(u"Found an existing account for this e-mail address."), 400
elif param =='kindle_mail':
user.kindle_mail = vals['value']
elif param == 'role':
if vals['value'] == 'true':
user.role |= int(vals['field_index'])
else:
user.role &= ~int(vals['field_index'])
elif param == 'sidebar_view':
if vals['value'] == 'true':
user.sidebar_view |= int(vals['field_index'])
else:
user.sidebar_view &= ~int(vals['field_index'])
elif param == 'denied_tags':
user.denied_tags = vals['value']
elif param == 'allowed_tags':
user.allowed_tags = vals['value']
elif param == 'allowed_column_value':
user.allowed_column_value = vals['value']
elif param == 'denied_column_value':
user.denied_column_value = vals['value']
elif param == 'locale':
user.locale = vals['value']
elif param == 'default_language':
user.default_language = vals['value']
ub.session_commit()
return ""