diff options
Diffstat (limited to '')
| -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) | 
