diff --git a/app/blueprints/users/profile.py b/app/blueprints/users/profile.py index 67c90bb..a444e2b 100644 --- a/app/blueprints/users/profile.py +++ b/app/blueprints/users/profile.py @@ -72,9 +72,18 @@ def profile(username): .join(User.maintained_packages) \ .filter(User.id == user.id, Package.state == PackageState.APPROVED).scalar() or 0 + all_package_ranks = db.session.query( + Package.author_id, + func.rank().over(order_by=db.desc(Package.score)) \ + .label('rank')).order_by(db.asc(text("rank"))).subquery() + user_package_ranks = db.session.query(all_package_ranks) \ + .filter_by(author_id=user.id).first() + min_package_rank = user_package_ranks[1] if user_package_ranks else None + # Process GET or invalid POST return render_template("users/profile.html", user=user, packages=packages, - total_downloads=total_downloads, review_idx=review_idx, review_percent=review_percent) + total_downloads=total_downloads, min_package_rank=min_package_rank, + review_idx=review_idx, review_percent=review_percent) @bp.route("/users//check/", methods=["POST"]) diff --git a/app/templates/users/profile.html b/app/templates/users/profile.html index ff58793..6e32745 100644 --- a/app/templates/users/profile.html +++ b/app/templates/users/profile.html @@ -218,6 +218,41 @@ {% endif %} + {% if min_package_rank <= 30 %} + {% if min_package_rank <= 5 %} + {% set badge_color = "gold" %} + {% elif min_package_rank <= 10 %} + {% set badge_color = "#888" %} + {% elif min_package_rank <= 20 %} + {% set badge_color = "#cd7f32" %} + {% else %} + {% set badge_color = "white" %} + {% endif %} +
+
+
+ +
+
+ {% if min_package_rank <= 5 %} + {{ _("Top 5 package") }} + {% elif min_package_rank <= 10 %} + {{ _("Top 10 package") }} + {% elif min_package_rank <= 20 %} + {{ _("Top 20 package") }} + {% else %} + {{ _("Top 30 package") }} + {% endif %} +
+

+ {{ _("%(display_name)s has a package placed at #%(place)d.", + display_name=user.display_name, place=min_package_rank) }} +

+
+
+
+
+ {% endif %} {% endif %}