Browse Source

I don't know where I was… but who cares :D

Guillaume Subiron 12 years ago
parent
commit
21368beb5c
3 changed files with 150 additions and 21 deletions
  1. 63 10
      main.py
  2. 84 10
      templates/edit_project.html
  3. 3 1
      templates/projects.html

+ 63 - 10
main.py

@@ -50,14 +50,14 @@ def members():
 @app.route('/projects')
 def projects():
     projects = list()
-    for project in query_db('select * from fai order by is_member,step desc,name'):
+    for project in query_db('select * from fai order by is_member desc,step desc,name'):
         project['stepname'] = STEPS[project['step']]
         projects.append(project)
     return render_template('projects.html', projects=projects)
 
 @app.route('/fai/<projectid>')
 def project(projectid):
-    project = query_db('select * from fai where id = ?', (projectid), one=True) 
+    project = query_db('select * from fai where id = ?', [projectid], one=True) 
     if project is None:
         abort(404)
     project['stepname'] = STEPS[project['step']]
@@ -65,20 +65,60 @@ def project(projectid):
 
 @app.route('/edit/<projectid>', methods=['GET', 'POST'])
 def edit_project(projectid):
-    project = query_db('select * from fai where id = ?', (projectid), one=True)
+    project = query_db('select * from fai where id = ?', [projectid], one=True)
     if project is None:
         abort(404)
     if request.method == 'POST':
-        g.db.execute('update fai set name = ?, description = ? where id = ?', [request.form['name'], request.form['description'], projectid]) 
-        g.db.commit()
-        flash(u"Le projet a bien été mis à jour. Merci pour votre contribution !", "success")
-    project = query_db('select * from fai where id = ?', (projectid), one=True)
+        if request.form['name']:
+            if request.form['shortname']:
+                if query_db('select * from fai where id!=? and (name=? or shortname=?)', [projectid, request.form['name'], request.form['shortname']], one=True) is None:
+                    is_member = 0
+                    if 'is_member' in request.form.keys():
+                        is_member = 1
+                    g.db.execute('update fai set name = ?, shortname = ?, description = ?, website = ?, email = ?, irc_channel = ?, irc_server = ?, zone = ?, gps = ?, step = ?, is_member = ? where id = ?', 
+                            [request.form['name'], request.form['shortname'], request.form['description'], request.form['website'], request.form['email'], request.form['irc_channel'], request.form['irc_server'], request.form['zone'], request.form['gps1'] + ':' + request.form['gps2'], request.form['step'][:1], is_member, projectid]) 
+                    g.db.commit()
+                    flash(u"Le projet a bien été mis à jour. Merci pour votre contribution !", "success")
+                    project = query_db('select * from fai where id = ?', [projectid], one=True)
+                    return redirect(url_for(project, projectid=projectid))
+                else:
+                    flash(u'Le nom complet ou le nom court que vous avez choisi est déjà pris.', 'error')
+            else:
+                flash(u'Vous devez spécifier un nom court (éventuellement, le même que le nom complet).', 'error')
+        else:
+            flash(u'Vous devez spécifier un nom.', 'error')
+
     project['stepname'] = STEPS[project['step']]
     return render_template('edit_project.html', project=project)
 
-@app.route('/create/<projectid>')
-def create_project(projectid):
-    abort(404) # TODO
+@app.route('/create', methods=['GET', 'POST'])
+def create_project():
+    if request.method == 'POST':
+        if request.form['name']:
+            if request.form['shortname']:
+                if query_db('select * from fai where name=? or shortname=?', [request.form['name'], request.form['shortname']], one=True) is None:
+                    g.db.execute('INSERT INTO fai (name, shortname, description, website, email, irc_channel, irc_server, zone, gps, step) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', 
+                            [request.form['name'], request.form['shortname'], request.form['description'], request.form['website'], request.form['email'], request.form['irc_channel'], request.form['irc_server'], request.form['zone'], request.form['gps1'] + ':' + request.form['gps2'], request.form['step'][:1]]) 
+                    g.db.commit()
+                    flash(u"Le projet a bien été créé. Merci pour votre contribution !", "success")
+                    project = query_db('select * from fai where name = ?', [request.form['name']], one=True)
+                    if project is not None:
+                        return redirect(url_for(project))
+                    else:
+                        flash(u'Hum… il semble que le projet n\'a pas été créé… vous voulez-bien réessayer ?', 'error')
+                else:
+                    flash(u'Le nom complet ou le nom court que vous avez choisi est déjà pris.', 'error')
+            else:
+                flash(u'Vous devez spécifier un nom court (éventuellement, le même que le nom complet).', 'error')
+        else:
+            flash(u'Vous devez spécifier un nom.', 'error')
+    return render_template('create_project.html')
+
+@app.route('/search', methods=['GET', 'POST'])
+def search():
+    if request.method == 'POST':
+        pass
+    return render_template('search.html')
 
 @app.route('/api/<projects>.json')
 def projects_json(projects):
@@ -106,6 +146,19 @@ def member_to_label(is_member):
         return u'<a href="#" rel="tooltip" data-placement="right" title="Membre de la Fédération FDN"><span class="label label-success">FFDN</span></a>'
     return ''
 
+@app.template_filter('stepname')
+def stepname(step):
+    return STEPS[step]
+
+@app.template_filter('gpspart')
+def gpspart(gps, part):
+    parts = gps.split(':');
+    if part == 1:
+        return parts[0]
+    elif part == 2:
+        return parts[1]
+    return "";
+
 #------
 # Main
 

+ 84 - 10
templates/edit_project.html

@@ -2,23 +2,92 @@
 {% block body %}
 
 <div class="row">
-  <div class="span6 well">
+  <div class="span11 well">
     <form action="{{ url_for('edit_project', projectid=project.id) }}" method="post" class="form-horizontal">
-      <fieldset><legend>Édition du projet</legend>
+      <fieldset><legend>Édition du projet {{ project.name }}</legend>
         <div class="control-group">
-          <label class="control-label" for="name">Nom</label>
+          <label class="control-label" for="name">Nom complet</label>
           <div class="controls">
-            <input type="text" size=30 name="name" id="name" value="{{ project.name }}" />
-            <span class="help-inline"><font color="red">*</font></span>
+            <input type="text" name="name" id="name" value="{{ project.name }}" />
+            <span class="help-inline"><font color="red">*</font> &nbsp; Exemple : French Data Network</span>
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="shortname">Nom court</label>
+          <div class="controls">
+            <input type="text" name="shortname" id="shortname" value="{{ project.shortname }}" />
+            <span class="help-inline"><font color="red">*</font> &nbsp; Exemple :  FDN</span>
+            <span class="help-block">Si le nom court et le même que le nom complet, mettez simplement la même chose.</span>
           </div>
         </div>
         <div class="control-group">
           <label class="control-label" for="description">Description</label>
           <div class="controls">
-            <input type="description" size=50 name="description" id="description" value="{{ project.description }}"></input>
+            <input type="text" name="description" id="description" value="{{ project.description }}" />
           </div>
         </div>
