aboutsummaryrefslogtreecommitdiff
path: root/app/views/admin/todo.py
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2019-01-08 17:37:33 +0000
committerrubenwardy <rw@rubenwardy.com>2019-01-08 17:37:33 +0000
commit9639cf04f1b54865884850d608f08b5df4afe169 (patch)
tree871a03bc37826a760f44e60c50b68fac880c4eee /app/views/admin/todo.py
parent9866e43b4b4c7ff5c2338e1ed681661496800db7 (diff)
downloadcheatdb-9639cf04f1b54865884850d608f08b5df4afe169.tar.xz
Improve views subfoldering
Diffstat (limited to 'app/views/admin/todo.py')
-rw-r--r--app/views/admin/todo.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/app/views/admin/todo.py b/app/views/admin/todo.py
new file mode 100644
index 0000000..47b8cb5
--- /dev/null
+++ b/app/views/admin/todo.py
@@ -0,0 +1,99 @@
+# Content DB
+# Copyright (C) 2018 rubenwardy
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+
+from flask import *
+from flask_user import *
+import flask_menu as menu
+from app import app
+from app.models import *
+
+@app.route("/todo/")
+@login_required
+def todo_page():
+ canApproveNew = Permission.APPROVE_NEW.check(current_user)
+ canApproveRel = Permission.APPROVE_RELEASE.check(current_user)
+ canApproveScn = Permission.APPROVE_SCREENSHOT.check(current_user)
+
+ packages = None
+ if canApproveNew:
+ packages = Package.query.filter_by(approved=False, soft_deleted=False).all()
+
+ releases = None
+ if canApproveRel:
+ releases = PackageRelease.query.filter_by(approved=False).all()
+
+ screenshots = None
+ if canApproveScn:
+ screenshots = PackageScreenshot.query.filter_by(approved=False).all()
+
+
+ topics_to_add = ForumTopic.query \
+ .filter(~ db.exists().where(Package.forums==ForumTopic.topic_id)) \
+ .filter_by(discarded=False) \
+ .count()
+
+ return render_template("todo/list.html", title="Reports and Work Queue",
+ packages=packages, releases=releases, screenshots=screenshots,
+ canApproveNew=canApproveNew, canApproveRel=canApproveRel, canApproveScn=canApproveScn,
+ topics_to_add=topics_to_add)
+
+
+@app.route("/todo/topics/")
+@login_required
+def todo_topics_page():
+ query = ForumTopic.query
+
+ show_discarded = request.args.get("show_discarded") == "True"
+ if not show_discarded:
+ query = query.filter_by(discarded=False)
+
+ total = query.count()
+
+ query = query.filter(~ db.exists().where(Package.forums==ForumTopic.topic_id)) \
+
+ sort_by = request.args.get("sort")
+ if sort_by == "name":
+ query = query.order_by(db.asc(ForumTopic.wip), db.asc(ForumTopic.name), db.asc(ForumTopic.title))
+ elif sort_by == "views":
+ query = query.order_by(db.desc(ForumTopic.views))
+ elif sort_by is None or sort_by == "date":
+ query = query.order_by(db.asc(ForumTopic.created_at))
+ sort_by = "date"
+
+ topic_count = query.count()
+
+ search = request.args.get("q")
+ if search is not None and search.strip() != "":
+ query = query.filter(ForumTopic.title.ilike('%' + search + '%'))
+
+ page = int(request.args.get("page") or 1)
+ num = int(request.args.get("n") or 100)
+ if num > 100 and not current_user.rank.atLeast(UserRank.EDITOR):
+ num = 100
+
+ query = query.paginate(page, num, True)
+ next_url = url_for("todo_topics_page", page=query.next_num, query=search, \
+ show_discarded=show_discarded, n=num, sort=sort_by) \
+ if query.has_next else None
+ prev_url = url_for("todo_topics_page", page=query.prev_num, query=search, \
+ show_discarded=show_discarded, n=num, sort=sort_by) \
+ if query.has_prev else None
+
+ return render_template("todo/topics.html", topics=query.items, total=total, \
+ topic_count=topic_count, query=search, show_discarded=show_discarded, \
+ next_url=next_url, prev_url=prev_url, page=page, page_max=query.pages, \
+ n=num, sort_by=sort_by)