From f42b7613c22add2650031ac5fa04065d82393436 Mon Sep 17 00:00:00 2001 From: Guillaume Subiron Date: Mon, 28 May 2012 22:09:37 +0200 Subject: [PATCH] Edit vote --- main.py | 59 +++++++++++++++- schema.sql | 10 ++- templates/edit_vote.html | 146 +++++++++++++++++++++++++++++++++++++++ templates/new_vote.html | 2 +- 4 files changed, 213 insertions(+), 4 deletions(-) create mode 100644 templates/edit_vote.html diff --git a/main.py b/main.py index 4662b59..c26c2cb 100755 --- a/main.py +++ b/main.py @@ -204,12 +204,67 @@ def add_vote(): g.db.execute('insert into votes (title, description, date_begin, date_end, is_transparent, is_public, is_multiplechoice) values (?, ?, ?, ?, ?, ?, ?)', [request.form['title'], request.form['description'], date_begin, date_end, transparent, public, multiplechoice]) g.db.commit() - flash('New entry was successfully posted', 'info') - return redirect(url_for('home')) + vote = query_db('select * from votes where title = ? and date_begin = ? order by id desc', + [request.form['title'], date_begin], one=True) # :DEBUG:maethor:20120528: Bug possible car le titre n'est pas unique + if vote is None: + flash(u'Une erreur est survenue !', 'error') + return redirect(url_for('home')) + else: + flash(u"Le vote a été créé", 'info') + return redirect(url_for('edit_vote', voteid=vote['id'])) else: flash(u'Vous devez spécifier un titre.', 'error') return render_template('new_vote.html') +@app.route('/votes/admin/edit/', methods=['GET', 'POST']) +def edit_vote(voteid): + if not session.get('user').get('is_admin'): + abort(401) + vote = query_db('select * from votes where id = ?', [voteid], one=True) + if vote is None: + abort(404) + #if request.method == 'POST': + # :TODO:maethor:20120528 + choices = query_db('select * from choices where id_vote = ?', [voteid]) + return render_template('edit_vote.html', vote=vote, choices=choices) + +@app.route('/votes/admin/addchoice/', methods=['POST']) +def add_choice(voteid): + if not session.get('user').get('is_admin'): + abort(401) + vote = query_db('select * from votes where id = ?', [voteid], one=True) + if vote is None: + abort(404) + g.db.execute('insert into choices (name, id_vote) values (?, ?)', [request.form['title'], voteid]) + g.db.commit() + return redirect(url_for('edit_vote', voteid=voteid)) + +@app.route('/votes/admin/editchoice//', methods=['POST', 'DELETE']) +def edit_choice(voteid, choiceid): + if not session.get('user').get('is_admin'): + abort(401) + choice = query_db('select * from choices where id = ? and id_vote = ?', [choiceid, voteid], one=True) + if choice is None: + abort(404) + if request.method == 'POST': + g.db.execute('update choices set name=? where id = ? and id_vote = ?', [request.form['title'], choiceid, voteid]) + g.db.commit() + elif request.method == 'DELETE': # :COMMENT:maethor:20120528: I can't find how to use it from template + g.db.execute('delete from choices where id = ? and id_vote = ?', [choiceid, voteid]) + g.db.commt() + return redirect(url_for('edit_vote', voteid=voteid)) + +@app.route('/votes/admin/deletechoice//') +def delete_choice(voteid, choiceid): + if not session.get('user').get('is_admin'): + abort(401) + choice = query_db('select * from choices where id = ? and id_vote = ?', [choiceid, voteid], one=True) + if choice is None: + abort(404) + g.db.execute('delete from choices where id = ? and id_vote = ?', [choiceid, voteid]) + g.db.commit() + return redirect(url_for('edit_vote', voteid=voteid)) + #------ # Main diff --git a/schema.sql b/schema.sql index b7fa00b..5529a31 100644 --- a/schema.sql +++ b/schema.sql @@ -1,3 +1,4 @@ +drop table if exists choices; drop table if exists votes; drop table if exists users; @@ -22,13 +23,20 @@ create table votes ( is_public INTEGER default 1 not null, is_multiplechoice INTEGER default 1 not null, is_weighted INTEGER default 0 not null, - is_closed INTEGER default 0 not null, + is_open INTEGER default 0 not null, id_author INTEGER, -- :COMMENT:maethor:120528: not null ? --id_role INTEGER, FOREIGN KEY(id_author) REFERENCES users(id) --FOREIGN KEY(id_role) REFERENCES role(id) ); +create table choices ( + id INTEGER primary key autoincrement, + name TEXT not null, + id_vote INTEGER not null, + FOREIGN KEY(id_vote) REFERENCES vote(id) +); + -- Test data insert into users (email, password, name, organization, is_admin, key) values ("admin@admin.fr", "admin", "Toto (admin) Tata", "World corp", 1, "test"); diff --git a/templates/edit_vote.html b/templates/edit_vote.html new file mode 100644 index 0000000..4319631 --- /dev/null +++ b/templates/edit_vote.html @@ -0,0 +1,146 @@ +{% extends "layout.html" %} +{% block body %} + +
+
+
+
Édition du vote +
+ +
+ + * +
+
+
+ +
+ +
+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+ +

Groupe d'utilisateur concernés par le vote et ayant le droit de voter

+
+
+
+
+
+
+
+ + Options +
+
+
+
+ +
+ +
+
+
+ +
+ + + {% if not vote.is_open %} + + {% endif %} +
+
+
+
+
+
+
+ +
+ +
+
+
+ + +
+
+
+
+ +
+
Choix + + + + + + + {% for choice in choices %} + + + + + + + {% endfor %} + + + + + + + +
Titre + Actions +
+ Supprimer
+ +
+
+
+
+ +{% endblock %} diff --git a/templates/new_vote.html b/templates/new_vote.html index 575e9f6..0adca60 100644 --- a/templates/new_vote.html +++ b/templates/new_vote.html @@ -67,7 +67,7 @@
- +
-- 2.20.1