forked from rDrama/rDrama
dffd
parent
e609e7574d
commit
65ddd59c93
|
@ -11,7 +11,7 @@ from .votes import *
|
||||||
from .images import *
|
from .images import *
|
||||||
from .domains import *
|
from .domains import *
|
||||||
from .subscriptions import *
|
from .subscriptions import *
|
||||||
from .ips import *
|
from .agents import *
|
||||||
from .titles import *
|
from .titles import *
|
||||||
from .lolwtf import *
|
from .lolwtf import *
|
||||||
from .mod_logs import *
|
from .mod_logs import *
|
|
@ -50,7 +50,6 @@ class User(Base, Stndrd, Age_times):
|
||||||
newtab = Column(Boolean, default=False)
|
newtab = Column(Boolean, default=False)
|
||||||
newtabexternal = Column(Boolean, default=True)
|
newtabexternal = Column(Boolean, default=True)
|
||||||
oldreddit = Column(Boolean, default=False)
|
oldreddit = Column(Boolean, default=False)
|
||||||
creation_ip = Column(String)
|
|
||||||
submissions = relationship(
|
submissions = relationship(
|
||||||
"Submission",
|
"Submission",
|
||||||
lazy="dynamic",
|
lazy="dynamic",
|
||||||
|
@ -65,7 +64,6 @@ class User(Base, Stndrd, Age_times):
|
||||||
bio = Column(String, default="")
|
bio = Column(String, default="")
|
||||||
bio_html = Column(String, default="")
|
bio_html = Column(String, default="")
|
||||||
badges = relationship("Badge", lazy="dynamic", backref="user")
|
badges = relationship("Badge", lazy="dynamic", backref="user")
|
||||||
real_id = Column(String)
|
|
||||||
notifications = relationship(
|
notifications = relationship(
|
||||||
"Notification",
|
"Notification",
|
||||||
lazy="dynamic")
|
lazy="dynamic")
|
||||||
|
@ -78,48 +76,22 @@ class User(Base, Stndrd, Age_times):
|
||||||
is_banned = Column(Integer, default=None)
|
is_banned = Column(Integer, default=None)
|
||||||
unban_utc = Column(Integer, default=None)
|
unban_utc = Column(Integer, default=None)
|
||||||
ban_reason = Column(String, default="")
|
ban_reason = Column(String, default="")
|
||||||
feed_nonce = Column(Integer, default=0)
|
|
||||||
login_nonce = Column(Integer, default=0)
|
login_nonce = Column(Integer, default=0)
|
||||||
title_id = Column(Integer, ForeignKey("titles.id"))
|
|
||||||
title = relationship("Title", lazy="joined")
|
title = relationship("Title", lazy="joined")
|
||||||
has_banner = Column(Boolean, default=False)
|
|
||||||
reserved = Column(String(256))
|
reserved = Column(String(256))
|
||||||
is_nsfw = Column(Boolean, default=False)
|
|
||||||
profile_nonce = Column(Integer, default=0)
|
|
||||||
dramacoins = Column(Integer, default=0)
|
dramacoins = Column(Integer, default=0)
|
||||||
banner_nonce = Column(Integer, default=0)
|
|
||||||
last_siege_utc = Column(Integer, default=0)
|
|
||||||
mfa_secret = deferred(Column(String(16)))
|
mfa_secret = deferred(Column(String(16)))
|
||||||
hide_offensive = Column(Boolean, default=False)
|
|
||||||
hide_bot = Column(Boolean, default=False)
|
|
||||||
is_private = Column(Boolean, default=False)
|
is_private = Column(Boolean, default=False)
|
||||||
read_announcement_utc = Column(Integer, default=0)
|
|
||||||
filter_nsfw = Column(Boolean, default=False)
|
|
||||||
stored_subscriber_count = Column(Integer, default=0)
|
stored_subscriber_count = Column(Integer, default=0)
|
||||||
defaultsortingcomments = Column(String, default="top")
|
defaultsortingcomments = Column(String, default="top")
|
||||||
defaultsorting = Column(String, default="hot")
|
defaultsorting = Column(String, default="hot")
|
||||||
defaulttime = Column(String, default="all")
|
defaulttime = Column(String, default="all")
|
||||||
coin_balance = Column(Integer, default=0)
|
|
||||||
premium_expires_utc = Column(Integer, default=0)
|
|
||||||
negative_balance_cents = Column(Integer, default=0)
|
|
||||||
|
|
||||||
is_nofollow = Column(Boolean, default=False)
|
is_nofollow = Column(Boolean, default=False)
|
||||||
custom_filter_list = Column(String(1000), default="")
|
custom_filter_list = Column(String(1000), default="")
|
||||||
discord_id = Column(String(64))
|
discord_id = Column(String(64))
|
||||||
creation_region = Column(String(2))
|
|
||||||
ban_evade = Column(Integer, default=0)
|
ban_evade = Column(Integer, default=0)
|
||||||
|
|
||||||
profile_upload_ip = deferred(Column(String(255)))
|
|
||||||
banner_upload_ip = deferred(Column(String(255)))
|
|
||||||
profile_upload_region = deferred(Column(String(2)))
|
|
||||||
banner_upload_region = deferred(Column(String(2)))
|
|
||||||
|
|
||||||
# stuff to support name changes
|
|
||||||
profile_set_utc = deferred(Column(Integer, default=0))
|
|
||||||
banner_set_utc = deferred(Column(Integer, default=0))
|
|
||||||
original_username = deferred(Column(String(255)))
|
original_username = deferred(Column(String(255)))
|
||||||
name_changed_utc = deferred(Column(Integer, default=0))
|
|
||||||
|
|
||||||
subscriptions = relationship("Subscription")
|
subscriptions = relationship("Subscription")
|
||||||
|
|
||||||
following = relationship("Follow", primaryjoin="Follow.user_id==User.id")
|
following = relationship("Follow", primaryjoin="Follow.user_id==User.id")
|
||||||
|
@ -140,7 +112,6 @@ class User(Base, Stndrd, Age_times):
|
||||||
|
|
||||||
# properties defined as SQL server-side functions
|
# properties defined as SQL server-side functions
|
||||||
referral_count = deferred(Column(Integer, server_default=FetchedValue()))
|
referral_count = deferred(Column(Integer, server_default=FetchedValue()))
|
||||||
follower_count = deferred(Column(Integer, server_default=FetchedValue()))
|
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
|
||||||
|
@ -297,11 +268,6 @@ class User(Base, Stndrd, Age_times):
|
||||||
def verifyPass(self, password):
|
def verifyPass(self, password):
|
||||||
return check_password_hash(self.passhash, password)
|
return check_password_hash(self.passhash, password)
|
||||||
|
|
||||||
@property
|
|
||||||
def feedkey(self):
|
|
||||||
|
|
||||||
return generate_hash(f"{self.username}{self.id}{self.feed_nonce}{self.created_utc}")
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def formkey(self):
|
def formkey(self):
|
||||||
|
|
||||||
|
@ -491,8 +457,6 @@ class User(Base, Stndrd, Age_times):
|
||||||
def set_profile(self, file):
|
def set_profile(self, file):
|
||||||
|
|
||||||
self.del_profile()
|
self.del_profile()
|
||||||
self.profile_nonce += 1
|
|
||||||
|
|
||||||
imageurl = upload_file(name=f"profile.gif", file=file, resize=(100, 100))
|
imageurl = upload_file(name=f"profile.gif", file=file, resize=(100, 100))
|
||||||
if imageurl:
|
if imageurl:
|
||||||
self.profileurl = imageurl
|
self.profileurl = imageurl
|
||||||
|
@ -504,12 +468,9 @@ class User(Base, Stndrd, Age_times):
|
||||||
def set_banner(self, file):
|
def set_banner(self, file):
|
||||||
|
|
||||||
self.del_banner()
|
self.del_banner()
|
||||||
self.banner_nonce += 1
|
|
||||||
|
|
||||||
imageurl = upload_file(name=f"banner.gif", file=file)
|
imageurl = upload_file(name=f"banner.gif", file=file)
|
||||||
if imageurl:
|
if imageurl:
|
||||||
self.bannerurl = imageurl
|
self.bannerurl = imageurl
|
||||||
self.has_banner = True
|
|
||||||
self.banner_upload_ip = request.remote_addr
|
self.banner_upload_ip = request.remote_addr
|
||||||
self.banner_set_utc = int(time.time())
|
self.banner_set_utc = int(time.time())
|
||||||
self.banner_upload_region = request.headers.get("cf-ipcountry")
|
self.banner_upload_region = request.headers.get("cf-ipcountry")
|
||||||
|
@ -522,16 +483,13 @@ class User(Base, Stndrd, Age_times):
|
||||||
|
|
||||||
def del_banner(self):
|
def del_banner(self):
|
||||||
|
|
||||||
self.has_banner = False
|
self.bannerurl = None
|
||||||
g.db.add(self)
|
g.db.add(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def banner_url(self):
|
def banner_url(self):
|
||||||
if self.has_banner:
|
if self.bannerurl:
|
||||||
if self.bannerurl:
|
return self.bannerurl
|
||||||
return self.bannerurl
|
|
||||||
else:
|
|
||||||
return f"https://s3.eu-central-1.amazonaws.com/i.drama.ga/uid/{self.base36id}/banner-{self.banner_nonce}.png"
|
|
||||||
else:
|
else:
|
||||||
return "/assets/images/default_bg.png"
|
return "/assets/images/default_bg.png"
|
||||||
|
|
||||||
|
@ -617,7 +575,7 @@ class User(Base, Stndrd, Age_times):
|
||||||
self.unban_utc = ban_time
|
self.unban_utc = ban_time
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if self.has_banner:
|
if self.bannerurl:
|
||||||
self.del_banner()
|
self.del_banner()
|
||||||
if self.profileurl:
|
if self.profileurl:
|
||||||
self.del_profile()
|
self.del_profile()
|
||||||
|
@ -637,8 +595,8 @@ class User(Base, Stndrd, Age_times):
|
||||||
|
|
||||||
# Takes care of all functions needed for account reinstatement.
|
# Takes care of all functions needed for account reinstatement.
|
||||||
|
|
||||||
self.is_banned = None
|
self.is_banned = 0
|
||||||
self.unban_utc = None
|
self.unban_utc = 0
|
||||||
|
|
||||||
g.db.add(self)
|
g.db.add(self)
|
||||||
|
|
||||||
|
|
|
@ -56,10 +56,6 @@ def settings_profile_post(v):
|
||||||
updated = True
|
updated = True
|
||||||
v.hide_bot = request.values.get("hide_bot", None) == 'true'
|
v.hide_bot = request.values.get("hide_bot", None) == 'true'
|
||||||
|
|
||||||
if request.values.get("filter_nsfw", v.filter_nsfw) != v.filter_nsfw:
|
|
||||||
updated = True
|
|
||||||
v.filter_nsfw = not request.values.get("filter_nsfw", None) == 'true'
|
|
||||||
|
|
||||||
if request.values.get("private", v.is_private) != v.is_private:
|
if request.values.get("private", v.is_private) != v.is_private:
|
||||||
updated = True
|
updated = True
|
||||||
v.is_private = request.values.get("private", None) == 'true'
|
v.is_private = request.values.get("private", None) == 'true'
|
||||||
|
|
|
@ -49,7 +49,7 @@ def leaderboard(v):
|
||||||
def leaderboard():
|
def leaderboard():
|
||||||
users = g.db.query(User).options(lazyload('*'))
|
users = g.db.query(User).options(lazyload('*'))
|
||||||
users1= sorted(users, key=lambda x: x.dramacoins, reverse=True)[:25]
|
users1= sorted(users, key=lambda x: x.dramacoins, reverse=True)[:25]
|
||||||
users2= sorted(users, key=lambda x: x.follower_count, reverse=True)[:10]
|
users2= sorted(users, key=lambda x: x.stored_subscriber_count, reverse=True)[:10]
|
||||||
return users1, users2
|
return users1, users2
|
||||||
|
|
||||||
@app.get("/@<username>/css")
|
@app.get("/@<username>/css")
|
||||||
|
@ -446,7 +446,7 @@ def follow_user(username, v):
|
||||||
|
|
||||||
g.db.add(new_follow)
|
g.db.add(new_follow)
|
||||||
g.db.flush()
|
g.db.flush()
|
||||||
target.stored_subscriber_count=target.follower_count
|
target.stored_subscriber_count=target.stored_subscriber_count
|
||||||
g.db.add(target)
|
g.db.add(target)
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td style="font-weight:bold;">{{users2.index(user)+1}}</td>
|
<td style="font-weight:bold;">{{users2.index(user)+1}}</td>
|
||||||
<td><a style="color:#{{user.namecolor}}; font-weight:bold;" href="/@{{user.username}}">{{user.username}}</a></td>
|
<td><a style="color:#{{user.namecolor}}; font-weight:bold;" href="/@{{user.username}}">{{user.username}}</a></td>
|
||||||
<td style="font-weight:bold; text-align:right;">{{user.follower_count}}</td>
|
<td style="font-weight:bold; text-align:right;">{{user.stored_subscriber_count}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -158,7 +158,7 @@
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
{% if v.has_banner %}
|
{% if v.bannerurl %}
|
||||||
<form action="/settings/delete/banner" method="post">
|
<form action="/settings/delete/banner" method="post">
|
||||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||||
<button type="submit" value="Delete" class="btn btn-link fa-lg"><i class="far fa-trash-alt text-danger"></i></button>
|
<button type="submit" value="Delete" class="btn btn-link fa-lg"><i class="far fa-trash-alt text-danger"></i></button>
|
||||||
|
|
|
@ -23,10 +23,10 @@
|
||||||
<meta property="og:article:author" content="@{{u.username}}" />
|
<meta property="og:article:author" content="@{{u.username}}" />
|
||||||
<meta property="article:section" content="{{u.username}}'s profile - Drama" />
|
<meta property="article:section" content="{{u.username}}'s profile - Drama" />
|
||||||
<meta property="article:published_time" content="{{u.created_date}}" />
|
<meta property="article:published_time" content="{{u.created_date}}" />
|
||||||
<meta property="og:description" name="description" content="{{u.dramacoins}} Dramacoins - Joined {{u.created_date}} - {% if u.follower_count >=1 and not u.is_private and not u.is_nofollow %}{{u.follower_count}} Followers - {% endif %}{% if not u.is_private %}{{u.post_count}} Posts - {{u.comment_count}} Comments - {% endif %}{{u.bio}}" />
|
<meta property="og:description" name="description" content="{{u.dramacoins}} Dramacoins - Joined {{u.created_date}} - {% if u.stored_subscriber_count >=1 and not u.is_private and not u.is_nofollow %}{{u.stored_subscriber_count}} Followers - {% endif %}{% if not u.is_private %}{{u.post_count}} Posts - {{u.comment_count}} Comments - {% endif %}{{u.bio}}" />
|
||||||
<meta property="og:author" name="author" content="@{{u.username}}" />
|
<meta property="og:author" name="author" content="@{{u.username}}" />
|
||||||
<meta property="og:title" content="{{u.username}}" />
|
<meta property="og:title" content="{{u.username}}" />
|
||||||
<meta property="og:image" content="{% if u.has_banner %}{{u.banner_url}}{% else %}{{'/assets/images/preview.png' | full_link}}{% endif %}" />
|
<meta property="og:image" content="{% if u.bannerurl %}{{u.banner_url}}{% else %}{{'/assets/images/preview.png' | full_link}}{% endif %}" />
|
||||||
<meta property="og:url" content="{{u.permalink | full_link}}" />
|
<meta property="og:url" content="{{u.permalink | full_link}}" />
|
||||||
<meta property="og:site_name" content="rdrama.net" />
|
<meta property="og:site_name" content="rdrama.net" />
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@
|
||||||
<meta name="twitter:site" content="@drama">
|
<meta name="twitter:site" content="@drama">
|
||||||
<meta name="twitter:title" content="{{u.username}}'s profile - Drama" />
|
<meta name="twitter:title" content="{{u.username}}'s profile - Drama" />
|
||||||
<meta name="twitter:creator" content="@{{u.username}}">
|
<meta name="twitter:creator" content="@{{u.username}}">
|
||||||
<meta name="twitter:description" content="{{u.dramacoins}} Dramacoins - Joined {{u.created_date}} - {% if u.follower_count >=1 and not u.is_private and not u.is_nofollow %}{{u.follower_count}} Followers -{% endif %} {% if not u.is_private %} {{u.post_count}} Posts - {{u.comment_count}} Comments -{% endif %} {{u.bio}}" />
|
<meta name="twitter:description" content="{{u.dramacoins}} Dramacoins - Joined {{u.created_date}} - {% if u.stored_subscriber_count >=1 and not u.is_private and not u.is_nofollow %}{{u.stored_subscriber_count}} Followers -{% endif %} {% if not u.is_private %} {{u.post_count}} Posts - {{u.comment_count}} Comments -{% endif %} {{u.bio}}" />
|
||||||
<meta name="twitter:image" content="{% if u.has_banner %}{{u.banner_url}}{% else %}{{'/assets/images/preview.png' | full_link}}{% endif %}" />
|
<meta name="twitter:image" content="{% if u.bannerurl %}{{u.banner_url}}{% else %}{{'/assets/images/preview.png' | full_link}}{% endif %}" />
|
||||||
<meta name="twitter:url" content="{{u.permalink | full_link}}" />
|
<meta name="twitter:url" content="{{u.permalink | full_link}}" />
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
{% if u.customtitle %}<p class="font-weight-bolder" style="color: #{{u.titlecolor}}">{{u.customtitle | safe}}</p>{% endif %}
|
{% if u.customtitle %}<p class="font-weight-bolder" style="color: #{{u.titlecolor}}">{{u.customtitle | safe}}</p>{% endif %}
|
||||||
|
|
||||||
<div class="font-weight-bolder">
|
<div class="font-weight-bolder">
|
||||||
<span>{{u.dramacoins}}</span> Dramacoins {% if u.follower_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers">{{u.follower_count}} follower{{'s' if u.follower_count != 1 else ''}}</a> {% endif %}joined <span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="{{u.created_datetime}}">{{u.created_date}}</span>
|
<span>{{u.dramacoins}}</span> Dramacoins {% if u.stored_subscriber_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a> {% endif %}joined <span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="{{u.created_datetime}}">{{u.created_date}}</span>
|
||||||
</div>
|
</div>
|
||||||
{% if u.bio_html %}
|
{% if u.bio_html %}
|
||||||
<pre></pre>
|
<pre></pre>
|
||||||
|
@ -296,7 +296,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}">{{u.customtitle | safe}}</p>{% endif %}
|
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}">{{u.customtitle | safe}}</p>{% endif %}
|
||||||
<div class="font-weight-normal">
|
<div class="font-weight-normal">
|
||||||
<span class="font-weight-bold">{{u.dramacoins}}</span> Dramacoins {% if u.follower_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers" class="font-weight-bold">{{u.follower_count}} follower{{'s' if u.follower_count != 1 else ''}}</a> {% endif %}<br>joined <span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="{{u.created_datetime}}" class="font-weight-bold">{{u.created_date}}</span>
|
<span class="font-weight-bold">{{u.dramacoins}}</span> Dramacoins {% if u.stored_subscriber_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers" class="font-weight-bold">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a> {% endif %}<br>joined <span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="{{u.created_datetime}}" class="font-weight-bold">{{u.created_date}}</span>
|
||||||
</div>
|
</div>
|
||||||
{% if u.bio_html %}
|
{% if u.bio_html %}
|
||||||
<p class="text-muted text-break">{{u.bio_html | safe}}</p>
|
<p class="text-muted text-break">{{u.bio_html | safe}}</p>
|
||||||
|
|
485
schema.sql
485
schema.sql
|
@ -355,7 +355,7 @@ DROP FUNCTION public.rank_activity(public.submissions);
|
||||||
DROP FUNCTION public.mod_count(public.users);
|
DROP FUNCTION public.mod_count(public.users);
|
||||||
DROP FUNCTION public.is_deleted(public.notifications);
|
DROP FUNCTION public.is_deleted(public.notifications);
|
||||||
DROP FUNCTION public.is_banned(public.notifications);
|
DROP FUNCTION public.is_banned(public.notifications);
|
||||||
DROP FUNCTION public.follower_count(public.users);
|
DROP FUNCTION public.stored_subscriber_count(public.users);
|
||||||
DROP FUNCTION public.flag_count(public.submissions);
|
DROP FUNCTION public.flag_count(public.submissions);
|
||||||
DROP FUNCTION public.flag_count(public.comments);
|
DROP FUNCTION public.flag_count(public.comments);
|
||||||
DROP FUNCTION public.energy(public.users);
|
DROP FUNCTION public.energy(public.users);
|
||||||
|
@ -474,8 +474,10 @@ ALTER TABLE public.comments OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.age(public.comments) RETURNS integer
|
CREATE FUNCTION public.age(public.comments) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
|
|
||||||
|
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -537,8 +539,10 @@ ALTER TABLE public.submissions OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.age(public.submissions) RETURNS integer
|
CREATE FUNCTION public.age(public.submissions) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
|
|
||||||
|
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -650,8 +654,10 @@ ALTER TABLE public.users OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.age(public.users) RETURNS integer
|
CREATE FUNCTION public.age(public.users) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
|
|
||||||
|
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -663,10 +669,14 @@ ALTER FUNCTION public.age(public.users) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.board_id(public.comments) RETURNS integer
|
CREATE FUNCTION public.board_id(public.comments) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT submissions.board_id
|
|
||||||
FROM submissions
|
SELECT submissions.board_id
|
||||||
WHERE submissions.id=$1.parent_submission
|
|
||||||
|
FROM submissions
|
||||||
|
|
||||||
|
WHERE submissions.id=$1.parent_submission
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -692,10 +702,14 @@ ALTER TABLE public.reports OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.board_id(public.reports) RETURNS integer
|
CREATE FUNCTION public.board_id(public.reports) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT submissions.board_id
|
|
||||||
FROM submissions
|
SELECT submissions.board_id
|
||||||
WHERE submissions.id=$1.post_id
|
|
||||||
|
FROM submissions
|
||||||
|
|
||||||
|
WHERE submissions.id=$1.post_id
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -732,17 +746,28 @@ ALTER FUNCTION public.comment_count(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.comment_energy(public.users) RETURNS bigint
|
CREATE FUNCTION public.comment_energy(public.users) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT COALESCE(
|
|
||||||
(
|
SELECT COALESCE(
|
||||||
SELECT SUM(comments.score_top)
|
|
||||||
FROM comments
|
(
|
||||||
WHERE comments.author_id=$1.id
|
|
||||||
AND comments.is_banned=false
|
SELECT SUM(comments.score_top)
|
||||||
and comments.parent_submission is not null
|
|
||||||
),
|
FROM comments
|
||||||
0
|
|
||||||
)
|
WHERE comments.author_id=$1.id
|
||||||
|
|
||||||
|
AND comments.is_banned=false
|
||||||
|
|
||||||
|
and comments.parent_submission is not null
|
||||||
|
|
||||||
|
),
|
||||||
|
|
||||||
|
0
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -772,9 +797,12 @@ ALTER TABLE public.notifications OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.created_utc(public.notifications) RETURNS integer
|
CREATE FUNCTION public.created_utc(public.notifications) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
select created_utc from comments
|
|
||||||
where comments.id=$1.comment_id
|
select created_utc from comments
|
||||||
|
|
||||||
|
where comments.id=$1.comment_id
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -946,16 +974,26 @@ ALTER FUNCTION public.downs(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.energy(public.users) RETURNS bigint
|
CREATE FUNCTION public.energy(public.users) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT COALESCE(
|
|
||||||
(
|
SELECT COALESCE(
|
||||||
SELECT SUM(submissions.score_top)
|
|
||||||
FROM submissions
|
(
|
||||||
WHERE submissions.author_id=$1.id
|
|
||||||
AND submissions.is_banned=false
|
SELECT SUM(submissions.score_top)
|
||||||
),
|
|
||||||
0
|
FROM submissions
|
||||||
)
|
|
||||||
|
WHERE submissions.author_id=$1.id
|
||||||
|
|
||||||
|
AND submissions.is_banned=false
|
||||||
|
|
||||||
|
),
|
||||||
|
|
||||||
|
0
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -967,12 +1005,18 @@ ALTER FUNCTION public.energy(public.users) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.flag_count(public.comments) RETURNS bigint
|
CREATE FUNCTION public.flag_count(public.comments) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT COUNT(*)
|
|
||||||
FROM commentflags
|
SELECT COUNT(*)
|
||||||
JOIN users ON commentflags.user_id=users.id
|
|
||||||
WHERE comment_id=$1.id
|
FROM commentflags
|
||||||
AND users.is_banned=0
|
|
||||||
|
JOIN users ON commentflags.user_id=users.id
|
||||||
|
|
||||||
|
WHERE comment_id=$1.id
|
||||||
|
|
||||||
|
AND users.is_banned=0
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -984,63 +1028,105 @@ ALTER FUNCTION public.flag_count(public.comments) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.flag_count(public.submissions) RETURNS bigint
|
CREATE FUNCTION public.flag_count(public.submissions) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT COUNT(*)
|
|
||||||
FROM flags
|
SELECT COUNT(*)
|
||||||
JOIN users ON flags.user_id=users.id
|
|
||||||
WHERE post_id=$1.id
|
FROM flags
|
||||||
AND users.is_banned=0
|
|
||||||
|
JOIN users ON flags.user_id=users.id
|
||||||
|
|
||||||
|
WHERE post_id=$1.id
|
||||||
|
|
||||||
|
AND users.is_banned=0
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
ALTER FUNCTION public.flag_count(public.submissions) OWNER TO postgres;
|
ALTER FUNCTION public.flag_count(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: follower_count(public.users); Type: FUNCTION; Schema: public; Owner: postgres
|
-- Name: stored_subscriber_count(public.users); Type: FUNCTION; Schema: public; Owner: postgres
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE FUNCTION public.follower_count(public.users) RETURNS bigint
|
CREATE FUNCTION public.stored_subscriber_count(public.users) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
select (
|
|
||||||
(select count(*)
|
select (
|
||||||
from follows
|
|
||||||
left join users
|
(select count(*)
|
||||||
on follows.user_id=users.id
|
|
||||||
where follows.target_id=$1.id
|
from follows
|
||||||
and (users.is_banned=0 or users.created_utc>0)
|
|
||||||
and users.is_deleted=false
|
left join users
|
||||||
)-(
|
|
||||||
select count(distinct f1.id)
|
on follows.user_id=users.id
|
||||||
from
|
|
||||||
(
|
where follows.target_id=$1.id
|
||||||
select *
|
|
||||||
from follows
|
and (users.is_banned=0 or users.created_utc>0)
|
||||||
where target_id=$1.id
|
|
||||||
) as f1
|
and users.is_deleted=false
|
||||||
join (select * from users where is_banned=0 or unban_utc>0) as u1
|
|
||||||
on u1.id=f1.user_id
|
)-(
|
||||||
join (select * from alts) as a
|
|
||||||
on (a.user1=f1.user_id or a.user2=f1.user_id)
|
select count(distinct f1.id)
|
||||||
join (
|
|
||||||
select *
|
from
|
||||||
from follows
|
|
||||||
where target_id=$1.id
|
(
|
||||||
) as f2
|
|
||||||
on ((a.user1=f2.user_id or a.user2=f2.user_id) and f2.id != f1.id)
|
select *
|
||||||
join (select * from users where is_banned=0 or unban_utc>0) as u2
|
|
||||||
on u2.id=f2.user_id
|
from follows
|
||||||
where f1.id is not null
|
|
||||||
and f2.id is not null
|
where target_id=$1.id
|
||||||
)
|
|
||||||
|
) as f1
|
||||||
|
|
||||||
|
join (select * from users where is_banned=0 or unban_utc>0) as u1
|
||||||
)
|
|
||||||
|
on u1.id=f1.user_id
|
||||||
|
|
||||||
|
join (select * from alts) as a
|
||||||
|
|
||||||
|
on (a.user1=f1.user_id or a.user2=f1.user_id)
|
||||||
|
|
||||||
|
join (
|
||||||
|
|
||||||
|
select *
|
||||||
|
|
||||||
|
from follows
|
||||||
|
|
||||||
|
where target_id=$1.id
|
||||||
|
|
||||||
|
) as f2
|
||||||
|
|
||||||
|
on ((a.user1=f2.user_id or a.user2=f2.user_id) and f2.id != f1.id)
|
||||||
|
|
||||||
|
join (select * from users where is_banned=0 or unban_utc>0) as u2
|
||||||
|
|
||||||
|
on u2.id=f2.user_id
|
||||||
|
|
||||||
|
where f1.id is not null
|
||||||
|
|
||||||
|
and f2.id is not null
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
ALTER FUNCTION public.follower_count(public.users) OWNER TO postgres;
|
ALTER FUNCTION public.stored_subscriber_count(public.users) OWNER TO postgres;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: is_banned(public.notifications); Type: FUNCTION; Schema: public; Owner: postgres
|
-- Name: is_banned(public.notifications); Type: FUNCTION; Schema: public; Owner: postgres
|
||||||
|
@ -1048,9 +1134,12 @@ ALTER FUNCTION public.follower_count(public.users) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.is_banned(public.notifications) RETURNS boolean
|
CREATE FUNCTION public.is_banned(public.notifications) RETURNS boolean
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
select is_banned from comments
|
|
||||||
where comments.id=$1.comment_id
|
select is_banned from comments
|
||||||
|
|
||||||
|
where comments.id=$1.comment_id
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1062,9 +1151,12 @@ ALTER FUNCTION public.is_banned(public.notifications) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.is_deleted(public.notifications) RETURNS boolean
|
CREATE FUNCTION public.is_deleted(public.notifications) RETURNS boolean
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
select is_deleted from comments
|
|
||||||
where comments.id=$1.comment_id
|
select is_deleted from comments
|
||||||
|
|
||||||
|
where comments.id=$1.comment_id
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1087,8 +1179,10 @@ ALTER FUNCTION public.mod_count(public.users) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.rank_activity(public.submissions) RETURNS double precision
|
CREATE FUNCTION public.rank_activity(public.submissions) RETURNS double precision
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT 1000000.0*CAST($1.comment_count AS float)/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.35))
|
|
||||||
|
SELECT 1000000.0*CAST($1.comment_count AS float)/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.35))
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1100,8 +1194,10 @@ ALTER FUNCTION public.rank_activity(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.rank_best(public.submissions) RETURNS double precision
|
CREATE FUNCTION public.rank_best(public.submissions) RETURNS double precision
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT 10000000.0*CAST(($1.upvotes - $1.downvotes + 1) AS float)/((CAST(($1.age+3600) AS FLOAT)*cast((select boards.subscriber_count from boards where boards.id=$1.board_id)+10000 as float)/1000.0)^(1.35))
|
|
||||||
|
SELECT 10000000.0*CAST(($1.upvotes - $1.downvotes + 1) AS float)/((CAST(($1.age+3600) AS FLOAT)*cast((select boards.subscriber_count from boards where boards.id=$1.board_id)+10000 as float)/1000.0)^(1.35))
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1113,8 +1209,10 @@ ALTER FUNCTION public.rank_best(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.rank_fiery(public.comments) RETURNS double precision
|
CREATE FUNCTION public.rank_fiery(public.comments) RETURNS double precision
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT SQRT(CAST(($1.upvotes * $1.downvotes) AS float))
|
|
||||||
|
SELECT SQRT(CAST(($1.upvotes * $1.downvotes) AS float))
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1126,8 +1224,10 @@ ALTER FUNCTION public.rank_fiery(public.comments) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.rank_fiery(public.submissions) RETURNS double precision
|
CREATE FUNCTION public.rank_fiery(public.submissions) RETURNS double precision
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT 1000000.0*SQRT(CAST(($1.upvotes * $1.downvotes) AS float))/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.35))
|
|
||||||
|
SELECT 1000000.0*SQRT(CAST(($1.upvotes * $1.downvotes) AS float))/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.35))
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1139,8 +1239,10 @@ ALTER FUNCTION public.rank_fiery(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.rank_hot(public.comments) RETURNS double precision
|
CREATE FUNCTION public.rank_hot(public.comments) RETURNS double precision
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT CAST(($1.upvotes - $1.downvotes) AS float)/((CAST(($1.age+100000) AS FLOAT)/6.0)^(1.5))
|
|
||||||
|
SELECT CAST(($1.upvotes - $1.downvotes) AS float)/((CAST(($1.age+100000) AS FLOAT)/6.0)^(1.5))
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1152,8 +1254,10 @@ ALTER FUNCTION public.rank_hot(public.comments) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.rank_hot(public.submissions) RETURNS double precision
|
CREATE FUNCTION public.rank_hot(public.submissions) RETURNS double precision
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT 1000000.0*CAST(($1.upvotes - $1.downvotes) AS float)/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.5))
|
|
||||||
|
SELECT 1000000.0*CAST(($1.upvotes - $1.downvotes) AS float)/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.5))
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1165,11 +1269,16 @@ ALTER FUNCTION public.rank_hot(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.referral_count(public.users) RETURNS bigint
|
CREATE FUNCTION public.referral_count(public.users) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT COUNT(*)
|
|
||||||
FROM USERS
|
SELECT COUNT(*)
|
||||||
WHERE users.is_banned=0
|
|
||||||
AND users.referred_by=$1.id
|
FROM USERS
|
||||||
|
|
||||||
|
WHERE users.is_banned=0
|
||||||
|
|
||||||
|
AND users.referred_by=$1.id
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1181,13 +1290,20 @@ ALTER FUNCTION public.referral_count(public.users) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.report_count(public.submissions) RETURNS bigint
|
CREATE FUNCTION public.report_count(public.submissions) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT COUNT(*)
|
|
||||||
FROM reports
|
SELECT COUNT(*)
|
||||||
JOIN users ON reports.user_id=users.id
|
|
||||||
WHERE post_id=$1.id
|
FROM reports
|
||||||
AND users.is_banned=0
|
|
||||||
and reports.created_utc >= $1.edited_utc
|
JOIN users ON reports.user_id=users.id
|
||||||
|
|
||||||
|
WHERE post_id=$1.id
|
||||||
|
|
||||||
|
AND users.is_banned=0
|
||||||
|
|
||||||
|
and reports.created_utc >= $1.edited_utc
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1199,8 +1315,10 @@ ALTER FUNCTION public.report_count(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.score(public.comments) RETURNS integer
|
CREATE FUNCTION public.score(public.comments) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT ($1.upvotes - $1.downvotes)
|
|
||||||
|
SELECT ($1.upvotes - $1.downvotes)
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1212,8 +1330,10 @@ ALTER FUNCTION public.score(public.comments) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.score(public.submissions) RETURNS integer
|
CREATE FUNCTION public.score(public.submissions) RETURNS integer
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT ($1.upvotes - $1.downvotes)
|
|
||||||
|
SELECT ($1.upvotes - $1.downvotes)
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1251,12 +1371,18 @@ ALTER TABLE public.images OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.splash(text) RETURNS SETOF public.images
|
CREATE FUNCTION public.splash(text) RETURNS SETOF public.images
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
SELECT *
|
|
||||||
FROM images
|
SELECT *
|
||||||
WHERE state=$1
|
|
||||||
ORDER BY random()
|
FROM images
|
||||||
LIMIT 1
|
|
||||||
|
WHERE state=$1
|
||||||
|
|
||||||
|
ORDER BY random()
|
||||||
|
|
||||||
|
LIMIT 1
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1422,39 +1548,72 @@ ALTER FUNCTION public.ups(public.submissions) OWNER TO postgres;
|
||||||
|
|
||||||
CREATE FUNCTION public.ups_test(public.submissions) RETURNS bigint
|
CREATE FUNCTION public.ups_test(public.submissions) RETURNS bigint
|
||||||
LANGUAGE sql IMMUTABLE STRICT
|
LANGUAGE sql IMMUTABLE STRICT
|
||||||
AS $_$
|
AS $_$
|
||||||
select (
|
|
||||||
(
|
select (
|
||||||
SELECT count(*)
|
|
||||||
from (
|
(
|
||||||
select * from votes
|
|
||||||
where submission_id=$1.id
|
SELECT count(*)
|
||||||
and vote_type=1
|
|
||||||
) as v1
|
from (
|
||||||
join (select * from users where users.is_banned=0) as u0
|
|
||||||
on u0.id=v1.user_id
|
select * from votes
|
||||||
)-(
|
|
||||||
SELECT count(distinct v1.id)
|
where submission_id=$1.id
|
||||||
from (
|
|
||||||
select * from votes
|
and vote_type=1
|
||||||
where submission_id=$1.id
|
|
||||||
and vote_type=1
|
) as v1
|
||||||
) as v1
|
|
||||||
join (select * from users where is_banned=0) as u1
|
join (select * from users where users.is_banned=0) as u0
|
||||||
on u1.id=v1.user_id
|
|
||||||
join (select * from alts) as a
|
on u0.id=v1.user_id
|
||||||
on (a.user1=v1.user_id or a.user2=v1.user_id)
|
|
||||||
join (
|
)-(
|
||||||
select * from votes
|
|
||||||
where submission_id=$1.id
|
SELECT count(distinct v1.id)
|
||||||
and vote_type=1
|
|
||||||
) as v2
|
from (
|
||||||
on ((a.user1=v2.id or a.user2=v2.id) and v2.id != v1.id)
|
|
||||||
join (select * from users where is_banned=0) as u2
|
select * from votes
|
||||||
on u2.id=v2.user_id
|
|
||||||
where v1.id is not null
|
where submission_id=$1.id
|
||||||
and v2.id is not null
|
|
||||||
))
|
and vote_type=1
|
||||||
|
|
||||||
|
) as v1
|
||||||
|
|
||||||
|
join (select * from users where is_banned=0) as u1
|
||||||
|
|
||||||
|
on u1.id=v1.user_id
|
||||||
|
|
||||||
|
join (select * from alts) as a
|
||||||
|
|
||||||
|
on (a.user1=v1.user_id or a.user2=v1.user_id)
|
||||||
|
|
||||||
|
join (
|
||||||
|
|
||||||
|
select * from votes
|
||||||
|
|
||||||
|
where submission_id=$1.id
|
||||||
|
|
||||||
|
and vote_type=1
|
||||||
|
|
||||||
|
) as v2
|
||||||
|
|
||||||
|
on ((a.user1=v2.id or a.user2=v2.id) and v2.id != v1.id)
|
||||||
|
|
||||||
|
join (select * from users where is_banned=0) as u2
|
||||||
|
|
||||||
|
on u2.id=v2.user_id
|
||||||
|
|
||||||
|
where v1.id is not null
|
||||||
|
|
||||||
|
and v2.id is not null
|
||||||
|
|
||||||
|
))
|
||||||
|
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue