From e4e4cd35ef69ef02923effb9de943c253221e83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lie=20Bouttier?= Date: Sun, 19 Nov 2017 23:39:25 +0100 Subject: [PATCH] volunteer: send secret url by mail --- .../cfp/mails/volunteer_send_token.txt | 13 + cfp/templates/cfp/volunteer_enrole.html | 32 +- cfp/templates/cfp/volunteer_mail_token.html | 30 ++ cfp/urls.py | 1 + cfp/views.py | 36 ++ locale/fr/LC_MESSAGES/django.mo | Bin 23195 -> 24945 bytes locale/fr/LC_MESSAGES/django.po | 321 +++++++++++------- 7 files changed, 309 insertions(+), 124 deletions(-) create mode 100644 cfp/templates/cfp/mails/volunteer_send_token.txt create mode 100644 cfp/templates/cfp/volunteer_mail_token.html diff --git a/cfp/templates/cfp/mails/volunteer_send_token.txt b/cfp/templates/cfp/mails/volunteer_send_token.txt new file mode 100644 index 0000000..4407080 --- /dev/null +++ b/cfp/templates/cfp/mails/volunteer_send_token.txt @@ -0,0 +1,13 @@ +{% load i18n %}{% blocktrans with name=volunteer.name footer=conf.name %}Hi {{ name }}, + +Someone, probably you, asked to access your volunteer profile. +You can update your availabilities or edit your profile following this url: + + {{ url }} + +If you have any question, your can answer to this email. + +Sincerely, + +{{ footer }} +{% endblocktrans %} diff --git a/cfp/templates/cfp/volunteer_enrole.html b/cfp/templates/cfp/volunteer_enrole.html index 86e69a3..2b45e2c 100644 --- a/cfp/templates/cfp/volunteer_enrole.html +++ b/cfp/templates/cfp/volunteer_enrole.html @@ -1,4 +1,5 @@ {% extends 'base.html' %} +{% load crispy_forms_tags %} {% load i18n %} @@ -6,14 +7,31 @@ {% block content %} -

{% trans "Become a volunteers!" %}

- -

-{% blocktrans %}We need you! To participate, please enter your name and e-mail.{% endblocktrans %} -

