| @@ -90,6 +90,7 @@ def main(global_config, **settings): | |||||
| # HTML Routes - Logged | # HTML Routes - Logged | ||||
| #config.add_route('profil', 'MesJM2L') | #config.add_route('profil', 'MesJM2L') | ||||
| config.add_route('jm2l', '/MesJM2L') | config.add_route('jm2l', '/MesJM2L') | ||||
| config.add_route('sejour', '/MonSejour') | |||||
| config.add_route('modal', '/{year:\d+}/modal/{modtype:\w+}/{id:(\d+)}') | config.add_route('modal', '/{year:\d+}/modal/{modtype:\w+}/{id:(\d+)}') | ||||
| # Handle exchanges | # Handle exchanges | ||||
| @@ -1,4 +1,4 @@ | |||||
| # -*- coding: utf8 -*- | |||||
| from pyramid.view import view_config | from pyramid.view import view_config | ||||
| from pyramid.security import remember, forget | from pyramid.security import remember, forget | ||||
| from pyramid.httpexceptions import HTTPFound | from pyramid.httpexceptions import HTTPFound | ||||
| @@ -9,6 +9,10 @@ import datetime | |||||
| def login(request): | def login(request): | ||||
| return {} | return {} | ||||
| @view_config(route_name='auth', match_param="action=forgot", renderer="jm2l:templates/login.mako") | |||||
| def forgot(request): | |||||
| return {'forgot':True} | |||||
| @view_config(route_name='bymail', renderer="string") | @view_config(route_name='bymail', renderer="string") | ||||
| def bymail(request): | def bymail(request): | ||||
| myhash = request.matchdict.get('hash', "") | myhash = request.matchdict.get('hash', "") | ||||
| @@ -30,7 +34,7 @@ def bymail(request): | |||||
| def sign_in_out(request): | def sign_in_out(request): | ||||
| username = request.POST.get('username') | username = request.POST.get('username') | ||||
| if username: | if username: | ||||
| user = User.by_name(username) | |||||
| user = User.by_slug(username) | |||||
| if user and user.verify_password(request.POST.get('password')): | if user and user.verify_password(request.POST.get('password')): | ||||
| user.last_logged=datetime.datetime.now() | user.last_logged=datetime.datetime.now() | ||||
| DBSession.merge(user) | DBSession.merge(user) | ||||
| @@ -41,6 +45,10 @@ def sign_in_out(request): | |||||
| headers = forget(request) | headers = forget(request) | ||||
| else: | else: | ||||
| headers = forget(request) | headers = forget(request) | ||||
| if request.matchdict.get('action')=='in': | |||||
| request.session.flash(('error',u'Vous avez entré un mauvais couple identifiant/password !')) | |||||
| return HTTPFound(location="/sign/login", | |||||
| headers=headers) | |||||
| return HTTPFound(location=request.route_url('home'), | return HTTPFound(location=request.route_url('home'), | ||||
| headers=headers) | headers=headers) | ||||
| @@ -94,25 +94,7 @@ class AddIntervenant(MyBaseForm): | |||||
| csrf = False | csrf = False | ||||
| event_uid = HiddenField() | event_uid = HiddenField() | ||||
| nom = TextField(u'Nom', [validators.Length(max=80)], | |||||
| filters=[strip_filter], | |||||
| description = u"Les espaces sont autorisés, la ponctuation n'est " + | |||||
| u"pas autorisée à l'exception des points, traits d'union, " + | |||||
| u"apostrophes et tirets bas." | |||||
| ) | |||||
| prenom = TextField(u'Prénom', [validators.Length(max=80)], | |||||
| filters=[strip_filter], | |||||
| description = u"Les espaces sont autorisés, la ponctuation n'est " + | |||||
| u"pas autorisée à l'exception des points, traits d'union, " + | |||||
| u"apostrophes et tirets bas." | |||||
| ) | |||||
| email = TextField(u'Email', [validators.required(), | |||||
| validators.length(max=10), | |||||
| validators.Email(message='Ceci ne ressemble pas à une adresse valide')], | |||||
| description=u"Afin d'éviter la duplication d'information et les doublons inutile, "+ | |||||
| u"pensez d'abord à lui demander de confirmer le mail qu'il a utilisé lors de "+ | |||||
| u"son inscription sur le site.") | |||||
| add = SubmitField('Ajouter des intervenants') | |||||
| intervenant = SelectField(u'Intervenant', coerce=int ) | |||||
| class ConfCreateForm(MyBaseForm): | class ConfCreateForm(MyBaseForm): | ||||
| @@ -123,6 +123,14 @@ a { | |||||
| right: 15px; | right: 15px; | ||||
| } | } | ||||
| .carousel-vote { | |||||
| padding: 15px 50px; | |||||
| position: absolute; | |||||
| right: 0; | |||||
| bottom: 0; | |||||
| } | |||||
| .LogistiqueTable th, .LogistiqueTable td | .LogistiqueTable th, .LogistiqueTable td | ||||
| { | { | ||||
| text-align:center; | text-align:center; | ||||
| @@ -40,7 +40,7 @@ body h6{font-family:"NeutonRegular","Lucida Grande",Lucida,Verdana,sans-serif;fo | |||||
| .wrapper{width:100%} | .wrapper{width:100%} | ||||
| #top,#top-small,#bottom{width:100%;} | #top,#top-small,#bottom{width:100%;} | ||||
| #top{color:#000000;height:215px;} | #top{color:#000000;height:215px;} | ||||
| #bottom{color:#222;background-color:#ffffff;} | |||||
| #bottom{color:#222;} | |||||
| .top,.top-small,.middle,.bottom{width:750px;margin-right:auto;margin-left:auto;} | .top,.top-small,.middle,.bottom{width:750px;margin-right:auto;margin-left:auto;} | ||||
| .top{padding-top:40px;} | .top{padding-top:40px;} | ||||
| .top-small{padding-top:10px;} | .top-small{padding-top:10px;} | ||||
| @@ -24,5 +24,9 @@ | |||||
| <stop offset="0%" stop-color="#EEE" stop-opacity="0"/> | <stop offset="0%" stop-color="#EEE" stop-opacity="0"/> | ||||
| <stop offset="15%" stop-color="#fff4e5" stop-opacity="1"/> | <stop offset="15%" stop-color="#fff4e5" stop-opacity="1"/> | ||||
| </linearGradient> | </linearGradient> | ||||
| <linearGradient id="BoxGradient-Concert" spreadMethod="pad" x1="100%" y1="0%" x2="50%" y2="100%"> | |||||
| <stop offset="0%" stop-color="#EEE" stop-opacity="0"/> | |||||
| <stop offset="15%" stop-color="#2EE" stop-opacity="1"/> | |||||
| </linearGradient> | |||||
| </defs> | </defs> | ||||
| </svg> | </svg> | ||||
| @@ -50,7 +50,8 @@ d3.json("le-prog-json", | |||||
| .attr("id", TypeArea+"-"+Keys[k]) | .attr("id", TypeArea+"-"+Keys[k]) | ||||
| .attr("area", TypeArea) | .attr("area", TypeArea) | ||||
| .style("float", "left") | .style("float", "left") | ||||
| .style("margin-left", "5px") | |||||
| .style("margin-left", "20px") | |||||
| .style("margin-right", "3px") | |||||
| .property("checked",true); | .property("checked",true); | ||||
| d3.select("#Schedule_SVG_"+Keys[k]) | d3.select("#Schedule_SVG_"+Keys[k]) | ||||
| @@ -64,10 +65,10 @@ d3.json("le-prog-json", | |||||
| svg = d3.select("#Schedule_SVG_"+Keys[k]) | svg = d3.select("#Schedule_SVG_"+Keys[k]) | ||||
| .append("svg") | .append("svg") | ||||
| .attr("id", "TimeTable-"+Keys[k]) | .attr("id", "TimeTable-"+Keys[k]) | ||||
| .attr("width", width + margin.right + margin.left) | |||||
| .attr("height", height + margin.top + margin.bottom) | |||||
| //.attr("viewBox", "0 0 " + width + " " + height ) | |||||
| //.attr("preserveAspectRatio", "xMidYMid"); | |||||
| .attr("width", "100%") //width + margin.right + margin.left) | |||||
| //.attr("height", height + margin.top + margin.bottom) | |||||
| .attr("viewBox", "0 0 " + (width + margin.right + margin.left) + " " + (height + margin.top + margin.bottom) ) | |||||
| .attr("preserveAspectRatio", "xMidYMid meet"); | |||||
| svg.append("g") | svg.append("g") | ||||
| .attr("class", "xAxis axis"); | .attr("class", "xAxis axis"); | ||||
| @@ -78,7 +79,7 @@ d3.json("le-prog-json", | |||||
| var chart = svg.append("g") | var chart = svg.append("g") | ||||
| .attr("class", "timetable"); | .attr("class", "timetable"); | ||||
| HandleEvents(Keys[k]) | |||||
| HandleEvents(Keys[k]); | |||||
| displayit(json["all"][Keys[k]], Salles[Keys[k]], Keys[k]); | displayit(json["all"][Keys[k]], Salles[Keys[k]], Keys[k]); | ||||
| } | } | ||||
| }); | }); | ||||
| @@ -99,7 +100,7 @@ function HandleEvents(Ctrl) { | |||||
| ArrayChoice.push(v.attributes['area'].value) | ArrayChoice.push(v.attributes['area'].value) | ||||
| } | } | ||||
| ) | ) | ||||
| area_select = Array() | |||||
| area_select = Array(); | |||||
| selection = Tasks[Ctrl].filter(function(v) { | selection = Tasks[Ctrl].filter(function(v) { | ||||
| return ArrayChoice.indexOf(v.status)>=0; | return ArrayChoice.indexOf(v.status)>=0; | ||||
| }); | }); | ||||
| @@ -160,9 +161,10 @@ function displayit(Set_of_Task, Set_of_Area, key) { | |||||
| content.enter() | content.enter() | ||||
| .insert("foreignObject",":first-child") | .insert("foreignObject",":first-child") | ||||
| .append("xhtml:div") | |||||
| .append("xhtml:body") | |||||
| .attr("class", "SvgBody") | |||||
| .html(function(d) { | .html(function(d) { | ||||
| return '<div style="padding:5px;height:100%"><a href="/event/'+ d.uid + | |||||
| return '<div class="EvtBox '+ taskStatus[d.status] +'"><a href="/event/'+ d.uid + | |||||
| '">' + d.desc + '</a></div>' | '">' + d.desc + '</a></div>' | ||||
| }) | }) | ||||
| .transition() | .transition() | ||||
| @@ -0,0 +1,474 @@ | |||||
| /* ========================================================= | |||||
| * bootstrap-datepicker.js | |||||
| * http://www.eyecon.ro/bootstrap-datepicker | |||||
| * ========================================================= | |||||
| * Copyright 2012 Stefan Petre | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| * you may not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| * ========================================================= */ | |||||
| !function( $ ) { | |||||
| // Picker object | |||||
| var Datepicker = function(element, options){ | |||||
| this.element = $(element); | |||||
| this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy'); | |||||
| this.picker = $(DPGlobal.template) | |||||
| .appendTo('body') | |||||
| .on({ | |||||
| click: $.proxy(this.click, this)//, | |||||
| //mousedown: $.proxy(this.mousedown, this) | |||||
| }); | |||||
| this.isInput = this.element.is('input'); | |||||
| this.component = this.element.is('.date') ? this.element.find('.add-on') : false; | |||||
| if (this.isInput) { | |||||
| this.element.on({ | |||||
| focus: $.proxy(this.show, this), | |||||
| //blur: $.proxy(this.hide, this), | |||||
| keyup: $.proxy(this.update, this) | |||||
| }); | |||||
| } else { | |||||
| if (this.component){ | |||||
| this.component.on('click', $.proxy(this.show, this)); | |||||
| } else { | |||||
| this.element.on('click', $.proxy(this.show, this)); | |||||
| } | |||||
| } | |||||
| this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0; | |||||
| if (typeof this.minViewMode === 'string') { | |||||
| switch (this.minViewMode) { | |||||
| case 'months': | |||||
| this.minViewMode = 1; | |||||
| break; | |||||
| case 'years': | |||||
| this.minViewMode = 2; | |||||
| break; | |||||
| default: | |||||
| this.minViewMode = 0; | |||||
| break; | |||||
| } | |||||
| } | |||||
| this.viewMode = options.viewMode||this.element.data('date-viewmode')||0; | |||||
| if (typeof this.viewMode === 'string') { | |||||
| switch (this.viewMode) { | |||||
| case 'months': | |||||
| this.viewMode = 1; | |||||
| break; | |||||
| case 'years': | |||||
| this.viewMode = 2; | |||||
| break; | |||||
| default: | |||||
| this.viewMode = 0; | |||||
| break; | |||||
| } | |||||
| } | |||||
| this.startViewMode = this.viewMode; | |||||
| this.weekStart = options.weekStart||this.element.data('date-weekstart')||0; | |||||
| this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1; | |||||
| this.onRender = options.onRender; | |||||
| this.fillDow(); | |||||
| this.fillMonths(); | |||||
| this.update(); | |||||
| this.showMode(); | |||||
| }; | |||||
| Datepicker.prototype = { | |||||
| constructor: Datepicker, | |||||
| show: function(e) { | |||||
| this.picker.show(); | |||||
| this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); | |||||
| this.place(); | |||||
| $(window).on('resize', $.proxy(this.place, this)); | |||||
| if (e ) { | |||||
| e.stopPropagation(); | |||||
| e.preventDefault(); | |||||
| } | |||||
| if (!this.isInput) { | |||||
| } | |||||
| var that = this; | |||||
| $(document).on('mousedown', function(ev){ | |||||
| if ($(ev.target).closest('.datepicker').length == 0) { | |||||
| that.hide(); | |||||
| } | |||||
| }); | |||||
| this.element.trigger({ | |||||
| type: 'show', | |||||
| date: this.date | |||||
| }); | |||||
| }, | |||||
| hide: function(){ | |||||
| this.picker.hide(); | |||||
| $(window).off('resize', this.place); | |||||
| this.viewMode = this.startViewMode; | |||||
| this.showMode(); | |||||
| if (!this.isInput) { | |||||
| $(document).off('mousedown', this.hide); | |||||
| } | |||||
| //this.set(); | |||||
| this.element.trigger({ | |||||
| type: 'hide', | |||||
| date: this.date | |||||
| }); | |||||
| }, | |||||
| set: function() { | |||||
| var formated = DPGlobal.formatDate(this.date, this.format); | |||||
| if (!this.isInput) { | |||||
| if (this.component){ | |||||
| this.element.find('input').prop('value', formated); | |||||
| } | |||||
| this.element.data('date', formated); | |||||
| } else { | |||||
| this.element.prop('value', formated); | |||||
| } | |||||
| }, | |||||
| setValue: function(newDate) { | |||||
| if (typeof newDate === 'string') { | |||||
| this.date = DPGlobal.parseDate(newDate, this.format); | |||||
| } else { | |||||
| this.date = new Date(newDate); | |||||
| } | |||||
| this.set(); | |||||
| this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); | |||||
| this.fill(); | |||||
| }, | |||||
| place: function(){ | |||||
| var offset = this.component ? this.component.offset() : this.element.offset(); | |||||
| this.picker.css({ | |||||
| top: offset.top + this.height, | |||||
| left: offset.left | |||||
| }); | |||||
| }, | |||||
| update: function(newDate){ | |||||
| this.date = DPGlobal.parseDate( | |||||
| typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')), | |||||
| this.format | |||||
| ); | |||||
| this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); | |||||
| this.fill(); | |||||
| }, | |||||
| fillDow: function(){ | |||||
| var dowCnt = this.weekStart; | |||||
| var html = '<tr>'; | |||||
| while (dowCnt < this.weekStart + 7) { | |||||
| html += '<th class="dow">'+DPGlobal.dates.daysMin[(dowCnt++)%7]+'</th>'; | |||||
| } | |||||
| html += '</tr>'; | |||||
| this.picker.find('.datepicker-days thead').append(html); | |||||
| }, | |||||
| fillMonths: function(){ | |||||
| var html = ''; | |||||
| var i = 0 | |||||
| while (i < 12) { | |||||
| html += '<span class="month">'+DPGlobal.dates.monthsShort[i++]+'</span>'; | |||||
| } | |||||
| this.picker.find('.datepicker-months td').append(html); | |||||
| }, | |||||
| fill: function() { | |||||
| var d = new Date(this.viewDate), | |||||
| year = d.getFullYear(), | |||||
| month = d.getMonth(), | |||||
| currentDate = this.date.valueOf(); | |||||
| this.picker.find('.datepicker-days th:eq(1)') | |||||
| .text(DPGlobal.dates.months[month]+' '+year); | |||||
| var prevMonth = new Date(year, month-1, 28,0,0,0,0), | |||||
| day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth()); | |||||
| prevMonth.setDate(day); | |||||
| prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7); | |||||
| var nextMonth = new Date(prevMonth); | |||||
| nextMonth.setDate(nextMonth.getDate() + 42); | |||||
| nextMonth = nextMonth.valueOf(); | |||||
| var html = []; | |||||
| var clsName, | |||||
| prevY, | |||||
| prevM; | |||||
| while(prevMonth.valueOf() < nextMonth) { | |||||
| if (prevMonth.getDay() === this.weekStart) { | |||||
| html.push('<tr>'); | |||||
| } | |||||
| clsName = this.onRender(prevMonth); | |||||
| prevY = prevMonth.getFullYear(); | |||||
| prevM = prevMonth.getMonth(); | |||||
| if ((prevM < month && prevY === year) || prevY < year) { | |||||
| clsName += ' old'; | |||||
| } else if ((prevM > month && prevY === year) || prevY > year) { | |||||
| clsName += ' new'; | |||||
| } | |||||
| if (prevMonth.valueOf() === currentDate) { | |||||
| clsName += ' active'; | |||||
| } | |||||
| html.push('<td class="day '+clsName+'">'+prevMonth.getDate() + '</td>'); | |||||
| if (prevMonth.getDay() === this.weekEnd) { | |||||
| html.push('</tr>'); | |||||
| } | |||||
| prevMonth.setDate(prevMonth.getDate()+1); | |||||
| } | |||||
| this.picker.find('.datepicker-days tbody').empty().append(html.join('')); | |||||
| var currentYear = this.date.getFullYear(); | |||||
| var months = this.picker.find('.datepicker-months') | |||||
| .find('th:eq(1)') | |||||
| .text(year) | |||||
| .end() | |||||
| .find('span').removeClass('active'); | |||||
| if (currentYear === year) { | |||||
| months.eq(this.date.getMonth()).addClass('active'); | |||||
| } | |||||
| html = ''; | |||||
| year = parseInt(year/10, 10) * 10; | |||||
| var yearCont = this.picker.find('.datepicker-years') | |||||
| .find('th:eq(1)') | |||||
| .text(year + '-' + (year + 9)) | |||||
| .end() | |||||
| .find('td'); | |||||
| year -= 1; | |||||
| for (var i = -1; i < 11; i++) { | |||||
| html += '<span class="year'+(i === -1 || i === 10 ? ' old' : '')+(currentYear === year ? ' active' : '')+'">'+year+'</span>'; | |||||
| year += 1; | |||||
| } | |||||
| yearCont.html(html); | |||||
| }, | |||||
| click: function(e) { | |||||
| e.stopPropagation(); | |||||
| e.preventDefault(); | |||||
| var target = $(e.target).closest('span, td, th'); | |||||
| if (target.length === 1) { | |||||
| switch(target[0].nodeName.toLowerCase()) { | |||||
| case 'th': | |||||
| switch(target[0].className) { | |||||
| case 'switch': | |||||
| this.showMode(1); | |||||
| break; | |||||
| case 'prev': | |||||
| case 'next': | |||||
| this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call( | |||||
| this.viewDate, | |||||
| this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) + | |||||
| DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1) | |||||
| ); | |||||
| this.fill(); | |||||
| this.set(); | |||||
| break; | |||||
| } | |||||
| break; | |||||
| case 'span': | |||||
| if (target.is('.month')) { | |||||
| var month = target.parent().find('span').index(target); | |||||
| this.viewDate.setMonth(month); | |||||
| } else { | |||||
| var year = parseInt(target.text(), 10)||0; | |||||
| this.viewDate.setFullYear(year); | |||||
| } | |||||
| if (this.viewMode !== 0) { | |||||
| this.date = new Date(this.viewDate); | |||||
| this.element.trigger({ | |||||
| type: 'changeDate', | |||||
| date: this.date, | |||||
| viewMode: DPGlobal.modes[this.viewMode].clsName | |||||
| }); | |||||
| } | |||||
| this.showMode(-1); | |||||
| this.fill(); | |||||
| this.set(); | |||||
| break; | |||||
| case 'td': | |||||
| if (target.is('.day') && !target.is('.disabled')){ | |||||
| var day = parseInt(target.text(), 10)||1; | |||||
| var month = this.viewDate.getMonth(); | |||||
| if (target.is('.old')) { | |||||
| month -= 1; | |||||
| } else if (target.is('.new')) { | |||||
| month += 1; | |||||
| } | |||||
| var year = this.viewDate.getFullYear(); | |||||
| this.date = new Date(year, month, day,0,0,0,0); | |||||
| this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0); | |||||
| this.fill(); | |||||
| this.set(); | |||||
| this.element.trigger({ | |||||
| type: 'changeDate', | |||||
| date: this.date, | |||||
| viewMode: DPGlobal.modes[this.viewMode].clsName | |||||
| }); | |||||
| } | |||||
| break; | |||||
| } | |||||
| } | |||||
| }, | |||||
| mousedown: function(e){ | |||||
| e.stopPropagation(); | |||||
| e.preventDefault(); | |||||
| }, | |||||
| showMode: function(dir) { | |||||
| if (dir) { | |||||
| this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir)); | |||||
| } | |||||
| this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); | |||||
| } | |||||
| }; | |||||
| $.fn.datepicker = function ( option, val ) { | |||||
| return this.each(function () { | |||||
| var $this = $(this), | |||||
| data = $this.data('datepicker'), | |||||
| options = typeof option === 'object' && option; | |||||
| if (!data) { | |||||
| $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options)))); | |||||
| } | |||||
| if (typeof option === 'string') data[option](val); | |||||
| }); | |||||
| }; | |||||
| $.fn.datepicker.defaults = { | |||||
| onRender: function(date) { | |||||
| return ''; | |||||
| } | |||||
| }; | |||||
| $.fn.datepicker.Constructor = Datepicker; | |||||
| var DPGlobal = { | |||||
| modes: [ | |||||
| { | |||||
| clsName: 'days', | |||||
| navFnc: 'Month', | |||||
| navStep: 1 | |||||
| }, | |||||
| { | |||||
| clsName: 'months', | |||||
| navFnc: 'FullYear', | |||||
| navStep: 1 | |||||
| }, | |||||
| { | |||||
| clsName: 'years', | |||||
| navFnc: 'FullYear', | |||||
| navStep: 10 | |||||
| }], | |||||
| dates:{ | |||||
| days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], | |||||
| daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], | |||||
| daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], | |||||
| months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |||||
| monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] | |||||
| }, | |||||
| isLeapYear: function (year) { | |||||
| return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) | |||||
| }, | |||||
| getDaysInMonth: function (year, month) { | |||||
| return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] | |||||
| }, | |||||
| parseFormat: function(format){ | |||||
| var separator = format.match(/[.\/\-\s].*?/), | |||||
| parts = format.split(/\W+/); | |||||
| if (!separator || !parts || parts.length === 0){ | |||||
| throw new Error("Invalid date format."); | |||||
| } | |||||
| return {separator: separator, parts: parts}; | |||||
| }, | |||||
| parseDate: function(date, format) { | |||||
| var parts = date.split(format.separator), | |||||
| date = new Date(), | |||||
| val; | |||||
| date.setHours(0); | |||||
| date.setMinutes(0); | |||||
| date.setSeconds(0); | |||||
| date.setMilliseconds(0); | |||||
| if (parts.length === format.parts.length) { | |||||
| var year = date.getFullYear(), day = date.getDate(), month = date.getMonth(); | |||||
| for (var i=0, cnt = format.parts.length; i < cnt; i++) { | |||||
| val = parseInt(parts[i], 10)||1; | |||||
| switch(format.parts[i]) { | |||||
| case 'dd': | |||||
| case 'd': | |||||
| day = val; | |||||
| date.setDate(val); | |||||
| break; | |||||
| case 'mm': | |||||
| case 'm': | |||||
| month = val - 1; | |||||
| date.setMonth(val - 1); | |||||
| break; | |||||
| case 'yy': | |||||
| year = 2000 + val; | |||||
| date.setFullYear(2000 + val); | |||||
| break; | |||||
| case 'yyyy': | |||||
| year = val; | |||||
| date.setFullYear(val); | |||||
| break; | |||||
| } | |||||
| } | |||||
| date = new Date(year, month, day, 0 ,0 ,0); | |||||
| } | |||||
| return date; | |||||
| }, | |||||
| formatDate: function(date, format){ | |||||
| var val = { | |||||
| d: date.getDate(), | |||||
| m: date.getMonth() + 1, | |||||
| yy: date.getFullYear().toString().substring(2), | |||||
| yyyy: date.getFullYear() | |||||
| }; | |||||
| val.dd = (val.d < 10 ? '0' : '') + val.d; | |||||
| val.mm = (val.m < 10 ? '0' : '') + val.m; | |||||
| var date = []; | |||||
| for (var i=0, cnt = format.parts.length; i < cnt; i++) { | |||||
| date.push(val[format.parts[i]]); | |||||
| } | |||||
| return date.join(format.separator); | |||||
| }, | |||||
| headTemplate: '<thead>'+ | |||||
| '<tr>'+ | |||||
| '<th class="prev">‹</th>'+ | |||||
| '<th colspan="5" class="switch"></th>'+ | |||||
| '<th class="next">›</th>'+ | |||||
| '</tr>'+ | |||||
| '</thead>', | |||||
| contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>' | |||||
| }; | |||||
| DPGlobal.template = '<div class="datepicker dropdown-menu">'+ | |||||
| '<div class="datepicker-days">'+ | |||||
| '<table class=" table-condensed">'+ | |||||
| DPGlobal.headTemplate+ | |||||
| '<tbody></tbody>'+ | |||||
| '</table>'+ | |||||
| '</div>'+ | |||||
| '<div class="datepicker-months">'+ | |||||
| '<table class="table-condensed">'+ | |||||
| DPGlobal.headTemplate+ | |||||
| DPGlobal.contTemplate+ | |||||
| '</table>'+ | |||||
| '</div>'+ | |||||
| '<div class="datepicker-years">'+ | |||||
| '<table class="table-condensed">'+ | |||||
| DPGlobal.headTemplate+ | |||||
| DPGlobal.contTemplate+ | |||||
| '</table>'+ | |||||
| '</div>'+ | |||||
| '</div>'; | |||||
| }( window.jQuery ); | |||||
| @@ -0,0 +1,182 @@ | |||||
| /*! | |||||
| * Datepicker for Bootstrap | |||||
| * | |||||
| * Copyright 2012 Stefan Petre | |||||
| * Licensed under the Apache License v2.0 | |||||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| */ | |||||
| .datepicker { | |||||
| top: 0; | |||||
| left: 0; | |||||
| padding: 4px; | |||||
| margin-top: 1px; | |||||
| -webkit-border-radius: 4px; | |||||
| -moz-border-radius: 4px; | |||||
| border-radius: 4px; | |||||
| /*.dow { | |||||
| border-top: 1px solid #ddd !important; | |||||
| }*/ | |||||
| } | |||||
| .datepicker:before { | |||||
| content: ''; | |||||
| display: inline-block; | |||||
| border-left: 7px solid transparent; | |||||
| border-right: 7px solid transparent; | |||||
| border-bottom: 7px solid #ccc; | |||||
| border-bottom-color: rgba(0, 0, 0, 0.2); | |||||
| position: absolute; | |||||
| top: -7px; | |||||
| left: 6px; | |||||
| } | |||||
| .datepicker:after { | |||||
| content: ''; | |||||
| display: inline-block; | |||||
| border-left: 6px solid transparent; | |||||
| border-right: 6px solid transparent; | |||||
| border-bottom: 6px solid #ffffff; | |||||
| position: absolute; | |||||
| top: -6px; | |||||
| left: 7px; | |||||
| } | |||||
| .datepicker > div { | |||||
| display: none; | |||||
| } | |||||
| .datepicker table { | |||||
| width: 100%; | |||||
| margin: 0; | |||||
| } | |||||
| .datepicker td, | |||||
| .datepicker th { | |||||
| text-align: center; | |||||
| width: 20px; | |||||
| height: 20px; | |||||
| -webkit-border-radius: 4px; | |||||
| -moz-border-radius: 4px; | |||||
| border-radius: 4px; | |||||
| } | |||||
| .datepicker td.day:hover { | |||||
| background: #eeeeee; | |||||
| cursor: pointer; | |||||
| } | |||||
| .datepicker td.day.disabled { | |||||
| color: #eeeeee; | |||||
| } | |||||
| .datepicker td.old, | |||||
| .datepicker td.new { | |||||
| color: #999999; | |||||
| } | |||||
| .datepicker td.active, | |||||
| .datepicker td.active:hover { | |||||
| color: #ffffff; | |||||
| background-color: #006dcc; | |||||
| background-image: -moz-linear-gradient(top, #0088cc, #0044cc); | |||||
| background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); | |||||
| background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); | |||||
| background-image: -o-linear-gradient(top, #0088cc, #0044cc); | |||||
| background-image: linear-gradient(to bottom, #0088cc, #0044cc); | |||||
| background-repeat: repeat-x; | |||||
| filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); | |||||
| border-color: #0044cc #0044cc #002a80; | |||||
| border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |||||
| *background-color: #0044cc; | |||||
| /* Darken IE7 buttons by default so they stand out more given they won't have borders */ | |||||
| filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); | |||||
| color: #fff; | |||||
| text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |||||
| } | |||||
| .datepicker td.active:hover, | |||||
| .datepicker td.active:hover:hover, | |||||
| .datepicker td.active:focus, | |||||
| .datepicker td.active:hover:focus, | |||||
| .datepicker td.active:active, | |||||
| .datepicker td.active:hover:active, | |||||
| .datepicker td.active.active, | |||||
| .datepicker td.active:hover.active, | |||||
| .datepicker td.active.disabled, | |||||
| .datepicker td.active:hover.disabled, | |||||
| .datepicker td.active[disabled], | |||||
| .datepicker td.active:hover[disabled] { | |||||
| color: #ffffff; | |||||
| background-color: #0044cc; | |||||
| *background-color: #003bb3; | |||||
| } | |||||
| .datepicker td.active:active, | |||||
| .datepicker td.active:hover:active, | |||||
| .datepicker td.active.active, | |||||
| .datepicker td.active:hover.active { | |||||
| background-color: #003399 \9; | |||||
| } | |||||
| .datepicker td span { | |||||
| display: block; | |||||
| width: 47px; | |||||
| height: 54px; | |||||
| line-height: 54px; | |||||
| float: left; | |||||
| margin: 2px; | |||||
| cursor: pointer; | |||||
| -webkit-border-radius: 4px; | |||||
| -moz-border-radius: 4px; | |||||
| border-radius: 4px; | |||||
| } | |||||
| .datepicker td span:hover { | |||||
| background: #eeeeee; | |||||
| } | |||||
| .datepicker td span.active { | |||||
| color: #ffffff; | |||||
| background-color: #006dcc; | |||||
| background-image: -moz-linear-gradient(top, #0088cc, #0044cc); | |||||
| background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); | |||||
| background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); | |||||
| background-image: -o-linear-gradient(top, #0088cc, #0044cc); | |||||
| background-image: linear-gradient(to bottom, #0088cc, #0044cc); | |||||
| background-repeat: repeat-x; | |||||
| filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); | |||||
| border-color: #0044cc #0044cc #002a80; | |||||
| border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |||||
| *background-color: #0044cc; | |||||
| /* Darken IE7 buttons by default so they stand out more given they won't have borders */ | |||||
| filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); | |||||
| color: #fff; | |||||
| text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |||||
| } | |||||
| .datepicker td span.active:hover, | |||||
| .datepicker td span.active:focus, | |||||
| .datepicker td span.active:active, | |||||
| .datepicker td span.active.active, | |||||
| .datepicker td span.active.disabled, | |||||
| .datepicker td span.active[disabled] { | |||||
| color: #ffffff; | |||||
| background-color: #0044cc; | |||||
| *background-color: #003bb3; | |||||
| } | |||||
| .datepicker td span.active:active, | |||||
| .datepicker td span.active.active { | |||||
| background-color: #003399 \9; | |||||
| } | |||||
| .datepicker td span.old { | |||||
| color: #999999; | |||||
| } | |||||
| .datepicker th.switch { | |||||
| width: 145px; | |||||
| } | |||||
| .datepicker th.next, | |||||
| .datepicker th.prev { | |||||
| font-size: 21px; | |||||
| } | |||||
| .datepicker thead tr:first-child th { | |||||
| cursor: pointer; | |||||
| } | |||||
| .datepicker thead tr:first-child th:hover { | |||||
| background: #eeeeee; | |||||
| } | |||||
| .input-append.date .add-on i, | |||||
| .input-prepend.date .add-on i { | |||||
| display: block; | |||||
| cursor: pointer; | |||||
| width: 16px; | |||||
| height: 16px; | |||||
| } | |||||
| @@ -2,7 +2,7 @@ | |||||
| <%def name="jsAddOn()"> | <%def name="jsAddOn()"> | ||||
| <script src="/vendor/timeline/js/timeline-src.js"></script> | <script src="/vendor/timeline/js/timeline-src.js"></script> | ||||
| <script> | <script> | ||||
| var timeline = new VMM.Timeline("timeline", '850px', '500px'); | |||||
| var timeline = new VMM.Timeline("timeline", '95%', '500px'); | |||||
| var c = {language:{ lang:"fr",api:{wikipedia:"fr"},date:{month:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],month_abbr:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","dec."],day:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],day_abbr:["Dim.","Lu.","Ma.","Me.","Jeu.","Vend.","Sam."]},dateformats:{year:"yyyy",month_short:"mmm",month:"mmmm yyyy",full_short:"d mmm",full:"d mmmm yyyy",time_short:"HH:MM:SS",time_no_seconds_short:"HH:MM",time_no_seconds_small_date:"HH:MM'<br/><small>'d mmmm yyyy'</small>'",full_long:"dddd',' d mmm yyyy 'à' HH:MM",full_long_small_date:"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"},messages:{loading_timeline:"Chargement de la frise en cours... ",return_to_title:"Retour à la page d'accueil",expand_timeline:"Elargir la frise",contract_timeline:"Réduire la frise",wikipedia:"Extrait de Wikipedia, l'encyclopédie libre",loading_content:"Chargement",loading:"Chargement",swipe_nav:"Swipe to Navigate"}}}; | var c = {language:{ lang:"fr",api:{wikipedia:"fr"},date:{month:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],month_abbr:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","dec."],day:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],day_abbr:["Dim.","Lu.","Ma.","Me.","Jeu.","Vend.","Sam."]},dateformats:{year:"yyyy",month_short:"mmm",month:"mmmm yyyy",full_short:"d mmm",full:"d mmmm yyyy",time_short:"HH:MM:SS",time_no_seconds_short:"HH:MM",time_no_seconds_small_date:"HH:MM'<br/><small>'d mmmm yyyy'</small>'",full_long:"dddd',' d mmm yyyy 'à' HH:MM",full_long_small_date:"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"},messages:{loading_timeline:"Chargement de la frise en cours... ",return_to_title:"Retour à la page d'accueil",expand_timeline:"Elargir la frise",contract_timeline:"Réduire la frise",wikipedia:"Extrait de Wikipedia, l'encyclopédie libre",loading_content:"Chargement",loading:"Chargement",swipe_nav:"Swipe to Navigate"}}}; | ||||
| timeline.init(c, "/2015/timeline-json"); | timeline.init(c, "/2015/timeline-json"); | ||||
| </script> | </script> | ||||
| @@ -10,42 +10,69 @@ | |||||
| <%def name="cssAddOn()"> | <%def name="cssAddOn()"> | ||||
| <!-- The default timeline stylesheet --> | <!-- The default timeline stylesheet --> | ||||
| <link rel="stylesheet" href="/vendor/timeline/css/timeline.css" /> | <link rel="stylesheet" href="/vendor/timeline/css/timeline.css" /> | ||||
| <style> | |||||
| .enum li { | |||||
| list-style-type: none; | |||||
| background-image: url(/img/puce.png); | |||||
| background-repeat: no-repeat; | |||||
| background-position: 0 6px; | |||||
| padding-left: 16px; | |||||
| } | |||||
| </style> | |||||
| </%def> | </%def> | ||||
| <div class="pull-right"> | |||||
| Synchronisez votre calendrier avec <a href="/2015/JM2L.ics">le fichier ical JM2L 2015</a> | |||||
| </div> | |||||
| <br> | |||||
| <div id="timeline" style="margin-left: -50px;display:block;"></div> | |||||
| <div class="clearfix"> </div> | |||||
| <div style="top:500px;position: relative"> | |||||
| Le 28 Novembre 2015 aura lieu la 9e édition des Journées Méditerranéennes du Logiciel Libre (JM2LL) à | |||||
| Sophia-Antipolis destinées tout public (http://jm2l.linux-azur.org/). | |||||
| <br> | |||||
| Le thème de cette année sera « Do It Yourself » ou « Faîtes le vous-même » : | |||||
| <ul> | |||||
| <li>Migration vers les logiciels libres</li> | |||||
| <li>Libres enfants du numérique : jeux et loisirs pour les juniors.</li> | |||||
| <li>Gérer ses données personnelles</li> | |||||
| <li>Do It Yourself (jeux vidéos, fablabs…)</li> | |||||
| <li>Culture libre</li> | |||||
| <li>Communautés du libre</li> | |||||
| </ul> | |||||
| Nous faisons appel aux acteurs du numérique libre pour alimenter le programme des conférences/ateliers : | |||||
| si vous souhaitez échanger avec le public et partager un bon moment avec la communauté, inscrivez-vous ! | |||||
| <H2 style="text-align: center;">9<sup>ème</sup> édition des JM2L</H2> | |||||
| <br> | <br> | ||||
| Nous vous proposons cinq formats de contribution : | |||||
| <ul> | |||||
| <li>Stands au sein du village associatif</li> | |||||
| <li>Conférences de 20 ou 40 minutes suivies d’un échange</li> | |||||
| <li>Ateliers de 45 minutes ou 1h15</li> | |||||
| <li>Démos de vos matériels, logiciels ou projets libres</li> | |||||
| <li>Animations ouvertes</li> | |||||
| </ul> | |||||
| <p> | |||||
| Il sera bien sûr possible de combiner plusieurs formats (par exemple, une démo ou une conférence suivie | |||||
| d’un atelier). | |||||
| </p> | |||||
| <p> | |||||
| Vous pouvez nous faire parvenir vos propositions directement via le menu participer. | |||||
| </p> | |||||
| <div class="row-fluid"> | |||||
| <div class="span4 offset1"> | |||||
| <blockquote> | |||||
| Le 28 Novembre 2015 aura lieu la 9<sup>ème</sup> édition des Journées Méditerranéennes du Logiciel Libre (JM2L) à | |||||
| Polytech'Nice destinée à tout public. | |||||
| </blockquote> | |||||
| Le thème de cette année sera « Do It Yourself » ou « Faîtes le vous-même » : | |||||
| <ul class="enum"> | |||||
| <li>Migration vers les logiciels libres</li> | |||||
| ## <li>Libres enfants du numérique : jeux et loisirs pour les juniors.</li> | |||||
| ## <li>Gérer ses données personnelles</li> | |||||
| <li>Do It Yourself (jeux vidéos, fablabs…)</li> | |||||
| <li>Culture libre</li> | |||||
| ## <li>Communautés du libre</li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="span4 offset1"> | |||||
| <p> | |||||
| Nous faisons appel aux acteurs du numérique libre pour alimenter le programme des conférences/ateliers : | |||||
| <br> | |||||
| Vous pouvez nous faire parvenir vos propositions directement via le menu <a href="/participer-l-evenement">participer.</a> | |||||
| <br> | |||||
| Si vous souhaitez échanger avec le public et partager un bon moment avec la communauté, <a href="/participer-l-evenement#inscription">inscrivez-vous !</a> | |||||
| <br> | |||||
| Vous pouvez d'ores et déjà synchroniser votre calendrier avec <a href="/2015/JM2L.ics">notre fichier ical JM2L 2015</a> | |||||
| </p> | |||||
| </div> | |||||
| </div> | |||||
| ## Nous vous proposons plusieurs formats de contribution : | |||||
| ## <ul class="enum"> | |||||
| ## <li>Stands au sein du village associatif</li> | |||||
| ## <li>Conférences de 20 à 70 minutes suivies d’un échange</li> | |||||
| ## <li>Ateliers de 45 minutes ou 1h15</li> | |||||
| ## <li>Démos de vos matériels, logiciels ou projets libres</li> | |||||
| ## <li>Animations ouvertes</li> | |||||
| ## <li>Vous pouvez aussi aider l'équipe à la logistique.</li> | |||||
| ## </ul> | |||||
| ## <p> | |||||
| ## Il sera bien sûr possible de combiner plusieurs formats (par exemple, une démo ou une conférence suivie | |||||
| ## d’un atelier). | |||||
| ## </p> | |||||
| <div class="row-fluid"> | |||||
| <div class="span12"> | |||||
| <!-- TimeLine --> | |||||
| <div id="timeline"></div> | |||||
| </div> | |||||
| </div> | |||||
| <div class="row-fluid"> | |||||
| <div style="height:500px"> | |||||
| </div> | |||||
| </div> | </div> | ||||
| @@ -47,6 +47,8 @@ | |||||
| </ol> | </ol> | ||||
| % if not link: | % if not link: | ||||
| <strong>Remplissez ce formulaire :</strong> | <strong>Remplissez ce formulaire :</strong> | ||||
| <div class="row-fluid"> | |||||
| <div class="span7 offset3"> | |||||
| <% | <% | ||||
| DicForm ={ | DicForm ={ | ||||
| 'nom': {'PlaceHolder':u"Mon nom", 'ContainerStyle':'float:left;'}, | 'nom': {'PlaceHolder':u"Mon nom", 'ContainerStyle':'float:left;'}, | ||||
| @@ -68,10 +70,11 @@ DicForm ={ | |||||
| </div> | </div> | ||||
| <button class="btn btn-large btn-primary" type="submit">C'est parti !</button> | <button class="btn btn-large btn-primary" type="submit">C'est parti !</button> | ||||
| </form> | </form> | ||||
| </div> | |||||
| </div> | |||||
| % else: | % else: | ||||
| <p> | <p> | ||||
| Vous venez de recevoir un mail... | Vous venez de recevoir un mail... | ||||
| Ici, ... le texte à définir ... | |||||
| </p> | </p> | ||||
| Cliquez sur ce lien pour finir votre inscription : <a href="${request.route_path('bymail', hash=link)}">Mon lien</a> | Cliquez sur ce lien pour finir votre inscription : <a href="${request.route_path('bymail', hash=link)}">Mon lien</a> | ||||
| % endif | % endif | ||||
| @@ -1,11 +1,6 @@ | |||||
| <%namespace name="Modals" file="jm2l:templates/modals.mako"/> | <%namespace name="Modals" file="jm2l:templates/modals.mako"/> | ||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | ||||
| <%def name="profil_wrapper(uprofil, profil_form)"> | <%def name="profil_wrapper(uprofil, profil_form)"> | ||||
| <div id="Photos"> | |||||
| ${helpers.show_my_pictures(uprofil)} | |||||
| </div> | |||||
| <a href="/sign/jm2l/${uprofil.my_hash}">Mon lien</a> | |||||
| <h3>${profil_form.prenom.data} ${profil_form.nom.data}</h3> | |||||
| ##<form id="ProfilForm" action="javascript:DoPost('/2015/modal/Place/${form.place_id.data}');"> | ##<form id="ProfilForm" action="javascript:DoPost('/2015/modal/Place/${form.place_id.data}');"> | ||||
| % if uprofil!=request.user and request.user.uid==1: | % if uprofil!=request.user and request.user.uid==1: | ||||
| @@ -14,8 +9,42 @@ | |||||
| <form id="ProfilForm" action="/MesJM2L" method="POST"> | <form id="ProfilForm" action="/MesJM2L" method="POST"> | ||||
| % endif | % endif | ||||
| <div class="row-fluid"> | |||||
| <div class="span8"> | |||||
| <a href="/sign/jm2l/${uprofil.my_hash}">Mon lien de connection</a> - | |||||
| <a href="/user/${request.user.slug}">Mon profil publique</a><br> | |||||
| <h3>${profil_form.prenom.data} ${profil_form.nom.data}</h3> | |||||
| <% | <% | ||||
| DicForm = { | |||||
| DicFormA = { | |||||
| 'nom': {'PlaceHolder':u"Mon Nom", 'ContainerClass':"span6", 'next':False}, | |||||
| 'prenom': {'PlaceHolder':u"Mon Prénom", 'ContainerClass':"span6", 'next':True}, | |||||
| 'pseudo': {'PlaceHolder':u"Mon Pseudo", 'ContainerClass':"span6", 'next':False}, | |||||
| 'mail': {'PlaceHolder':u"mon.mail@fqdn.tld", 'ContainerClass':"span6", 'next':True}, | |||||
| 'phone': {'PlaceHolder':u"0612345678", 'ContainerClass':"span6", 'next':False}, | |||||
| 'website': {'PlaceHolder':u"http://ma-page-web.moi",'ContainerClass':"span6", 'next':True}, | |||||
| 'gpg_key': {'PlaceHolder':u"Ma clé gpg", 'ContainerClass':"span6", 'next':False}, | |||||
| 'soc_link':{'PlaceHolder':u"#jm2l sur irc.freenode.org",'ContainerClass':"span6", 'next':True}, | |||||
| 'bio': {'Ignore':True}, | |||||
| 'tiersship': {'Ignore':True}, | |||||
| 'id': {'Ignore':True}, | |||||
| 'user_id': {'Ignore':True}, | |||||
| } | |||||
| DicFormB = { | |||||
| 'nom': {'Ignore':True }, | |||||
| 'prenom': {'Ignore':True }, | |||||
| 'pseudo': {'Ignore':True }, | |||||
| 'mail': {'Ignore':True }, | |||||
| 'phone': {'Ignore':True }, | |||||
| 'website': {'Ignore':True }, | |||||
| 'gpg_key': {'Ignore':True}, | |||||
| 'soc_link': {'Ignore':True}, | |||||
| 'bio': {'PlaceHolder':u"Ma Bilibiographie", "ckeditor":1, 'ContainerClass':"span11", 'next':False }, | |||||
| 'tiersship': {'Ignore':True} | |||||
| } | |||||
| DicForm2 = { | |||||
| 'nom': {'PlaceHolder':u"Mon Nom", "FieldStyle":"width:16em;", 'ContainerStyle':"float:left;"}, | 'nom': {'PlaceHolder':u"Mon Nom", "FieldStyle":"width:16em;", 'ContainerStyle':"float:left;"}, | ||||
| 'prenom': {'PlaceHolder':u"Mon Prénom", "FieldStyle":"width:16em;"}, | 'prenom': {'PlaceHolder':u"Mon Prénom", "FieldStyle":"width:16em;"}, | ||||
| 'pseudo': {'PlaceHolder':u"Mon Pseudo", "FieldStyle":"width:16em;", 'ContainerStyle':"float:left;"}, | 'pseudo': {'PlaceHolder':u"Mon Pseudo", "FieldStyle":"width:16em;", 'ContainerStyle':"float:left;"}, | ||||
| @@ -27,10 +56,17 @@ DicForm = { | |||||
| 'bio': {'PlaceHolder':u"Ma Bilibiographie", "FieldStyle":"width:95%;min-height:150px;", "fieldset":True, "ckeditor":1 }, | 'bio': {'PlaceHolder':u"Ma Bilibiographie", "FieldStyle":"width:95%;min-height:150px;", "fieldset":True, "ckeditor":1 }, | ||||
| 'tiersship': {'Ignore':True} | 'tiersship': {'Ignore':True} | ||||
| } | } | ||||
| %> | |||||
| ${helpers.DisplayForm(profil_form, DicForm)} | |||||
| <fieldset> | |||||
| %> | |||||
| ${helpers.DisplayRespForm(profil_form, DicFormA)} | |||||
| </div> | |||||
| <div class="span4"> | |||||
| ${helpers.show_my_pictures(uprofil)} | |||||
| </div> | |||||
| </div> | |||||
| ${helpers.DisplayRespForm(profil_form, DicFormB)} | |||||
| <fieldset> | |||||
| <legend>Activité</legend> | <legend>Activité</legend> | ||||
| Si vous ne trouvez pas l'entité que vous souhaitez promouvoir (Association, GULL, Entreprise, Logiciel, ...). | Si vous ne trouvez pas l'entité que vous souhaitez promouvoir (Association, GULL, Entreprise, Logiciel, ...). | ||||
| Vous pouvez <a href="/entity"> en ajouter une. </a> | Vous pouvez <a href="/entity"> en ajouter une. </a> | ||||
| @@ -110,8 +146,9 @@ DicForm = { | |||||
| </div> | </div> | ||||
| </fieldset> | </fieldset> | ||||
| <div class="span2 offset5"> | |||||
| <input class="btn btn-primary" type="submit" value="Enregistrer !" /> | <input class="btn btn-primary" type="submit" value="Enregistrer !" /> | ||||
| </div> | |||||
| </form> | </form> | ||||
| </%def> | </%def> | ||||
| @@ -4,21 +4,21 @@ fieldset:disabled { | |||||
| color:#CCC; | color:#CCC; | ||||
| } | } | ||||
| </style> | </style> | ||||
| ##<input type="checkbox" onclick="javascript:$('.ComeToJM2L').attr( 'disabled', !this.checked );">Je viens aux JM2L 2015</input> | |||||
| <form id="ProfilForm" action="/MonSejour" method="POST"> | |||||
| <fieldset class="ComeToJM2L"> | <fieldset class="ComeToJM2L"> | ||||
| <legend>Arrivée</legend> | <legend>Arrivée</legend> | ||||
| <div class="form-inline"> | <div class="form-inline"> | ||||
| J'arrive | J'arrive | ||||
| <select style="width:12em;" id="Arrival:Place" name="Arrival:Place" title="Lieu"> | <select style="width:12em;" id="Arrival:Place" name="Arrival:Place" title="Lieu"> | ||||
| % for place in Places: | |||||
| <option value="${place.place_id}">${place.display_name}</option> | |||||
| % endfor | |||||
| % for place in Places: | |||||
| <option value="${place.place_id}">${place.display_name}</option> | |||||
| % endfor | |||||
| </select> | </select> | ||||
| le | le | ||||
| <select style="width:7em;" id="Arrival:Day" name="Arrival:Day" title="Jour"> | <select style="width:7em;" id="Arrival:Day" name="Arrival:Day" title="Jour"> | ||||
| <option value="Jeudi">Jeudi</option> | |||||
| <option value="Vendredi">Vendredi</option> | |||||
| <option value="Samedi">Samedi</option> | |||||
| <option value="26">Jeudi</option> | |||||
| <option value="27">Vendredi</option> | |||||
| <option value="28">Samedi</option> | |||||
| </select> | </select> | ||||
| , | , | ||||
| <select style="width:15em;" id="Arrival:Confidence" name="Arrival:Confidence"> | <select style="width:15em;" id="Arrival:Confidence" name="Arrival:Confidence"> | ||||
| @@ -29,14 +29,14 @@ fieldset:disabled { | |||||
| </select> | </select> | ||||
| à | à | ||||
| <select style="width:6em;" id="Arrival:Hour" class="formforform-field" name="field_8" title="Le"> | |||||
| <select style="width:6em;" id="Arrival:Hour" class="formforform-field" name="Arrival:Hour" title="Le"> | |||||
| % for hour in range(24): | % for hour in range(24): | ||||
| % for minutes in range(0,60,10): | |||||
| <option value="${hour}h${minutes}" | |||||
| % if str("%dh%.2d" % (hour, minutes))=='10h00': | |||||
| selected="selected" | |||||
| % endif | |||||
| >${"%dh%.2d" % (hour, minutes)}</option> | |||||
| % for minutes in range(0,60,10): | |||||
| <option value="${"%d:%.2d" % (hour, minutes)}" | |||||
| % if str("%dh%.2d" % (hour, minutes))=='10h00': | |||||
| selected="selected" | |||||
| % endif | |||||
| >${"%dh%.2d" % (hour, minutes)}</option> | |||||
| % endfor | % endfor | ||||
| % endfor | % endfor | ||||
| </select> | </select> | ||||
| @@ -46,13 +46,7 @@ fieldset:disabled { | |||||
| context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Day').select2({width:'resolve'});" % jsitem ) | context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Day').select2({width:'resolve'});" % jsitem ) | ||||
| context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Confidence').select2({width:'resolve'});" % jsitem ) | context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Confidence').select2({width:'resolve'});" % jsitem ) | ||||
| context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Hour').select2({width:'resolve'});" % jsitem ) | context._kwargs['postpone_js'].append( "$('#Arrival\\\\:Hour').select2({width:'resolve'});" % jsitem ) | ||||
| %> | |||||
| ##<script type="text/javascript"> | |||||
| ## $("#Arrival\\:Place").select2({}); | |||||
| ## $("#Arrival\\:Day").select2({}); | |||||
| ## $("#Arrival\\:Confidence").select2({}); | |||||
| ## $("#Arrival\\:Hour").select2({}); | |||||
| ##</script> | |||||
| %> | |||||
| </div> | </div> | ||||
| <p> | <p> | ||||
| <div class="control-group" style="background-color: #fafafa;padding: 10px 50px; width:60%"> | <div class="control-group" style="background-color: #fafafa;padding: 10px 50px; width:60%"> | ||||
| @@ -97,9 +91,9 @@ fieldset:disabled { | |||||
| </select> | </select> | ||||
| le | le | ||||
| <select style="width:7em;" id="Departure:Day" class="formforform-field" name="field_8" title="Le"> | <select style="width:7em;" id="Departure:Day" class="formforform-field" name="field_8" title="Le"> | ||||
| <option value="Samedi">Samedi</option> | |||||
| <option value="Dimanche">Dimanche</option> | |||||
| <option value="Lundi">Lundi</option> | |||||
| <option value="28">Samedi</option> | |||||
| <option value="29">Dimanche</option> | |||||
| <option value="30">Lundi</option> | |||||
| </select> | </select> | ||||
| , | , | ||||
| <select style="width:14em;" id="Departure:Confidence" class="formforform-field" name="field_8" title="Le"> | <select style="width:14em;" id="Departure:Confidence" class="formforform-field" name="field_8" title="Le"> | ||||
| @@ -127,14 +121,6 @@ fieldset:disabled { | |||||
| context._kwargs['postpone_js'].append( "$('#Departure\\\\:Confidence').select2({width:'resolve'});" % jsitem ) | context._kwargs['postpone_js'].append( "$('#Departure\\\\:Confidence').select2({width:'resolve'});" % jsitem ) | ||||
| context._kwargs['postpone_js'].append( "$('#Departure\\\\:Hour').select2({width:'resolve'});" % jsitem ) | context._kwargs['postpone_js'].append( "$('#Departure\\\\:Hour').select2({width:'resolve'});" % jsitem ) | ||||
| %> | %> | ||||
| ##<script type="text/javascript"> | |||||
| ## $("#Departure\\:Place").select2({}); | |||||
| ## $("#Departure\\:Day").select2({}); | |||||
| ## $("#Departure\\:Confidence").select2({}); | |||||
| ## $("#Departure\\:Hour").select2({}); | |||||
| ##</script> | |||||
| </div> | </div> | ||||
| <p> | <p> | ||||
| <div class="control-group" style="background-color: #fafafa;padding: 10px 50px; width:60%"> | <div class="control-group" style="background-color: #fafafa;padding: 10px 50px; width:60%"> | ||||
| @@ -169,4 +155,11 @@ fieldset:disabled { | |||||
| </div> | </div> | ||||
| </p> | </p> | ||||
| </fieldset> | </fieldset> | ||||
| <center> | |||||
| <button type="submit" class="btn btn-large btn-primary" /> | |||||
| <i class="icon-ok icon-white"></i> Enregistrer | |||||
| </button> | |||||
| </center> | |||||
| </form> | |||||
| </%def> | </%def> | ||||
| @@ -1,4 +1,16 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <%def name="jsAddOn_head()"> | |||||
| <script src="/vendor/leaflet/js/leaflet.js"></script> | |||||
| </%def> | |||||
| <%def name="cssAddOn()"> | |||||
| <link rel="stylesheet" href="/vendor/leaflet/css/leaflet.css" /> | |||||
| <style> | |||||
| #come_map { | |||||
| height: 300px; | |||||
| } | |||||
| </style> | |||||
| </%def> | |||||
| <h2 class="page-title">Nous rejoindre...</h2> | <h2 class="page-title">Nous rejoindre...</h2> | ||||
| <div class="span10 offset1"> | <div class="span10 offset1"> | ||||
| @@ -12,9 +24,11 @@ | |||||
| <div class="span4 offset1"> | <div class="span4 offset1"> | ||||
| <h4>Le staff</h4> | <h4>Le staff</h4> | ||||
| <dl> | <dl> | ||||
| <dt>Mail</dt> | |||||
| <dt>sur IRC</dt> | |||||
| <dd>» #jm2l@irc.freenode.net</dd> | |||||
| <dt>par Mail</dt> | |||||
| <dd>» contact at jm2l.linux-azur.org</dd> | <dd>» contact at jm2l.linux-azur.org</dd> | ||||
| <dt>Téléphone</dt> | |||||
| <dt>par Téléphone</dt> | |||||
| <dd>» +33 (0) 6 52 42 31 37</dd> | <dd>» +33 (0) 6 52 42 31 37</dd> | ||||
| </dl> | </dl> | ||||
| </div> | </div> | ||||
| @@ -25,12 +39,28 @@ | |||||
| 930, route des Colles (site des Templiers) <br> | 930, route des Colles (site des Templiers) <br> | ||||
| 06903 Sophia Antipolis (Biot) | 06903 Sophia Antipolis (Biot) | ||||
| </address> | </address> | ||||
| <p>GPS Lat.: 43°36'57.72"N - Lon.: 7°4'17.03"E</p> | |||||
| <p>GPS Lat.: 43°61'56.9"N - Lon.: 7°0'71.95"E</p> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="row-fluid"> | <div class="row-fluid"> | ||||
| <div class="span6"> | |||||
| <div class="span8 offset2"> | |||||
| <div id="come_map"></div> | |||||
| <script type="text/javascript"> | |||||
| var map = L.map('come_map'); | |||||
| // create the tile layer with correct attribution | |||||
| var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; | |||||
| var osmAttrib='Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors'; | |||||
| var osm = new L.TileLayer(osmUrl, {minZoom: 7, maxZoom: 18, attribution: osmAttrib}); | |||||
| // start the map on specified GPS Coords | |||||
| map.setView(new L.LatLng(43.61562,7.0724),15); | |||||
| marker = L.marker([43.615693, 7.0726221]).addTo(map); | |||||
| map.addLayer(osm); | |||||
| </script> | |||||
| </div> | |||||
| </div> | |||||
| <br> | |||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <div class="tabbable" id="main_tab"> | <div class="tabbable" id="main_tab"> | ||||
| <ul class="nav nav-tabs"> | <ul class="nav nav-tabs"> | ||||
| <li class="active"><a href="#Trsp" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en bus" src="/img/tr_bus_.png"></a></li> | <li class="active"><a href="#Trsp" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en bus" src="/img/tr_bus_.png"></a></li> | ||||
| @@ -137,15 +167,6 @@ | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="span6"> | |||||
| <p> | |||||
| <img alt="" src="http://jm2l.linux-azur.org/sites/jm2l.linux-azur.org/files/jm2l_plan_acces_polytech.png" style="height:507px; width:665px"> | |||||
| </p> | |||||
| <p> | |||||
| <a href="http://www.openstreetmap.org/?lat=43.61211&lon=7.07081&zoom=14&layers=M&mlat=43.61637&mlon=7.08520">Voir une carte plus grande</a> | |||||
| </p> | |||||
| </div> | </div> | ||||
| </div> | |||||
| <br> | |||||
| @@ -1,7 +1,9 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | |||||
| <% | <% | ||||
| DisplayYear = request.session.get('year',2015) | DisplayYear = request.session.get('year',2015) | ||||
| %> | %> | ||||
| <div class="span9"> | |||||
| <h1 class="page-title">Dossier de presse ${DisplayYear}</h1> | <h1 class="page-title">Dossier de presse ${DisplayYear}</h1> | ||||
| % if content and content.doss_presse: | % if content and content.doss_presse: | ||||
| <div class="span10 offset1"> | <div class="span10 offset1"> | ||||
| @@ -76,4 +78,9 @@ DisplayYear = request.session.get('year',2015) | |||||
| <p class="spip">Et pour ce ux qui veullent tout mettre en local sur leur espace web, l’image banner2007.png est ici : <a href="/web/20071231104349/http://jm2l.linux-azur.org/IMG/png/banner2007.png" class="spip_url spip_out">http://jm2l.linux-azur.org/IMG/png/...</a> | <p class="spip">Et pour ce ux qui veullent tout mettre en local sur leur espace web, l’image banner2007.png est ici : <a href="/web/20071231104349/http://jm2l.linux-azur.org/IMG/png/banner2007.png" class="spip_url spip_out">http://jm2l.linux-azur.org/IMG/png/...</a> | ||||
| Préférez quand même la première méthode qui présente l’avantage de nous permettre de faire quelques statistiques.</p> | Préférez quand même la première méthode qui présente l’avantage de nous permettre de faire quelques statistiques.</p> | ||||
| % endif | % endif | ||||
| <br><br> | |||||
| </div> | |||||
| <div class="span3"> | |||||
| <!--Sidebar content--> | |||||
| ${helpers.participants(DisplayYear)} | |||||
| </div> | |||||
| @@ -1,4 +1,5 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | |||||
| <% | <% | ||||
| TabDisplay = [ | TabDisplay = [ | ||||
| (u'Tables rondes', 'Table ronde'), | (u'Tables rondes', 'Table ronde'), | ||||
| @@ -7,6 +8,11 @@ TabDisplay = [ | |||||
| (u'Stands', 'Stand'), | (u'Stands', 'Stand'), | ||||
| ] | ] | ||||
| %> | %> | ||||
| <%def name="jsAddOn()"> | |||||
| <script type="text/javascript" src="/vendor/d3js/d3.v3.min.js"></script> | |||||
| <script type="text/javascript" src="/js/programme.js"></script> | |||||
| </%def> | |||||
| <%def name="cssAddOn()"> | |||||
| <style> | <style> | ||||
| .myblock { | .myblock { | ||||
| background-color:#EEE; | background-color:#EEE; | ||||
| @@ -31,11 +37,9 @@ TabDisplay = [ | |||||
| } | } | ||||
| .Atelier { | .Atelier { | ||||
| fill: #faebeb; | fill: #faebeb; | ||||
| stroke: #dc7070; | |||||
| } | } | ||||
| .Table-ronde { | .Table-ronde { | ||||
| fill: #fff4e5; | fill: #fff4e5; | ||||
| stroke: #ff9912; | |||||
| } | } | ||||
| .Repas { | .Repas { | ||||
| fill: #2EE; | fill: #2EE; | ||||
| @@ -54,26 +58,38 @@ rect { | |||||
| fill: none; | fill: none; | ||||
| stroke: #222; | stroke: #222; | ||||
| } | } | ||||
| </style> | </style> | ||||
| <h2>Le Programme ${DisplayYear}</h2> | |||||
| <div class="tabbable" id="main_tab"> | |||||
| <ul class="nav nav-tabs" style="margin-bottom: 5px;"> | |||||
| % for Num, (Day, IdDay) in enumerate(Days): | |||||
| <li class="${['','active'][Num==0]}"><a href="#Day${Num}" id="Schedule_${Num}" data-toggle="tab">${Day}</a></li> | |||||
| % endfor | |||||
| </ul> | |||||
| <div class="tab-content" style="padding:0"> | |||||
| % for Num, (Day, IdDay) in enumerate(Days): | |||||
| <div class="tab-pane fade ${['','active '][Num==0]}in" id="Day${Num}"> | |||||
| ## Container for SVG version of Programme | |||||
| <div id="Schedule_SVG_${IdDay}"> | |||||
| </%def> | |||||
| <div class="row-fluid"> | |||||
| <div class="span9"> | |||||
| <h2>Le Programme ${DisplayYear}</h2> | |||||
| <div class="tabbable" id="main_tab"> | |||||
| <ul class="nav nav-tabs" style="margin-bottom: 5px;"> | |||||
| % for Num, (Day, IdDay) in enumerate(Days): | |||||
| <li class="${['','active'][Num==0]}"><a href="#Day${Num}" id="Schedule_${Num}" data-toggle="tab">${Day}</a></li> | |||||
| % endfor | |||||
| </ul> | |||||
| <div class="tab-content" style="padding:0"> | |||||
| % for Num, (Day, IdDay) in enumerate(Days): | |||||
| <div class="tab-pane fade ${['','active '][Num==0]}in" id="Day${Num}"> | |||||
| ## Container for SVG version of Programme | |||||
| <div id="Schedule_SVG_${IdDay}"> | |||||
| </div> | |||||
| </div> | </div> | ||||
| % endfor | |||||
| </div> | </div> | ||||
| % endfor | |||||
| </div> | </div> | ||||
| </div> | |||||
| <div class="span3"> | |||||
| <!--Sidebar content--> | |||||
| ${helpers.participants(DisplayYear)} | |||||
| </div> | |||||
| </div> | </div> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <div id="DivProg" style="border: 1px solid black;"></div> | <div id="DivProg" style="border: 1px solid black;"></div> | ||||
| @@ -99,7 +115,7 @@ if Counter==0: | |||||
| <thead> | <thead> | ||||
| <tr> | <tr> | ||||
| <th style="width:7em;text-align:center;">Date</th> | <th style="width:7em;text-align:center;">Date</th> | ||||
| <th style="text-align:center;">Sujet - ${Counter} ${Title}</th> | |||||
| <th style="text-align:center;">${Counter} ${Title}</th> | |||||
| </tr> | </tr> | ||||
| </thead> | </thead> | ||||
| <tbody> | <tbody> | ||||
| @@ -154,6 +170,6 @@ if Counter==0: | |||||
| % endfor | % endfor | ||||
| ##</div> | ##</div> | ||||
| <br/><br/> | |||||
| <script type="text/javascript" src="/vendor/d3js/d3.v3.min.js"></script> | |||||
| <script type="text/javascript" src="/js/programme.js"></script> | |||||
| </div> | |||||
| </div> | |||||
| @@ -8,6 +8,9 @@ from slugify import slugify | |||||
| </a> | </a> | ||||
| <h3>Liste des tâches JM2L Staff</h3> | <h3>Liste des tâches JM2L Staff</h3> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <div class="tabbable" id="main_tab"> | <div class="tabbable" id="main_tab"> | ||||
| <ul class="nav nav-tabs" style="margin-bottom: 5px;"> | <ul class="nav nav-tabs" style="margin-bottom: 5px;"> | ||||
| % for Num, Entity in enumerate(sorted(tasks.keys(), key=lambda x:x.name)): | % for Num, Entity in enumerate(sorted(tasks.keys(), key=lambda x:x.name)): | ||||
| @@ -84,6 +87,8 @@ from slugify import slugify | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | |||||
| <%def name="jsAddOn()"> | <%def name="jsAddOn()"> | ||||
| <script> | <script> | ||||
| $('a[data-toggle="tab"]') | $('a[data-toggle="tab"]') | ||||
| @@ -1,9 +1,15 @@ | |||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <h1>Add a new task</h1> | <h1>Add a new task</h1> | ||||
| <form action="/Staff/new" method="post"> | <form action="/Staff/new" method="post"> | ||||
| <input type="text" maxlength="100" name="name"> | <input type="text" maxlength="100" name="name"> | ||||
| <input type="submit" class="btn btn-primary" name="add" value="ADD" class="button"> | <input type="submit" class="btn btn-primary" name="add" value="ADD" class="button"> | ||||
| </form> | |||||
| </form> | |||||
| </div> | |||||
| </div> | |||||
| @@ -15,6 +15,14 @@ | |||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | ||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | ||||
| </%def> | </%def> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <a class="btn" href="${request.route_path('list_task', _anchor=form.name.data)}"> | |||||
| <i class="icon-arrow-left"></i> Retour à la liste | |||||
| </a> | |||||
| % if 'uid' in form._fields.keys(): | % if 'uid' in form._fields.keys(): | ||||
| <h3>Editer un Pôle</h3> | <h3>Editer un Pôle</h3> | ||||
| % else: | % else: | ||||
| @@ -34,11 +42,20 @@ DicForm = { | |||||
| <form action="/Staff/poles" method="post"> | <form action="/Staff/poles" method="post"> | ||||
| %endif | %endif | ||||
| ${helpers.DisplayForm(form, DicForm)} | ${helpers.DisplayForm(form, DicForm)} | ||||
| <input type="submit" class="btn btn-primary" /> | |||||
| <br> | |||||
| <center> | |||||
| <button type="submit" class="btn btn-large btn-primary" /> | |||||
| <i class="icon-ok icon-white"></i> Enregistrer | |||||
| </button> | |||||
| </center> | |||||
| </form> | </form> | ||||
| % if 'uid' in form._fields.keys(): | % if 'uid' in form._fields.keys(): | ||||
| <center> | |||||
| ${helpers.uploader("poles", form.uid.data, u"Attachement" )} | ${helpers.uploader("poles", form.uid.data, u"Attachement" )} | ||||
| </center> | |||||
| %endif | %endif | ||||
| <script> | |||||
| ## var editor = CKEDITOR.replace( 'description', { autoGrow_onStartup: true, language: 'fr' } ); | |||||
| </script> | |||||
| </div> | |||||
| </div> | |||||
| @@ -25,8 +25,14 @@ | |||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | ||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | ||||
| </%def> | </%def> | ||||
| <p>Green checkmarks indicate that class is visible in your current viewport.</p> | |||||
| <a style="float:right;" href="${request.route_path('list_task', _anchor=area)}">Retour à la liste</a> | |||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <a class="btn" href="${request.route_path('list_task', _anchor=area)}"> | |||||
| <i class="icon-arrow-left"></i> Retour à la liste | |||||
| </a> | |||||
| % if 'uid' in form._fields.keys(): | % if 'uid' in form._fields.keys(): | ||||
| <h3>Editer une tâche</h3> | <h3>Editer une tâche</h3> | ||||
| % else: | % else: | ||||
| @@ -49,8 +55,20 @@ DicForm = { | |||||
| <form action="/Staff/tasks" method="post"> | <form action="/Staff/tasks" method="post"> | ||||
| %endif | %endif | ||||
| ${helpers.DisplayForm(form, DicForm)} | ${helpers.DisplayForm(form, DicForm)} | ||||
| <input type="submit" class="btn btn-primary" value="Valider" /> | |||||
| <br> | |||||
| <center> | |||||
| <button type="submit" class="btn btn-large btn-primary" /> | |||||
| <i class="icon-ok icon-white"></i> Enregistrer | |||||
| </button> | |||||
| </center> | |||||
| </form> | </form> | ||||
| % if 'uid' in form._fields.keys(): | % if 'uid' in form._fields.keys(): | ||||
| <center> | |||||
| ${helpers.uploader("tasks", form.uid.data, u"une pièce jointe" )} | ${helpers.uploader("tasks", form.uid.data, u"une pièce jointe" )} | ||||
| </center> | |||||
| %endif | %endif | ||||
| </div> | |||||
| </div> | |||||
| @@ -16,33 +16,10 @@ | |||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | ||||
| </%def> | </%def> | ||||
| <% from datetime import datetime %> | <% from datetime import datetime %> | ||||
| <style> | |||||
| .borderbox { | |||||
| border: 1px solid #e1e4e5; | |||||
| margin: 1px 0 24px; | |||||
| color: #404040; | |||||
| line-height: 1.5; | |||||
| margin: 0; | |||||
| overflow: auto; | |||||
| padding: 12px; | |||||
| background: none repeat scroll 0 0 #fcfcfc; | |||||
| font-family: "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif; | |||||
| } | |||||
| .titleborderbox { | |||||
| background: none repeat scroll 0 0 #ffffff; | |||||
| border: 1px solid #eee; | |||||
| display: inline; | |||||
| left: 16px; | |||||
| padding: 2px 7px; | |||||
| position: relative; | |||||
| top: 10px; | |||||
| } | |||||
| .borderboxtime { | |||||
| float:right; | |||||
| padding:1px 15px; | |||||
| border: 1px solid #eee; | |||||
| } | |||||
| </style> | |||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| % if 'uid' in form._fields: | % if 'uid' in form._fields: | ||||
| <div class="borderboxtime"> | <div class="borderboxtime"> | ||||
| @@ -63,7 +40,7 @@ | |||||
| % else: | % else: | ||||
| % for num, iterv in enumerate(event.intervenants): | % for num, iterv in enumerate(event.intervenants): | ||||
| <li> | <li> | ||||
| <strong><a href="/MesJM2L?user=${iterv.uid}">${iterv.prenom} ${iterv.nom}</a></strong>. | |||||
| <strong><a href="/user/${iterv.slug}">${iterv.prenom} ${iterv.nom}</a></strong>. | |||||
| % if iterv.pseudo: | % if iterv.pseudo: | ||||
| (${iterv.pseudo}) | (${iterv.pseudo}) | ||||
| %endif | %endif | ||||
| @@ -125,56 +102,20 @@ DicForm = { | |||||
| <fieldset> | <fieldset> | ||||
| <legend>Ajouter vos co-intervenants</legend> | <legend>Ajouter vos co-intervenants</legend> | ||||
| <p> | <p> | ||||
| Vous avez la possibilité d'être plusieurs pour un même évenement. | |||||
| Pour enregistrer une autre personne, deux cas peuvent se présenter: | |||||
| <ul> | |||||
| <li>Votre partenaire n'est pas inscrit sur le site</li> | |||||
| <p> | |||||
| Inscrivez son email avec son accord dans le champ suivant, | |||||
| Un mail lui sera envoyé pour qu'il procède à son inscription. | |||||
| Un fois son inscription effectué, reportez vous au deuxième cas. | |||||
| </p> | |||||
| <li>Votre partenaire est inscrit sur le site</li> | |||||
| <p> | |||||
| Demandez lui l'email utilisé lors de son inscription sur le site des JM2L. | |||||
| Complétez le champ suivant et validez. | |||||
| </p> | |||||
| </ul> | |||||
| Notez que les intervenants d'un même évenement ont tous les droits de modification. | |||||
| Vous avez la possibilité d'être plusieurs pour un même évenement.<br> | |||||
| Chacun des intervenants doit être inscrit sur le site. | |||||
| <form action="/MesJM2L/${form.for_year.data}/${form.event_type.data}/link" method="POST"> | |||||
| ${formAdd.event_uid} | |||||
| <input type="hidden" id="intervenant" name="intervenant" style="width:20em;" | |||||
| class="form-control select2-offscreen" tabindex="-1"> | |||||
| </input> | |||||
| <button type="submit" class="btn btn-primary" /> | |||||
| <i class="icon-plus icon-white"></i> Ajouter cet intervenant | |||||
| </button> | |||||
| </form> | |||||
| NB : Notez que les intervenants d'un même évenement ont tous les droits de modification. | |||||
| </p> | </p> | ||||
| <form action="/MesJM2L/${form.for_year.data}/${form.event_type.data}/link" method="POST"> | |||||
| ${formAdd.event_uid} | |||||
| <% | |||||
| TabFields = [ | |||||
| ( formAdd._fields["prenom"], u"Prénom", "padding-right:5px;float:left;" ), | |||||
| ( formAdd._fields["nom"], u"Nom", "padding-right:5px;" ), | |||||
| ( formAdd._fields["email"], u"son.mail@fqdn.tld", "padding-right:5px;" ), | |||||
| ] | |||||
| %> | |||||
| % for Field, PlaceHolder, DivClass in TabFields: | |||||
| <div style="padding-right:5px;${DivClass}"> | |||||
| <label for="${Field.label.field_id}">${Field.label.text} | |||||
| % if len(Field.description): | |||||
| <a id="${Field.label.field_id}-help" data-toggle="popover" | |||||
| data-original-title="${Field.label.text}" | |||||
| data-content="${Field.description}"> | |||||
| <i class="icon-me" style="background-image: url('/img/Help.png');background-position:1px 2px;"></i> | |||||
| </a> | |||||
| % endif | |||||
| </label> | |||||
| % for error in Field.errors: | |||||
| <div class="alert alert-error"> | |||||
| <button type="button" class="close" data-dismiss="alert">×</button> | |||||
| <h4>Erreur!</h4> | |||||
| ${ error } | |||||
| </div> | |||||
| % endfor | |||||
| ${Field(placeholder=PlaceHolder, style="width:16em;")} | |||||
| </div> | |||||
| % endfor | |||||
| ## Then the submit for this form | |||||
| ${formAdd.add} | |||||
| </form> | |||||
| </fieldset> | </fieldset> | ||||
| <div class="clearfix"> </div> | <div class="clearfix"> </div> | ||||
| <p style="float:right;">Créé le ${event.created.strftime('%d %b %Y').decode('utf-8')}</p> | <p style="float:right;">Créé le ${event.created.strftime('%d %b %Y').decode('utf-8')}</p> | ||||
| @@ -186,27 +127,31 @@ TabFields = [ | |||||
| <br/> | <br/> | ||||
| <hr/> | <hr/> | ||||
| % if 0: | |||||
| % if 'uid' in form._fields: | |||||
| ${helpers.uploader_js()} | |||||
| % endif | |||||
| <script type="text/javascript"> | |||||
| ## Handle Popover of this form | |||||
| % for field in form._fields.keys(): | |||||
| $('#${field}-help').popover(); | |||||
| % if form._fields[field].type=='SelectField': | |||||
| $('#${field}').select2({width:'resolve'}); | |||||
| % endif | |||||
| %endfor | |||||
| % if formAdd: | |||||
| % for field in formAdd._fields.keys(): | |||||
| $('#${field}-help').popover(); | |||||
| %endfor | |||||
| % endif | |||||
| var editor = CKEDITOR.replace('description', { autoGrow_onStartup: true, language: 'fr' } ); | |||||
| </script> | |||||
| % else: | |||||
| </div> | |||||
| </div> | |||||
| <%def name="jsAddOn()"> | |||||
| <script src="/vendor/select2/js/select2.js"></script> | |||||
| <script> | |||||
| jQuery(function() { | |||||
| $("#intervenant").select2( | |||||
| { | |||||
| placeholder: 'Entrez ici un Nom ou un Prénom', | |||||
| minimumInputLength: 2, allowClear: true, | |||||
| ajax: { | |||||
| quietMillis: 250, url: "/json-users", dataType: 'json', | |||||
| data: function (term, page) { | |||||
| return { pageSize: 8, pageNum: page, searchTerm: term }; | |||||
| }, | |||||
| results: function (data, page) { | |||||
| var more = (page * 8) < data.Total; | |||||
| return { results: data.Results, more: more }; | |||||
| } | |||||
| } | |||||
| }); | |||||
| }); | |||||
| </script> | |||||
| </%def> | |||||
| <% | <% | ||||
| for jsitem in form._fields.keys(): | for jsitem in form._fields.keys(): | ||||
| context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem ) | context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem ) | ||||
| @@ -216,5 +161,3 @@ if formAdd: | |||||
| for jsitem in formAdd._fields.keys(): | for jsitem in formAdd._fields.keys(): | ||||
| context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem ) | context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem ) | ||||
| %> | %> | ||||
| ##${helpers.uploader_js()} | |||||
| % endif | |||||
| @@ -8,6 +8,11 @@ | |||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | ||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | ||||
| </%def> | </%def> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <a class="pull-right" href="/categorie/entity">Editer les catégories</a> | <a class="pull-right" href="/categorie/entity">Editer les catégories</a> | ||||
| <br> | <br> | ||||
| <form action="" method="POST"> | <form action="" method="POST"> | ||||
| @@ -30,18 +35,18 @@ DicForm = { | |||||
| <fieldset> | <fieldset> | ||||
| <legend>Acteurs</legend> | <legend>Acteurs</legend> | ||||
| <div class="repeat"> | <div class="repeat"> | ||||
| <table class="wrapper" width="100%"> | |||||
| <table class="wrapper table table-striped table-bordered" width="100%"> | |||||
| <thead> | <thead> | ||||
| <tr class="row"> | <tr class="row"> | ||||
| <th style="width:5em;text-align:center;">Année</th> | <th style="width:5em;text-align:center;">Année</th> | ||||
| <th>Personne</th> | |||||
| <th style="width:22em;">Personne</th> | |||||
| <th style="width:22em;">Rôle</th> | <th style="width:22em;">Rôle</th> | ||||
| <th style="width:5em;">Action</th> | <th style="width:5em;">Action</th> | ||||
| </tr> | </tr> | ||||
| </thead> | </thead> | ||||
| <tbody class="container"> | <tbody class="container"> | ||||
| <tr class="row template" style="line-height:2.2em;"> | <tr class="row template" style="line-height:2.2em;"> | ||||
| <td><span class="move btn btn-mini btn-info">Move</span></td> | |||||
| ##<td><span class="move btn btn-mini btn-info">Move</span></td> | |||||
| <td> | <td> | ||||
| <select class="form-control" style="width:5em;" name="membership-{{row-count-placeholder}}-year_uid" | <select class="form-control" style="width:5em;" name="membership-{{row-count-placeholder}}-year_uid" | ||||
| id="membership-{{row-count-placeholder}}-year_uid"> | id="membership-{{row-count-placeholder}}-year_uid"> | ||||
| @@ -65,6 +70,7 @@ DicForm = { | |||||
| <option value="${opt.uid}">${opt.exch_subtype}</option> | <option value="${opt.uid}">${opt.exch_subtype}</option> | ||||
| % endfor | % endfor | ||||
| </select> | </select> | ||||
| <input type="text" class="form-control" name="membership-{{row-count-placeholder}}-role" /> | |||||
| </td> | </td> | ||||
| <td> | <td> | ||||
| <span class="remove btn btn-mini btn-danger"> | <span class="remove btn btn-mini btn-danger"> | ||||
| @@ -74,7 +80,7 @@ DicForm = { | |||||
| </tr> | </tr> | ||||
| % for num, dicdata in enumerate(form._fields.get("membership").data): | % for num, dicdata in enumerate(form._fields.get("membership").data): | ||||
| <tr class="row" style="padding:5px;line-height:2.2em;"> | <tr class="row" style="padding:5px;line-height:2.2em;"> | ||||
| <td><span class="move btn btn-mini btn-info">Move</span></td> | |||||
| ##<td><span class="move btn btn-mini btn-info">Move</span></td> | |||||
| <td style="text-align:center;"> | <td style="text-align:center;"> | ||||
| <input type="hidden" class="form-control" name="membership-${num}-year_uid" | <input type="hidden" class="form-control" name="membership-${num}-year_uid" | ||||
| value="${dicdata.get('year_uid')}" style="width:4em;" /> | value="${dicdata.get('year_uid')}" style="width:4em;" /> | ||||
| @@ -91,8 +97,6 @@ DicForm = { | |||||
| % endif | % endif | ||||
| </td> | </td> | ||||
| <td style="text-align:center;"> | <td style="text-align:center;"> | ||||
| <input type="hidden" class="form-control" name="membership-${num}-role" | |||||
| value="${dicdata.get('role')}" /> | |||||
| <i>${dicdata.get('role', 'Aucun')}</i> | <i>${dicdata.get('role', 'Aucun')}</i> | ||||
| </td> | </td> | ||||
| <td> | <td> | ||||
| @@ -140,13 +144,9 @@ DicForm = { | |||||
| <br>NB: Vous devez proposer votre entité avant de pouvoir | <br>NB: Vous devez proposer votre entité avant de pouvoir | ||||
| téléverser des fichiers la concernant. | téléverser des fichiers la concernant. | ||||
| % endif | % endif | ||||
| <br> | |||||
| <br> | |||||
| <br> | |||||
| ##% if 'uid' in form._fields: | |||||
| ## ${helpers.uploader_js()} | |||||
| ##% endif | |||||
| </div> | |||||
| </div> | |||||
| <%def name="jsAddOn()"> | <%def name="jsAddOn()"> | ||||
| <script src="/vendor/select2/js/select2.js"></script> | <script src="/vendor/select2/js/select2.js"></script> | ||||
| @@ -154,7 +154,7 @@ DicForm = { | |||||
| <script src="/vendor/ckeditor/ckeditor.js"></script> | <script src="/vendor/ckeditor/ckeditor.js"></script> | ||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||
| var year_data = Array(); | var year_data = Array(); | ||||
| ##var editor = CKEDITOR.replace('description', { autoGrow_onStartup: true, language: 'fr' } ); | |||||
| var editor = CKEDITOR.replace('description', { autoGrow_onStartup: true, language: 'fr' } ); | |||||
| for (var i=2005;i<2015;i++) | for (var i=2005;i<2015;i++) | ||||
| { year_data[i.toString()] = i.toString(); }; | { year_data[i.toString()] = i.toString(); }; | ||||
| @@ -190,7 +190,6 @@ jQuery(function() { | |||||
| } | } | ||||
| }); | }); | ||||
| $("#membership-"+ (numrow-1) +"-year_uid").select2({}); | $("#membership-"+ (numrow-1) +"-year_uid").select2({}); | ||||
| $("#membership-"+ (numrow-1) +"-role").select2({}); | |||||
| } | } | ||||
| }); | }); | ||||
| }); | }); | ||||
| @@ -1,6 +1,72 @@ | |||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||
| ## Afficher un form | ## Afficher un form | ||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||
| <%def name="DisplayRespForm(form, DicFormat)"> | |||||
| <% | |||||
| TabJs = {'select':[], 'desc':[]} | |||||
| %> | |||||
| <div class="row-fluid"> | |||||
| % for FieldName, Field in form._fields.items(): | |||||
| % if DicFormat.has_key(Field.name) and DicFormat[Field.name].get("Ignore"): | |||||
| <% continue %> | |||||
| % endif | |||||
| % if Field.type in ['HiddenField', 'CSRFTokenField']: | |||||
| ${Field} | |||||
| <% continue %> | |||||
| % elif Field.type=="SelectField": | |||||
| <% TabJs['select'].append(Field.label.field_id) %> | |||||
| % endif | |||||
| <div class="${DicFormat[Field.name].get("ContainerClass")}"> | |||||
| <label for="${Field.label.field_id}">${Field.label.text} | |||||
| % if Field.description: | |||||
| <% TabJs['desc'].append(Field.label.field_id) %> | |||||
| <a id="${Field.label.field_id}-help" data-toggle="popover" | |||||
| data-original-title="${Field.label.text}" | |||||
| data-content="${Field.description}"> | |||||
| <i class="icon-me" style="background-image: url('/img/Help.png');background-position:1px 2px;"></i> | |||||
| </a> | |||||
| % endif | |||||
| </label> | |||||
| % if DicFormat.has_key(Field.name): | |||||
| <% | |||||
| PlaceHolder = DicFormat[Field.name].get("PlaceHolder") | |||||
| Class = [False,"ckeditor"][ "ckeditor" in DicFormat[Field.name] ] | |||||
| %> | |||||
| % if Field.type == "date": | |||||
| ${Field(placeholder=PlaceHolder or False, class_="datepicker", style="width:100%" )} | |||||
| % else: | |||||
| ${Field(placeholder=PlaceHolder or False, class_=Class, style="width:100%")} | |||||
| % endif | |||||
| % else: | |||||
| ${Field(style="width:100%")} | |||||
| % endif | |||||
| % for error in Field.errors: | |||||
| <div class="alert alert-error"> | |||||
| <button type="button" class="close" data-dismiss="alert">×</button> | |||||
| <h4>Erreur!</h4> | |||||
| ${ error } | |||||
| </div> | |||||
| % endfor | |||||
| </div> | |||||
| % if DicFormat.has_key(Field.name) and DicFormat[Field.name].get("next")==True: | |||||
| </div> | |||||
| <div class="row-fluid"> | |||||
| % endif | |||||
| % endfor | |||||
| </div> | |||||
| <% | |||||
| for jsitem in TabJs['select']: | |||||
| context._kwargs['postpone_js'].append( "$('#%s').select2({});" % jsitem ) | |||||
| for jsitem in TabJs['desc']: | |||||
| context._kwargs['postpone_js'].append( "$('#%s-help').popover();" % jsitem ) | |||||
| %> | |||||
| </%def> | |||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |||||
| ## Afficher un form | |||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |||||
| <%def name="DisplayForm(form, DicFormat)"> | <%def name="DisplayForm(form, DicFormat)"> | ||||
| <% | <% | ||||
| TabJs = {'select':[], 'desc':[]} | TabJs = {'select':[], 'desc':[]} | ||||
| @@ -361,14 +427,12 @@ TabJs = {'select':[], 'desc':[]} | |||||
| ## Wrapper pour les photos | ## Wrapper pour les photos | ||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||
| <%def name="show_my_pictures(uprofil)"> \ | <%def name="show_my_pictures(uprofil)"> \ | ||||
| <div class="profile-icon" style="float:right;height:250px;width:250px;"> | |||||
| <div class="profile-icon"> | |||||
| <% photos = uprofil.PhotosLinks %> | <% photos = uprofil.PhotosLinks %> | ||||
| <div style="text-align: center;line-height:20px;"><b>${request.user.slug}</b></div> | |||||
| <div style="text-align: center;line-height:20px;"> | <div style="text-align: center;line-height:20px;"> | ||||
| <a data-target="#AjaxModal" Myhref="/2015/modal/Password/1" role="button" handle="modal">Changer mon mot de passe</a> | <a data-target="#AjaxModal" Myhref="/2015/modal/Password/1" role="button" handle="modal">Changer mon mot de passe</a> | ||||
| </div> | </div> | ||||
| <div style="text-align: center;line-height:20px;"> | |||||
| <a data-target="#AjaxModal" Myhref="/2015/modal/UserPicture/${uprofil.uid}" handle="modal">Changer ma photo</a> | |||||
| </div> | |||||
| <div id="MyPictureCarousel" class="carousel slide"> | <div id="MyPictureCarousel" class="carousel slide"> | ||||
| % if len(photos)>1: | % if len(photos)>1: | ||||
| <!-- Carousel nav --> | <!-- Carousel nav --> | ||||
| @@ -376,24 +440,27 @@ TabJs = {'select':[], 'desc':[]} | |||||
| <a class="Ucarousel-control right" href="#MyPictureCarousel" data-slide="next">›</a> | <a class="Ucarousel-control right" href="#MyPictureCarousel" data-slide="next">›</a> | ||||
| % endif | % endif | ||||
| <!-- Carousel items --> | <!-- Carousel items --> | ||||
| <div class="carousel-inner" style="height: 220px;"> | |||||
| <div class="carousel-inner"> | |||||
| % if len(photos): | % if len(photos): | ||||
| % for num, link in enumerate(photos): | % for num, link in enumerate(photos): | ||||
| <div class="${['','active '][num==0]}item" id="UserPic${num}"> | <div class="${['','active '][num==0]}item" id="UserPic${num}"> | ||||
| <div style="margin:auto;"> | |||||
| <img src="${link}" class="img-polaroid" style="max-height:205px;max-width:235px;" alt="Photo ${uprofil.slug}" /> | |||||
| <div style="margin:auto;text-align:center;"> | |||||
| <img src="${link}" class="img-polaroid" style="max-height:310px;" alt="Photo ${uprofil.slug}" /> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| % endfor | % endfor | ||||
| % else: | % else: | ||||
| <div class="active item" id="UserPic0"> | <div class="active item" id="UserPic0"> | ||||
| <div style="margin:auto;width:170px;"> | |||||
| <img src="/img/default-user.png" class="img-polaroid" alt="Photo ${uprofil.slug}" style="max-height:205px;" /> | |||||
| <div style="margin:auto;text-align:center;"> | |||||
| <img src="/img/default-user.png" style="max-height:310px;" class="img-polaroid" alt="Photo ${uprofil.slug}" /> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| % endif | % endif | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div style="text-align: center;line-height:20px;"> | |||||
| <a data-target="#AjaxModal" Myhref="/2015/modal/UserPicture/${uprofil.uid}" handle="modal">Changer ma photo</a> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </%def> \ | </%def> \ | ||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||
| @@ -57,6 +57,7 @@ | |||||
| </div> | </div> | ||||
| <div class="row-fluid"> | <div class="row-fluid"> | ||||
| <div class="span10 offset1"> | |||||
| <div class="tabbable" id="main_tab"> | <div class="tabbable" id="main_tab"> | ||||
| <ul class="nav nav-tabs" style="margin-bottom: 5px;"> | <ul class="nav nav-tabs" style="margin-bottom: 5px;"> | ||||
| <li class="active"><a href="#Profil" id="Map_Profil" data-toggle="tab">Mon Profil</a></li> | <li class="active"><a href="#Profil" id="Map_Profil" data-toggle="tab">Mon Profil</a></li> | ||||
| @@ -149,5 +150,6 @@ | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | </div> | ||||
| ##${h.uploader_js()} | ##${h.uploader_js()} | ||||
| @@ -21,12 +21,15 @@ | |||||
| <link rel="stylesheet" href="/static/ie6.css" type="text/css" media="screen" charset="utf-8" /> | <link rel="stylesheet" href="/static/ie6.css" type="text/css" media="screen" charset="utf-8" /> | ||||
| <![endif]--> | <![endif]--> | ||||
| <script src="/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script> | <script src="/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script> | ||||
| ${self.cssAddOn()} | |||||
| ${self.jsAddOn_head()} | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| <% | <% | ||||
| context._kwargs['postpone_js']=[] | context._kwargs['postpone_js']=[] | ||||
| DisplayYear = request.session.get('year', 2015) | DisplayYear = request.session.get('year', 2015) | ||||
| %> | %> | ||||
| <%def name="jsAddOn_head()"></%def> | |||||
| <%def name="jsAddOn()"></%def> | <%def name="jsAddOn()"></%def> | ||||
| <%def name="cssAddOn()"></%def> | <%def name="cssAddOn()"></%def> | ||||
| ${helpers.uploader_js()} | ${helpers.uploader_js()} | ||||
| @@ -36,8 +39,10 @@ ${helpers.uploader_js()} | |||||
| % if DisplayYear!=2015: | % if DisplayYear!=2015: | ||||
| ## style="background: url( ${"/img/%s/headerbg.png" % DisplayYear} ) repeat-x scroll 0 top #ffffff;"> | ## style="background: url( ${"/img/%s/headerbg.png" % DisplayYear} ) repeat-x scroll 0 top #ffffff;"> | ||||
| <div class="align-center"> | <div class="align-center"> | ||||
| <a href="/"> | |||||
| <div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent"> | <div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent"> | ||||
| </div> | </div> | ||||
| </a> | |||||
| </div> | </div> | ||||
| % else: | % else: | ||||
| <!-- Carousel | <!-- Carousel | ||||
| @@ -51,14 +56,28 @@ ${helpers.uploader_js()} | |||||
| </ol> | </ol> | ||||
| <div class="carousel-inner" role="listbox"> | <div class="carousel-inner" role="listbox"> | ||||
| <div class="item active"> | <div class="item active"> | ||||
| <div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent"></div> | |||||
| <a href="/"> | |||||
| <div style="height:215px;background: url(/img/2015/logo.png) no-repeat scroll center center transparent"></div> | |||||
| </a> | |||||
| <div class="carousel-vote"> | |||||
| <a href="#" class="btn btn-primary">Je vote pour ce logo !</a> | |||||
| </div> | |||||
| </div> | </div> | ||||
| <div class="item"> | <div class="item"> | ||||
| <div style="height:215px;background: url( ${"/img/%s/logo.png" % 2013} ) no-repeat scroll center center transparent"></div> | |||||
| <a href="/"> | |||||
| <div style="height:215px;background: url(/img/2015/logo_1.png) no-repeat scroll center center transparent"></div> | |||||
| </a> | |||||
| <div class="carousel-vote"> | |||||
| <a href="#" class="btn btn-primary">Je vote pour ce logo !</a> | |||||
| </div> | |||||
| </div> | </div> | ||||
| <div class="item"> | <div class="item"> | ||||
| <div style="height:215px;background: url( ${"/img/%s/logo.png" % 2012} ) no-repeat scroll center center transparent"></div> | |||||
| <a href="/"> | |||||
| <div style="height:215px;background: url(/img/2015/logo_2.png) no-repeat scroll center center transparent"></div> | |||||
| </a> | |||||
| <div class="carousel-vote"> | |||||
| <a href="#" class="btn btn-primary">Je vote pour ce logo !</a> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <a class="left Tcarousel-control" href="#TitleCarousel" role="button" data-slide="prev"> | <a class="left Tcarousel-control" href="#TitleCarousel" role="button" data-slide="prev"> | ||||
| @@ -107,16 +126,17 @@ ${helpers.uploader_js()} | |||||
| <li><a href="/participer-l-evenement#inscription">Je m'inscris</a></li> | <li><a href="/participer-l-evenement#inscription">Je m'inscris</a></li> | ||||
| <li><a href="/sign/login">Je m'identifie</a></li> | <li><a href="/sign/login">Je m'identifie</a></li> | ||||
| % endif | % endif | ||||
| <li>Mode | |||||
| <span class="visible-phone"> ✔ Phone</span> | |||||
| <span class="visible-tablet"> ✔ Tablet</span> | |||||
| <span class="visible-desktop"> ✔ Desktop</span> | |||||
| </li> | |||||
| ## <li>Mode | |||||
| ## <span class="visible-phone"> ✔ Phone</span> | |||||
| ## <span class="visible-tablet"> ✔ Tablet</span> | |||||
| ## <span class="visible-desktop"> ✔ Desktop</span> | |||||
| ## </li> | |||||
| </ul> | </ul> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <ul class="nav nav-pills pull-right"> | |||||
| <ul class="nav nav-pills pull-right"> | |||||
| <li class="${accueil or ''}"><a href="/">Accueil</a></li> | |||||
| <li class="${programme or ''}"><a href="/${DisplayYear}/le-programme">Programme</a></li> | <li class="${programme or ''}"><a href="/${DisplayYear}/le-programme">Programme</a></li> | ||||
| <li class="${presse or ''}"><a href="/${DisplayYear}/dossier-de-presse">Presse</a></li> | <li class="${presse or ''}"><a href="/${DisplayYear}/dossier-de-presse">Presse</a></li> | ||||
| <li class="${plan or ''}"><a href="/nous-rejoindre">Contact et Plan</a></li> | <li class="${plan or ''}"><a href="/nous-rejoindre">Contact et Plan</a></li> | ||||
| @@ -135,17 +155,20 @@ ${helpers.uploader_js()} | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div id="bottom"> | <div id="bottom"> | ||||
| % for type, message in request.session.pop_flash(): | |||||
| <div class="container-fluid"> | <div class="container-fluid"> | ||||
| <div class="row-fluid"> | |||||
| <div class="span9"> | |||||
| <!--Body content--> | |||||
| ${next.body()} | |||||
| </div> | |||||
| <div class="span3"> | |||||
| <!--Sidebar content--> | |||||
| ${helpers.participants(DisplayYear)} | |||||
| </div> | |||||
| <br> | |||||
| <div class="span6 offset3"> | |||||
| <div class="alert alert-${type}"> | |||||
| <button type="button" class="close" data-dismiss="alert">×</button> | |||||
| ${message} | |||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | |||||
| % endfor | |||||
| <div class="container-fluid"> | |||||
| <!--Body content--> | |||||
| ${next.body()} | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -161,9 +184,12 @@ ${helpers.uploader_js()} | |||||
| +33 (0) 6 52 42 31 37 ~ contact at jm2l.linux-azur.org | +33 (0) 6 52 42 31 37 ~ contact at jm2l.linux-azur.org | ||||
| </p> | </p> | ||||
| <p> | <p> | ||||
| Conception et construction en <a href="http://git.linux-azur.org/jm2l/">DIY</a> ~ | |||||
| Conception et construction en <a href="http://git.linux-azur.org/JM2L/jm2l/src/master">DIY</a> ~ | |||||
| Hébergé par <a href="http://www.heberg-24.com/"> Heberg24 </a> | Hébergé par <a href="http://www.heberg-24.com/"> Heberg24 </a> | ||||
| </p> | </p> | ||||
| <p> | |||||
| Vous avez trouvé un bug ? <a href="http://git.linux-azur.org/JM2L/jm2l/issues">Reportez le ici</a> | |||||
| </p> | |||||
| </div> | </div> | ||||
| </footer> | </footer> | ||||
| @@ -1,5 +1,8 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <a class="pull-right" href="/categorie/entity">Editer les catégories</a> | <a class="pull-right" href="/categorie/entity">Editer les catégories</a> | ||||
| <br> | <br> | ||||
| <div class="tabbable" id="main_tab"> | <div class="tabbable" id="main_tab"> | ||||
| @@ -31,16 +34,16 @@ | |||||
| <img src="${img_path}" alt="logo" /> | <img src="${img_path}" alt="logo" /> | ||||
| % endfor | % endfor | ||||
| </td> | </td> | ||||
| <td style="text-align:center;"> | |||||
| ${entity.get_entity_type.entity_subtype} | |||||
| </td> | |||||
| <td style="position: relative;"> | <td style="position: relative;"> | ||||
| ${Entity_Type}, ${entity.get_entity_type.entity_subtype}<br> | |||||
| <strong> | <strong> | ||||
| <a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}">${entity.name}</a> | <a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}">${entity.name}</a> | ||||
| </strong> | </strong> | ||||
| % if request.user.Staff: | |||||
| <span style="float:right;"> | <span style="float:right;"> | ||||
| <a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}/edit">edit</a> | <a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}/edit">edit</a> | ||||
| </span> | </span> | ||||
| % endif | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| % endfor | % endfor | ||||
| @@ -49,3 +52,6 @@ | |||||
| </div> | </div> | ||||
| % endfor | % endfor | ||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | |||||
| @@ -3,43 +3,55 @@ | |||||
| .navbar { | .navbar { | ||||
| margin-bottom: 0px; | margin-bottom: 0px; | ||||
| } | } | ||||
| #bottom { | |||||
| background-color: #f5f5f5; | |||||
| } | |||||
| .form-signin { | .form-signin { | ||||
| max-width: 300px; | |||||
| padding: 19px 29px 29px; | |||||
| margin: 0 auto 20px; | |||||
| background-color: #fff; | |||||
| border: 1px solid #e5e5e5; | |||||
| -webkit-border-radius: 5px; | |||||
| -moz-border-radius: 5px; | |||||
| border-radius: 5px; | |||||
| -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); | |||||
| -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); | |||||
| box-shadow: 0 1px 2px rgba(0,0,0,.05); | |||||
| max-width: 300px; | |||||
| padding: 19px 29px 29px; | |||||
| margin: 0 auto 20px; | |||||
| background-color: #f5f5f5; | |||||
| border: 1px solid #e5e5e5; | |||||
| -webkit-border-radius: 5px; | |||||
| -moz-border-radius: 5px; | |||||
| border-radius: 5px; | |||||
| -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); | |||||
| -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); | |||||
| box-shadow: 0 1px 2px rgba(0,0,0,.05); | |||||
| } | } | ||||
| .form-signin .form-signin-heading, | |||||
| .form-signin, | |||||
| .form-signin .checkbox { | .form-signin .checkbox { | ||||
| margin-bottom: 10px; | |||||
| margin-bottom: 10px; | |||||
| } | |||||
| .form-signin-heading { | |||||
| margin: -15px; | |||||
| text-align:center; | |||||
| } | } | ||||
| .form-signin input[type="text"], | .form-signin input[type="text"], | ||||
| .form-signin input[type="password"] { | .form-signin input[type="password"] { | ||||
| font-size: 16px; | |||||
| height: auto; | |||||
| margin-bottom: 15px; | |||||
| padding: 7px 9px; | |||||
| font-size: 16px; | |||||
| height: auto; | |||||
| width:100%; | |||||
| margin-bottom: 15px; | |||||
| padding: 7px 9px; | |||||
| } | } | ||||
| </style> | </style> | ||||
| <br> | |||||
| <div class="container"> | <div class="container"> | ||||
| % if forgot: | |||||
| <form class="form-signin" action="/sign/forgot" method="post"> | |||||
| <h3 class="form-signin-heading">Mes identifiants</h3> | |||||
| <hr> | |||||
| <input name="mail" type="text" class="input-block-level" placeholder="Mon adresse email"> | |||||
| <button class="btn btn-primary btn-block" type="submit">Me renvoyer mes identifiants</button> | |||||
| </form> | |||||
| % else: | |||||
| <form class="form-signin" action="/sign/in" method="post"> | <form class="form-signin" action="/sign/in" method="post"> | ||||
| <h2 class="form-signin-heading">Me connecter</h2> | |||||
| <h3 class="form-signin-heading">Me connecter</h3> | |||||
| <hr> | |||||
| <input name="username" type="text" class="input-block-level" placeholder="Nom"> | <input name="username" type="text" class="input-block-level" placeholder="Nom"> | ||||
| <input name="password" type="password" class="input-block-level" placeholder="Mot de passe"> | <input name="password" type="password" class="input-block-level" placeholder="Mot de passe"> | ||||
| <label class="checkbox"> | |||||
| <input type="checkbox" value="remember-me"> Remember me | |||||
| </label> | |||||
| <button class="btn btn-large btn-primary" type="submit">S'identifier</button> | |||||
| <center><button class="btn btn-large btn-primary btn-block" type="submit">S'identifier</button></center> | |||||
| <br> | |||||
| <a href="/sign/forgot">Je ne me souviens plus de mon mot de passe</a> | |||||
| </form> | </form> | ||||
| % endif | |||||
| </div> | </div> | ||||
| @@ -166,6 +166,7 @@ | |||||
| </div> | </div> | ||||
| <div class="modal-body"> | <div class="modal-body"> | ||||
| <form id="ModalForm" action="javascript:DoPost('/2015/modal/Password/${uid}');" style='margin:0;'> | <form id="ModalForm" action="javascript:DoPost('/2015/modal/Password/${uid}');" style='margin:0;'> | ||||
| <div class="description">Votre identifiant est <b>${request.user.slug}</b> | |||||
| <div class="description">Pour modifier le mot de passe actuel, | <div class="description">Pour modifier le mot de passe actuel, | ||||
| entrez un nouveau mot de passe dans chacune des deux zones de texte. | entrez un nouveau mot de passe dans chacune des deux zones de texte. | ||||
| </div> | </div> | ||||
| @@ -1,35 +1,14 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <style> | |||||
| .borderbox { | |||||
| border: 1px solid #e1e4e5; | |||||
| margin: 1px 0 24px; | |||||
| color: #404040; | |||||
| line-height: 1.5; | |||||
| margin: 0; | |||||
| overflow: auto; | |||||
| padding: 12px; | |||||
| background: none repeat scroll 0 0 #fcfcfc; | |||||
| font-family: "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif; | |||||
| } | |||||
| .titleborderbox { | |||||
| background: none repeat scroll 0 0 #ffffff; | |||||
| border: 1px solid #eee; | |||||
| display: inline; | |||||
| left: 16px; | |||||
| padding: 2px 7px; | |||||
| position: relative; | |||||
| top: 10px; | |||||
| } | |||||
| .borderboxtime { | |||||
| float:right; | |||||
| padding:1px 15px; | |||||
| border: 1px solid #eee; | |||||
| } | |||||
| </style> | |||||
| % if request.user and DispUser.uid==request.user.uid or request.user.uid==1: | |||||
| % if request.user and request.user.uid==1: | |||||
| <a style="float:right;" href="/MesJM2L?user=${DispUser.uid}">Editer</a> | <a style="float:right;" href="/MesJM2L?user=${DispUser.uid}">Editer</a> | ||||
| % elif request.user and DispUser.uid==request.user.uid: | |||||
| <a style="float:right;" href="/MesJM2L">Editer</a> | |||||
| % endif | % endif | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <h2>${DispUser.prenom} ${DispUser.nom}</h2> | <h2>${DispUser.prenom} ${DispUser.nom}</h2> | ||||
| <div style="display: inline-block;"> | <div style="display: inline-block;"> | ||||
| @@ -75,3 +54,5 @@ | |||||
| <hr/> | <hr/> | ||||
| <p style="float:right;">Créé le ${DispUser.created.strftime('%d %b %Y').decode('utf-8')}</p> | <p style="float:right;">Créé le ${DispUser.created.strftime('%d %b %Y').decode('utf-8')}</p> | ||||
| </div> | |||||
| </div> | |||||
| @@ -1,4 +1,9 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | |||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <strong>${event.event_type}</strong>: | <strong>${event.event_type}</strong>: | ||||
| <div class="borderboxtime"> | <div class="borderboxtime"> | ||||
| ${event.start_time.strftime('%d %b %Y').decode('utf-8')} - | ${event.start_time.strftime('%d %b %Y').decode('utf-8')} - | ||||
| @@ -10,7 +15,11 @@ ${event.start_time.strftime('%H:%M')} à ${event.end_time.strftime('%H:%M')} | |||||
| %if event.event_uid: | %if event.event_uid: | ||||
| <a href="http://jm2l.linux-azur.org/node/${event.event_uid}">Link</a> - | <a href="http://jm2l.linux-azur.org/node/${event.event_uid}">Link</a> - | ||||
| %endif | %endif | ||||
| % if event.for_year==2015 and (request.user.Staff or request.user in event.intervenants): | |||||
| <a href="/MesJM2L/${event.for_year}/${event.event_type}/${event.slug}">Editer</a> | <a href="/MesJM2L/${event.for_year}/${event.event_type}/${event.slug}">Editer</a> | ||||
| % elif request.user.Staff: | |||||
| <a href="/MesJM2L/${event.for_year}/${event.event_type}/${event.slug}">Editer</a> | |||||
| % endif | |||||
| <h3 style="line-height:30px;">${event.name}</h3> | <h3 style="line-height:30px;">${event.name}</h3> | ||||
| % if event.description : | % if event.description : | ||||
| @@ -42,28 +51,29 @@ ${event.start_time.strftime('%H:%M')} à ${event.end_time.strftime('%H:%M')} | |||||
| % if iterv.pseudo: | % if iterv.pseudo: | ||||
| (${iterv.pseudo}) | (${iterv.pseudo}) | ||||
| %endif | %endif | ||||
| </div> | |||||
| <div class="intervbox borderbox"> | |||||
| % if iterv.PhotosLinks: | |||||
| <div style="float:right;padding:5px;border: 1px solid #eee;background-color:white;"> | |||||
| % for img_path in iterv.PhotosLinks: | |||||
| <img src="${img_path}" alt="logo" /> | |||||
| % endfor | |||||
| </div> | |||||
| % endif | |||||
| % if iterv.bio: | |||||
| ${iterv.bio | n} | |||||
| %endif | |||||
| </div> | </div> | ||||
| % if iterv.website: | |||||
| <div class="media borderbox"> | |||||
| ${helpers.show_pictures(iterv)} | |||||
| <div class="media-body"> | |||||
| % if iterv.bio: | |||||
| ${iterv.bio | n} | |||||
| % else: | |||||
| <i>Ce profil n'a pas été complété.</i> | |||||
| % endif | |||||
| </div> | |||||
| </div> | |||||
| <div class="footborderbox"> | <div class="footborderbox"> | ||||
| <a href="http://${iterv.website}">${iterv.website}</a> | |||||
| % if iterv.website: | |||||
| <div style="float:right;"> | |||||
| <a href="http://${iterv.website}">${iterv.website}</a> | |||||
| </div> | |||||
| % endif | |||||
| </div> | </div> | ||||
| %endif | |||||
| </p> | </p> | ||||
| % endfor | % endfor | ||||
| <div class="clearfix"> </div> | <div class="clearfix"> </div> | ||||
| <p style="float:right;">Créé le ${event.created.strftime('%d %b %Y').decode('utf-8')}</p> | <p style="float:right;">Créé le ${event.created.strftime('%d %b %Y').decode('utf-8')}</p> | ||||
| <br/> | <br/> | ||||
| <hr/> | <hr/> | ||||
| </div> | |||||
| </div> | |||||
| @@ -1,7 +1,11 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | |||||
| <% The_entity_type = entity.get_entity_type %> | <% The_entity_type = entity.get_entity_type %> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <strong>${The_entity_type.entity_type}</strong> | <strong>${The_entity_type.entity_type}</strong> | ||||
| % if The_entity_type.entity_subtype!=The_entity_type.entity_type: | % if The_entity_type.entity_subtype!=The_entity_type.entity_type: | ||||
| ${The_entity_type.entity_subtype} | ${The_entity_type.entity_subtype} | ||||
| @@ -12,7 +16,9 @@ ${The_entity_type.entity_subtype} | |||||
| %if entity.tiers_id: | %if entity.tiers_id: | ||||
| <a href="http://jm2l.linux-azur.org/node/${entity.tiers_id}">Link</a> - | <a href="http://jm2l.linux-azur.org/node/${entity.tiers_id}">Link</a> - | ||||
| %endif | %endif | ||||
| % if (request.user.Staff or request.user in entity.members): | |||||
| <a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}/edit">Editer</a> | <a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}/edit">Editer</a> | ||||
| % endif | |||||
| <div clear='both'></div> | <div clear='both'></div> | ||||
| <div> | <div> | ||||
| <a style="float:right;" href="/entities">Liste des entités</a> | <a style="float:right;" href="/entities">Liste des entités</a> | ||||
| @@ -57,24 +63,28 @@ ${The_entity_type.entity_subtype} | |||||
| (${iterv.pseudo}) | (${iterv.pseudo}) | ||||
| %endif | %endif | ||||
| </div> | </div> | ||||
| <div class="borderbox"> | |||||
| % if iterv.PhotosLinks: | |||||
| <div style="float:right;padding:5px;border: 1px solid #eee;background-color:white;"> | |||||
| % for img_path in iterv.PhotosLinks: | |||||
| <img src="${img_path}" alt="logo" /> | |||||
| <div class="media borderbox"> | |||||
| ${helpers.show_pictures(iterv)} | |||||
| <div class="media-body"> | |||||
| <ul> | |||||
| % for i in filter(lambda x:x.user_uid==iterv.uid and x.tiers_uid==entity.uid, entity.membership): | |||||
| <li>${i.year_uid} ${i.role}</li> | |||||
| % endfor | % endfor | ||||
| </ul> | |||||
| % if iterv.bio: | |||||
| ${iterv.bio | n} | |||||
| % else: | |||||
| <i>Ce profil n'a pas été complété.</i> | |||||
| % endif | |||||
| </div> | |||||
| </div> | |||||
| <div class="footborderbox"> | |||||
| % if iterv.website: | |||||
| <div style="float:right;"> | |||||
| <a href="http://${iterv.website}">${iterv.website}</a> | |||||
| </div> | </div> | ||||
| % endif | % endif | ||||
| % if iterv.bio: | |||||
| ${iterv.bio | n} | |||||
| %endif | |||||
| % if iterv.website: | |||||
| <div style="float:right;"> | |||||
| <a href="http://${iterv.website}">${iterv.website}</a> | |||||
| </div> | |||||
| %endif | |||||
| </div> | |||||
| </div> | |||||
| </p> | </p> | ||||
| % endfor | % endfor | ||||
| @@ -82,3 +92,5 @@ ${The_entity_type.entity_subtype} | |||||
| <br/> | <br/> | ||||
| <hr/> | <hr/> | ||||
| </div> | |||||
| </div> | |||||
| @@ -1,6 +1,10 @@ | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | <%inherit file="jm2l:templates/layout.mako"/> | ||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | ||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| % if request.user and (DispUser.uid==request.user.uid or request.user.uid==1): | % if request.user and (DispUser.uid==request.user.uid or request.user.uid==1): | ||||
| <a style="float:right;" href="/MesJM2L?user=${DispUser.uid}">Editer</a> | <a style="float:right;" href="/MesJM2L?user=${DispUser.uid}">Editer</a> | ||||
| % endif | % endif | ||||
| @@ -43,3 +47,5 @@ | |||||
| % endif | % endif | ||||
| <p style="float:right;">Créé le ${DispUser.created.strftime('%d %b %Y').decode('utf-8')}</p> | <p style="float:right;">Créé le ${DispUser.created.strftime('%d %b %Y').decode('utf-8')}</p> | ||||
| </div> | |||||
| </div> | |||||
| @@ -96,6 +96,9 @@ class MediaPath(): | |||||
| elif media_table=='tasks': | elif media_table=='tasks': | ||||
| # Use Current Year | # Use Current Year | ||||
| p = IMAGEPATH + [ str(2015), media_table ] + [ linked_id ] | p = IMAGEPATH + [ str(2015), media_table ] + [ linked_id ] | ||||
| elif media_table=='poles': | |||||
| # Use Current Year | |||||
| p = IMAGEPATH + [ str(2015), media_table ] + [ linked_id ] | |||||
| elif media_table in ['RIB', 'Justif']: | elif media_table in ['RIB', 'Justif']: | ||||
| slug = User.by_id(linked_id).slug | slug = User.by_id(linked_id).slug | ||||
| p = IMAGEPATH + ['users'] + [ slug ] + [ self.media_table ] | p = IMAGEPATH + ['users'] + [ slug ] + [ self.media_table ] | ||||
| @@ -195,7 +195,7 @@ def JSON_TimeLine_Request(request): | |||||
| "text":"<i><span class='c1'>9ème Édition</span></i>", | "text":"<i><span class='c1'>9ème Édition</span></i>", | ||||
| "asset": | "asset": | ||||
| { | { | ||||
| "media":"", | |||||
| "media":"https://www.youtube.com/watch?v=DnfjrxVoLao", | |||||
| "credit":"JM2L", | "credit":"JM2L", | ||||
| "caption":"" | "caption":"" | ||||
| } | } | ||||
| @@ -208,8 +208,7 @@ def JSON_TimeLine_Request(request): | |||||
| ## =-=- Here, We handle HTTP requests - Public Part -=-= | ## =-=- Here, We handle HTTP requests - Public Part -=-= | ||||
| @view_config(route_name='home', renderer="jm2l:templates/NewIndex.mako") | @view_config(route_name='home', renderer="jm2l:templates/NewIndex.mako") | ||||
| def index_page(request): | def index_page(request): | ||||
| MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', | |||||
| "logged_in":request.authenticated_userid } | |||||
| MainTab = {'accueil':'active', "logged_in":request.authenticated_userid } | |||||
| return MainTab | return MainTab | ||||
| @view_config(route_name='programme', renderer="jm2l:templates/Public/Programme.mako") | @view_config(route_name='programme', renderer="jm2l:templates/Public/Programme.mako") | ||||
| @@ -230,7 +229,7 @@ def programme(request): | |||||
| RefDay = datetime.datetime.strptime(day[0],'%d-%m-%Y') | RefDay = datetime.datetime.strptime(day[0],'%d-%m-%Y') | ||||
| ListDay.append( ( RefDay.strftime('%A %d %b %Y'), | ListDay.append( ( RefDay.strftime('%A %d %b %Y'), | ||||
| RefDay.strftime('%d') ) ) | RefDay.strftime('%d') ) ) | ||||
| MainTab = {'programme':'active','presse':'', 'plan':'', 'participer':'', 'DisplayYear':year, \ | |||||
| MainTab = {'programme':'active','DisplayYear':year, \ | |||||
| 'Events':Events, 'Event':Event, 'Days':ListDay, "logged_in":request.authenticated_userid } | 'Events':Events, 'Event':Event, 'Days':ListDay, "logged_in":request.authenticated_userid } | ||||
| return MainTab | return MainTab | ||||
| @@ -238,8 +237,7 @@ def programme(request): | |||||
| def static_presse(request): | def static_presse(request): | ||||
| year = int(request.matchdict.get('year', None)) | year = int(request.matchdict.get('year', None)) | ||||
| content = DBSession.query(JM2L_Year).filter(JM2L_Year.year_uid==year).first() | content = DBSession.query(JM2L_Year).filter(JM2L_Year.year_uid==year).first() | ||||
| MainTab = {'programme':'','presse':'active', 'plan':'', 'participer':'', | |||||
| "logged_in":request.authenticated_userid, 'content':content, 'DisplayYear':year} | |||||
| MainTab = {'presse':'active', "logged_in":request.authenticated_userid, 'content':content, 'DisplayYear':year} | |||||
| return MainTab | return MainTab | ||||
| @view_config(route_name='edit_presse', renderer="jm2l:templates/Staff/EditPresse.mako") | @view_config(route_name='edit_presse', renderer="jm2l:templates/Staff/EditPresse.mako") | ||||
| @@ -249,15 +247,13 @@ def edit_presse(request): | |||||
| form = DossPresse(request.POST, content, meta={'csrf_context': request.session}) | form = DossPresse(request.POST, content, meta={'csrf_context': request.session}) | ||||
| if request.method == 'POST' and form.validate(): | if request.method == 'POST' and form.validate(): | ||||
| form.populate_obj(content) | form.populate_obj(content) | ||||
| MainTab = {'programme':'','presse':'active', 'plan':'', 'participer':'', | |||||
| "logged_in":request.authenticated_userid, 'form':form, 'DisplayYear':year} | |||||
| MainTab = {'presse':'active', "logged_in":request.authenticated_userid, 'form':form, 'DisplayYear':year} | |||||
| return MainTab | return MainTab | ||||
| @view_config(route_name='plan', renderer="jm2l:templates/Public/Plan.mako") | @view_config(route_name='plan', renderer="jm2l:templates/Public/Plan.mako") | ||||
| def static_plan(request): | def static_plan(request): | ||||
| MainTab = {'programme':'','presse':'', 'plan':'active', 'participer':'', | |||||
| "logged_in":request.authenticated_userid } | |||||
| MainTab = {'plan':'active', "logged_in":request.authenticated_userid } | |||||
| return MainTab | return MainTab | ||||
| ## =-=- Here, We handle HTTP requests - Staff Logged Part -=-= | ## =-=- Here, We handle HTTP requests - Staff Logged Part -=-= | ||||
| @@ -272,7 +268,6 @@ def list_view(request): | |||||
| DicTask[grp] = tasks | DicTask[grp] = tasks | ||||
| return {'tasks': DicTask } | return {'tasks': DicTask } | ||||
| @view_config(route_name='handle_task', renderer='jm2l:templates/Staff/tasks.mako') | @view_config(route_name='handle_task', renderer='jm2l:templates/Staff/tasks.mako') | ||||
| def tasks(request): | def tasks(request): | ||||
| task_id = request.matchdict.get('task_id') | task_id = request.matchdict.get('task_id') | ||||
| @@ -319,7 +314,6 @@ def tasks(request): | |||||
| return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Task.area.name)) | return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Task.area.name)) | ||||
| return {'form':form, 'area':slugify(Areas[Task.area_uid-1].name)} | return {'form':form, 'area':slugify(Areas[Task.area_uid-1].name)} | ||||
| @view_config(route_name='handle_pole', renderer='jm2l:templates/Staff/pole.mako') | @view_config(route_name='handle_pole', renderer='jm2l:templates/Staff/pole.mako') | ||||
| def tasks_area(request): | def tasks_area(request): | ||||
| pole_id = request.matchdict.get('pole_id') | pole_id = request.matchdict.get('pole_id') | ||||
| @@ -337,7 +331,7 @@ def tasks_area(request): | |||||
| DBSession.merge(Pole) | DBSession.merge(Pole) | ||||
| else: | else: | ||||
| DBSession.add(Pole) | DBSession.add(Pole) | ||||
| return HTTPFound(location=request.route_url('list_task')) | |||||
| return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Pole.name)) | |||||
| return {'form':form } | return {'form':form } | ||||
| @view_config(route_name='action_task') | @view_config(route_name='action_task') | ||||
| @@ -347,10 +341,11 @@ def action_task(request): | |||||
| Task = Tasks.by_id(int(task_id)) | Task = Tasks.by_id(int(task_id)) | ||||
| if action=='close': | if action=='close': | ||||
| Task.closed = True | Task.closed = True | ||||
| request.session.flash(('info','Task was successfully closed!')) | |||||
| if action=='open': | if action=='open': | ||||
| Task.closed = False | Task.closed = False | ||||
| request.session.flash(('info','Task was successfully re-opened!')) | |||||
| DBSession.merge(Task) | DBSession.merge(Task) | ||||
| request.session.flash('Task was successfully closed!') | |||||
| return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Task.area.name)) | return HTTPFound(location=request.route_url('list_task')+"#"+slugify(Task.area.name)) | ||||
| @@ -404,6 +399,15 @@ def exchange(request): | |||||
| } | } | ||||
| return MainTab | return MainTab | ||||
| @view_config(route_name='sejour') | |||||
| def sejour(request): | |||||
| if request.user is None: | |||||
| # Don't answer to users that aren't logged | |||||
| return HTTPUnauthorized('You have to be logged to hope an answer.') | |||||
| if request.method == 'POST': | |||||
| print request.POST | |||||
| return HTTPFound(location='/MesJM2L#Sejour') | |||||
| @view_config(route_name='jm2l', renderer="jm2l:templates/jm2l.mako") | @view_config(route_name='jm2l', renderer="jm2l:templates/jm2l.mako") | ||||
| def jm2l_page(request): | def jm2l_page(request): | ||||
| if request.user is None: | if request.user is None: | ||||
| @@ -443,6 +447,7 @@ def jm2l_page(request): | |||||
| profil.last_change = datetime.datetime.utcnow() | profil.last_change = datetime.datetime.utcnow() | ||||
| profil.slug = slugify(remove_accents('%s %s' % (profil.prenom, profil.nom)).lower().strip()) | profil.slug = slugify(remove_accents('%s %s' % (profil.prenom, profil.nom)).lower().strip()) | ||||
| DBSession.merge(profil) | DBSession.merge(profil) | ||||
| request.session.flash(('info',u'Votre fiche a été mise à jour avec succès')) | |||||
| MainTab = {'participer':'active', | MainTab = {'participer':'active', | ||||
| 'Places':Place.get_list(False), | 'Places':Place.get_list(False), | ||||
| 'DBTiers':Tiers, | 'DBTiers':Tiers, | ||||
| @@ -466,6 +471,8 @@ def Modal(request): | |||||
| response = render_to_response('jm2l:templates/modals_js.mako', | response = render_to_response('jm2l:templates/modals_js.mako', | ||||
| {'modtype':modtype}, | {'modtype':modtype}, | ||||
| request=request) | request=request) | ||||
| request.user.password = form.password.data | |||||
| DBSession.merge(request.user) | |||||
| response.content_type = 'text/javascript' | response.content_type = 'text/javascript' | ||||
| return response | return response | ||||
| if modtype=='UserPicture': | if modtype=='UserPicture': | ||||
| @@ -681,8 +688,6 @@ def participer(request): | |||||
| message.add_bcc("spam@style-python.fr") | message.add_bcc("spam@style-python.fr") | ||||
| mailer.send(message) | mailer.send(message) | ||||
| MainTab = {'programme':'','presse':'', 'plan':'', | MainTab = {'programme':'','presse':'', 'plan':'', | ||||
| 'participer':'active', 'form':form, "link": MyLink, | 'participer':'active', 'form':form, "link": MyLink, | ||||
| 'logged_in':request.authenticated_userid } | 'logged_in':request.authenticated_userid } | ||||
| @@ -724,24 +729,19 @@ def link_event(request): | |||||
| form = AddIntervenant(request.POST, meta={'csrf_context': request.session}) | form = AddIntervenant(request.POST, meta={'csrf_context': request.session}) | ||||
| intervention = request.matchdict.get('intervention', None) | intervention = request.matchdict.get('intervention', None) | ||||
| TargetEvent = Event.by_id(form.event_uid.data) | TargetEvent = Event.by_id(form.event_uid.data) | ||||
| Exist = DBSession.query(User)\ | |||||
| .filter(User.nom==form.nom.data)\ | |||||
| .filter(User.prenom==form.prenom.data)\ | |||||
| .first() | |||||
| if Exist: | |||||
| TargetUser = Exist | |||||
| Exist = User.by_id(form.intervenant.data) | |||||
| if not Exist: | |||||
| request.session.flash(('error',u"Une erreur s'est produite lors de l'ajout de votre intervenant !")) | |||||
| return HTTPFound(location=request.route_url('edit_event', sep='/', | |||||
| year=str(year), intervention=intervention, event_id=str(TargetEvent.uid))) | |||||
| else: | else: | ||||
| # Add it to user base | |||||
| TargetUser = User(nom=form.nom.data, | |||||
| prenom=form.prenom.data, password=form.nom.data) | |||||
| DBSession.add(TargetUser) | |||||
| DBSession.flush() | |||||
| TargetUser = Exist | |||||
| uev = User_Event(year_uid=year, role="Animateur", user_uid=TargetUser.uid) | |||||
| uev = User_Event(year_uid=year, role=u"Animateur d'un évenement JM2L", user_uid=TargetUser.uid) | |||||
| TargetEvent.interventions.append( uev ) | TargetEvent.interventions.append( uev ) | ||||
| return HTTPFound(location=request.route_url('edit_event', sep='/', | return HTTPFound(location=request.route_url('edit_event', sep='/', | ||||
| year=str(year), intervention=intervention, uid=str(TargetEvent.uid))) | |||||
| year=str(year), intervention=intervention, event_id=str(TargetEvent.uid))) | |||||
| @view_config(route_name='edit_event', renderer="jm2l:templates/edit_event.mako") | @view_config(route_name='edit_event', renderer="jm2l:templates/edit_event.mako") | ||||
| def edit_event(request): | def edit_event(request): | ||||
| @@ -756,13 +756,13 @@ def edit_event(request): | |||||
| raise HTTPNotFound(u"Ce type d'évenement n'est pas reconnu") | raise HTTPNotFound(u"Ce type d'évenement n'est pas reconnu") | ||||
| TheYear = DBSession.query(JM2L_Year)\ | TheYear = DBSession.query(JM2L_Year)\ | ||||
| .filter(JM2L_Year.year_uid==year)\ | .filter(JM2L_Year.year_uid==year)\ | ||||
| .all() | |||||
| .first() | |||||
| # Check year avaibility | # Check year avaibility | ||||
| if not TheYear: | if not TheYear: | ||||
| raise HTTPNotFound(u"Cette année n'est pas pris en charge") | raise HTTPNotFound(u"Cette année n'est pas pris en charge") | ||||
| # Generate Timeslots for current year | # Generate Timeslots for current year | ||||
| TimeSlots = list(enumerate( [ x.strftime('%a %d %b %H:%M') for x in | TimeSlots = list(enumerate( [ x.strftime('%a %d %b %H:%M') for x in | ||||
| TheYear[0].AvailableTimeSlots ] )) | |||||
| TheYear.AvailableTimeSlots ] )) | |||||
| if event_id: | if event_id: | ||||
| # We try to update an existing record | # We try to update an existing record | ||||
| @@ -778,8 +778,8 @@ def edit_event(request): | |||||
| if request.user is None or not (request.user.Staff or request.user in TheEvent.intervenants): | if request.user is None or not (request.user.Staff or request.user in TheEvent.intervenants): | ||||
| return HTTPForbidden(u"Vous n'êtes pas identifié comme étant un participant à cette intervention.") | return HTTPForbidden(u"Vous n'êtes pas identifié comme étant un participant à cette intervention.") | ||||
| # Compute some field value from selected event | # Compute some field value from selected event | ||||
| if TheEvent.start_time in TheYear[0].AvailableTimeSlots: | |||||
| start_sel = TheYear[0].AvailableTimeSlots.index(TheEvent.start_time) | |||||
| if TheEvent.start_time in TheYear.AvailableTimeSlots: | |||||
| start_sel = TheYear.AvailableTimeSlots.index(TheEvent.start_time) | |||||
| else: | else: | ||||
| start_sel = len(TimeSlots) | start_sel = len(TimeSlots) | ||||
| TimeSlots.append( (len(TimeSlots), TheEvent.start_time.strftime('%a %d %b %H:%M'))) | TimeSlots.append( (len(TimeSlots), TheEvent.start_time.strftime('%a %d %b %H:%M'))) | ||||
| @@ -793,6 +793,14 @@ def edit_event(request): | |||||
| form.description.label.text += IntervLabel | form.description.label.text += IntervLabel | ||||
| # Each event can get severals members | # Each event can get severals members | ||||
| formAdd = AddIntervenant(event_uid=TheEvent.uid) | formAdd = AddIntervenant(event_uid=TheEvent.uid) | ||||
| # Build list of intervenant | |||||
| # Get users from db | |||||
| Users = DBSession.query(User)\ | |||||
| .filter(User.Staff==1)\ | |||||
| .order_by('nom').all() | |||||
| # Put some users on form | |||||
| formAdd.intervenant.choices = [(u.uid, "%s %s" % (u.nom, u.prenom)) | |||||
| for u in Users] | |||||
| else: | else: | ||||
| TheEvent = Event() | TheEvent = Event() | ||||
| # prepare the form for creation | # prepare the form for creation | ||||
| @@ -845,7 +853,7 @@ def edit_event(request): | |||||
| if request.method == 'POST' and form.validate(): | if request.method == 'POST' and form.validate(): | ||||
| form.populate_obj(TheEvent) | form.populate_obj(TheEvent) | ||||
| TheEvent.start_time = TheYear[0].AvailableTimeSlots[form.start_sel.data] | |||||
| TheEvent.start_time = TheYear.AvailableTimeSlots[form.start_sel.data] | |||||
| TheEvent.end_time = TheEvent.start_time + datetime.timedelta(minutes=form.duration.data) | TheEvent.end_time = TheEvent.start_time + datetime.timedelta(minutes=form.duration.data) | ||||
| # Ok, time to put in database | # Ok, time to put in database | ||||
| if not form._fields.has_key("uid"): | if not form._fields.has_key("uid"): | ||||
| @@ -857,6 +865,7 @@ def edit_event(request): | |||||
| uev.user_uid = request.user.uid | uev.user_uid = request.user.uid | ||||
| TheEvent.interventions.append( uev ) | TheEvent.interventions.append( uev ) | ||||
| DBSession.flush() | DBSession.flush() | ||||
| request.session.flash(('sucess','Votre intervention a été créee !')) | |||||
| return HTTPFound(location=request.route_url('edit_event', sep='/', | return HTTPFound(location=request.route_url('edit_event', sep='/', | ||||
| year=str(year), intervention=intervention, event_id=str(TheEvent.slug))) | year=str(year), intervention=intervention, event_id=str(TheEvent.slug))) | ||||
| else: | else: | ||||
| @@ -898,8 +907,7 @@ def show_tiers(request): | |||||
| return MainTab | return MainTab | ||||
| @view_config(route_name='add_entity', renderer="jm2l:templates/edit_tiers.mako") | @view_config(route_name='add_entity', renderer="jm2l:templates/edit_tiers.mako") | ||||
| @view_config(route_name='edit_entity', renderer="jm2l:templates/edit_tiers.mako", | |||||
| permission='edit') | |||||
| @view_config(route_name='edit_entity', renderer="jm2l:templates/edit_tiers.mako") | |||||
| def edit_tiers(request): | def edit_tiers(request): | ||||
| entity_id = request.matchdict.get('entity_id', None) | entity_id = request.matchdict.get('entity_id', None) | ||||
| TargetList = list() | TargetList = list() | ||||
| @@ -1049,7 +1057,6 @@ def show_user(request): | |||||
| 'DispUser':DispUser, 'logged_in':request.authenticated_userid } | 'DispUser':DispUser, 'logged_in':request.authenticated_userid } | ||||
| return MainTab | return MainTab | ||||
| #@view_config(route_name='link_user_entity') | #@view_config(route_name='link_user_entity') | ||||
| def link_user_entity(request): | def link_user_entity(request): | ||||
| uid = int(request.matchdict.get('uid', -1)) | uid = int(request.matchdict.get('uid', -1)) | ||||