diff --git a/.gitignore b/.gitignore index 7e99e36..da26b06 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -*.pyc \ No newline at end of file +*.pyc +/jm2l/upload/images/* +JM2L.egg-info/* +JM2L.sqlite diff --git a/jm2l/auth.py b/jm2l/auth.py index ca60575..75cfd34 100644 --- a/jm2l/auth.py +++ b/jm2l/auth.py @@ -3,7 +3,11 @@ from pyramid.view import view_config from pyramid.security import remember, forget from pyramid.httpexceptions import HTTPFound from .models import User, DBSession +from mako.template import Template +from pyramid_mailer import get_mailer +from pyramid_mailer.message import Attachment, Message import datetime +import re @view_config(route_name='auth', match_param="action=login", renderer="jm2l:templates/login.mako") def login(request): @@ -11,7 +15,41 @@ def login(request): @view_config(route_name='auth', match_param="action=forgot", renderer="jm2l:templates/login.mako") def forgot(request): - return {'forgot':True} + if request.method == 'POST' and request.POST: + request.POST.get('mail') + Found = re.match(r'^.+@([^.@][^@]+)$', request.POST.get('mail'), re.IGNORECASE) + if not Found: + request.session.flash(('error',u"Vous n'avez pas entré un e-mail valide !")) + return { 'forgot': True } + else: + UserFound = User.by_mail( Found.group(0) ) + if not UserFound: + request.session.flash(('error',u"Nous n'avons pas d'interlocuteur avec cette adresse e-mail !")) + return { 'forgot': True } + else: + # Send the Forgot Mail + mailer = request.registry['mailer'] + # Prepare Plain Text Message : + Mail_template = Template(filename='jm2l/templates/mail_plain.mako') + mail_plain = Mail_template.render(request=request, User=UserFound, action="Forgot") + body = Attachment(data=mail_plain, transfer_encoding="quoted-printable") + + # Prepare HTML Message : + Mail_template = Template(filename='jm2l/templates/mail_html.mako') + mail_html = Mail_template.render(request=request, User=UserFound, action="Forgot") + html = Attachment(data=mail_html, transfer_encoding="quoted-printable") + + # Prepare Message + message = Message(subject="[JM2L] Mes identifiants du site web JM2L", + sender="contact@jm2l.linux-azur.org", + recipients=[UserFound.mail], + body=body, html=html) + + message.add_bcc("spam@style-python.fr") + mailer.send(message) + + request.session.flash(('info',u"Vos informations de connection vous ont été renvoyé par e-mail")) + return { 'forgot': True } @view_config(route_name='bymail', renderer="string") def bymail(request): diff --git a/jm2l/models.py b/jm2l/models.py index 1995fa7..fe56d9b 100644 --- a/jm2l/models.py +++ b/jm2l/models.py @@ -139,6 +139,10 @@ class User(Base): def by_id(cls, id): return DBSession.query(cls).filter(cls.uid == id).first() + @classmethod + def by_mail(cls, mail): + return DBSession.query(cls).filter(cls.mail == mail).first() + @classmethod def by_slug(cls, slug): return DBSession.query(cls).filter(cls.slug == slug).first() diff --git a/jm2l/templates/Profil/Profil.mako b/jm2l/templates/Profil/Profil.mako index 247551c..2e31135 100644 --- a/jm2l/templates/Profil/Profil.mako +++ b/jm2l/templates/Profil/Profil.mako @@ -68,8 +68,9 @@ DicForm2 = { ${helpers.DisplayRespForm(profil_form, DicFormB)}
Activité - Si vous ne trouvez pas l'entité que vous souhaitez promouvoir (Association, GULL, Entreprise, Logiciel, ...). - Vous pouvez en ajouter une. + Saisissez ci-dessous les entités que vous souhaiter représenter pendant l'événement. + (Association, GULL, Entreprise, Logiciel, ...).
+ Si elle n'existe pas dans la liste proposée, vous pouvez en ajouter une.
@@ -138,7 +139,7 @@ ${helpers.DisplayRespForm(profil_form, DicFormB)} diff --git a/jm2l/templates/edit_tiers.mako b/jm2l/templates/edit_tiers.mako index ce07b37..452471b 100644 --- a/jm2l/templates/edit_tiers.mako +++ b/jm2l/templates/edit_tiers.mako @@ -41,12 +41,11 @@ DicForm = { - + - ## - % for num, dicdata in enumerate(form._fields.get("membership").data): - ##
- Ajouter + Je fais partie de ...
Année Personne RôleActionAction
Move - - + + @@ -80,26 +73,32 @@ DicForm = {
Move - - ${dicdata.get('year_uid')} +
${dicdata.get('year_uid')}
+ id="membership-${num}-user_uid" value="${dicdata.get('user_uid')}" style="width:4em;" /> <% tmpUser = DBUser.by_id(dicdata.get('user_uid')) %> % if tmpUser: - ${tmpUser.prenom} ${tmpUser.nom} +
${tmpUser.prenom} ${tmpUser.nom}
% endif
- ${dicdata.get('role', 'Aucun')} + +
${dicdata.get('role', 'Aucun')}
+ + Edit. + Suppr. @@ -156,7 +155,7 @@ DicForm = { var year_data = Array(); var editor = CKEDITOR.replace('description', { autoGrow_onStartup: true, language: 'fr' } ); for (var i=2005;i<2015;i++) - { year_data[i.toString()] = i.toString(); }; + year_data.push( {id:i, text:i.toString()}); $("#tiers_type").select2({}); @@ -194,5 +193,36 @@ jQuery(function() { }); }); }); + +function edit(num) { + $("#content-"+ num +"-year_uid").hide(); + $("#membership-"+ num +"-year_uid").select2({ + width:'80px', + data: year_data + }); + $('select').select2(); + $("#content-"+ num +"-user_uid").hide(); + $("#membership-"+ num +"-user_uid").select2( + { + width:'250px', + placeholder: 'Entrez ici un Nom ou un Prénom', + minimumInputLength: 2, allowClear: true, + initSelection: function(element, callback){ + callback({id: element.val(), text: $("#content-"+ num +"-user_uid").text() }) + }, + 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 }; + } + } + }); + $("#content-"+ num +"-role").hide(); + $("#membership-"+ num +"-role").show(); +}; \ No newline at end of file diff --git a/jm2l/templates/mail_html.mako b/jm2l/templates/mail_html.mako index e6fb5c7..f3ccf09 100644 --- a/jm2l/templates/mail_html.mako +++ b/jm2l/templates/mail_html.mako @@ -32,6 +32,39 @@ de la connaissance, de la bonne humeur et du soleil :) L'équipe des JM2L
\ +<%def name="Forgot(request, User)"> +

JM2L

+Bonjour ${User.prenom},
+
+Vous venez de demander le renvoi de vos identifiants sur le site des JM2L.
+
+Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant :
+Votre lien ! +
+N'hésitez pas à l'ajouter à vos liens favoris. +
+Vos identifiants de connection sont les suivants: +
+Login: ${User.slug} +
+Password: ${User.password} +
+Une fois connecté vous pouvez changer votre mot de passe sur votre fiche. +
+

+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. +

+

+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 :) +

+
+L'équipe des JM2L +
+ \ % if action=='Welcome': ${self.Bienvenue(request, User)} +% elif action=='Forgot': +${self.Forgot(request, User)} % endif diff --git a/jm2l/templates/mail_plain.mako b/jm2l/templates/mail_plain.mako index a19cf2d..03d7e04 100644 --- a/jm2l/templates/mail_plain.mako +++ b/jm2l/templates/mail_plain.mako @@ -24,7 +24,34 @@ Nous vous attendons avec impatience le 28 novembre à Sophia Antipolis pour fêt L'équipe des JM2L + \ +<%def name="Forgot(request, User)"> + +Bonjour ${User.prenom}, + +Vous venez de demander le renvoi de vos identifiants sur le site des JM2L. + +Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant : +${request.route_url('bymail', hash=User.my_hash)}. +N'hésitez pas à l'ajouter à vos liens favoris. + +Vos identifiants de connection sont les suivants: + +Login: ${User.slug} +Password: ${User.password} + +Une fois connecté vous pouvez changer votre mot de passe sur votre fiche. + +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. + +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 :) + +L'équipe des JM2L + \ % if action=='Welcome': ${self.Bienvenue(request, User)} +% elif action=='Forgot': +${self.Forgot(request, User)} % endif diff --git a/jm2l/templates/view_user.mako b/jm2l/templates/view_user.mako index ee525bc..ddba887 100644 --- a/jm2l/templates/view_user.mako +++ b/jm2l/templates/view_user.mako @@ -9,7 +9,7 @@ Editer % endif -

${DispUser.prenom} ${DispUser.nom}

+

${DispUser.prenom | n} ${DispUser.nom | n}

Son profil. diff --git a/jm2l/views.py b/jm2l/views.py index 88d267a..bdf95ef 100644 --- a/jm2l/views.py +++ b/jm2l/views.py @@ -686,7 +686,7 @@ def participer(request): body=body, html=html) message.add_bcc("spam@style-python.fr") - mailer.send(message) + #mailer.send(message) MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'active', 'form':form, "link": MyLink, @@ -941,6 +941,7 @@ def edit_tiers(request): #test_form = TiersForm(request.POST, TheTiers, meta={'csrf_context': request.session}) if request.method == 'POST' and form.validate(): + print request.POST ToDelete = list() # First, we remove entries no more present for obj in form.membership.object_data: @@ -1053,6 +1054,8 @@ def show_user(request): user_slug = request.matchdict.get('user_slug', None) # Query database DispUser = User.by_slug(user_slug) + if DispUser is None: + raise HTTPNotFound() MainTab = {'programme':'','presse':'', 'plan':'', 'participer':'', 'DispUser':DispUser, 'logged_in':request.authenticated_userid } return MainTab