Add ability to unapprove package from GUI
This commit is contained in:
parent
c2265313d8
commit
1eaed55bc6
|
@ -78,6 +78,7 @@ class Permission(enum.Enum):
|
||||||
EDIT_EDITREQUEST = "EDIT_EDITREQUEST"
|
EDIT_EDITREQUEST = "EDIT_EDITREQUEST"
|
||||||
SEE_THREAD = "SEE_THREAD"
|
SEE_THREAD = "SEE_THREAD"
|
||||||
CREATE_THREAD = "CREATE_THREAD"
|
CREATE_THREAD = "CREATE_THREAD"
|
||||||
|
UNAPPROVE_PACKAGE = "UNAPPROVE_PACKAGE"
|
||||||
|
|
||||||
# Only return true if the permission is valid for *all* contexts
|
# Only return true if the permission is valid for *all* contexts
|
||||||
# See Package.checkPerm for package-specific contexts
|
# See Package.checkPerm for package-specific contexts
|
||||||
|
@ -449,8 +450,8 @@ class Package(db.Model):
|
||||||
return url_for("approve_package_page",
|
return url_for("approve_package_page",
|
||||||
author=self.author.username, name=self.name)
|
author=self.author.username, name=self.name)
|
||||||
|
|
||||||
def getDeleteURL(self):
|
def getRemoveURL(self):
|
||||||
return url_for("delete_package_page",
|
return url_for("remove_package_page",
|
||||||
author=self.author.username, name=self.name)
|
author=self.author.username, name=self.name)
|
||||||
|
|
||||||
def getNewScreenshotURL(self):
|
def getNewScreenshotURL(self):
|
||||||
|
@ -505,7 +506,8 @@ class Package(db.Model):
|
||||||
return user.rank.atLeast(UserRank.TRUSTED_MEMBER if isOwner else UserRank.EDITOR)
|
return user.rank.atLeast(UserRank.TRUSTED_MEMBER if isOwner else UserRank.EDITOR)
|
||||||
|
|
||||||
# Moderators can delete packages
|
# Moderators can delete packages
|
||||||
elif perm == Permission.DELETE_PACKAGE or perm == Permission.CHANGE_RELEASE_URL:
|
elif perm == Permission.DELETE_PACKAGE or perm == Permission.UNAPPROVE_PACKAGE \
|
||||||
|
or perm == Permission.CHANGE_RELEASE_URL:
|
||||||
return user.rank.atLeast(UserRank.MODERATOR)
|
return user.rank.atLeast(UserRank.MODERATOR)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -6,13 +6,14 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form method="POST" action="" class="box box_grey ">
|
<form method="POST" action="" class="box box_grey ">
|
||||||
<h3>Delete Package</h3>
|
<h3>Remove Package</h3>
|
||||||
|
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<p>This action can be undone by the admin, but he'll be very annoyed!</p>
|
<p>Deleting a package can be undone by the admin, but he'll be very annoyed!</p>
|
||||||
|
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||||
<input type="submit" value="Delete" class="btn-danger" />
|
<input type="submit" name="delete" value="Delete" class="btn btn-danger" />
|
||||||
|
<input type="submit" name="unapprove" value="Unapprove" class="btn btn-warning" />
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -130,8 +130,8 @@
|
||||||
{# {% if current_user.is_authenticated %}
|
{# {% if current_user.is_authenticated %}
|
||||||
<a class="btn btn-default btn-sm mx-1" href="{{ package.getCreateEditRequestURL() }}">Suggest Changes</a>
|
<a class="btn btn-default btn-sm mx-1" href="{{ package.getCreateEditRequestURL() }}">Suggest Changes</a>
|
||||||
{% endif %} #}
|
{% endif %} #}
|
||||||
{% if package.checkPerm(current_user, "DELETE_PACKAGE") %}
|
{% if package.checkPerm(current_user, "DELETE_PACKAGE") or package.checkPerm(current_user, "UNAPPROVE_PACKAGE") %}
|
||||||
<a class="btn btn-danger btn-sm mx-1" href="{{ package.getDeleteURL() }}">Delete</a>
|
<a class="btn btn-danger btn-sm mx-1" href="{{ package.getRemoveURL() }}">Remove</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -402,25 +402,44 @@ def approve_package_page(package):
|
||||||
return redirect(package.getDetailsURL())
|
return redirect(package.getDetailsURL())
|
||||||
|
|
||||||
|
|
||||||
@app.route("/packages/<author>/<name>/delete/", methods=["GET", "POST"])
|
@app.route("/packages/<author>/<name>/remove/", methods=["GET", "POST"])
|
||||||
@login_required
|
@login_required
|
||||||
@is_package_page
|
@is_package_page
|
||||||
def delete_package_page(package):
|
def remove_package_page(package):
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
return render_template("packages/delete.html", package=package)
|
return render_template("packages/remove.html", package=package)
|
||||||
|
|
||||||
if not package.checkPerm(current_user, Permission.DELETE_PACKAGE):
|
if "delete" in request.form:
|
||||||
flash("You don't have permission to do that.", "error")
|
if not package.checkPerm(current_user, Permission.DELETE_PACKAGE):
|
||||||
|
flash("You don't have permission to do that.", "error")
|
||||||
|
return redirect(package.getDetailsURL())
|
||||||
|
|
||||||
package.soft_deleted = True
|
package.soft_deleted = True
|
||||||
|
|
||||||
url = url_for("user_profile_page", username=package.author.username)
|
url = url_for("user_profile_page", username=package.author.username)
|
||||||
triggerNotif(package.author, current_user,
|
triggerNotif(package.author, current_user,
|
||||||
"{} deleted".format(package.title), url)
|
"{} deleted".format(package.title), url)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
flash("Deleted package", "success")
|
flash("Deleted package", "success")
|
||||||
|
|
||||||
|
return redirect(url)
|
||||||
|
elif "unapprove" in request.form:
|
||||||
|
if not package.checkPerm(current_user, Permission.UNAPPROVE_PACKAGE):
|
||||||
|
flash("You don't have permission to do that.", "error")
|
||||||
|
return redirect(package.getDetailsURL())
|
||||||
|
|
||||||
|
package.approved = False
|
||||||
|
|
||||||
|
triggerNotif(package.author, current_user,
|
||||||
|
"{} deleted".format(package.title), package.getDetailsURL())
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
flash("Unapproved package", "success")
|
||||||
|
|
||||||
|
return redirect(package.getDetailsURL())
|
||||||
|
else:
|
||||||
|
abort(400)
|
||||||
|
|
||||||
return redirect(url)
|
|
||||||
|
|
||||||
from . import todo, screenshots, releases
|
from . import todo, screenshots, releases
|
||||||
|
|
Loading…
Reference in New Issue