From 5e911b48538deadcc505f7b67343921423533d1e Mon Sep 17 00:00:00 2001 From: Hendrik L Date: Wed, 18 Dec 2024 10:01:45 +0100 Subject: [PATCH] make admin_users table sortable --- app/admin/routes.py | 19 ++++++-- app/templates/admin/users.html | 84 ++++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 25 deletions(-) diff --git a/app/admin/routes.py b/app/admin/routes.py index 530fa333..ee222409 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -1147,21 +1147,30 @@ def admin_users(): page = request.args.get('page', 1, type=int) search = request.args.get('search', '') local_remote = request.args.get('local_remote', '') + sort_by = request.args.get('sort_by', 'last_seen DESC') + last_seen = request.args.get('last_seen', 0, type=int) + + sort_by_btn = request.args.get('sort_by_btn', '') + if sort_by_btn: + return redirect(url_for('admin.admin_users', page=page, search=search, local_remote=local_remote, sort_by=sort_by_btn, last_seen=last_seen)) users = User.query.filter_by(deleted=False) if local_remote == 'local': users = users.filter_by(ap_id=None) - if local_remote == 'remote': + elif local_remote == 'remote': users = users.filter(User.ap_id != None) if search: users = users.filter(User.email.ilike(f"%{search}%")) - users = users.order_by(User.user_name).paginate(page=page, per_page=1000, error_out=False) + if last_seen > 0: + users = users.filter(User.last_seen > utcnow() - timedelta(days=last_seen)) + users = users.order_by(text('"user".' + sort_by)) + users = users.paginate(page=page, per_page=1000, error_out=False) - next_url = url_for('admin.admin_users', page=users.next_num) if users.has_next else None - prev_url = url_for('admin.admin_users', page=users.prev_num) if users.has_prev and page != 1 else None + next_url = url_for('admin.admin_users', page=users.next_num, search=search, local_remote=local_remote, sort_by=sort_by, last_seen=last_seen) if users.has_next else None + prev_url = url_for('admin.admin_users', page=users.prev_num, search=search, local_remote=local_remote, sort_by=sort_by, last_seen=last_seen) if users.has_prev and page != 1 else None return render_template('admin/users.html', title=_('Users'), next_url=next_url, prev_url=prev_url, users=users, - local_remote=local_remote, search=search, + local_remote=local_remote, search=search, sort_by=sort_by, last_seen=last_seen, moderating_communities=moderating_communities(current_user.get_id()), joined_communities=joined_communities(current_user.get_id()), menu_topics=menu_topics(), diff --git a/app/templates/admin/users.html b/app/templates/admin/users.html index 3a50a508..89acc5fa 100644 --- a/app/templates/admin/users.html +++ b/app/templates/admin/users.html @@ -11,40 +11,84 @@

{{ _('Users') }}

{{ _('Add local user') }} -
- - - - + +
+ + +
+
+ + +
+
+ + +
+
- - - - + - + + + + {% for user in users.items %} - - - - + + + {% endfor %}
{{ _('Name') }}{{ _('Seen') }}{{ _('Attitude') }}{{ _('Reputation') }} + + {{ _('Banned') }}{{ _('Reports') }} + + + + + + + + {{ _('Actions') }}
{{ render_username(user, add_domain=False) }}
{{ user.user_name }}{% if not user.is_local() %}@{{ user.ap_domain }}{% endif %}
{% if request.args.get('local_remote', '') == 'local' %} - {{ arrow.get(user.last_seen).humanize(locale=locale) }} - {% else %} - {{ user.last_seen }} - {% endif %} - {% if user.attitude != 1 %}{{ (user.attitude * 100) | round | int }}%{% endif %}{% if user.reputation %}R {{ user.reputation | round | int }}{% endif %} {{ 'Banned'|safe if user.banned }} {{ 'Banned posts'|safe if user.ban_posts }} {{ 'Banned comments'|safe if user.ban_comments }} {{ user.reports if user.reports > 0 }} Edit | - Delete + {% if user.attitude != 1 %}{{ (user.attitude * 100) | round | int }}%{% endif %}{% if user.reputation %}R {{ user.reputation | round | int }}{% endif %}{{ arrow.get(user.last_seen).humanize(locale=locale) }}Edit, + Delete, +
+ {% if user.banned %} + Ban, + {% else %} + Ban, + {% endif %} + Purge