volunteers: link to user

This commit is contained in:
Élie Bouttier 2017-11-06 21:47:31 +01:00
parent 41f745384f
commit da785bd510
8 changed files with 165 additions and 138 deletions

View File

@ -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():

View File

@ -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

View File

@ -8,12 +8,14 @@
<h1>{% trans "Volunteer" %} <b>{{ volunteer.name }}</b></h1>
<dl class="dl-horizontal">
<dt>{% trans "Email" %}</dt>
<dt>{% trans "Email:" %}</dt>
<dd><a href="mailto:{{ volunteer.email }}">{{ volunteer.email }}</a></dd>
{% if volunteer.phone_number %}
<dt>{% trans "Phone number" %}</dt>
<dt>{% trans "Phone number:" %}</dt>
<dd><a href="tel:{{ volunteer.phone_number }}">{{ volunteer.phone_number }}</a>{% if volunteer.sms_prefered %} (SMS){% endif %}</dd>
{% endif %}
<dt>{% trans "Secret link:" %}</dt>
<dd><a href="{{ volunteer.get_secret_url }}">{{ volunteer.token }}</a></dd>
</dl>
{% if volunteer.notes %}

View File

@ -16,9 +16,9 @@
<p>{{ activity.description }}</p>
<p>
{% if volunteer not in activity.volunteers.all %}
<a class="btn btn-primary" href="{% url 'volunteer-join' volunteer_id=volunteer.token activity=activity.slug %}">{% trans "I will be happy to help on that!" %}</a>
<a class="btn btn-primary" href="{% url 'volunteer-join' volunteer_token=volunteer.token activity=activity.slug %}">{% trans "I will be happy to help on that!" %}</a>
{% else %}
<a class="btn btn-danger" href="{% url 'volunteer-quit' volunteer_id=volunteer.token activity=activity.slug %}">{% trans "Sorry, I have a setback" %}</a>
<a class="btn btn-danger" href="{% url 'volunteer-quit' volunteer_token=volunteer.token activity=activity.slug %}">{% trans "Sorry, I have a setback" %}</a>
{% endif %}
</p>
</p>

View File

@ -28,9 +28,9 @@ urlpatterns = [
url(r'^cfp/(?P<talk_id>[\w\-]+)/(?P<participant_id>[\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<volunteer_id>[\w\-]+)/$', views.volunteer_home, name='volunteer-home'),
url(r'^volunteer/(?P<volunteer_id>[\w\-]+)/join/(?P<activity>[\w\-]+)/$', views.volunteer_update_activity, {'join': True}, name='volunteer-join'),
url(r'^volunteer/(?P<volunteer_id>[\w\-]+)/quit/(?P<activity>[\w\-]+)/$', views.volunteer_update_activity, {'join': False}, name='volunteer-quit'),
url(r'^volunteer/(?P<volunteer_token>[\w\-]+)/$', views.volunteer_home, name='volunteer-home'),
url(r'^volunteer/(?P<volunteer_token>[\w\-]+)/join/(?P<activity>[\w\-]+)/$', views.volunteer_update_activity, {'join': True}, name='volunteer-join'),
url(r'^volunteer/(?P<volunteer_token>[\w\-]+)/quit/(?P<activity>[\w\-]+)/$', views.volunteer_update_activity, {'join': False}, name='volunteer-quit'),
#url(r'^talk/(?P<talk_id>[\w\-]+)/$', views.talk_show, name='show-talk'),
#url(r'^speaker/(?P<participant_id>[\w\-]+)/$', views.speaker_show, name='show-speaker'),
url(r'^staff/$', views.staff, name='staff'),

View File

@ -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

Binary file not shown.

View File

@ -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 ""
"Ladresse 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 "Jaccepte 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 "Jai 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é, lappel à 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 "
"<a href=\"%(mail_token_url)s\">here</a>."
msgstr ""
"Si vous avez déjà soumis une proposition et que vous souhaitez léditer, "
"cliquez <a href=\"%(mail_token_url)s\">ici</a>."
#: cfp/templates/cfp/proposal_dashboard.html:11
#, python-format
msgid "Welcome <b>%(name)s</b>!"
@ -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é, jai 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 sest proposé pour aucune activité."
@ -1006,7 +1023,7 @@ msgstr ""
msgid "We are looking for help with the following activities:"
msgstr "Nous cherchons de laide 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 "Lintervenant %(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 "Lintervenant %(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é à lexposé avec succès."
#: cfp/views.py:406
#: cfp/views.py:427
msgid "Co-speaker successfully removed from the talk."
msgstr "Co-intervenant supprimé de lexposé avec succès."
#: cfp/views.py:448
#: cfp/views.py:469
msgid "The speaker confirmation have been noted."
msgstr "La confirmation de lorateur a été notée."
#: cfp/views.py:449
#: cfp/views.py:470
msgid "The talk have been confirmed."
msgstr "Lexposé a été confirmé."
#: cfp/views.py:451
#: cfp/views.py:472
msgid "The speaker unavailability have been noted."
msgstr "Lindisponibilité de lintervenant a été notée."
#: cfp/views.py:452
#: cfp/views.py:473
msgid "The talk have been cancelled."
msgstr "Lexposé 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 "Lexposé 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 "Lexposé 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é, lappel à participation est fermé !"
#~ msgid "Your proposition have been successfully submitted!"
#~ msgstr "Votre proposition a été transmise avec succès !"