]> git.siccegge.de Git - fachschaftentool.git/commitdiff
fachschaftentool
authorChristoph Egger <siccegge@cs.fau.de>
Sat, 12 Oct 2013 14:55:25 +0000 (16:55 +0200)
committerChristoph Egger <siccegge@cs.fau.de>
Sat, 12 Oct 2013 14:55:25 +0000 (16:55 +0200)
application.py [new file with mode: 0644]
schema.sql [new file with mode: 0644]
templates/add.html [new file with mode: 0644]
templates/base.html [new file with mode: 0644]
templates/fachschaft.tex [new file with mode: 0644]
templates/index.html [new file with mode: 0644]
templates/show.html [new file with mode: 0644]

diff --git a/application.py b/application.py
new file mode 100644 (file)
index 0000000..8ceb6c9
--- /dev/null
@@ -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/<int:id>/')
+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 (file)
index 0000000..354f8a8
--- /dev/null
@@ -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 (file)
index 0000000..2f53722
--- /dev/null
@@ -0,0 +1,85 @@
+{% extends "base.html" %}
+{% block content %}
+<h2>Fachschaftsvorstellung</h2>
+<p>
+  Bitte fülle das folgende Formular aus. In allen Feldern kann
+  LaTeX-Code verwendet werden, also z.B. $\leq$ für ≤.
+</p>
+<form action="/addp/" method="post">
+  <h3>Allgemeines</h3>
+  <table>
+    <tr>
+      <td>
+        Vollständiger Name der Uni
+        (z.B. "Friedrich-Alexander-Universität Erlangen-Nürnberg"):
+      </td>
+      <td>
+        <input type="text" name="unilang" />
+      </td>
+    </tr>
+    <tr>
+      <td>Kurzbezeichnung der Uni (z.B. "FAU Erlangen"):</td>
+      <td><input type="text" name="unikurz" /></td>
+    </tr>
+    <tr>
+      <td>Stadt:</td>
+      <td><input type="text" name="stadt" /></td>
+    </tr>
+    <tr>
+      <td>Bundesland/Land:</td>
+      <td><input type="text" name="bundesland" /></td>
+    </tr>
+    <tr>
+      <td>Gesamtzahl Studenten an der Uni (ca.):</td>
+      <td><input type="text" name="gesamtstudis" /></td>
+    </tr>
+    <tr>
+      <td>Bezeichnung des Fachschaftsorgans (z.B. "Fachschaftsrat Informatik"):</td>
+      <td> <input type="text" name="fsorgan" /></td>
+    </tr>
+    <tr>
+      <td>Vertretene Studenten:</td>
+      <td><input type="text" name="vertretenestudis" /></td>
+    </tr>
+    <tr>
+      <td>Organisationsform (z.B. "Verein", "Teilkörperschaft"): </td>
+      <td><input type="text" name="organisationsform" /></td>
+    </tr>
+    <tr>
+      <td>Anzahl aktiver Fachschaftler (ohne "Karteileichen"): </td>
+      <td><input type="text" name="aktive" /></td>
+    </tr>
+  </table>
+</p>
+<h3>Studiengänge</h3>
+<p>
+  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.
+</p>
+<table border="0" cellspacing="0">
+  <tr>
+    <th rowspan="2" class="headbottom noborder"></th>
+    <th rowspan="2" class="headbottom noborder">Bezeichnung des<br />Studienganges</th>
+    <th colspan="2">Anzahl der Studienanfänger im...</th>
+  </tr>
+  <tr class="headbottom">
+    <th class="small">aktuellen akademischen Jahr</th>
+    <th class="small">vergangenen akademischen Jahr</th>
+  </tr>
+  {% for i in range(0,  10) %}
+  <tr>
+    <td class="noborder">{{i}}.</td>
+    <td class="noborder"><input type="text" name="studiengang{{i}}" maxlength="35" /></td>
+    <td><input type="text" name="anfaenger{{i}}" /> </td>
+    <td><input type="text" name="vorjahr{{i}}" /></td>
+  </tr>
+  {% endfor %}
+</table>
+<p>
+  <input type="submit" name="submit" value="Vorschaubild anzeigen" />
+  <input type="submit" name="submit" value="Eintragen" />
+  <input type="hidden" name="sessionid" value="42" />
+</p>
+</form>
+{% endblock %}
diff --git a/templates/base.html b/templates/base.html
new file mode 100644 (file)
index 0000000..9fb89a2
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de" >
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+      <link href="http://eva.fsi.informatik.uni-erlangen.de/static/style.css" type="text/css" rel="stylesheet" />
+      <title>{% block title %}{% endblock %}</title>
+    </head>
+
+    <body>
+      <div id="topofthepops">
+        <div id="floppy">
+          <div id="content">
+            <div id="head_logo">
+              <a href="/">
+                <img src="https://fsi.informatik.uni-erlangen.de/forum/unb_lib/designs/fsi-wide/img/logo.png"
+                     alt="FSI Informatik"/>
+              </a>
+            </div>
+            <div class="head_navigation_container">
+              <!-- Es duerfen keine Leerzeichen zwischen den Tags vorkommen :/ -->
+              <ul class="head_navigation">
+                <li><a href="{{ url_for('index') }}">Fachschaftstool</a></li><li><a href="{{ url_for('add') }}">Eintragen</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="http://kif.fsinf.de/wiki/KIF415:Hauptseite">KIF-Wiki</a></li>
+              </ul>
+            </div>
+            <div id="body">
+              {% block content %}
+              {% endblock %}
+            </div>
+            <div id="footer">
+              <ul>
+                <li>
+                  <a class="action" accesskey="h" href="{{ url_for('index') }}">Fachschaftstool</a>
+                </li>
+                <li>
+                  <a class="action" accesskey="j" href="{{ url_for('add') }}">Eintragen</a>
+                </li>
+                <li>
+                  <a class="action" accesskey="j" href="{{ url_for('download') }}">Download</a>
+                </li>
+                <li>
+                  <a class="action" accesskey="q" href="http://kif.fsinf.de/wiki/KIF415:Hauptseite">KIF-Wiki</a>
+                </li>
+              </ul>
+              {% block footer %}
+              {% endblock %}
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/templates/fachschaft.tex b/templates/fachschaft.tex
new file mode 100644 (file)
index 0000000..4ad5b43
--- /dev/null
@@ -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 (file)
index 0000000..1b7d512
--- /dev/null
@@ -0,0 +1,13 @@
+{% extends "base.html" %}
+{% block content %}
+<h2>KIF 41,5 Fachschaftentool</h2>
+<p>
+  <a href="{{ url_for('add') }}">Eintragen</a>
+</p>
+
+<ul>
+{% for fachschaft in fachschaften %}
+<li><a href="{{ url_for('show', id=fachschaft.rowid) }}">{{fachschaft.langname}}</a></li>
+{% endfor %}
+</ul>
+{% endblock %}
diff --git a/templates/show.html b/templates/show.html
new file mode 100644 (file)
index 0000000..0ecc0ef
--- /dev/null
@@ -0,0 +1,31 @@
+{% extends "base.html" %}
+{% block content %}
+<h2>{{fachschaft.kurzname}}</h2>
+({{fachschaft.langname}})
+
+<table>
+  <tr><td>Land/Bundesland</td><td>{{fachschaft.land}}</td></tr>
+  <tr><td>Stadt</td><td>{{fachschaft.stadt}}</td></tr>
+  <tr><td>Studenten (Uni)</td><td>{{fachschaft.studenten}}</td></tr>
+  <tr><td>Fachschaftsorgan</td><td>{{fachschaft.organ}}</td></tr>
+  <tr><td>Vertretene Studenten</td><td>{{fachschaft.vertreten}}</td></tr>
+  <tr><td>Organisationsform</td><td>{{fachschaft.organisation}}</td></tr>
+  <tr><td>Aktive Fachschaftler</td><td>{{fachschaft.fachschaftler}}</td></tr>
+<table>
+
+<h4>Studiengänge</h4>
+<table>
+<tr>
+  <th>Studiengang</th>
+  <th>Anfänger 2013</th>
+  <th>Anfänger 2012</th>
+</tr>
+{% for studiengang in studiengaenge %}
+<tr>
+  <td>{{studiengang.name}}</td>
+  <td>{{studiengang.anf_dieses}}</td>
+  <td>{{studiengang.anf_vorjahr}}</td>
+</tr>
+{% endfor %}
+</table>
+{% endblock %}