From 436a4cce2b819740d10721e320c3c80f07c0c27b Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 10 Jul 2020 19:26:37 +0100 Subject: [PATCH] Add ability to delete reviews --- app/blueprints/packages/reviews.py | 30 ++++++++++++++++++- app/models.py | 16 +++++----- .../packages/review_create_edit.html | 10 ++++++- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/app/blueprints/packages/reviews.py b/app/blueprints/packages/reviews.py index a7a1127..a033001 100644 --- a/app/blueprints/packages/reviews.py +++ b/app/blueprints/packages/reviews.py @@ -100,4 +100,32 @@ def review(package): return redirect(package.getDetailsURL()) - return render_template("packages/review_create_edit.html", form=form, package=package) + return render_template("packages/review_create_edit.html", \ + form=form, package=package, review=review) + + +@bp.route("/packages///review/delete/", methods=["POST"]) +@login_required +@is_package_page +def delete_review(package): + review = PackageReview.query.filter_by(package=package, author=current_user).first() + if review is None or review.package != package: + abort(404) + + thread = review.thread + + reply = ThreadReply() + reply.thread = thread + reply.author = current_user + reply.comment = "_converted review into a thread_" + db.session.add(reply) + + thread.review = None + + notif_msg = "Deleted review '{}' on package {}, comments were kept as a thread".format(thread.title, package.title) + addNotification(package.maintainers, current_user, notif_msg, url_for("threads.view", id=thread.id)) + + db.session.delete(review) + db.session.commit() + + return redirect(thread.getViewURL()) diff --git a/app/models.py b/app/models.py index 2d43656..cda5238 100644 --- a/app/models.py +++ b/app/models.py @@ -1080,14 +1080,14 @@ class Thread(db.Model): watchers = db.relationship("User", secondary=watchers, lazy="subquery", \ backref=db.backref("watching", lazy=True)) + def getViewURL(self): + return url_for("threads.view", id=self.id) def getSubscribeURL(self): - return url_for("threads.subscribe", - id=self.id) + return url_for("threads.subscribe", id=self.id) def getUnsubscribeURL(self): - return url_for("threads.unsubscribe", - id=self.id) + return url_for("threads.unsubscribe", id=self.id) def checkPerm(self, user, perm): if not user.is_authenticated: @@ -1135,10 +1135,12 @@ class PackageReview(db.Model): return 1 if self.recommends else -1 def getEditURL(self): - return url_for("packages.edit_review", + return self.package.getReviewURL() + + def getDeleteURL(self): + return url_for("packages.delete_review", author=self.package.author.username, - name=self.package.name, - id=self.id) + name=self.package.name) diff --git a/app/templates/packages/review_create_edit.html b/app/templates/packages/review_create_edit.html index a53bbd7..6ed6fe1 100644 --- a/app/templates/packages/review_create_edit.html +++ b/app/templates/packages/review_create_edit.html @@ -41,8 +41,16 @@ - +{% if review %} +
+ + + {{ _("Delete review.") }} + {{ _("This will convert the review into a thread, keeping the comments but removing its effect on the package's rating.") }} +
+
+{% endif %} {% endblock %}