about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--uploader/publications/views.py38
1 files changed, 36 insertions, 2 deletions
diff --git a/uploader/publications/views.py b/uploader/publications/views.py
index ca4bfcb..bf3ea10 100644
--- a/uploader/publications/views.py
+++ b/uploader/publications/views.py
@@ -2,13 +2,21 @@
 import json
 
 from gn_libs.mysqldb import database_connection
-from flask import request, Blueprint, render_template, current_app as app
+from flask import (
+    flash,
+    request,
+    url_for,
+    redirect,
+    Blueprint,
+    render_template,
+    current_app as app)
 
 from uploader.authorisation import require_login
 
 from .models import (
     fetch_publications,
     fetch_publication_by_id,
+    create_new_publications,
     fetch_publication_phenotypes)
 
 from gn_libs.debug import __pk__
@@ -55,4 +63,30 @@ def create_publication():
     """Create a new publication."""
     if(request.method == "GET"):
         return render_template("publications/create-publication.html")
-    return "Not Implemented"
+    form = request.form
+    authors = form.get("publication-authors")
+    if authors is None or authors == "":
+        flash("The publication's author(s) MUST be provided!", "alert alert-danger")
+        return redirect(url_for("publications.create", **request.args))
+
+    with database_connection(app.config["SQL_URI"]) as conn:
+        publications = create_new_publications(conn, ({
+            "pubmed_id": form.get("pubmed-id"),
+            "abstract": form.get("publication-abstract"),
+            "authors": authors or None,
+            "title":  form.get("publication-title") or None,
+            "journal": form.get("publication-journal") or None,
+            "volume": form.get("publication-volume") or None,
+            "pages": form.get("publication-pages") or None,
+            "month": (form.get("publication-month") or "").capitalize() or None,
+            "year": form.get("publication-year") or None
+        },))
+        flash("New publication created!", "alert alert-success")
+        return redirect(url_for(
+            request.args.get("return-to") or "publications.view_publication",
+            publication_id=publications[0]["publication_id"],
+            **request.args))
+
+    flash("Publication creation failed!", "alert alert-danger")
+    app.logger.debug("Failed to create the new publication.", exc_info=True)
+    return redirect(url_for("publications.create_publication"))