This repository has been archived on 2023-10-10. You can view files and clone it, but cannot push or open issues/pull-requests.
cutedb/webapp/views.py

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)