From 22eaa9e7f84ed4c924603ba86ed2fe86528b589f Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 13 Feb 2022 01:10:29 +0200 Subject: [PATCH] xvc --- files/classes/award.py | 2 - files/classes/badges.py | 4 +- files/classes/clients.py | 2 + files/classes/comment.py | 5 ++- files/classes/mod_logs.py | 1 - files/classes/user.py | 3 +- files/routes/admin.py | 69 ++++++++++++++++++++++------------- files/routes/awards.py | 14 +++---- files/routes/front.py | 5 +-- files/routes/users.py | 2 +- files/templates/userpage.html | 4 +- 11 files changed, 62 insertions(+), 49 deletions(-) diff --git a/files/classes/award.py b/files/classes/award.py index c55788875..bb646860a 100644 --- a/files/classes/award.py +++ b/files/classes/award.py @@ -10,14 +10,12 @@ class AwardRelationship(Base): __tablename__ = "award_relationships" id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) submission_id = Column(Integer, ForeignKey("submissions.id")) comment_id = Column(Integer, ForeignKey("comments.id")) kind = Column(String) user = relationship("User", primaryjoin="AwardRelationship.user_id==User.id", viewonly=True) - post = relationship("Submission", primaryjoin="AwardRelationship.submission_id==Submission.id", viewonly=True) comment = relationship("Comment", primaryjoin="AwardRelationship.comment_id==Comment.id", viewonly=True) diff --git a/files/classes/badges.py b/files/classes/badges.py index 2461d14c9..659892d0b 100644 --- a/files/classes/badges.py +++ b/files/classes/badges.py @@ -23,11 +23,11 @@ class Badge(Base): __tablename__ = "badges" id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey('users.id')) badge_id = Column(Integer) description = Column(String) url = Column(String) + user = relationship("User", viewonly=True) badge = relationship("BadgeDef", primaryjoin="foreign(Badge.badge_id) == remote(BadgeDef.id)", viewonly=True) @@ -38,7 +38,7 @@ class Badge(Base): @lazy def text(self): if self.name == "Chud": - ti = self.user.agendaposter_expires_utc + ti = self.user.agendaposter if ti: text = self.badge.description + " until " + datetime.utcfromtimestamp(ti).strftime('%Y-%m-%d %H:%M:%S') else: text = self.badge.description + " permanently" elif self.badge_id in (94,95,96,97,98,109): diff --git a/files/classes/clients.py b/files/classes/clients.py index 2d72b69b7..982668706 100644 --- a/files/classes/clients.py +++ b/files/classes/clients.py @@ -18,6 +18,7 @@ class OauthApp(Base): redirect_uri = Column(String) description = Column(String) author_id = Column(Integer, ForeignKey("users.id")) + author = relationship("User", viewonly=True) def __repr__(self): return f"" @@ -69,6 +70,7 @@ class ClientAuth(Base): oauth_client = Column(Integer, ForeignKey("oauth_apps.id")) access_token = Column(String) user_id = Column(Integer, ForeignKey("users.id")) + user = relationship("User", viewonly=True) application = relationship("OauthApp", viewonly=True) diff --git a/files/classes/comment.py b/files/classes/comment.py index 2625f1c46..bfe75fb41 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -35,9 +35,8 @@ class Comment(Base): is_bot = Column(Boolean, default=False) is_pinned = Column(String) is_pinned_utc = Column(Integer) - sentto=Column(Integer, ForeignKey("users.id")) + sentto = Column(Integer, ForeignKey("users.id")) app_id = Column(Integer, ForeignKey("oauth_apps.id")) - oauth_app = relationship("OauthApp", viewonly=True) upvotes = Column(Integer, default=1) downvotes = Column(Integer, default=0) realupvotes = Column(Integer, default=1) @@ -48,6 +47,7 @@ class Comment(Base): blackjack_result = Column(String) treasure_amount = Column(String) + oauth_app = relationship("OauthApp", viewonly=True) post = relationship("Submission", viewonly=True) author = relationship("User", primaryjoin="User.id==Comment.author_id") senttouser = relationship("User", primaryjoin="User.id==Comment.sentto", viewonly=True) @@ -451,6 +451,7 @@ class Notification(Base): user_id = Column(Integer, ForeignKey("users.id")) comment_id = Column(Integer, ForeignKey("comments.id")) read = Column(Boolean, default=False) + comment = relationship("Comment", viewonly=True) user = relationship("User", viewonly=True) diff --git a/files/classes/mod_logs.py b/files/classes/mod_logs.py index 43f5c24fe..ff097cb28 100644 --- a/files/classes/mod_logs.py +++ b/files/classes/mod_logs.py @@ -10,7 +10,6 @@ from files.helpers.const import * class ModAction(Base): __tablename__ = "modactions" id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) kind = Column(String) target_user_id = Column(Integer, ForeignKey("users.id"), default=0) diff --git a/files/classes/user.py b/files/classes/user.py index 9bc7e9def..35ac606b1 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -72,8 +72,7 @@ class User(Base): admin_level = Column(Integer, default=0) coins_spent = Column(Integer, default=0) lootboxes_bought = Column(Integer, default=0) - agendaposter = Column(Boolean, default=False) - agendaposter_expires_utc = Column(Integer, default=0) + agendaposter = Column(Integer, default=0) changelogsub = Column(Boolean, default=False) is_activated = Column(Boolean, default=False) shadowbanned = Column(String) diff --git a/files/routes/admin.py b/files/routes/admin.py index af067a43d..6f4a3870f 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -794,54 +794,71 @@ def admin_removed_comments(v): def agendaposter(user_id, v): user = g.db.query(User).filter_by(id=user_id).one_or_none() - if user.username == '911roofer': abort(403) - expiry = request.values.get("days", 0) if expiry: expiry = float(expiry) expiry = g.timestamp + expiry*60*60*24 else: expiry = g.timestamp + 2629746 - user.agendaposter = not user.agendaposter - user.agendaposter_expires_utc = expiry + user.agendaposter = expiry g.db.add(user) + for alt in user.alts: - if alt.admin_level: break - alt.agendaposter = user.agendaposter - alt.agendaposter_expires_utc = expiry + if alt.admin_level: return {"error": "User is an admin!"} + alt.agendaposter = expiry g.db.add(alt) - note = None - - if not user.agendaposter: kind = "unagendaposter" - else: - kind = "agendaposter" - note = f"for {request.values.get('days')} days" if expiry else "never expires" + note = f"for {request.values.get('days')} days" if expiry else "never expires" ma = ModAction( - kind=kind, + kind="agendaposter", user_id=v.id, target_user_id=user.id, note = note ) g.db.add(ma) - if user.agendaposter: - if not user.has_badge(26): - badge = Badge(user_id=user.id, badge_id=26) - g.db.add(badge) - g.db.flush() - send_notification(user.id, f"@AutoJanny has given you the following profile badge:\n\n![]({badge.path})\n\n{badge.name}") + if not user.has_badge(26): + badge = Badge(user_id=user.id, badge_id=26) + g.db.add(badge) + g.db.flush() + send_notification(user.id, f"@AutoJanny has given you the following profile badge:\n\n![]({badge.path})\n\n{badge.name}") - else: - badge = user.has_badge(26) - if badge: g.db.delete(badge) - if user.agendaposter: send_repeatable_notification(user.id, f"You have been marked by an admin as an agendaposter ({note}).") - else: send_repeatable_notification(user.id, "You have been unmarked by an admin as an agendaposter.") + send_repeatable_notification(user.id, f"You have been marked by an admin as an agendaposter ({note}).") + + g.db.commit() + + return redirect(user.url) + + + +@app.post("/unagendaposter/") +@admin_level_required(2) +def unagendaposter(user_id, v): + user = g.db.query(User).filter_by(id=user_id).one_or_none() + + user.agendaposter = 0 + g.db.add(user) + + for alt in user.alts: + alt.agendaposter = 0 + g.db.add(alt) + + ma = ModAction( + kind="unagendaposter", + user_id=v.id, + target_user_id=user.id + ) + + g.db.add(ma) + + badge = user.has_badge(26) + if badge: g.db.delete(badge) + + send_repeatable_notification(user.id, "You have been unmarked by an admin as an agendaposter.") g.db.commit() - if user.agendaposter: return redirect(user.url) return {"message": "Chud theme disabled!"} diff --git a/files/routes/awards.py b/files/routes/awards.py index a0d9957a8..9d57195bc 100644 --- a/files/routes/awards.py +++ b/files/routes/awards.py @@ -292,15 +292,14 @@ def award_post(pid, v): cache.delete_memoized(frontlist) else: post.stickied_utc = t g.db.add(post) - elif kind == "agendaposter" and not (author.agendaposter and author.agendaposter_expires_utc == 0): + elif kind == "agendaposter" and not (author.agendaposter and author.agendaposter == 0): if author.marseyawarded: return {"error": "This user is the under the effect of a conflicting award: Marsey award."}, 404 if author.username == "911roofer": abort(403) - if author.agendaposter_expires_utc and time.time() < author.agendaposter_expires_utc: author.agendaposter_expires_utc += 86400 - else: author.agendaposter_expires_utc = int(time.time()) + 86400 + if author.agendaposter and time.time() < author.agendaposter: author.agendaposter += 86400 + else: author.agendaposter = int(time.time()) + 86400 - author.agendaposter = True if not author.has_badge(26): badge = Badge(user_id=author.id, badge_id=26) g.db.add(badge) @@ -527,15 +526,14 @@ def award_comment(cid, v): c.is_pinned_utc = None else: c.is_pinned_utc = t g.db.add(c) - elif kind == "agendaposter" and not (author.agendaposter and author.agendaposter_expires_utc == 0): + elif kind == "agendaposter" and not (author.agendaposter and author.agendaposter == 0): if author.marseyawarded: return {"error": "This user is the under the effect of a conflicting award: Marsey award."}, 404 if author.username == "911roofer": abort(403) - if author.agendaposter_expires_utc and time.time() < author.agendaposter_expires_utc: author.agendaposter_expires_utc += 86400 - else: author.agendaposter_expires_utc = int(time.time()) + 86400 + if author.agendaposter and time.time() < author.agendaposter: author.agendaposter += 86400 + else: author.agendaposter = int(time.time()) + 86400 - author.agendaposter = True if not author.has_badge(26): badge = Badge(user_id=author.id, badge_id=26) g.db.add(badge) diff --git a/files/routes/front.py b/files/routes/front.py index 1668260d2..09be227cd 100644 --- a/files/routes/front.py +++ b/files/routes/front.py @@ -201,9 +201,8 @@ def front_all(v, sub=None): g.db.add(v) g.db.commit() - if v.agendaposter_expires_utc and v.agendaposter_expires_utc < time.time(): - v.agendaposter_expires_utc = 0 - v.agendaposter = None + if v.agendaposter and v.agendaposter < time.time(): + v.agendaposter = 0 send_repeatable_notification(v.id, "Your chud theme has expired!") g.db.add(v) badge = v.has_badge(26) diff --git a/files/routes/users.py b/files/routes/users.py index 1d8faf1ec..86b8c564f 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -52,7 +52,7 @@ def grassed(v): @app.get("/agendaposters") @auth_required def agendaposters(v): - users = [x for x in g.db.query(User).filter_by(agendaposter = True).order_by(User.username).all()] + users = [x for x in g.db.query(User).filter(User.agendaposter > 0).order_by(User.username).all()] return render_template("agendaposters.html", v=v, users=users) diff --git a/files/templates/userpage.html b/files/templates/userpage.html index e4fe78199..e40b33fd5 100644 --- a/files/templates/userpage.html +++ b/files/templates/userpage.html @@ -272,7 +272,7 @@ - Disable Chud Theme + Disable Chud Theme

 
@@ -574,7 +574,7 @@
 							
 							
 						
-						Disable Chud Theme
+						Disable Chud Theme