Readd "Sync with Forums" button to profile picture settings

This commit is contained in:
rubenwardy 2023-09-02 22:34:29 +01:00
parent 459eb02112
commit 8dfd5c407d
3 changed files with 32 additions and 4 deletions

@ -22,8 +22,10 @@ from flask_babel import gettext
from flask_login import current_user, login_required from flask_login import current_user, login_required
from sqlalchemy import func, text from sqlalchemy import func, text
from app.models import User, db, Package, PackageReview, PackageState, PackageType from app.models import User, db, Package, PackageReview, PackageState, PackageType, UserRank
from app.utils import get_daterange_options from app.utils import get_daterange_options
from app.tasks.forumtasks import check_forum_account
from . import bp from . import bp
@ -235,6 +237,25 @@ def profile(username):
medals_unlocked=unlocked, medals_locked=locked) medals_unlocked=unlocked, medals_locked=locked)
@bp.route("/users/<username>/check-forums/", methods=["POST"])
@login_required
def user_check_forums(username):
user = User.query.filter_by(username=username).first()
if user is None:
abort(404)
if current_user != user and not current_user.rank.atLeast(UserRank.MODERATOR):
abort(403)
if user.forums_username is None:
abort(404)
task = check_forum_account.delay(user.forums_username, force_replace_pic=True)
next_url = url_for("users.profile", username=username)
return redirect(url_for("tasks.check", id=task.id, r=next_url))
@bp.route("/user/stats/") @bp.route("/user/stats/")
@login_required @login_required
def statistics_redirect(): def statistics_redirect():

@ -28,7 +28,7 @@ from .usertasks import set_profile_picture_from_url
@celery.task() @celery.task()
def check_forum_account(forums_username): def check_forum_account(forums_username, force_replace_pic=False):
print("### Checking " + forums_username, file=sys.stderr) print("### Checking " + forums_username, file=sys.stderr)
try: try:
profile = get_profile("https://forum.minetest.net", forums_username) profile = get_profile("https://forum.minetest.net", forums_username)
@ -69,7 +69,7 @@ def check_forum_account(forums_username):
print(f"####### User pp {user.profile_pic}", file=sys.stderr) print(f"####### User pp {user.profile_pic}", file=sys.stderr)
pic_needs_replacing = user.profile_pic is None or user.profile_pic == "" or \ pic_needs_replacing = user.profile_pic is None or user.profile_pic == "" or \
user.profile_pic.startswith("https://forum.minetest.net") user.profile_pic.startswith("https://forum.minetest.net") or force_replace_pic
if pic_needs_replacing and pic.startswith("https://forum.minetest.net"): if pic_needs_replacing and pic.startswith("https://forum.minetest.net"):
print(f"####### Queueing", file=sys.stderr) print(f"####### Queueing", file=sys.stderr)
set_profile_picture_from_url.delay(user.username, pic) set_profile_picture_from_url.delay(user.username, pic)

@ -21,7 +21,14 @@
{% endif %} {% endif %}
</div> </div>
<div class="col"> <div class="col">
{% if user.email %} {% if user.forums_username %}
<form method="post" action="{{ url_for('users.user_check_forums', username=user.username) }}" class="" style="display:inline-block;">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="submit" class="btn btn-primary" value="{{ _('Sync with Forums') }}" />
</form>
{% endif %}
{% if user.profile_pic %}
{% elif user.email %}
<a class="btn btn-primary" href="https://en.gravatar.com/"> <a class="btn btn-primary" href="https://en.gravatar.com/">
Gravatar Gravatar
</a> </a>