From 1346dcfa45697fdbd7e9e82d29b4b2028bd45f6e Mon Sep 17 00:00:00 2001 From: Socks Date: Thu, 5 Apr 2018 01:06:11 +0100 Subject: [PATCH] Now with the ability to pin posts to profile --- Tweeder.py | 21 ++++++++++++++++++++- backend/accounts.py | 15 +++++++++++++++ backend/timeline.py | 6 +++++- templates/profile.html | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) diff --git a/Tweeder.py b/Tweeder.py index 8c3f93b..206dac9 100644 --- a/Tweeder.py +++ b/Tweeder.py @@ -70,6 +70,10 @@ def profile(name=None): name = name.lower() logged_in = accounts.get_display_name(session['username']) if 'username' in session.keys() else False posts = list(timeline.user_posts_by_username(name)) + if 'pinned' in accounts.account_details(name).keys(): + pinned = timeline.post_details(accounts.account_details(name)['pinned']) + else: + pinned=False return render_template('profile.html', title=accounts.get_display_name(name)+"'s profile", user=accounts.account_details(name), @@ -77,7 +81,8 @@ def profile(name=None): theme=accounts.get_theme(logged_in), following=accounts.is_following(logged_in, name), followers=accounts.get_followers(name), - posts=posts) + posts=posts, + pinned=pinned) @app.route('/logout') @@ -318,5 +323,19 @@ def messaging(user): return redirect(request.referrer) +@app.route('/pin/', methods=['GET']) +def pin(post_id): + if timeline.get_poster(post_id).lower() == session['username'].lower(): + accounts.set_pinned(session['username'], post_id) + return redirect(request.referrer) + + +@app.route('/unpin/', methods=['GET']) +def unpin(post_id): + if timeline.get_poster(post_id).lower() == session['username'].lower(): + accounts.unset_pinned(session['username'], post_id) + return redirect(request.referrer) + + if __name__ == '__main__': app.run(host="127.0.0.1", debug=True) diff --git a/backend/accounts.py b/backend/accounts.py index 482a5e9..c44ebc7 100644 --- a/backend/accounts.py +++ b/backend/accounts.py @@ -1,5 +1,6 @@ from pymongo import MongoClient import bcrypt +from bson.objectid import ObjectId client = MongoClient() accounts_db = client.tweeder.accounts @@ -52,6 +53,20 @@ def update_profile(username, details): {'$set': {'profile': details}}, upsert=True) +def set_pinned(username, post_id): + post_id = ObjectId(post_id) + accounts_db.update_one({'username': username}, + {'$set': {'pinned': post_id}}, upsert=True) + + +def unset_pinned(username, post_id): + username = username.lower() + post_id = ObjectId(post_id) + if accounts_db.find_one({'username': username})['pinned'] == post_id: + accounts_db.update_one({'username': username}, + {'$set': {'pinned': None}}, upsert=True) + + def get_followers(username): if not account_exists(username): return False diff --git a/backend/timeline.py b/backend/timeline.py index 1936774..364dffb 100644 --- a/backend/timeline.py +++ b/backend/timeline.py @@ -111,4 +111,8 @@ def unlike_post(post_id, user): def get_mentions(username): - return timeline_db.find({"mentions": username.lower()}).sort('timePosted', pymongo.DESCENDING) \ No newline at end of file + return timeline_db.find({"mentions": username.lower()}).sort('timePosted', pymongo.DESCENDING) + + +def post_details(post_id): + return timeline_db.find_one({'_id': ObjectId(post_id)}) \ No newline at end of file diff --git a/templates/profile.html b/templates/profile.html index d46709d..4b39fbd 100644 --- a/templates/profile.html +++ b/templates/profile.html @@ -38,12 +38,50 @@
+ {% if pinned %} +
+
+ {{ pinned.poster }} at {{ pinned.timePosted.strftime('%Y-%m-%d %-H:%M') }} {% if pinned.edited %}(Edited){% endif %} + + {% if logged_in|lower == pinned.poster|lower %} + {% if user.pinned == pinned._id %} + + {% else %} + + {% endif %} + {% endif %} + {% if logged_in|lower in pinned.likes %} +
+ {% else %} +
+ {% endif %} + + {% if logged_in|lower == pinned.poster|lower %} + + {% endif %} + {% if logged_in|lower == pinned.poster|lower %} + + {% endif %} +
+
+
+ {{ pinned.content }} +
+
+ {% endif %} {% if posts %} {% for post in posts if not post.hidden %}
{{ post.poster }} at {{ post.timePosted.strftime('%Y-%m-%d %-H:%M') }} {% if post.edited %}(Edited){% endif %} + {% if logged_in|lower == post.poster|lower %} + {% if user.pinned == post._id %} + + {% else %} + + {% endif %} + {% endif %} {% if logged_in|lower in post.likes %}
{% else %}