Example #1
0
def readUsers():
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute("SELECT * FROM benutzer")
    users = curs.fetchall()
    return users
Example #2
0
def newCommentPost():
    id = request.form['kennung']
    text = request.form.get('comment')
    if request.form.get('anonym'):
        sichtbarkeit = request.form.get('anonym')
    else:
        sichtbarkeit = 'oeffentlich'
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute("INSERT INTO kommentar (text, sichtbarkeit) VALUES (?,?)",
                 (text, sichtbarkeit))
    try:
        conn.commit()
    except Exception as e:
        print(e)
    curs.execute("SELECT MAX(id) FROM kommentar")
    kid = curs.fetchall()
    kid = kid[0][0]
    curs.execute(
        "INSERT INTO schreibt (benutzer, projekt, kommentar) VALUES (?,?,?)",
        (currentUser, id, kid))
    try:
        conn.commit()
    except Exception as e:
        print(e)
    return redirect(url_for('viewProjectGet', kennung=id))
Example #3
0
def viewProfileGet():
    if request.args.get('benutzer'):
        email = request.args.get('benutzer')
    else:
        email = currentUser
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute("SELECT name FROM benutzer WHERE email =  ?", (email, ))
    name = curs.fetchall()
    name = name[0][0]
    curs.execute(
        "SELECT p.kennung, p.titel, p.status, k.icon, s.totalSpende FROM projekt p JOIN kategorie k ON p.kategorie=k.id LEFT JOIN (SELECT projekt, SUM(spendenbetrag) AS totalSpende FROM spenden GROUP BY projekt) AS s ON p.kennung=s.projekt WHERE p.ersteller = ? ORDER BY p.kennung",
        (email, ))
    erstellt = curs.fetchall(
    )  # [(1, 'Ubuntu Touch', 'offen', '/static/...', 17351), ...]
    erstellt = [(er[0], er[1], er[2], er[3], er[4]) if er[4] != None else
                (er[0], er[1], er[2], er[3], 0) for er in erstellt]
    curs.execute(
        "SELECT p.kennung, p.titel, p.finanzierungslimit, p.status, k.icon, s.spendenbetrag FROM spenden s, projekt p, kategorie k WHERE p.kategorie=k.id AND s.projekt=p.kennung AND s.sichtbarkeit='oeffentlich' AND s.spender=?",
        (email, ))
    unterstuetzt = curs.fetchall(
    )  # [(1, 'Ubuntu Touch', 50000, 'offen', '/static/...', 1500.56), ...]
    return render_template("view_profile.html",
                           email=email,
                           name=name,
                           noErstellt=len(erstellt),
                           noUnterstuetzt=len(unterstuetzt),
                           erstellt=erstellt,
                           unterstuetzt=unterstuetzt)
Example #4
0
def newCommentGet():
    id = request.args.get('kennung')
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute("SELECT titel FROM projekt WHERE kennung = ?", (id, ))
    titel = curs.fetchall()
    titel = titel[0][0]
    return render_template('new_comment.html', titel=titel, kennung=id)
Example #5
0
def editProjectPost():
    id = request.form.get('kennung')
    titel = request.form.get('titel')
    if titel == None:
        return redirect(
            url_for("editProjectGet", kennung=id, warningTitel=True))
    elif len(titel) > 30:
        return redirect(
            url_for("editProjectGet", kennung=id, warningTitel=True))
    finanzierungslimit = request.form.get('finanzierungslimit')
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute("SELECT finanzierungslimit FROM projekt WHERE kennung = ?",
                 (id, ))
    limitBefore = curs.fetchall()[0][0]
    if finanzierungslimit == None:
        return redirect(
            url_for("editProjectGet", kennung=id, warningLimit=True))
    elif float(finanzierungslimit) < 100 or float(finanzierungslimit) < float(
            limitBefore):
        return redirect(
            url_for("editProjectGet", kennung=id, warningLimit=True))
    kategorie = request.form.get('kategorie')
    vorgaenger = request.form.get('vorgaenger')
    if int(vorgaenger) == 0:
        vorgaenger = None
    beschreibung = request.form.get('beschreibung')
    titel = request.form['titel']
    finanzierungslimit = request.form['finanzierungslimit']
    kategorie = request.form['kategorie']
    vorgaenger = request.form['vorgaenger']
    beschreibung = request.form['beschreibung']
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute(
        "UPDATE projekt SET titel = ?, finanzierungslimit = ?, kategorie = ?, vorgaenger = ?, beschreibung = ? WHERE kennung = ?",
        (titel, finanzierungslimit, kategorie, vorgaenger, beschreibung, id))
    try:
        conn.commit()
    except Exception as e:
        print(e)
    return redirect(url_for('viewProjectGet', kennung=id))