- -{% include '_form.html' %} + +
+
+ {% if not request.user.is_authenticated %} +
+ + {% url 'volunteer-mail-token' as mail_token_url %} + {% blocktrans %}If you already subscribe as a volunteer and want to update your availabilities, please click here.{% endblocktrans %} +
+ {% endif %} +
+ {% csrf_token %} + {{ form|crispy }} +
+ +
+
+
+
{% for activity in activities %} {% if forloop.first %} diff --git a/cfp/templates/cfp/volunteer_mail_token.html b/cfp/templates/cfp/volunteer_mail_token.html new file mode 100644 index 0000000..567eb86 --- /dev/null +++ b/cfp/templates/cfp/volunteer_mail_token.html @@ -0,0 +1,30 @@ +{% extends 'base.html' %} +{% load crispy_forms_tags %} + +{% load ponyconf_tags i18n %} + +{% block volunteertab %} class="active"{% endblock %} + +{% block content %} + + + +
+
+
+ {% csrf_token %} +
+ {% blocktrans %}To receive a email with a link to access your profile, please enter your email below.{% endblocktrans %} +
+ {{ form|crispy }} +
+ +
+
+
+
+{% endblock %} diff --git a/cfp/urls.py b/cfp/urls.py index b2cce0f..35108ea 100644 --- a/cfp/urls.py +++ b/cfp/urls.py @@ -28,6 +28,7 @@ urlpatterns = [ url(r'^cfp/(?P[\w\-]+)/(?P[\w\-]+)/desist/$', views.talk_acknowledgment, {'confirm': False}, name='talk-desist'), # End backward compatibility url(r'^volunteer/enrole/$', views.volunteer_enrole, name='volunteer-enrole'), + url(r'^volunteer/token/$', views.volunteer_mail_token, name='volunteer-mail-token'), url(r'^volunteer/(?:(?P[\w\-]+)/)?$', views.volunteer_home, name='volunteer-home'), url(r'^volunteer/(?:(?P[\w\-]+)/)?join/(?P[\w\-]+)/$', views.volunteer_update_activity, {'join': True}, name='volunteer-join'), url(r'^volunteer/(?:(?P[\w\-]+)/)?quit/(?P[\w\-]+)/$', views.volunteer_update_activity, {'join': False}, name='volunteer-quit'), diff --git a/cfp/views.py b/cfp/views.py index e0cfca9..431f3ca 100644 --- a/cfp/views.py +++ b/cfp/views.py @@ -2,6 +2,7 @@ from math import ceil from django.core.mail import send_mail from django.core.urlresolvers import reverse_lazy from django.shortcuts import get_object_or_404, redirect, render +from django.template.loader import render_to_string from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from django.views.generic import FormView, TemplateView @@ -96,6 +97,41 @@ Thanks! }) +def volunteer_mail_token(request): + form = MailForm(request.POST or None) + if request.method == 'POST' and form.is_valid(): + try: + volunteer = Volunteer.objects.get(site=request.conference.site, email=form.cleaned_data['email']) + except Volunteer.DoesNotExist: + messages.error(request, _('Sorry, we do not know this email.')) + else: + + base_url = ('https' if request.is_secure() else 'http') + '://' + request.conference.site.domain + url = base_url + reverse('volunteer-home', kwargs=dict(volunteer_token=volunteer.token)) + body = render_to_string('cfp/mails/volunteer_send_token.txt', { + 'volunteer': volunteer, + 'url': url, + 'conf': request.conference + }) + #Message.objects.create( + # thread=volunteer.conversation, + # author=request.conference, + # from_email=request.conference.contact_email, + # content=body, + #) + send_mail( + subject=_('Thank you for your help!'), + message=body, + from_email='%s <%s>' % (request.conference.name, request.conference.contact_email), + recipient_list=['%s <%s>' % (volunteer.name, volunteer.email)], + ) + messages.success(request, _('A email have been sent with a link to access to your profil.')) + return redirect(reverse('volunteer-mail-token')) + return render(request, 'cfp/volunteer_mail_token.html', { + 'form': form, + }) + + @volunteer_required def volunteer_home(request, volunteer): return render(request, 'cfp/volunteer.html', { diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index b5333ee7fc398f7848a6423461023d19ec16ed36..59cedcc7d32d92c31203b48ad32f555177393761 100644 GIT binary patch delta 7210 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 diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 971ce5f..81c8fed 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-11-16 10:05+0000\n" -"PO-Revision-Date: 2017-11-16 11:01+0100\n" +"POT-Creation-Date: 2017-11-19 22:31+0000\n" +"PO-Revision-Date: 2017-11-19 23:36+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -18,6 +18,86 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.0.4\n" +#: accounts/forms.py:20 +msgid "Email address" +msgstr "Adresse e-mail" + +#: accounts/models.py:10 cfp/models.py:110 cfp/models.py:462 +msgid "Phone number" +msgstr "Numéro de téléphone" + +#: accounts/models.py:11 cfp/models.py:463 +msgid "SMS prefered" +msgstr "SMS préférés" + +#: accounts/models.py:12 cfp/models.py:102 +#: cfp/templates/cfp/proposal_dashboard.html:33 +#: cfp/templates/cfp/staff/participant_details.html:15 +msgid "Biography" +msgstr "Biographie" + +#: accounts/models.py:14 cfp/models.py:104 +msgid "Twitter" +msgstr "Twitter" + +#: accounts/models.py:15 cfp/models.py:105 +msgid "LinkedIn" +msgstr "LinkedIn" + +#: accounts/models.py:16 cfp/models.py:106 +msgid "Github" +msgstr "Github" + +#: accounts/models.py:17 cfp/models.py:107 +msgid "Website" +msgstr "Site web" + +#: accounts/models.py:18 cfp/models.py:108 +msgid "Facebook" +msgstr "Facebook" + +#: accounts/models.py:19 cfp/models.py:109 +msgid "Mastodon" +msgstr "Mastodon" + +#: accounts/signals.py:23 +msgid "Welcome!" +msgstr "Bienvenue !" + +#: accounts/signals.py:28 +msgid "Goodbye!" +msgstr "Au revoir !" + +#: accounts/templates/accounts/profile.html:12 ponyconf/templates/base.html:47 +msgid "Profile" +msgstr "Profil" + +#: accounts/templates/accounts/profile.html:21 ponyconf/templates/_form.html:12 +msgid "Submit" +msgstr "Envoyer" + +#: accounts/templates/accounts/profile.html:25 +#: cfp/templates/cfp/admin/create_user.html:14 +#: cfp/templates/cfp/staff/talk_decide.html:22 ponyconf/templates/_form.html:16 +msgid "Cancel" +msgstr "Annuler" + +#: accounts/views.py:11 +msgid "Reset your password" +msgstr "Réinitialiser son mot de passe" + +#: accounts/views.py:12 +msgid "Change password" +msgstr "Changer de mot de passe" + +#: accounts/views.py:28 +msgid "Profile updated successfully." +msgstr "Profil modifié avec succès !" + +#: accounts/views.py:30 +msgid "Please correct those errors." +msgstr "Merci de corriger ces erreurs." + #: cfp/forms.py:17 msgid "Pending decision" msgstr "Décision en attente" @@ -253,39 +333,6 @@ msgstr "" msgid "Name" msgstr "Nom" -#: cfp/models.py:102 cfp/templates/cfp/proposal_dashboard.html:33 -#: cfp/templates/cfp/staff/participant_details.html:15 -msgid "Biography" -msgstr "Biographie" - -#: cfp/models.py:104 -msgid "Twitter" -msgstr "Twitter" - -#: cfp/models.py:105 -msgid "LinkedIn" -msgstr "LinkedIn" - -#: cfp/models.py:106 -msgid "Github" -msgstr "Github" - -#: cfp/models.py:107 -msgid "Website" -msgstr "Site web" - -#: cfp/models.py:108 -msgid "Facebook" -msgstr "Facebook" - -#: cfp/models.py:109 -msgid "Mastodon" -msgstr "Mastodon" - -#: cfp/models.py:110 cfp/models.py:462 -msgid "Phone number" -msgstr "Numéro de téléphone" - #: cfp/models.py:113 cfp/models.py:330 msgid "This field is only visible by organizers." msgstr "Ce champs est uniquement visible par les organisateurs." @@ -396,10 +443,6 @@ msgstr "En cours, score : %(score).1f" msgid "Your Name" msgstr "Votre Nom" -#: cfp/models.py:463 -msgid "SMS prefered" -msgstr "SMS préférés" - #: cfp/models.py:466 msgid "If you have some constraints, you can indicate them here." msgstr "Si vous avez des contraintes, vous pouvez les indiquer ici." @@ -501,14 +544,11 @@ msgstr "Ajouter un nouvel utilisateur" #: cfp/templates/cfp/proposal_mail_token.html:25 #: cfp/templates/cfp/proposal_speaker_form.html:49 #: cfp/templates/cfp/proposal_talk_form.html:28 +#: cfp/templates/cfp/volunteer_enrole.html:30 +#: cfp/templates/cfp/volunteer_mail_token.html:25 msgid "Save" msgstr "Envoyer" -#: cfp/templates/cfp/admin/create_user.html:14 -#: cfp/templates/cfp/staff/talk_decide.html:22 ponyconf/templates/_form.html:16 -msgid "Cancel" -msgstr "Annuler" - #: cfp/templates/cfp/admin/tag_form.html:16 msgid "Edit tag" msgstr "Édition d’une étiquette" @@ -538,6 +578,66 @@ msgstr "" "Si vous avez déjà soumis une proposition et que vous souhaitez l’éditer, " "cliquez ici." +#: cfp/templates/cfp/mails/speaker_send_token.txt:1 +msgid "" +"Hi {},\n" +"\n" +"Someone, probably you, ask to access your profile.\n" +"You can edit your talks or add new ones following this url:\n" +"\n" +" {}\n" +"\n" +"If you have any question, your can answer to this email.\n" +"\n" +"Sincerely,\n" +"\n" +"{}\n" +msgstr "" +"Bonjour {},\n" +"\n" +"Quelqu’un, sans doute vous, a demandé à accéder à votre profil.\n" +"Vous pouvez modifier vos propositions ou en soumettre de nouvelles à l’url " +"suivante :\n" +"\n" +" {}\n" +"\n" +"Si vous avez une question, vous pouvez répondre à ce mail.\n" +"\n" +"Sincèrement,\n" +"\n" +"{}\n" + +#: cfp/templates/cfp/mails/volunteer_send_token.txt:1 +#, python-format +msgid "" +"Hi %(name)s,\n" +"\n" +"Someone, probably you, asked to access your volunteer profile.\n" +"You can update your availabilities or edit your profile following this url:\n" +"\n" +" %(url)s\n" +"\n" +"If you have any question, your can answer to this email.\n" +"\n" +"Sincerely,\n" +"\n" +"%(footer)s\n" +msgstr "" +"Bonjour %(name)s,\n" +"\n" +"Quelqu’un, sans doute vous, a demandé à accéder à votre profil bénévole.\n" +"Vous pouvez modifier vos disponibilité ou éditer votre profil à l’url " +"suivante :\n" +"\n" +" %(url)s\n" +"\n" +"Si vous avez une question, vous pouvez répondre à ce mail.\n" +"\n" +"Sincèrement,\n" +"\n" +"\n" +"%(footer)s\n" + #: cfp/templates/cfp/proposal_dashboard.html:11 #, python-format msgid "Welcome %(name)s!" @@ -644,10 +744,12 @@ msgstr "" "en soumettre une autre, cliquez ici." #: cfp/templates/cfp/proposal_mail_token.html:12 +#: cfp/templates/cfp/volunteer_mail_token.html:12 msgid "Access an existing profile" msgstr "Accéder à un profil existant" #: cfp/templates/cfp/proposal_mail_token.html:21 +#: cfp/templates/cfp/volunteer_mail_token.html:21 msgid "" "To receive a email with a link to access your profile, please enter your " "email below." @@ -1078,7 +1180,8 @@ msgstr "bénévole" msgid "Phone" msgstr "Téléphone" -#: cfp/templates/cfp/volunteer.html:9 cfp/templates/cfp/volunteer_enrole.html:9 +#: cfp/templates/cfp/volunteer.html:9 +#: cfp/templates/cfp/volunteer_enrole.html:12 msgid "Become a volunteers!" msgstr "Devenez un bénévole !" @@ -1090,17 +1193,27 @@ msgstr "Je serai heureux d’aider à cela !" msgid "Sorry, I have a setback" msgstr "Désolé, j’ai un contretemps" -#: cfp/templates/cfp/volunteer_enrole.html:12 +#: cfp/templates/cfp/volunteer_enrole.html:14 msgid "We need you! To participate, please enter your name and e-mail." msgstr "" "Nous avons besoin de vous ! Pour participer, veuillez indiquer votre nom et " "votre adresse e-mail." -#: cfp/templates/cfp/volunteer_enrole.html:22 +#: cfp/templates/cfp/volunteer_enrole.html:23 +#, python-format +msgid "" +"If you already subscribe as a volunteer and want to update your " +"availabilities, please click here." +msgstr "" +"Si vous vous êtes déjà inscrit en tant que bénévole et que vous souhaitez " +"mettre à jour vos disponibilités, cliquez ici." + +#: cfp/templates/cfp/volunteer_enrole.html:40 msgid "We are looking for help with the following activities:" msgstr "Nous cherchons de l’aide pour les activités suivantes :" -#: cfp/views.py:52 +#: cfp/views.py:67 msgid "" "Hi {},\n" "\n" @@ -1128,26 +1241,34 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:72 +#: cfp/views.py:87 cfp/views.py:123 msgid "Thank you for your help!" msgstr "Merci pour votre aide !" -#: cfp/views.py:77 +#: cfp/views.py:92 msgid "" "Thank you for your participation! You can now subscribe to some activities." msgstr "" "Merci pour votre participation ! Vous pouvez maintenant vous inscrire à une " "ou plusieurs activités." -#: cfp/views.py:99 +#: cfp/views.py:106 cfp/views.py:280 +msgid "Sorry, we do not know this email." +msgstr "Désolé, nous ne connaissons pas cette e-mail." + +#: cfp/views.py:128 cfp/views.py:305 +msgid "A email have been sent with a link to access to your profil." +msgstr "Un e-mail vous a été envoyé avec un lien pour accéder à votre profil." + +#: cfp/views.py:149 msgid "Thank you for your participation!" msgstr "Merci pour votre participation !" -#: cfp/views.py:103 +#: cfp/views.py:153 msgid "Okay, no problem!" msgstr "Ok, pas de soucis !" -#: cfp/views.py:187 +#: cfp/views.py:236 msgid "" "Hi {},\n" "\n" @@ -1187,15 +1308,11 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:217 cfp/views.py:301 +#: cfp/views.py:266 cfp/views.py:350 msgid "You proposition have been successfully submitted!" msgstr "Votre proposition a été transmise avec succès !" -#: cfp/views.py:231 -msgid "Sorry, we do not know this email." -msgstr "Désolé, nous ne connaissons pas cette e-mail." - -#: cfp/views.py:236 +#: cfp/views.py:285 msgid "" "Hi {},\n" "\n" @@ -1226,41 +1343,37 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:256 -msgid "A email have been sent with a link to access to your profil." -msgstr "Un e-mail vous a été envoyé avec un lien pour accéder à votre profil." - -#: cfp/views.py:297 cfp/views.py:370 +#: cfp/views.py:346 cfp/views.py:419 msgid "Changes saved." msgstr "Modifications sauvegardées." -#: cfp/views.py:318 +#: cfp/views.py:367 msgid "You already confirmed your participation to this talk." msgstr "Vous avez déjà confirmé votre participation à cet exposé." -#: cfp/views.py:320 +#: cfp/views.py:369 msgid "You already cancelled your participation to this talk." msgstr "Vous avez déjà annulé votre participation à cet exposé." -#: cfp/views.py:325 +#: cfp/views.py:374 msgid "Your participation has been taken into account, thank you!" msgstr "Votre participation a été prise en compte, merci !" -#: cfp/views.py:326 +#: cfp/views.py:375 #, python-format msgid "Speaker %(speaker)s confirmed his/her participation." msgstr "L’intervenant %(speaker)s a confirmé sa participation." -#: cfp/views.py:328 +#: cfp/views.py:377 msgid "We have noted your unavailability." msgstr "Nous avons enregistré votre indisponibilité." -#: cfp/views.py:329 +#: cfp/views.py:378 #, python-format msgid "Speaker %(speaker)s CANCELLED his/her participation." msgstr "L’intervenant %(speaker)s a ANNULÉ sa participation." -#: cfp/views.py:377 +#: cfp/views.py:426 msgid "" "Hi {},\n" "\n" @@ -1300,59 +1413,59 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:408 cfp/views.py:428 +#: cfp/views.py:457 cfp/views.py:477 msgid "Co-speaker successfully added to the talk." msgstr "Co-intervenant ajouté à l’exposé avec succès." -#: cfp/views.py:441 +#: cfp/views.py:490 msgid "Co-speaker successfully removed from the talk." msgstr "Co-intervenant supprimé de l’exposé avec succès." -#: cfp/views.py:483 +#: cfp/views.py:532 msgid "The speaker confirmation have been noted." msgstr "La confirmation de l’orateur a été notée." -#: cfp/views.py:484 +#: cfp/views.py:533 msgid "The talk have been confirmed." msgstr "L’exposé a été confirmé." -#: cfp/views.py:486 +#: cfp/views.py:535 msgid "The speaker unavailability have been noted." msgstr "L’indisponibilité de l’intervenant a été notée." -#: cfp/views.py:487 +#: cfp/views.py:536 msgid "The talk have been cancelled." msgstr "L’exposé a été annulé." -#: cfp/views.py:572 cfp/views.py:677 +#: cfp/views.py:621 cfp/views.py:726 msgid "The talk has been accepted." msgstr "L’exposé a été accepté." -#: cfp/views.py:574 cfp/views.py:679 +#: cfp/views.py:623 cfp/views.py:728 msgid "The talk has been declined." msgstr "L’exposé a été décliné." -#: cfp/views.py:646 cfp/views.py:751 +#: cfp/views.py:695 cfp/views.py:800 msgid "Message sent!" msgstr "Message envoyé !" -#: cfp/views.py:660 +#: cfp/views.py:709 msgid "Vote successfully created" msgstr "A voté !" -#: cfp/views.py:660 +#: cfp/views.py:709 msgid "Vote successfully updated" msgstr "Vote mis à jour" -#: cfp/views.py:681 +#: cfp/views.py:730 msgid "Decision taken in account" msgstr "Décision enregistrée" -#: cfp/views.py:817 +#: cfp/views.py:866 msgid "[{}] You have been added to the staff team" msgstr "[{}] Vous avez été ajouté aux membres du staff" -#: cfp/views.py:818 +#: cfp/views.py:867 msgid "" "Hi {},\n" "\n" @@ -1376,15 +1489,15 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:839 +#: cfp/views.py:888 msgid "Modifications successfully saved." msgstr "Modification enregistrée avec succès." -#: cfp/views.py:1003 +#: cfp/views.py:1052 msgid "User created successfully." msgstr "Utilisateur créé avec succès." -#: cfp/views.py:1024 +#: cfp/views.py:1073 #, python-format msgid "Format '%s' not available" msgstr "Format '%s' non disponible" @@ -1410,10 +1523,6 @@ msgstr "Anglais" msgid "French" msgstr "Français" -#: ponyconf/templates/_form.html:12 -msgid "Submit" -msgstr "Envoyer" - #: ponyconf/templates/base.html:21 msgid "Home" msgstr "Accueil" @@ -1430,15 +1539,15 @@ msgstr "Organisation" msgid "Administration" msgstr "Administration" -#: ponyconf/templates/base.html:54 +#: ponyconf/templates/base.html:48 msgid "Logout" msgstr "Déconnexion" -#: ponyconf/templates/base.html:56 +#: ponyconf/templates/base.html:50 msgid "Staff" msgstr "Staff" -#: ponyconf/templates/base.html:73 +#: ponyconf/templates/base.html:67 msgid "Powered by" msgstr "Propulsé par" @@ -1462,10 +1571,6 @@ msgstr "Mot de passe oublié ?" msgid "Password Change" msgstr "Changement de mot de passe" -#: ponyconf/urls.py:27 -msgid "Email address" -msgstr "Adresse e-mail" - #~ msgid "Contact:" #~ msgstr "Contacter :" @@ -1565,12 +1670,6 @@ msgstr "Adresse e-mail" #~ msgid "I need a computer" #~ msgstr "J’ai besoin d’un ordinateur" -#~ msgid "Welcome!" -#~ msgstr "Bienvenue !" - -#~ msgid "Goodbye!" -#~ msgstr "Au revoir !" - #~ msgid "Travels and hosting" #~ msgstr "Déplacement et hébergement" @@ -1651,18 +1750,6 @@ msgstr "Adresse e-mail" #~ msgid "Delete These" #~ msgstr "Supprimer ces" -#~ msgid "Reset your password" -#~ msgstr "Réinitialiser son mot de passe" - -#~ msgid "Change password" -#~ msgstr "Changer de mot de passe" - -#~ msgid "Profile updated successfully." -#~ msgstr "Profil modifié avec succès !" - -#~ msgid "Please correct those errors." -#~ msgstr "Merci de corriger ces erreurs." - #~ msgid "%(name)s added to participants" #~ msgstr "%(name)s a été ajouté aux participants"