diff --git a/icalexport.py b/icalexport.py index af40aed88fd1c69375939ff179ed790fa16fa5f3..b2edf35ff51c2c3631e2a905d79bfa126c4c1e51 100644 --- a/icalexport.py +++ b/icalexport.py @@ -3,17 +3,21 @@ import icalendar from werkzeug.datastructures import Headers from datetime import timedelta, datetime -def export_lectures(lectures, name): +def export_lectures(lectures, responsible, name): cal = icalendar.Calendar() cal.add('prodid', '-//Video AG//rwth.video//') cal.add('version', '1.0') for l in lectures: + resp = [] + for r in responsible: + if r['course_id'] == l['course_id']: + resp.append(r['realname']) event = icalendar.Event() event.add('summary', l['course']['short']+': '+l['title']) event.add('description', '\n\n'.join([s for s in [ l['comment'], l['internal'], - 'Zuständig: '+l['course']['responsible'] if l['course']['responsible'] else '' + 'Zuständig: '+', '.join(resp) if resp else '' ] if s])) event.add('uid', '%i@rwth.video'%l['id']) event.add('dtstamp', datetime.utcnow()) @@ -45,12 +49,17 @@ def calperm(func): return Response("Login required", 401, {'WWW-Authenticate': 'Basic realm="FS-Login required"'}) return decorator +def get_responsible(): + return query('''SELECT users.*, responsible.course_id FROM responsible + JOIN users ON users.id = responsible.user_id''') + @app.route('/internal/ical/all') @calperm def ical_all(): return export_lectures(query('''SELECT lectures.*, "course" AS sep, courses.* FROM lectures JOIN courses ON courses.id = lectures.course_id - WHERE NOT norecording AND NOT external ORDER BY time DESC LIMIT 1000'''),'videoag_all.ics') + WHERE NOT norecording AND NOT external ORDER BY time DESC LIMIT 1000'''), + get_responsible(), 'videoag_all.ics') @app.route('/internal/ical/user/<int:user>') @calperm @@ -61,7 +70,8 @@ def ical_user(user): JOIN courses ON courses.id = lectures.course_id JOIN responsible ON responsible.course_id = courses.id WHERE NOT norecording AND NOT external AND responsible.user_id = ? - ORDER BY time DESC LIMIT 1000''', user),'videoag_%s.ics'%username) + ORDER BY time DESC LIMIT 1000''', user), get_responsible(), + 'videoag_%s.ics'%username) @app.route('/internal/ical/notuser/<int:user>') @calperm @@ -72,11 +82,13 @@ def ical_notuser(user): JOIN courses ON courses.id = lectures.course_id LEFT JOIN responsible ON (responsible.course_id = courses.id AND responsible.user_id = ?) WHERE NOT norecording AND NOT external AND responsible.user_id IS NULL - ORDER BY time DESC LIMIT 1000''', user),'videoag_not_%s.ics'%username) + ORDER BY time DESC LIMIT 1000''', user), get_responsible(), + 'videoag_not_%s.ics'%username) @app.route('/internal/ical/course/<course>') @calperm def ical_course(course): return export_lectures(query('''SELECT lectures.*, "course" AS sep, courses.* FROM lectures JOIN courses ON courses.id = lectures.course_id - WHERE courses.handle = ? AND NOT norecording AND NOT external ORDER BY time DESC''', course),'videoag_course_'+course+'.ics') + WHERE courses.handle = ? AND NOT norecording AND NOT external ORDER BY time DESC''', course), + get_responsible(), 'videoag_%s.ics'%course)