Example #6
0
def viewMainPost():
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    id = request.args.get('kennung')
    # 1) --- Delete Kommentare ---
    curs.execute("SELECT kommentar FROM schreibt WHERE projekt = ?", (id, ))
    kommentarIDs = curs.fetchall()  # [(1,), (2,)]
    kommentarIDs = [kommentarID[0] for kommentarID in kommentarIDs]  # [1,2]
    if len(kommentarIDs) > 0:  # If there are actually any
        curs.execute("DELETE FROM schreibt WHERE projekt = ?", (id, ))
        try:
            conn.commit()
        except Exception as e:
            print(e)
        for kommentarID in kommentarIDs:
            curs.execute("DELETE FROM kommentar WHERE id = ?", (kommentarID, ))
            try:
                conn.commit()
            except Exception as e:
                print(e)
    # 2) --- Give money back to Spender ---
    curs.execute(
        "SELECT spender, spendenbetrag FROM spenden WHERE projekt = ?", (id, ))
    spend = curs.fetchall(
    )  # [('*****@*****.**', 15000.0), ('*****@*****.**', 1500.56)]
    print(spend)
    for (spender, spendenbetrag) in spend:
        curs.execute(
            "UPDATE konto SET guthaben = guthaben + ? WHERE inhaber = ?",
            (spendenbetrag, spender))
        try:
            conn.commit()
        except Exception as e:
            print(e)
    # 3) --- Delete Spenden ---
    curs.execute("DELETE FROM spenden WHERE projekt = ?", (id, ))
    try:
        conn.commit()
    except Exception as e:
        print(e)
    # 4) --- Delete Projekt ---
    curs.execute("UPDATE projekt SET vorgaenger = NULL WHERE vorgaenger = ?",
                 (id, ))
    try:
        conn.commit()
    except Exception as e:
        print(e)
    curs.execute("DELETE FROM projekt WHERE kennung = ?", (id, ))
    try:
        conn.commit()
    except Exception as e:
        print(e)
    return redirect(url_for("viewMainGet"))
Example #7
0
def modifyPfad():
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute("SELECT * FROM kategorie")
    rows = curs.fetchall()
    for row in rows:
        pic = re.search('[a-z]+\.png', row[2]).group(0)
        pic = "/static/" + pic
        curs.execute("UPDATE kategorie SET icon = ? WHERE id = ?",
                     (pic, row[0]))
        conn.commit()
Example #8
0
def newProjectGet():
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    warningTitel = request.args.get('warningTitel')
    warningLimit = request.args.get('warningLimit')
    curs.execute("SELECT * FROM projekt WHERE ersteller = ?", (currentUser, ))
    projekte = curs.fetchall()
    return render_template("new_project.html",
                           vorgaenger=projekte,
                           warningTitel=warningTitel,
                           warningLimit=warningLimit)
