return query_db('select * from users where email = ? and password = ?', [username, password], one=True)
def connect_user(user):
- session['user'] = user # :KLUDGE:maethor:120528: Stoquer toute la ligne de la table users dans la session, c'est un peu crade…
+ session['user'] = user # :KLUDGE:maethor:120528: Stoquer toute la ligne de la table users dans la session, c'est un peu crade
#session['user']['id'] = user['id']
#session['user']['name'] = user['name']
#session['user']['email'] = user['email']
if user is None:
flash('Cet utilisateur n\'existe pas !', 'error')
else:
- # :TODO:maethor:120528: Générer la clé, la mettre dans la base de données et envoyer le mail
+ # :TODO:maethor:120528: Generer la cle, la mettre dans la base de données et envoyer le mail
flash(u"Un mail a été envoyé à " + user['email'], 'info')
return render_template('password_lost.html')
# User settings
@app.route('/user/<userid>')
-def show_user(userid):
+def user(userid):
if int(userid) != session.get('user').get('id'):
abort(401)
- return render_template('show_user.html')
+ return render_template('user.html')
@app.route('/user/settings/<userid>', methods=['GET', 'POST'])
-def user_settings(userid):
+def user_edit(userid):
if int(userid) != session.get('user').get('id'):
abort(401)
if request.method == 'POST':
disconnect_user() # :TODO:maethor:120528: Maybe useless, but this is simple way to refresh session :D
flash(u'Votre profil a été mis à jour !', 'success')
return redirect(url_for('login'))
- return render_template('user_settings.html')
+ return render_template('user_edit.html')
@app.route('/user/password/<userid>', methods=['GET', 'POST'])
def user_password(userid):
flash(u'Votre mot de passe a été mis à jour.', 'success')
else:
flash(u'Les mots de passe sont différents.', 'error')
- return render_template('user_settings.html')
+ return render_template('user_edit.html')
#------------
# User admin
-@app.route('/users/admin/list')
+@app.route('/admin/users')
def admin_users():
if not session.get('user').get('is_admin'):
abort(401)
users = query_db('select * from users order by id desc')
return render_template('admin_users.html', users=users)
-@app.route('/users/admin/add', methods=['GET', 'POST'])
-def add_user():
+@app.route('/admin/users/add', methods=['GET', 'POST'])
+def admin_user_add():
if not session.get('user').get('is_admin'):
abort(401)
if request.method == 'POST':
return redirect(url_for('home'))
else:
flash(u"Vous devez spécifier une adresse email.", 'error')
- return render_template('add_user.html')
+ return render_template('admin_user_new.html')
#-------------
# Roles admin
-@app.route('/roles')
-def show_roles():
+@app.route('/admin/roles')
+def admin_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)
+ return render_template('admin_roles.html', roles=roles)
-@app.route('/roles/admin/add', methods=['POST'])
-def add_role():
+@app.route('/admin/roles/add', methods=['POST'])
+def admin_role_add():
if not session.get('user').get('is_admin'):
abort(401)
if request.method == 'POST':
g.db.commit()
else:
flash(u"Vous devez spécifier un nom.", "error")
- return redirect(url_for('show_roles'))
+ return redirect(url_for('admin_roles'))
-@app.route('/roles/admin/delete/<idrole>')
-def del_role(idrole):
+@app.route('/admin/roles/delete/<idrole>')
+def admin_role_del(idrole):
if not session.get('user').get('is_admin'):
abort(401)
role = query_db('select * from roles where id = ?', [idrole], one=True)
abort(401)
g.db.execute('delete from roles where id = ?', [idrole])
g.db.commit()
- return redirect(url_for('show_roles'))
+ return redirect(url_for('admin_roles'))
#------------
# Votes list
@app.route('/votes/<votes>')
-def show_votes(votes):
+def votes(votes):
today = date.today()
active_button = votes
basequery = 'select *, roles.name as rolename from votes join roles on roles.id=votes.id_role where is_open=1'
votes = query_db(basequery + ' and date_end >= (?) order by id desc', [today])
else:
abort(404)
- return render_template('show_votes.html', votes=votes, active_button=active_button)
+ return render_template('votes.html', votes=votes, active_button=active_button)
#------
# Vote
return True # :TODO:maethor:20120529: Check others things
@app.route('/vote/<idvote>')
-def show_vote(idvote):
+def vote(idvote):
vote = query_db('select *, roles.name as rolename from votes join roles on roles.id=votes.id_role where votes.id=?', [idvote], one=True)
if vote is None:
abort(404)
#-------------
# Votes admin
-@app.route('/votes/admin/list')
+@app.route('/admin/votes/list')
def admin_votes():
if not session.get('user').get('is_admin'):
abort(401)
votes = query_db('select *, roles.name as rolename from votes join roles on roles.id=votes.id_role order by id desc')
return render_template('admin_votes.html', votes=votes)
-@app.route('/votes/admin/add', methods=['GET', 'POST'])
-def add_vote():
+@app.route('/admin/votes/add', methods=['GET', 'POST'])
+def admin_vote_add():
if not session.get('user').get('is_admin'):
abort(401)
if request.method == 'POST':
return redirect(url_for('home'))
else:
flash(u"Le vote a été créé", 'info')
- return redirect(url_for('edit_vote', voteid=vote['id']))
+ return redirect(url_for('admin_vote_edit', voteid=vote['id']))
else:
flash(u'Vous devez spécifier un titre.', 'error')
groups = query_db('select * from roles')
- return render_template('new_vote.html', groups=groups)
+ return render_template('admin_vote_new.html', groups=groups)
-@app.route('/votes/admin/edit/<voteid>', methods=['GET', 'POST'])
-def edit_vote(voteid):
+@app.route('/admin/votes/edit/<voteid>', methods=['GET', 'POST'])
+def admin_vote_edit(voteid):
if not session.get('user').get('is_admin'):
abort(401)
vote = query_db('select * from votes where id = ?', [voteid], one=True)
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, group=group, choices=choices)
+ return render_template('admin_vote_edit.html', vote=vote, group=group, choices=choices)
-@app.route('/votes/admin/addchoice/<voteid>', methods=['POST'])
-def add_choice(voteid):
+@app.route('/admin/votes/addchoice/<voteid>', methods=['POST'])
+def admin_vote_addchoice(voteid):
if not session.get('user').get('is_admin'):
abort(401)
vote = query_db('select * from votes where id = ?', [voteid], one=True)
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))
+ return redirect(url_for('admin_vote_edit', voteid=voteid))
-@app.route('/votes/admin/editchoice/<voteid>/<choiceid>', methods=['POST', 'DELETE'])
-def edit_choice(voteid, choiceid):
+@app.route('/admin/votes/editchoice/<voteid>/<choiceid>', methods=['POST', 'DELETE'])
+def admin_vote_editchoice(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)
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))
+ return redirect(url_for('admin_vote_edit', voteid=voteid))
-@app.route('/votes/admin/deletechoice/<voteid>/<choiceid>')
-def delete_choice(voteid, choiceid):
+@app.route('/admin/votes/deletechoice/<voteid>/<choiceid>')
+def admin_vote_deletechoice(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)
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))
+ return redirect(url_for('admin_vote_edit', voteid=voteid))
#------
# Main
+++ /dev/null
-{% extends "layout.html" %}
-{% block body %}
-
-<div class="row">
- <div class="span7 well">
-<form action="{{ url_for('add_user') }}" method="post" class="form-horizontal">
-<fieldset><legend>Ajouter un utilisateur</legend>
- <div class="control-group">
- <label class="control-label" for="email">E-mail</label>
- <div class="controls">
- <input type="text" name="email" id="email" value="{{ request.form.email }}" />
- <span class="help-inline"><font color="red">*</font></span>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="username">Nom</label>
- <div class="controls">
- <input type="text" name="username" id="username" value="{{ request.form.username }}" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="organization">Association</label>
- <div class="controls">
- <input type="text" data-provide="typeahead" data-source='["FDN","Ilico","Aquilenet"]' size=30 name="organization" id="organization" value="{{ request.form.organization }}" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="role">Groupes</label>
- <div class="controls">
- <select name="role" id="role" multiple>
- <option selected>CA</option>
- <option>Membres</option>
- </select>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label">Options</label>
- <div class="controls">
- <label class="checkbox">
- <input type="checkbox" name="admin" />
- L'utilisateur est-il administrateur ?
- </label>
- </div>
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="Créer l'utilisateur" />
- </div>
-</fieldset>
-</form>
- </div>
-</div>
-
-{% endblock %}
--- /dev/null
+{% extends "layout.html" %}
+{% block subtitle %}Administrer les votes{% endblock %}
+{% block body %}
+<div class="row">
+<div class="span6 well">
+ <h2>Groupes</h2>
+ <hr />
+ {% if not roles %}
+ <div class="alert">Il n'y a aucun role.</div>
+ {% else %}
+ <table class="table table-stripped">
+ <thead>
+ <tr>
+ <th>Nom</th>
+ <th>Membres</th>
+ <th>Votes</th>
+ <th>Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for role in roles %}
+ <tr>
+ <td><strong>{{ role.name }}</strong></td>
+ <td>TODO</td>
+ <td>TODO</td>
+ <td>{% if role.system %}<span class="label label-warning">system</span>{% else %}<a href="{{ url_for('admin_role_del', idrole=role.id) }}" class="btn btn-danger btn-mini">Supprimer</a>{% endif %}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ <p>
+ <small>Les groupes « system » ne sont pas modifiables.</small>
+ </p>
+ {% endif %}
+</div>
+
+<div class="span5 well">
+ <form action="{{ url_for('admin_role_add') }}" method="post" class="form-inline">
+ <fieldset><legend>Ajouter un groupe</legend>
+ <br />
+ <input type="text" name="name" id="name" value="Nom" />
+ <input type="submit" class="btn btn-primary" value="Ajouter" />
+ </fieldset>
+ </form>
+</div>
+</div>
+{% endblock %}
+
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+
+<div class="row">
+ <div class="span7 well">
+<form action="{{ url_for('admin_user_add') }}" method="post" class="form-horizontal">
+<fieldset><legend>Ajouter un utilisateur</legend>
+ <div class="control-group">
+ <label class="control-label" for="email">E-mail</label>
+ <div class="controls">
+ <input type="text" name="email" id="email" value="{{ request.form.email }}" />
+ <span class="help-inline"><font color="red">*</font></span>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="username">Nom</label>
+ <div class="controls">
+ <input type="text" name="username" id="username" value="{{ request.form.username }}" />
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="organization">Association</label>
+ <div class="controls">
+ <input type="text" data-provide="typeahead" data-source='["FDN","Ilico","Aquilenet"]' size=30 name="organization" id="organization" value="{{ request.form.organization }}" />
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="role">Groupes</label>
+ <div class="controls">
+ <select name="role" id="role" multiple>
+ <option selected>CA</option>
+ <option>Membres</option>
+ </select>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label">Options</label>
+ <div class="controls">
+ <label class="checkbox">
+ <input type="checkbox" name="admin" />
+ L'utilisateur est-il administrateur ?
+ </label>
+ </div>
+ </div>
+ <div class="form-actions">
+ <input type="submit" class="btn btn-primary" value="Créer l'utilisateur" />
+ </div>
+</fieldset>
+</form>
+ </div>
+</div>
+
+{% endblock %}
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+
+<div class="row">
+ <div class="span6 well">
+ <form action="{{ url_for('admin_vote_edit', voteid=vote['id']) }}" method="post" class="form-horizontal">
+ <fieldset><legend>Édition du vote</legend>
+ <div class="control-group">
+ <label class="control-label" for="title">Titre</label>
+ <div class="controls">
+ <input type="text" size=30 name="title" id="title" value="{{ vote.title }}" />
+ <span class="help-inline"><font color="red">*</font></span>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="description">Description</label>
+ <div class="controls">
+ <textarea class="input-xlarge" name="description" id="description">{{ vote.description }}</textarea>
+ </div>
+ </div>
+ <div class="accordion">
+ <div class="accordion-group">
+ <div class="accordion-heading">
+ <a class="accordion-toggle" data-toggle="collapse" href="#infos">+ Informations</a>
+ </div>
+ <div id="infos" class="accordion-body collapse">
+ <div class="accordion-inner">
+ <div class="control-group">
+ <label class="control-label" for="category">Catégorie</label>
+ <div class="controls">
+ <input type="text" data-provide="typeahead" data-source='["ca","membres"]' size=30 name="category" id="category" value="{{ vote.category }}" />
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="role">Groupe</label>
+ <div class="controls">
+ <select name="role" id="role" disabled>
+ <option>{{ group.name }}</option>
+ </select>
+ <p class="help-block">Groupe d'utilisateur concernés par le vote et ayant le droit de voter</p>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="days">Durée (jours)</label>
+ <div class="controls">
+ <select class="span1" name="days" id="days">
+ {% for i in range(1, 31) %}
+ {% if i == vote.duration %}
+ <option selected>{{ i }}</option>
+ {% else %}
+ <option>{{ i }}</option>
+ {% endif %}
+ {% endfor %}
+ </select>
+ <span class="help-inline">Du {{ vote.date_begin }} au {{ vote.date_end }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="accordion-group">
+ <div class="accordion-heading">
+ <a class="accordion-toggle" data-toggle="collapse" href="#options">+ Options</a>
+ </div>
+ <div id="options" class="accordion-body collapse">
+ <div class="accordion-inner">
+ <div class="control-group">
+ <label class="control-label">Options</label>
+ <div class="controls">
+ <label class="checkbox">
+ <input type="checkbox" name="transparent" {% if vote.is_transparent == 1 %} checked {% endif %} />
+ Les votants peuvent-ils voir le choix des autres ?
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" name="public" {% if vote.is_public == 1 %} checked {% endif %}/>
+ Le vote est-il visible par tous ?
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" name="multiplechoice" {% if vote.is_multiplechoice == 1 %} checked {% endif %} disabled/>
+ Les votants peuvent-ils choisir plusieurs options ?
+ </label>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="status">Statut</label>
+ <div class="controls">
+ <select class="span2" name="status" id="status">
+ {% if vote.is_open %}
+ <option>Fermé</option>
+ <option selected>Ouvert</option>
+ {% else %}
+ <option selected>Fermé</option>
+ <option>Ouvert</option>
+ {% endif %}
+ </select>
+ </div>
+ </div>
+ <div class="form-actions">
+ <input type="submit" class="btn btn-primary" value="Enregistrer" />
+ <input type="reset" class="btn" value="Annuler" />
+ </div>
+ </fieldset>
+ </form>
+ </div>
+
+ <div class="span5 well pull-right">
+ <fieldset><legend>Choix</legend>
+ <table class="table table-stripped table-condensed">
+ <thead>
+ <tr>
+ <th>Titre
+ <th>Actions
+ </tr>
+ </thead>
+ <tbody>
+ {% for choice in choices %}
+ <tr>
+ <form action="{{ url_for('admin_vote_editchoice', voteid=vote.id, choiceid=choice.id) }}" method="post">
+ <td><input type="text" name="title" value="{{ choice.name }}" /></td>
+ <td><input type="submit" class="btn btn-small" value="Sauver" />
+ <a href="{{ url_for('admin_vote_deletechoice', voteid=vote.id, choiceid=choice.id) }}" class="btn btn-small btn-danger">Supprimer</a></td>
+ </form>
+ </tr>
+ {% endfor %}
+ </tbody>
+ <tfoot>
+ <tr>
+ <form action="{{ url_for('admin_vote_addchoice', voteid=vote.id) }}" method="post">
+ <td><input type="text" name="title" value="Nouveau choix" /></td>
+ <td><input type="submit" class="btn btn-small btn-primary" value="+ Ajouter" />
+ </form>
+ </tr>
+ </tfoot>
+ </table>
+ </fieldset>
+ </div>
+</div>
+
+{% endblock %}
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+
+<div class="row">
+ <div class="span7 well">
+<form action="{{ url_for('admin_vote_add') }}" method="post" class="form-horizontal">
+<fieldset><legend>Ajouter un vote</legend>
+ <div class="control-group">
+ <label class="control-label" for="title">Titre</label>
+ <div class="controls">
+ <input type="text" size=30 name="title" id="title" value="{{ request.form.title }}" />
+ <span class="help-inline"><font color="red">*</font></span>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="description">Description</label>
+ <div class="controls">
+ <textarea class="input-xlarge" name="description" id="description" value="{{ request.form.description }}"></textarea>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="category">Catégorie</label>
+ <div class="controls">
+ <input type="text" data-provide="typeahead" data-source='["ca","membres"]' size=30 name="category" id="category" value="{{ request.form.category }}" />
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="role">Groupe</label>
+ <div class="controls">
+ <select name="role" id="role">
+ {% for group in groups %}
+ <option>{{ group.name }}</option>
+ {% endfor %}
+ </select>
+ <p class="help-block">Groupe d'utilisateur concernés par le vote et ayant le droit de voter</p>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="days">Durée (jours)</label>
+ <div class="controls">
+ <select class="span1" name="days" id="days">
+ {% for i in range(1, 31) %}
+ {% if i == 20 %}
+ <option selected>{{ i }}</option>
+ {% else %}
+ <option>{{ i }}</option>
+ {% endif %}
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label">Options</label>
+ <div class="controls">
+ <label class="checkbox">
+ <input type="checkbox" name="transparent" />
+ Les votants peuvent-ils voir le choix des autres ?
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" name="public" />
+ Le vote est-il visible par tous ?
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" name="multiplechoice" />
+ Les votants peuvent-ils choisir plusieurs options ?
+ </label>
+ </div>
+ </div>
+ <div class="form-actions">
+ <input type="submit" class="btn btn-primary" value="Créer le vote" />
+ </div>
+</fieldset>
+</form>
+ </div>
+</div>
+
+{% endblock %}
{% if vote.is_public %}<span class="label">public</span>{% endif %}
{% if vote.is_multiplechoice %}<span class="label">choix multiple</span>{% endif %}
</td>
- <td><a href="{{ url_for('edit_vote', voteid=vote.id) }}" class="btn btn-mini">Éditer</a></td>
+ <td><a href="{{ url_for('admin_vote_edit', voteid=vote.id) }}" class="btn btn-mini">Éditer</a></td>
</tr>
{% endfor %}
</tbody>
+++ /dev/null
-{% extends "layout.html" %}
-{% block body %}
-
-<div class="row">
- <div class="span6 well">
- <form action="{{ url_for('edit_vote', voteid=vote['id']) }}" method="post" class="form-horizontal">
- <fieldset><legend>Édition du vote</legend>
- <div class="control-group">
- <label class="control-label" for="title">Titre</label>
- <div class="controls">
- <input type="text" size=30 name="title" id="title" value="{{ vote.title }}" />
- <span class="help-inline"><font color="red">*</font></span>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="description">Description</label>
- <div class="controls">
- <textarea class="input-xlarge" name="description" id="description">{{ vote.description }}</textarea>
- </div>
- </div>
- <div class="accordion">
- <div class="accordion-group">
- <div class="accordion-heading">
- <a class="accordion-toggle" data-toggle="collapse" href="#infos">+ Informations</a>
- </div>
- <div id="infos" class="accordion-body collapse">
- <div class="accordion-inner">
- <div class="control-group">
- <label class="control-label" for="category">Catégorie</label>
- <div class="controls">
- <input type="text" data-provide="typeahead" data-source='["ca","membres"]' size=30 name="category" id="category" value="{{ vote.category }}" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="role">Groupe</label>
- <div class="controls">
- <select name="role" id="role" disabled>
- <option>{{ group.name }}</option>
- </select>
- <p class="help-block">Groupe d'utilisateur concernés par le vote et ayant le droit de voter</p>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="days">Durée (jours)</label>
- <div class="controls">
- <select class="span1" name="days" id="days">
- {% for i in range(1, 31) %}
- {% if i == vote.duration %}
- <option selected>{{ i }}</option>
- {% else %}
- <option>{{ i }}</option>
- {% endif %}
- {% endfor %}
- </select>
- <span class="help-inline">Du {{ vote.date_begin }} au {{ vote.date_end }}</span>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="accordion-group">
- <div class="accordion-heading">
- <a class="accordion-toggle" data-toggle="collapse" href="#options">+ Options</a>
- </div>
- <div id="options" class="accordion-body collapse">
- <div class="accordion-inner">
- <div class="control-group">
- <label class="control-label">Options</label>
- <div class="controls">
- <label class="checkbox">
- <input type="checkbox" name="transparent" {% if vote.is_transparent == 1 %} checked {% endif %} />
- Les votants peuvent-ils voir le choix des autres ?
- </label>
- <label class="checkbox">
- <input type="checkbox" name="public" {% if vote.is_public == 1 %} checked {% endif %}/>
- Le vote est-il visible par tous ?
- </label>
- <label class="checkbox">
- <input type="checkbox" name="multiplechoice" {% if vote.is_multiplechoice == 1 %} checked {% endif %} disabled/>
- Les votants peuvent-ils choisir plusieurs options ?
- </label>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="status">Statut</label>
- <div class="controls">
- <select class="span2" name="status" id="status">
- {% if vote.is_open %}
- <option>Fermé</option>
- <option selected>Ouvert</option>
- {% else %}
- <option selected>Fermé</option>
- <option>Ouvert</option>
- {% endif %}
- </select>
- </div>
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="Enregistrer" />
- <input type="reset" class="btn" value="Annuler" />
- </div>
- </fieldset>
- </form>
- </div>
-
- <div class="span5 well pull-right">
- <fieldset><legend>Choix</legend>
- <table class="table table-stripped table-condensed">
- <thead>
- <tr>
- <th>Titre
- <th>Actions
- </tr>
- </thead>
- <tbody>
- {% for choice in choices %}
- <tr>
- <form action="{{ url_for('edit_choice', voteid=vote.id, choiceid=choice.id) }}" method="post">
- <td><input type="text" name="title" value="{{ choice.name }}" /></td>
- <td><input type="submit" class="btn btn-small" value="Sauver" />
- <a href="{{ url_for('delete_choice', voteid=vote.id, choiceid=choice.id) }}" class="btn btn-small btn-danger">Supprimer</a></td>
- </form>
- </tr>
- {% endfor %}
- </tbody>
- <tfoot>
- <tr>
- <form action="{{ url_for('add_choice', voteid=vote.id) }}" method="post">
- <td><input type="text" name="title" value="Nouveau choix" /></td>
- <td><input type="submit" class="btn btn-small btn-primary" value="+ Ajouter" />
- </form>
- </tr>
- </tfoot>
- </table>
- </fieldset>
- </div>
-</div>
-
-{% endblock %}
<div class="btn-toolbar">
<div class="btn-group">
<a class="btn {% if active_button == 'home' %}active{% endif %}" href="/">Accueil</a>
- <a class="btn {% if active_button == 'current' %}active{% endif %}" href="{{ url_for('show_votes', votes='current') }}">Votes en cours</a>
- <a class="btn {% if active_button == 'archive' %}active{% endif %}" href="{{ url_for('show_votes', votes='archive') }}">Archives</a>
+ <a class="btn {% if active_button == 'current' %}active{% endif %}" href="{{ url_for('votes', votes='current') }}">Votes en cours</a>
+ <a class="btn {% if active_button == 'archive' %}active{% endif %}" href="{{ url_for('votes', votes='archive') }}">Archives</a>
{% if session.user and session.user.is_admin %}
<a href="#" class="btn btn-warning dropdown-toggle" data-toggle="dropdown">Admin <b class="caret"></b></a>
<ul class="dropdown-menu pull-right">
- <li><a href="{{ url_for('add_vote') }}">Nouveau vote</a></li>
+ <li><a href="{{ url_for('admin_vote_add') }}">Nouveau vote</a></li>
<li><a href="{{ url_for('admin_votes') }}">Administrer les votes</a></li>
<li class="divider"></li>
<!--<li><a href="404">Utilisateurs</a></li>-->
- <li><a href="{{ url_for('add_user') }}">Nouvel utilisateur</a></li>
+ <li><a href="{{ url_for('admin_user_add') }}">Nouvel utilisateur</a></li>
<li><a href="{{ url_for('admin_users') }}">Administrer les utilisateurs</a></li>
- <li><a href="{{ url_for('show_roles') }}">Administrer les groupes</a></li>
+ <li><a href="{{ url_for('admin_roles') }}">Administrer les groupes</a></li>
</ul>
{% endif %}
</div>
<div class="btn-group pull-right">
{% if 'user' in session %}
- <a href="{{ url_for('show_user', userid=session.user.id) }}" class="btn"><i class="icon-user"></i> {{ session.user.name }}</a>
+ <a href="{{ url_for('user', userid=session.user.id) }}" class="btn"><i class="icon-user"></i> {{ session.user.name }}</a>
<a href="#" class="btn dropdown-toggle" data-toggle="dropdown"><b class="caret"></b></a>
<ul class="dropdown-menu pull-right">
<li><a href=""><i class="icon-comment"></i> Votes en attente</a></li>
- <li><a href="{{ url_for('user_settings', userid=session.user.id) }}"><i class="icon-cog"></i> Paramètres</a></li>
+ <li><a href="{{ url_for('user_edit', userid=session.user.id) }}"><i class="icon-cog"></i> Paramètres</a></li>
<li class="divider"></li>
<li><a href="{{ url_for('logout') }}"><i class="icon-off"></i> Déconnexion</a></li>
</ul>
+++ /dev/null
-{% extends "layout.html" %}
-{% block body %}
-
-<div class="row">
- <div class="span7 well">
-<form action="{{ url_for('add_vote') }}" method="post" class="form-horizontal">
-<fieldset><legend>Ajouter un vote</legend>
- <div class="control-group">
- <label class="control-label" for="title">Titre</label>
- <div class="controls">
- <input type="text" size=30 name="title" id="title" value="{{ request.form.title }}" />
- <span class="help-inline"><font color="red">*</font></span>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="description">Description</label>
- <div class="controls">
- <textarea class="input-xlarge" name="description" id="description" value="{{ request.form.description }}"></textarea>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="category">Catégorie</label>
- <div class="controls">
- <input type="text" data-provide="typeahead" data-source='["ca","membres"]' size=30 name="category" id="category" value="{{ request.form.category }}" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="role">Groupe</label>
- <div class="controls">
- <select name="role" id="role">
- {% for group in groups %}
- <option>{{ group.name }}</option>
- {% endfor %}
- </select>
- <p class="help-block">Groupe d'utilisateur concernés par le vote et ayant le droit de voter</p>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="days">Durée (jours)</label>
- <div class="controls">
- <select class="span1" name="days" id="days">
- {% for i in range(1, 31) %}
- {% if i == 20 %}
- <option selected>{{ i }}</option>
- {% else %}
- <option>{{ i }}</option>
- {% endif %}
- {% endfor %}
- </select>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label">Options</label>
- <div class="controls">
- <label class="checkbox">
- <input type="checkbox" name="transparent" />
- Les votants peuvent-ils voir le choix des autres ?
- </label>
- <label class="checkbox">
- <input type="checkbox" name="public" />
- Le vote est-il visible par tous ?
- </label>
- <label class="checkbox">
- <input type="checkbox" name="multiplechoice" />
- Les votants peuvent-ils choisir plusieurs options ?
- </label>
- </div>
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="Créer le vote" />
- </div>
-</fieldset>
-</form>
- </div>
-</div>
-
-{% endblock %}
+++ /dev/null
-{% extends "layout.html" %}
-{% block subtitle %}Administrer les votes{% endblock %}
-{% block body %}
-<div class="row">
-<div class="span6 well">
- <h2>Groupes</h2>
- <hr />
- {% if not roles %}
- <div class="alert">Il n'y a aucun role.</div>
- {% else %}
- <table class="table table-stripped">
- <thead>
- <tr>
- <th>Nom</th>
- <th>Membres</th>
- <th>Votes</th>
- <th>Actions</th>
- </tr>
- </thead>
- <tbody>
- {% for role in roles %}
- <tr>
- <td><strong>{{ role.name }}</strong></td>
- <td>TODO</td>
- <td>TODO</td>
- <td>{% if role.system %}<span class="label label-warning">system</span>{% else %}<a href="{{ url_for('del_role', idrole=role.id) }}" class="btn btn-danger btn-mini">Supprimer</a>{% endif %}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <p>
- <small>Les groupes « system » ne sont pas modifiables.</small>
- </p>
- {% endif %}
-</div>
-
-<div class="span5 well">
- <form action="{{ url_for('add_role') }}" method="post" class="form-inline">
- <fieldset><legend>Ajouter un groupe</legend>
- <br />
- <input type="text" name="name" id="name" value="Nom" />
- <input type="submit" class="btn btn-primary" value="Ajouter" />
- </fieldset>
- </form>
-</div>
-</div>
-{% endblock %}
-
+++ /dev/null
-{% extends "layout.html" %}
-{% block body %}
-<h2>{{ session.user.name }}</h2>
-<div class="span8">
- <dl>
- <dt>Email :
- <dd>{{ session.user.email }}
- <dt>Association :
- <dd>{{ session.user.organization }}
- <dt>Groupes :
- <dd><em>à venir</em>
- </dl>
- <a href="{{ url_for('user_settings', userid=session.user.id) }}" class="btn btn-primary">Modifier</a>
-</div>
-{% endblock %}
-
+++ /dev/null
-{% extends "layout.html" %}
-{% block subtitle %}
-Liste des votes
-{% endblock %}
-{% block body %}
- {% for vote in votes %}
- <article>
- <div class="row well">
- <div class="span4">
- <h3><a href="{{ url_for('show_vote', idvote=vote.id) }}">{{ vote.title }}</a></h3>
- <div class="progress progress-striped">
- <div class="bar" style="width: 60{{ vote.percent }}%;"></div>
- </div>
- </div>
- <div class="span3">
- <h4>Deadline : {{ vote.date_end }} </h4>
- <h4>Groupe : {{ vote.rolename }}</h4>
- <h4>Categorie : {{ vote.category }}</h4>
- </div>
- <div class="span3">
- <h4>Notes</h4>
- <p>
- {{ vote.description|safe }}
- </p>
- </div>
- </article>
- {% else %}
- <div class="alert">Il n'y a pas encore de votes. Désolé.</div>
- {% endfor %}
-{% endblock %}
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+<h2>{{ session.user.name }}</h2>
+<div class="span8">
+ <dl>
+ <dt>Email :
+ <dd>{{ session.user.email }}
+ <dt>Association :
+ <dd>{{ session.user.organization }}
+ <dt>Groupes :
+ <dd><em>à venir</em>
+ </dl>
+ <a href="{{ url_for('user_edit', userid=session.user.id) }}" class="btn btn-primary">Modifier</a>
+</div>
+{% endblock %}
+
--- /dev/null
+{% extends "layout.html" %}
+{% block body %}
+<h2>{{ session.username }}</h2>
+<div class="row">
+ <div class="span6 well">
+ <form class="form-horizontal" action="{{ url_for('user_edit', userid=session.user.id) }}" method="post">
+ <fieldset><legend>Mise à jour du profil utilisateur</legend>
+ <div class="alert"><strong>Attention :</strong> À l'issue de ce formulaire, vous devrez vous reconnecter</div>
+ <div class="control-group">
+ <label class="control-label" for="email">E-mail</label>
+ <div class="controls">
+ <input type="text" name="email" id="email" value="{{ session.user.email }}"/>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="name">Nom</label>
+ <div class="controls">
+ <input type="text" name="name" id="name" value="{{ session.user.name }}" />
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="organization">Association</label>
+ <div class="controls">
+ <input type="text" name="organization" id="organization" value="{{ session.user.organization }}"/>
+ </div>
+ </div>
+ <!--<label for="password">Mot de passe</label>
+ <input type="password" name="password" id="password" />-->
+ <div class="form-actions">
+ <input type="submit" class="btn btn-primary" value="Enregistrer" />
+ <input type="reset" class="btn" value="Annuler" />
+ </div>
+ </fieldset>
+ </form>
+ </div>
+
+ <div class="span5 well">
+ <form class="form-horizontal" action="{{ url_for('user_password', userid=session.user.id) }}" method="post">
+ <fieldset><legend>Modification du mot de passe</legend>
+ <div class="control-group">
+ <label class="control-label" for="password">Mot de passe</label>
+ <div class="controls">
+ <input type="password" name="password" id="password" />
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label" for="password2">Confirmation</label>
+ <div class="controls">
+ <input type="password" name="password2" id="password2" />
+ </div>
+ </div>
+ <div class="form-actions">
+ <input type="submit" class="btn btn-primary" value="Enregistrer" />
+ <input type="reset" class="btn" value="Annuler" />
+ </div>
+ </fieldset>
+ </form>
+ </div>
+</div>
+{% endblock %}
+
+++ /dev/null
-{% extends "layout.html" %}
-{% block body %}
-<h2>{{ session.username }}</h2>
-<div class="row">
- <div class="span6 well">
- <form class="form-horizontal" action="{{ url_for('user_settings', userid=session.user.id) }}" method="post">
- <fieldset><legend>Mise à jour du profil utilisateur</legend>
- <div class="alert"><strong>Attention :</strong> À l'issue de ce formulaire, vous devrez vous reconnecter</div>
- <div class="control-group">
- <label class="control-label" for="email">E-mail</label>
- <div class="controls">
- <input type="text" name="email" id="email" value="{{ session.user.email }}"/>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="name">Nom</label>
- <div class="controls">
- <input type="text" name="name" id="name" value="{{ session.user.name }}" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="organization">Association</label>
- <div class="controls">
- <input type="text" name="organization" id="organization" value="{{ session.user.organization }}"/>
- </div>
- </div>
- <!--<label for="password">Mot de passe</label>
- <input type="password" name="password" id="password" />-->
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="Enregistrer" />
- <input type="reset" class="btn" value="Annuler" />
- </div>
- </fieldset>
- </form>
- </div>
-
- <div class="span5 well">
- <form class="form-horizontal" action="{{ url_for('user_password', userid=session.user.id) }}" method="post">
- <fieldset><legend>Modification du mot de passe</legend>
- <div class="control-group">
- <label class="control-label" for="password">Mot de passe</label>
- <div class="controls">
- <input type="password" name="password" id="password" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="password2">Confirmation</label>
- <div class="controls">
- <input type="password" name="password2" id="password2" />
- </div>
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="Enregistrer" />
- <input type="reset" class="btn" value="Annuler" />
- </div>
- </fieldset>
- </form>
- </div>
-</div>
-{% endblock %}
-
--- /dev/null
+{% extends "layout.html" %}
+{% block subtitle %}
+Liste des votes
+{% endblock %}
+{% block body %}
+ {% for vote in votes %}
+ <article>
+ <div class="row well">
+ <div class="span4">
+ <h3><a href="{{ url_for('vote', idvote=vote.id) }}">{{ vote.title }}</a></h3>
+ <div class="progress progress-striped">
+ <div class="bar" style="width: 60{{ vote.percent }}%;"></div>
+ </div>
+ </div>
+ <div class="span3">
+ <h4>Deadline : {{ vote.date_end }} </h4>
+ <h4>Groupe : {{ vote.rolename }}</h4>
+ <h4>Categorie : {{ vote.category }}</h4>
+ </div>
+ <div class="span3">
+ <h4>Notes</h4>
+ <p>
+ {{ vote.description|safe }}
+ </p>
+ </div>
+ </article>
+ {% else %}
+ <div class="alert">Il n'y a pas encore de votes. Désolé.</div>
+ {% endfor %}
+{% endblock %}