diff options
Diffstat (limited to 'pysite')
-rw-r--r-- | pysite/tables.py | 2 | ||||
-rw-r--r-- | pysite/views/staff/jams/create.py | 12 | ||||
-rw-r--r-- | pysite/views/staff/jams/forms/preamble_edit.py | 45 | ||||
-rw-r--r-- | pysite/views/staff/jams/forms/view.py | 4 |
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) |