diff --git a/docker-compose.yml b/docker-compose.yml
index b53fb74b3..ac99b2d20 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -27,7 +27,7 @@ services:
postgres:
image: postgres:12.3
- command: ["postgres", "-c", "log_statement=all"]
+ # command: ["postgres", "-c", "log_statement=all"]
# uncomment this if u wanna output all SQL queries to the console
volumes:
- "./schema.sql:/docker-entrypoint-initdb.d/00-schema.sql"
diff --git a/files/classes/comment.py b/files/classes/comment.py
index 9c400ffcd..32e9e3ef0 100644
--- a/files/classes/comment.py
+++ b/files/classes/comment.py
@@ -107,6 +107,13 @@ class Comment(Base):
flags.remove(flag)
return flags
+ @lazy
+ def poll_voted(self, v):
+ if v:
+ vote = g.db.query(CommentVote.vote_type).filter_by(user_id=v.id, comment_id=self.id).one_or_none()
+ if vote: return vote[0]
+ return None
+
@property
@lazy
def options(self):
@@ -121,13 +128,13 @@ class Comment(Base):
def total_poll_voted(self, v):
if v:
for option in self.options:
- if option.voted: return True
+ if option.poll_voted(v): return True
return False
@lazy
def total_choice_voted(self, v):
if v:
- return g.db.query(CommentVote).filter(CommentVote.user_id == v.id, CommentVote.comment_id.in_([x.id for x in self.choices])).count()
+ return g.db.query(CommentVote).filter(CommentVote.user_id == v.id, CommentVote.comment_id.in_([x.id for x in self.choices])).all()
return False
@property
@@ -240,7 +247,7 @@ class Comment(Base):
if not self.parent_submission:
return [x for x in self.child_comments.order_by(Comment.id) if not x.author.shadowbanned]
- comments = self.child_comments.filter(Comment.author_id.notin_(poll_bots))
+ comments = self.child_comments.filter(Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)))
comments = sort_comments(sort, comments)
return [x for x in comments if not x.author.shadowbanned]
@@ -251,7 +258,7 @@ class Comment(Base):
if not self.parent_submission:
return self.child_comments.order_by(Comment.id).all()
- comments = self.child_comments.filter(Comment.author_id.notin_(poll_bots))
+ comments = self.child_comments.filter(Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)))
return sort_comments(sort, comments).all()
@@ -407,7 +414,7 @@ class Comment(Base):
for c in self.options:
body += f'
'
diff --git a/files/classes/submission.py b/files/classes/submission.py
index 1b6b283cc..11fc38571 100644
--- a/files/classes/submission.py
+++ b/files/classes/submission.py
@@ -122,13 +122,13 @@ class Submission(Base):
def total_poll_voted(self, v):
if v:
for option in self.options:
- if option.voted: return True
+ if option.poll_voted(v): return True
return False
@lazy
def total_choice_voted(self, v):
if v and self.choices:
- return g.db.query(CommentVote).filter(CommentVote.user_id == v.id, CommentVote.comment_id.in_([x.id for x in self.choices])).count()
+ return g.db.query(CommentVote).filter(CommentVote.user_id == v.id, CommentVote.comment_id.in_([x.id for x in self.choices])).all()
return False
@lazy
@@ -136,7 +136,7 @@ class Submission(Base):
if "closed" in self.body.lower(): return True
if v:
for option in self.bet_options:
- if option.voted: return True
+ if option.poll_voted(v): return True
return False
@property
@@ -387,7 +387,7 @@ class Submission(Base):
return url
@lazy
- def realbody(self, v, show_polls=False):
+ def realbody(self, v):
if self.club and not (v and (v.paid_dues or v.id == self.author_id)): return f"
{CC} ONLY
"
body = self.body_html or ""
@@ -407,43 +407,43 @@ class Submission(Base):
self.upvotes += amount
g.db.add(self)
- if show_polls:
- for c in self.options:
- body += f'
200) or self.total_bet_voted(v) or not v.can_gamble: body += " disabled "
- body += f'''>{c.body_html} - {c.upvotes} bets'''
- if not self.total_bet_voted(v):
- body += ''' (cost of entry: 200 coins)'''
- body += ""
- if v and v.admin_level > 2:
- body += f''''''
- body += "
"
+ for c in self.bet_options:
+ body += f'''
200) or self.total_bet_voted(v) or not v.can_gamble: body += " disabled "
+ body += f'''>{c.body_html} - {c.upvotes} bets'''
+ if not self.total_bet_voted(v):
+ body += ''' (cost of entry: 200 coins)'''
+ body += ""
+ if v and v.admin_level > 2:
+ body += f''''''
+ body += "
"
- if self.author.sig_html and (self.author_id == MOOSE_ID or (not self.ghost and not (v and v.sigs_disabled))):
- body += f"{self.author.sig_html}"
+
+ if self.author.sig_html and (self.author_id == MOOSE_ID or (not self.ghost and not (v and v.sigs_disabled))):
+ body += f"{self.author.sig_html}"
return body
diff --git a/files/classes/user.py b/files/classes/user.py
index 5f8cc96df..682a8092f 100644
--- a/files/classes/user.py
+++ b/files/classes/user.py
@@ -480,7 +480,6 @@ class User(Base):
@property
@lazy
def modaction_notifications_count(self):
- if not self.admin_level: return 0
return g.db.query(Notification).join(Comment).filter(
Notification.user_id == self.id, Notification.read == False,
Comment.is_banned == False, Comment.deleted_utc == 0,
@@ -490,7 +489,6 @@ class User(Base):
@property
@lazy
def reddit_notifications_count(self):
- if not self.can_view_offsitementions: return 0
return g.db.query(Notification).join(Comment).filter(
Notification.user_id == self.id, Notification.read == False,
Comment.is_banned == False, Comment.deleted_utc == 0,
@@ -705,9 +703,6 @@ class User(Base):
def saved_idlist(self, page=1):
saved = [x[0] for x in g.db.query(SaveRelationship.submission_id).filter_by(user_id=self.id).all()]
-
- if not saved: return []
-
posts = g.db.query(Submission.id).filter(Submission.id.in_(saved), Submission.is_banned == False, Submission.deleted_utc == 0)
if self.admin_level < 2:
@@ -719,9 +714,6 @@ class User(Base):
def saved_comment_idlist(self, page=1):
saved = [x[0] for x in g.db.query(CommentSaveRelationship.comment_id).filter_by(user_id=self.id).all()]
-
- if not saved: return []
-
comments = g.db.query(Comment.id).filter(Comment.id.in_(saved), Comment.is_banned == False, Comment.deleted_utc == 0)
if self.admin_level < 2:
diff --git a/files/helpers/get.py b/files/helpers/get.py
index 7629880da..f3504f8bf 100644
--- a/files/helpers/get.py
+++ b/files/helpers/get.py
@@ -120,8 +120,8 @@ def get_post(i, v=None, graceful=False):
else: abort(404)
if v:
- vt = g.db.query(Vote.vote_type, Vote.submission_id).filter_by(user_id=v.id, submission_id=i).subquery()
-
+ vt = g.db.query(Vote).filter_by(
+ user_id=v.id, submission_id=i).subquery()
blocking = v.blocking.subquery()
post = g.db.query(
@@ -166,7 +166,7 @@ def get_posts(pids, v=None):
return []
if v:
- vt = g.db.query(Vote.vote_type, Vote.submission_id).filter(
+ vt = g.db.query(Vote).filter(
Vote.submission_id.in_(pids),
Vote.user_id==v.id
).subquery()
@@ -228,7 +228,8 @@ def get_comment(i, v=None, graceful=False):
)
).first()
- vt = g.db.query(CommentVote.vote_type).filter_by(user_id=v.id, comment_id=comment.id).one_or_none()
+ vts = g.db.query(CommentVote).filter_by(user_id=v.id, comment_id=comment.id)
+ vt = g.db.query(CommentVote).filter_by(user_id=v.id, comment_id=comment.id).one_or_none()
comment.is_blocking = block and block.user_id == v.id
comment.is_blocked = block and block.target_id == v.id
comment.voted = vt.vote_type if vt else 0
@@ -241,7 +242,7 @@ def get_comments(cids, v=None, load_parent=False):
if not cids: return []
if v:
- votes = g.db.query(CommentVote.vote_type, CommentVote.comment_id).filter_by(user_id=v.id).subquery()
+ votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
blocking = v.blocking.subquery()
diff --git a/files/routes/comments.py b/files/routes/comments.py
index 08a464259..8ba3d8985 100644
--- a/files/routes/comments.py
+++ b/files/routes/comments.py
@@ -117,7 +117,7 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None):
sort=request.values.get("sort", defaultsortingcomments)
if v:
- votes = g.db.query(CommentVote.vote_type, CommentVote.comment_id).filter_by(user_id=v.id).subquery()
+ votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
blocking = v.blocking.subquery()
@@ -134,7 +134,8 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None):
comments = comments.join(User, User.id == Comment.author_id).filter(User.shadowbanned == None)
comments=comments.filter(
- Comment.top_comment_id == c.top_comment_id
+ Comment.parent_submission == post.id,
+ Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID))
).join(
votes,
votes.c.comment_id == Comment.id,
diff --git a/files/routes/posts.py b/files/routes/posts.py
index 1c7a15933..c84d6865d 100644
--- a/files/routes/posts.py
+++ b/files/routes/posts.py
@@ -147,7 +147,7 @@ def post_id(pid, anything=None, v=None, sub=None):
if post.club and not (v and (v.paid_dues or v.id == post.author_id)): abort(403)
if v:
- votes = g.db.query(CommentVote.vote_type, CommentVote.comment_id).filter_by(user_id=v.id).subquery()
+ votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
blocking = v.blocking.subquery()
@@ -163,7 +163,7 @@ def post_id(pid, anything=None, v=None, sub=None):
if not (v and v.shadowbanned) and not (v and v.admin_level >= 2):
comments = comments.join(User, User.id == Comment.author_id).filter(User.shadowbanned == None)
- comments=comments.filter(Comment.parent_submission == post.id).join(
+ comments=comments.filter(Comment.parent_submission == post.id, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID))).join(
votes,
votes.c.comment_id == Comment.id,
isouter=True
@@ -187,7 +187,7 @@ def post_id(pid, anything=None, v=None, sub=None):
pinned = [c[0] for c in comments.filter(Comment.stickied != None).all()]
- comments = comments.filter(Comment.level == 1, Comment.stickied == None, Comment.author_id.notin_(poll_bots))
+ comments = comments.filter(Comment.level == 1, Comment.stickied == None)
comments = sort_comments(sort, comments)
@@ -197,7 +197,7 @@ def post_id(pid, anything=None, v=None, sub=None):
else:
pinned = g.db.query(Comment).filter(Comment.parent_submission == post.id, Comment.stickied != None).all()
- comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == post.id, Comment.author_id.notin_(poll_bots), Comment.level == 1, Comment.stickied == None)
+ comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == post.id, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)), Comment.level == 1, Comment.stickied == None)
comments = sort_comments(sort, comments)
@@ -259,7 +259,7 @@ def viewmore(v, pid, sort, offset):
except: abort(400)
if v:
- votes = g.db.query(CommentVote.vote_type, CommentVote.comment_id).filter_by(user_id=v.id).subquery()
+ votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
blocking = v.blocking.subquery()
@@ -270,7 +270,7 @@ def viewmore(v, pid, sort, offset):
votes.c.vote_type,
blocking.c.target_id,
blocked.c.target_id,
- ).filter(Comment.parent_submission == pid, Comment.stickied == None, Comment.id.notin_(ids))
+ ).filter(Comment.parent_submission == pid, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)), Comment.stickied == None, Comment.id.notin_(ids))
if not (v and v.shadowbanned) and not (v and v.admin_level >= 2):
comments = comments.join(User, User.id == Comment.author_id).filter(User.shadowbanned == None)
@@ -297,7 +297,7 @@ def viewmore(v, pid, sort, offset):
comment.is_blocked = c[3] or 0
output.append(comment)
- comments = comments.filter(Comment.level == 1, Comment.author_id.notin_(poll_bots))
+ comments = comments.filter(Comment.level == 1)
comments = sort_comments(sort, comments)
@@ -305,7 +305,7 @@ def viewmore(v, pid, sort, offset):
second = [c[0] for c in comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()]
comments = first + second
else:
- comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == pid, Comment.author_id.notin_(poll_bots), Comment.level == 1, Comment.stickied == None, Comment.id.notin_(ids))
+ comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == pid, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)), Comment.level == 1, Comment.stickied == None, Comment.id.notin_(ids))
comments = sort_comments(sort, comments)
@@ -346,7 +346,7 @@ def morecomments(v, cid):
tcid = g.db.query(Comment.top_comment_id).filter_by(id=cid).one_or_none()[0]
if v:
- votes = g.db.query(CommentVote.vote_type, CommentVote.comment_id).filter_by(user_id=v.id).subquery()
+ votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
blocking = v.blocking.subquery()
diff --git a/files/templates/comments.html b/files/templates/comments.html
index aa19b2b9a..3feb22d82 100644
--- a/files/templates/comments.html
+++ b/files/templates/comments.html
@@ -877,7 +877,7 @@
lastCount = comments['{{p.id}}']
if (lastCount)
{
- {% for c in p.replies %}
+ {% for c in p.comments %}
{% if not (v and v.id==c.author_id) and not c.voted %}
if ({{c.created_utc*1000}} > lastCount.t)
try {document.getElementById("comment-{{c.id}}-only").classList.add('unread')}
@@ -908,7 +908,7 @@
lastCount = comments['{{p.id}}']
if (lastCount)
{
- {% for c in p.replies %}
+ {% for c in p.comments %}
{% if not (v and v.id==c.author_id) and not c.voted %}
if ({{c.created_utc*1000}} > lastCount.t)
try {document.getElementById("comment-{{c.id}}-only").classList.add('unread')}
diff --git a/files/templates/submission.html b/files/templates/submission.html
index 1d71353a4..7d4ebdef4 100644
--- a/files/templates/submission.html
+++ b/files/templates/submission.html
@@ -733,6 +733,10 @@
{% if p.private %}Draft{% endif %}
{% if p.active_flags(v) %}{{p.active_flags(v)}} Report{{ help.plural(p.active_flags(v)) }}{% endif %}
+ {% if not p.author %}
+ {{p.print()}}
+ {% endif %}
+
{% if p.ghost %}
👻
{% else %}
@@ -791,7 +795,7 @@
{% if p.realurl(v) %}
{% if not p.embed_url and not p.is_image and not p.is_video and not p.is_audio %}
-