From 51f7d680094c33dacf0ee2dc7d120651835e5398 Mon Sep 17 00:00:00 2001 From: Christoph Egger Date: Sat, 12 Oct 2013 16:55:25 +0200 Subject: [PATCH 1/1] fachschaftentool --- application.py | 97 ++++++++++++++++++++++++++++++++++++++++ schema.sql | 19 ++++++++ templates/add.html | 85 +++++++++++++++++++++++++++++++++++ templates/base.html | 52 +++++++++++++++++++++ templates/fachschaft.tex | 26 +++++++++++ templates/index.html | 13 ++++++ templates/show.html | 31 +++++++++++++ 7 files changed, 323 insertions(+) create mode 100644 application.py create mode 100644 schema.sql create mode 100644 templates/add.html create mode 100644 templates/base.html create mode 100644 templates/fachschaft.tex create mode 100644 templates/index.html create mode 100644 templates/show.html diff --git a/application.py b/application.py new file mode 100644 index 0000000..8ceb6c9 --- /dev/null +++ b/application.py @@ -0,0 +1,97 @@ +#!/usr/bin/python2 + +import os +import os.path +import sqlite3 +import tarfile +import StringIO + +from flask import Flask, session, redirect, url_for, escape, request, render_template, g, make_response + +app = Flask(__name__) + +#DATABASE = os.path.join(os.path.dirname(__file__), '..', 'data', 'fachschaften.sqlite') +DATABASE = os.path.join(os.path.dirname(__file__), 'fachschaften.sqlite') + +def get_db(): + db = sqlite3.connect(DATABASE) + db.row_factory = sqlite3.Row + return db + +@app.route('/') +def index(): + db = get_db() + cursor = db.cursor() + fachschaften = cursor.execute("SELECT * from fachschaft") + return render_template('index.html', fachschaften=fachschaften) + +@app.route('/show//') +def show(id): + db = get_db() + cursor = db.cursor() + fachschaft = cursor.execute("SELECT * from fachschaft WHERE rowid = ?", [id]).fetchone() + studiengang = cursor.execute("SELECT * from studiengang WHERE fachschaft = ?", [fachschaft['rowid']]).fetchall() + return render_template('show.html', fachschaft=fachschaft, studiengaenge=studiengang) + +@app.route('/add/') +def add(): + return render_template('add.html') + +@app.route('/addp/', methods=['POST']) +def add_process(): + db = get_db() + cursor = db.cursor() + data = request.form + + print data + + cursor.execute("INSERT INTO fachschaft " + "(langname, kurzname, land, stadt, studenten, " + "organ, vertreten, organisation, fachschaftler) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", + [data['unilang'], + data['unikurz'], + data['bundesland'], + data['stadt'], + data['gesamtstudis'], + data['fsorgan'], + data['vertretenestudis'], + data['organisationsform'], + data['aktive']]) + rowid = cursor.lastrowid + for i in range(0, 10): + if data['studiengang%d' % i] != '': + cursor.execute("INSERT INTO studiengang " + "(fachschaft, name, anf_dieses, anf_vorjahr) " + "VALUES (?, ?, ?, ?)", + [int(rowid), + data['studiengang%d' % i], + data['anfaenger%d' % i], + data['vorjahr%d' % i]]) + db.commit() + return redirect(url_for('show', id = rowid)) + +@app.route('/download/') +def download(): + db = get_db() + cursor = db.cursor() + data = StringIO.StringIO() + tar = tarfile.TarFile(mode='w', fileobj=data) + for fachschaft in cursor.execute("SELECT * from fachschaft"): + studiengaenge = cursor.execute("SELECT * from studiengang WHERE fachschaft = ?", [fachschaft['rowid']]).fetchall() + fdata = render_template('fachschaft.tex', + fachschaft = fachschaft, + studiengaenge = studiengaenge) + fdata = fdata.encode('utf-8') + info = tarfile.TarInfo(name=fachschaft['kurzname']) + info.size = len(fdata) + tar.addfile(info, StringIO.StringIO(fdata)) + print fdata + + tar.close() + responseobj=make_response(data.getvalue()) + responseobj.mimetype="application/x-tar" + return responseobj + +if __name__ == '__main__': + app.run(debug=True) diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..354f8a8 --- /dev/null +++ b/schema.sql @@ -0,0 +1,19 @@ +CREATE TABLE fachschaft ( + rowid INTEGER PRIMARY KEY, + langname TEXT, + kurzname TEXT, + land TEXT, + stadt TEXT, + studenten TEXT, + organ TEXT, + vertreten TEXT, + organisation TEXT, + fachschaftler TEXT +); + +CREATE TABLE studiengang ( + fachschaft INTEGER, + name TEXT, + anf_dieses TEXT, + anf_vorjahr TEXT +); diff --git a/templates/add.html b/templates/add.html new file mode 100644 index 0000000..2f53722 --- /dev/null +++ b/templates/add.html @@ -0,0 +1,85 @@ +{% extends "base.html" %} +{% block content %} +

