from flask import Blueprint, flash, redirect, render_template, request, url_for import ulid import datetime from flask_login import current_user, login_required from acmsite.models import User, Event from .forms import EventForm from acmsite import db bp = Blueprint("admin", __name__, url_prefix="/admin") @bp.route("/") @login_required def home(): if not current_user.is_admin: flash("Unauthorized") return redirect(url_for('dashboard.home')) return render_template("admin/index.html") @bp.route("/users") @login_required def users(): if not current_user.is_admin: flash("Unauthorized") return redirect(url_for('dashboard.home')) user_list = User.query.all() return render_template("admin/users.html", u_list=user_list) @bp.route("/events", methods=["GET","POST"]) @login_required def events(): if not current_user.is_admin: flash("Unauthorized") return redirect(url_for('dashboard.home')) event_list = Event.query.all() form = EventForm(request.form) if request.method == 'POST': name = request.form.get('name') description = request.form.get('description') location = request.form.get('location') start_day = request.form.get('start_day') start_time = request.form.get('start_time') end_day = request.form.get('end_day') end_time = request.form.get('end_time') print(start_day) print(start_time) start = datetime.datetime.combine(datetime.date.fromisoformat(start_day), datetime.time.fromisoformat(start_time)) end = datetime.datetime.combine(datetime.date.fromisoformat(end_day), datetime.time.fromisoformat(end_time)) e = Event( id=ulid.ulid(), name=name, description=description, location=location, start_time=start, end_time=end) db.session.add(e) db.session.commit() return render_template("admin/events.html", e_list=event_list, form=form) @bp.route("/event/") @login_required def event(id): if not current_user.is_admin: return {"status": "error", "message": "Unauthorized"} event = Event.query.filter_by(id=id).first() if event is None: return {"status": "error", "message": "Invalid event ID"} return event.create_json() @bp.route("/event//delete") @login_required def delete_event(id): if not current_user.is_admin: return {"status": "error", "message": "Unauthorized"} event = Event.query.filter_by(id=id).first() if event is None: return {"status": "error", "message": "Invalid event ID"} db.session.delete(event) db.session.commit() return {"status": "success"}