Make it possible to accept follow requests

This commit is contained in:
Gergely Polonkai 2018-07-12 09:56:55 +02:00
parent 61f10f951c
commit 5639c3f578
3 changed files with 59 additions and 0 deletions

View File

@ -419,5 +419,45 @@ class CalendarSocialApp(Flask):
return render_template('index.html', calendar=calendar, user_only=False) return render_template('index.html', calendar=calendar, user_only=False)
@staticmethod
@route('/follow-requests')
@login_required
def follow_requests():
"""View for listing follow requests
"""
from .models import UserFollow
requests = UserFollow.query \
.filter(UserFollow.followed == current_user.profile) \
.filter(UserFollow.accepted_at.is_(None))
return render_template('follow-requests.html', requests=requests)
@staticmethod
@route('/follow-request/<int:follower_id>/accept')
@login_required
def accept_follow(follower_id):
"""View for accepting a follow request
"""
from .models import db, UserFollow
try:
req = UserFollow.query \
.filter(UserFollow.followed == current_user.profile) \
.filter(UserFollow.follower_id == follower_id) \
.one()
except NoResultFound:
abort(404)
if req.accepted_at is None:
req.accept()
db.session.add(req)
db.session.commit()
return redirect(url_for('follow_requests'))
app = CalendarSocialApp(__name__) app = CalendarSocialApp(__name__)

View File

@ -604,6 +604,12 @@ class UserFollow(db.Model): # pylint: disable=too-few-public-methods
#: The timestamp when the follow was accepted #: The timestamp when the follow was accepted
accepted_at = db.Column(db.DateTime(), nullable=True) accepted_at = db.Column(db.DateTime(), nullable=True)
def accept(self):
"""Accept this follow request
"""
self.accepted_at = datetime.utcnow()
class Notification(db.Model): class Notification(db.Model):
"""Database model for notifications """Database model for notifications

View File

@ -0,0 +1,13 @@
{% extends 'base.html' %}
{% block content %}
<h2>{% trans %}Follow requests{% endtrans %}</h2>
<ul>
{% for req in requests %}
<li>
{{ req.follower }}
<a href="{{ url_for('accept_follow', follower_id=req.follower_id) }}">{% trans %}Accept{% endtrans %}</a>
</li>
{% endfor %}
</ul>
{% endblock content %}