-
+        <div class="control-group">
+          <label class="control-label" for="website">Website</label>
+          <div class="controls">
+            <input type="text" name="website" id="website" value="{{ project.website }}" />
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="email">Email</label>
+          <div class="controls">
+            <input type="text" name="email" id="email" value="{{ project.email }}" />
+            <span class="help-block">Email de contact du projet. N'hésitez pas à utiliser des [at] au lieu de @, pour éviter le spam.</span>
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="irc">IRC</label>
+          <div class="controls">
+            Chan <input class="span2" type="text" name="irc_channel" id="irc_channel" value="{{ project.irc_channel }}" />
+            sur <input class="span2" type="text" name="irc_server" id="irc_server" value="{{ project.irc_server }}" />
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="zone">Zone</label>
+          <div class="controls">
+            <input type="text" name="zone" id="zone" value="{{ project.zone }}" />
+            <span class="help-block">Zone (région, département, ville, village…) concernée par le FAI.</span>
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="gps">Coordonnées GPS</label>
+          <div class="controls">
+            <div class="input-append input-prepend">
+              <input class="span2" type="text" name="gps1" id="gps1" value="{{ project.gps | gpspart(1) }}" />
+              <span class="add-on">:</span>
+              <input class="span2" type="text" name="gps2" id="gps2" value="{{ project.gps | gpspart(2) }}" />
+            </div>
+            <span class="help-block">Coordonnées GPS du siège social ou du point de rencontre habituel, pour la carte</span>
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="step">Étape</label>
+          <div class="controls">
+            <select name="step" id="step">
+              {% for i in range(1, 8) %}
+              {% if i == project.step %}
+              <option selected>{{ i }} - {{ i | stepname }}</option>
+              {% else %}
+              <option>{{ i }} - {{ i | stepname }}</option>
+              {% endif %}
+              {% endfor %}
+            </select>
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="is_member">Membre</label>
+          <div class="controls">
+            <label class="checkbox">
+              <input type="checkbox" name="is_member" {% if project.is_member == 1 %} checked {% endif %}/> 
+              Ce FAI est-il membre de la Fédération FDN ?
+            </label>
+          </div>
+        </div>
+        
         <div class="form-actions">
           <input type="submit" class="btn btn-primary" value="Enregistrer" />
           <input type="reset" class="btn" value="Annuler" />
@@ -27,11 +96,12 @@
     </form>
   </div>
 
-  <div class="span5 well pull-right">
-    <fieldset><legend>Pièces jointes</legend>
+  <div class="span11 well">
+    <fieldset><legend>Documents</legend>
       <table class="table table-stripped table-condensed">
         <thead>
           <tr>
+            <th>Nom</th>
             <th>Lien
             <th>Actions
           </tr>
@@ -39,6 +109,7 @@
         <tbody>
         {% for attachment in attachments %}
           <tr>
+            <td>{{ attachment.name }}</td>
             <td>{{ attachment.url }}</td>
             <td><a href="" class="btn btn-small btn-danger">Supprimer</a></td>
           </tr>
@@ -47,9 +118,12 @@
         <tfoot>
           <tr>
             <form action="" method="post">
-              <td><input type="text" name="url" value="Nouveau document" 
+              <td><input type="text" name="name" value="Nouveau document" 
                 onfocus="if(this.value=='Nouveau document')this.value='';"
                 onblur="if(this.value=='')this.value='Nouveau document';" /></td>
+              <td><input type="text" name="url" value="http://…" 
+                onfocus="if(this.value=='http://…')this.value='';"
+                onblur="if(this.value=='')this.value='http://…';" /></td>
               <td><input type="submit" class="btn btn-small btn-primary" value="+ Ajouter" />
             </form>
           </tr>

+ 3 - 1
templates/projects.html

@@ -9,6 +9,7 @@ Liste des projets recencés
     <tr>
       <th>Nom</th>
       <th>Zone</th>
+      <th>Services</th>
       <th>Étape</th>
       <th></th>
     </tr>
@@ -18,6 +19,7 @@ Liste des projets recencés
     <tr>
       <td>{% autoescape false %}{{ project.is_member | member_to_label }}{% endautoescape %} &nbsp;{{ project.name }}</td>
       <td>{{ project.zone }}</td>
+      <td>{{ project.services }}</td>
       {% autoescape false %}
       <td>{{ project.step | step_to_label }}</td>
       {% endautoescape %}
@@ -26,6 +28,6 @@ Liste des projets recencés
     {% endfor %}
   </tbody>
 </table>
-<a class="pull-right btn btn-primary btn-small" href="">Ajoutez le votre !</a>
+<a class="pull-right btn btn-primary btn-small" href="{{ url_for('create_project') }}">Ajoutez le votre !</a>
 </div>
 {% endblock %}