X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;ds=sidebyside;f=main.py;h=bff42a018d94c9d87586a810251feed88a4d2e7f;hb=e39a423e56697a035ea099e1f0ab4af1917a5d9e;hp=c26c2cb171165085ec3fcfed02db7efb5ab86073;hpb=f42b7613c22add2650031ac5fa04065d82393436;p=cavote.git diff --git a/main.py b/main.py index c26c2cb..bff42a0 100755 --- a/main.py +++ b/main.py @@ -165,6 +165,41 @@ def add_user(): flash(u"Vous devez spécifier une adresse email.", 'error') return render_template('add_user.html') +#------------- +# Roles admin + +@app.route('/roles') +def show_roles(): + if not session.get('user').get('is_admin'): + abort(401) + roles = query_db('select * from roles') + return render_template('show_roles.html', roles=roles) + +@app.route('/roles/admin/add', methods=['POST']) +def add_role(): + if not session.get('user').get('is_admin'): + abort(401) + if request.method == 'POST': + if request.form['name']: + g.db.execute('insert into roles (name) values (?)', [request.form['name']]) + g.db.commit() + else: + flash(u"Vous devez spécifier un nom.", "error") + return redirect(url_for('show_roles')) + +@app.route('/roles/admin/delete/') +def del_role(idrole): + if not session.get('user').get('is_admin'): + abort(401) + role = query_db('select * from roles where id = ?', [idrole], one=True) + if role is None: + abort(404) + if role['system']: + abort(401) + g.db.execute('delete from roles where id = ?', [idrole]) + g.db.commit() + return redirect(url_for('show_roles')) + #------------ # Votes list @@ -172,15 +207,41 @@ def add_user(): def show_votes(votes): today = date.today() if votes == 'all': - votes = query_db('select title, description, date_begin, date_end from votes order by id desc') + votes = query_db('select * from votes order by id desc') elif votes == 'archive': - votes = query_db('select title, description, date_begin, date_end from votes where date_end < (?) order by id desc', [today]) + votes = query_db('select * from votes where date_end < (?) order by id desc', [today]) elif votes == 'current': - votes = query_db('select title, description, date_begin, date_end from votes where date_end >= (?) order by id desc', [today]) + votes = query_db('select * from votes where date_end >= (?) order by id desc', [today]) else: abort(404) return render_template('show_votes.html', votes=votes) +#------ +# Vote + +def can_see_vote(idvote, iduser=-1): + user = query_db('select * from users where id=?', [iduser], one=True) + vote = query_db('select * from votes where id=?', [idvote], one=True) + if user is None and not vote.is_public: + return False + return True # :TODO:maethor:20120529: Check others things + +def can_vote(idvote, iduser=-1): + if not can_see_vote(idvote, iduser): + return False + return True # :TODO:maethor:20120529: Check others things + +@app.route('/vote/') +def show_vote(idvote): + vote = query_db('select * from votes where id=?', [idvote], one=True) + if vote is None: + abort(404) + if can_see_vote(idvote, session.get('user').get('id')): + choices = query_db('select * from choices where id_vote=?', [idvote]) + return render_template('vote.html', vote=vote, choices=choices, can_vote=can_vote(idvote, session.get('user').get('id'))) + flash('Vous n\'avez pas le droit de voir ce vote, désolé.') + return(url_for('home')) + #------------- # Votes admin @@ -201,8 +262,11 @@ def add_vote(): public = 1 if 'multiplechoice' in request.form.keys(): multiplechoice = 1 - 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]) + role = query_db('select id from roles where name = ?', [request.form['role']], one=True) + if role is None: + role[id] = 1 + g.db.execute('insert into votes (title, description, category, date_begin, date_end, is_transparent, is_public, is_multiplechoice, id_role, id_author) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', + [request.form['title'], request.form['description'], request.form['category'], date_begin, date_end, transparent, public, multiplechoice, role['id'], session['user']['id']]) g.db.commit() 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 @@ -214,7 +278,8 @@ def add_vote(): 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') + groups = query_db('select * from roles') + return render_template('new_vote.html', groups=groups) @app.route('/votes/admin/edit/', methods=['GET', 'POST']) def edit_vote(voteid): @@ -223,10 +288,31 @@ def edit_vote(voteid): vote = query_db('select * from votes where id = ?', [voteid], one=True) if vote is None: abort(404) - #if request.method == 'POST': - # :TODO:maethor:20120528 + if request.method == 'POST': + if request.form['title']: + # :TODO:maethor:120529: Calculer date_begin pour pouvoir y ajouter duration et obtenir date_end + transparent = 0 + public = 0 + if 'transparent' in request.form.keys(): + transparent = 1 + if 'public' in request.form.keys(): + public = 1 + isopen = 0 + if request.form['status'] == 'Ouvert': # :TODO:maethor:20120529: Check if there is at least 2 choices before + isopen = 1 + g.db.execute('update votes set title = ?, description = ?, category = ?, is_transparent = ?, is_public = ?, is_open = ? where id = ?', + [request.form['title'], request.form['description'], request.form['category'], transparent, public, isopen, voteid]) + g.db.commit() + vote = query_db('select * from votes where id = ?', [voteid], one=True) + flash(u"Le vote a bien été mis à jour.", "success") + else: + flash(u'Vous devez spécifier un titre.', 'error') + + # :TODO:maethor:20120529: Calculer la durée du vote (différence date_end - date_begin) + vote['duration'] = 15 + group = query_db('select name from roles where id = ?', [vote['id_role']], one=True) choices = query_db('select * from choices where id_vote = ?', [voteid]) - return render_template('edit_vote.html', vote=vote, choices=choices) + return render_template('edit_vote.html', vote=vote, group=group, choices=choices) @app.route('/votes/admin/addchoice/', methods=['POST']) def add_choice(voteid):