Many Changes before production load
This commit is contained in:
+4
-2
@@ -5,7 +5,7 @@ from pyramid.renderers import JSON, JSONP
|
|||||||
from pyramid.session import SignedCookieSessionFactory
|
from pyramid.session import SignedCookieSessionFactory
|
||||||
from sqlalchemy import engine_from_config
|
from sqlalchemy import engine_from_config
|
||||||
from pyramid.renderers import render_to_response
|
from pyramid.renderers import render_to_response
|
||||||
from .models import DBSession, get_user
|
from .models import DBSession, get_user, get_sponsors, get_exposants
|
||||||
from .security import EntryFactory, groupfinder
|
from .security import EntryFactory, groupfinder
|
||||||
from pyramid_mailer import mailer_factory_from_settings
|
from pyramid_mailer import mailer_factory_from_settings
|
||||||
import locale
|
import locale
|
||||||
@@ -17,7 +17,7 @@ def main(global_config, **settings):
|
|||||||
locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
|
locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
|
||||||
engine = engine_from_config(settings, 'sqlalchemy.')
|
engine = engine_from_config(settings, 'sqlalchemy.')
|
||||||
DBSession.configure(bind=engine)
|
DBSession.configure(bind=engine)
|
||||||
# Extract secrets from configuration file
|
# Extract secrets from configuration file if any
|
||||||
CookiesPasswd = settings.get('secret_Cookies', 'itsthefirstseekreet')
|
CookiesPasswd = settings.get('secret_Cookies', 'itsthefirstseekreet')
|
||||||
AuthTktPasswd = settings.get('secret_AuthTkt', 'itsthesecondseekreet')
|
AuthTktPasswd = settings.get('secret_AuthTkt', 'itsthesecondseekreet')
|
||||||
my_session_factory = SignedCookieSessionFactory(CookiesPasswd)
|
my_session_factory = SignedCookieSessionFactory(CookiesPasswd)
|
||||||
@@ -34,6 +34,8 @@ def main(global_config, **settings):
|
|||||||
config.add_renderer('jsonp', JSONP(param_name='callback'))
|
config.add_renderer('jsonp', JSONP(param_name='callback'))
|
||||||
config.set_session_factory(my_session_factory)
|
config.set_session_factory(my_session_factory)
|
||||||
config.add_request_method(get_user, 'user', reify=True)
|
config.add_request_method(get_user, 'user', reify=True)
|
||||||
|
config.add_request_method(get_sponsors, 'sponsors', reify=False)
|
||||||
|
config.add_request_method(get_exposants, 'exposants', reify=False)
|
||||||
config.add_static_view('static', 'static', cache_max_age=3600)
|
config.add_static_view('static', 'static', cache_max_age=3600)
|
||||||
config.add_static_view('img', 'static/img', cache_max_age=3600)
|
config.add_static_view('img', 'static/img', cache_max_age=3600)
|
||||||
config.add_static_view('css', 'static/css', cache_max_age=3600)
|
config.add_static_view('css', 'static/css', cache_max_age=3600)
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ class StaffTasks(MyBaseForm):
|
|||||||
name = TextField(u'Nom de la tâche', [validators.Required()])
|
name = TextField(u'Nom de la tâche', [validators.Required()])
|
||||||
area_uid = SelectField(u'Pôle concerné', coerce=int )
|
area_uid = SelectField(u'Pôle concerné', coerce=int )
|
||||||
closed_by = SelectField(u'Assigné à', coerce=int )
|
closed_by = SelectField(u'Assigné à', coerce=int )
|
||||||
due_date = DateField(u'Date prévue', format='%Y-%m-%d')
|
due_date = DateField(u'Date prévue', format='%d/%m/%Y')
|
||||||
description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)],
|
description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)],
|
||||||
filters=[strip_filter])
|
filters=[strip_filter])
|
||||||
|
|
||||||
|
|||||||
+25
-1
@@ -243,7 +243,7 @@ class Tiers(Base):
|
|||||||
lazy='dynamic')
|
lazy='dynamic')
|
||||||
creator_id = Column(Integer)
|
creator_id = Column(Integer)
|
||||||
membership = relationship('User_Tiers', backref="matching_tiers")
|
membership = relationship('User_Tiers', backref="matching_tiers")
|
||||||
roles = relationship('Tiers', secondary='role_tiers_link' )
|
roles = relationship('Role_Tiers', backref="roles_tiers") #secondary='role_tiers_link' )
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def by_id(cls, id):
|
def by_id(cls, id):
|
||||||
@@ -618,3 +618,27 @@ def get_user(request):
|
|||||||
# this should return None if the user doesn't exist
|
# this should return None if the user doesn't exist
|
||||||
# in the database
|
# in the database
|
||||||
return DBSession.query(User).filter(User.uid==userid).first()
|
return DBSession.query(User).filter(User.uid==userid).first()
|
||||||
|
|
||||||
|
|
||||||
|
def get_sponsors(request, Year):
|
||||||
|
if Year:
|
||||||
|
return DBSession.query(Tiers)\
|
||||||
|
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\
|
||||||
|
.filter( Role_Tiers.tiers_role == 'Sponsor')\
|
||||||
|
.filter( Role_Tiers.year_uid == Year)
|
||||||
|
else:
|
||||||
|
return DBSession.query(Tiers)\
|
||||||
|
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\
|
||||||
|
.filter( Role_Tiers.tiers_role == 'Sponsor')
|
||||||
|
|
||||||
|
def get_exposants(request, Year):
|
||||||
|
if Year:
|
||||||
|
return DBSession.query(Tiers)\
|
||||||
|
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\
|
||||||
|
.filter( Role_Tiers.tiers_role == 'Exposant')\
|
||||||
|
.filter( Role_Tiers.year_uid == Year)
|
||||||
|
else:
|
||||||
|
return DBSession.query(Tiers)\
|
||||||
|
.join(Role_Tiers, Role_Tiers.tiers_uid == Tiers.uid )\
|
||||||
|
.filter( Role_Tiers.tiers_role == 'Exposant')
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ a {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pagecontent {
|
||||||
|
padding: 0 50px;
|
||||||
|
}
|
||||||
|
|
||||||
.borderbox {
|
.borderbox {
|
||||||
border: 1px solid #e1e4e5;
|
border: 1px solid #e1e4e5;
|
||||||
margin: 1px 0 24px;
|
margin: 1px 0 24px;
|
||||||
@@ -84,6 +88,7 @@ a {
|
|||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
|
||||||
width: 15px;
|
width: 15px;
|
||||||
top: -20px;
|
top: -20px;
|
||||||
}
|
}
|
||||||
@@ -96,6 +101,28 @@ a {
|
|||||||
right: 15px;
|
right: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Tcarousel-control {
|
||||||
|
bottom: 0;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 20px;
|
||||||
|
left: 0;
|
||||||
|
opacity: 0.5;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
|
||||||
|
top: 100px;;
|
||||||
|
width: 3%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Tcarousel-control.left {
|
||||||
|
right: auto;
|
||||||
|
left: 15px;
|
||||||
|
}
|
||||||
|
.Tcarousel-control.right {
|
||||||
|
left: auto;
|
||||||
|
right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
.LogistiqueTable th, .LogistiqueTable td
|
.LogistiqueTable th, .LogistiqueTable td
|
||||||
{
|
{
|
||||||
text-align:center;
|
text-align:center;
|
||||||
@@ -143,6 +170,47 @@ a {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
.ShowEntities td, .ShowEntities th {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ShowEntities td {
|
||||||
|
padding:10px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.ShowEntities th {
|
||||||
|
background-color: #fafafa;
|
||||||
|
background-image: linear-gradient(to bottom, #fff, #f2f2f2);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
border: 1px solid #d4d4d4;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.ShowEntities {
|
||||||
|
border: 1px solid #d4d4d4;
|
||||||
|
}
|
||||||
|
.ShowEntities td img {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ShowEntities td:hover {
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
border-top: 1px solid #e5e5e5;
|
||||||
|
margin-top: 70px;
|
||||||
|
padding: 10px 0;
|
||||||
|
text-align: center;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer p {
|
||||||
|
color: #777;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Fix calendar button vertical pos */
|
/* Fix calendar button vertical pos */
|
||||||
.date-input-buttons {
|
.date-input-buttons {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/>
|
||||||
<%def name="Resume()">
|
<%def name="Resume()">
|
||||||
<table width="100%" class="table table-striped table-bordered table-hover">
|
<table class="table table-striped table-bordered table-hover">
|
||||||
<CAPTION>La feuille de route de mes interventions</CAPTION>
|
<CAPTION>La feuille de route de mes interventions</CAPTION>
|
||||||
<thead style="text-align:center">
|
<thead style="text-align:center">
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ ListWrap = ["Co-voiturage",u"Hébergement","Matos"]
|
|||||||
<div id="collapseMe" class="accordion-body collapse in">
|
<div id="collapseMe" class="accordion-body collapse in">
|
||||||
<div class="accordion-inner">
|
<div class="accordion-inner">
|
||||||
|
|
||||||
<table width="100%" class="table table-striped table-bordered table-hover LogistiqueTable">
|
<table class="table table-striped table-bordered table-hover LogistiqueTable">
|
||||||
<thead style="text-align:center">
|
<thead style="text-align:center">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Section</th>
|
<th>Section</th>
|
||||||
@@ -246,7 +246,7 @@ ListWrap = ["Co-voiturage",u"Hébergement","Matos"]
|
|||||||
<div id="collapseAll" class="accordion-body collapse">
|
<div id="collapseAll" class="accordion-body collapse">
|
||||||
<div class="accordion-inner">
|
<div class="accordion-inner">
|
||||||
|
|
||||||
<table width="100%" class="table table-striped table-bordered table-hover LogistiqueTable">
|
<table class="table table-striped table-bordered table-hover LogistiqueTable">
|
||||||
<thead style="text-align:center">
|
<thead style="text-align:center">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Section</th>
|
<th>Section</th>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<%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="span10 offset1">
|
||||||
|
|
||||||
<h3><a href="mailto:contact@jm2l.linux-azur.org">Sponsoriser l’événement</a></h3>
|
<h3><a href="mailto:contact@jm2l.linux-azur.org">Sponsoriser l’événement</a></h3>
|
||||||
<p>
|
<p>
|
||||||
Si vous voulez aider l’organisation par des moyens financiers ou
|
Si vous voulez aider l’organisation par des moyens financiers ou
|
||||||
@@ -73,7 +75,5 @@ DicForm ={
|
|||||||
</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
|
||||||
<br>
|
|
||||||
<br>
|
</div>
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
@@ -1,65 +1,77 @@
|
|||||||
<%inherit file="jm2l:templates/layout.mako"/>
|
<%inherit file="jm2l:templates/layout.mako"/>
|
||||||
<h1 class="page-title">Nous rejoindre</h1>
|
<h2 class="page-title">Nous rejoindre...</h2>
|
||||||
<div class="row">
|
|
||||||
|
<div class="span10 offset1">
|
||||||
|
<p>D’où que vous veniez, tout est mis en place pour que vous
|
||||||
|
puissiez vous rendre en toute simplicité sur les lieux de l’événement.
|
||||||
|
<br> N'hésitez pas à utiliser la section covoiturage de votre profil. Et
|
||||||
|
pas de panique ! Demain, ce sera pire... </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span4 offset1">
|
||||||
|
<h4>Le staff</h4>
|
||||||
|
<dl>
|
||||||
|
<dt>Mail</dt>
|
||||||
|
<dd>» contact at jm2l.linux-azur.org</dd>
|
||||||
|
<dt>Téléphone</dt>
|
||||||
|
<dd>» +33 (0) 6 52 42 31 37</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="span4 offset1">
|
||||||
|
<h4>Le lieu</h4>
|
||||||
|
<address>
|
||||||
|
<strong>École </strong><strong>Polytech’Nice-Sophia </strong><br>
|
||||||
|
930, route des Colles (site des Templiers) <br>
|
||||||
|
06903 Sophia Antipolis (Biot)
|
||||||
|
</address>
|
||||||
|
<p>GPS Lat.: 43°36'57.72"N - Lon.: 7°4'17.03"E</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span6">
|
||||||
<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="#home" data-toggle="tab">C'est où ?</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>
|
||||||
<li><a href="#Trsp" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en bus" src="/img/tr_bus_.png"></a></li>
|
|
||||||
<li><a href="#Voiture" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en voiture" src="/img/tr_voiture_.png"></a></li>
|
<li><a href="#Voiture" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en voiture" src="/img/tr_voiture_.png"></a></li>
|
||||||
<li><a href="#Train" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en train" src="/img/tr_train_.png"></a></li>
|
<li><a href="#Train" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en train" src="/img/tr_train_.png"></a></li>
|
||||||
<li><a href="#Avion" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en avion" src="/img/tr_avion_.png"></a></li>
|
<li><a href="#Avion" data-toggle="tab"><img style="margin-bottom: -15px;" alt="en avion" src="/img/tr_avion_.png"></a></li>
|
||||||
<li><a href="#Contact" data-toggle="tab">Contact</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div class="tab-pane fade active in" id="home">
|
<div class="tab-pane fade active in" id="Trsp">
|
||||||
<h2>Lieu</h2>
|
<h3>Bus</h3>
|
||||||
<p><strong>École </strong><strong>Polytech’Nice-Sophia </strong><br>
|
<h4>Depuis Nice (durée : environ 30') :</h4>
|
||||||
930, route des Colles (site des Templiers) <br>
|
|
||||||
06903 Sophia Antipolis (Biot)
|
|
||||||
</p>
|
|
||||||
<p> GPS Lat.: 43°36'57.72"N - Lon.: 7°4'17.03"E</p>
|
|
||||||
<p>D’où que vous veniez, tout est mis en place pour que vous
|
|
||||||
puissiez vous rendre en toute simplicité sur les lieux de l’événement.
|
|
||||||
</p>
|
|
||||||
<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 class="tab-pane fade in" id="Trsp">
|
|
||||||
<h3>Depuis Nice (durée : environ 30') :</h3>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Trajet sur la ligne Nice-Sophia Express :
|
<li>Trajet sur la ligne Nice-Sophia Express :
|
||||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/230.pdf">ligne 230</a>
|
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/cg06-transports_lignes_230.pdf">ligne 230</a>
|
||||||
</li>
|
</li>
|
||||||
<li>Trajet sur la ligne Cagnes-Villeneuve-Biot-Sophia :
|
<li>Trajet sur la ligne Cagnes-Villeneuve-Biot-Sophia :
|
||||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/231.pdf">ligne 231</a>
|
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/231.pdf">ligne 231</a>
|
||||||
</li>
|
</li>
|
||||||
<li>Trajet sur la ligne StLaurent-Cagnes-Sophia :
|
<li>Trajet sur la ligne StLaurent-Cagnes-Sophia :
|
||||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/232.pdf">ligne 232</a>
|
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/232.pdf">ligne 232</a>
|
||||||
</li>
|
</li>
|
||||||
<li>Trajet sur la ligne Vence-StPaul-Valbonne-Sophia :
|
<li>Trajet sur la ligne Vence-StPaul-Valbonne-Sophia :
|
||||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/233.pdf">ligne 233</a>
|
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/233.pdf">ligne 233</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Arrivée : descendre à l’arrêt lesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li>
|
<li>Arrivée : descendre à l’arrêt lesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3>Depuis Cannes (durée : environ 30') :</h3>
|
<h4>Depuis Cannes (durée : environ 30') :</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Trajet sur la ligne Cannes - Sophia Antipolis :
|
<li>Trajet sur la ligne Cannes - Sophia Antipolis :
|
||||||
<a href="http://www.cg06.fr/document/?f=servir-les-habitants/fr/630.pdf">ligne 630</a>
|
<a href="https://www.cg06.fr/documents/A-votre-service/Deplacements/transports-en-commun/630.pdf">ligne 630</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Arrivée : descendre à l’arrêt des LesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li>
|
<li>Arrivée : descendre à l’arrêt des LesTempliers (à 700m à pied) ou IUT (à 150m à pied)</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3>Depuis Antibes (durée : entre 10 et 30') :</h3>
|
<h4>Depuis Antibes (durée : entre 10 et 30') :</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Trajet sur la ligne Express (uniquement pour le vendredi)
|
<li>Trajet sur la ligne Express (uniquement pour le vendredi)
|
||||||
<a href="http://www.envibus.fr/ligne_detail.asp?id=79&id_commune=1">ligne 100</a>
|
<a href="http://www.envibus.fr/ligne_detail.asp?id=79&id_commune=1">ligne 100</a>
|
||||||
@@ -120,22 +132,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade in" id="Contact">
|
<div class="tab-pane fade in" id="Contact">
|
||||||
<h3>Staff JM2L :</h3>
|
|
||||||
<ul>
|
</div>
|
||||||
<li>
|
</div>
|
||||||
<strong>Arnaud Delcasse +33 (0) 6 70 73 94 12</strong>
|
</div>
|
||||||
</li>
|
</div>
|
||||||
<li>
|
<div class="span6">
|
||||||
<strong>Véronique Fritière +33 (0) 6 52 42 31 37</strong>
|
<p>
|
||||||
</li>
|
<img alt="" src="http://jm2l.linux-azur.org/sites/jm2l.linux-azur.org/files/jm2l_plan_acces_polytech.png" style="height:507px; width:665px">
|
||||||
</ul>
|
</p>
|
||||||
<h3>Coordinateur Polytech :</h3>
|
<p>
|
||||||
<ul>
|
<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>
|
||||||
<li><strong>Romain +33 (0) 7 60 57 42 68</strong></li>
|
</p>
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<br>
|
||||||
</div>
|
|
||||||
<p>Pas de panique ! Demain, ce sera pire... Enjoy ;-)</p>
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ DisplayYear = request.session.get('year',2015)
|
|||||||
%>
|
%>
|
||||||
<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">
|
||||||
${content.doss_presse | n}
|
${content.doss_presse | n}
|
||||||
|
</div>
|
||||||
% endif
|
% endif
|
||||||
%if 0 and DisplayYear==2013:
|
%if 0 and DisplayYear==2013:
|
||||||
<div class="region region-content">
|
<div class="region region-content">
|
||||||
|
|||||||
@@ -13,13 +13,21 @@ TabDisplay = [
|
|||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
height: 65px;
|
height: 65px;
|
||||||
}
|
}
|
||||||
|
.SvgBody {
|
||||||
|
padding: 0px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
.EvtBox {
|
||||||
|
font-size: 0.7em;
|
||||||
|
line-height: 1.2em;
|
||||||
|
padding:5px;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
.Conference {
|
.Conference {
|
||||||
fill: #f9fde8;
|
fill: #f9fde8;
|
||||||
stroke: #a2bc13;
|
|
||||||
}
|
}
|
||||||
.Concert {
|
.Concert {
|
||||||
fill: #2EE;
|
fill: #2EE;
|
||||||
stroke: #ccc;
|
|
||||||
}
|
}
|
||||||
.Atelier {
|
.Atelier {
|
||||||
fill: #faebeb;
|
fill: #faebeb;
|
||||||
@@ -31,7 +39,6 @@ TabDisplay = [
|
|||||||
}
|
}
|
||||||
.Repas {
|
.Repas {
|
||||||
fill: #2EE;
|
fill: #2EE;
|
||||||
stroke: #ccc;
|
|
||||||
}
|
}
|
||||||
svg {
|
svg {
|
||||||
font: 10px sans-serif;
|
font: 10px sans-serif;
|
||||||
@@ -45,13 +52,12 @@ rect {
|
|||||||
.axis path,
|
.axis path,
|
||||||
.axis line {
|
.axis line {
|
||||||
fill: none;
|
fill: none;
|
||||||
stroke: #000;
|
stroke: #222;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
<h2>Le Programme ${DisplayYear}</h2>
|
<h2>Le Programme ${DisplayYear}</h2>
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<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, (Day, IdDay) in enumerate(Days):
|
% for Num, (Day, IdDay) in enumerate(Days):
|
||||||
@@ -68,7 +74,6 @@ rect {
|
|||||||
% endfor
|
% endfor
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="DivProg" style="border: 1px solid black;"></div>
|
<div id="DivProg" style="border: 1px solid black;"></div>
|
||||||
|
|
||||||
|
|||||||
@@ -5,20 +5,14 @@
|
|||||||
<script src="/js/jm2l.js"></script>
|
<script src="/js/jm2l.js"></script>
|
||||||
<script src="/vendor/ckeditor/ckeditor.js"></script>
|
<script src="/vendor/ckeditor/ckeditor.js"></script>
|
||||||
<script src="/vendor/select2/js/select2.js"></script>
|
<script src="/vendor/select2/js/select2.js"></script>
|
||||||
|
<script src="/vendor/datepicker/bootstrap-datepicker.js"></script>
|
||||||
<script src="//cdn.jsdelivr.net/webshim/1.15.7/polyfiller.js"></script>
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
webshim.setOptions('forms-ext', {
|
var checkout = $('#due_date').datepicker({
|
||||||
replaceUI: 'auto',
|
format: "dd/mm/yyyy"
|
||||||
types: 'date',
|
})
|
||||||
date: {
|
.on('changeDate', function(ev) {
|
||||||
startView: 2,
|
checkout.hide();
|
||||||
classes: 'hide-spinbtns',
|
}).data('datepicker');
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//start polyfilling
|
|
||||||
webshim.polyfill('forms-ext');
|
|
||||||
</script>
|
</script>
|
||||||
</%def>
|
</%def>
|
||||||
<%def name="cssAddOn()">
|
<%def name="cssAddOn()">
|
||||||
@@ -26,10 +20,12 @@
|
|||||||
<link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui.css">
|
<link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui.css">
|
||||||
<link rel="stylesheet" href="/css/jm2l.css" />
|
<link rel="stylesheet" href="/css/jm2l.css" />
|
||||||
<link rel="stylesheet" href="/vendor/select2/css/select2.css" type="text/css" media="screen" />
|
<link rel="stylesheet" href="/vendor/select2/css/select2.css" type="text/css" media="screen" />
|
||||||
|
<link rel="stylesheet" href="/vendor/datepicker/datepicker.css" type="text/css" media="screen" />
|
||||||
<!-- CSS adjustments for browsers with JavaScript disabled -->
|
<!-- CSS adjustments for browsers with JavaScript disabled -->
|
||||||
<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>
|
<a style="float:right;" href="${request.route_path('list_task', _anchor=area)}">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>
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ TabJs = {'select':[], 'desc':[]}
|
|||||||
FieldStyle = DicFormat[Field.name].get("FieldStyle")
|
FieldStyle = DicFormat[Field.name].get("FieldStyle")
|
||||||
Class = [False,"ckeditor"][ "ckeditor" in DicFormat[Field.name] ]
|
Class = [False,"ckeditor"][ "ckeditor" in DicFormat[Field.name] ]
|
||||||
%>
|
%>
|
||||||
% if Field.type == "DateField":
|
% if Field.type == "date":
|
||||||
${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_=Class, type = "date")}
|
${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_="datepicker" )}
|
||||||
% else:
|
% else:
|
||||||
${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_=Class)}
|
${Field(placeholder=PlaceHolder or False, style=FieldStyle, class_=Class)}
|
||||||
% endif
|
% endif
|
||||||
@@ -253,7 +253,7 @@ TabJs = {'select':[], 'desc':[]}
|
|||||||
## Wrapper pour les intervention utilisateur
|
## Wrapper pour les intervention utilisateur
|
||||||
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
<%def name="show_Interventions(ListEvent, HeadTitle=None, NotFoundTitle=None)"> \
|
<%def name="show_Interventions(ListEvent, HeadTitle=None, NotFoundTitle=None)"> \
|
||||||
<table width="100%" class="table table-striped table-bordered table-hover">
|
<table class="table table-striped table-bordered table-hover">
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width:6em;text-align:center;">Date</th>
|
<th style="width:6em;text-align:center;">Date</th>
|
||||||
% if HeadTitle:
|
% if HeadTitle:
|
||||||
@@ -521,3 +521,52 @@ TabJs = {'select':[], 'desc':[]}
|
|||||||
${Place.description | n}
|
${Place.description | n}
|
||||||
% endif
|
% endif
|
||||||
</%def> \
|
</%def> \
|
||||||
|
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
## Wrapper pour les sponsors
|
||||||
|
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
<%def name="participants(Year)"> \
|
||||||
|
|
||||||
|
<table class="ShowEntities table">
|
||||||
|
<thead>
|
||||||
|
<th colspan="3">Nos sponsors ${Year}</th>
|
||||||
|
</thead>
|
||||||
|
<tr>
|
||||||
|
<% num = -1 %>
|
||||||
|
% for entity in request.sponsors(Year):
|
||||||
|
% for thumb in entity.ThumbLinks:
|
||||||
|
<% num+=1 %>
|
||||||
|
% if (num%3==0):
|
||||||
|
</tr><tr>
|
||||||
|
% endif
|
||||||
|
<td>
|
||||||
|
<a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}">
|
||||||
|
<img src="${thumb}" alt="${entity.name}" />
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
% endfor
|
||||||
|
% endfor
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
<table class="ShowEntities table">
|
||||||
|
<thead>
|
||||||
|
<th colspan="3">Nos exposants ${Year}</th>
|
||||||
|
</thead>
|
||||||
|
<tr>
|
||||||
|
<% num = -1 %>
|
||||||
|
% for entity in request.exposants(Year):
|
||||||
|
% for thumb in entity.ThumbLinks:
|
||||||
|
<% num+=1 %>
|
||||||
|
% if (num%3==0):
|
||||||
|
</tr><tr>
|
||||||
|
% endif
|
||||||
|
<td>
|
||||||
|
<a href="/entity/${entity.get_entity_type.entity_type}/${entity.slug}">
|
||||||
|
<img src="${thumb}" alt="${entity.name}" />
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
% endfor
|
||||||
|
% endfor
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</%def> \
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row-fluid">
|
||||||
<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>
|
||||||
|
|||||||
+68
-10
@@ -32,11 +32,45 @@ DisplayYear = request.session.get('year', 2015)
|
|||||||
${helpers.uploader_js()}
|
${helpers.uploader_js()}
|
||||||
|
|
||||||
<div id="wrap">
|
<div id="wrap">
|
||||||
<div id="top" style="background: url( ${"/img/%s/headerbg.png" % DisplayYear} ) repeat-x scroll 0 top #ffffff;">
|
<div id="top">
|
||||||
|
% if DisplayYear!=2015:
|
||||||
|
## style="background: url( ${"/img/%s/headerbg.png" % DisplayYear} ) repeat-x scroll 0 top #ffffff;">
|
||||||
<div class="align-center">
|
<div class="align-center">
|
||||||
<div><img src="${"/img/%s/logo.png" % DisplayYear}" height="215" alt="JM2L 2015"/></div>
|
<div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
% else:
|
||||||
|
<!-- Carousel
|
||||||
|
================================================== -->
|
||||||
|
<div id="TitleCarousel" class="carousel slide" data-ride="carousel">
|
||||||
|
<!-- Indicators -->
|
||||||
|
<ol class="carousel-indicators">
|
||||||
|
<li data-target="#TitleCarousel" data-slide-to="0" class="active"></li>
|
||||||
|
<li data-target="#TitleCarousel" data-slide-to="1"></li>
|
||||||
|
<li data-target="#TitleCarousel" data-slide-to="2"></li>
|
||||||
|
</ol>
|
||||||
|
<div class="carousel-inner" role="listbox">
|
||||||
|
<div class="item active">
|
||||||
|
<div style="height:215px;background: url( ${"/img/%s/logo.png" % DisplayYear} ) no-repeat scroll center center transparent"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div style="height:215px;background: url( ${"/img/%s/logo.png" % 2013} ) no-repeat scroll center center transparent"></div>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div style="height:215px;background: url( ${"/img/%s/logo.png" % 2012} ) no-repeat scroll center center transparent"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a class="left Tcarousel-control" href="#TitleCarousel" role="button" data-slide="prev">
|
||||||
|
<img src="/img/chev-left.png">
|
||||||
|
</a>
|
||||||
|
<a class="right Tcarousel-control" href="#TitleCarousel" role="button" data-slide="next">
|
||||||
|
<img src="/img/chev-right.png">
|
||||||
|
</a>
|
||||||
|
</div><!-- /.carousel -->
|
||||||
|
% endif
|
||||||
|
|
||||||
|
</div>
|
||||||
<div id="middle">
|
<div id="middle">
|
||||||
<div class="navbar">
|
<div class="navbar">
|
||||||
<div class="navbar-inner">
|
<div class="navbar-inner">
|
||||||
@@ -73,6 +107,11 @@ ${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>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -96,19 +135,38 @@ ${helpers.uploader_js()}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="bottom">
|
<div id="bottom">
|
||||||
<div class="bottom">
|
<div class="container-fluid">
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span9">
|
||||||
|
<!--Body content-->
|
||||||
${next.body()}
|
${next.body()}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="span3">
|
||||||
|
<!--Sidebar content-->
|
||||||
|
${helpers.participants(DisplayYear)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## <br><br><br>
|
<footer class="footer">
|
||||||
## <div id="footer">
|
<div class="container">
|
||||||
## <div class="footer">CopyFriendly ~ JM2L 2005-2015 ~ +33 (0) 6 52 42 31 37
|
<h4>JM2L 2005-2015</h4>
|
||||||
## <br>Ni les représentant légaux de l'équipe de Linux-Azur,
|
<p>
|
||||||
## ni l'équipe de coordination des JM2L ne sont résponsable des
|
Concocté par <a href="http://www.linux-azur.org/">Linux Azur</a> ~
|
||||||
## informations publiés par les intervenants, dans le doute merci de nous contacter.
|
<a href="http://creativecommons.org/licenses/by-sa/4.0/">CopyFriendly</a> ~
|
||||||
## </div>
|
</p>
|
||||||
|
<p>
|
||||||
|
+33 (0) 6 52 42 31 37 ~ contact at jm2l.linux-azur.org
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Conception et construction en <a href="http://git.linux-azur.org/jm2l/">DIY</a> ~
|
||||||
|
Hébergé par <a href="http://www.heberg-24.com/"> Heberg24 </a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
<script src="/vendor/jquery.min.js"></script>
|
<script src="/vendor/jquery.min.js"></script>
|
||||||
<script src="/vendor/bootstrap.min.js"></script>
|
<script src="/vendor/bootstrap.min.js"></script>
|
||||||
<script src="/vendor/fileupload/js/jquery-uploader.min.js"></script>
|
<script src="/vendor/fileupload/js/jquery-uploader.min.js"></script>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
% for Num, Entity_Type in enumerate(entities.keys()):
|
% for Num, Entity_Type in enumerate(entities.keys()):
|
||||||
<div class="tab-pane fade ${["","active "][Num==0]} in" id="${Entity_Type}">
|
<div class="tab-pane fade ${["","active "][Num==0]} in" id="${Entity_Type}">
|
||||||
|
|
||||||
<table width="100%" class="table table-striped table-bordered table-hover">
|
<table class="table table-striped table-bordered table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width:7em;text-align:center;">Type</th>
|
<th style="width:7em;text-align:center;">Type</th>
|
||||||
|
|||||||
@@ -1,15 +1,36 @@
|
|||||||
## -*- coding: utf-8 -*-
|
## -*- coding: utf-8 -*-
|
||||||
<%def name="Bienvenue(request, User)">
|
<%def name="Bienvenue(request, User)">
|
||||||
<H4>JM2L</H4>
|
<H4>JM2L</H4>
|
||||||
|
Bonjour ${User.prenom},<br>
|
||||||
|
<br>
|
||||||
|
Vous venez de vous inscrire sur le site des JM2L et c'est une bonne idée :).<br>
|
||||||
|
<br>
|
||||||
|
Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant :<br>
|
||||||
|
<a href="${request.route_url('bymail', hash=User.my_hash)}">Votre lien !</a>
|
||||||
|
<br>
|
||||||
|
À partir de là vous avez la possibilité de :
|
||||||
|
<ul>
|
||||||
|
<li>inscrire votre stand pour la journée du 28 novembre</li>
|
||||||
|
<li>inscrire une conférence</li>
|
||||||
|
<li>inscrire un atelier</li>
|
||||||
|
<li>chercher/proposer du covoiturage</li>
|
||||||
|
<li>chercher/proposer un hébergement</li>
|
||||||
|
<li>vous faire rembourser vos frais</li>
|
||||||
|
<li>chercher proposer du matériel (câbles, etc)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Bonjour ${User.prenom}.<br>
|
Pour plus d'information vous pouvez vous connectez au site des JM2L : http://jm2l.linux-azur.org ou
|
||||||
|
nous envoyer un mail à «contact at jm2l.linux-azur.org ». Et si vous êtes vraiment perdu vous pouvez
|
||||||
Vous venez de valider votre inscription sur le site des JM2L.<br>
|
toujours nous téléphoner au +33 6 52 42 31 37.
|
||||||
|
|
||||||
Voici <a href="${request.route_url('bymail', hash=User.my_hash)}">votre lien</a> pour vous connecter.<br>
|
|
||||||
|
|
||||||
Toute l'équipe vous souhaite une agréable visite !<br>
|
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
Nous vous attendons avec impatience le 28 novembre à Sophia Antipolis pour fêter le libre et partager
|
||||||
|
de la connaissance, de la bonne humeur et du soleil :)
|
||||||
|
</p>
|
||||||
|
<br>
|
||||||
|
L'équipe des <b>JM2L</b>
|
||||||
|
<br>
|
||||||
</%def> \
|
</%def> \
|
||||||
% if action=='Welcome':
|
% if action=='Welcome':
|
||||||
${self.Bienvenue(request, User)}
|
${self.Bienvenue(request, User)}
|
||||||
|
|||||||
@@ -1,14 +1,29 @@
|
|||||||
## -*- coding: utf-8 -*-
|
## -*- coding: utf-8 -*-
|
||||||
<%def name="Bienvenue(request, User)">
|
<%def name="Bienvenue(request, User)">
|
||||||
|
|
||||||
Bonjour ${User.prenom}.
|
Bonjour ${User.prenom},
|
||||||
|
|
||||||
Vous venez de valider votre inscription sur le site des JM2L.
|
Vous venez de vous inscrire sur le site des JM2L et c'est une bonne idée :)
|
||||||
|
|
||||||
Voici votre le lien pour vous connecter à votre profil:
|
Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant :
|
||||||
${request.route_url('bymail', hash=User.my_hash)}
|
${request.route_url('bymail', hash=User.my_hash)}
|
||||||
|
|
||||||
Toute l'équipe vous souhaite une très agréable visite !
|
À partir de là vous avez la possibilité de :
|
||||||
|
|
||||||
|
- inscrire votre stand pour la journée du 28 novembre
|
||||||
|
- inscrire une conférence
|
||||||
|
- inscrire un atelier
|
||||||
|
- chercher/proposer du covoiturage
|
||||||
|
- chercher/proposer un hébergement
|
||||||
|
- vous faire rembourser vos frais
|
||||||
|
- chercher proposer du matériel (câbles, etc)
|
||||||
|
|
||||||
|
Pour plus d'information vous pouvez vous connectez au site des JM2L : http://jm2l.linux-azur.org ou nous envoyer un mail à « contact at jm2l.linux-azur.org ». Et si vous êtes vraiment perdu vous pouvez toujours nous téléphoner au +33 6 52 42 31 37.
|
||||||
|
|
||||||
|
Nous vous attendons avec impatience le 28 novembre à Sophia Antipolis pour fêter le libre et partager de la connaissance, de la bonne humeur et du soleil :)
|
||||||
|
|
||||||
|
L'équipe des JM2L
|
||||||
|
|
||||||
</%def> \
|
</%def> \
|
||||||
% if action=='Welcome':
|
% if action=='Welcome':
|
||||||
${self.Bienvenue(request, User)}
|
${self.Bienvenue(request, User)}
|
||||||
|
|||||||
@@ -211,6 +211,30 @@ class MediaUpload(MediaPath):
|
|||||||
return self.thumbnailurl( os.path.basename(TargetFileName+".jpg") )
|
return self.thumbnailurl( os.path.basename(TargetFileName+".jpg") )
|
||||||
return self.ExtMimeIcon('application/pdf')
|
return self.ExtMimeIcon('application/pdf')
|
||||||
|
|
||||||
|
def svgthumbnail(self, filename):
|
||||||
|
TargetFileName = self.thumbnailpath(filename)
|
||||||
|
Command = ["convert","./%s[0]" % self.mediapath(filename),"./%s_.jpg" % TargetFileName]
|
||||||
|
Result = subprocess.call(Command)
|
||||||
|
if Result==0:
|
||||||
|
image = Image.open( TargetFileName+"_.jpg" )
|
||||||
|
pdf_indicator = Image.open( "jm2l/static/img/svg-icon.png" )
|
||||||
|
image.thumbnail((THUMBNAIL_SIZE, THUMBNAIL_SIZE), Image.ANTIALIAS)
|
||||||
|
timage = Image.new('RGBA', (THUMBNAIL_SIZE, THUMBNAIL_SIZE), (255, 255, 255, 0))
|
||||||
|
# Add thumbnail
|
||||||
|
timage.paste(
|
||||||
|
image,
|
||||||
|
((THUMBNAIL_SIZE - image.size[0]) / 2, (THUMBNAIL_SIZE - image.size[1]) / 2))
|
||||||
|
# Stamp with PDF file type
|
||||||
|
timage.paste(
|
||||||
|
pdf_indicator,
|
||||||
|
(timage.size[0]-30, timage.size[1]-30),
|
||||||
|
pdf_indicator,
|
||||||
|
)
|
||||||
|
timage.convert('RGB').save( TargetFileName+".jpg", 'JPEG')
|
||||||
|
os.unlink(TargetFileName+"_.jpg")
|
||||||
|
return self.thumbnailurl( os.path.basename(TargetFileName+".jpg") )
|
||||||
|
return self.ExtMimeIcon('image/svg+xml')
|
||||||
|
|
||||||
def docthumbnail(self, filename):
|
def docthumbnail(self, filename):
|
||||||
TargetFileName = self.thumbnailpath(filename)
|
TargetFileName = self.thumbnailpath(filename)
|
||||||
# unoconv need a libre office server to be up
|
# unoconv need a libre office server to be up
|
||||||
@@ -349,6 +373,8 @@ class MediaUpload(MediaPath):
|
|||||||
result['thumbnailUrl'] = self.createthumbnail(result['name'])
|
result['thumbnailUrl'] = self.createthumbnail(result['name'])
|
||||||
elif result['type']=='application/pdf':
|
elif result['type']=='application/pdf':
|
||||||
result['thumbnailUrl'] = self.pdfthumbnail(result['name'])
|
result['thumbnailUrl'] = self.pdfthumbnail(result['name'])
|
||||||
|
elif result['type']=='image/svg+xml':
|
||||||
|
result['thumbnailUrl'] = self.svgthumbnail(result['name'])
|
||||||
elif result['type'].startswith('application/vnd'):
|
elif result['type'].startswith('application/vnd'):
|
||||||
result['thumbnailUrl'] = self.docthumbnail(result['name'])
|
result['thumbnailUrl'] = self.docthumbnail(result['name'])
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user