Skip to content
Snippets Groups Projects
Commit ebae2bae authored by Julian Rother's avatar Julian Rother
Browse files

Merge branch 'master' of git.fsmpi.rwth-aachen.de:julianundandyfrickelnkram/videoagwebsite

parents 7567957d 594a9213
No related branches found
No related tags found
No related merge requests found
from server import *
@app.route('/schedule')
@register_navbar('Drehplan', 'calendar')
@mod_required
def schedule():
if 'kw' not in request.args:
kw=0
else:
kw=int(request.args['kw'])
start = date.today() - timedelta(days=date.today().weekday() -7*kw)
days = [{'date': start, 'lectures': [], 'atonce':0, 'index': 0 }]
earlieststart=time(23,59)
latestend=time(0,0)
for i in range(1,7):
days.append({'date': days[i-1]['date'] + timedelta(days=1), 'atonce':0, 'index': i, 'lectures':[] })
for i in days:
# date and times are burning in sqlite
s = datetime.combine(i['date'],time())
e = datetime.combine(i['date'],time(23,59))
i['lectures'] = query ('''
SELECT lectures.*,courses.short
FROM lectures
JOIN courses ON (lectures.course_id = courses.id)
WHERE (time < ?) AND (time > ?)
ORDER BY time ASC'''
,e,s);
# sweepline to find out how many lectures overlap
maxcol=0;
curcol=0;
freecol=[];
for l in i['lectures']:
# who the hell inserts lectures with zero length?!?!?
l['time_end'] = l['time']+timedelta(minutes=max(l['duration'],1))
for l in sorted([(l['time'],True,l) for l in i['lectures']] + [(l['time_end'],False,l) for l in i['lectures']],key=lambda t:(t[0],t[1])):
if l[1]:
curcol += 1
if curcol > maxcol:
maxcol = curcol
if len(freecol) == 0:
freecol.append(maxcol)
l[2]['schedule_col'] = freecol.pop()
if earlieststart > l[0].time():
earlieststart = l[0].time()
else:
curcol -= 1
freecol.append(l[2]['schedule_col'])
if latestend < l[0].time():
latestend = l[0].time()
i['maxcol'] = max(maxcol,1)
times=[]
s = min(earlieststart,time(8,0))
e = max(latestend,time(19,0))
for i in range(s.hour*4,min(int((60*e.hour/15)/4)*4+5,24*4)):
t = i*15
times.append(time(int(t/60),t%60))
return render_template('schedule.html',days=days,times=times,kw=kw)
...@@ -111,6 +111,10 @@ def human_semester(s, long=False): ...@@ -111,6 +111,10 @@ def human_semester(s, long=False):
def human_date(d): def human_date(d):
return d.strftime('%d.%m.%Y') return d.strftime('%d.%m.%Y')
@app.template_filter(name='time')
def human_date(d):
return d.strftime('%H:%M')
@app.template_filter() @app.template_filter()
def rfc3339(d): def rfc3339(d):
return d.strftime('%Y-%m-%dT%H:%M:%S+02:00') return d.strftime('%Y-%m-%dT%H:%M:%S+02:00')
...@@ -122,7 +126,16 @@ def get_announcements(minlevel=0): ...@@ -122,7 +126,16 @@ def get_announcements(minlevel=0):
@app.route('/') @app.route('/')
@register_navbar('Home', icon='home') @register_navbar('Home', icon='home')
def index(): def index():
return render_template('index.html', latestvideos=query(''' upcomming = query ('''
SELECT lectures.*,courses.short, courses.title AS course_title
FROM lectures
JOIN courses ON (lectures.course_id = courses.id)
WHERE (time > ?)
ORDER BY time ASC LIMIT 7''',datetime.today())
for i in upcomming:
i['date'] = i['time'].date()
i['time'] = i['time'].time()
latestvideos=query('''
SELECT lectures.*, max(videos.time_updated) AS lastvidtime, courses.short, courses.downloadable, courses.title AS coursetitle SELECT lectures.*, max(videos.time_updated) AS lastvidtime, courses.short, courses.downloadable, courses.title AS coursetitle
FROM lectures FROM lectures
LEFT JOIN videos ON (videos.lecture_id = lectures.id) LEFT JOIN videos ON (videos.lecture_id = lectures.id)
...@@ -130,8 +143,8 @@ def index(): ...@@ -130,8 +143,8 @@ def index():
WHERE (? OR (courses.visible AND courses.listed AND lectures.visible AND videos.visible)) WHERE (? OR (courses.visible AND courses.listed AND lectures.visible AND videos.visible))
GROUP BY videos.lecture_id GROUP BY videos.lecture_id
ORDER BY lastvidtime DESC ORDER BY lastvidtime DESC
LIMIT 6 LIMIT 6 ''',ismod())
''', ismod())) return render_template('index.html', latestvideos=latestvideos, upcomming=upcomming)
@app.route('/course') @app.route('/course')
@register_navbar('Videos', icon='film') @register_navbar('Videos', icon='film')
...@@ -330,62 +343,6 @@ def auth(): # For use with nginx auth_request ...@@ -330,62 +343,6 @@ def auth(): # For use with nginx auth_request
return Response("Login required", 401, {'WWW-Authenticate': 'Basic realm="Login Required"'}) return Response("Login required", 401, {'WWW-Authenticate': 'Basic realm="Login Required"'})
return "Not allowed", 403 return "Not allowed", 403
@app.route('/schedule')
@register_navbar('Drehplan', 'calendar')
@mod_required
def schedule():
if 'kw' not in request.args:
kw=0
else:
kw=int(request.args['kw'])
start = date.today() - timedelta(days=date.today().weekday() -7*kw)
days = [{'date': start, 'lectures': [], 'atonce':0, 'index': 0 }]
earlieststart=time(23,59)
latestend=time(0,0)
for i in range(1,7):
days.append({'date': days[i-1]['date'] + timedelta(days=1), 'atonce':0, 'index': i, 'lectures':[] })
for i in days:
# date and times are burning in sqlite
s = datetime.combine(i['date'],time())
e = datetime.combine(i['date'],time(23,59))
i['lectures'] = query ('''
SELECT lectures.*,courses.short
FROM lectures
JOIN courses ON (lectures.course_id = courses.id)
WHERE (time < ?) AND (time > ?)
ORDER BY time ASC'''
,e,s);
# sweepline to find out how many lectures overlap
maxcol=0;
curcol=0;
freecol=[];
for l in i['lectures']:
# who the hell inserts lectures with zero length?!?!?
l['time_end'] = l['time']+timedelta(minutes=max(l['duration'],1))
for l in sorted([(l['time'],True,l) for l in i['lectures']] + [(l['time_end'],False,l) for l in i['lectures']],key=lambda t:(t[0],t[1])):
if l[1]:
curcol += 1
if curcol > maxcol:
maxcol = curcol
if len(freecol) == 0:
freecol.append(maxcol)
l[2]['schedule_col'] = freecol.pop()
if earlieststart > l[0].time():
earlieststart = l[0].time()
else:
curcol -= 1
freecol.append(l[2]['schedule_col'])
if latestend < l[0].time():
latestend = l[0].time()
i['maxcol'] = max(maxcol,1)
times=[]
s = min(earlieststart,time(8,0))
e = max(latestend,time(19,0))
for i in range(s.hour*4,min(int((60*e.hour/15)/4)*4+5,24*4)):
t = i*15
times.append(time(int(t/60),t%60))
return render_template('schedule.html',days=days,times=times,kw=kw)
@app.route('/stats') @app.route('/stats')
@register_navbar('Statistiken', 'stats') @register_navbar('Statistiken', 'stats')
@mod_required @mod_required
...@@ -429,3 +386,4 @@ def new_announcement(): ...@@ -429,3 +386,4 @@ def new_announcement():
import feeds import feeds
import importer import importer
import schedule
{% from 'macros.html' import lecture_list_item %} {% from 'macros.html' import lecture_list_item %}
{% from 'macros.html' import valueeditor %} {% from 'macros.html' import valueeditor %}
{% from 'macros.html' import valuedeletebtn %}
{% from 'macros.html' import valuecheckbox %} {% from 'macros.html' import valuecheckbox %}
{% from 'macros.html' import preview %} {% from 'macros.html' import preview %}
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h1 class="panel-title">{{ valueeditor(['courses',course.id,'title'], course.title)}}</h1> <h1 class="panel-title">{{ valueeditor(['courses',course.id,'title'], course.title)}}<span class="pull-right">{{ valuedeletebtn(['courses',course.id,'deleted']) }}</span></h1>
</div> </div>
<div class="row panel-body"> <div class="row panel-body">
<div class="col-xs-12"> <div class="col-xs-12" class="table-condensed">
<table class="table-condensed"> <table>
<tbody> <tbody>
<tr><td>Semester:</td><td>{{ valueeditor(['courses',course.id,'semester'], course.semester) }}</td></tr> <tr><td>Semester:</td><td>{{ valueeditor(['courses',course.id,'semester'], course.semester) }}</td></tr>
<tr><td>Veranstalter:</td><td>{{ valueeditor(['courses',course.id,'organizer'], course.organizer) }}</td></tr> <tr><td>Veranstalter:</td><td>{{ valueeditor(['courses',course.id,'organizer'], course.organizer) }}</td></tr>
<tr><td>Bemerkungen:</td><td>{{ valueeditor(['courses',course.id,'description'], course.description) }}</td></tr> <tr><td>Bemerkungen:</td><td>{{ valueeditor(['courses',course.id,'description'], course.description) }}</td></tr>
</tbody>
</table>
</div>
{% if ismod() %} {% if ismod() %}
<div class="col-xs-12" style="margin-top: 20px">
<table class="table-condensed">
<tbody>
<tr><td>Sichtbar:</td><td>{{ valuecheckbox(['courses',course.id,'visible'], course.visible) }}</td></tr> <tr><td>Sichtbar:</td><td>{{ valuecheckbox(['courses',course.id,'visible'], course.visible) }}</td></tr>
<tr><td>Gelistet:</td><td>{{ valuecheckbox(['courses',course.id,'listed'], course.listed) }}</td></tr> <tr><td>Gelistet:</td><td>{{ valuecheckbox(['courses',course.id,'listed'], course.listed) }}</td></tr>
<tr><td>Downloadable:</td><td>{{ valuecheckbox(['courses',course.id,'downloadable'], course.downloadable) }}</td></tr>
<tr><td>Short:</td><td>{{ valueeditor(['courses',course.id,'short'], course.short) }}</td></tr> <tr><td>Short:</td><td>{{ valueeditor(['courses',course.id,'short'], course.short) }}</td></tr>
<tr><td>Handle:</td><td>{{ valueeditor(['courses',course.id,'handle'], course.handle) }}</td></tr> <tr><td>Handle:</td><td>{{ valueeditor(['courses',course.id,'handle'], course.handle) }}</td></tr>
<tr><td>Downloadable:</td><td>{{ valuecheckbox(['courses',course.id,'downloadable'], course.downloadable) }}</td></tr>
<tr><td>Thema:</td><td>{{ valueeditor(['courses',course.id,'subject'], course.subject) }}</td></tr> <tr><td>Thema:</td><td>{{ valueeditor(['courses',course.id,'subject'], course.subject) }}</td></tr>
<tr><td>Zuständig:</td><td>{{ valueeditor(['courses',course.id,'responsible'], course.responsible) }}</td></tr> <tr><td>Zuständig:</td><td>{{ valueeditor(['courses',course.id,'responsible'], course.responsible) }}</td></tr>
{% endif %}
</tbody> </tbody>
</table> </table>
</div> </div>
{% endif %}
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="panel panel-default">
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div clss="row"> <div clss="row">
<div class="row-xs-12"> <div class="col-xs-12" style="padding: 0px;">
<ul class="list-inline pull-right"> <ul class="list-inline pull-right">
<li> <li>
<a class="fa fa-rss-square btn btn-default" aria-hidden="true" href="{{url_for('courses_feed')}}"></a> <a class="fa fa-rss-square btn btn-default" aria-hidden="true" href="{{url_for('courses_feed')}}"></a>
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<a class="btn btn-default" href="{{ url_for('new_course', ref=request.url) }}">Neue Veranstaltung</a> <a class="btn btn-default" href="{{ url_for('new_course', ref=request.url) }}">Neue Veranstaltung</a>
</li> </li>
{% endif %} {% endif %}
<li class="dropdown"> <li class="dropdown" style="padding-right: 0px">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Gruppierung <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Gruppierung
<span class="caret"></span> <span class="caret"></span>
</button> </button>
......
...@@ -30,6 +30,26 @@ ...@@ -30,6 +30,26 @@
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">Nächste Aufnahmen</h1">
</div>
<ul class="list-group">
{% for g in upcomming|groupby('date') %}
<li class="list-group-item">
<ul class="list-group" style="margin: 0px;">
<strong>{{ g.grouper|date }}</strong>
{% for i in g.list %}
<li class="list-group-item list-group-item-condensed">
{{i.time|time}} {{i.place}} <a href="{{url_for('course', id=i.course_id)}}">{{i.course_title}}</a>: <a href="{{url_for('course', id=i.course_id)}}#lecture-{{i.id}}">{{i.title}}</a>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
</div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h1 class="panel-title">Neueste Videos <a class="fa fa-rss-square pull-right" aria-hidden="true" href="{{url_for('feed')}}"></a></h1"> <h1 class="panel-title">Neueste Videos <a class="fa fa-rss-square pull-right" aria-hidden="true" href="{{url_for('feed')}}"></a></h1">
......
...@@ -20,9 +20,8 @@ ...@@ -20,9 +20,8 @@
<div class="panel-heading"> <div class="panel-heading">
<h1 class="panel-title">Videos</h1> <h1 class="panel-title">Videos</h1>
</div> </div>
<div class="panel-body">
{% if lectures == [] %} {% if lectures == [] %}
Nichts gefunden! <div class="panel-body">Nichts gefunden!</div>
{% else %} {% else %}
<ul class="list-group videopreview"> <ul class="list-group videopreview">
{% for lecture in lectures %} {% for lecture in lectures %}
...@@ -31,5 +30,4 @@ ...@@ -31,5 +30,4 @@
</ul> </ul>
{% endif %} {% endif %}
</div> </div>
</div>
{% endblock %} {% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment