diff --git a/cfp/decorators.py b/cfp/decorators.py index ffab13f..c952ecd 100644 --- a/cfp/decorators.py +++ b/cfp/decorators.py @@ -5,7 +5,7 @@ from django.shortcuts import get_object_or_404 from functools import wraps from cfp.utils import is_staff -from cfp.models import Participant +from cfp.models import Participant, Volunteer def speaker_required(view_func): @@ -22,6 +22,20 @@ def speaker_required(view_func): return wraps(view_func)(wrapped_view) +def volunteer_required(view_func): + def wrapped_view(request, **kwargs): + volunteer_token = kwargs.pop('volunteer_token') + if volunteer_token: + volunteer = get_object_or_404(Volunteer, site=request.conference.site, token=volunteer_token) + elif request.user.is_authenticated(): + volunteer = get_object_or_404(Volunteer, site=request.conference.site, email=request.user.email) + else: + raise PermissionDenied + kwargs['volunteer'] = volunteer + return view_func(request, **kwargs) + return wraps(view_func)(wrapped_view) + + def staff_required(view_func): def _is_staff(request, *args, **kwargs): if not request.user.is_authenticated(): diff --git a/cfp/models.py b/cfp/models.py index 67b1be9..42bbb69 100644 --- a/cfp/models.py +++ b/cfp/models.py @@ -115,7 +115,6 @@ class Participant(PonyConfModel): objects = ParticipantManager() - def get_absolute_url(self): return reverse('participant-details', kwargs=dict(participant_id=self.token)) @@ -434,10 +433,10 @@ class Volunteer(PonyConfModel): conversation = models.OneToOneField(MessageThread) def get_absolute_url(self): - return reverse('volunteer-home', kwargs={'volunteer_id': self.token}) + return reverse('volunteer-details', kwargs=dict(volunteer_id=self.pk)) def get_secret_url(self, full=False): - url = reverse('volunteer-home', kwargs={'volunteer_id': self.token}) + url = reverse('volunteer-home', kwargs=dict(volunteer_token=self.token)) if full: url = ('https' if self.site.conference.secure_domain else 'http') + '://' + self.site.domain + url return url diff --git a/cfp/templates/cfp/staff/volunteer_details.html b/cfp/templates/cfp/staff/volunteer_details.html index 650c183..1c37e43 100644 --- a/cfp/templates/cfp/staff/volunteer_details.html +++ b/cfp/templates/cfp/staff/volunteer_details.html @@ -8,12 +8,14 @@

{% trans "Volunteer" %} {{ volunteer.name }}

-
{% trans "Email" %}
+
{% trans "Email:" %}
{{ volunteer.email }}
{% if volunteer.phone_number %} -
{% trans "Phone number" %}
+
{% trans "Phone number:" %}
{{ volunteer.phone_number }}{% if volunteer.sms_prefered %} (SMS){% endif %}
{% endif %} +
{% trans "Secret link:" %}
+
{{ volunteer.token }}
{% if volunteer.notes %} diff --git a/cfp/templates/cfp/volunteer.html b/cfp/templates/cfp/volunteer.html index 572e3ed..7aa404c 100644 --- a/cfp/templates/cfp/volunteer.html +++ b/cfp/templates/cfp/volunteer.html @@ -16,9 +16,9 @@

{{ activity.description }}

{% if volunteer not in activity.volunteers.all %} - {% trans "I will be happy to help on that!" %} + {% trans "I will be happy to help on that!" %} {% else %} - {% trans "Sorry, I have a setback" %} + {% trans "Sorry, I have a setback" %} {% endif %}

