views.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. # -*- coding: utf-8 -*-
  2. from flask import request, g, redirect, url_for, abort, \
  3. render_template, flash, jsonify
  4. from flask.ext.babel import gettext as _
  5. from datetime import date, time, timedelta, datetime
  6. import locale
  7. locale.setlocale(locale.LC_ALL, '')
  8. import string
  9. from . import forms
  10. from .constants import *
  11. from . import app, query_db, db
  12. from .models import ISP
  13. @app.route('/')
  14. def home():
  15. return render_template('index.html', active_button="home")
  16. @app.route('/members')
  17. def members():
  18. members = query_db('select * from fai where is_member = 1')
  19. return render_template('members.html', members=members)
  20. @app.route('/projects')
  21. def project_list():
  22. return render_template('project_list.html', projects=ISP.query.filter_by(is_disabled=False))
  23. @app.route('/fai/<projectid>')
  24. def project(projectid):
  25. p=ISP.query.get(projectid)
  26. if not p:
  27. abort(404)
  28. return render_template('project_detail.html', project_row=p, project=p.json)
  29. @app.route('/edit/<projectid>', methods=['GET', 'POST'])
  30. def edit_project(projectid):
  31. project = query_db('select * from fai where id = ?', [projectid], one=True)
  32. if project is None:
  33. abort(404)
  34. if request.method == 'POST':
  35. if request.form['name']:
  36. if request.form['shortname']:
  37. if query_db('select * from fai where id!=? and (name=? or shortname=?)', [projectid, request.form['name'], request.form['shortname']], one=True) is None:
  38. is_member = 0
  39. if 'is_member' in request.form.keys():
  40. is_member = 1
  41. g.db.execute('update fai set name = ?, shortname = ?, description = ?, website = ?, email = ?, irc_channel = ?, irc_server = ?, zone = ?, gps = ?, step = ?, is_member = ? where id = ?',
  42. [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])
  43. g.db.commit()
  44. flash(u"Le projet a bien été mis à jour. Merci pour votre contribution !", "success")
  45. project = query_db('select * from fai where id = ?', [projectid], one=True)
  46. return redirect(url_for('project', projectid=projectid))
  47. else:
  48. flash(u'Le nom complet ou le nom court que vous avez choisi est déjà pris.', 'error')
  49. else:
  50. flash(u'Vous devez spécifier un nom court (éventuellement, le même que le nom complet).', 'error')
  51. else:
  52. flash(u'Vous devez spécifier un nom.', 'error')
  53. project['stepname'] = STEPS[project['step']]
  54. return render_template('edit_project.html', project=project)
  55. @app.route('/create_old', methods=['GET', 'POST'])
  56. def create_project_old():
  57. if request.method == 'POST':
  58. if request.form['name']:
  59. if request.form['shortname']:
  60. if query_db('select * from fai where name=? or shortname=?', [request.form['name'], request.form['shortname']], one=True) is None:
  61. g.db.execute('INSERT INTO fai (name, shortname, description, website, email, irc_channel, irc_server, zone, gps, step) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
  62. [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]])
  63. g.db.commit()
  64. flash(u"Le projet a bien été créé. Merci pour votre contribution !", "success")
  65. project = query_db('select * from fai where name = ?', [request.form['name']], one=True)
  66. if project is not None:
  67. return redirect(url_for('project', projectid=project['id']))
  68. else:
  69. flash(u'Hum… il semble que le projet n\'a pas été créé… vous voulez-bien réessayer ?', 'error')
  70. else:
  71. flash(u'Le nom complet ou le nom court que vous avez choisi est déjà pris.', 'error')
  72. else:
  73. flash(u'Vous devez spécifier un nom court (éventuellement, le même que le nom complet).', 'error')
  74. else:
  75. flash(u'Vous devez spécifier un nom.', 'error')
  76. return render_template('create_project.html')
  77. @app.route('/add-a-project', methods=['GET'])
  78. def add_project():
  79. return render_template('add_project.html')
  80. @app.route('/create/form', methods=['GET', 'POST'])
  81. def create_project_form():
  82. form = forms.ProjectForm()
  83. if form.validate_on_submit():
  84. isp=ISP()
  85. isp.name = form.name.data
  86. isp.shortname = form.shortname.data or None
  87. isp.json=form.to_json(isp.json)
  88. db.session.add(isp)
  89. db.session.commit()
  90. flash(_(u'Project created'), 'info')
  91. return redirect(url_for('project', projectid=isp.id))
  92. return render_template('project_form.html', form=form)
  93. @app.route('/create/json-url', methods=['GET', 'POST'])
  94. def create_project_json():
  95. form = forms.ProjectJSONForm()
  96. if form.validate_on_submit():
  97. isp=ISP()
  98. db.session.add(isp)
  99. db.session.commit()
  100. flash(_(u'Project created'), 'info')
  101. return redirect(url_for('project', projectid=isp.id))
  102. return render_template('project_json_form.html', form=form)
  103. @app.route('/search', methods=['GET', 'POST'])
  104. def search():
  105. if request.method == 'POST':
  106. pass
  107. return render_template('search.html')
  108. @app.route('/api/<projects>.json')
  109. def projects_json(projects):
  110. if projects == 'projects':
  111. query = 'select * from fai'
  112. elif projects == 'members':
  113. query = 'select * from fai where is_member = 1'
  114. else:
  115. abort(404)
  116. fais = dict()
  117. for fai in query_db(query):
  118. fais[fai['name']] = fai
  119. return jsonify(fais)
  120. @app.route('/api/members_drupal')
  121. def members_drupal():
  122. members = query_db('select * from fai where is_member = 1 order by shortname')
  123. return render_template('members_drupal.html', members=members)
  124. #------
  125. # Filters
  126. @app.template_filter('step_to_label')
  127. def step_to_label(step):
  128. if step:
  129. return u"<a href='#' rel='tooltip' data-placement='right' title='" + STEPS[step] + "'><span class='badge badge-" + STEPS_LABELS[step] + "'>" + str(step) + "</span></a>"
  130. else:
  131. return u'-'
  132. @app.template_filter('member_to_label')
  133. def member_to_label(is_member):
  134. if is_member:
  135. 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>'
  136. return ''
  137. @app.template_filter('stepname')
  138. def stepname(step):
  139. return STEPS[step]
  140. @app.template_filter('gpspart')
  141. def gpspart(gps, part):
  142. parts = gps.split(':');
  143. if part == 1:
  144. return parts[0]
  145. elif part == 2:
  146. return parts[1]
  147. return "";