Fachschaftsvorstellung

+

+ Bitte fülle das folgende Formular aus. In allen Feldern kann + LaTeX-Code verwendet werden, also z.B. $\leq$ für ≤. +

+
+

Allgemeines

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Vollständiger Name der Uni + (z.B. "Friedrich-Alexander-Universität Erlangen-Nürnberg"): + + +
Kurzbezeichnung der Uni (z.B. "FAU Erlangen"):
Stadt:
Bundesland/Land:
Gesamtzahl Studenten an der Uni (ca.):
Bezeichnung des Fachschaftsorgans (z.B. "Fachschaftsrat Informatik"):
Vertretene Studenten:
Organisationsform (z.B. "Verein", "Teilkörperschaft"):
Anzahl aktiver Fachschaftler (ohne "Karteileichen"):
+

+

Studiengänge

+

+ Auf der Vorstellungsfolie ist Platz für maximal 10 + Studiengängen. Du kannst auch weniger als 10 Studiengänge + eintragen. Verwende dann einfach nur die ersten Felder. +

+ + + + + + + + + + + {% for i in range(0, 10) %} + + + + + + + {% endfor %} +
Bezeichnung des
Studienganges
Anzahl der Studienanfänger im...
aktuellen akademischen Jahrvergangenen akademischen Jahr
{{i}}.
+

+ + + +

+
+{% endblock %} diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..9fb89a2 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,52 @@ + + + + + + {% block title %}{% endblock %} + + + +
+
+
+ +
+ + +
+
+ {% block content %} + {% endblock %} +
+ +
+
+
+ + + diff --git a/templates/fachschaft.tex b/templates/fachschaft.tex new file mode 100644 index 0000000..4ad5b43 --- /dev/null +++ b/templates/fachschaft.tex @@ -0,0 +1,26 @@ + \section{ {{fachschaft.kurzname}} } + \begin{frame} + \begin{tabular}{lll} + & \begin{tabular}{p{9cm}} + {\Large\bf {{fachschaft.langname}} + \cline{1-1} + \smash{\rlap{\raisebox{-.5mm}{\hspace*{.3ex}'); + {{fachschaft.stadt}}, {{fachschaft.land}}, {{fachschaft.studenten}} + Studenten}}} \\\\ + \end{tabular} & + \rlap{\smash{\raisebox{-18mm}{\includegraphics[width=2cm]{kiflogo}}}}\\ + &\multicolumn{2}{l}{\begin{tabular}{l}' . "\n"); + \textbf{ {{fsorgan}} } \\ + vertritt {{fachschaft.vertreten}} Studenten \\ + {{fachschaft.organisation}}\\ + {{fachschaft.aktive}} Aktive' . '\end{tabular}} \\\\ + &\multicolumn{2}{l}{\begin{tabular}{lll} + \rlap{\textbf{Studiengang}}\hspace*{6.8cm} & + \rlap{\textbf{Anf\"anger}}\hspace*{2cm} & \textbf{Vorjahr} + \\ + {% for studiengang in studiengaenge %} + {{studiengang.name}} & {{studiengang.anf_dieses}} & {{studiengang.anf_vorjahr}} \\ + {% endfor %} + \end{tabular}}\\\end{tabular}\\ + \vspace*{\fill} \mbox{}\hspace*{-2.8mm}\insertnavigation{\linewidth} + \end{frame} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..1b7d512 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% block content %} +

KIF 41,5 Fachschaftentool

+

+ Eintragen +

+ + +{% endblock %} diff --git a/templates/show.html b/templates/show.html new file mode 100644 index 0000000..0ecc0ef --- /dev/null +++ b/templates/show.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} +{% block content %} +

{{fachschaft.kurzname}}

+({{fachschaft.langname}}) + + + + + + + + + +
Land/Bundesland{{fachschaft.land}}
Stadt{{fachschaft.stadt}}
Studenten (Uni){{fachschaft.studenten}}
Fachschaftsorgan{{fachschaft.organ}}
Vertretene Studenten{{fachschaft.vertreten}}
Organisationsform{{fachschaft.organisation}}
Aktive Fachschaftler{{fachschaft.fachschaftler}}
+ +

Studiengänge

+
+ + + + + +{% for studiengang in studiengaenge %} + + + + + +{% endfor %} +
StudiengangAnfänger 2013Anfänger 2012
{{studiengang.name}}{{studiengang.anf_dieses}}{{studiengang.anf_vorjahr}}
+{% endblock %} -- 2.39.5