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 â¤.
+
+
+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.
+
+
+
+
+
+
+
+
+{% 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
+
+
+ Studiengang
+ Anfänger 2013
+ Anfänger 2012
+
+{% for studiengang in studiengaenge %}
+
+ {{studiengang.name}}
+ {{studiengang.anf_dieses}}
+ {{studiengang.anf_vorjahr}}
+
+{% endfor %}
+
+{% endblock %}
--
2.39.5