diff --git a/cfp/urls.py b/cfp/urls.py index c096d03..2ad41ec 100644 --- a/cfp/urls.py +++ b/cfp/urls.py @@ -28,9 +28,9 @@ urlpatterns = [ url(r'^cfp/(?P[\w\-]+)/(?P[\w\-]+)/desist/$', views.talk_acknowledgment, {'confirm': False}, name='talk-desist'), # End backward compatibility url(r'^volunteer/$', views.volunteer_enrole, name='volunteer-enrole'), - 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'), + 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'), #url(r'^talk/(?P[\w\-]+)/$', views.talk_show, name='show-talk'), #url(r'^speaker/(?P[\w\-]+)/$', views.speaker_show, name='show-speaker'), url(r'^staff/$', views.staff, name='staff'), diff --git a/cfp/views.py b/cfp/views.py index a95f4ff..7f29d88 100644 --- a/cfp/views.py +++ b/cfp/views.py @@ -21,7 +21,7 @@ from functools import reduce from mailing.models import Message from mailing.forms import MessageForm from .planning import Program -from .decorators import speaker_required, staff_required +from .decorators import speaker_required, volunteer_required, staff_required from .mixins import StaffRequiredMixin, OnSiteMixin, OnSiteFormMixin from .utils import is_staff from .models import Participant, Talk, TalkCategory, Vote, Track, Tag, Room, Volunteer, Activity @@ -73,25 +73,23 @@ Thanks! recipient_list=['%s <%s>' % (volunteer.name, volunteer.email)], ) messages.success(request, _('Thank you for your participation! You can now subscribe to some activities.')) - return redirect(reverse('volunteer-home', kwargs=dict(volunteer_id=volunteer.token))) + return redirect(reverse('volunteer-home', kwargs=dict(volunteer_token=volunteer.token))) return render(request, 'cfp/volunteer_enrole.html', { 'activities': Activity.objects.filter(site=request.conference.site), 'form': form, }) -def volunteer_home(request, volunteer_id): - volunteer = get_object_or_404(Volunteer, token=volunteer_id, site=request.conference.site) +@volunteer_required +def volunteer_home(request, volunteer): return render(request, 'cfp/volunteer.html', { 'activities': Activity.objects.filter(site=request.conference.site), 'volunteer': volunteer, }) -def volunteer_update_activity(request, volunteer_id, activity, join): - if not request.conference.volunteers_enrollment_is_open(): - raise PermissionDenied - volunteer = get_object_or_404(Volunteer, token=volunteer_id, site=request.conference.site) +@volunteer_required +def volunteer_update_activity(request, volunteer, activity, join): activity = get_object_or_404(Activity, slug=activity, site=request.conference.site) if join: activity.volunteers.add(volunteer) @@ -101,7 +99,7 @@ def volunteer_update_activity(request, volunteer_id, activity, join): activity.volunteers.remove(volunteer) activity.save() messages.success(request, _('Okay, no problem!')) - return redirect(reverse('volunteer-home', kwargs=dict(volunteer_id=volunteer.token))) + return redirect(reverse('volunteer-home', kwargs=dict(volunteer_token=volunteer.token))) @staff_required diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index 62cf553..39321cf 100644 Binary files a/locale/fr/LC_MESSAGES/django.mo and b/locale/fr/LC_MESSAGES/django.mo differ diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 6b5481c..4ff6439 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-04 20:04+0000\n" -"PO-Revision-Date: 2017-11-04 21:12+0100\n" +"POT-Creation-Date: 2017-11-06 20:28+0000\n" +"PO-Revision-Date: 2017-11-06 21:30+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -22,7 +22,7 @@ msgstr "" msgid "Pending decision" msgstr "Décision en attente" -#: cfp/forms.py:18 cfp/forms.py:124 cfp/forms.py:236 +#: cfp/forms.py:18 cfp/forms.py:124 cfp/forms.py:221 msgid "Accepted" msgstr "Accepté" @@ -34,15 +34,15 @@ msgstr "Décliné" msgid "Waiting" msgstr "En attente" -#: cfp/forms.py:29 cfp/forms.py:130 cfp/forms.py:242 cfp/models.py:357 +#: cfp/forms.py:29 cfp/forms.py:130 cfp/forms.py:227 cfp/models.py:360 msgid "Confirmed" msgstr "Confirmé" -#: cfp/forms.py:30 cfp/models.py:359 +#: cfp/forms.py:30 cfp/models.py:362 msgid "Cancelled" msgstr "Annulé" -#: cfp/forms.py:62 cfp/models.py:452 +#: cfp/forms.py:62 cfp/models.py:461 msgid "Activity" msgstr "Activité" @@ -56,7 +56,7 @@ msgstr "Aucune" msgid "Default duration: %(duration)d min" msgstr "Durée par défaut : %(duration)d min" -#: cfp/forms.py:106 cfp/forms.py:118 cfp/forms.py:230 +#: cfp/forms.py:106 cfp/forms.py:118 cfp/forms.py:215 #: cfp/templates/cfp/staff/talk_details.html:15 msgid "Category" msgstr "Catégorie" @@ -65,16 +65,16 @@ msgstr "Catégorie" msgid "Title" msgstr "Titre" -#: cfp/forms.py:108 cfp/models.py:151 cfp/models.py:447 -#: cfp/templates/cfp/proposal_talk_details.html:73 +#: cfp/forms.py:108 cfp/models.py:154 cfp/models.py:456 +#: cfp/templates/cfp/proposal_talk_details.html:75 #: cfp/templates/cfp/staff/talk_details.html:64 msgid "Description" msgstr "Description" -#: cfp/forms.py:109 cfp/models.py:111 cfp/models.py:428 +#: cfp/forms.py:109 cfp/models.py:111 cfp/models.py:431 #: cfp/templates/cfp/staff/participant_details.html:19 #: cfp/templates/cfp/staff/talk_details.html:78 -#: cfp/templates/cfp/staff/volunteer_details.html:20 +#: cfp/templates/cfp/staff/volunteer_details.html:22 msgid "Notes" msgstr "Notes" @@ -82,7 +82,7 @@ msgstr "Notes" msgid "Visible by speakers" msgstr "Visible par les orateurs" -#: cfp/forms.py:136 cfp/forms.py:248 cfp/models.py:314 +#: cfp/forms.py:136 cfp/forms.py:233 cfp/models.py:317 #: cfp/templates/cfp/staff/talk_details.html:21 #: cfp/templates/cfp/staff/talk_list.html:46 #: cfp/templates/cfp/staff/track_form.html:14 @@ -120,7 +120,7 @@ msgstr "Programmé" msgid "Filter talks already / not yet scheduled" msgstr "Filtrer les exposés déjà / pas encore planifiées" -#: cfp/forms.py:160 cfp/models.py:331 +#: cfp/forms.py:160 cfp/models.py:334 #: cfp/templates/cfp/staff/talk_details.html:54 msgid "Materials" msgstr "Supports" @@ -137,7 +137,7 @@ msgstr "Vidéo" msgid "Filter talks with / without video" msgstr "Filtrer les exposés avec / sans vidéo" -#: cfp/forms.py:174 cfp/forms.py:260 +#: cfp/forms.py:174 cfp/forms.py:245 msgid "Not assigned" msgstr "Pas encore assignée" @@ -161,23 +161,22 @@ msgstr "Assigner à une salle" msgid "Notify by mail?" msgstr "Notifier par e-mail ?" -#: cfp/forms.py:264 cfp/models.py:423 -#: cfp/templates/cfp/staff/volunteer_details.html:11 +#: cfp/forms.py:249 cfp/models.py:426 #: cfp/templates/cfp/staff/volunteer_list.html:30 msgid "Email" msgstr "E-mail" -#: cfp/forms.py:283 +#: cfp/forms.py:268 msgid "New staff members will be informed of their new position by e-mail." msgstr "" "Les nouveaux membres du staff seront informés de leur nouveau rôle par " "courrier électronique." -#: cfp/forms.py:303 +#: cfp/forms.py:288 msgid "An user with that firstname and that lastname already exists." msgstr "Un utilisateur avec ce prénom et ce nom existe déjà." -#: cfp/forms.py:308 +#: cfp/forms.py:293 msgid "A user with that email already exists." msgstr "Un utilisateur avec cet email existe déjà." @@ -246,7 +245,7 @@ msgstr "" "L’adresse de réponse doit être une chaine de texte formatable avec un " "argument « token » (e.g. ponyconf+{token}@exemple.com)." -#: cfp/models.py:99 cfp/models.py:149 cfp/models.py:201 cfp/models.py:445 +#: cfp/models.py:99 cfp/models.py:152 cfp/models.py:204 cfp/models.py:454 #: cfp/templates/cfp/staff/participant_list.html:35 #: cfp/templates/cfp/staff/volunteer_list.html:29 msgid "Name" @@ -281,12 +280,11 @@ msgstr "Facebook" msgid "Mastodon" msgstr "Mastodon" -#: cfp/models.py:109 cfp/models.py:425 -#: cfp/templates/cfp/staff/volunteer_details.html:14 +#: cfp/models.py:109 cfp/models.py:428 msgid "Phone number" msgstr "Numéro de téléphone" -#: cfp/models.py:112 cfp/models.py:313 +#: cfp/models.py:112 cfp/models.py:316 msgid "This field is only visible by organizers." msgstr "Ce champs est uniquement visible par les organisateurs." @@ -294,23 +292,23 @@ msgstr "Ce champs est uniquement visible par les organisateurs." msgid "Invited speaker" msgstr "Orateur invité" -#: cfp/models.py:203 +#: cfp/models.py:206 msgid "Color" msgstr "Couleur" -#: cfp/models.py:235 +#: cfp/models.py:238 msgid "Default duration (min)" msgstr "Durée par défaut (min)" -#: cfp/models.py:236 +#: cfp/models.py:239 msgid "Color on program" msgstr "Couleur sur le programme" -#: cfp/models.py:237 +#: cfp/models.py:240 msgid "Label on program" msgstr "Label dans le xml du programme" -#: cfp/models.py:308 cfp/templates/cfp/proposal_talk_details.html:51 +#: cfp/models.py:311 cfp/templates/cfp/proposal_talk_details.html:53 #: cfp/templates/cfp/staff/base.html:11 #: cfp/templates/cfp/staff/participant_list.html:8 #: cfp/templates/cfp/staff/talk_details.html:68 @@ -318,19 +316,19 @@ msgstr "Label dans le xml du programme" msgid "Speakers" msgstr "Orateurs" -#: cfp/models.py:309 +#: cfp/models.py:312 msgid "Talk Title" msgstr "Titre de la proposition" -#: cfp/models.py:312 +#: cfp/models.py:315 msgid "Description of your talk" msgstr "Description de votre proposition" -#: cfp/models.py:316 cfp/templates/cfp/proposal_talk_details.html:83 +#: cfp/models.py:319 cfp/templates/cfp/proposal_talk_details.html:85 msgid "Message to organizers" msgstr "Message aux organisateurs" -#: cfp/models.py:317 +#: cfp/models.py:320 msgid "" "If you have any constraint or if you have anything that may help you to " "select your talk, like a video or slides of your talk, please write it down " @@ -340,67 +338,67 @@ msgstr "" "votre proposition, comme une vidéo, des slides, n'hésitez pas à les ajouter " "ici." -#: cfp/models.py:320 +#: cfp/models.py:323 msgid "Talk Category" msgstr "Catégorie de proposition" -#: cfp/models.py:321 +#: cfp/models.py:324 msgid "I'm ok to be recorded on video" msgstr "J’accepte d’être enregistré en vidéo" -#: cfp/models.py:323 +#: cfp/models.py:326 msgid "Video licence" msgstr "Licence vidéo" -#: cfp/models.py:324 +#: cfp/models.py:327 msgid "I need sound" msgstr "J’ai besoin de son" -#: cfp/models.py:327 +#: cfp/models.py:330 msgid "Beginning date and time" msgstr "Date et heure de début" -#: cfp/models.py:328 +#: cfp/models.py:331 msgid "Duration (min)" msgstr "Durée (min)" -#: cfp/models.py:332 +#: cfp/models.py:335 msgid "" "You can use this field to share some materials related to your intervention." msgstr "" "Vous pouvez utiliser ce champs pour partager les supports de votre " "intervention." -#: cfp/models.py:361 +#: cfp/models.py:364 msgid "Waiting confirmation" msgstr "En attente de confirmation" -#: cfp/models.py:363 +#: cfp/models.py:366 msgid "Refused" msgstr "Refusé" -#: cfp/models.py:365 +#: cfp/models.py:368 #, python-format msgid "Pending decision, score: %(score).1f" msgstr "En cours, score : %(score).1f" -#: cfp/models.py:422 +#: cfp/models.py:425 msgid "Your Name" msgstr "Votre Nom" -#: cfp/models.py:426 +#: cfp/models.py:429 msgid "SMS prefered" msgstr "SMS préférés" -#: cfp/models.py:429 +#: cfp/models.py:432 msgid "If you have some constraints, you can indicate them here." msgstr "Si vous avez des contraintes, vous pouvez les indiquer ici." -#: cfp/models.py:448 cfp/templates/cfp/staff/volunteer_details.html:8 +#: cfp/models.py:457 cfp/templates/cfp/staff/volunteer_details.html:8 msgid "Volunteer" msgstr "Bénévole" -#: cfp/models.py:453 cfp/templates/cfp/staff/volunteer_details.html:25 +#: cfp/models.py:462 cfp/templates/cfp/staff/volunteer_details.html:27 #: cfp/templates/cfp/staff/volunteer_list.html:32 msgid "Activities" msgstr "Activités" @@ -430,19 +428,41 @@ msgid "Please select a category." msgstr "Veuillez sélectionner une catégorie." #: cfp/templates/cfp/admin/conference.html:13 -#: cfp/templates/cfp/staff/create_user.html:8 +#: cfp/templates/cfp/admin/create_user.html:8 msgid "Add a new user" msgstr "Ajouter un nouvel utilisateur" #: cfp/templates/cfp/admin/conference.html:14 -#: cfp/templates/cfp/proposal_home.html:28 +#: cfp/templates/cfp/admin/create_user.html:13 +#: cfp/templates/cfp/proposal_home.html:30 #: cfp/templates/cfp/proposal_mail_token.html:25 -#: cfp/templates/cfp/proposal_speaker_form.html:48 +#: cfp/templates/cfp/proposal_speaker_form.html:49 #: cfp/templates/cfp/proposal_talk_form.html:28 -#: cfp/templates/cfp/staff/create_user.html:13 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/closed.html:9 cfp/templates/cfp/proposal_home.html:12 +msgid "Participate" +msgstr "Participer" + +#: cfp/templates/cfp/closed.html:13 +msgid "Sorry, the Call for Participation is closed!" +msgstr "Désolé, l’appel à participation est fermé !" + +#: cfp/templates/cfp/closed.html:16 +#, python-format +msgid "" +"If you already have submitted a talk and you want to edit it, please click " +"here." +msgstr "" +"Si vous avez déjà soumis une proposition et que vous souhaitez l’éditer, " +"cliquez ici." + #: cfp/templates/cfp/proposal_dashboard.html:11 #, python-format msgid "Welcome %(name)s!" @@ -494,6 +514,7 @@ msgstr "Mastodon :" #: cfp/templates/cfp/proposal_dashboard.html:29 #: cfp/templates/cfp/staff/participant_details.html:33 +#: cfp/templates/cfp/staff/volunteer_details.html:14 msgid "Phone number:" msgstr "Numéro de téléphone :" @@ -533,16 +554,12 @@ msgstr "annulé" msgid "No proposals." msgstr "Aucune proposition." -#: cfp/templates/cfp/proposal_dashboard.html:75 -#: cfp/templates/cfp/proposal_talk_details.html:17 +#: cfp/templates/cfp/proposal_dashboard.html:76 +#: cfp/templates/cfp/proposal_talk_details.html:18 msgid "New proposal" msgstr "Nouvelle proposition" -#: cfp/templates/cfp/proposal_home.html:12 -msgid "Participate" -msgstr "Participer" - -#: cfp/templates/cfp/proposal_home.html:21 +#: cfp/templates/cfp/proposal_home.html:22 #, python-format msgid "" "If you already have submitted a talk and you want to edit it or submit " @@ -569,7 +586,7 @@ msgid "Edit a speaker" msgstr "Éditer un orateur" #: cfp/templates/cfp/proposal_speaker_form.html:15 -#: cfp/templates/cfp/proposal_talk_details.html:69 +#: cfp/templates/cfp/proposal_talk_details.html:71 msgid "Add a co-speaker" msgstr "Ajouter un co-intervenant" @@ -585,58 +602,58 @@ msgstr "Vous souhaitez peut-être ajouter un des intervenants suivants :" msgid "My profile" msgstr "Mon profil" -#: cfp/templates/cfp/proposal_talk_details.html:20 +#: cfp/templates/cfp/proposal_talk_details.html:22 msgid "Edit this proposal" msgstr "Éditer cette proposition" -#: cfp/templates/cfp/proposal_talk_details.html:26 +#: cfp/templates/cfp/proposal_talk_details.html:28 #: cfp/templates/cfp/staff/talk_details.html:18 #: cfp/templates/cfp/staff/talk_list.html:48 msgid "Status" msgstr "Statut" -#: cfp/templates/cfp/proposal_talk_details.html:29 +#: cfp/templates/cfp/proposal_talk_details.html:31 msgid "Reviewing in progress, we will keep you informed by mail." msgstr "Relecture en cours, nous vous tenons informé par e-mail." -#: cfp/templates/cfp/proposal_talk_details.html:31 +#: cfp/templates/cfp/proposal_talk_details.html:33 msgid "Accepted!" msgstr "Accepté !" -#: cfp/templates/cfp/proposal_talk_details.html:34 +#: cfp/templates/cfp/proposal_talk_details.html:36 msgid "Please confirm your participation:" msgstr "Merci de confirmer votre participation :" -#: cfp/templates/cfp/proposal_talk_details.html:35 +#: cfp/templates/cfp/proposal_talk_details.html:37 msgid "I will be there!" msgstr "Je serai là !" -#: cfp/templates/cfp/proposal_talk_details.html:36 +#: cfp/templates/cfp/proposal_talk_details.html:38 msgid "Sorry, couldn't make it :-(" msgstr "Désolé, j’ai un contre temps :-(" -#: cfp/templates/cfp/proposal_talk_details.html:40 +#: cfp/templates/cfp/proposal_talk_details.html:42 msgid "Sorry, I have to cancel." msgstr "Désolé, je dois annuler." -#: cfp/templates/cfp/proposal_talk_details.html:44 +#: cfp/templates/cfp/proposal_talk_details.html:46 msgid "Good news, I finally could be there!" msgstr "Bonne nouvelle, je peux finalement être présent !" -#: cfp/templates/cfp/proposal_talk_details.html:48 +#: cfp/templates/cfp/proposal_talk_details.html:50 msgid "Sorry, refused :-(" msgstr "Désolé, refusé :-(" -#: cfp/templates/cfp/proposal_talk_details.html:59 +#: cfp/templates/cfp/proposal_talk_details.html:61 msgid "you!" msgstr "vous !" -#: cfp/templates/cfp/proposal_talk_details.html:62 +#: cfp/templates/cfp/proposal_talk_details.html:64 msgid "remove" msgstr "supprimer" -#: cfp/templates/cfp/proposal_talk_details.html:79 -#: cfp/templates/cfp/proposal_talk_details.html:89 +#: cfp/templates/cfp/proposal_talk_details.html:81 +#: cfp/templates/cfp/proposal_talk_details.html:91 #: cfp/templates/cfp/staff/talk_details.html:66 msgid "No description provided." msgstr "Aucune description fournie." @@ -676,11 +693,6 @@ msgstr "Sessions" msgid "Rooms" msgstr "Salles" -#: cfp/templates/cfp/staff/create_user.html:14 -#: cfp/templates/cfp/staff/talk_decide.html:22 ponyconf/templates/_form.html:16 -msgid "Cancel" -msgstr "Annuler" - #: cfp/templates/cfp/staff/participant_details.html:10 msgid "VIP" msgstr "VIP" @@ -699,6 +711,7 @@ msgid "Language:" msgstr "Langue :" #: cfp/templates/cfp/staff/participant_details.html:35 +#: cfp/templates/cfp/staff/volunteer_details.html:17 msgid "Secret link:" msgstr "Lien secret :" @@ -964,11 +977,15 @@ msgstr "responsable" msgid "No tracks." msgstr "Aucune session." -#: cfp/templates/cfp/staff/volunteer_details.html:29 +#: cfp/templates/cfp/staff/volunteer_details.html:11 +msgid "Email:" +msgstr "E-mail :" + +#: cfp/templates/cfp/staff/volunteer_details.html:31 msgid "The volunteer applied for following activities:" msgstr "Le bénévole s'est proposé pour les activités suivantes :" -#: cfp/templates/cfp/staff/volunteer_details.html:39 +#: cfp/templates/cfp/staff/volunteer_details.html:41 msgid "The volunteer does not applied for any activities." msgstr "Le bénévole ne s’est proposé pour aucune activité." @@ -1006,7 +1023,7 @@ msgstr "" msgid "We are looking for help with the following activities:" msgstr "Nous cherchons de l’aide pour les activités suivantes :" -#: cfp/views.py:49 +#: cfp/views.py:50 msgid "" "Hi {},\n" "\n" @@ -1034,26 +1051,26 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:69 +#: cfp/views.py:70 msgid "Thank you for your help!" msgstr "Merci pour votre aide !" -#: cfp/views.py:74 +#: cfp/views.py:75 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:98 +#: cfp/views.py:97 msgid "Thank you for your participation!" msgstr "Merci pour votre participation !" -#: cfp/views.py:102 +#: cfp/views.py:101 msgid "Okay, no problem!" msgstr "Ok, pas de soucis !" -#: cfp/views.py:160 +#: cfp/views.py:173 msgid "" "Hi {},\n" "\n" @@ -1093,15 +1110,15 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:190 cfp/views.py:274 +#: cfp/views.py:203 cfp/views.py:287 msgid "You proposition have been successfully submitted!" msgstr "Votre proposition a été transmise avec succès !" -#: cfp/views.py:204 +#: cfp/views.py:217 msgid "Sorry, we do not know this email." msgstr "Désolé, nous ne connaissons pas cette e-mail." -#: cfp/views.py:209 +#: cfp/views.py:222 msgid "" "Hi {},\n" "\n" @@ -1132,41 +1149,41 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:229 +#: cfp/views.py:242 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:270 cfp/views.py:336 +#: cfp/views.py:283 cfp/views.py:356 msgid "Changes saved." msgstr "Modifications sauvegardées." -#: cfp/views.py:291 +#: cfp/views.py:304 msgid "You already confirmed your participation to this talk." msgstr "Vous avez déjà confirmé votre participation à cet exposé." -#: cfp/views.py:293 +#: cfp/views.py:306 msgid "You already cancelled your participation to this talk." msgstr "Vous avez déjà annulé votre participation à cet exposé." -#: cfp/views.py:298 +#: cfp/views.py:311 msgid "Your participation has been taken into account, thank you!" msgstr "Votre participation a été prise en compte, merci !" -#: cfp/views.py:299 +#: cfp/views.py:312 #, python-format msgid "Speaker %(speaker)s confirmed his/her participation." msgstr "L’intervenant %(speaker)s a confirmé sa participation." -#: cfp/views.py:301 +#: cfp/views.py:314 msgid "We have noted your unavailability." msgstr "Nous avons enregistré votre indisponibilité." -#: cfp/views.py:302 +#: cfp/views.py:315 #, python-format msgid "Speaker %(speaker)s CANCELLED his/her participation." msgstr "L’intervenant %(speaker)s a ANNULÉ sa participation." -#: cfp/views.py:343 +#: cfp/views.py:363 msgid "" "Hi {},\n" "\n" @@ -1206,59 +1223,59 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:374 cfp/views.py:393 +#: cfp/views.py:394 cfp/views.py:414 msgid "Co-speaker successfully added to the talk." msgstr "Co-intervenant ajouté à l’exposé avec succès." -#: cfp/views.py:406 +#: cfp/views.py:427 msgid "Co-speaker successfully removed from the talk." msgstr "Co-intervenant supprimé de l’exposé avec succès." -#: cfp/views.py:448 +#: cfp/views.py:469 msgid "The speaker confirmation have been noted." msgstr "La confirmation de l’orateur a été notée." -#: cfp/views.py:449 +#: cfp/views.py:470 msgid "The talk have been confirmed." msgstr "L’exposé a été confirmé." -#: cfp/views.py:451 +#: cfp/views.py:472 msgid "The speaker unavailability have been noted." msgstr "L’indisponibilité de l’intervenant a été notée." -#: cfp/views.py:452 +#: cfp/views.py:473 msgid "The talk have been cancelled." msgstr "L’exposé a été annulé." -#: cfp/views.py:527 cfp/views.py:629 +#: cfp/views.py:548 cfp/views.py:650 msgid "The talk has been accepted." msgstr "L’exposé a été accepté." -#: cfp/views.py:529 cfp/views.py:631 +#: cfp/views.py:550 cfp/views.py:652 msgid "The talk has been declined." msgstr "L’exposé a été décliné." -#: cfp/views.py:598 cfp/views.py:691 +#: cfp/views.py:619 cfp/views.py:712 msgid "Message sent!" msgstr "Message envoyé !" -#: cfp/views.py:612 +#: cfp/views.py:633 msgid "Vote successfully created" msgstr "A voté !" -#: cfp/views.py:612 +#: cfp/views.py:633 msgid "Vote successfully updated" msgstr "Vote mis à jour" -#: cfp/views.py:633 +#: cfp/views.py:654 msgid "Decision taken in account" msgstr "Décision enregistrée" -#: cfp/views.py:719 +#: cfp/views.py:747 msgid "[{}] You have been added to the staff team" msgstr "[{}] Vous avez été ajouté aux membres du staff" -#: cfp/views.py:720 +#: cfp/views.py:748 msgid "" "Hi {},\n" "\n" @@ -1282,15 +1299,15 @@ msgstr "" "{}\n" "\n" -#: cfp/views.py:741 +#: cfp/views.py:769 msgid "Modifications successfully saved." msgstr "Modification enregistrée avec succès." -#: cfp/views.py:818 +#: cfp/views.py:846 msgid "User created successfully." msgstr "Utilisateur créé avec succès." -#: cfp/views.py:839 +#: cfp/views.py:867 #, python-format msgid "Format '%s' not available" msgstr "Format '%s' non disponible" @@ -1372,9 +1389,6 @@ msgstr "Changement de mot de passe" msgid "Email address" msgstr "Adresse e-mail" -#~ msgid "Sorry, the Call for Participation is closed!" -#~ msgstr "Désolé, l’appel à participation est fermé !" - #~ msgid "Your proposition have been successfully submitted!" #~ msgstr "Votre proposition a été transmise avec succès !"