diff --git a/files/classes/user.py b/files/classes/user.py index 98d701da3..5f5bb6879 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -16,6 +16,7 @@ from .userblock import * from .badges import * from .clients import * from .mod_logs import * +from .sub_logs import * from .mod import * from .exiles import * from .sub_block import * @@ -644,11 +645,23 @@ class User(Base): @property @lazy def modaction_notifications_count(self): - if not self.admin_level or self.id == AEVANN_ID: return 0 - return g.db.query(ModAction).filter( - ModAction.created_utc > self.last_viewed_log_notifs, - ModAction.user_id != self.id, - ).count() + if self.id == AEVANN_ID: return 0 + + if self.admin_level: + return g.db.query(ModAction).filter( + ModAction.created_utc > self.last_viewed_log_notifs, + ModAction.user_id != self.id, + ).count() + + if self.moderated_subs: + return g.db.query(SubAction).filter( + SubAction.created_utc > self.last_viewed_log_notifs, + SubAction.user_id != self.id, + SubAction.sub.in_(self.moderated_subs), + ).count() + + return 0 + @property @lazy @@ -738,8 +751,7 @@ class User(Base): @property @lazy def moderated_subs(self): - modded_subs = g.db.query(Mod.sub).filter_by(user_id=self.id).all() - return modded_subs + return [x[0] for x in g.db.query(Mod.sub).filter_by(user_id=self.id).all()] @lazy def has_follower(self, user): diff --git a/files/routes/notifications.py b/files/routes/notifications.py index 9a3d6e05d..6d2d833a0 100644 --- a/files/routes/notifications.py +++ b/files/routes/notifications.py @@ -172,13 +172,24 @@ def notifications_posts(v): @app.get("/notifications/modactions") -@admin_level_required(PERMS['NOTIFICATIONS_MODERATOR_ACTIONS']) +@auth_required def notifications_modactions(v): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 - listing = g.db.query(ModAction).filter(ModAction.user_id != v.id).order_by(ModAction.id.desc()).offset(PAGE_SIZE*(page-1)).limit(PAGE_SIZE+1).all() + if v.admin_level >= PERMS['NOTIFICATIONS_MODERATOR_ACTIONS']: + cls = ModAction + elif v.moderated_subs: + cls = SubAction + else: + abort(403) + listing = g.db.query(cls).filter(cls.user_id != v.id) + + if cls == SubAction: + listing = listing.filter(cls.sub.in_(v.moderated_subs)) + + listing = listing.order_by(cls.id.desc()).offset(PAGE_SIZE*(page-1)).limit(PAGE_SIZE+1).all() next_exists = len(listing) > PAGE_SIZE listing = listing[:PAGE_SIZE] diff --git a/files/templates/notifications.html b/files/templates/notifications.html index 8aa0e12a5..d10ff93aa 100644 --- a/files/templates/notifications.html +++ b/files/templates/notifications.html @@ -28,7 +28,7 @@ Posts {% if v.post_notifications_count %}({{v.post_notifications_count}}){% endif %} - {% if v.admin_level >= PERMS['NOTIFICATIONS_MODERATOR_ACTIONS'] %} + {% if v.admin_level >= PERMS['NOTIFICATIONS_MODERATOR_ACTIONS'] or v.moderated_subs %}