aboutsummaryrefslogtreecommitdiffstats
path: root/wedding.py
blob: 17bff5ea49950be42425d3e755567043bc6a7828 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# -*- coding: utf-8 -*-
import sqlite3
#all the imports
from flask import Flask, request, session, g, redirect, url_for, render_template
from flask import flash
from functools import wraps
from collections import defaultdict
from flask.ext.babel import Babel, gettext, refresh

app = Flask(__name__)
app.config.from_envvar('CONF')
babel = Babel(app)

@babel.localeselector
def get_locale():
    locale = session.get('lang', None)
    if locale is not None:
        return locale
    return request.accept_languages.best_match(['en', 'fr', 'sr'])

def query_db(query, args=(), one=False):
    cur = get_db().execute(query, args)
    rv = cur.fetchone() if one else cur.fetchall()
    cur.close()
    return rv

def connect_db():
    conn = sqlite3.connect(app.config['DATABASE'],
                           detect_types=sqlite3.PARSE_DECLTYPES)
    conn.row_factory = sqlite3.Row
    return conn

def get_db():
    db = getattr(g, 'sqlite_db', None)
    if db is None:
        db = g.sqlite_db = connect_db()
    return db

@app.teardown_appcontext
def close_db(error):
    """Closes the database again at the end of the request."""
    db = getattr(g, 'sqlite_db', None)
    if db:
        db.close()

def login_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user_name' not in session:
            return redirect(url_for('login', next=request.url))
        return f(*args, **kwargs)
    return decorated_function

@app.route('/getting/')
@login_required
def getting_there():
    return render_template("getting.html")

@app.route('/gifts/')
@login_required
def gifts():
    return render_template("gifts.html")

@app.route('/lodging/')
@login_required
def lodging():
    return render_template("lodging.html")

@app.route('/rsvp/', methods=['GET', 'POST'])
@login_required
def rsvp():
    if request.method == 'GET':
        r = query_db("SELECT * from guests where user_name=?",
                     (session["user_name"],), one=True)
        return render_template("rsvp.html",
                               form=r)
    if request.method == 'POST':
        db = get_db()
        update_string = []
        args = []
        for k in ['full_name', 'email', 'mailing', 'plusonename', 'kidsnames', 'comments']:
            v = request.form.get(k)
            if v:
                update_string.append("{0}=?".format(k))
                args.append(v)
        for k in ["rsvp", "plusone", "kids"]:
            v = request.form.get(k, type=int)
            if v:
                update_string.append("{0}=?".format(k))
                args.append(v)

        if update_string:
            update_string = ",".join(update_string)
            query = "UPDATE guests set {0} , lastupdate=current_timestamp " \
                    "WHERE user_name=?".format(update_string)
            with db:
                db.execute(query, tuple(args+[session['user_name']]))
                flash(gettext("We have updated your information!"))
                return redirect(url_for('rsvp'))
        else:
            flash(gettext("We could not update your information!"))
            return redirect(url_for('rsvp'))

@app.route('/')
@app.route('/home/')
@login_required
def main_page():
    return render_template("main.html")

@app.route('/logout')
def logout():
    session.clear()
    return redirect(url_for('login'))

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if 'user_name' in session:
        return redirect(url_for('main_page'))

    error = None
    if request.method == 'POST':
        session['lang'] = request.form['language']
        refresh()
        db = get_db()
        with db:
            c = db.execute("SELECT * from guests where user_name=?",
                           (request.form['username'],))
            if not c.fetchone():
                flash(gettext("Wrong name"))
                return redirect(url_for('login'))
        if request.form['password'] not in [app.config['PASSWORD'],
                                            app.config['PASSWORD2']]:
            flash(gettext("Wrong password"))
            return redirect(url_for('login'))
        session['user_name'] = request.form['username']
        return redirect(url_for('main_page'))

    return render_template('login.html')

if __name__=="__main__":
    app.run()