From 9d08c271359fb30a01b444c2f319f725d8b5f69c Mon Sep 17 00:00:00 2001 From: Cara Salter Date: Fri, 1 Dec 2023 16:25:32 -0500 Subject: [PATCH] Editing and creating events! --- goathacks/admin/__init__.py | 1 + goathacks/admin/events.py | 69 +++++++++++++++++++++++ goathacks/admin/forms.py | 12 ++++ goathacks/events/__init__.py | 2 +- goathacks/templates/events/list.html | 38 +++++++++++++ goathacks/templates/events/new_event.html | 39 +++++++++++++ 6 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 goathacks/admin/events.py create mode 100644 goathacks/admin/forms.py create mode 100644 goathacks/templates/events/list.html create mode 100644 goathacks/templates/events/new_event.html diff --git a/goathacks/admin/__init__.py b/goathacks/admin/__init__.py index b650bd2..4536cf2 100644 --- a/goathacks/admin/__init__.py +++ b/goathacks/admin/__init__.py @@ -7,6 +7,7 @@ from goathacks.models import User bp = Blueprint("admin", __name__, url_prefix="/admin") from goathacks import db, mail as app_mail +from goathacks.admin import events @bp.route("/") @login_required diff --git a/goathacks/admin/events.py b/goathacks/admin/events.py new file mode 100644 index 0000000..cbcfdfc --- /dev/null +++ b/goathacks/admin/events.py @@ -0,0 +1,69 @@ +from flask import render_template, redirect, request, url_for, flash +from flask_login import current_user, login_required +from goathacks.admin import bp, forms +from goathacks import db +from goathacks.models import Event + +@bp.route("/events") +@login_required +def list_events(): + if not current_user.is_admin: + return redirect(url_for("dashboard.home")) + + events = Event.query.all() + + return render_template("events/list.html", events=events) + +@bp.route("/events/new", methods=["GET", "POST"]) +@login_required +def new_event(): + if not current_user.is_admin: + return redirect(url_for("dashboard.home")) + + form = forms.EventForm(request.form) + if request.method == 'POST': + name = request.form.get("name") + description = request.form.get("description") + location = request.form.get("location") + start_time = request.form.get("start_time") + end_time = request.form.get("end_time") + category = request.form.get("category") + + event = Event( + name = name, + description = description, + location = location, + start_time = start_time, + end_time = end_time, + category = category + ) + + db.session.add(event) + db.session.commit() + flash("Created event") + return redirect(url_for("admin.list_events")) + + + return render_template("events/new_event.html", form=form) + +@bp.route("/events/edit/", methods=["GET", "POST"]) +@login_required +def edit_event(id): + if not current_user.is_admin: + return redirect(url_for("dashboard.home")) + + event = Event.query.filter_by(id=id).one() + if event is None: + flash("Event does not exist") + return redirect(url_for("admin.list_events")) + + form = forms.EventForm(request.form) + if request.method == 'POST': + form.populate_obj(event) + db.session.commit() + flash("Updated event") + return redirect(url_for("admin.list_events")) + else: + form = forms.EventForm(obj=event) + + return render_template("events/new_event.html", form=form) diff --git a/goathacks/admin/forms.py b/goathacks/admin/forms.py new file mode 100644 index 0000000..c6e7272 --- /dev/null +++ b/goathacks/admin/forms.py @@ -0,0 +1,12 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, DateTimeField, SubmitField, TextAreaField +from wtforms.validators import DataRequired + +class EventForm(FlaskForm): + name = StringField("Name", validators=[DataRequired()]) + description = TextAreaField("Description") + location = StringField("Location", validators=[DataRequired()]) + start_time = DateTimeField("Start Time", validators=[DataRequired()]) + end_time = DateTimeField("End Time", validators=[DataRequired()]) + category = StringField("Category") + submit = SubmitField("Submit") diff --git a/goathacks/events/__init__.py b/goathacks/events/__init__.py index e5c5c5d..81007e1 100644 --- a/goathacks/events/__init__.py +++ b/goathacks/events/__init__.py @@ -15,7 +15,7 @@ def workshop_checkin(id): return redirect(url_for("dashboard.home")) checkin = EventCheckins.query.filter_by(event_id=id, - user_id=current_user.id).one() + user_id=current_user.id).first() if checkin is not None: flash("You've already checked into this event!") return redirect(url_for("dashboard.home")) diff --git a/goathacks/templates/events/list.html b/goathacks/templates/events/list.html new file mode 100644 index 0000000..4b37285 --- /dev/null +++ b/goathacks/templates/events/list.html @@ -0,0 +1,38 @@ +{% extends 'base.html' %} + +{% block content %} + +
+

Events

+ + + + + + + + + + + + + + + {% for event in events %} + + + + + + + + + + + {% endfor %} + +
IDNameLocationStartEndCategoryChecked inNew
{{ event.id }}{{ event.name }}{{ event.location }}{{ event.start_time }}{{ event.end_time }}{{ event.category }}{{ event.get_checkins()|length }}Edit
+
+ +{% endblock %} diff --git a/goathacks/templates/events/new_event.html b/goathacks/templates/events/new_event.html new file mode 100644 index 0000000..caba4bb --- /dev/null +++ b/goathacks/templates/events/new_event.html @@ -0,0 +1,39 @@ +{% extends 'base.html' %} + +{% block content %} +
+
+
+

Create/Edit Event

+
+
+
+
+
+
+ {{ form.csrf_token }} +
+ {{ form.name}}
{{ form.name.label }} +
+
+ {{ form.description}}
{{form.description.label}} +
+
+ {{ form.location}}
{{form.location.label}} +
+
+ {{form.start_time}}
{{form.start_time.label}} +
+
+ {{form.end_time}}
{{form.end_time.label}} +
+
+ {{form.category}}
{{form.category.label}} +
+
+ {{form.submit}} +
+
+
+
+{% endblock %}