Redesign todo page, add ability to Approve All screenshots

This commit is contained in:
rubenwardy 2019-03-29 20:32:13 +00:00
parent 896a65fd99
commit 0fd4984e5a
2 changed files with 102 additions and 52 deletions

@ -5,53 +5,79 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<h2>Awaiting Approval</h2> <h2 class="mb-4">Approval Queue</h2>
{% if canApproveNew and packages %} <div class="row">
<h3>Packages</h3> {% if canApproveNew and packages %}
<ul> <div class="col-sm-6">
{% for p in packages %} <div class="card">
<li><a href="{{ p.getDetailsURL() }}"> <h3 class="card-header">Packages</h3>
{{ p.title }} by {{ p.author.display_name }} <div class="list-group list-group-flush">
</a></li> {% for p in packages %}
{% else %} <a href="{{ p.getDetailsURL() }}" class="list-group-item list-group-item-action">
<li><i>No packages need reviewing.</i></ul> {{ p.title }} by {{ p.author.display_name }}
{% endfor %} </a>
</ul> {% else %}
{% endif %} <li class="list-group-item"><i>No packages need reviewing.</i></li>
{% endfor %}
</div>
</div>
</div>
{% endif %}
{% if canApproveRel and releases %}
<div class="col-sm-6">
<div class="card">
<h3 class="card-header">Releases</h3>
<ul class="list-group list-group-flush">
{% for r in releases %}
<li class="list-group-item">
<a href="{{ r.getEditURL() }}">{{ r.title }}</a>
on
<a href="{{ r.package.getDetailsURL() }}">
{{ r.package.title }} by {{ r.package.author.display_name }}
</a>
</li>
{% else %}
<li class="list-group-item"><i>No releases need reviewing.</i></li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
</div>
{% if canApproveScn and screenshots %} {% if canApproveScn and screenshots %}
<h3>Screenshots</h3> <div class="card my-4">
<ul> <h3 class="card-header">Screenshots
{% for s in screenshots %} <form class="float-right" method="post" action="{{ url_for('todo_page') }}">
<li> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<a href="{{ s.getEditURL() }}">{{ s.title }}</a> <input type="hidden" name="action" value="screenshots_approve_all" />
on <input class="btn btn-sm btn-primary" type="submit" value="Approve All" />
<a href="{{ s.package.getDetailsURL() }}"> </form>
{{ s.package.title }} by {{ s.package.author.display_name }} </h3>
</a> <ul class="card-body d-flex p-0 flex-row flex-wrap justify-content-start align-content-start p-4">
</li> {% for s in screenshots %}
{% else %} <li class="packagetile flex-fill"><a href="{{ s.getEditURL() }}"
<li><i>No screenshots need reviewing.</i></ul> style="background-image: url({{ s.getThumbnailURL(3) or '/static/placeholder.png' }});">
{% endfor %} <div class="packagegridscrub"></div>
</ul> <div class="packagegridinfo">
{% endif %} <h3>
{{ s.title }}
{% if canApproveRel and releases %} <br />
<h3>Releases</h3> <small>{{ s.package.title }} by {{ s.package.author.display_name }}</small>
<ul> </h3>
{% for r in releases %} <p></p>
<li> </div>
<a href="{{ r.getEditURL() }}">{{ r.title }}</a> </a></li>
on {% else %}
<a href="{{ r.package.getDetailsURL() }}"> <li><i>No screenshots need reviewing.</i></li>
{{ r.package.title }} by {{ r.package.author.display_name }} {% endfor %}
</a> {% for i in range(4) %}
</li> <li class="packagetile flex-fill"></li>
{% else %} {% endfor %}
<li><i>No releases need reviewing.</i></ul> </ul>
{% endfor %} </div>
</ul>
{% endif %} {% endif %}
{% if not (packages or screenshots or releases) %} {% if not (packages or screenshots or releases) %}
@ -63,8 +89,16 @@
<h2>Unadded Topic List</h2> <h2>Unadded Topic List</h2>
<p> <p>
There are {{ total_topics - topics_to_add }} / {{ total_topics }} packages have been been added to cdb,
<a href="{{ url_for('todo_topics_page') }}">{{ topics_to_add }} packages</a> based on cdb's forum parser. {{ topics_to_add }} remaining.
to be added to cdb, based on cdb's forum parser.
</p> </p>
<div class="progress my-4">
{% set perc = 32 %}
<div class="progress-bar bg-success" role="progressbar"
style="width: {{ perc }}%" aria-valuenow="{{ perc }}" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<a class="btn btn-primary" href="{{ url_for('todo_topics_page') }}">View Unadded Topic List</a>
{% endblock %} {% endblock %}

@ -22,7 +22,7 @@ from app import app
from app.models import * from app.models import *
from app.querybuilder import QueryBuilder from app.querybuilder import QueryBuilder
@app.route("/todo/") @app.route("/todo/", methods=["GET", "POST"])
@login_required @login_required
def todo_page(): def todo_page():
canApproveNew = Permission.APPROVE_NEW.check(current_user) canApproveNew = Permission.APPROVE_NEW.check(current_user)
@ -41,16 +41,32 @@ def todo_page():
if canApproveScn: if canApproveScn:
screenshots = PackageScreenshot.query.filter_by(approved=False).all() screenshots = PackageScreenshot.query.filter_by(approved=False).all()
if not canApproveNew and not canApproveRel and not canApproveScn:
abort(403)
topics_to_add = ForumTopic.query \ if request.method == "POST":
if request.form["action"] == "screenshots_approve_all":
if not canApproveScn:
abort(403)
PackageScreenshot.query.update({ "approved": True })
db.session.commit()
return redirect(url_for("todo_page"))
else:
abort(400)
topic_query = ForumTopic.query \
.filter_by(discarded=False)
total_topics = topic_query.count()
topics_to_add = topic_query \
.filter(~ db.exists().where(Package.forums==ForumTopic.topic_id)) \ .filter(~ db.exists().where(Package.forums==ForumTopic.topic_id)) \
.filter_by(discarded=False) \
.count() .count()
return render_template("todo/list.html", title="Reports and Work Queue", return render_template("todo/list.html", title="Reports and Work Queue",
packages=packages, releases=releases, screenshots=screenshots, packages=packages, releases=releases, screenshots=screenshots,
canApproveNew=canApproveNew, canApproveRel=canApproveRel, canApproveScn=canApproveScn, canApproveNew=canApproveNew, canApproveRel=canApproveRel, canApproveScn=canApproveScn,
topics_to_add=topics_to_add) topics_to_add=topics_to_add, total_topics=total_topics)
@app.route("/todo/topics/") @app.route("/todo/topics/")
@ -62,7 +78,7 @@ def todo_topics_page():
tmp_q = ForumTopic.query tmp_q = ForumTopic.query
if not qb.show_discarded: if not qb.show_discarded:
tmp_q = tmp_q.filter_by(discarded=qb.show_discarded) tmp_q = tmp_q.filter_by(discarded=False)
total = tmp_q.count() total = tmp_q.count()
topic_count = query.count() topic_count = query.count()