90 lines
3.0 KiB
Python
90 lines
3.0 KiB
Python
import flask
|
|
import time
|
|
from webapp import app, config, database, forms
|
|
|
|
def get_quotes():
|
|
quotes = []
|
|
for _id, _up, _down, _text, _meta, _date in database.fetchall():
|
|
quote = {}
|
|
quote["id"] = str(_id)
|
|
score = _up - _down
|
|
quote["score"] = "+" if score >= 0 else ""
|
|
quote["score"] += str(score)
|
|
quote["votes"] = str(_up + _down)
|
|
quote["date"] = time.strftime("%y-%m-%d %H:%M %Z", time.localtime(_date))
|
|
quote["text"] = _text
|
|
quote["user_score"] = get_user_votes(_id)
|
|
quotes.append(quote)
|
|
return quotes
|
|
|
|
|
|
def get_user_votes(_id):
|
|
"""Get user votes (if any) for quote id."""
|
|
if ("vote_%i" % _id) in flask.session:
|
|
return int(flask.session["vote_%i" % _id])
|
|
return 0
|
|
|
|
def set_user_votes(_id, votes):
|
|
flask.session["vote_%i" % _id] = str(votes)
|
|
|
|
def upvote(_id):
|
|
if get_user_votes(_id) < 1:
|
|
if get_user_votes(_id) < 0:
|
|
# correcting vote
|
|
database.execute("UPDATE quotes SET _down = _down - 1 WHERE _id = ?;", _id)
|
|
else:
|
|
# normal vote
|
|
database.execute("UPDATE quotes SET _up = _up + 1 WHERE _id = ?;", _id)
|
|
set_user_votes(_id, get_user_votes(_id) + 1)
|
|
|
|
|
|
def downvote(_id):
|
|
if get_user_votes(_id) > -1:
|
|
if get_user_votes(_id) > 0:
|
|
# correcting vote
|
|
database.execute("UPDATE quotes SET _up = _up - 1 WHERE _id = ?;", _id)
|
|
else:
|
|
# normal vote
|
|
database.execute("UPDATE quotes SET _down = _down + 1 WHERE _id = ?;", _id)
|
|
set_user_votes(_id, get_user_votes(_id) - 1)
|
|
|
|
|
|
@app.route("/quotes/")
|
|
def recent_quotes():
|
|
database.execute("SELECT _id, _up, _down, _text, _meta, _date FROM quotes WHERE _approved = 1;")
|
|
quotes = get_quotes()
|
|
return flask.render_template("list.html", quotes=quotes, title="Recent Quotes")
|
|
|
|
@app.route("/quotes/queue")
|
|
def queue_quotes():
|
|
database.execute("SELECT _id, _up, _down, _text, _meta, _date FROM quotes WHERE _approved = 0;")
|
|
quotes = get_quotes()
|
|
return flask.render_template("list.html", quotes=quotes, title="Moderation Queue")
|
|
|
|
@app.route("/quotes/view/<int:_id>")
|
|
def quote_view(_id):
|
|
database.execute("SELECT _id, _up, _down, _text, _meta, _date FROM quotes WHERE _id = ?;", _id)
|
|
quotes = get_quotes()
|
|
return flask.render_template("list.html", quotes=quotes, title="Quote #%i" % _id)
|
|
|
|
@app.route("/quotes/up/<int:_id>")
|
|
def upvote_quote(_id):
|
|
upvote(_id)
|
|
return quote_view(_id)
|
|
|
|
@app.route("/quotes/down/<int:_id>")
|
|
def downvote_quote(_id):
|
|
downvote(_id)
|
|
return quote_view(_id)
|
|
|
|
|
|
@app.route("/new", methods=["GET", "POST"])
|
|
def new_quote():
|
|
form = forms.NewQuote(flask.request.form)
|
|
if flask.request.method == "POST" and form.validate():
|
|
database.execute("INSERT INTO quotes (_text, _meta, _date) VALUES (?, ?, ?);", form.text.data, form.meta.data, time.time())
|
|
flask.flash("Quote added to mdoeration queue.")
|
|
return flask.redirect(flask.url_for('recent_quotes'))
|
|
return flask.render_template('new_quote.html', form=form)
|
|
|