Example #9
0
def newProjectFundPost():
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    id = request.form['kennung']
    spender = currentUser
    curs.execute('SELECT * FROM spenden WHERE spender = ? AND projekt = ?',
                 (spender, id))
    results = curs.fetchall()
    if len(results) > 0:
        return redirect(url_for('newProjectFundGet', kennung=id, warning=2))
    spendenbetrag = request.form['spendenbetrag']
    curs.execute("SELECT guthaben FROM konto WHERE inhaber = ?", (spender, ))
    guthaben = curs.fetchall()[0][0]
    if float(spendenbetrag) > guthaben:
        return redirect(url_for('newProjectFundGet', kennung=id, warning=1))
    if request.form.get('anonym'):
        sichtbarkeit = request.form.get('anonym')
        print(sichtbarkeit)
    else:
        sichtbarkeit = 'oeffentlich'

    curs.execute(
        "INSERT INTO spenden (spender, projekt, spendenbetrag, sichtbarkeit) VALUES (?,?,?,?)",
        (spender, id, spendenbetrag, sichtbarkeit))
    conn.commit()
    curs.execute("UPDATE konto SET guthaben=guthaben - ? WHERE inhaber = ?",
                 (spendenbetrag, spender))
    conn.commit()

    # --- Überprüfe ob das Finanzierungslimit schon erreicht wird. Wenn ja, status offen -> geschlossen ---
    curs.execute(
        "SELECT SUM(spendenbetrag) FROM spenden GROUP BY projekt HAVING projekt = ?",
        (id, ))
    spendensumme = curs.fetchall()[0][0]
    curs.execute("SELECT finanzierungslimit FROM projekt WHERE kennung = ?",
                 (id, ))
    finanzierungslimit = curs.fetchall()[0][0]
    if spendensumme >= finanzierungslimit:
        curs.execute(
            "UPDATE projekt SET status = 'geschlossen' WHERE kennung = ?",
            (id, ))
        try:
            conn.commit()
        except Exception as e:
            print(e)
    return redirect(url_for('viewProjectGet', kennung=id))
Example #10
0
def editProjectGet():
    id = request.args.get(
        'kennung')  # takes the value of the button "Projekt editieren"
    warningTitel = request.args.get('warningTitel')
    warningLimit = request.args.get('warningLimit')
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute(
        "SELECT kennung, titel, CAST(beschreibung AS VARCHAR(1000)) AS beschreibung, status, finanzierungslimit, ersteller, vorgaenger, kategorie FROM projekt WHERE kennung = ?",
        (id, ))
    result = curs.fetchall()[0]
    titel = result[1]
    beschreibung = result[2]
    finanzierungslimit = result[4]
    vorgaenger = result[6]  # projekt id (nur 1)
    curs.execute("SELECT kennung, titel FROM projekt WHERE ersteller = ?",
                 (currentUser, ))
    projekte = curs.fetchall(
    )  # [(1, 'Ubuntu Touch'), (2, 'Ubuntu Touch Pro'),...]
    kategorie = result[7]
    health, art, edu, tech = '', '', '', ''
    if kategorie == 1:
        health = 'selected'
    elif kategorie == 2:
        art = 'selected'
    elif kategorie == 3:
        edu = 'selected'
    elif kategorie == 4:
        tech = 'selected'
    return render_template('edit_project.html',
                           kennung=id,
                           titel=titel,
                           finanzierungslimit=finanzierungslimit,
                           health=health,
                           art=art,
                           edu=edu,
                           tech=tech,
                           vorgaenger=projekte,
                           before=vorgaenger,
                           beschreibung=beschreibung,
                           warningTitel=warningTitel,
                           warningLimit=warningLimit)
