master
Aevann1 2021-07-26 04:06:05 +02:00
parent e609e7574d
commit 65ddd59c93
9 changed files with 339 additions and 226 deletions

View File

@ -11,7 +11,7 @@ from .votes import *
from .images import *
from .domains import *
from .subscriptions import *
from .ips import *
from .agents import *
from .titles import *
from .lolwtf import *
from .mod_logs import *

View File

@ -50,7 +50,6 @@ class User(Base, Stndrd, Age_times):
newtab = Column(Boolean, default=False)
newtabexternal = Column(Boolean, default=True)
oldreddit = Column(Boolean, default=False)
creation_ip = Column(String)
submissions = relationship(
"Submission",
lazy="dynamic",
@ -65,7 +64,6 @@ class User(Base, Stndrd, Age_times):
bio = Column(String, default="")
bio_html = Column(String, default="")
badges = relationship("Badge", lazy="dynamic", backref="user")
real_id = Column(String)
notifications = relationship(
"Notification",
lazy="dynamic")
@ -78,48 +76,22 @@ class User(Base, Stndrd, Age_times):
is_banned = Column(Integer, default=None)
unban_utc = Column(Integer, default=None)
ban_reason = Column(String, default="")
feed_nonce = Column(Integer, default=0)
login_nonce = Column(Integer, default=0)
title_id = Column(Integer, ForeignKey("titles.id"))
title = relationship("Title", lazy="joined")
has_banner = Column(Boolean, default=False)
reserved = Column(String(256))
is_nsfw = Column(Boolean, default=False)
profile_nonce = 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)))
hide_offensive = Column(Boolean, default=False)
hide_bot = 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)
defaultsortingcomments = Column(String, default="top")
defaultsorting = Column(String, default="hot")
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)
custom_filter_list = Column(String(1000), default="")
discord_id = Column(String(64))
creation_region = Column(String(2))
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)))
name_changed_utc = deferred(Column(Integer, default=0))
subscriptions = relationship("Subscription")
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
referral_count = deferred(Column(Integer, server_default=FetchedValue()))
follower_count = deferred(Column(Integer, server_default=FetchedValue()))
def __init__(self, **kwargs):
@ -297,11 +268,6 @@ class User(Base, Stndrd, Age_times):
def verifyPass(self, 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
def formkey(self):
@ -491,8 +457,6 @@ class User(Base, Stndrd, Age_times):
def set_profile(self, file):
self.del_profile()
self.profile_nonce += 1
imageurl = upload_file(name=f"profile.gif", file=file, resize=(100, 100))
if imageurl:
self.profileurl = imageurl
@ -504,12 +468,9 @@ class User(Base, Stndrd, Age_times):
def set_banner(self, file):
self.del_banner()
self.banner_nonce += 1
imageurl = upload_file(name=f"banner.gif", file=file)
if imageurl:
self.bannerurl = imageurl
self.has_banner = True
self.banner_upload_ip = request.remote_addr
self.banner_set_utc = int(time.time())
self.banner_upload_region = request.headers.get("cf-ipcountry")
@ -522,16 +483,13 @@ class User(Base, Stndrd, Age_times):
def del_banner(self):
self.has_banner = False
self.bannerurl = None
g.db.add(self)
@property
def banner_url(self):
if self.has_banner:
if 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"
if self.bannerurl:
return self.bannerurl
else:
return "/assets/images/default_bg.png"
@ -617,7 +575,7 @@ class User(Base, Stndrd, Age_times):
self.unban_utc = ban_time
else:
if self.has_banner:
if self.bannerurl:
self.del_banner()
if self.profileurl:
self.del_profile()
@ -637,8 +595,8 @@ class User(Base, Stndrd, Age_times):
# Takes care of all functions needed for account reinstatement.
self.is_banned = None
self.unban_utc = None
self.is_banned = 0
self.unban_utc = 0
g.db.add(self)

View File

@ -56,10 +56,6 @@ def settings_profile_post(v):
updated = 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:
updated = True
v.is_private = request.values.get("private", None) == 'true'

View File

@ -49,7 +49,7 @@ def leaderboard(v):
def leaderboard():
users = g.db.query(User).options(lazyload('*'))
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
@app.get("/@<username>/css")
@ -446,7 +446,7 @@ def follow_user(username, v):
g.db.add(new_follow)
g.db.flush()
target.stored_subscriber_count=target.follower_count
target.stored_subscriber_count=target.stored_subscriber_count
g.db.add(target)
g.db.commit()

View File

@ -43,7 +43,7 @@
<tr>
<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 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>
{% endfor %}
</table>

View File

@ -158,7 +158,7 @@
<div>
{% if v.has_banner %}
{% if v.bannerurl %}
<form action="/settings/delete/banner" method="post">
<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>

View File

@ -23,10 +23,10 @@
<meta property="og:article:author" content="@{{u.username}}" />
<meta property="article:section" content="{{u.username}}'s profile - Drama" />
<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: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:site_name" content="rdrama.net" />
@ -34,8 +34,8 @@
<meta name="twitter:site" content="@drama">
<meta name="twitter:title" content="{{u.username}}'s profile - Drama" />
<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:image" content="{% if u.has_banner %}{{u.banner_url}}{% else %}{{'/assets/images/preview.png' | full_link}}{% endif %}" />
<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.bannerurl %}{{u.banner_url}}{% else %}{{'/assets/images/preview.png' | full_link}}{% endif %}" />
<meta name="twitter:url" content="{{u.permalink | full_link}}" />
{% endblock %}
@ -117,7 +117,7 @@
{% if u.customtitle %}<p class="font-weight-bolder" style="color: #{{u.titlecolor}}">{{u.customtitle | safe}}</p>{% endif %}
<div class="font-weight-bolder">
<span>{{u.dramacoins}}</span> Dramacoins&nbsp;&nbsp; {% 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>&nbsp;&nbsp; {% 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&nbsp;&nbsp; {% 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>&nbsp;&nbsp; {% endif %}joined <span data-toggle="tooltip" data-placement="bottom" title="" data-original-title="{{u.created_datetime}}">{{u.created_date}}</span>
</div>
{% if u.bio_html %}
<pre></pre>
@ -296,7 +296,7 @@
{% endif %}
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}">{{u.customtitle | safe}}</p>{% endif %}
<div class="font-weight-normal">
<span class="font-weight-bold">{{u.dramacoins}}</span> Dramacoins&nbsp;&nbsp;{% 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>&nbsp;&nbsp; {% 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&nbsp;&nbsp;{% 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>&nbsp;&nbsp; {% 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>
{% if u.bio_html %}
<p class="text-muted text-break">{{u.bio_html | safe}}</p>

View File

@ -355,7 +355,7 @@ DROP FUNCTION public.rank_activity(public.submissions);
DROP FUNCTION public.mod_count(public.users);
DROP FUNCTION public.is_deleted(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.comments);
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT CAST( EXTRACT( EPOCH FROM CURRENT_TIMESTAMP) AS int) - $1.created_utc
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT submissions.board_id
FROM submissions
WHERE submissions.id=$1.parent_submission
AS $_$
SELECT submissions.board_id
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT submissions.board_id
FROM submissions
WHERE submissions.id=$1.post_id
AS $_$
SELECT submissions.board_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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT COALESCE(
(
SELECT SUM(comments.score_top)
FROM comments
WHERE comments.author_id=$1.id
AND comments.is_banned=false
and comments.parent_submission is not null
),
0
)
AS $_$
SELECT COALESCE(
(
SELECT SUM(comments.score_top)
FROM comments
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
select created_utc from comments
where comments.id=$1.comment_id
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT COALESCE(
(
SELECT SUM(submissions.score_top)
FROM submissions
WHERE submissions.author_id=$1.id
AND submissions.is_banned=false
),
0
)
AS $_$
SELECT COALESCE(
(
SELECT SUM(submissions.score_top)
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT COUNT(*)
FROM commentflags
JOIN users ON commentflags.user_id=users.id
WHERE comment_id=$1.id
AND users.is_banned=0
AS $_$
SELECT COUNT(*)
FROM commentflags
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT COUNT(*)
FROM flags
JOIN users ON flags.user_id=users.id
WHERE post_id=$1.id
AND users.is_banned=0
AS $_$
SELECT COUNT(*)
FROM flags
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;
--
-- 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
AS $_$
select (
(select count(*)
from follows
left join users
on follows.user_id=users.id
where follows.target_id=$1.id
and (users.is_banned=0 or users.created_utc>0)
and users.is_deleted=false
)-(
select count(distinct f1.id)
from
(
select *
from follows
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
)
)
AS $_$
select (
(select count(*)
from follows
left join users
on follows.user_id=users.id
where follows.target_id=$1.id
and (users.is_banned=0 or users.created_utc>0)
and users.is_deleted=false
)-(
select count(distinct f1.id)
from
(
select *
from follows
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
@ -1048,9 +1134,12 @@ ALTER FUNCTION public.follower_count(public.users) OWNER TO postgres;
CREATE FUNCTION public.is_banned(public.notifications) RETURNS boolean
LANGUAGE sql IMMUTABLE STRICT
AS $_$
select is_banned from comments
where comments.id=$1.comment_id
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
select is_deleted from comments
where comments.id=$1.comment_id
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT 1000000.0*CAST($1.comment_count AS float)/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.35))
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
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))
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))
$_$;
@ -1113,8 +1209,10 @@ ALTER FUNCTION public.rank_best(public.submissions) OWNER TO postgres;
CREATE FUNCTION public.rank_fiery(public.comments) RETURNS double precision
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT SQRT(CAST(($1.upvotes * $1.downvotes) AS float))
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT 1000000.0*SQRT(CAST(($1.upvotes * $1.downvotes) AS float))/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.35))
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT CAST(($1.upvotes - $1.downvotes) AS float)/((CAST(($1.age+100000) AS FLOAT)/6.0)^(1.5))
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT 1000000.0*CAST(($1.upvotes - $1.downvotes) AS float)/((CAST(($1.age+5000) AS FLOAT)/100.0)^(1.5))
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT COUNT(*)
FROM USERS
WHERE users.is_banned=0
AND users.referred_by=$1.id
AS $_$
SELECT COUNT(*)
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT COUNT(*)
FROM reports
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
AS $_$
SELECT COUNT(*)
FROM reports
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT ($1.upvotes - $1.downvotes)
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT ($1.upvotes - $1.downvotes)
AS $_$
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
SELECT *
FROM images
WHERE state=$1
ORDER BY random()
LIMIT 1
AS $_$
SELECT *
FROM images
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
LANGUAGE sql IMMUTABLE STRICT
AS $_$
select (
(
SELECT count(*)
from (
select * from votes
where submission_id=$1.id
and vote_type=1
) as v1
join (select * from users where users.is_banned=0) as u0
on u0.id=v1.user_id
)-(
SELECT count(distinct v1.id)
from (
select * from votes
where submission_id=$1.id
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
))
AS $_$
select (
(
SELECT count(*)
from (
select * from votes
where submission_id=$1.id
and vote_type=1
) as v1
join (select * from users where users.is_banned=0) as u0
on u0.id=v1.user_id
)-(
SELECT count(distinct v1.id)
from (
select * from votes
where submission_id=$1.id
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
))
$_$;