forked from rDrama/rDrama
Sort banned, chudded, etc listings by activity.
The listings of users affected by jannied states are long. To make them more useful, sort by recent user activity (when v is allowed to view last_active) to know which accounts are still in use.master
parent
47923ffebe
commit
39a0832223
|
@ -1,6 +1,8 @@
|
||||||
import time
|
import time
|
||||||
from urllib.parse import quote, urlencode
|
from urllib.parse import quote, urlencode
|
||||||
|
|
||||||
|
from sqlalchemy import nullslast
|
||||||
|
|
||||||
from files.__main__ import app, cache, limiter
|
from files.__main__ import app, cache, limiter
|
||||||
from files.classes import *
|
from files.classes import *
|
||||||
from files.helpers.actions import *
|
from files.helpers.actions import *
|
||||||
|
@ -335,7 +337,9 @@ def revert_actions(v, username):
|
||||||
@app.get("/admin/shadowbanned")
|
@app.get("/admin/shadowbanned")
|
||||||
@admin_level_required(PERMS['USER_SHADOWBAN'])
|
@admin_level_required(PERMS['USER_SHADOWBAN'])
|
||||||
def shadowbanned(v):
|
def shadowbanned(v):
|
||||||
users = g.db.query(User).filter(User.shadowbanned != None).order_by(User.shadowbanned).all()
|
users = g.db.query(User) \
|
||||||
|
.filter(User.shadowbanned != None) \
|
||||||
|
.order_by(nullslast(User.last_active.desc())).all()
|
||||||
return render_template("admin/shadowbanned.html", v=v, users=users)
|
return render_template("admin/shadowbanned.html", v=v, users=users)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -353,16 +353,6 @@ def blocks(v):
|
||||||
|
|
||||||
return render_template("blocks.html", v=v, users=users, targets=targets)
|
return render_template("blocks.html", v=v, users=users, targets=targets)
|
||||||
|
|
||||||
@app.get("/banned")
|
|
||||||
@auth_required
|
|
||||||
def banned(v:User):
|
|
||||||
after_30_days = int(time.time()) + 86400 * 30
|
|
||||||
users = g.db.query(User).filter(User.is_banned > 0, or_(User.unban_utc == 0, User.unban_utc > after_30_days))
|
|
||||||
if not v.can_see_shadowbanned:
|
|
||||||
users = users.filter(User.shadowbanned == None)
|
|
||||||
users = users.all()
|
|
||||||
return render_template("banned.html", v=v, users=users)
|
|
||||||
|
|
||||||
@app.get("/formatting")
|
@app.get("/formatting")
|
||||||
@auth_required
|
@auth_required
|
||||||
def formatting(v:User):
|
def formatting(v:User):
|
||||||
|
|
|
@ -7,6 +7,7 @@ from typing import Literal
|
||||||
|
|
||||||
import gevent
|
import gevent
|
||||||
import qrcode
|
import qrcode
|
||||||
|
from sqlalchemy import nullslast
|
||||||
from sqlalchemy.orm import aliased
|
from sqlalchemy.orm import aliased
|
||||||
|
|
||||||
from files.classes import *
|
from files.classes import *
|
||||||
|
@ -167,6 +168,20 @@ def user_voted_posts(v:User, username):
|
||||||
def user_voted_comments(v:User, username):
|
def user_voted_comments(v:User, username):
|
||||||
return user_voted(v, username, Comment, CommentVote, "userpage/voted_comments.html", True)
|
return user_voted(v, username, Comment, CommentVote, "userpage/voted_comments.html", True)
|
||||||
|
|
||||||
|
@app.get("/banned")
|
||||||
|
@auth_required
|
||||||
|
def banned(v:User):
|
||||||
|
after_30_days = int(time.time()) + 86400 * 30
|
||||||
|
users = g.db.query(User).filter(
|
||||||
|
User.is_banned > 0,
|
||||||
|
or_(User.unban_utc == 0, User.unban_utc > after_30_days),
|
||||||
|
)
|
||||||
|
if v.admin_level >= PERMS['VIEW_LAST_ACTIVE']:
|
||||||
|
users = users.order_by(nullslast(User.last_active.desc()))
|
||||||
|
if not v.can_see_shadowbanned:
|
||||||
|
users = users.filter(User.shadowbanned == None)
|
||||||
|
users = users.all()
|
||||||
|
return render_template("banned.html", v=v, users=users)
|
||||||
|
|
||||||
@app.get("/grassed")
|
@app.get("/grassed")
|
||||||
@auth_required
|
@auth_required
|
||||||
|
@ -181,7 +196,11 @@ def grassed(v:User):
|
||||||
@auth_required
|
@auth_required
|
||||||
def chuds(v:User):
|
def chuds(v:User):
|
||||||
after_30_days = int(time.time()) + 86400 * 30
|
after_30_days = int(time.time()) + 86400 * 30
|
||||||
users = g.db.query(User).filter(or_(User.agendaposter == 1, User.agendaposter > after_30_days))
|
users = g.db.query(User).filter(
|
||||||
|
or_(User.agendaposter == 1, User.agendaposter > after_30_days),
|
||||||
|
)
|
||||||
|
if v.admin_level >= PERMS['VIEW_LAST_ACTIVE']:
|
||||||
|
users = users.order_by(nullslast(User.last_active.desc()))
|
||||||
if not v.can_see_shadowbanned:
|
if not v.can_see_shadowbanned:
|
||||||
users = users.filter(User.shadowbanned == None)
|
users = users.filter(User.shadowbanned == None)
|
||||||
users = users.order_by(User.username).all()
|
users = users.order_by(User.username).all()
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
|
<th>Last Active</th>
|
||||||
<th>Shadowbanned by</th>
|
<th>Shadowbanned by</th>
|
||||||
<th>Shadowban reason</th>
|
<th>Shadowban reason</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -16,6 +17,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{loop.index}}</td>
|
<td>{{loop.index}}</td>
|
||||||
<td>{% include "user_in_table.html" %}</td>
|
<td>{% include "user_in_table.html" %}</td>
|
||||||
|
<td data-time="{{user.last_active}}"></td>
|
||||||
<td>{{user.shadowbanned}}</td>
|
<td>{{user.shadowbanned}}</td>
|
||||||
<td>{{user.ban_reason}}</td>
|
<td>{{user.ban_reason}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
|
{% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%}
|
||||||
|
<th>Last Active</th>
|
||||||
|
{%- endif %}
|
||||||
<th>Ban reason</th>
|
<th>Ban reason</th>
|
||||||
<th>Banned by</th>
|
<th>Banned by</th>
|
||||||
<th>Unban in</th>
|
<th>Unban in</th>
|
||||||
|
@ -17,6 +20,9 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{loop.index}}</td>
|
<td>{{loop.index}}</td>
|
||||||
<td>{% include "user_in_table.html" %}</td>
|
<td>{% include "user_in_table.html" %}</td>
|
||||||
|
{% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%}
|
||||||
|
<td data-time="{{user.last_active}}"></td>
|
||||||
|
{%- endif %}
|
||||||
<td>{% if user.ban_reason %}{{user.ban_reason}}{% endif %}</td>
|
<td>{% if user.ban_reason %}{{user.ban_reason}}{% endif %}</td>
|
||||||
<td>
|
<td>
|
||||||
{% with user=user.banned_by %}
|
{% with user=user.banned_by %}
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
|
{% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%}
|
||||||
|
<th>Last Active</th>
|
||||||
|
{%- endif %}
|
||||||
<th>Unchud in</th>
|
<th>Unchud in</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -15,6 +18,9 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{loop.index}}</td>
|
<td>{{loop.index}}</td>
|
||||||
<td>{% include "user_in_table.html" %}</td>
|
<td>{% include "user_in_table.html" %}</td>
|
||||||
|
{% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%}
|
||||||
|
<td data-time="{{user.last_active}}"></td>
|
||||||
|
{%- endif %}
|
||||||
<td>{{user.unchud_in}}</td>
|
<td>{{user.unchud_in}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
Loading…
Reference in New Issue