diff --git a/README.md b/README.md index 48cf451f96af00145fed024ae07f88e47537cb95..43ed679137ac1746918a84b4b812dc1443c953d5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,34 @@ +# Website der Video AG + +## Entwicklung +### Zum Testen: +Hinweis: diese Variante startet eine lokale Testversion der Website, es sind nicht alle Features verfügbar, z.B. LDAP-Login. + +1. Repo Clonen +2. Verzeichnis betreten +3. (optional) config.py anpassen +4. Schauen ob alle Dependencies erfüllt sind (siehe weiter unten) +5. `./run.py` ausführen +6. unter [link](http://localhost:5000) ist die Website verfügbar +7. Moderatorlogin mit user: `videoag` Passwort: `videoag` + +### Zum Mitmachen: +1. Repo zum User clonen, dafür den "Clone-Button auf der Website verwenden +2. Weiter mit 'Zum Testen' +3. Änderungen machen +4. ins eigene Repo pushen +5. Pull-Request an uns, dazu unter "Merge-Requests" einmal auf "New Merge Request" und das Private Repo auswählen. +6. Warten +7. Wir mergen die Änderungen + +### Dependencies +* python +* flask +* sqlite +* lxml (optional, wird für den Campus Import benötigt) + +# Lizenz + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License Version 2 as published by the Free Software Foundation; @@ -9,4 +40,4 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. \ No newline at end of file +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. diff --git a/server.py b/server.py index ceccf646e0cae541e75c0d0e9d7c81ec374aa919..9a9a76ce216b2cc17941351e1f2a8467b24c4fe4 100755 --- a/server.py +++ b/server.py @@ -192,6 +192,7 @@ def faq(): return render_template('faq.html') @app.route('/play/<int:id>') +@app.route('/embed/<int:id>', endpoint='embed') @handle_errors('course', 'Diese Vorlesung existiert nicht!', 404, IndexError) def lecture(id): lectures = query('SELECT * FROM lectures WHERE id = ? AND (? OR visible)', id, ismod()) @@ -202,7 +203,8 @@ def lecture(id): if not courses: return render_endpoint('course', 'Diese Veranstaltung existiert nicht!'), 404 chapters = query('SELECT * FROM chapters WHERE lecture_id = ? AND NOT deleted AND (? OR visible) ORDER BY time ASC', id, ismod()) - return render_template('lecture.html', course=courses[0], lecture=lectures[0], videos=videos, chapters=chapters) + return render_template('embed.html' if request.endpoint == 'embed' else 'lecture.html', course=courses[0], lecture=lectures[0], videos=videos, chapters=chapters) + @app.route('/search') def search(): @@ -395,6 +397,24 @@ def new_featured(): return redirect(request.values['ref']) return id, 200 +@app.route('/sitemap.xml', methods=['GET']) +def sitemap(): + pages=[] + # static pages + for rule in app.url_map.iter_rules(): + if 'GET' in rule.methods and len(rule.arguments)==0: + if rule.endpoint not in mod_endpoints: + pages.append([rule.rule]) + for i in query('select * from courses where visible and listed'): + pages.append([url_for('course',handle=i['handle'])]) + for j in query('select * from lectures where (course_id = ? and visible)',i['id']): + pages.append([url_for('lecture',id=j['id'])]) + + + return Response(render_template('sitemap.xml', pages=pages), 200, {'Content-Type': 'application/atom+xml'} ) + + + import feeds import importer import schedule diff --git a/templates/base.html b/templates/base.html index 079d5cff5fad096052542bbf37f38665cd30bf41..0fc5647ecd7d915c5cb514410c9177e9d32d1c3a 100644 --- a/templates/base.html +++ b/templates/base.html @@ -24,6 +24,7 @@ {%if ismod() %}<script src="{{url_for('static', filename='moderator.js')}}"></script>{% endif %} </head> <body> + {% block navbar %} <nav class="navbar navbar-default navbar-static-top"> <div class="container-fluid"> <div class="row"> @@ -98,6 +99,7 @@ </div> </div> </nav> + {% endblock %} <div class="container-fluid"> <div class="row"> {% if page_border == 0 %} @@ -127,8 +129,6 @@ </div> {% endfor %} {% block content %} - <h1>This is a Heading</h1> - <p>This is a paragraph.</p> {% endblock %} </div> </div> diff --git a/templates/embed.html b/templates/embed.html new file mode 100644 index 0000000000000000000000000000000000000000..2aca631f7574714ec41f3b49429aebb94df98d57 --- /dev/null +++ b/templates/embed.html @@ -0,0 +1,16 @@ +{% from 'macros.html' import player %} +{% from 'macros.html' import video_download_btn %} +{% from 'macros.html' import video_embed_btn %} +{% set page_border = 0 -%} + +{% extends "base.html" %} +{% block navbar %} +{% endblock %} +{% block content %} +<div class="row"> + <div class="col-xs-12" style="padding: 0px"> + {{ player(lecture, videos) }} + </div> +</div> + +{% endblock %} diff --git a/templates/macros.html b/templates/macros.html index 6e1b722e8e154c9b9bfc7c5113773e77233fdced..7706485449fe05b2b264f6ef137f703b64685beb 100644 --- a/templates/macros.html +++ b/templates/macros.html @@ -110,7 +110,7 @@ <span>Einbetten</span> </a> <script> -{% set embedcode = '<iframe width="700" height="394" src="https://videoag.fsmpi.rwth-aachen.de/site/embed.php?lecture='+lectureid|string+'" frameborder="0" allowfullscreen="true"></iframe>' %} +{% set embedcode = '<iframe width="700" height="394" src="'+url_for('embed', id=lectureid, _external=True)+'" frameborder="0" allowfullscreen="true"></iframe>' %} $('#embedcodebtn').popover( { html:true, diff --git a/templates/sitemap.xml b/templates/sitemap.xml new file mode 100644 index 0000000000000000000000000000000000000000..c847d223271a6a825a8eea07b0887c9343c003fb --- /dev/null +++ b/templates/sitemap.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> + {% for page in pages %} + <url> + <loc>{{page[0]|safe}}</loc> + <lastmod>{{page[1]}}</lastmod> + </url> + {% endfor %} +</urlset>