Example #11
0
def searchProjectPost():
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    queryText = request.form['search']
    queryText = queryText.lower()
    if queryText == '':
        return render_template('search_project.html', warning=True)
    curs.execute(
        "SELECT kennung, titel, benutzer.name, status, kategorie.icon, email FROM projekt JOIN kategorie ON projekt.kategorie=kategorie.id JOIN benutzer ON projekt.ersteller=benutzer.email WHERE lcase(titel) LIKE ?",
        (queryText + '%', ))
    queryRes = curs.fetchall()
    curs.execute(
        "SELECT projekt, SUM(spendenbetrag) FROM spenden GROUP BY projekt")
    spendenbetraege = curs.fetchall()

    resIDs = [res[0] for res in queryRes]
    spendenbetraegeIDs = [
        spendenbetrag[0] for spendenbetrag in spendenbetraege
    ]

    projekteHTML = []

    i = 0
    for resID in resIDs:
        if resID in spendenbetraegeIDs:
            projekt = queryRes[i]
            spendenbetrag = [
                spendenbetrag[1] for spendenbetrag in spendenbetraege
                if resID == spendenbetrag[0]
            ]
            spendenbetrag = spendenbetrag[0]
            projekteHTML.append(
                (projekt[0], projekt[1], projekt[2], projekt[3], projekt[4],
                 projekt[5], spendenbetrag))
        else:
            projekt = queryRes[i]
            projekteHTML.append((projekt[0], projekt[1], projekt[2],
                                 projekt[3], projekt[4], projekt[5], 0))
        i += 1

    return render_template('search_project.html', projekte=projekteHTML)
Example #12
0
 def __init__(self):
     #dbUtil = connect.DBUtil().getExternalConnection("testdb")
     self.conn = connect.DBUtil().getExternalConnection()
     self.conn.jconn.setAutoCommit(False)
     self.complete = None
Example #13
0
def viewMainGet():
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute(
        "SELECT kennung, titel, benutzer.name, kategorie.icon, email FROM projekt JOIN kategorie ON projekt.kategorie=kategorie.id JOIN benutzer ON projekt.ersteller=benutzer.email WHERE status='offen'"
    )
    offeneProjekte = curs.fetchall()
    curs.execute(
        "SELECT kennung, titel, benutzer.name, kategorie.icon, email FROM projekt JOIN kategorie ON projekt.kategorie=kategorie.id JOIN benutzer ON projekt.ersteller=benutzer.email WHERE status='geschlossen'"
    )
    abgeschlosseneProjekte = curs.fetchall()
    curs.execute(
        "SELECT projekt, SUM(spendenbetrag) FROM spenden GROUP BY projekt")
    spendenbetraege = curs.fetchall()

    offeneProjekteIDs = [
        offenesProjekt[0] for offenesProjekt in offeneProjekte
    ]
    spendenbetraegeIDs = [
        spendenbetrag[0] for spendenbetrag in spendenbetraege
    ]
    offeneProjekteHTML = []

    i = 0
    for offenesProjektID in offeneProjekteIDs:
        if offenesProjektID in spendenbetraegeIDs:
            offenesProjekt = offeneProjekte[i]
            spendenbetrag = [
                spendenbetrag[1] for spendenbetrag in spendenbetraege
                if offenesProjektID == spendenbetrag[0]
            ]
            spendenbetrag = spendenbetrag[0]
            offeneProjekteHTML.append(
                (offenesProjekt[0], offenesProjekt[1], offenesProjekt[2],
                 offenesProjekt[3], offenesProjekt[4], spendenbetrag))
        else:
            offenesProjekt = offeneProjekte[i]
            offeneProjekteHTML.append(
                (offenesProjekt[0], offenesProjekt[1], offenesProjekt[2],
                 offenesProjekt[3], offenesProjekt[4], 0))
        i += 1

    abgeschlosseneProjekteIDs = [
        abgeschlossenesProjekt[0]
        for abgeschlossenesProjekt in abgeschlosseneProjekte
    ]
    abgeschlosseneProjekteHTML = []

    i = 0
    for abgeschlossenesProjektID in abgeschlosseneProjekteIDs:
        if abgeschlossenesProjektID in spendenbetraegeIDs:
            abgeschlossenesProjekt = abgeschlosseneProjekte[i]
            spendenbetrag = [
                spendenbetrag[1] for spendenbetrag in spendenbetraege
                if abgeschlossenesProjektID == spendenbetrag[0]
            ]
            spendenbetrag = spendenbetrag[0]
            abgeschlosseneProjekteHTML.append(
                (abgeschlossenesProjekt[0], abgeschlossenesProjekt[1],
                 abgeschlossenesProjekt[2], abgeschlossenesProjekt[3],
                 abgeschlossenesProjekt[4], spendenbetrag))
        else:
            abgeschlossenesProjekt = abgeschlosseneProjekte[i]
            abgeschlosseneProjekteHTML.append(
                (abgeschlossenesProjekt[0], abgeschlossenesProjekt[1],
                 abgeschlossenesProjekt[2], abgeschlossenesProjekt[3],
                 abgeschlossenesProjekt[4], 0))
        i += 1

    return render_template("view_main.html",
                           offeneProjekte=offeneProjekteHTML,
                           abgeschlosseneProjekte=abgeschlosseneProjekteHTML)
