aboutsummaryrefslogtreecommitdiffstats
path: root/pysite
diff options
context:
space:
mode:
Diffstat (limited to 'pysite')
-rw-r--r--pysite/tables.py2
-rw-r--r--pysite/views/staff/jams/create.py12
-rw-r--r--pysite/views/staff/jams/forms/preamble_edit.py45
-rw-r--r--pysite/views/staff/jams/forms/view.py4
4 files changed, 62 insertions, 1 deletions
diff --git a/pysite/tables.py b/pysite/tables.py
index e99ca989..a9a0dc88 100644
--- a/pysite/tables.py
+++ b/pysite/tables.py
@@ -60,6 +60,8 @@ TABLES = {
primary_key="number",
keys=sorted([
"number", # int
+ "preamble_rst", # str
+ "preamble_html", # str
"questions" # list[dict[str, str]] {title, type, input_type, options?}
])
),
diff --git a/pysite/views/staff/jams/create.py b/pysite/views/staff/jams/create.py
index e88056c5..ef61cbef 100644
--- a/pysite/views/staff/jams/create.py
+++ b/pysite/views/staff/jams/create.py
@@ -1,3 +1,5 @@
+import datetime
+
from flask import redirect, request, url_for
from werkzeug.exceptions import BadRequest
@@ -35,6 +37,16 @@ class StaffView(RouteView, DBMixin):
data["state"] = "planning"
data["number"] = self.get_next_number()
+ # Convert given datetime strings into actual objects, adding timezones to keep rethinkdb happy
+ date_start = datetime.datetime.strptime(data["date_start"], "%Y-%m-%d %H:%M")
+ date_start = date_start.replace(tzinfo=datetime.timezone.utc)
+
+ date_end = datetime.datetime.strptime(data["date_end"], "%Y-%m-%d %H:%M")
+ date_end = date_end.replace(tzinfo=datetime.timezone.utc)
+
+ data["date_start"] = date_start
+ data["date_end"] = date_end
+
self.db.insert(self.table_name, data)
return redirect(url_for("staff.jams.index"))
diff --git a/pysite/views/staff/jams/forms/preamble_edit.py b/pysite/views/staff/jams/forms/preamble_edit.py
new file mode 100644
index 00000000..c17692d3
--- /dev/null
+++ b/pysite/views/staff/jams/forms/preamble_edit.py
@@ -0,0 +1,45 @@
+import datetime
+
+from flask import redirect, request, url_for
+from werkzeug.exceptions import BadRequest, NotFound
+
+from pysite.base_route import RouteView
+from pysite.constants import ALL_STAFF_ROLES
+from pysite.decorators import csrf, require_roles
+from pysite.mixins import DBMixin
+from pysite.rst import render
+
+
+class StaffView(RouteView, DBMixin):
+ path = "/jams/form/<int:jam>/preamble"
+ name = "jams.forms.preamble.edit"
+
+ table_name = "code_jam_forms"
+ jams_table = "code_jams"
+
+ @require_roles(*ALL_STAFF_ROLES)
+ def get(self, jam):
+ jam_obj = self.db.get(self.jams_table, jam)
+
+ if not jam_obj:
+ return NotFound()
+
+ form_obj = self.db.get(self.table_name, jam)
+ return self.render("staff/jams/forms/preamble_edit.html", jam=jam_obj, form=form_obj)
+
+ @require_roles(*ALL_STAFF_ROLES)
+ @csrf
+ def post(self, jam):
+ jam_obj = self.db.get(self.table_name, jam)
+
+ if not jam_obj:
+ return NotFound()
+
+ form_obj = self.db.get(self.table_name, jam)
+
+ preamble_rst = request.form.get("preamble_rst")
+
+ form_obj["preamble_rst"] = preamble_rst
+ form_obj["preamble_html"] = render(preamble_rst, link_headers=False)["html"]
+
+ return redirect(url_for("staff.jams.forms.view", jam=jam))
diff --git a/pysite/views/staff/jams/forms/view.py b/pysite/views/staff/jams/forms/view.py
index eaa910f2..8d4e16ad 100644
--- a/pysite/views/staff/jams/forms/view.py
+++ b/pysite/views/staff/jams/forms/view.py
@@ -28,7 +28,9 @@ class StaffView(RouteView, DBMixin):
if not form_obj:
form_obj = {
"number": jam,
- "questions": []
+ "questions": [],
+ "preamble_rst": "",
+ "preamble_html": ""
}
self.db.insert(self.forms_table, form_obj)