aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorubq323 <ubq323>2021-06-26 00:07:10 +0000
committerubq323 <ubq323>2021-06-26 00:07:10 +0000
commitccb0394a52050f21701c856239f999ede529f71b (patch)
treecdb365ea94bf58f51feabd69ee12b48d6e30ffc6
parent3b31c84972d566bc6de569e1df9e96cf7e239f23 (diff)
voting now works
-rw-r--r--apioforum/db.py1
-rw-r--r--apioforum/thread.py41
2 files changed, 37 insertions, 5 deletions
diff --git a/apioforum/db.py b/apioforum/db.py
index 271ab75..1faa167 100644
--- a/apioforum/db.py
+++ b/apioforum/db.py
@@ -104,6 +104,7 @@ CREATE TABLE votes (
poll INTEGER NOT NULL,
option_idx INTEGER NOT NULL,
time TIMESTAMP NOT NULL,
+ current INTEGER NOT NULL,
FOREIGN KEY ( poll, option_idx ) REFERENCES poll_options(poll, option_idx)
);
ALTER TABLE posts ADD COLUMN vote INTEGER REFERENCES votes(id);
diff --git a/apioforum/thread.py b/apioforum/thread.py
index 3e03a67..559f9b2 100644
--- a/apioforum/thread.py
+++ b/apioforum/thread.py
@@ -37,6 +37,29 @@ def view_thread(thread_id):
return render_template("view_thread.html",posts=posts,thread=thread,tags=tags,poll=poll)
+
+
+
+def register_vote(thread,pollval):
+ if pollval is None or pollval == 'dontvote':
+ return
+ option_idx = int(pollval)
+ db = get_db()
+ cur = db.cursor()
+ cur.execute("""
+ UPDATE votes
+ SET current = 0
+ WHERE poll = ? AND user = ?;
+ """,(thread['poll'],g.user))
+ cur.execute("""
+ INSERT INTO votes (user,poll,option_idx,time,current)
+ VALUES (?,?,?,current_timestamp,1);
+ """,(g.user,thread['poll'],option_idx))
+ vote_id = cur.lastrowid
+ return vote_id
+
+
+
@bp.route("/<int:thread_id>/create_post", methods=("POST",))
def create_post(thread_id):
if g.user is None:
@@ -46,17 +69,25 @@ def create_post(thread_id):
db = get_db()
content = request.form['content']
thread = db.execute("SELECT * FROM threads WHERE id = ?;",(thread_id,)).fetchone()
- print(request.form.get('poll'))
if len(content.strip()) == 0:
flash("you cannot post an empty message")
elif not thread:
flash("that thread does not exist")
else:
+ vote_id = None
+ if thread['poll'] is not None:
+ pollval = request.form.get('poll')
+ try:
+ vote_id = register_vote(thread,pollval)
+ except ValueError:
+ flash("invalid poll form value")
+ return redirect(url_for('thread.view_thread',thread_id=thread_id))
+
cur = db.cursor()
- cur.execute(
- "INSERT INTO posts (thread,author,content,created) VALUES (?,?,?,current_timestamp);",
- (thread_id,g.user,content)
- )
+ cur.execute("""
+ INSERT INTO posts (thread,author,content,created,vote)
+ VALUES (?,?,?,current_timestamp,?);
+ """,(thread_id,g.user,content,vote_id))
post_id = cur.lastrowid
cur.execute(
"UPDATE threads SET updated = current_timestamp WHERE id = ?;",