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 !"