diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-07-10 19:26:37 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-07-10 19:26:37 +0100 |
commit | 436a4cce2b819740d10721e320c3c80f07c0c27b (patch) | |
tree | 4d290f1803b3983f3f8368caa8c44e870907ac44 | |
parent | 71f9fe469a60cd147e9b4ea128486f973b76c662 (diff) | |
download | cheatdb-436a4cce2b819740d10721e320c3c80f07c0c27b.tar.xz |
Add ability to delete reviews
-rw-r--r-- | app/blueprints/packages/reviews.py | 30 | ||||
-rw-r--r-- | app/models.py | 16 | ||||
-rw-r--r-- | app/templates/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/<author>/<name>/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 @@ </div> </div> </div> - </form> +{% if review %} +<form method="POST" action="{{ review.getDeleteURL() }}" class="alert alert-secondary my-5"> + <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" /> + <input class="btn btn-sm btn-danger float-right" type="submit" value="{{ _('Delete') }}"> + <b>{{ _("Delete review.") }}</b> + {{ _("This will convert the review into a thread, keeping the comments but removing its effect on the package's rating.") }} + <div style="clear:both;"></div> +</form> +{% endif %} {% endblock %} |