diff options
-rw-r--r-- | app/blueprints/packages/packages.py | 2 | ||||
-rw-r--r-- | app/blueprints/users/profile.py | 7 | ||||
-rw-r--r-- | app/templates/users/list.html | 63 |
3 files changed, 58 insertions, 14 deletions
diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 0cb9b35..90cb72f 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -81,7 +81,7 @@ def list_all(): topics = qb.buildTopicQuery().all() tags = db.session.query(func.count(Tags.c.tag_id), Tag) \ - .select_from(Tag).outerjoin(Tags).group_by(Tag.id).order_by(db.asc(Tag.title)) + .select_from(Tag).outerjoin(Tags).group_by(Tag.id).order_by(db.asc(Tag.title)).all() selected_tags = set(qb.tags) diff --git a/app/blueprints/users/profile.py b/app/blueprints/users/profile.py index 7973368..5b78fb2 100644 --- a/app/blueprints/users/profile.py +++ b/app/blueprints/users/profile.py @@ -28,6 +28,7 @@ from app.utils import randomString, loginUser, rank_required, nonEmptyOrNone, ad from app.tasks.forumtasks import checkForumAccount from app.tasks.emails import sendVerifyEmail, sendEmailRaw from app.tasks.phpbbparser import getProfile +from sqlalchemy import func # Define the User profile form class UserProfileForm(FlaskForm): @@ -43,7 +44,11 @@ class UserProfileForm(FlaskForm): @bp.route("/users/", methods=["GET"]) def list_all(): - users = User.query.order_by(db.desc(User.rank), db.asc(User.display_name)).all() + users = db.session.query(User, func.count(Package.id)) \ + .select_from(User).outerjoin(Package) \ + .order_by(db.desc(User.rank), db.asc(User.display_name)) \ + .group_by(User.id).all() + return render_template("users/list.html", users=users) diff --git a/app/templates/users/list.html b/app/templates/users/list.html index da3d120..90f6227 100644 --- a/app/templates/users/list.html +++ b/app/templates/users/list.html @@ -1,20 +1,59 @@ {% extends "base.html" %} {% block title %} - Users + {{ _("Users") }} {% endblock %} {% block content %} -<ul class="userlist"> - {% for user in users %} - <li> - <a href="{{ url_for('users.profile', username=user.username) }}" class="{{ user.rank }}"> - {{ user.display_name }} - </a> - - {{ user.rank.getTitle() }} - {% if current_user.is_authenticated %} - - {{ user.packages.count() }} packages. - {% endif %} +<h1>{{ _("Users") }}</h1> + +<div class="userlist list-group"> + <div class="list-group-item"> + <div class="row text-muted"> + <div class="col-sm-2"> + {{ _("Rank") }} + </div> + + <span class="col-sm"> + {{ _("Username") }} + </span> + + <div class="col-sm-1 text-center"> + {{ _("Packages") }} + </div> + </div> + </div> + + {% for pair in users %} + {% set user = pair[0] %} + {% set count_pkgs = pair[1] %} + + <a class="list-group-item list-group-item-action" href="{{ url_for('users.profile', username=user.username) }}"> + <div class="row"> + <div class="col-sm-2 {{ user.rank }}" + title="{{ _('Rank: %(rank)s.', rank=user.rank.getTitle()) }}"> + {% if user.rank == user.rank.ADMIN %} + <i class="fas fa-user-cog mr-2"></i> + {% elif user.rank == user.rank.MODERATOR %} + <i class="fas fa-user-shield mr-2"></i> + {% elif user.rank == user.rank.EDITOR %} + <i class="fas fa-user-edit mr-2"></i> + {% else %} + <i class="fas fa-user mr-2"></i> + {% endif %} + + {{ user.rank.getTitle() }} + </div> + + <span class="col-sm {{ user.rank }}"> + {{ user.display_name }} + </span> + + <div class="col-sm-1 text-center"> + <b>{{ count_pkgs }}</b> + </div> + </div> + </a> {% endfor %} -</ul> +</div> {% endblock %} |