about summary refs log tree commit diff
path: root/uploader/publications/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/publications/views.py')
-rw-r--r--uploader/publications/views.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/uploader/publications/views.py b/uploader/publications/views.py
index 23efa2e..f97de75 100644
--- a/uploader/publications/views.py
+++ b/uploader/publications/views.py
@@ -14,6 +14,7 @@ from flask import (
 from uploader.authorisation import require_login
 
 from .models import (
+    delete_publications,
     update_publications,
     fetch_publication_by_id,
     create_new_publications,
@@ -142,3 +143,34 @@ def edit_publication(publication_id: int):
               "alert-success")
         return redirect(url_for(
             "publications.view_publication", publication_id=publication_id))
+
+
+@pubbp.route("/delete/<int:publication_id>", methods=["GET", "POST"])
+@require_login
+def delete_publication(publication_id: int):
+    """Delete a particular publication."""
+    with database_connection(app.config["SQL_URI"]) as conn:
+        publication = fetch_publication_by_id(conn, publication_id)
+        linked_phenotypes=tuple(fetch_publication_phenotypes(
+            conn, publication_id))
+
+        if not bool(publication):
+            flash("Requested publication was not found!", "alert-warning")
+            return redirect(url_for('publications.index'))
+
+        if len(linked_phenotypes) > 0:
+            flash("Cannot delete publication with linked phenotypes!",
+                  "alert-warning")
+            return redirect(url_for(
+                "publications.view_publication", publication_id=publication_id))
+
+        if request.method == "GET":
+            return render_template(
+                "publications/delete-publication.html",
+                publication=publication,
+                linked_phenotypes=linked_phenotypes,
+                publication_id=publication_id)
+
+        delete_publications(conn, (publication,))
+        flash("Deleted the publication successfully.", "alert-success")
+        return render_template("publications/delete-publication-success.html")