forked from rDrama/rDrama
fix bug with drafts + dont give effortpost notifs to jannies if post doesnt meet requirements
parent
dfdaef6b26
commit
2b46f5c819
|
@ -2,6 +2,7 @@ import random
|
||||||
import time
|
import time
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
from flask import g
|
from flask import g
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from sqlalchemy import Column, FetchedValue, ForeignKey
|
from sqlalchemy import Column, FetchedValue, ForeignKey
|
||||||
from sqlalchemy.orm import deferred, relationship
|
from sqlalchemy.orm import deferred, relationship
|
||||||
|
@ -432,3 +433,27 @@ class Post(Base):
|
||||||
return v.admin_level >= PERMS['POST_COMMENT_MODERATION']
|
return v.admin_level >= PERMS['POST_COMMENT_MODERATION']
|
||||||
else:
|
else:
|
||||||
return v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or (v.mods_hole(self.hole)) or self.author_id == v.id
|
return v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or (v.mods_hole(self.hole)) or self.author_id == v.id
|
||||||
|
|
||||||
|
@property
|
||||||
|
@lazy
|
||||||
|
def can_be_effortpost(self):
|
||||||
|
if SITE_NAME == 'WPD':
|
||||||
|
min_chars = 2000
|
||||||
|
min_lines = 10
|
||||||
|
else:
|
||||||
|
min_chars = 3000
|
||||||
|
min_lines = 20
|
||||||
|
|
||||||
|
if self.body_html.count('<p>') < min_lines:
|
||||||
|
return False
|
||||||
|
|
||||||
|
soup = BeautifulSoup(self.body_html, 'lxml')
|
||||||
|
tags = soup.html.body.find_all(lambda tag: tag.name in {'p','ul','table'} and tag.text, recursive=False)
|
||||||
|
post_char_count = 0
|
||||||
|
for tag in tags:
|
||||||
|
post_char_count += len(tag.text)
|
||||||
|
|
||||||
|
if post_char_count < min_chars:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
|
@ -2043,25 +2043,9 @@ def mark_effortpost(pid, v):
|
||||||
if p.effortpost:
|
if p.effortpost:
|
||||||
abort(400, "Post is already marked as an effortpost!")
|
abort(400, "Post is already marked as an effortpost!")
|
||||||
|
|
||||||
if SITE_NAME == 'WPD':
|
if not p.can_be_effortpost:
|
||||||
min_chars = 2000
|
|
||||||
min_lines = 10
|
|
||||||
else:
|
|
||||||
min_chars = 3000
|
|
||||||
min_lines = 20
|
|
||||||
|
|
||||||
if p.body_html.count('<p>') < min_lines:
|
|
||||||
abort(403, "Post is too short!")
|
abort(403, "Post is too short!")
|
||||||
|
|
||||||
soup = BeautifulSoup(p.body_html, 'lxml')
|
|
||||||
tags = soup.html.body.find_all(lambda tag: tag.name in {'p','ul','table'} and tag.text, recursive=False)
|
|
||||||
post_char_count = 0
|
|
||||||
for tag in tags:
|
|
||||||
post_char_count += len(tag.text)
|
|
||||||
|
|
||||||
if post_char_count < min_chars:
|
|
||||||
abort(403, "Post is too short.")
|
|
||||||
|
|
||||||
p.effortpost = True
|
p.effortpost = True
|
||||||
g.db.add(p)
|
g.db.add(p)
|
||||||
|
|
||||||
|
|
|
@ -92,9 +92,11 @@ def publish(pid, v):
|
||||||
|
|
||||||
execute_snappy(p, v)
|
execute_snappy(p, v)
|
||||||
|
|
||||||
if p.effortpost and not (SITE_NAME == 'WPD' and v.truescore < 500):
|
if p.effortpost and not (SITE_NAME == 'WPD' and v.truescore < 500) and p.can_be_effortpost:
|
||||||
body = f"@{v.username} has requested that {p.textlink} be marked as an effortpost!"
|
body = f"@{v.username} has requested that {p.textlink} be marked as an effortpost!"
|
||||||
alert_admins(body)
|
alert_admins(body)
|
||||||
|
|
||||||
|
p.effortpost = False
|
||||||
|
|
||||||
return {"message": "Post has been published successfully!"}
|
return {"message": "Post has been published successfully!"}
|
||||||
|
|
||||||
|
@ -736,10 +738,13 @@ def submit_post(v, hole=None):
|
||||||
generate_thumb = (not p.thumburl and p.url and p.domain != SITE)
|
generate_thumb = (not p.thumburl and p.url and p.domain != SITE)
|
||||||
gevent.spawn(postprocess_post, p.url, p.body, p.body_html, p.id, generate_thumb, False)
|
gevent.spawn(postprocess_post, p.url, p.body, p.body_html, p.id, generate_thumb, False)
|
||||||
|
|
||||||
if not p.draft and flag_effortpost and not (SITE_NAME == 'WPD' and v.truescore < 500):
|
if not p.draft and flag_effortpost and not (SITE_NAME == 'WPD' and v.truescore < 500) and p.can_be_effortpost:
|
||||||
body = f"@{v.username} has requested that {p.textlink} be marked as an effortpost!"
|
body = f"@{v.username} has requested that {p.textlink} be marked as an effortpost!"
|
||||||
alert_admins(body)
|
alert_admins(body)
|
||||||
|
|
||||||
|
if p.draft and flag_effortpost and not (SITE_NAME == 'WPD' and v.truescore < 500):
|
||||||
|
p.effortpost = True
|
||||||
|
|
||||||
if v.client: return p.json
|
if v.client: return p.json
|
||||||
else:
|
else:
|
||||||
p.voted = 1
|
p.voted = 1
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
<span class="post-flair bg-danger font-weight-bolder mr-1">CHILD WARNING</span>
|
<span class="post-flair bg-danger font-weight-bolder mr-1">CHILD WARNING</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if p.effortpost %}
|
{% if p.effortpost and not p.draft %}
|
||||||
<a href="/?effortposts_only=True" class="post-flair effortpost-flair font-weight-bolder mr-1">EFFORTPOST</a>
|
<a href="/?effortposts_only=True" class="post-flair effortpost-flair font-weight-bolder mr-1">EFFORTPOST</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
<span class="post-flair bg-danger font-weight-bolder mr-1">CHILD WARNING</span>
|
<span class="post-flair bg-danger font-weight-bolder mr-1">CHILD WARNING</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if p.effortpost %}
|
{% if p.effortpost and not p.draft %}
|
||||||
<a href="/?effortposts_only=True" class="post-flair effortpost-flair font-weight-bolder mr-1">EFFORTPOST</a>
|
<a href="/?effortposts_only=True" class="post-flair effortpost-flair font-weight-bolder mr-1">EFFORTPOST</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue