Lektoren app-weit: Plan/Details/iCal mit type=lektor, Namenssuche (Autocomplete) für Studierende und Lektoren, Lektor-Karte mit Profil-Link

This commit is contained in:
Nicolas Gruber
2026-10-19 16:01:41 +02:00
parent 6763faf9c1
commit 139b3677b5
5 changed files with 127 additions and 23 deletions
+23 -3
View File
@@ -133,7 +133,7 @@ def _plan_common(request, kind, uid, kz, sem, ver, grp, semester, week="", tab="
@app.get("/plan", response_class=HTMLResponse)
def plan(request: Request,
uid: str = Query("", description="Matrikelnummer"),
uid: str = Query("", description="Matrikelnummer oder Lektor-Username (z.B. rmatzinger)"),
semester: str = Query(""),
week: str = Query("", description="Woche als YYYY-MM-DD (Monatag)"),
tab: str = Query("week", description="week|sem")):
@@ -444,6 +444,24 @@ def api_person_id(uid: str = Query(...)):
return {"uid": uid, "person_id": client.person_id_for(uid)}
@app.get("/api/benutzer")
def api_benutzer(q: str = Query("")):
"""Namensuche über Studierende + Lektoren (Autocomplete)."""
q = (q or "").strip().lower()
if len(q) < 2:
return []
out = []
for b in client.benutzer_all():
hay = f"{b['nachname']} {b['vorname']} {b['uid']}".lower()
if q in hay:
out.append({"uid": b["uid"],
"name": f"{b['nachname']}, {b['vorname']}".strip(", "),
"kind": "student" if b["uid"].isdigit() else "lektor"})
if len(out) >= 12:
break
return out
@app.get("/api/meta")
def api_meta():
return _meta()
@@ -497,8 +515,10 @@ def export_ical(kind: str = "student",
if x["begin"] <= datetime.now().timestamp() <= x["ende"]),
meta["semesters"][0]))
if kind == "student":
ical = client.ical_raw("student", uid=uid or OWN_UID, begin=s["begin"], ende=s["ende"])
fname = f"lvplan_{uid or OWN_UID}_{s['label']}.ics"
uid = uid or OWN_UID
ptype = "student" if uid.isdigit() else "lektor"
ical = client.ical_raw(ptype, uid=uid, begin=s["begin"], ende=s["ende"])
fname = f"lvplan_{uid}_{s['label']}.ics"
else:
ical = client.ical_raw("stg", kz=kz, sem=sem, ver=ver, grp=grp,
begin=s["begin"], ende=s["ende"])