Admin can add users
authorGuillaume Subiron <maethor@subiron.org>
Mon, 28 May 2012 15:19:17 +0000 (17:19 +0200)
committerJulien Rabier <taziden@flexiden.org>
Mon, 28 May 2012 16:29:28 +0000 (18:29 +0200)
main.py
templates/add_user.html [new file with mode: 0644]
templates/layout.html
templates/new_vote.html

diff --git a/main.py b/main.py
index 7c6521d..cdfc667 100755 (executable)
--- a/main.py
+++ b/main.py
@@ -144,6 +144,26 @@ def user_password(userid):
 #------------
 # User admin
 
+@app.route('/users/admin/add', methods=['GET', 'POST'])
+def add_user():
+    if not session.get('is_admin'):
+        abort(401)
+    if request.method == 'POST':
+        if request.form['email']:
+            # :TODO:maethor:120528: Check fields
+            password = "toto" # :TODO:maethor:120528: Generate password
+            admin = 0
+            if 'admin' in request.form.keys():
+                admin = 1
+            g.db.execute('insert into users (email, name, organization, password, is_admin) values (?, ?, ?, ?, ?)',
+                    [request.form['email'], request.form['username'], request.form['organization'], password, admin])
+            g.db.commit()
+            # :TODO:maethor:120528: Send mail
+            flash(u'Le nouvel utilisateur a été créé avec succès', 'success')
+            return redirect(url_for('home'))
+        else:
+            flash(u"Vous devez spécifier une adresse email.", 'error')
+    return render_template('add_user.html')
 
 #------------
 # Votes list
@@ -164,32 +184,31 @@ def show_votes(votes):
 #-------------
 # Votes admin
 
-@app.route('/votes/admin/new')
-def new_vote():
-    if not session.get('is_admin'):
-        abort(401)
-    return render_template('new_vote.html')
-
-@app.route('/votes/admin/add', methods=['POST'])
+@app.route('/votes/admin/add', methods=['GET', 'POST'])
 def add_vote():
     if not session.get('is_admin'):
         abort(401)
-    date_begin = date.today()
-    date_end = date.today() + timedelta(days=int(request.form['days']))
-    transparent = 0
-    public = 0
-    multiplechoice = 0
-    if 'transparent' in request.form.keys():
-        transparent = 1
-    if 'public' in request.form.keys():
-        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])
-    g.db.commit()
-    flash('New entry was successfully posted', 'info')
-    return redirect(url_for('home'))
+    if request.method == 'POST':
+        if request.form['title']:
+            date_begin = date.today()
+            date_end = date.today() + timedelta(days=int(request.form['days']))
+            transparent = 0
+            public = 0
+            multiplechoice = 0
+            if 'transparent' in request.form.keys():
+                transparent = 1
+            if 'public' in request.form.keys():
+                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])
+            g.db.commit()
+            flash('New entry was successfully posted', 'info')
+            return redirect(url_for('home'))
+        else:
+            flash(u'Vous devez spécifier un titre.', 'error')
+    return render_template('new_vote.html')
 
 #------
 # Main
diff --git a/templates/add_user.html b/templates/add_user.html
new file mode 100644 (file)
index 0000000..f80a1b8
--- /dev/null
@@ -0,0 +1,53 @@
+{% 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 %}
index 5134106..e3f8372 100644 (file)
       {% if session.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('new_vote') }}">Nouveau vote</a></li>
+        <li><a href="{{ url_for('add_vote') }}">Nouveau vote</a></li>
+        <li class="divider"></li>
+        <!--<li><a href="404">Utilisateurs</a></li>-->
+        <li><a href="{{ url_for('add_user') }}">Nouvel utilisateur</a></li>
       </ul>
       {% endif %}
     </div>
     <div class="btn-group pull-right">
-      {% if 'username' in session %}
+      {% if 'userid' in session %}
       <a href="{{ url_for('show_user', userid=session.userid) }}" class="btn"><i class="icon-user"></i> {{ session.username }}</a>
       <a href="#" class="btn dropdown-toggle" data-toggle="dropdown"><b class="caret"></b></a>
       <ul class="dropdown-menu pull-right">
index ecd7ba2..575e9f6 100644 (file)
@@ -8,20 +8,20 @@
   <div class="control-group">
     <label class="control-label" for="title">Titre</label>
     <div class="controls">
-      <input type="text" size=30 name="title" id="title" />
+      <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"></textarea>
+      <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" />
+      <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">