Custom Calendar

This commit is contained in:
2024-09-29 19:21:20 +02:00
parent b0bda20baa
commit 85c129b602
14 changed files with 159 additions and 34 deletions

View File

@ -1,8 +1,9 @@
#!/usr/bin/env python3.6
from flask import make_response
from flask import render_template, url_for, redirect, request
from flask import render_template, url_for, redirect, request, send_from_directory
from flask_login import (login_user as loginUser, login_required as loginRequired,
logout_user as logoutUser, current_user as currentUser)
from sqlalchemy.exc import IntegrityError
from werkzeug.exceptions import HTTPException
import hashlib
import datetime
@ -12,7 +13,7 @@ import fetchDUALIS
import fetchRAPLA
from requesthelpers import *
from fetchRAPLA import *
from calendar_generation import getWeek
from calendar_generation import getWeek, createCustomCalendar
from init import *
@ -87,18 +88,18 @@ def initRoutes(app: Flask):
if not currentUser.kurs:
return redirect(url_for("getKurs", next=url_for(request.endpoint)))
week = request.args.get("week")
if week:
if week and week!="today":
week = datetime.strptime(week, "%Y-%m-%d")
else:
week = "today"
samstag = request.args.get("samstag")
if not samstag:
samstag = False
events = await getWeek(week, fetchRAPLA.getIcal(currentUser.kurs), samstag)
events = await getWeek(week, fetchRAPLA.getIcal(uid=currentUser.id), samstag)
return render_template("plan-user.html", events=events[0], eventdays=events[1],
name=currentUser.name, prev=str(events[2])[:10], next=str(events[3])[:10],
mon=events[4],
s="p", praxis="hidden")
uid=currentUser.id, name=currentUser.name, prev=str(events[2])[:10],
next=str(events[3])[:10], mon=events[4], login=True, s="p", date=str(week)[:10],
praxis="hidden")
@app.route("/plan/<string:kurs>")
async def displayPlan(kurs: str):
@ -119,17 +120,29 @@ def initRoutes(app: Flask):
except AttributeError:
pass
kurs = kurs.upper()
plan = fetchRAPLA.getIcal(kurs)
plan = fetchRAPLA.getIcal(kurs=kurs)
if plan:
samstag = request.args.get("samstag")
if not samstag:
samstag = False
events = await getWeek(week, plan, samstag)
return render_template("plan-anon.html", events=events[0], eventdays=events[1], kurs=kurs,
prev=str(events[2])[:10], next=str(events[3])[:10], mon=events[4], praxis="hidden")
login=False, prev=str(events[2])[:10], next=str(events[3])[:10],
mon=events[4], praxis="hidden")
else:
return redirect(url_for("login"))
@app.route("/plan/restore")
@loginRequired
async def restoreVL():
events = HiddenVL.query.filter_by(uid=currentUser.id).all()
return render_template("restore-events.html", events=events, praxis="hidden")
@app.route("/plan/calendar/<int:uid>", methods=["GET"])
async def deliverCalendar(uid: int):
calstring = fetchRAPLA.getIcal(uid=uid)
return send_from_directory("calendars", calstring, as_attachment=False)
@app.route("/set-up")
def redKurs():
"""
@ -156,7 +169,7 @@ def initRoutes(app: Flask):
if not currentUser.kurs:
kurs = await fetchDUALIS.getKurs(dualisUser.token, cookie)
if kurs != 0:
if not fetchRAPLA.getIcal(kurs):
if not fetchRAPLA.getIcal(kurs=kurs):
return render_template('kurs.html', detected=(kurs, dualisError), s="s",
theorie="hidden", praxis="hidden", file=False)
currentUser.kurs = kurs
@ -251,6 +264,33 @@ def initRoutes(app: Flask):
"""
return render_template("login.html", theorie="hidden", praxis="hidden", s="s")
@app.route("/plan/delete", methods=["POST"])
@loginRequired
async def removeEvent():
day = request.args.get("day")
id = str(request.args.get("id"))
uid = currentUser.id
name = request.args.get("name")
idDB = HiddenVL(uid=uid, eventid=id, id=str(uid) + id, name=name)
db.session.add(idDB)
try:
db.session.commit()
except IntegrityError:
return redirect(url_for("displayRapla", week=day))
await createCustomCalendar(currentUser.id)
return redirect(url_for("displayRapla", week=day))
@app.route("/plan/restore/event")
@loginRequired
async def restoreEvent():
id = str(request.args.get("id"))
uid = currentUser.id
entry = HiddenVL.query.filter_by(id=str(uid) + id).first()
db.session.delete(entry)
db.session.commit()
await createCustomCalendar(currentUser.id)
return redirect(url_for("restoreVL"))
@app.route("/log-in", methods=["POST"])
async def login_post():
"""
@ -315,8 +355,9 @@ def initRoutes(app: Flask):
logoutUser()
redirection = make_response(redirect(url_for("login", code=1, next=url_for("welcome"))))
redirection.set_cookie("cnsc", value="Logged out! Your temporary token "
"on our server and the cookie on your device have been deleted.", httponly=True,
secure=True)
"on our server and the cookie on your device have been deleted.",
httponly=True,
secure=True)
return redirection
@app.route("/error")