Fix mail from Damien remarks Added room pictures Added tiers deletion Added Redirect to login when not loggedmaster
| @@ -67,6 +67,7 @@ def main(global_config, **settings): | |||||
| config.add_route('handle_salle', '/Salles{sep:/*}{salle_id:(\d+)?}') | config.add_route('handle_salle', '/Salles{sep:/*}{salle_id:(\d+)?}') | ||||
| config.add_route('handle_salle_phy', '/PhySalles{sep:/*}{salle_id:(\d+)?}') | config.add_route('handle_salle_phy', '/PhySalles{sep:/*}{salle_id:(\d+)?}') | ||||
| config.add_route('action_salle', '/Salles/{action:(\w+)}/{salle_id:(\d+)}') | config.add_route('action_salle', '/Salles/{action:(\w+)}/{salle_id:(\d+)}') | ||||
| config.add_route('pict_salle', '/salle_picture/{salle_id:(\d+)}') | |||||
| # HTML Routes - Public | # HTML Routes - Public | ||||
| config.add_route('home', '/{year:(\d+/)?}') | config.add_route('home', '/{year:(\d+/)?}') | ||||
| @@ -86,10 +87,10 @@ def main(global_config, **settings): | |||||
| ## Entities | ## Entities | ||||
| config.add_route('entities', '/entities') #{sep:/*}{Nature:\w+?}') | config.add_route('entities', '/entities') #{sep:/*}{Nature:\w+?}') | ||||
| config.add_route('add_entity', '/entity') | |||||
| config.add_route('add_entity', '/entity') | |||||
| config.add_route('delete_entity', '/entity/{entity_id:(\d+)}/delete') | |||||
| config.add_route('show_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)?}') | config.add_route('show_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)?}') | ||||
| config.add_route('edit_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)}/edit') | config.add_route('edit_entity', '/entity/{tiers_type:(\w+)}/{entity_id:([\w-]+)}/edit') | ||||
| config.add_route('edit_entity_cat', '/categorie/entity') | config.add_route('edit_entity_cat', '/categorie/entity') | ||||
| ## Users | ## Users | ||||
| @@ -260,8 +260,8 @@ class Tiers(Base): | |||||
| roles = relationship('Role_Tiers', backref="roles_tiers") #secondary='role_tiers_link' ) | roles = relationship('Role_Tiers', backref="roles_tiers") #secondary='role_tiers_link' ) | ||||
| @classmethod | @classmethod | ||||
| def by_id(cls, id): | |||||
| return DBSession.query(cls).filter(cls.uid == id).first() | |||||
| def by_id(cls, uid): | |||||
| return DBSession.query(cls).filter(cls.uid == uid).first() | |||||
| @classmethod | @classmethod | ||||
| def by_slug(cls, slug): | def by_slug(cls, slug): | ||||
| @@ -348,6 +348,11 @@ class SallePhy(Base): | |||||
| @classmethod | @classmethod | ||||
| def by_id(cls, uid): | def by_id(cls, uid): | ||||
| return DBSession.query(cls).filter(cls.uid == uid).first() | return DBSession.query(cls).filter(cls.uid == uid).first() | ||||
| @property | |||||
| def PhotosLinks(self): | |||||
| from .upload import MediaPath | |||||
| return MediaPath().get_list('salle', self.uid, 'Image') | |||||
| class Salles(Base): | class Salles(Base): | ||||
| __tablename__ = 'salle' | __tablename__ = 'salle' | ||||
| @@ -205,8 +205,8 @@ a { | |||||
| border: 1px solid #d4d4d4; | border: 1px solid #d4d4d4; | ||||
| } | } | ||||
| .ShowEntities td img { | .ShowEntities td img { | ||||
| width: 100%; | |||||
| height: 100%; | |||||
| width: 5em; | |||||
| height: 5em; | |||||
| } | } | ||||
| .ShowEntities td:hover { | .ShowEntities td:hover { | ||||
| @@ -0,0 +1,2 @@ | |||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | |||||
| ${helpers.show_salles(Salles, IdSalle)} | |||||
| @@ -20,6 +20,9 @@ | |||||
| <div class="row-fluid"> | <div class="row-fluid"> | ||||
| <div class="span10 offset1"> | <div class="span10 offset1"> | ||||
| <div id="SalleCarousel"> | |||||
| ${helpers.show_salles( Salles, form.salle_uid.data or form.salle_uid.choices[0][0] )} | |||||
| </div> | |||||
| % if 'uid' in form._fields: | % if 'uid' in form._fields: | ||||
| <div class="borderboxtime"> | <div class="borderboxtime"> | ||||
| @@ -31,6 +34,7 @@ | |||||
| </div> | </div> | ||||
| %endif | %endif | ||||
| <h3 style="line-height:30px;" class="lowshadow">${form.event_type.data}</h3> | <h3 style="line-height:30px;" class="lowshadow">${form.event_type.data}</h3> | ||||
| % if 'uid' in form._fields: | % if 'uid' in form._fields: | ||||
| <div class="borderbox"> | <div class="borderbox"> | ||||
| Intrevenants programmés: | Intrevenants programmés: | ||||
| @@ -186,6 +190,20 @@ DicForm = { | |||||
| } | } | ||||
| } | } | ||||
| }); | }); | ||||
| $(document.body).on("change","#salle_uid",function(){ | |||||
| $.ajax({ | |||||
| url:'/salle_picture/' + this.value, | |||||
| success:function(result, status, jqXHR){ | |||||
| var pictureresult = $('<div />').append(result).find('#MyPictureCarousel').html(); | |||||
| var picturename = $('<div />').append(result).find('#CarName').html(); | |||||
| $('#MyPictureCarousel').html(pictureresult); | |||||
| $('#CarName').html(picturename); | |||||
| }, | |||||
| error:function(result, error){ | |||||
| alert(error); | |||||
| }, | |||||
| }); | |||||
| }); | |||||
| }); | }); | ||||
| </script> | </script> | ||||
| </%def> | </%def> | ||||
| @@ -12,7 +12,11 @@ | |||||
| <div class="row-fluid"> | <div class="row-fluid"> | ||||
| <div class="span10 offset1"> | <div class="span10 offset1"> | ||||
| % if 'uid' in form._fields.keys(): | |||||
| <a class="btn btn-danger btn-mini pull-right" href="${request.route_path('delete_entity', action='delete_entity', entity_id=form.uid.data)}"> | |||||
| <i class="icon-remove icon-white"></i> Supprimer cette entitée | |||||
| </a> | |||||
| %endif | |||||
| <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"> | ||||
| @@ -196,12 +200,17 @@ DicForm = { | |||||
| </fieldset> | </fieldset> | ||||
| % endif | % endif | ||||
| <br> | |||||
| <center> | |||||
| <button type="submit" class="btn btn-large btn-primary" /> | |||||
| % if 'uid' in form._fields: | % if 'uid' in form._fields: | ||||
| <button class="btn btn-primary" type="submit">Enregistrer</button> | |||||
| <i class="icon-ok icon-white"></i> Mettre à jour | |||||
| % else: | % else: | ||||
| <button class="btn btn-primary" type="submit">Proposer</button> | |||||
| <i class="icon-ok icon-white"></i> Proposer | |||||
| </button> | |||||
| % endif | % endif | ||||
| </center> | |||||
| </form> | </form> | ||||
| % if 'uid' in form._fields: | % if 'uid' in form._fields: | ||||
| % if request.user: | % if request.user: | ||||
| @@ -506,6 +506,47 @@ TabJs = {'select':[], 'desc':[]} | |||||
| </div> | </div> | ||||
| </%def> \ | </%def> \ | ||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||
| <%def name="show_salles(Salles, IdSalle)"> \ | |||||
| <div class="profile-icon pull-right" style="padding: 0 15px;"> | |||||
| <% | |||||
| if not IdSalle: | |||||
| return "" | |||||
| SallePhy = Salles.by_id(IdSalle).phy | |||||
| if not SallePhy: | |||||
| return "" | |||||
| photos = SallePhy.PhotosLinks | |||||
| %> | |||||
| <div id="CarName" style="text-align: center;line-height:20px;"><strong>Salle</strong>: ${Salles.by_id(IdSalle).name}</div> | |||||
| <div id="MyPictureCarousel" class="carousel slide"> | |||||
| % if len(photos)>1: | |||||
| <!-- Carousel nav --> | |||||
| <a class="Ucarousel-control left" href="#MyPictureCarousel" data-slide="prev">‹</a> | |||||
| <a class="Ucarousel-control right" href="#MyPictureCarousel" data-slide="next">›</a> | |||||
| % endif | |||||
| <!-- Carousel items --> | |||||
| <div class="carousel-inner"> | |||||
| % if len(photos): | |||||
| % for num, link in enumerate(photos): | |||||
| <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 ${SallePhy.name}" /> | |||||
| </div> | |||||
| </div> | |||||
| % endfor | |||||
| % else: | |||||
| <div class="active item" id="UserPic0"> | |||||
| <div style="margin:auto;width:170px;"> | |||||
| <center> | |||||
| <img src="/img/no-image.jpg" class="img-polaroid" alt="Photo ${SallePhy.name}" style="max-height:130px;" /> | |||||
| <center> | |||||
| </div> | |||||
| </div> | |||||
| % endif | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </%def> \ | |||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |||||
| ## Wrapper pour les échanges utilisateurs | ## Wrapper pour les échanges utilisateurs | ||||
| ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||
| <%def name="show_exchange(Exchange, Asker, Provider)"> \ | <%def name="show_exchange(Exchange, Asker, Provider)"> \ | ||||
| @@ -125,6 +125,7 @@ ${helpers.uploader_js()} | |||||
| % if request.user.Staff: | % if request.user.Staff: | ||||
| <li><a href="/Staff">Partie Staff</a></li> | <li><a href="/Staff">Partie Staff</a></li> | ||||
| <li><a href="/ListSalles">Gérer les salles</a></li> | <li><a href="/ListSalles">Gérer les salles</a></li> | ||||
| <li><a href="/entities">Gérer les entités</a></li> | |||||
| % endif | % endif | ||||
| <li><a href="/sign/out">Me déconnecter</a></li> | <li><a href="/sign/out">Me déconnecter</a></li> | ||||
| % else: | % else: | ||||
| @@ -5,24 +5,24 @@ Bonjour ${User.prenom},<br> | |||||
| <br> | <br> | ||||
| Vous venez de vous inscrire sur le site des JM2L et c'est une bonne idée :).<br> | Vous venez de vous inscrire sur le site des JM2L et c'est une bonne idée :).<br> | ||||
| <br> | <br> | ||||
| Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant :<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> | <a href="${request.route_url('bymail', hash=User.my_hash)}">Votre lien !</a> | ||||
| <br> | <br> | ||||
| À partir de là vous avez la possibilité de : | |||||
| À partir de là vous avez la possibilité de : | |||||
| <ul> | <ul> | ||||
| <li>inscrire votre stand pour la journée du 28 novembre</li> | |||||
| <li>inscrire une conférence</li> | |||||
| <li>inscrire votre stand pour la journée du 28 novembre</li> | |||||
| <li>inscrire une conférence</li> | |||||
| <li>inscrire un atelier</li> | <li>inscrire un atelier</li> | ||||
| <li>chercher/proposer du covoiturage</li> | <li>chercher/proposer du covoiturage</li> | ||||
| <li>chercher/proposer un hébergement</li> | |||||
| <li>chercher/proposer un hébergement</li> | |||||
| <li>vous faire rembourser vos frais</li> | <li>vous faire rembourser vos frais</li> | ||||
| <li>chercher proposer du matériel (câbles, etc)</li> | |||||
| <li>chercher proposer du matériel (câbles, etc)</li> | |||||
| </ul> | </ul> | ||||
| <p> | <p> | ||||
| Pour plus d'information vous pouvez vous connectez au site des JM2L : http://jm2l.linux-azur.org ou | 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 | 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. | |||||
| toujours nous téléphoner au +33 6 52 42 31 37. | |||||
| </p> | </p> | ||||
| <p> | <p> | ||||
| Nous vous attendons avec impatience le 28 novembre à Sophia Antipolis pour fêter le libre et partager | Nous vous attendons avec impatience le 28 novembre à Sophia Antipolis pour fêter le libre et partager | ||||
| @@ -38,29 +38,27 @@ Bonjour ${User.prenom},<br> | |||||
| <br> | <br> | ||||
| Vous venez de demander le renvoi de vos identifiants sur le site des JM2L.<br> | Vous venez de demander le renvoi de vos identifiants sur le site des JM2L.<br> | ||||
| <br> | <br> | ||||
| Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant :<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> | <a href="${request.route_url('bymail', hash=User.my_hash)}">Votre lien !</a> | ||||
| <br> | <br> | ||||
| N'hésitez pas à l'ajouter à vos liens favoris. | |||||
| N'hésitez pas à l'ajouter à vos liens favoris. | |||||
| <br> | <br> | ||||
| Vos identifiants de connection sont les suivants: | Vos identifiants de connection sont les suivants: | ||||
| <br> | <br> | ||||
| <b>Login</b>: ${User.slug} | |||||
| <br> | |||||
| <b>Password</b>: ${User.password} | |||||
| <br> | |||||
| Une fois connecté vous pouvez changer votre mot de passe sur votre fiche. | |||||
| <b>Login</b>: ${User.slug}<br> | |||||
| <b>Password</b>: ${User.password}<br> | |||||
| Une fois connecté vous pouvez changer votre mot de passe sur votre fiche. | |||||
| <br> | <br> | ||||
| <p> | <p> | ||||
| Pour plus d'information vous pouvez nous envoyer un mail à «contact at jm2l.linux-azur.org ». Et si vous êtes vraiment perdu vous pouvez | Pour plus d'information vous pouvez 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. | |||||
| toujours nous téléphoner au +33 6 52 42 31 37. | |||||
| </p> | </p> | ||||
| <p> | <p> | ||||
| Nous vous attendons avec impatience le 28 novembre 2015 à Sophia Antipolis pour fêter le libre et partager | Nous vous attendons avec impatience le 28 novembre 2015 à Sophia Antipolis pour fêter le libre et partager | ||||
| de la connaissance, de la bonne humeur et du soleil :) | de la connaissance, de la bonne humeur et du soleil :) | ||||
| </p> | </p> | ||||
| <br> | <br> | ||||
| L'équipe des <b>JM2L</b> | |||||
| L'équipe des <b>JM2L</b> | |||||
| <br> | <br> | ||||
| </%def> \ | </%def> \ | ||||
| % if action=='Welcome': | % if action=='Welcome': | ||||
| @@ -8,14 +8,16 @@ | |||||
| </%def> | </%def> | ||||
| <div class="row-fluid"> | <div class="row-fluid"> | ||||
| <div class="span10 offset1"> | <div class="span10 offset1"> | ||||
| <div id="SalleCarousel"> | |||||
| ${helpers.show_salles( Salles, event.Salle.salle_id )} | |||||
| </div> | |||||
| <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')} - | ||||
| ${event.start_time.strftime('%H:%M')} à ${event.end_time.strftime('%H:%M')} | ${event.start_time.strftime('%H:%M')} à ${event.end_time.strftime('%H:%M')} | ||||
| %if event.Salle: | |||||
| - <strong>Salle</strong>: ${event.Salle.name} | |||||
| %endif | |||||
| ##%if event.Salle: | |||||
| ## - <strong>Salle</strong>: ${event.Salle.name} | |||||
| ##%endif | |||||
| </div> | </div> | ||||
| ##%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> - | ||||
| @@ -26,7 +28,6 @@ ${event.start_time.strftime('%H:%M')} à ${event.end_time.strftime('%H:%M')} | |||||
| <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> | ||||
| % endif | % endif | ||||
| <h3 style="line-height:30px;">${event.name}</h3> | <h3 style="line-height:30px;">${event.name}</h3> | ||||
| % if event.description : | % if event.description : | ||||
| <div class="borderbox"> | <div class="borderbox"> | ||||
| ${event.description | n} | ${event.description | n} | ||||
| @@ -17,7 +17,12 @@ ${The_entity_type.entity_subtype} | |||||
| ## <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 and (request.user.Staff or request.user in entity.members): | % if request.user and (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.slug_entity_type}/${entity.slug}/edit">Editer</a> | |||||
| % endif | |||||
| % if request.user and (request.user.Staff or request.user in entity.members): | |||||
| <a class="btn btn-danger btn-mini pull-right" href="${request.route_path('delete_entity', action='delete_entity', entity_id=entity.uid)}"> | |||||
| <i class="icon-remove icon-white"></i> Supprimer cette entitée | |||||
| </a> | |||||
| % endif | % endif | ||||
| <div clear='both'></div> | <div clear='both'></div> | ||||
| <div> | <div> | ||||
| @@ -2,6 +2,7 @@ | |||||
| from pyramid.view import view_config, view_defaults | from pyramid.view import view_config, view_defaults | ||||
| from pyramid.response import Response | from pyramid.response import Response | ||||
| from pyramid.exceptions import NotFound | from pyramid.exceptions import NotFound | ||||
| from pyramid.httpexceptions import HTTPNotFound | |||||
| from pyramid.request import Request | from pyramid.request import Request | ||||
| from PIL import Image | from PIL import Image | ||||
| import re, os, shutil | import re, os, shutil | ||||
| @@ -13,6 +14,7 @@ import cStringIO as StringIO | |||||
| # Database access imports | # Database access imports | ||||
| from .models import User, Place, Tiers, Event, SallePhy | from .models import User, Place, Tiers, Event, SallePhy | ||||
| CurrentYear = 2015 | |||||
| MIN_FILE_SIZE = 1 # bytes | MIN_FILE_SIZE = 1 # bytes | ||||
| MAX_FILE_SIZE = 500000000 # bytes | MAX_FILE_SIZE = 500000000 # bytes | ||||
| IMAGE_TYPES = re.compile('image/(gif|p?jpeg|(x-)?png)') | IMAGE_TYPES = re.compile('image/(gif|p?jpeg|(x-)?png)') | ||||
| @@ -103,15 +105,19 @@ class MediaPath(): | |||||
| p = IMAGEPATH + [ media_table ] + [ linked_id ] | p = IMAGEPATH + [ media_table ] + [ linked_id ] | ||||
| 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(CurrentYear), media_table ] + [ linked_id ] | |||||
| elif media_table=='poles': | elif media_table=='poles': | ||||
| # Use Current Year | # Use Current Year | ||||
| p = IMAGEPATH + [ str(2015), media_table ] + [ linked_id ] | |||||
| p = IMAGEPATH + [ str(CurrentYear), 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 ] | ||||
| elif media_table=='users': | elif media_table=='users': | ||||
| slug = User.by_id(linked_id).slug | |||||
| user = User.by_id(linked_id) | |||||
| if not user: | |||||
| raise HTTPNotFound() | |||||
| else: | |||||
| slug = user.slug | |||||
| p = IMAGEPATH + ['users'] + [ slug ] | p = IMAGEPATH + ['users'] + [ slug ] | ||||
| elif media_table=='event': | elif media_table=='event': | ||||
| ev = Event.by_id(linked_id) | ev = Event.by_id(linked_id) | ||||
| @@ -911,6 +911,11 @@ def change_year(request): | |||||
| def pict_user(request): | def pict_user(request): | ||||
| return {"uprofil":request.user} | return {"uprofil":request.user} | ||||
| @view_config(route_name='pict_salle', renderer="jm2l:templates/Salles/pict_salle.mako") | |||||
| def pict_salle(request): | |||||
| salle_id = int(request.matchdict.get('salle_id', -1)) | |||||
| return {"Salles":Salles, "IdSalle":salle_id} | |||||
| @view_config(route_name='event', renderer="jm2l:templates/view_event.mako") | @view_config(route_name='event', renderer="jm2l:templates/view_event.mako") | ||||
| def show_event(request): | def show_event(request): | ||||
| year = int(request.matchdict.get('year', -1)) | year = int(request.matchdict.get('year', -1)) | ||||
| @@ -924,7 +929,7 @@ def show_event(request): | |||||
| if TheEvent is None: | if TheEvent is None: | ||||
| raise HTTPNotFound() | raise HTTPNotFound() | ||||
| MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', | MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', | ||||
| 'event':TheEvent, 'logged_in':request.authenticated_userid } | |||||
| 'event':TheEvent, 'logged_in':request.authenticated_userid, "Salles":Salles } | |||||
| return MainTab | return MainTab | ||||
| @view_config(route_name='link_event_user') | @view_config(route_name='link_event_user') | ||||
| @@ -1121,6 +1126,7 @@ def edit_event(request): | |||||
| MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', | MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', | ||||
| 'event':TheEvent, 'form':form, 'formAdd':formAdd, 'formAddT':formAddT, | 'event':TheEvent, 'form':form, 'formAdd':formAdd, 'formAddT':formAddT, | ||||
| 'Salles':Salles, | |||||
| 'logged_in':request.authenticated_userid } | 'logged_in':request.authenticated_userid } | ||||
| return MainTab | return MainTab | ||||
| @@ -1154,6 +1160,32 @@ def show_tiers(request): | |||||
| 'entity':TheTiers, 'logged_in':request.authenticated_userid } | 'entity':TheTiers, 'logged_in':request.authenticated_userid } | ||||
| return MainTab | return MainTab | ||||
| @view_config(route_name='delete_entity') | |||||
| def delete_tiers(request): | |||||
| entity_id = request.matchdict.get('entity_id', None) | |||||
| if entity_id: | |||||
| if entity_id.isdigit(): | |||||
| TheTiers = Tiers.by_id(int(entity_id)) | |||||
| if TheTiers is None: | |||||
| raise HTTPNotFound() | |||||
| else: | |||||
| TheTiers = Tiers.by_slug(entity_id) | |||||
| if TheTiers is None: | |||||
| raise HTTPNotFound() | |||||
| if len(TheTiers.membership)!=0: | |||||
| request.session.flash(('error', u"Vous devez supprimer tous les membres liés avant la suppression d'une entitée.")) | |||||
| return HTTPFound(location=request.route_url('show_entity', entity_id=TheTiers.slug, tiers_type=TheTiers.get_entity_type.slug_entity_type)) | |||||
| if len(TheTiers.membership)!=0: | |||||
| request.session.flash(('error', u"Vous devez supprimer tous les roles liés avant la suppression d'une entitée.")) | |||||
| return HTTPFound(location=request.route_url('show_entity', entity_id=TheTiers.slug, tiers_type=TheTiers.get_entity_type.slug_entity_type)) | |||||
| DBSession.delete(TheTiers) | |||||
| request.session.flash(('info', u"L'entitée a bien été supprimée")) | |||||
| return HTTPFound(location=request.route_url('entities')) | |||||
| else: | |||||
| raise HTTPNotFound() | |||||
| @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") | @view_config(route_name='edit_entity', renderer="jm2l:templates/edit_tiers.mako") | ||||
| def edit_tiers(request): | def edit_tiers(request): | ||||
| @@ -1241,7 +1273,9 @@ def edit_tiers(request): | |||||
| return HTTPFound(location=request.route_url('edit_entity', sep='/', | return HTTPFound(location=request.route_url('edit_entity', sep='/', | ||||
| entity_id=str(TheTiers.slug), tiers_type=TheTiers.get_entity_type.entity_type)) | entity_id=str(TheTiers.slug), tiers_type=TheTiers.get_entity_type.entity_type)) | ||||
| DBSession.merge(TheTiers) | DBSession.merge(TheTiers) | ||||
| return HTTPFound(location=request.route_url('entities')) | |||||
| return HTTPFound(location=request.route_url('show_entity', entity_id=TheTiers.slug, | |||||
| tiers_type=TheTiers.get_entity_type.slug_entity_type)) | |||||
| MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', | MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', | ||||
| 'form':form, 'DBUser':User, 'UserOptions':UserOptions, | 'form':form, 'DBUser':User, 'UserOptions':UserOptions, | ||||
| 'logged_in':request.authenticated_userid } | 'logged_in':request.authenticated_userid } | ||||
| @@ -1355,10 +1389,13 @@ def link_role_entity(request): | |||||
| @forbidden_view_config() | @forbidden_view_config() | ||||
| def forbidden(reason, request): | def forbidden(reason, request): | ||||
| #return Response('forbidden') | |||||
| request.response.status = 403 | |||||
| return render_to_response('jm2l:templates/Errors/403.mako', { "reason":reason }, | |||||
| request=request) | |||||
| if 'ident' in reason.detail: | |||||
| request.session.flash(('info', reason.detail)) | |||||
| return HTTPFound(location='/sign/login' ) | |||||
| else: | |||||
| request.response.status = 403 | |||||
| return render_to_response('jm2l:templates/Errors/403.mako', { "reason":reason }, | |||||
| request=request) | |||||
| @notfound_view_config() | @notfound_view_config() | ||||
| def notfound(reason, request): | def notfound(reason, request): | ||||