Check values in user_edit to avoid sqlite integrity errors
authorGuillaume Subiron <maethor@subiron.org>
Wed, 30 May 2012 08:53:03 +0000 (10:53 +0200)
committerJulien Rabier <taziden@flexiden.org>
Wed, 30 May 2012 12:21:34 +0000 (14:21 +0200)
main.py
templates/user.html
templates/user_edit.html

diff --git a/main.py b/main.py
index 2ab60f8..9556f96 100755 (executable)
--- a/main.py
+++ b/main.py
@@ -112,19 +112,30 @@ def login_key(userid, key):
 def user(userid):
     if int(userid) != session.get('user').get('id'):
         abort(401)
-    return render_template('user.html')
+    groups = query_db('select * from roles join user_role on id=id_role where id_user = ?', userid)
+    return render_template('user.html', groups=groups)
 
 @app.route('/user/settings/<userid>', methods=['GET', 'POST'])
 def user_edit(userid):
     if int(userid) != session.get('user').get('id'):
         abort(401)
     if request.method == 'POST':
-        g.db.execute('update users set email = ?, name = ?, organization = ? where id = ?',
-                [request.form['email'], request.form['name'], request.form['organization'], session['user']['id']])
-        g.db.commit()
-        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'))
+        if query_db('select * from users where email=? and id!=?', [request.form['email'], userid], one=True) is None:
+            if query_db('select * from users where name=? and id!=?', [request.form['name'], userid], one=True) is None:
+                g.db.execute('update users set email = ?, name = ?, organization = ? where id = ?',
+                        [request.form['email'], request.form['name'], request.form['organization'], session['user']['id']])
+                g.db.commit()
+                disconnect_user() # :TODO:maethor:120528: Maybe useless, but this is simple way to refresh session :D
+                user = query_db('select * from users where id=?', [userid], one=True)
+                if user is None:
+                    flash(u'Une erreur s\'est produite.', 'error')
+                    return redirect(url_for('login'))
+                connect_user(user)
+                flash(u'Votre profil a été mis à jour !', 'success')
+            else:
+                flash(u'Le nom ' + request.form['name'] + u' est déjà pris ! Veuillez en choisir un autre.', 'error')
+        else:
+            flash(u'Il existe déjà un compte pour cette adresse e-mail : ' + request.form['email'], 'error')
     return render_template('user_edit.html')
 
 @app.route('/user/password/<userid>', methods=['GET', 'POST'])
index e639252..0fc5503 100644 (file)
@@ -8,7 +8,7 @@
     <dt>Association :
     <dd>{{ session.user.organization }}
     <dt>Groupes :
-    <dd><em>à venir</em>
+    <dd>{% for group in groups %}<span class="label label-success">{{ group.name }}</span> {% endfor %}
   </dl>
   <a href="{{ url_for('user_edit', userid=session.user.id) }}" class="btn btn-primary">Modifier</a>
 </div>
index ce02061..7c0d337 100644 (file)
@@ -1,11 +1,10 @@
 {% extends "layout.html" %}
 {% block body %}
-<h2>{{ session.username }}</h2>
+<h2>{{ session.user.name }}</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">