Example #14
0
def viewProjectGet():
    id = request.args.get('kennung')
    conn = connect.DBUtil().getExternalConnection()
    conn.jconn.setAutoCommit(False)
    curs = conn.cursor()
    curs.execute(
        "SELECT kennung, titel, CAST(beschreibung AS VARCHAR(1000)) AS beschreibung, status, finanzierungslimit, ersteller, vorgaenger, kategorie FROM projekt WHERE kennung = ?",
        (id, ))
    result = curs.fetchall()[0]
    titel = result[1]
    beschreibung = result[2]
    status = result[3]
    finanzierungslimit = result[4]
    ersteller = result[5]
    if ersteller == currentUser:
        showEditProject = True
    else:
        showEditProject = None
    curs.execute("SELECT email, name FROM benutzer WHERE email = ?",
                 (ersteller, ))
    ersteller = (ersteller, curs.fetchall()[0][1])
    vorgaenger = result[6]
    if vorgaenger != None:
        curs.execute("SELECT kennung, titel FROM projekt WHERE kennung = ?",
                     (vorgaenger, ))
        vorgaenger = curs.fetchall()
        vorgaenger = (vorgaenger[0][0], vorgaenger[0][1])
    else:
        vorgaenger = []
    kategorie = result[7]
    curs.execute("SELECT icon FROM kategorie WHERE id = ?", (kategorie, ))
    pfad = curs.fetchall()[0][0]
    curs.execute(
        "SELECT SUM(spendenbetrag) FROM spenden GROUP BY projekt HAVING projekt = ?",
        (id, ))
    spendensumme = curs.fetchall()
    if len(spendensumme) > 0:
        spendensumme = spendensumme[0][0]
    else:
        spendensumme = 0
    curs.execute(
        "SELECT benutzer.name, spendenbetrag, sichtbarkeit FROM spenden JOIN benutzer ON spenden.spender=benutzer.email WHERE spenden.projekt= ? ORDER BY spendenbetrag DESC",
        (id, ))
    spender = curs.fetchall()
    curs.execute(
        "SELECT b.name, CAST(k.text AS VARCHAR(1000)) AS text, k.sichtbarkeit, k.datum FROM benutzer b, schreibt s, kommentar k WHERE b.email=s.benutzer AND k.id=s.kommentar AND s.projekt=? ORDER BY k.datum DESC",
        (id, ))
    kommentare = curs.fetchall()
    kommentare = [(kom[0], kom[1], kom[2], re.match('[0-9-]+ \d+:\d+',
                                                    kom[3]).group(0))
                  for kom in kommentare]
    return render_template("view_project.html",
                           kennung=id,
                           pfad=pfad,
                           titel=titel,
                           ersteller=ersteller,
                           beschreibung=beschreibung,
                           finanzierungslimit=finanzierungslimit,
                           spendensumme=spendensumme,
                           status=status,
                           vorgaenger=vorgaenger,
                           spender=spender,
                           kommentare=kommentare,
                           showEditProject=showEditProject)