]> git.parisson.com Git - teleforma.git/commitdiff
WIP
authorYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 25 Feb 2021 13:28:05 +0000 (14:28 +0100)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 25 Feb 2021 13:28:05 +0000 (14:28 +0100)
17 files changed:
teleforma/admin.py
teleforma/forms.py
teleforma/last_stable.txt [deleted file]
teleforma/locale/en/LC_MESSAGES/django.mo
teleforma/locale/en/LC_MESSAGES/django.po
teleforma/locale/fr/LC_MESSAGES/django.mo
teleforma/locale/fr/LC_MESSAGES/django.po
teleforma/migrations/0132_auto__del_field_course_written_speciality__del_field_course_synthesis_.py [new file with mode: 0644]
teleforma/models/core.py
teleforma/models/crfpa.py
teleforma/templates/teleforma/inc/newsitems_portlet.html
teleforma/templates/telemeta/base.html
teleforma/templates/telemeta/inc/user_list.html
teleforma/templates/telemeta/profile_detail.html
teleforma/urls.py
teleforma/views/ae.py
teleforma/views/core.py

index 62ca43ea8f8f11a9278439f8fdb1580467febd56..aa26ce323ace2e02d59b101c77e312f439cd5aa2 100644 (file)
@@ -238,15 +238,18 @@ class ProfileInline(admin.StackedInline):
 
 
 class UserProfileAdmin(UserAdmin):
-    inlines = [ProfileInline, StudentInline]
+    inlines = [ProfileInline, StudentInline, ProfessorProfileInline]
     search_fields = ['username', 'email']
 
 
 class TrainingAdmin(admin.ModelAdmin):
     model = Training
-    filter_horizontal = ['synthesis_note', 'obligation', 'procedure', 'oral_speciality',
-                         'written_speciality', 'oral_1', 'oral_2','magistral']
-    exclude = ['options']
+
+    if settings.TELEFORMA_E_LEARNING_TYPE != 'AE':
+        filter_horizontal = ['synthesis_note', 'obligation', 'procedure', 'oral_speciality',
+                            'written_speciality', 'oral_1', 'oral_2','magistral']
+    else:
+        filter_horizontal = []
 
 
 class CourseAdmin(admin.ModelAdmin):
index b8cf9b0226984189f24b8ffb6a873e03f6183e17..6b1161e269e0cf1fff1512224d80ea5eaaf79c51 100644 (file)
@@ -50,153 +50,278 @@ class ConferenceForm(ModelForm):
     class Meta:
         model = Conference
 
-
-#
-# class RegistrationForm(ModelForm):
-#     captcha = CaptchaField()
-#     accept = BooleanField()
-#
-#
-#     class Meta:
-#         model = User
-#         fields = ['first_name', 'last_name', 'email', 'accept']
-
-
-class UserForm(ModelForm):
-    # profile
-    address = CharField(label=_('Address'), max_length=255)
-    address_detail = CharField(label=_('Address detail'), max_length=255, required=False)
-    postal_code = CharField(label=_('Postal code'), max_length=255)
-    city = CharField(label=_('City'), max_length=255)
-    country = CharField(label=_('Country'), max_length=255)
-    telephone = CharField(label=_('Telephone'), max_length=255)
-    birthday = DateField(label=_('Birthday'), help_text="Au format jj/mm/aaaa")
-    # student
-    portrait = ImageField(widget=FileInput(attrs={'accept': "image/*;capture=camera"}), required=True,
-                          help_text="Veuillez utiliser une photo au format d'identité.")
-    level = ChoiceField(label=_('Studying level'), choices=LEVEL_CHOICES)
-    iej = ModelChoiceField(label='IEJ',
-                           queryset=IEJ.objects.all())
-    platform_only = forms.ChoiceField(choices = TRUE_FALSE_CHOICES,
-                                      label='E-learning uniquement',
-                                      widget=forms.Select())
-    period = ModelChoiceField(label='Période',
-                              queryset=Period.objects.filter(is_open=True,
-                                                             date_inscription_start__lte=datetime.datetime.now(),
-                                                             date_inscription_end__gte=datetime.datetime.now()))
-    training = ModelChoiceField(label='Formation',
-                                queryset=Training.objects.filter(available=True))
-    procedure = ModelChoiceField(label=_('Procedure'),
-                                 help_text="Matière de procédure",
-                                 queryset=Course.objects.filter(procedure=True))
-    written_speciality = ModelChoiceField(label='Specialité écrite',
-                                          queryset=Course.objects.filter(written_speciality=True),
-                                          help_text="Matière juridique de spécialité")
-    oral_1 = ModelChoiceField(label=_('Oral de langue (option)'),
-                              help_text="Matière d’oral de langue (en option)",
-                              queryset=Course.objects.filter(oral_1=True))
-    promo_code = CharField(label=_('Code promo'), max_length=100, required=False)
-
-    payment_schedule = ChoiceField(label=_(u'Échéancier de paiement'),
-                                 choices=payment_schedule_choices,
-                                 required=True)
-
-    fascicule = forms.ChoiceField(choices = TRUE_FALSE_CHOICES,
-                                  label='Envoi postal des fascicules',
-                                  required=False,
-                                  widget=forms.Select())
-    
-    # no model
-    captcha = CaptchaField()
-    accept = BooleanField()
-
+class BBBConferenceForm(ModelForm):
     class Meta:
-        model = User
-        fields = ['first_name', 'last_name', 'email']
-
-
-    def __init__(self, *args, **kwargs):
-        super(UserForm, self).__init__(*args, **kwargs)
-        self.fields['first_name'].required = True
-        self.fields['last_name'].required = True
-        self.fields['email'].required = True
-        self.user_fields = ['first_name', 'last_name', 'email', 'address', 'address_detail', 'postal_code', 'city', 'country', 'telephone', 'birthday', 'portrait']
-        self.training_fields = ['level', 'iej', 'platform_only', 'fascicule', 'period', 'training', 'procedure', 'written_speciality', 'oral_1']
-
-    def clean_portrait(self):
-        image = self.cleaned_data['portrait']
-        if not image:
-            return image
-        #width, height = get_image_dimensions(image)
-        #ratio = float(height) / float(width)
-        #if ratio > 2.5 or ratio < 1:
-        #    raise ValidationError({'portrait': "L'image n'est pas au format portrait."})
-        NEW_HEIGHT = 230
-        NEW_WIDTH = 180
-        #if width < NEW_WIDTH or height < NEW_HEIGHT:
-        #    raise ValidationError({'portrait': "L'image est trop petite. Elle doit faire au moins %spx de large et %spx de hauteur." % (NEW_WIDTH, NEW_HEIGHT)})
-
-        # resize image
-        img = Image.open(image.file)
-        new_image = img.resize((NEW_WIDTH, NEW_HEIGHT), Image.ANTIALIAS)
-
-        temp = StringIO()
-        new_image.save(temp, 'jpeg')
-        temp.seek(0)
-        return SimpleUploadedFile('temp', temp.read())
+        model = Conference
 
-    def save(self, commit=True):
 
-        data = self.cleaned_data
-        user = super(UserForm, self).save(commit=False)
-        username = get_unique_username(data['first_name'], data['last_name'])
-        self.username = username
-        user.username = username
-        user.last_name = data['last_name'].upper()
-        user.first_name = data['first_name'].capitalize()
-        user.is_active = False
-        if commit:
-            user.save()
-        profile = Profile(user=user,
-                          address=data['address'],
-                          address_detail=data.get('address_detail'),
-                          postal_code=data['postal_code'],
-                          city=data['city'],
-                          country=data['country'],
-                          telephone=data['telephone'],
-                          birthday=data['birthday']
-                          )
-        if commit:
-            profile.save()
-        platform_only = data.get('platform_only') == 'True' and True or False
-        fascicule = data.get('fascicule') == 'True' and True or False
-        training = data.get('training')
-        subscription_fees = 0
-        if platform_only:
-            if fascicule:
-                subscription_fees = training.cost_elearning_fascicle
+if settings.TELEFORMA_E_LEARNING_TYPE != 'AE':
+    class UserForm(ModelForm):
+        # profile
+        address = CharField(label=_('Address'), max_length=255)
+        address_detail = CharField(label=_('Address detail'), max_length=255, required=False)
+        postal_code = CharField(label=_('Postal code'), max_length=255)
+        city = CharField(label=_('City'), max_length=255)
+        country = CharField(label=_('Country'), max_length=255)
+        telephone = CharField(label=_('Telephone'), max_length=255)
+        birthday = DateField(label=_('Birthday'), help_text="Au format jj/mm/aaaa")
+        # student
+        portrait = ImageField(widget=FileInput(attrs={'accept': "image/*;capture=camera"}), required=True,
+                            help_text="Veuillez utiliser une photo au format d'identité.")
+        level = ChoiceField(label=_('Studying level'), choices=LEVEL_CHOICES)
+        iej = ModelChoiceField(label='IEJ',
+                            queryset=IEJ.objects.all())
+        platform_only = forms.ChoiceField(choices = TRUE_FALSE_CHOICES,
+                                        label='E-learning uniquement',
+                                        widget=forms.Select())
+        period = ModelChoiceField(label='Période',
+                                queryset=Period.objects.filter(is_open=True,
+                                                                date_inscription_start__lte=datetime.datetime.now(),
+                                                                date_inscription_end__gte=datetime.datetime.now()))
+        training = ModelChoiceField(label='Formation',
+                                    queryset=Training.objects.filter(available=True))
+
+        
+        procedure = ModelChoiceField(label=_('Procedure'),
+                                    help_text="Matière de procédure",
+                                    queryset=Course.objects.filter(procedure=True))
+        written_speciality = ModelChoiceField(label='Specialité écrite',
+                                            queryset=Course.objects.filter(written_speciality=True),
+                                            help_text="Matière juridique de spécialité")
+        oral_1 = ModelChoiceField(label=_('Oral de langue (option)'),
+                                help_text="Matière d’oral de langue (en option)",
+                                queryset=Course.objects.filter(oral_1=True))
+        promo_code = CharField(label=_('Code promo'), max_length=100, required=False)
+
+        payment_schedule = ChoiceField(label=_(u'Échéancier de paiement'),
+                                    choices=payment_schedule_choices,
+                                    required=True)
+
+        fascicule = forms.ChoiceField(choices = TRUE_FALSE_CHOICES,
+                                    label='Envoi postal des fascicules',
+                                    required=False,
+                                    widget=forms.Select())
+        
+        # no model
+        captcha = CaptchaField()
+        accept = BooleanField()
+
+        class Meta:
+            model = User
+            fields = ['first_name', 'last_name', 'email']
+
+
+        def __init__(self, *args, **kwargs):
+            super(UserForm, self).__init__(*args, **kwargs)
+            self.fields['first_name'].required = True
+            self.fields['last_name'].required = True
+            self.fields['email'].required = True
+            self.user_fields = ['first_name', 'last_name', 'email', 'address', 'address_detail', 'postal_code', 'city', 'country', 'telephone', 'birthday', 'portrait']
+            self.training_fields = ['level', 'iej', 'platform_only', 'fascicule', 'period', 'training', 'procedure', 'written_speciality', 'oral_1']
+
+        def clean_portrait(self):
+            image = self.cleaned_data['portrait']
+            if not image:
+                return image
+            #width, height = get_image_dimensions(image)
+            #ratio = float(height) / float(width)
+            #if ratio > 2.5 or ratio < 1:
+            #    raise ValidationError({'portrait': "L'image n'est pas au format portrait."})
+            NEW_HEIGHT = 230
+            NEW_WIDTH = 180
+            #if width < NEW_WIDTH or height < NEW_HEIGHT:
+            #    raise ValidationError({'portrait': "L'image est trop petite. Elle doit faire au moins %spx de large et %spx de hauteur." % (NEW_WIDTH, NEW_HEIGHT)})
+
+            # resize image
+            img = Image.open(image.file)
+            new_image = img.resize((NEW_WIDTH, NEW_HEIGHT), Image.ANTIALIAS)
+
+            temp = StringIO()
+            new_image.save(temp, 'jpeg')
+            temp.seek(0)
+            return SimpleUploadedFile('temp', temp.read())
+
+        def save(self, commit=True):
+
+            data = self.cleaned_data
+            user = super(UserForm, self).save(commit=False)
+            username = get_unique_username(data['first_name'], data['last_name'])
+            self.username = username
+            user.username = username
+            user.last_name = data['last_name'].upper()
+            user.first_name = data['first_name'].capitalize()
+            user.is_active = False
+            if commit:
+                user.save()
+            profile = Profile(user=user,
+                            address=data['address'],
+                            address_detail=data.get('address_detail'),
+                            postal_code=data['postal_code'],
+                            city=data['city'],
+                            country=data['country'],
+                            telephone=data['telephone'],
+                            birthday=data['birthday']
+                            )
+            if commit:
+                profile.save()
+            platform_only = data.get('platform_only') == 'True' and True or False
+            fascicule = data.get('fascicule') == 'True' and True or False
+            training = data.get('training')
+            subscription_fees = 0
+            if platform_only:
+                if fascicule:
+                    subscription_fees = training.cost_elearning_fascicle
+                else:
+                    subscription_fees = training.cost_elearning_nofascicle
             else:
-                subscription_fees = training.cost_elearning_nofascicle
-        else:
-            subscription_fees = training.cost
-        student = Student(user=user,
-                          portrait=data['portrait'],
-                          level=data.get('level'),
-                          iej=data.get('iej'),
-                          period=data.get('period'),
-                          platform_only=platform_only,
-                          procedure=data.get('procedure'),
-                          written_speciality=data.get('written_speciality'),
-                          oral_1=data.get('oral_1'),
-                          promo_code=data.get('promo_code'),
-                          training=training,
-                          payment_schedule=data.get('payment_schedule'),
-                          fascicule=fascicule,
-                          subscription_fees=subscription_fees
-                          )
-        student.save()
-        student.trainings.add(data.get('training', None))
-        return user
+                subscription_fees = training.cost
+            student = Student(user=user,
+                            portrait=data['portrait'],
+                            level=data.get('level'),
+                            iej=data.get('iej'),
+                            period=data.get('period'),
+                            platform_only=platform_only,
+                            procedure=data.get('procedure'),
+                            written_speciality=data.get('written_speciality'),
+                            oral_1=data.get('oral_1'),
+                            promo_code=data.get('promo_code'),
+                            training=training,
+                            payment_schedule=data.get('payment_schedule'),
+                            fascicule=fascicule,
+                            subscription_fees=subscription_fees
+                            )
+            student.save()
+            student.trainings.add(data.get('training', None))
+            return user
+
+
+else:
+    class UserForm(ModelForm):
+        # profile
+        address = CharField(label=_('Address'), max_length=255)
+        address_detail = CharField(label=_('Address detail'), max_length=255, required=False)
+        postal_code = CharField(label=_('Postal code'), max_length=255)
+        city = CharField(label=_('City'), max_length=255)
+        country = CharField(label=_('Country'), max_length=255)
+        telephone = CharField(label=_('Telephone'), max_length=255)
+        birthday = DateField(label=_('Birthday'), help_text="Au format jj/mm/aaaa")
+        # student
+        portrait = ImageField(widget=FileInput(attrs={'accept': "image/*;capture=camera"}), required=True,
+                            help_text="Veuillez utiliser une photo au format d'identité.")
+        level = ChoiceField(label=_('Studying level'), choices=LEVEL_CHOICES)
+        platform_only = forms.ChoiceField(choices = TRUE_FALSE_CHOICES,
+                                        label='E-learning uniquement',
+                                        widget=forms.Select())
+        period = ModelChoiceField(label='Période',
+                                queryset=Period.objects.filter(is_open=True,
+                                                                date_inscription_start__lte=datetime.datetime.now(),
+                                                                date_inscription_end__gte=datetime.datetime.now()))
+        training = ModelChoiceField(label='Formation',
+                                    queryset=Training.objects.filter(available=True))
+
+        
+        promo_code = CharField(label=_('Code promo'), max_length=100, required=False)
+
+        payment_schedule = ChoiceField(label=_(u'Échéancier de paiement'),
+                                    choices=payment_schedule_choices,
+                                    required=True)
+
+        fascicule = forms.ChoiceField(choices = TRUE_FALSE_CHOICES,
+                                    label='Envoi postal des fascicules',
+                                    required=False,
+                                    widget=forms.Select())
+        
+        # no model
+        captcha = CaptchaField()
+        accept = BooleanField()
+
+        class Meta:
+            model = User
+            fields = ['first_name', 'last_name', 'email']
+
+
+        def __init__(self, *args, **kwargs):
+            super(UserForm, self).__init__(*args, **kwargs)
+            self.fields['first_name'].required = True
+            self.fields['last_name'].required = True
+            self.fields['email'].required = True
+            self.user_fields = ['first_name', 'last_name', 'email', 'address', 'address_detail', 'postal_code', 'city', 'country', 'telephone', 'birthday', 'portrait']
+            self.training_fields = ['level', 'iej', 'platform_only', 'fascicule', 'period', 'training', 'procedure', 'written_speciality', 'oral_1']
+
+        def clean_portrait(self):
+            image = self.cleaned_data['portrait']
+            if not image:
+                return image
+            #width, height = get_image_dimensions(image)
+            #ratio = float(height) / float(width)
+            #if ratio > 2.5 or ratio < 1:
+            #    raise ValidationError({'portrait': "L'image n'est pas au format portrait."})
+            NEW_HEIGHT = 230
+            NEW_WIDTH = 180
+            #if width < NEW_WIDTH or height < NEW_HEIGHT:
+            #    raise ValidationError({'portrait': "L'image est trop petite. Elle doit faire au moins %spx de large et %spx de hauteur." % (NEW_WIDTH, NEW_HEIGHT)})
+
+            # resize image
+            img = Image.open(image.file)
+            new_image = img.resize((NEW_WIDTH, NEW_HEIGHT), Image.ANTIALIAS)
+
+            temp = StringIO()
+            new_image.save(temp, 'jpeg')
+            temp.seek(0)
+            return SimpleUploadedFile('temp', temp.read())
+
+        def save(self, commit=True):
+
+            data = self.cleaned_data
+            user = super(UserForm, self).save(commit=False)
+            username = get_unique_username(data['first_name'], data['last_name'])
+            self.username = username
+            user.username = username
+            user.last_name = data['last_name'].upper()
+            user.first_name = data['first_name'].capitalize()
+            user.is_active = False
+            if commit:
+                user.save()
+            profile = Profile(user=user,
+                            address=data['address'],
+                            address_detail=data.get('address_detail'),
+                            postal_code=data['postal_code'],
+                            city=data['city'],
+                            country=data['country'],
+                            telephone=data['telephone'],
+                            birthday=data['birthday']
+                            )
+            if commit:
+                profile.save()
+            platform_only = data.get('platform_only') == 'True' and True or False
+            fascicule = data.get('fascicule') == 'True' and True or False
+            training = data.get('training')
+            subscription_fees = 0
+            if platform_only:
+                if fascicule:
+                    subscription_fees = training.cost_elearning_fascicle
+                else:
+                    subscription_fees = training.cost_elearning_nofascicle
+            else:
+                subscription_fees = training.cost
+            student = Student(user=user,
+                            portrait=data['portrait'],
+                            level=data.get('level'),
+                            iej=data.get('iej'),
+                            period=data.get('period'),
+                            platform_only=platform_only,
+                            procedure=data.get('procedure'),
+                            written_speciality=data.get('written_speciality'),
+                            oral_1=data.get('oral_1'),
+                            promo_code=data.get('promo_code'),
+                            training=training,
+                            payment_schedule=data.get('payment_schedule'),
+                            fascicule=fascicule,
+                            subscription_fees=subscription_fees
+                            )
+            student.save()
+            student.trainings.add(data.get('training', None))
+            return user
 
 class CorrectorForm(ModelForm):
     # profile
diff --git a/teleforma/last_stable.txt b/teleforma/last_stable.txt
deleted file mode 100644 (file)
index b566610..0000000
+++ /dev/null
@@ -1 +0,0 @@
-312c5db
index a87753d7eb8377cff8b2cfcf83a7c6683002ae07..31c376ff6515f244482219530f59c0a37a9729fe 100644 (file)
Binary files a/teleforma/locale/en/LC_MESSAGES/django.mo and b/teleforma/locale/en/LC_MESSAGES/django.mo differ
index 357d50fbbc50430fcaa922dcd39000d723d24540..15377c5f5af5a942f09afd260a148f446b7f218a 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-13 15:58+0100\n"
+"POT-Creation-Date: 2020-12-15 16:21+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Guillaume Pellerin <yomguy@parisson.com>\n"
 "Language-Team: LANGUAGE <lists@parisson.com>\n"
@@ -16,338 +16,408 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1)\n"
 
-#: admin.py:20 exam/models.py:122 exam/models.py:225 models/ae.py:47
-#: models/core.py:113 models/core.py:148 models/core.py:288 models/core.py:547
-#: models/core.py:593 models/core.py:635 models/crfpa.py:81 models/crfpa.py:160
+#: admin.py:21 exam/models.py:140 exam/models.py:248 models/core.py:137
+#: models/core.py:176 models/core.py:334 models/core.py:656 models/core.py:698
+#: models/crfpa.py:83 models/crfpa.py:177 models/crfpa.py:188
+#: models/crfpa.py:249 models/crfpa.py:395 webclass/models.py:125
+#: webclass/models.py:380
 msgid "period"
 msgstr "période"
 
-#: admin.py:67
+#: admin.py:69
 msgid "Group"
 msgstr ""
 
-#: exam/models.py:62 exam/models.py:454
+#: admin.py:76
+msgid "balance"
+msgstr ""
+
+#: admin.py:265
+#, fuzzy
+msgid "date de début"
+msgstr "date d'ajout"
+
+#: forms.py:70 forms.py:206 models/crfpa.py:216
+#: templates/registration/registration_corrector_pdf.html:44
+#: templates/registration/registration_pdf.html:49
+#: templates/telemeta/profile_detail.html:82
+msgid "Address"
+msgstr "Adresse"
+
+#: forms.py:71 forms.py:207 models/crfpa.py:217
+#, fuzzy
+msgid "Address detail"
+msgstr "Adresse"
+
+#: forms.py:72 forms.py:208 models/crfpa.py:218
+msgid "Postal code"
+msgstr "Code postal"
+
+#: forms.py:73 forms.py:209 models/crfpa.py:219
+msgid "City"
+msgstr "Ville"
+
+#: forms.py:74 forms.py:210 models/crfpa.py:220
+msgid "Country"
+msgstr "Pays"
+
+#: forms.py:75 forms.py:211 models/crfpa.py:222
+#: templates/registration/registration_corrector_pdf.html:48
+#: templates/registration/registration_pdf.html:53
+#: templates/telemeta/profile_detail.html:83
+msgid "Telephone"
+msgstr "Téléphone"
+
+#: forms.py:76 forms.py:212
+#: templates/registration/registration_corrector_pdf.html:60
+#: templates/registration/registration_pdf.html:65
+msgid "Birthday"
+msgstr ""
+
+#: forms.py:80 templates/registration/registration_pdf.html:70
+#, fuzzy
+msgid "Studying level"
+msgstr "serveur de diffusion"
+
+#: forms.py:92 templates/telemeta/profile_detail.html:72
+#: templates/telemeta/inc/user_list.html:24
+msgid "Procedure"
+msgstr "Procédure"
+
+#: forms.py:98
+msgid "Oral de langue (option)"
+msgstr ""
+
+#: forms.py:101
+msgid "Code promo"
+msgstr ""
+
+#: forms.py:103
+msgid "Échéancier de paiement"
+msgstr ""
+
+#: forms.py:298
+msgid "Recipients"
+msgstr ""
+
+#: forms.py:298 templates/postman/base_folder.html:42
+#: templates/postman/reply.html:4
+msgid "Recipient"
+msgstr ""
+
+#: exam/models.py:79 exam/models.py:452
 msgid "rejected"
 msgstr "rejetée"
 
-#: exam/models.py:62
+#: exam/models.py:79
 msgid "draft"
 msgstr "brouillon"
 
-#: exam/models.py:62
+#: exam/models.py:79
 msgid "submitted"
 msgstr "soumise"
 
-#: exam/models.py:63
+#: exam/models.py:80
 msgid "pending"
 msgstr "en attente"
 
-#: exam/models.py:63 exam/models.py:439
+#: exam/models.py:80 exam/models.py:437
 msgid "marked"
 msgstr "corrigée"
 
-#: exam/models.py:63
+#: exam/models.py:80
 msgid "read"
 msgstr "lu"
 
-#: exam/models.py:63
+#: exam/models.py:81
 msgid "backup"
 msgstr "sauvegardé"
 
-#: exam/models.py:65
+#: exam/models.py:81
+#, fuzzy
+msgid "stat"
+msgstr "status"
+
+#: exam/models.py:83
 msgid "unreadable"
 msgstr "illisible"
 
-#: exam/models.py:66
+#: exam/models.py:84
 msgid "bad orientation"
 msgstr "mauvaise orientation"
 
-#: exam/models.py:67
+#: exam/models.py:85
 msgid "bad framing"
 msgstr "mauvais cadrage"
 
-#: exam/models.py:68
+#: exam/models.py:86
 msgid "incomplete"
 msgstr "incomplet"
 
-#: exam/models.py:69
+#: exam/models.py:87
 msgid "wrong course"
 msgstr "mauvaise matière"
 
-#: exam/models.py:70
+#: exam/models.py:88
 msgid "duplicate"
 msgstr "doublon"
 
-#: exam/models.py:71
+#: exam/models.py:89
 msgid "other"
 msgstr "autre"
 
-#: exam/models.py:72
+#: exam/models.py:90
 msgid "wrong format"
 msgstr "mauvais format"
 
-#: exam/models.py:73
+#: exam/models.py:91
 msgid "unreadable file"
 msgstr "fichier illisible"
 
-#: exam/models.py:74
+#: exam/models.py:92
 msgid "no file"
 msgstr "pas de fichier"
 
-#: exam/models.py:75
-msgid "file too large"
-msgstr "fichier trop gros"
-
-#: exam/models.py:76
+#: exam/models.py:93
 msgid "error retrieving file"
 msgstr ""
 
-#: exam/models.py:120 exam/models.py:224 models/core.py:215 models/core.py:290
-#: models/core.py:542 models/core.py:631 models/pro.py:45
+#: exam/models.py:94
+msgid "file too large"
+msgstr "fichier trop gros"
+
+#: exam/models.py:138 exam/models.py:247 models/core.py:261 models/core.py:336
+#: models/core.py:603 models/core.py:694 models/crfpa.py:394 models/pro.py:45
+#: webclass/models.py:126 webclass/models.py:381
 msgid "course"
 msgstr "matière"
 
-#: exam/models.py:121 exam/models.py:231
+#: exam/models.py:139 exam/models.py:253
 msgid "corrector"
 msgstr "correcteur"
 
-#: exam/models.py:123 exam/models.py:227 models/core.py:294 models/core.py:551
+#: exam/models.py:141 exam/models.py:250 models/core.py:340 models/core.py:614
 msgid "session"
 msgstr "séance"
 
-#: exam/models.py:124
+#: exam/models.py:142
 msgid "value"
 msgstr "valeur"
 
-#: exam/models.py:125 exam/templates/exam/quotas.html:22
+#: exam/models.py:143 exam/templates/exam/quotas.html:22
 msgid "date start"
 msgstr "date de début"
 
-#: exam/models.py:126 exam/templates/exam/quotas.html:23
+#: exam/models.py:144 exam/templates/exam/quotas.html:23
 msgid "date end"
 msgstr "date de fin"
 
-#: exam/models.py:127 exam/models.py:229 models/core.py:440 models/core.py:549
-#: models/core.py:639
+#: exam/models.py:145 exam/models.py:251 models/core.py:495 models/core.py:612
+#: models/core.py:702
 msgid "type"
 msgstr "type"
 
-#: exam/models.py:130
+#: exam/models.py:148
 msgid "Quota"
 msgstr ""
 
-#: exam/models.py:131 exam/templates/exam/quotas.html:12
+#: exam/models.py:149 exam/templates/exam/quotas.html:12
 msgid "Quotas"
 msgstr ""
 
-#: exam/models.py:180 models/core.py:509 models/pro.py:67
+#: exam/models.py:203 models/core.py:567 models/pro.py:67
 msgid "date added"
 msgstr "date d'ajout"
 
-#: exam/models.py:181 models/core.py:172 models/core.py:510 models/crfpa.py:263
+#: exam/models.py:204 models/core.py:200 models/core.py:568 models/crfpa.py:288
 #: models/pro.py:68
 msgid "date modified"
 msgstr "date de modification"
 
-#: exam/models.py:182
+#: exam/models.py:205
 msgid "UUID"
 msgstr ""
 
-#: exam/models.py:183
+#: exam/models.py:206
 msgid "MIME type"
 msgstr "Type MIME"
 
-#: exam/models.py:184
+#: exam/models.py:207
 msgid "sha1"
 msgstr ""
 
-#: exam/models.py:200
+#: exam/models.py:223
 msgid "script"
 msgstr "copie"
 
-#: exam/models.py:201
+#: exam/models.py:224
 msgid "Page file"
 msgstr "Fichier de page"
 
-#: exam/models.py:202
+#: exam/models.py:225
 msgid "Image file"
 msgstr "Fichier image"
 
-#: exam/models.py:203 models/pro.py:49 models/pro.py:85
+#: exam/models.py:226 models/pro.py:49 models/pro.py:85
 msgid "rank"
 msgstr "rang"
 
-#: exam/models.py:206
+#: exam/models.py:229
 msgid "Page"
 msgstr "Page"
 
-#: exam/models.py:207
+#: exam/models.py:230
 msgid "Pages"
 msgstr "Pages"
 
-#: exam/models.py:212 models/core.py:96 models/core.py:109 models/core.py:129
-#: models/core.py:153 models/core.py:222 models/core.py:272 models/core.py:525
-#: models/crfpa.py:45 models/crfpa.py:60 models/crfpa.py:79
-#: models/messages.py:12
+#: exam/models.py:235 models/appointment.py:29 models/appointment.py:293
+#: models/core.py:120 models/core.py:133 models/core.py:153 models/core.py:181
+#: models/core.py:268 models/core.py:318 models/core.py:583 models/crfpa.py:47
+#: models/crfpa.py:62 models/crfpa.py:81 models/messages.py:12
 msgid "name"
 msgstr "nom"
 
-#: exam/models.py:215
+#: exam/models.py:238
 msgid "ScriptType"
 msgstr "Type de copie"
 
-#: exam/models.py:216
+#: exam/models.py:239
 msgid "ScriptTypes"
 msgstr "Types de copies"
 
-#: exam/models.py:230
+#: exam/models.py:252
 msgid "author"
 msgstr "auteur"
 
-#: exam/models.py:232
+#: exam/models.py:254
 msgid "PDF file"
 msgstr "Fichier PDF"
 
-#: exam/models.py:233
+#: exam/models.py:255
 msgid "Box UUID"
 msgstr ""
 
-#: exam/models.py:234
+#: exam/models.py:256
 msgid "score"
 msgstr "note"
 
-#: exam/models.py:235 models/pro.py:125
+#: exam/models.py:257 models/pro.py:125
 msgid "comments"
 msgstr "commentaires"
 
-#: exam/models.py:236 models/core.py:303 models/pro.py:48 models/pro.py:88
-#: models/pro.py:104
+#: exam/models.py:258 models/core.py:349 models/pro.py:48 models/pro.py:88
+#: models/pro.py:104 webclass/models.py:132
 msgid "status"
 msgstr "status"
 
-#: exam/models.py:237
+#: exam/models.py:259
 msgid "reason"
 msgstr "raison"
 
-#: exam/models.py:238
+#: exam/models.py:260
 msgid "date submitted"
 msgstr "date de soumission"
 
-#: exam/models.py:239
+#: exam/models.py:261
 msgid "date marked"
 msgstr "date de correction"
 
-#: exam/models.py:240
+#: exam/models.py:262
 msgid "date rejected"
 msgstr "date de rejet"
 
-#: exam/models.py:241
+#: exam/models.py:263
 msgid "URL"
 msgstr ""
 
-#: exam/models.py:245 exam/templates/exam/inc/script_list.html:14
-#: templates/teleforma/course.html:50
+#: exam/models.py:268 exam/models.py:270 exam/templates/exam/scripts.html:83
+#: exam/templates/exam/inc/script_list.html:14
+#: templates/teleforma/course.html:52
 #: templates/teleforma/course_conference.html:39
 #: templates/teleforma/course_conference.html:67
 #: templates/teleforma/course_conference_audio.html:68
-#: templates/teleforma/course_media.html:86
-#: templates/teleforma/course_media.html:138
+#: templates/teleforma/course_media.html:87
+#: templates/teleforma/course_media.html:139
 #: templates/teleforma/course_media_video_embed.html:34
 #: templates/teleforma/inc/conference_list.html:26
 #: templates/teleforma/inc/media_list.html:37
-#: templates/teleforma/inc/media_list_pending.html:37
+#: templates/teleforma/inc/media_list_pending.html:38
 msgid "Session"
 msgstr "Séance"
 
-#: exam/models.py:258 exam/models.py:438 exam/models.py:453
+#: exam/models.py:286 exam/models.py:436 exam/models.py:451
 msgid "Script"
 msgstr "Copie"
 
-#: exam/models.py:259 exam/templates/exam/scripts.html:21
-#: templates/telemeta/base.html:116 templates/telemeta/base.html:121
+#: exam/models.py:287 exam/templates/exam/scripts.html:21
+#: templates/telemeta/base.html:122 templates/telemeta/base.html.py:127
 msgid "Scripts"
 msgstr "Copies"
 
-#: exam/templates/exam/inc/script_list.html:13
-#: exam/templates/exam/quotas.html:21
-#: templates/teleforma/course_conference.html:66
-#: templates/teleforma/course_media.html:137
-#: templates/teleforma/course_media_video_embed.html:33
-msgid "Course"
-msgstr "Matière"
-
-#: exam/templates/exam/inc/script_list.html:15
-#: templates/telemeta/inc/module_revisions.html:18
-#: templates/telemeta/lists.html:70
-msgid "Type"
-msgstr "Type"
+#: exam/views.py:221
+msgid "Pending scripts"
+msgstr "Copies en attente"
 
-#: exam/templates/exam/inc/script_list.html:16
-#: templates/telemeta/inc/user_list.html:19
-#: templates/telemeta/profile_detail.html:60
-msgid "Last Name"
-msgstr "Nom"
+#: exam/views.py:232
+msgid "Treated scripts"
+msgstr "Copie traitées"
 
-#: exam/templates/exam/inc/script_list.html:17
-#: templates/telemeta/inc/user_list.html:20
-#: templates/telemeta/profile_detail.html:59
-msgid "First Name"
-msgstr "Prénom"
+#: exam/views.py:241
+msgid "Rejected scripts"
+msgstr "Copies rejetées"
 
-#: exam/templates/exam/inc/script_list.html:18
-msgid "Submission date"
-msgstr "Date de soumission"
+#: exam/views.py:258
+msgid ""
+"Error: you have already submitted a script for this session, the same course "
+"and the same type!"
+msgstr ""
 
-#: exam/templates/exam/inc/script_list.html:19
-msgid "Mark date"
-msgstr "Date de correction"
+#: exam/views.py:262
+msgid ""
+"You have successfully submitted your script. It will be processed in the "
+"next hours."
+msgstr ""
+"Vous avez correctement soumis votre copie. Elle sera traitée dans les "
+"prochaines heures puis corrigée."
 
-#: exam/templates/exam/inc/script_list.html:20
-#: exam/templates/exam/quotas.html:20
-msgid "Corrector"
-msgstr "Correcteur"
+#: exam/views.py:266
+msgid ""
+"There was a problem with your submission. Please try again, later if "
+"possible."
+msgstr ""
+"Il y a une une erreur lors de votre soumission de copie. Merci de vérifier "
+"votre fichier ou de réessayer plus tard."
 
-#: exam/templates/exam/inc/script_list.html:21
-#: exam/templates/exam/script_detail.html:36
-msgid "Score"
-msgstr "Note"
+#: exam/views.py:311
+msgid "You must add your score to access to the statistics."
+msgstr ""
 
-#: exam/templates/exam/messages/script_fix.txt:9
-#: exam/templates/exam/messages/script_marked.txt:9
-#: exam/templates/exam/messages/script_rejected.txt:7
-#: templates/postman/email_user_init.txt:24
-msgid "Best regards"
-msgstr "Cordialement"
+#: exam/views.py:390
+msgid "all courses"
+msgstr "toutes les matières"
 
-#: exam/templates/exam/messages/script_fix.txt:10
-#: exam/templates/exam/messages/script_marked.txt:10
-#: exam/templates/exam/messages/script_rejected.txt:8
-#: templates/postman/email_user.txt:20 templates/postman/email_user_init.txt:25
-#: templates/postman/email_visitor.txt:16
-msgid "The site administrator"
-msgstr "L'administrateur du site"
+#: exam/templates/exam/mass_score_form.html:139
+#: exam/templates/exam/score_form.html:82
+#: exam/templates/exam/script_form.html:91
+#: templates/registration/registration_form.html:125
+msgid "Submit"
+msgstr "Soumettre"
 
-#: exam/templates/exam/messages/script_fix.txt:10
-#: exam/templates/exam/messages/script_marked.txt:10
-#: exam/templates/exam/messages/script_rejected.txt:8
-#: templates/postman/email_user_init.txt:25
-msgid "of the"
-msgstr "du"
+#: exam/templates/exam/quotas.html:20 exam/templates/exam/scripts.html:68
+#: exam/templates/exam/inc/script_list.html:20
+msgid "Corrector"
+msgstr "Correcteur"
 
-#: exam/templates/exam/messages/script_fix.txt:13
-#: exam/templates/exam/messages/script_marked.txt:13
-#: exam/templates/exam/messages/script_rejected.txt:11
-#: templates/postman/email_user.txt:22 templates/postman/email_user_init.txt:28
-#: templates/postman/email_visitor.txt:18
-msgid ""
-"Note: This message is issued by an automated system.\n"
-"Do not reply, this would not be taken into account."
-msgstr ""
-"NB: Ce message est émis par un automate. Ne faites pas de réponse, elle ne "
-"serait pas prise en compte."
+#: exam/templates/exam/quotas.html:21 exam/templates/exam/scripts.html:76
+#: exam/templates/exam/inc/script_list.html:13 models/appointment.py:31
+#: models/crfpa.py:251 templates/teleforma/course_conference.html:66
+#: templates/teleforma/course_media.html:138
+#: templates/teleforma/course_media_video_embed.html:33
+msgid "Course"
+msgstr "Matière"
 
 #: exam/templates/exam/quotas.html:24 exam/templates/exam/scripts.html:25
-#: templates/teleforma/courses.html:48
+#: templates/teleforma/courses.html:51
 msgid "Pending"
 msgstr "En attente"
 
@@ -363,70 +433,66 @@ msgstr "Valeur"
 msgid "Level"
 msgstr "Niveau"
 
-#: exam/templates/exam/score_form.html:32 exam/templates/exam/scores.html:37
+#: exam/templates/exam/score_form.html:32 exam/templates/exam/scores.html:33
 msgid "New score"
 msgstr "Nouvelle note"
 
-#: exam/templates/exam/score_form.html:60
-#: exam/templates/exam/script_form.html:78
-#: templates/registration/registration_form.html:22
-msgid "Submit"
-msgstr "Soumettre"
-
 #: exam/templates/exam/scores.html:20 templates/teleforma/annals.html:15
-#: templates/telemeta/profile_detail.html:16
+#: templates/telemeta/profile_detail.html:17
 msgid "My courses"
 msgstr "Mes matières"
 
-#: exam/templates/exam/scores.html:48 templates/telemeta/base.html:133
-#: templates/telemeta/base.html:135
+#: exam/templates/exam/scores.html:49 templates/telemeta/base.html:143
+#: templates/telemeta/base.html.py:145
 msgid "Scores"
 msgstr "Notes"
 
-#: exam/templates/exam/script_detail.html:33
+#: exam/templates/exam/script_detail.html:55
 msgid "Topic"
 msgstr "Sujet"
 
-#: exam/templates/exam/script_detail.html:37
-#: exam/templates/exam/script_detail.html:54
+#: exam/templates/exam/script_detail.html:58
+#: exam/templates/exam/inc/script_list.html:21 templates/quiz/progress.html:60
+#: templates/quiz/sitting_detail.html:15 templates/quiz/sitting_list.html:16
+msgid "Score"
+msgstr "Note"
+
+#: exam/templates/exam/script_detail.html:59
+#: exam/templates/exam/script_detail.html:76
 msgid "Comments"
 msgstr "Commentaire"
 
-#: exam/templates/exam/script_detail.html:38
-msgid "Imprimer"
-msgstr ""
-
-#: exam/templates/exam/script_detail.html:40
-#: exam/templates/exam/scripts.html:27 templates/postman/view.html:25
+#: exam/templates/exam/script_detail.html:62
+#: exam/templates/exam/scripts.html:27 templates/postman/view.html:33
 msgid "Rejected"
 msgstr "Rejeté"
 
-#: exam/templates/exam/script_detail.html:43
+#: exam/templates/exam/script_detail.html:65
 msgid "Scoring"
 msgstr "Noter"
 
-#: exam/templates/exam/script_detail.html:44
-#: exam/templates/exam/script_detail.html:85
-#: exam/templates/exam/script_detail.html:103
+#: exam/templates/exam/script_detail.html:66
+#: exam/templates/exam/script_detail.html:107
+#: exam/templates/exam/script_detail.html:125
 msgid "Reject"
 msgstr "Rejeter"
 
-#: exam/templates/exam/script_detail.html:46
+#: exam/templates/exam/script_detail.html:68
 msgid "Submitted"
 msgstr "Soumise"
 
-#: exam/templates/exam/script_detail.html:58
+#: exam/templates/exam/script_detail.html:80
 msgid "Mark"
 msgstr "Note"
 
-#: exam/templates/exam/script_detail.html:80
-#: templates/postman/base_write.html:63
-#: templates/teleforma/inc/chat_room.html:13
+#: exam/templates/exam/script_detail.html:102
+#: templates/postman/base_write.html:110
+#: templates/teleforma/inc/chat_room.html:17
 msgid "Send"
 msgstr "Envoyer"
 
-#: exam/templates/exam/script_detail.html:108 templates/teleforma/help.html:11
-#: templates/telemeta/base.html:148 templates/telemeta/base.html:157
+#: exam/templates/exam/script_detail.html:130 templates/teleforma/help.html:11
+#: templates/telemeta/base.html:159 templates/telemeta/base.html.py:169
 msgid "Help"
 msgstr "Aide"
 
@@ -442,541 +508,590 @@ msgstr "Copie vierge"
 msgid "Answers"
 msgstr "Réponses"
 
-#: exam/templates/exam/scripts.html:67
-msgid "No scripts"
-msgstr "Aucune copie"
-
-#: exam/views.py:106
-msgid "Pending scripts"
-msgstr "Copies en attente"
-
-#: exam/views.py:132
-msgid "Treated scripts"
-msgstr "Copie traitées"
-
-#: exam/views.py:154
-msgid "Rejected scripts"
-msgstr "Copies rejetées"
-
-#: exam/views.py:173
-msgid ""
-"Error: you have already submitted a script for this session, the same course "
-"and the same type!"
-msgstr ""
+#: exam/templates/exam/scripts.html:90
+#: exam/templates/exam/inc/script_list.html:15 templates/telemeta/lists.html:70
+#: templates/telemeta/inc/module_revisions.html:18
+msgid "Type"
+msgstr "Type"
 
-#: exam/views.py:177
-msgid ""
-"You have successfully submitted your script. It will be processed in the "
-"next hours."
+#: exam/templates/exam/scripts.html:98
+msgid "E-learning uniquement"
 msgstr ""
-"Vous avez correctement soumis votre copie. Elle sera traitée dans les "
-"prochaines heures puis corrigée."
 
-#: exam/views.py:181
-msgid ""
-"There was a problem with your submission. Please try again, later if "
-"possible."
-msgstr ""
-"Il y a une une erreur lors de votre soumission de copie. Merci de vérifier "
-"votre fichier ou de réessayer plus tard."
+#: exam/templates/exam/scripts.html:113
+msgid "No scripts"
+msgstr "Aucune copie"
 
-#: exam/views.py:218
-msgid "You must add your score to access to the statistics."
-msgstr ""
+#: exam/templates/exam/inc/script_list.html:16
+#: templates/telemeta/profile_detail.html:65
+#: templates/telemeta/inc/user_list.html:20
+msgid "Last Name"
+msgstr "Nom"
 
-#: exam/views.py:282
-msgid "all courses"
-msgstr "toutes les matières"
+#: exam/templates/exam/inc/script_list.html:17
+#: templates/telemeta/profile_detail.html:64
+#: templates/telemeta/inc/user_list.html:21
+msgid "First Name"
+msgstr "Prénom"
 
-#: models/ae.py:46 models/core.py:237 models/crfpa.py:132 models/crfpa.py:230
-#: models/pro.py:101 models/pro.py:140
-msgid "user"
-msgstr "utilisateur"
+#: exam/templates/exam/inc/script_list.html:18
+msgid "Submission date"
+msgstr "Date de soumission"
 
-#: models/ae.py:49
-msgid "platform only"
-msgstr "plateforme seulement"
+#: exam/templates/exam/inc/script_list.html:19
+msgid "Mark date"
+msgstr "Date de correction"
 
-#: models/ae.py:51 models/core.py:223 models/core.py:239
-msgid "courses"
-msgstr "matières"
+#: exam/templates/exam/messages/script_fix.txt:9
+#: exam/templates/exam/messages/script_marked.txt:9
+#: exam/templates/exam/messages/script_rejected.txt:7
+#: templates/postman/email_user_init.txt:22
+msgid "Best regards"
+msgstr "Cordialement"
 
-#: models/ae.py:62
-msgid "AE student"
-msgstr "Etudiant AE"
+#: exam/templates/exam/messages/script_fix.txt:10
+#: exam/templates/exam/messages/script_marked.txt:10
+#: exam/templates/exam/messages/script_rejected.txt:8
+#: templates/postman/email_user.txt:20 templates/postman/email_user_init.txt:23
+#: templates/postman/email_visitor.txt:16
+msgid "The site administrator"
+msgstr "L'administrateur du site"
 
-#: models/core.py:75
-msgid "check"
-msgstr ""
+#: exam/templates/exam/messages/script_fix.txt:10
+#: exam/templates/exam/messages/script_marked.txt:10
+#: exam/templates/exam/messages/script_rejected.txt:8
+#: templates/postman/email_user_init.txt:23
+msgid "of the"
+msgstr "du"
 
-#: models/core.py:75
-msgid "transfer"
+#: exam/templates/exam/messages/script_fix.txt:13
+#: exam/templates/exam/messages/script_marked.txt:13
+#: exam/templates/exam/messages/script_rejected.txt:11
+#: templates/postman/email_user.txt:22 templates/postman/email_user_init.txt:25
+#: templates/postman/email_visitor.txt:18
+msgid ""
+"Note: This message is issued by an automated system.\n"
+"Do not reply, this would not be taken into account."
 msgstr ""
+"NB: Ce message est émis par un automate. Ne faites pas de réponse, elle ne "
+"serait pas prise en compte."
 
-#: models/core.py:75
-#, fuzzy
-#| msgid "credits"
-msgid "credit card"
-msgstr "crédits"
-
-#: models/core.py:75
-msgid "money"
+#: models/appointment.py:38
+msgid "activer la prise de rendez-vous"
 msgstr ""
 
-#: models/core.py:78
+#: models/core.py:92
 msgid "Hidden"
 msgstr "Caché"
 
-#: models/core.py:79
+#: models/core.py:93
 msgid "Private"
 msgstr "Privé"
 
-#: models/core.py:80
+#: models/core.py:94 webclass/models.py:28
 msgid "Draft"
 msgstr "Brouillon"
 
-#: models/core.py:81
+#: models/core.py:95 webclass/models.py:29
 msgid "Public"
 msgstr "Publié"
 
-#: models/core.py:97 models/core.py:110 models/core.py:130 models/core.py:154
-#: models/core.py:169 models/core.py:273 models/core.py:441 models/core.py:507
-#: models/core.py:526 models/crfpa.py:46 models/crfpa.py:80 models/crfpa.py:277
-#: models/crfpa.py:290 models/crfpa.py:303 models/pro.py:124
+#: models/core.py:121 models/core.py:134 models/core.py:154 models/core.py:182
+#: models/core.py:197 models/core.py:319 models/core.py:496 models/core.py:565
+#: models/core.py:584 models/crfpa.py:48 models/crfpa.py:82 models/crfpa.py:309
+#: models/crfpa.py:322 models/crfpa.py:335 models/pro.py:124
 msgid "description"
 msgstr "description"
 
-#: models/core.py:104 models/core.py:111 models/core.py:271 models/pro.py:123
+#: models/core.py:128 models/core.py:135 models/core.py:317 models/pro.py:123
 msgid "organization"
 msgstr "organisation"
 
-#: models/core.py:112
+#: models/core.py:136
 msgid "Master domain"
 msgstr ""
 
-#: models/core.py:124 models/core.py:133 models/core.py:167 models/core.py:242
-#: models/core.py:286
+#: models/core.py:148 models/core.py:157 models/core.py:195 models/core.py:288
+#: models/core.py:332 webclass/models.py:124
 msgid "department"
 msgstr "département"
 
-#: models/core.py:131 models/crfpa.py:82
+#: models/core.py:155 models/crfpa.py:84
 msgid "parent"
 msgstr ""
 
-#: models/core.py:135 models/core.py:299
+#: models/core.py:159 models/core.py:345
 msgid "begin date"
 msgstr "date de début"
 
-#: models/core.py:136 models/core.py:300
+#: models/core.py:160 models/core.py:346
 msgid "end date"
 msgstr "date de fin"
 
-#: models/core.py:137
+#: models/core.py:161
 msgid "date d'init de mot de passe"
 msgstr ""
 
-#: models/core.py:138
+#: models/core.py:162
 msgid "message pour internaute"
 msgstr ""
 
-#: models/core.py:139
+#: models/core.py:163
 msgid "message pour presentielle"
 msgstr ""
 
-#: models/core.py:140
+#: models/core.py:164
 msgid "is open"
 msgstr ""
 
-#: models/core.py:141
+#: models/core.py:165
 msgid "date de fin d'examens"
 msgstr ""
 
-#: models/core.py:161 models/core.py:291 models/core.py:544 models/core.py:633
+#: models/core.py:166
+msgid "nombre maximal de copies"
+msgstr ""
+
+#: models/core.py:189 models/core.py:337 models/core.py:605 models/core.py:696
 msgid "course type"
 msgstr "type de matière"
 
-#: models/core.py:168 models/core.py:506 models/pro.py:46 models/pro.py:83
+#: models/core.py:196 models/core.py:564 models/pro.py:46 models/pro.py:83
 msgid "title"
 msgstr "titre"
 
-#: models/core.py:170 models/core.py:511 models/crfpa.py:78
+#: models/core.py:198 models/core.py:569 models/crfpa.py:80
 msgid "code"
 msgstr "cote"
 
-#: models/core.py:171
+#: models/core.py:199
 msgid "tweeter title"
 msgstr "titre tweeter"
 
-#: models/core.py:173 models/core.py:527
+#: models/core.py:201 models/core.py:585
 msgid "number"
 msgstr "nombre"
 
-#: models/core.py:174 models/crfpa.py:83
+#: models/core.py:202 models/crfpa.py:87
 msgid "synthesis note"
 msgstr "note de synthèse"
 
-#: models/core.py:175 models/crfpa.py:86
+#: models/core.py:203 models/crfpa.py:90
 msgid "obligations"
 msgstr "obligations"
 
-#: models/core.py:176 models/crfpa.py:107
+#: models/core.py:204 models/crfpa.py:111
 msgid "magistral"
 msgstr "magistral"
 
-#: models/core.py:177 models/crfpa.py:89 models/crfpa.py:140
+#: models/core.py:205 models/crfpa.py:93 models/crfpa.py:160
 msgid "procedure"
 msgstr "procédure"
 
-#: models/core.py:178
+#: models/core.py:206
 #, fuzzy
-#| msgid "written speciality"
 msgid "written_speciality"
 msgstr "spécialité écrit"
 
-#: models/core.py:179
+#: models/core.py:207
 #, fuzzy
-#| msgid "oral speciality"
 msgid "oral_speciality"
 msgstr "spécialité orale"
 
-#: models/core.py:180
+#: models/core.py:208
 msgid "oral_1"
 msgstr ""
 
-#: models/core.py:181
+#: models/core.py:209
 msgid "oral_2"
 msgstr ""
 
-#: models/core.py:182
+#: models/core.py:210
 msgid "copies d'examen"
 msgstr ""
 
-#: models/core.py:231
+#: models/core.py:211
+msgid "quiz"
+msgstr ""
+
+#: models/core.py:219
+#, fuzzy
+msgid "types"
+msgstr "type"
+
+#: models/core.py:269 models/core.py:285 models/crfpa.py:191
+msgid "courses"
+msgstr "matières"
+
+#: models/core.py:277
 #, fuzzy
-#| msgid "course type"
 msgid "course group"
 msgstr "type de matière"
 
-#: models/core.py:265 models/core.py:292
+#: models/core.py:283 models/core.py:851 models/crfpa.py:215
+#: models/crfpa.py:248 models/pro.py:101 models/pro.py:140
+msgid "user"
+msgstr "utilisateur"
+
+#: models/core.py:311 models/core.py:338 webclass/models.py:161
 msgid "professor"
 msgstr "professeur"
 
-#: models/core.py:280 models/core.py:296
+#: models/core.py:326 models/core.py:342
 msgid "room"
 msgstr "salle"
 
-#: models/core.py:285
+#: models/core.py:331
 msgid "public_id"
 msgstr "public id"
 
-#: models/core.py:298
+#: models/core.py:344
 msgid "comment"
 msgstr "commentaire"
 
-#: models/core.py:301 models/core.py:559 models/core.py:597 models/core.py:640
+#: models/core.py:347 models/core.py:622 models/core.py:660 models/core.py:703
 msgid "readers"
 msgstr ""
 
-#: models/core.py:304 models/crfpa.py:65 models/crfpa.py:66
+#: models/core.py:350 models/core.py:519
+msgid "streaming"
+msgstr "diffusion"
+
+#: models/core.py:351 models/crfpa.py:67 models/crfpa.py:68
 msgid "web class group"
 msgstr ""
 
-#: models/core.py:430 models/core.py:458 models/core.py:545 models/core.py:629
+#: models/core.py:485 models/core.py:513 models/core.py:606 models/core.py:692
 msgid "conference"
 msgstr "conférence"
 
-#: models/core.py:438
+#: models/core.py:493
 msgid "host"
 msgstr "hôte"
 
-#: models/core.py:439
+#: models/core.py:494
 msgid "port"
 msgstr "port"
 
-#: models/core.py:442
+#: models/core.py:497
 msgid "source password"
 msgstr ""
 
-#: models/core.py:443
+#: models/core.py:498
 msgid "admin password"
 msgstr ""
 
-#: models/core.py:450 models/core.py:461
+#: models/core.py:505 models/core.py:516
 msgid "streaming server"
 msgstr "serveur de diffusion"
 
-#: models/core.py:462
+#: models/core.py:517
 msgid "Streaming type"
 msgstr "Type de flux"
 
-#: models/core.py:464
-msgid "streaming"
-msgstr "diffusion"
-
-#: models/core.py:500
+#: models/core.py:558
 msgid "live stream"
 msgstr "stream en direct"
 
-#: models/core.py:508
+#: models/core.py:566
 msgid "credits"
 msgstr "crédits"
 
-#: models/core.py:512
+#: models/core.py:570
 msgid "published"
 msgstr "publié"
 
-#: models/core.py:513
+#: models/core.py:571
 msgid "mime type"
 msgstr "Type mime"
 
-#: models/core.py:514 models/pro.py:86
+#: models/core.py:572 models/pro.py:86
 msgid "weight"
 msgstr "poids"
 
-#: models/core.py:534
+#: models/core.py:595
 msgid "document type"
 msgstr "type de document"
 
-#: models/core.py:553 models/crfpa.py:133
+#: models/core.py:610
+#, fuzzy
+msgid "periods"
+msgstr "période"
+
+#: models/core.py:616 models/core.py:852 webclass/models.py:127
 msgid "iej"
 msgstr "iej"
 
-#: models/core.py:555
+#: models/core.py:618
 msgid "annal"
 msgstr "annale"
 
-#: models/core.py:556
-msgid "year"
-msgstr "année"
+#: models/core.py:619
+msgid "year"
+msgstr "année"
+
+#: models/core.py:620 models/core.py:658
+msgid "file"
+msgstr "fichier"
+
+#: models/core.py:856 models/crfpa.py:131
+#, fuzzy
+msgid "e-learning platform only"
+msgstr "plateforme seulement"
+
+#: models/core.py:857
+msgid "application fees"
+msgstr "frais de dossier"
+
+#: models/core.py:859
+msgid "subscription fees"
+msgstr "frais d'inscription"
+
+#: models/core.py:860
+msgid "promo code"
+msgstr ""
+
+#: models/core.py:861 models/crfpa.py:256
+#, fuzzy
+msgid "registration date"
+msgstr "Inscription"
+
+#: models/core.py:862
+msgid "subscription date"
+msgstr "date d'inscription"
+
+#: models/core.py:863
+msgid "subscribed"
+msgstr "inscrit"
+
+#: models/core.py:864
+msgid "confirmation sent"
+msgstr "confirmation envoyée"
+
+#: models/core.py:865
+#, fuzzy
+msgid "studying level"
+msgstr "serveur de diffusion"
+
+#: models/core.py:867
+msgid "balance de paiement"
+msgstr ""
+
+#: models/core.py:870
+msgid "envoi des fascicules"
+msgstr ""
+
+#: models/core.py:873
+#, fuzzy
+msgid "type de paiement"
+msgstr "département"
 
-#: models/core.py:557 models/core.py:595
-msgid "file"
-msgstr "fichier"
+#: models/core.py:876
+msgid "échéancier de paiement"
+msgstr ""
+
+#: models/core.py:880
+#, fuzzy
+msgid "commentaire"
+msgstr "commentaire"
 
-#: models/crfpa.py:53 models/crfpa.py:54 models/crfpa.py:61
-#: templates/registration/registration_pdf.html:48
-#: templates/teleforma/annals.html:31 templates/telemeta/inc/user_list.html:21
-#: templates/telemeta/profile_detail.html:64 templates/telemeta/users.html:28
+#: models/crfpa.py:55 models/crfpa.py:56 models/crfpa.py:63
+#: templates/registration/registration_pdf.html:74
+#: templates/teleforma/annals.html:31 templates/telemeta/profile_detail.html:69
+#: templates/telemeta/users.html:28 templates/telemeta/inc/user_list.html:22
 msgid "IEJ"
 msgstr "IEJ"
 
-#: models/crfpa.py:92 models/crfpa.py:143 models/crfpa.py:146
+#: models/crfpa.py:96 models/crfpa.py:118 models/crfpa.py:163
 msgid "written speciality"
 msgstr "spécialité écrit"
 
-#: models/crfpa.py:95 models/crfpa.py:149
+#: models/crfpa.py:99 models/crfpa.py:166
 msgid "oral speciality"
 msgstr "spécialité orale"
 
-#: models/crfpa.py:98
+#: models/crfpa.py:102
 msgid "oral 1"
 msgstr ""
 
-#: models/crfpa.py:101
+#: models/crfpa.py:105
 msgid "oral 2"
 msgstr ""
 
-#: models/crfpa.py:104 models/crfpa.py:158
+#: models/crfpa.py:108 models/crfpa.py:175
 msgid "options"
 msgstr "options"
 
-#: models/crfpa.py:109
+#: models/crfpa.py:115
+msgid "civil rights"
+msgstr ""
+
+#: models/crfpa.py:121
+#, fuzzy
+msgid "judiciary organization"
+msgstr "organisation"
+
+#: models/crfpa.py:124
+msgid "deontology"
+msgstr ""
+
+#: models/crfpa.py:127
 msgid "cost"
 msgstr "coût"
 
-#: models/crfpa.py:110
+#: models/crfpa.py:128
+msgid "e-learning cost with fascicle"
+msgstr ""
+
+#: models/crfpa.py:129
+msgid "e-learning cost without fascicle"
+msgstr ""
+
+#: models/crfpa.py:130
 msgid "available"
 msgstr ""
 
-#: models/crfpa.py:126 models/crfpa.py:137
+#: models/crfpa.py:148 models/crfpa.py:157
 msgid "training"
 msgstr "formation"
 
-#: models/crfpa.py:135
+#: models/crfpa.py:154
 msgid "trainings"
 msgstr "formations"
 
-#: models/crfpa.py:152
+#: models/crfpa.py:169
 msgid "oral de langue (option)"
 msgstr ""
 
-#: models/crfpa.py:155
+#: models/crfpa.py:172
 msgid "oral 2 (option)"
 msgstr ""
 
-#: models/crfpa.py:162
-#, fuzzy
-#| msgid "platform only"
-msgid "e-learning platform only"
-msgstr "plateforme seulement"
-
-#: models/crfpa.py:163
-msgid "application fees"
-msgstr "frais de dossier"
-
-#: models/crfpa.py:165
-msgid "subscription fees"
-msgstr "frais d'inscription"
-
-#: models/crfpa.py:166
-msgid "promo code"
-msgstr ""
-
-#: models/crfpa.py:167
-#, fuzzy
-#| msgid "Registration"
-msgid "registration date"
-msgstr "Inscription"
-
-#: models/crfpa.py:168
-msgid "subscription date"
-msgstr "date d'inscription"
-
-#: models/crfpa.py:169
-msgid "subscribed"
-msgstr "inscrit"
-
-#: models/crfpa.py:170
-msgid "confirmation sent"
-msgstr "confirmation envoyée"
-
-#: models/crfpa.py:171
-#, fuzzy
-#| msgid "streaming server"
-msgid "studying level"
-msgstr "serveur de diffusion"
-
-#: models/crfpa.py:222
+#: models/crfpa.py:182
 msgid "Student"
 msgstr "Etudiant"
 
-#: models/crfpa.py:223
+#: models/crfpa.py:183
 msgid "Students"
 msgstr "Etudiants"
 
-#: models/crfpa.py:231 templates/registration/registration_pdf.html:41
-#: templates/telemeta/profile_detail.html:77
-msgid "Address"
-msgstr "Adresse"
-
-#: models/crfpa.py:232
-#, fuzzy
-#| msgid "Address"
-msgid "Address detail"
-msgstr "Adresse"
-
-#: models/crfpa.py:233
-msgid "Postal code"
-msgstr "Code postal"
-
-#: models/crfpa.py:234
-msgid "City"
-msgstr "Ville"
+#: models/crfpa.py:196
+msgid "AE student"
+msgstr "Etudiant AE"
 
-#: models/crfpa.py:235
-msgid "Country"
-msgstr "Pays"
+#: models/crfpa.py:197
+msgid "AE students"
+msgstr "Etudiants AE"
 
-#: models/crfpa.py:236 templates/telemeta/profile_detail.html:88
+#: models/crfpa.py:221 templates/telemeta/profile_detail.html:93
 msgid "Language"
 msgstr "Langue"
 
-#: models/crfpa.py:237 templates/registration/registration_pdf.html:42
-#: templates/telemeta/profile_detail.html:78
-msgid "Telephone"
-msgstr "Téléphone"
-
-#: models/crfpa.py:238
+#: models/crfpa.py:223
 msgid "Expiration_date"
 msgstr "Date d'expiration"
 
-#: models/crfpa.py:239
+#: models/crfpa.py:224
 msgid "Password initialized"
 msgstr "Mot de passe initialisé"
 
-#: models/crfpa.py:240 templates/telemeta/profile_detail.html:79
+#: models/crfpa.py:225 templates/telemeta/profile_detail.html:84
 msgid "WiFi login"
 msgstr ""
 
-#: models/crfpa.py:241
+#: models/crfpa.py:226
 msgid "WiFi pass"
 msgstr ""
 
-#: models/crfpa.py:242
+#: models/crfpa.py:227
 msgid "birthday"
 msgstr ""
 
-#: models/crfpa.py:246
+#: models/crfpa.py:237
 msgid "profile"
 msgstr "profil"
 
-#: models/crfpa.py:257 models/crfpa.py:275 models/crfpa.py:288
-#: models/crfpa.py:301
+#: models/crfpa.py:268
+#, fuzzy
+msgid "Correcteur"
+msgstr "Correcteur"
+
+#: models/crfpa.py:269
+#, fuzzy
+msgid "Correcteurs"
+msgstr "Correcteurs"
+
+#: models/crfpa.py:281 models/crfpa.py:307 models/crfpa.py:320
+#: models/crfpa.py:333
 msgid "student"
 msgstr "étudiant"
 
-#: models/crfpa.py:258 models/crfpa.py:276 models/crfpa.py:289
-#: models/crfpa.py:302
+#: models/crfpa.py:282 models/crfpa.py:308 models/crfpa.py:321
+#: models/crfpa.py:334
 msgid "amount"
 msgstr "montant"
 
-#: models/crfpa.py:259
+#: models/crfpa.py:283
 msgid "month"
 msgstr "mois"
 
-#: models/crfpa.py:260
-msgid "collected"
-msgstr "encaissé"
-
-#: models/crfpa.py:261
+#: models/crfpa.py:285
 #, fuzzy
-#| msgid "document type"
 msgid "payment type"
 msgstr "type de document"
 
-#: models/crfpa.py:262
+#: models/crfpa.py:287 models/crfpa.py:398
 msgid "date created"
 msgstr "date de création"
 
-#: models/crfpa.py:267
+#: models/crfpa.py:299
 msgid "Payment"
 msgstr "Paiement"
 
-#: models/crfpa.py:268
+#: models/crfpa.py:300
 msgid "Payments"
 msgstr "Paiements"
 
-#: models/crfpa.py:281
+#: models/crfpa.py:313
 msgid "Discount"
 msgstr "Réduction"
 
-#: models/crfpa.py:282
+#: models/crfpa.py:314
 msgid "Discounts"
 msgstr "Réductions"
 
-#: models/crfpa.py:294 models/crfpa.py:295
+#: models/crfpa.py:326 models/crfpa.py:327
 msgid "Optional fees"
 msgstr "Frais optionnels"
 
-#: models/crfpa.py:307
+#: models/crfpa.py:339
 #, fuzzy
-#| msgid "backup"
 msgid "Payback"
 msgstr "sauvegardé"
 
-#: models/crfpa.py:308
+#: models/crfpa.py:340
 msgid "Paybacks"
 msgstr ""
 
+#: models/crfpa.py:347 models/crfpa.py:393 templates/quiz/quiz_list.html:12
+#: templates/teleforma/course.html:18 templates/teleforma/course.html.py:35
+#: templates/teleforma/course_conference_audio.html:66
+#: templates/teleforma/course_document.html:73
+#: templates/teleforma/inc/conference_list.html:25
+#: templates/teleforma/inc/media_list.html:36
+#: templates/teleforma/inc/media_list_pending.html:37
+#: templates/telemeta/lists.html:69 templates/telemeta/search_criteria.html:97
+#: templates/telemeta/inc/module_revisions.html:17
+msgid "Title"
+msgstr "Titre"
+
 #: models/messages.py:13
 #, fuzzy
-#| msgid "student"
 msgid "students"
 msgstr "étudiant"
 
 #: models/messages.py:18
 #, fuzzy
-#| msgid "Student"
 msgid "Student group"
 msgstr "Etudiant"
 
@@ -990,7 +1105,6 @@ msgstr ""
 
 #: models/messages.py:33
 #, fuzzy
-#| msgid "Reject"
 msgid "subject"
 msgstr "Rejeter"
 
@@ -1001,19 +1115,16 @@ msgstr "Messages"
 
 #: models/messages.py:35
 #, fuzzy
-#| msgid "date end"
 msgid "to send"
 msgstr "date de fin"
 
 #: models/messages.py:36
 #, fuzzy
-#| msgid "date end"
 msgid "sent"
 msgstr "date de fin"
 
 #: models/messages.py:37
 #, fuzzy
-#| msgid "date end"
 msgid "date sent"
 msgstr "date de fin"
 
@@ -1073,11 +1184,12 @@ msgstr "question"
 msgid "minimum numbers of characters"
 msgstr "nombre de caractère minimum"
 
-#: models/pro.py:96
+#: models/pro.py:96 templates/quiz/question.html:47
+#: templates/quiz/sitting_detail.html:21
 msgid "Question"
 msgstr "Questions"
 
-#: models/pro.py:101 models/pro.py:102 models/pro.py:103
+#: models/pro.py:103
 msgid "answer"
 msgstr "réponse"
 
@@ -1085,10 +1197,6 @@ msgstr "réponse"
 msgid "validated"
 msgstr "validé"
 
-#: models/pro.py:117
-msgid "Answer"
-msgstr "Réponse"
-
 #: models/pro.py:126 models/pro.py:142
 msgid "testimonial_template"
 msgstr ""
@@ -1117,6 +1225,30 @@ msgstr "Page non trouvée"
 msgid "Server error"
 msgstr "Erreur du serveur"
 
+#: templates/admin/base.html:74
+msgid "Welcome,"
+msgstr ""
+
+#: templates/admin/base.html:82
+#, fuzzy
+msgid "Documentation"
+msgstr "Supports écrits"
+
+#: templates/admin/base.html:85
+#: templates/registration/password_change_form.html:3
+#: templates/registration/password_change_form.html:8
+#: templates/telemeta/profile_detail.html:50
+msgid "Change password"
+msgstr ""
+
+#: templates/admin/base.html:87
+msgid "Log out"
+msgstr ""
+
+#: templates/admin/base.html:107 templates/telemeta/base.html:108
+msgid "Home"
+msgstr "Accueil"
+
 #: templates/postman/archives.html:3
 #, fuzzy
 msgid "Archived Messages"
@@ -1166,81 +1298,69 @@ msgstr "Messages"
 msgid "Sorry, this page number is invalid."
 msgstr ""
 
-#: templates/postman/base_folder.html:39
+#: templates/postman/base_folder.html:40
 #: templates/teleforma/course_conference_record.html:69
 #: templates/telemeta/lists.html:75
 msgid "Action"
 msgstr ""
 
-#: templates/postman/base_folder.html:40
+#: templates/postman/base_folder.html:41
 msgid "Sender"
 msgstr ""
 
-#: templates/postman/base_folder.html:41 templates/postman/reply.html:4
-msgid "Recipient"
-msgstr ""
-
-#: templates/postman/base_folder.html:42
+#: templates/postman/base_folder.html:43
 msgid "Subject"
 msgstr ""
 
-#: templates/postman/base_folder.html:43
+#: templates/postman/base_folder.html:44
 #: templates/telemeta/inc/module_revisions.html:16
 msgid "Date"
 msgstr "Date"
 
-#: templates/postman/base_folder.html:61
+#: templates/postman/base_folder.html:62
 msgid "g:i A,M j,n/j/y"
 msgstr ""
 
-#: templates/postman/base_folder.html:69 templates/postman/view.html:39
+#: templates/postman/base_folder.html:70 templates/postman/view.html:47
 #: templates/telemeta/lists.html:58
 msgid "Delete"
 msgstr ""
 
-#: templates/postman/base_folder.html:72 templates/postman/view.html:43
+#: templates/postman/base_folder.html:73 templates/postman/view.html:51
 msgid "Archive"
 msgstr ""
 
-#: templates/postman/base_folder.html:75
+#: templates/postman/base_folder.html:76
 msgid "Undelete"
 msgstr ""
 
-#: templates/postman/base_folder.html:81
+#: templates/postman/base_folder.html:82
 #, fuzzy
 msgid "No messages."
 msgstr "Messages"
 
-#: templates/postman/base_write.html:30
+#: templates/postman/base_write.html:13
 msgid ""
 "Vous pouvez ici échanger des messages avec les professeurs et les "
 "administrateurs."
 msgstr ""
 
-#: templates/postman/base_write.html:32
+#: templates/postman/base_write.html:15
 msgid ""
 "Pour les questions concernant l'organisation des cours, le planning, les "
 "documents de cours ou les copies, adressez-vous à <b>Admin-CRFPA</b>."
 msgstr ""
 
-#: templates/postman/base_write.html:34
+#: templates/postman/base_write.html:17
 msgid ""
 "Pour les questions concernant uniquement l'accès à la plateforme et aux "
 "médias vidéo ou audio, lire d'abord"
 msgstr ""
 
-#: templates/postman/base_write.html:34
+#: templates/postman/base_write.html:19
 msgid "puis adressez-vous à <b>Support technique</b>."
 msgstr ""
 
-#: templates/postman/base_write.html:38
-msgid "to an administrator"
-msgstr "à un administrateur"
-
-#: templates/postman/base_write.html:46
-msgid "to a professor"
-msgstr "à un professeur"
-
 #: templates/postman/email_user.txt:1 templates/postman/email_user_init.txt:1
 msgid "Hello"
 msgstr "Bonjour"
@@ -1289,7 +1409,7 @@ msgstr ""
 msgid "Thank you again for your interest in our services."
 msgstr ""
 
-#: templates/postman/email_user.txt:20
+#: templates/postman/email_user.txt:20 templates/quiz/question.html:47
 msgid "of"
 msgstr "de"
 
@@ -1304,70 +1424,310 @@ msgstr ""
 msgid "%(organization)s : initialization of your e-learning account"
 msgstr "%(organization)s : initialisation de votre compte e-learning"
 
-#: templates/postman/email_visitor.txt:1
-msgid "Dear visitor,"
+#: templates/postman/email_visitor.txt:1
+msgid "Dear visitor,"
+msgstr ""
+
+#: templates/postman/email_visitor.txt:8
+msgid "As a reminder, please find below the content of your message."
+msgstr ""
+
+#: templates/postman/email_visitor.txt:11
+msgid "Please find below the answer from your correspondent."
+msgstr ""
+
+#: templates/postman/email_visitor.txt:15
+msgid "For more comfort, we encourage you to open an account on the site."
+msgstr ""
+
+#: templates/postman/inbox.html:3
+#, fuzzy
+msgid "Received Messages"
+msgstr "Messages"
+
+#: templates/postman/inbox.html:6
+msgid "Received"
+msgstr ""
+
+#: templates/postman/reply.html:3 templates/postman/view.html:56
+#: templates/postman/view.html.py:59
+msgid "Reply"
+msgstr ""
+
+#: templates/postman/sent.html:6
+msgid "Sent"
+msgstr ""
+
+#: templates/postman/trash.html:3
+#, fuzzy
+msgid "Deleted Messages"
+msgstr "Messages"
+
+#: templates/postman/trash.html:10
+msgid ""
+"Messages in this folder can be removed from time to time. For long term "
+"storage, use instead the archive folder."
+msgstr ""
+
+#: templates/postman/view.html:9
+msgid "Conversation"
+msgstr ""
+
+#: templates/postman/view.html:9 templates/telemeta/inc/user_list.html:73
+#, fuzzy
+msgid "Message"
+msgstr "Messages"
+
+#: templates/postman/view.html:33
+msgid ":"
+msgstr ""
+
+#: templates/postman/view.html:44
+msgid "Back"
+msgstr ""
+
+#: templates/postman/write.html:3 templates/telemeta/inc/user_list.html:29
+msgid "Write"
+msgstr ""
+
+#: templates/quiz/category_list.html:3 templates/quiz/quiz_list.html:3
+#: templates/quiz/sitting_list.html:3
+msgid "All Quizzes"
+msgstr ""
+
+#: templates/quiz/category_list.html:6
+#, fuzzy
+msgid "Category list"
+msgstr "catégories"
+
+#: templates/quiz/correct_answer.html:6
+msgid "You answered the above question incorrectly"
+msgstr ""
+
+#: templates/quiz/correct_answer.html:16
+msgid "This is the correct answer"
+msgstr ""
+
+#: templates/quiz/correct_answer.html:23
+msgid "This was your answer."
+msgstr ""
+
+#: templates/quiz/progress.html:6
+msgid "Progress Page"
+msgstr ""
+
+#: templates/quiz/progress.html:7
+#, fuzzy
+msgid "User Progress Page"
+msgstr "Profil utilisateur"
+
+#: templates/quiz/progress.html:13
+msgid "Question Category Scores"
+msgstr ""
+
+#: templates/quiz/progress.html:19 templates/quiz/quiz_detail.html:9
+#: templates/quiz/quiz_list.html:13 templates/quiz/sitting_detail.html:10
+#, fuzzy
+msgid "Category"
+msgstr "catégorie"
+
+#: templates/quiz/progress.html:20
+msgid "Correctly answererd"
+msgstr ""
+
+#: templates/quiz/progress.html:21
+#, fuzzy
+msgid "Incorrect"
+msgstr "correcteur"
+
+#: templates/quiz/progress.html:50
+msgid "Previous exam papers"
+msgstr ""
+
+#: templates/quiz/progress.html:52
+msgid "Below are the results of exams that you have sat."
+msgstr ""
+
+#: templates/quiz/progress.html:59
+#, fuzzy
+msgid "Quiz Title"
+msgstr "Titre"
+
+#: templates/quiz/progress.html:61
+msgid "Possible Score"
+msgstr ""
+
+#: templates/quiz/question.html:13 templates/quiz/result.html:13
+msgid "The previous question"
+msgstr ""
+
+#: templates/quiz/question.html:32 templates/quiz/result.html:21
+#: templates/quiz/result.html.py:80
+#, fuzzy
+msgid "Explanation"
+msgstr "Date d'expiration"
+
+#: templates/quiz/question.html:52
+#, fuzzy
+msgid "Question category"
+msgstr "Questions"
+
+#: templates/quiz/question.html:74
+msgid "Check"
+msgstr ""
+
+#: templates/quiz/quiz_detail.html:11
+msgid "You will only get one attempt at this quiz"
+msgstr ""
+
+#: templates/quiz/quiz_detail.html:16
+msgid "Start quiz"
+msgstr ""
+
+#: templates/quiz/quiz_list.html:6
+msgid "List of quizzes"
+msgstr ""
+
+#: templates/quiz/quiz_list.html:14
+msgid "Exam"
+msgstr ""
+
+#: templates/quiz/quiz_list.html:15
+msgid "Single attempt"
+msgstr ""
+
+#: templates/quiz/quiz_list.html:31 templates/quiz/sitting_list.html:42
+#, fuzzy
+msgid "View details"
+msgstr "Adresse"
+
+#: templates/quiz/quiz_list.html:41
+msgid "There are no available quizzes"
+msgstr ""
+
+#: templates/quiz/result.html:7
+msgid "Exam Results for"
+msgstr ""
+
+#: templates/quiz/result.html:32
+msgid "Exam results"
+msgstr ""
+
+#: templates/quiz/result.html:34
+#, fuzzy
+msgid "Exam title"
+msgstr "titre"
+
+#: templates/quiz/result.html:38
+#, fuzzy
+msgid "You answered"
+msgstr "réponse"
+
+#: templates/quiz/result.html:38
+msgid "questions correctly out of"
+msgstr ""
+
+#: templates/quiz/result.html:38
+msgid "giving you"
+msgstr ""
+
+#: templates/quiz/result.html:38
+msgid "percent correct"
+msgstr ""
+
+#: templates/quiz/result.html:59
+msgid "Your session score is"
+msgstr ""
+
+#: templates/quiz/result.html:59
+msgid "out of a possible"
+msgstr ""
+
+#: templates/quiz/result.html:77
+#, fuzzy
+msgid "Your answer"
+msgstr "réponse"
+
+#: templates/quiz/single_complete.html:13
+msgid "You have already sat this exam and only one sitting is permitted"
 msgstr ""
 
-#: templates/postman/email_visitor.txt:8
-msgid "As a reminder, please find below the content of your message."
+#: templates/quiz/single_complete.html:15
+msgid "This exam is only accessible to signed in users"
 msgstr ""
 
-#: templates/postman/email_visitor.txt:11
-msgid "Please find below the answer from your correspondent."
+#: templates/quiz/sitting_detail.html:5
+msgid "Result of"
 msgstr ""
 
-#: templates/postman/email_visitor.txt:15
-msgid "For more comfort, we encourage you to open an account on the site."
+#: templates/quiz/sitting_detail.html:5
+msgid "for"
 msgstr ""
 
-#: templates/postman/inbox.html:3
+#: templates/quiz/sitting_detail.html:9
 #, fuzzy
-msgid "Received Messages"
-msgstr "Messages"
+msgid "Quiz title"
+msgstr "titre"
 
-#: templates/postman/inbox.html:6
-msgid "Received"
+#: templates/quiz/sitting_detail.html:13 templates/quiz/sitting_list.html:13
+#: templates/telemeta/inc/module_revisions.html:19
+msgid "User"
 msgstr ""
 
-#: templates/postman/reply.html:3 templates/postman/view.html:47
-#: templates/postman/view.html:50 templates/postman/view.html:53
-msgid "Reply"
-msgstr ""
+#: templates/quiz/sitting_detail.html:14 templates/quiz/sitting_list.html:15
+#, fuzzy
+msgid "Completed"
+msgstr "incomplet"
 
-#: templates/postman/sent.html:6
-msgid "Sent"
-msgstr ""
+#: templates/quiz/sitting_detail.html:22
+#, fuzzy
+msgid "User answer"
+msgstr "réponse"
 
-#: templates/postman/trash.html:3
+#: templates/quiz/sitting_detail.html:41
 #, fuzzy
-msgid "Deleted Messages"
-msgstr "Messages"
+msgid "incorrect"
+msgstr "correcteur"
 
-#: templates/postman/trash.html:10
-msgid ""
-"Messages in this folder can be removed from time to time. For long term "
-"storage, use instead the archive folder."
+#: templates/quiz/sitting_detail.html:43
+#, fuzzy
+msgid "Correct"
+msgstr "Correcteur"
+
+#: templates/quiz/sitting_detail.html:49
+msgid "Toggle whether correct"
 msgstr ""
 
-#: templates/postman/view.html:9
-msgid "Conversation"
+#: templates/quiz/sitting_list.html:6
+msgid "List of complete exams"
 msgstr ""
 
-#: templates/postman/view.html:9 templates/telemeta/inc/user_list.html:72
-#, fuzzy
-msgid "Message"
-msgstr "Messages"
+#: templates/quiz/sitting_list.html:14
+msgid "Quiz"
+msgstr ""
 
-#: templates/postman/view.html:25
-msgid ":"
+#: templates/quiz/sitting_list.html:28
+msgid "Filter"
 msgstr ""
 
-#: templates/postman/view.html:36
-msgid "Back"
+#: templates/quiz/sitting_list.html:52
+msgid "There are no matching quizzes"
 msgstr ""
 
-#: templates/postman/write.html:3 templates/telemeta/inc/user_list.html:28
-msgid "Write"
+#: templates/quiz/view_quiz_category.html:3
+msgid "Quizzes related to"
+msgstr ""
+
+#: templates/quiz/view_quiz_category.html:6
+msgid "Quizzes in the"
+msgstr ""
+
+#: templates/quiz/view_quiz_category.html:6
+msgid "category"
+msgstr "catégorie"
+
+#: templates/quiz/view_quiz_category.html:20
+msgid "There are no quizzes"
 msgstr ""
 
 #: templates/registration/activate.html:3
@@ -1417,10 +1777,10 @@ msgid ""
 "from our records.\n"
 "</p>\n"
 "<p>\n"
-"To activate this account, please click the following link within the next \n"
+"To activate this account, please click the following link within the next\n"
 "<b>%(expiration_days)s</b> days:<br/>\n"
-"<a href=\"http://%(sitedomain)s%(activation_key_url)s\">http://%(sitedomain)s"
-"%(activation_key_url)s</a>\n"
+"<a href=\"https://%(sitedomain)s%(activation_key_url)s\">https://"
+"%(sitedomain)s%(activation_key_url)s</a>\n"
 "</p>\n"
 "<p>\n"
 "Sincerely,<br/>\n"
@@ -1489,12 +1849,6 @@ msgstr "Mot de passe initialisé"
 msgid "Password successfully changed!"
 msgstr ""
 
-#: templates/registration/password_change_form.html:3
-#: templates/registration/password_change_form.html:8
-#: templates/telemeta/profile_detail.html:49
-msgid "Change password"
-msgstr ""
-
 #: templates/registration/password_reset_complete.html:3
 #, fuzzy
 msgid "Password reset complete"
@@ -1521,7 +1875,7 @@ msgid "Set password"
 msgstr ""
 
 #: templates/registration/password_reset_done.html:3
-#: templates/telemeta/profile_detail.html:106
+#: templates/telemeta/profile_detail.html:114
 msgid "Password reset"
 msgstr "Réinitialisation du mot de passe"
 
@@ -1572,149 +1926,138 @@ msgid ""
 msgstr ""
 
 #: templates/registration/registration_complete.html:6
-#: templates/registration/registration_pdf.html:13 views/crfpa.py:496
+#: templates/registration/registration_corrector_complete.html:6
+#: templates/registration/registration_corrector_pdf.html:14
+#: templates/registration/registration_pdf.html:14 views/crfpa.py:624
+#: views/crfpa.py:787 views/crfpa.py:801
 msgid "Registration"
 msgstr "Inscription"
 
-#: templates/registration/registration_complete.html:23
-#: templates/teleforma/annals.html:73 templates/teleforma/course_media.html:64
-#: templates/teleforma/inc/document_list.html:22
+#: templates/registration/registration_complete.html:19
+#: templates/teleforma/annals.html:73 templates/teleforma/course_media.html:65
+#: templates/teleforma/inc/document_list.html:20
 #: templates/teleforma/inc/media_list.html:56
-#: templates/teleforma/inc/media_list_pending.html:56
+#: templates/teleforma/inc/media_list_pending.html:57
 msgid "Download"
 msgstr "Télécharger"
 
-#: templates/registration/registration_form.html:6
-#, fuzzy
-#| msgid "Registration"
-msgid "Pre-registration"
-msgstr "Inscription"
-
-#: templates/registration/registration_pdf.html:35
-#, fuzzy
-#| msgid "Registration"
-msgid "Training registration"
-msgstr "Inscription"
-
-#: templates/registration/registration_pdf.html:35
-#: templates/registration/registration_pdf.html:49
-msgid "Training"
-msgstr "Formation"
-
-#: templates/registration/registration_pdf.html:39
+#: templates/registration/registration_corrector_pdf.html:36
+#: templates/registration/registration_pdf.html:41
 msgid "First name"
 msgstr "Prénom"
 
-#: templates/registration/registration_pdf.html:40
+#: templates/registration/registration_corrector_pdf.html:40
+#: templates/registration/registration_pdf.html:45
 msgid "Last name"
 msgstr "Nom"
 
-#: templates/registration/registration_pdf.html:43
+#: templates/registration/registration_corrector_pdf.html:52
+#: templates/registration/registration_pdf.html:57
 msgid "E-mail"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:44
-#: templates/telemeta/profile_detail.html:61
+#: templates/registration/registration_corrector_pdf.html:56
+#: templates/registration/registration_pdf.html:61
+#: templates/telemeta/profile_detail.html:66
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
-#: templates/registration/registration_pdf.html:45
-msgid "Birthday"
-msgstr ""
+#: templates/registration/registration_corrector_pdf.html:85
+#: templates/registration/registration_pdf.html:106
+#, fuzzy
+msgid "Registration date"
+msgstr "Inscription"
 
-#: templates/registration/registration_pdf.html:47
+#: templates/registration/registration_form.html:34
 #, fuzzy
-#| msgid "streaming server"
-msgid "Studying level"
-msgstr "serveur de diffusion"
+msgid "Pre-registration"
+msgstr "Inscription"
+
+#: templates/registration/registration_pdf.html:36
+#, fuzzy
+msgid "Training registration"
+msgstr "Inscription"
+
+#: templates/registration/registration_pdf.html:36
+#: templates/registration/registration_pdf.html:78
+msgid "Training"
+msgstr "Formation"
 
-#: templates/registration/registration_pdf.html:50
+#: templates/registration/registration_pdf.html:82
 #, fuzzy
-#| msgid "Training"
 msgid "Training type"
 msgstr "Formation"
 
-#: templates/registration/registration_pdf.html:51
+#: templates/registration/registration_pdf.html:86
+msgid "Envoi postal des fascicules"
+msgstr ""
+
+#: templates/registration/registration_pdf.html:90
 msgid "Matière de procédure"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:52
+#: templates/registration/registration_pdf.html:94
 msgid "Matière juridique de spécialité"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:54
+#: templates/registration/registration_pdf.html:99
 msgid "Matière d'oral de langue"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:57
-#, fuzzy
-#| msgid "Registration"
-msgid "Registration date"
-msgstr "Inscription"
-
-#: templates/registration/registration_pdf.html:58
+#: templates/registration/registration_pdf.html:110
 msgid "PROMO code"
 msgstr ""
 
-#: templates/teleforma/annals.html:6 templates/teleforma/annals.html:53
-#: templates/telemeta/base.html:113
+#: templates/teleforma/annals.html:6 templates/teleforma/annals.html.py:53
+#: templates/telemeta/base.html:119
 msgid "Annals"
 msgstr "Annales"
 
 #: templates/teleforma/annals.html:49
-#: templates/teleforma/inc/document_list.html:36
+#: templates/teleforma/inc/document_list.html:33
 msgid "No document"
 msgstr "Aucun document"
 
 #: templates/teleforma/annals.html:69
 #: templates/teleforma/inc/conference_list.html:18
-#: templates/teleforma/inc/document_list.html:20
+#: templates/teleforma/inc/document_list.html:18
+#: webclass/templates/webclass/inc/webclass_list.html:49
 msgid "View"
 msgstr "Voir"
 
-#: templates/teleforma/course.html:14
+#: templates/teleforma/course.html:15
 #: templates/teleforma/inc/document_list.html:7
 msgid "Documents"
 msgstr "Supports écrits"
 
-#: templates/teleforma/course.html:17 templates/teleforma/course.html:33
-#: templates/teleforma/course_conference_audio.html:66
-#: templates/teleforma/course_document.html:73
-#: templates/teleforma/inc/conference_list.html:25
-#: templates/teleforma/inc/media_list.html:36
-#: templates/teleforma/inc/media_list_pending.html:36
-#: templates/telemeta/inc/module_revisions.html:17
-#: templates/telemeta/lists.html:69 templates/telemeta/search_criteria.html:97
-msgid "Title"
-msgstr "Titre"
-
-#: templates/teleforma/course.html:18 templates/teleforma/course.html:34
+#: templates/teleforma/course.html:19 templates/teleforma/course.html.py:36
 msgid "Description"
 msgstr "Description"
 
-#: templates/teleforma/course.html:19 templates/teleforma/course.html:35
-#: templates/teleforma/course.html:52 templates/teleforma/course_media.html:149
-#: templates/telemeta/profile_detail.html:83
+#: templates/teleforma/course.html:20 templates/teleforma/course.html.py:37
+#: templates/teleforma/course.html:54 templates/teleforma/course_media.html:149
+#: templates/telemeta/profile_detail.html:88
 msgid "Date added"
 msgstr "Date d'ajout"
 
-#: templates/teleforma/course.html:30
+#: templates/teleforma/course.html:32
 msgid "Medias"
 msgstr "Médias"
 
-#: templates/teleforma/course.html:47
+#: templates/teleforma/course.html:49
 msgid "Conferences"
 msgstr "Conférences"
 
-#: templates/teleforma/course.html:51
+#: templates/teleforma/course.html:53
 #: templates/teleforma/course_conference.html:68
 #: templates/teleforma/course_conference_audio.html:67
-#: templates/teleforma/course_media.html:140
+#: templates/teleforma/course_media.html:141
 #: templates/teleforma/course_media_video_embed.html:36
 #: templates/teleforma/inc/conference_list.html:28
 #: templates/teleforma/inc/media_list.html:39
-#: templates/teleforma/inc/media_list_pending.html:39
-#: templates/telemeta/inc/user_list.html:48
+#: templates/teleforma/inc/media_list_pending.html:40
+#: templates/telemeta/inc/user_list.html:49
+#: webclass/templates/webclass/inc/webclass_list.html:58
 msgid "Professor"
 msgstr "Professeur"
 
@@ -1724,61 +2067,62 @@ msgid "S T O P"
 msgstr "S T O P"
 
 #: templates/teleforma/course_conference.html:37
-#: templates/teleforma/course_media.html:76
+#: templates/teleforma/course_media.html:77
 msgid "Audio"
 msgstr ""
 
-#: templates/teleforma/course_conference.html:72
+#: templates/teleforma/course_conference.html:71
 #: templates/teleforma/course_media.html:143
-#: templates/teleforma/course_media_video_embed.html:39
+#: templates/teleforma/course_media_video_embed.html:38
 #: templates/teleforma/inc/media_list.html:43
-#: templates/teleforma/inc/media_list_pending.html:43
+#: templates/teleforma/inc/media_list_pending.html:44
 msgid "Comment"
 msgstr "Commentaire"
 
-#: templates/teleforma/course_conference.html:73
+#: templates/teleforma/course_conference.html:72
 #: templates/teleforma/course_media.html:144
-#: templates/teleforma/course_media_video_embed.html:40
+#: templates/teleforma/course_media_video_embed.html:39
 msgid "Begin date"
 msgstr "Date de début"
 
-#: templates/teleforma/course_conference.html:74
+#: templates/teleforma/course_conference.html:73
 #: templates/teleforma/course_media.html:145
-#: templates/teleforma/course_media_video_embed.html:41
+#: templates/teleforma/course_media_video_embed.html:40
 msgid "End date"
 msgstr "Date de fin"
 
-#: templates/teleforma/course_conference.html:75
+#: templates/teleforma/course_conference.html:74
 #: templates/teleforma/course_conference_audio.html:72
 msgid "Live"
 msgstr "Direct"
 
-#: templates/teleforma/course_conference.html:75
-#: templatetags/teleforma_tags.py:134
+#: templates/teleforma/course_conference.html:74
+#: templatetags/teleforma_tags.py:126
 msgid "Yes"
 msgstr "Oui"
 
-#: templates/teleforma/course_conference.html:76
+#: templates/teleforma/course_conference.html:75
 #: templates/teleforma/course_conference_audio.html:69
 #: templates/teleforma/course_media.html:146
-#: templates/teleforma/course_media_video_embed.html:42
+#: templates/teleforma/course_media_video_embed.html:41
 msgid "Room"
 msgstr "Salle"
 
-#: templates/teleforma/course_conference.html:78
+#: templates/teleforma/course_conference.html:77
 #: templates/teleforma/course_media.html:152
 msgid "Conference ID"
 msgstr "ID Conférence"
 
 #: templates/teleforma/course_conference_audio.html:36
-#: templates/teleforma/course_media.html:79
+#: templates/teleforma/course_media.html:80
 msgid "Video"
 msgstr ""
 
 #: templates/teleforma/course_conference_audio.html:70
 #: templates/teleforma/inc/conference_list.html:30
 #: templates/teleforma/inc/media_list.html:41
-#: templates/teleforma/inc/media_list_pending.html:41
+#: templates/teleforma/inc/media_list_pending.html:42
+#: webclass/templates/webclass/inc/webclass_list.html:61
 msgid "Begin"
 msgstr "Début"
 
@@ -1787,12 +2131,12 @@ msgid "End"
 msgstr "Fin"
 
 #: templates/teleforma/course_conference_record.html:30
-#: templates/teleforma/courses.html:125
+#: templates/teleforma/courses.html:227
 msgid "Status"
 msgstr "Status"
 
 #: templates/teleforma/course_conference_record.html:41
-#: templates/teleforma/courses.html:42
+#: templates/teleforma/courses.html:44
 msgid "New conference"
 msgstr "Nouvelle conférence"
 
@@ -1800,17 +2144,17 @@ msgstr "Nouvelle conférence"
 msgid "Record and stream"
 msgstr "Enregistrer et diffuser"
 
-#: templates/teleforma/course_media.html:28
-#: templates/teleforma/course_media.html:82
+#: templates/teleforma/course_media.html:29
+#: templates/teleforma/course_media.html:83
 #: templates/teleforma/inc/media_list.html:50
-#: templates/teleforma/inc/media_list_pending.html:50
+#: templates/teleforma/inc/media_list_pending.html:51
 msgid " published"
 msgstr " publié"
 
-#: templates/teleforma/course_media.html:35
-#: templates/teleforma/course_media.html:82
+#: templates/teleforma/course_media.html:36
+#: templates/teleforma/course_media.html:83
 #: templates/teleforma/inc/media_list.html:52
-#: templates/teleforma/inc/media_list_pending.html:52
+#: templates/teleforma/inc/media_list_pending.html:53
 msgid " rejected"
 msgstr " rejeté"
 
@@ -1830,68 +2174,74 @@ msgstr "ID Média"
 msgid "Web class group"
 msgstr ""
 
-#: templates/teleforma/courses.html:56
+#: templates/teleforma/courses.html:59
 msgid "My notes"
 msgstr "Mes notes"
 
-#: templates/teleforma/courses.html:66
+#: templates/teleforma/courses.html:69
 msgid "New note"
 msgstr "Nouvelle note"
 
-#: templates/teleforma/inc/conference_list.html:8
-msgid "Live conferences"
-msgstr "Conférences en direct"
+#: templates/teleforma/courses.html:113
+#: templates/teleforma/inc/media_list.html:17
+#: templates/teleforma/inc/media_list_pending.html:17
+msgid "Play"
+msgstr "Lire"
 
+#: templates/teleforma/courses.html:119 templates/teleforma/courses.html:125
 #: templates/teleforma/inc/conference_list.html:19
 #: templates/teleforma/inc/media_list.html:23
 #: templates/teleforma/inc/media_list.html:29
 #: templates/teleforma/inc/media_list_pending.html:23
 #: templates/teleforma/inc/media_list_pending.html:29
+#: templates/teleforma/inc/media_list_pending.html:31
+#: webclass/templates/webclass/inc/webclass_list.html:50
 msgid "Click here"
 msgstr "Cliquez ici"
 
-#: templates/teleforma/inc/media_list.html:17
-#: templates/teleforma/inc/media_list_pending.html:17
-msgid "Play"
-msgstr "Lire"
+#: templates/teleforma/inc/conference_list.html:8
+msgid "Live conferences"
+msgstr "Conférences en direct"
 
+#: templates/teleforma/inc/media_list.html:8
 #: templates/teleforma/inc/media_list_pending.html:8
 msgid "Passed conferences"
 msgstr "Conférences en différé"
 
-#: templates/telemeta/base.html:92 templates/telemeta/base.html:101
+#: templates/telemeta/base.html:94 templates/telemeta/base.html.py:103
 msgid "Desk"
 msgstr "Bureau"
 
-#: templates/telemeta/base.html:106
-msgid "Home"
-msgstr "Accueil"
-
-#: templates/telemeta/base.html:111
+#: templates/telemeta/base.html:113
 msgid "Messaging"
 msgstr "Messagerie"
 
-#: templates/telemeta/base.html:146
+#: templates/telemeta/base.html:116 templates/telemeta/users.html:6
+#: templates/telemeta/users.html.py:69
+msgid "Users"
+msgstr ""
+
+#: templates/telemeta/base.html:157
 msgid "Admin"
 msgstr ""
 
-#: templates/telemeta/base.html:154
+#: templates/telemeta/base.html:166 templates/telemeta/base.html.py:175
 msgid "Profile"
 msgstr "Profil"
 
-#: templates/telemeta/base.html:156
+#: templates/telemeta/base.html:168
 msgid "Lists"
 msgstr ""
 
-#: templates/telemeta/base.html:159
+#: templates/telemeta/base.html:171 templates/telemeta/base.html.py:176
 msgid "Sign out"
 msgstr ""
 
-#: templates/telemeta/base.html:201
+#: templates/telemeta/base.html:226
 msgid "Powered by"
 msgstr ""
 
-#: templates/telemeta/base.html:211
+#: templates/telemeta/base.html:236
 msgid "Legal notices"
 msgstr ""
 
@@ -1899,57 +2249,6 @@ msgstr ""
 msgid "Connexion"
 msgstr ""
 
-#: templates/telemeta/inc/module_revisions.html:19
-msgid "User"
-msgstr ""
-
-#: templates/telemeta/inc/module_revisions.html:40
-#: templates/telemeta/lists.html:92
-msgid "deleted"
-msgstr ""
-
-#: templates/telemeta/inc/module_searches.html:12
-msgid "Criteria"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:22
-#: templates/telemeta/profile_detail.html:65 templates/telemeta/users.html:15
-msgid "Trainings"
-msgstr "Formations"
-
-#: templates/telemeta/inc/user_list.html:23
-#: templates/telemeta/profile_detail.html:67
-msgid "Procedure"
-msgstr "Procédure"
-
-#: templates/telemeta/inc/user_list.html:24
-#: templates/telemeta/profile_detail.html:69
-msgid "Written spe"
-msgstr "Ecrit Spé"
-
-#: templates/telemeta/inc/user_list.html:25
-#: templates/telemeta/profile_detail.html:68
-msgid "Oral spe"
-msgstr "Oral Spé"
-
-#: templates/telemeta/inc/user_list.html:26
-#: templates/telemeta/profile_detail.html:70
-msgid "Oral 1"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:27
-#: templates/telemeta/profile_detail.html:71
-msgid "Oral 2"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:56
-msgid "Administrator"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:64
-msgid "Unknown"
-msgstr ""
-
 #: templates/telemeta/lists.html:47
 msgid "My playlists"
 msgstr ""
@@ -1978,6 +2277,11 @@ msgstr "période d'enregistrement"
 msgid "Sound"
 msgstr "Sonore"
 
+#: templates/telemeta/lists.html:92
+#: templates/telemeta/inc/module_revisions.html:40
+msgid "deleted"
+msgstr ""
+
 #: templates/telemeta/login.html:29
 msgid "Password forgotten"
 msgstr ""
@@ -1986,51 +2290,76 @@ msgstr ""
 msgid "Sign in"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:6
+#: templates/telemeta/profile_detail.html:7
 msgid "User Profile"
 msgstr "Profil utilisateur"
 
-#: templates/telemeta/profile_detail.html:16
+#: templates/telemeta/profile_detail.html:17
 msgid "His courses"
 msgstr "Ses matières"
 
-#: templates/telemeta/profile_detail.html:36
+#: templates/telemeta/profile_detail.html:37
 msgid "Send a message"
 msgstr "Envoyer un message"
 
-#: templates/telemeta/profile_detail.html:44
+#: templates/telemeta/profile_detail.html:45
 msgid "User profile"
 msgstr "Profil utilisateur"
 
-#: templates/telemeta/profile_detail.html:51
+#: templates/telemeta/profile_detail.html:52
 msgid "Login as"
 msgstr "Se connecter en tant que"
 
-#: templates/telemeta/profile_detail.html:66
+#: templates/telemeta/profile_detail.html:70 templates/telemeta/users.html:15
+#: templates/telemeta/inc/user_list.html:23
+msgid "Trainings"
+msgstr "Formations"
+
+#: templates/telemeta/profile_detail.html:71
 msgid "Platform only"
 msgstr "Plateforme seulement"
 
-#: templates/telemeta/profile_detail.html:72
+#: templates/telemeta/profile_detail.html:73
+#: templates/telemeta/inc/user_list.html:26
+msgid "Oral spe"
+msgstr "Oral Spé"
+
+#: templates/telemeta/profile_detail.html:74
+#: templates/telemeta/inc/user_list.html:25
+msgid "Written spe"
+msgstr "Ecrit Spé"
+
+#: templates/telemeta/profile_detail.html:75
+#: templates/telemeta/inc/user_list.html:27
+msgid "Oral 1"
+msgstr ""
+
+#: templates/telemeta/profile_detail.html:76
+#: templates/telemeta/inc/user_list.html:28
+msgid "Oral 2"
+msgstr ""
+
+#: templates/telemeta/profile_detail.html:77
 msgid "Options"
 msgstr "Options"
 
-#: templates/telemeta/profile_detail.html:76
+#: templates/telemeta/profile_detail.html:81
 msgid "Email"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:80
+#: templates/telemeta/profile_detail.html:85
 msgid "WiFi password"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:84
+#: templates/telemeta/profile_detail.html:89
 msgid "Expiration date"
 msgstr "Date d'expiration"
 
-#: templates/telemeta/profile_detail.html:85
+#: templates/telemeta/profile_detail.html:90
 msgid "Last login"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:96
+#: templates/telemeta/profile_detail.html:101
 msgid "Apply"
 msgstr ""
 
@@ -2057,10 +2386,6 @@ msgstr "à"
 msgid "Year of publication"
 msgstr "obligation"
 
-#: templates/telemeta/users.html:6 templates/telemeta/users.html:69
-msgid "Users"
-msgstr ""
-
 #: templates/telemeta/users.html:41
 msgid "Courses"
 msgstr "Matières"
@@ -2069,34 +2394,46 @@ msgstr "Matières"
 msgid "No users"
 msgstr "Pas d'utilisateurs"
 
-#: templatetags/teleforma_tags.py:63
+#: templates/telemeta/inc/module_searches.html:12
+msgid "Criteria"
+msgstr ""
+
+#: templates/telemeta/inc/user_list.html:57
+msgid "Administrator"
+msgstr ""
+
+#: templates/telemeta/inc/user_list.html:65
+msgid "Unknown"
+msgstr ""
+
+#: templatetags/teleforma_tags.py:50
 msgid "General tweeter"
 msgstr "Tweeter général"
 
-#: templatetags/teleforma_tags.py:64
+#: templatetags/teleforma_tags.py:51
 msgid "Local tweeter"
 msgstr "Tweeter local"
 
-#: templatetags/teleforma_tags.py:129
+#: templatetags/teleforma_tags.py:121
 msgid "me"
 msgstr "moi"
 
-#: templatetags/teleforma_tags.py:136
+#: templatetags/teleforma_tags.py:128
 msgid "No"
 msgstr "Non"
 
-#: views/core.py:156
+#: views/core.py:157
 msgid "Access not allowed."
 msgstr "Accès non autorisé."
 
-#: views/core.py:157
+#: views/core.py:158
 msgid ""
 "Please login or contact the website administator to get a private access."
 msgstr ""
 "Merci de vous connecter ou bien contactez l'administateur du site pour "
 "obtenir un accès privé."
 
-#: views/core.py:270
+#: views/core.py:336
 msgid ""
 "You do NOT have access to this resource and then have been redirected to "
 "your desk."
@@ -2104,14 +2441,50 @@ msgstr ""
 "Vous n'avez pas accès à cette ressource et avez été redirigé vers votre "
 "bureau."
 
-#: views/core.py:618
+#: views/core.py:755
 msgid "A new live conference has started : "
 msgstr "Une nouvelle conférence en direct a commencé : "
 
-#: views/crfpa.py:423
-msgid "You have successfully register your account."
+#: webclass/models.py:109
+msgid "BBB server"
+msgstr ""
+
+#: webclass/models.py:110
+msgid "BBB servers"
+msgstr ""
+
+#: webclass/models.py:139 webclass/models.py:140
+msgid "webclass"
+msgstr ""
+
+#: webclass/models.py:163
+msgid "participants"
+msgstr ""
+
+#: webclass/models.py:173
+msgid "webclass slot"
 msgstr ""
 
+#~ msgid "platform only"
+#~ msgstr "plateforme seulement"
+
+#, fuzzy
+#~| msgid "credits"
+#~ msgid "credit card"
+#~ msgstr "crédits"
+
+#~ msgid "collected"
+#~ msgstr "encaissé"
+
+#~ msgid "Answer"
+#~ msgstr "Réponse"
+
+#~ msgid "to an administrator"
+#~ msgstr "à un administrateur"
+
+#~ msgid "to a professor"
+#~ msgstr "à un professeur"
+
 #, fuzzy
 #~| msgid "Grouped message"
 #~ msgid "Group messages"
@@ -2137,9 +2510,6 @@ msgstr ""
 #~ msgid "Validate"
 #~ msgstr "Validée"
 
-#~ msgid "Correctors"
-#~ msgstr "Correcteurs"
-
 #~ msgid "Treated"
 #~ msgstr "Traitées"
 
@@ -2153,9 +2523,6 @@ msgstr ""
 #~ msgid " pending"
 #~ msgstr " en attente"
 
-#~ msgid "AE students"
-#~ msgstr "Etudiants AE"
-
 #~ msgid "CRFPA student"
 #~ msgstr "Etudiant CRFPA"
 
@@ -2186,12 +2553,6 @@ msgstr ""
 #~ msgid "Differed"
 #~ msgstr "Différé"
 
-#~ msgid "category"
-#~ msgstr "catégorie"
-
-#~ msgid "categories"
-#~ msgstr "catégories"
-
 #~ msgid "speciality"
 #~ msgstr "spécialité"
 
index 42d0ece2b79f40de3c4a90a7519baa20e7e04fc3..30d50c2e635620c00e3ff0ddceea160bd66b45b8 100644 (file)
Binary files a/teleforma/locale/fr/LC_MESSAGES/django.mo and b/teleforma/locale/fr/LC_MESSAGES/django.mo differ
index 76f16ced4d771b68c3a6a3030d53bcff418f9190..4ec4785748e128f2859becb4d4569494344c1818 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-13 15:58+0100\n"
+"POT-Creation-Date: 2020-12-15 16:28+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Guillaume Pellerin <yomguy@parisson.com>\n"
 "Language-Team: LANGUAGE <lists@parisson.com>\n"
@@ -16,338 +16,408 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1)\n"
 
-#: admin.py:20 exam/models.py:122 exam/models.py:225 models/ae.py:47
-#: models/core.py:113 models/core.py:148 models/core.py:288 models/core.py:547
-#: models/core.py:593 models/core.py:635 models/crfpa.py:81 models/crfpa.py:160
+#: admin.py:21 exam/models.py:140 exam/models.py:248 models/core.py:137
+#: models/core.py:176 models/core.py:342 models/core.py:664 models/core.py:706
+#: models/crfpa.py:83 models/crfpa.py:177 models/crfpa.py:188
+#: models/crfpa.py:261 models/crfpa.py:407 webclass/models.py:125
+#: webclass/models.py:380
 msgid "period"
 msgstr "période"
 
-#: admin.py:67
+#: admin.py:69
 msgid "Group"
 msgstr "Groupe"
 
-#: exam/models.py:62 exam/models.py:454
+#: admin.py:76
+msgid "balance"
+msgstr ""
+
+#: admin.py:270
+#, fuzzy
+msgid "date de début"
+msgstr "date d'ajout"
+
+#: forms.py:70 forms.py:206 models/crfpa.py:228
+#: templates/registration/registration_corrector_pdf.html:44
+#: templates/registration/registration_pdf.html:49
+#: templates/telemeta/profile_detail.html:82
+msgid "Address"
+msgstr "Adresse"
+
+#: forms.py:71 forms.py:207 models/crfpa.py:229
+msgid "Address detail"
+msgstr "Adresse (detail)"
+
+#: forms.py:72 forms.py:208 models/crfpa.py:230
+msgid "Postal code"
+msgstr "Code postal"
+
+#: forms.py:73 forms.py:209 models/crfpa.py:231
+msgid "City"
+msgstr "Ville"
+
+#: forms.py:74 forms.py:210 models/crfpa.py:232
+msgid "Country"
+msgstr "Pays"
+
+#: forms.py:75 forms.py:211 models/crfpa.py:234
+#: templates/registration/registration_corrector_pdf.html:48
+#: templates/registration/registration_pdf.html:53
+#: templates/telemeta/profile_detail.html:83
+msgid "Telephone"
+msgstr "Téléphone"
+
+#: forms.py:76 forms.py:212
+#: templates/registration/registration_corrector_pdf.html:60
+#: templates/registration/registration_pdf.html:65
+msgid "Birthday"
+msgstr "Date de naissance"
+
+#: forms.py:80 templates/registration/registration_pdf.html:70
+msgid "Studying level"
+msgstr "Niveau d'étude"
+
+#: forms.py:92 templates/telemeta/profile_detail.html:72
+#: templates/telemeta/inc/user_list.html:24
+msgid "Procedure"
+msgstr "Procédure"
+
+#: forms.py:98
+msgid "Oral de langue (option)"
+msgstr ""
+
+#: forms.py:101
+msgid "Code promo"
+msgstr ""
+
+#: forms.py:103
+msgid "Échéancier de paiement"
+msgstr ""
+
+#: forms.py:298
+msgid "Recipients"
+msgstr ""
+
+#: forms.py:298 templates/postman/base_folder.html:42
+#: templates/postman/reply.html:4
+msgid "Recipient"
+msgstr ""
+
+#: exam/models.py:79 exam/models.py:452
 msgid "rejected"
 msgstr "rejetée"
 
-#: exam/models.py:62
+#: exam/models.py:79
 msgid "draft"
 msgstr "brouillon"
 
-#: exam/models.py:62
+#: exam/models.py:79
 msgid "submitted"
 msgstr "soumise"
 
-#: exam/models.py:63
+#: exam/models.py:80
 msgid "pending"
 msgstr "en attente"
 
-#: exam/models.py:63 exam/models.py:439
+#: exam/models.py:80 exam/models.py:437
 msgid "marked"
 msgstr "corrigée"
 
-#: exam/models.py:63
+#: exam/models.py:80
 msgid "read"
 msgstr "lu"
 
-#: exam/models.py:63
+#: exam/models.py:81
 msgid "backup"
 msgstr "sauvegardé"
 
-#: exam/models.py:65
+#: exam/models.py:81
+#, fuzzy
+msgid "stat"
+msgstr "status"
+
+#: exam/models.py:83
 msgid "unreadable"
 msgstr "illisible"
 
-#: exam/models.py:66
+#: exam/models.py:84
 msgid "bad orientation"
 msgstr "mauvaise orientation"
 
-#: exam/models.py:67
+#: exam/models.py:85
 msgid "bad framing"
 msgstr "mauvais cadrage"
 
-#: exam/models.py:68
+#: exam/models.py:86
 msgid "incomplete"
 msgstr "incomplet"
 
-#: exam/models.py:69
+#: exam/models.py:87
 msgid "wrong course"
 msgstr "mauvaise matière"
 
-#: exam/models.py:70
+#: exam/models.py:88
 msgid "duplicate"
 msgstr "doublon"
 
-#: exam/models.py:71
+#: exam/models.py:89
 msgid "other"
 msgstr "autre"
 
-#: exam/models.py:72
+#: exam/models.py:90
 msgid "wrong format"
 msgstr "mauvais format"
 
-#: exam/models.py:73
+#: exam/models.py:91
 msgid "unreadable file"
 msgstr "fichier illisible"
 
-#: exam/models.py:74
+#: exam/models.py:92
 msgid "no file"
 msgstr "pas de fichier"
 
-#: exam/models.py:75
-msgid "file too large"
-msgstr "fichier trop gros"
-
-#: exam/models.py:76
+#: exam/models.py:93
 msgid "error retrieving file"
 msgstr "erreur de lecture de fichier"
 
-#: exam/models.py:120 exam/models.py:224 models/core.py:215 models/core.py:290
-#: models/core.py:542 models/core.py:631 models/pro.py:45
+#: exam/models.py:94
+msgid "file too large"
+msgstr "fichier trop gros"
+
+#: exam/models.py:138 exam/models.py:247 models/core.py:269 models/core.py:344
+#: models/core.py:611 models/core.py:702 models/crfpa.py:406 models/pro.py:45
+#: webclass/models.py:126 webclass/models.py:381
 msgid "course"
 msgstr "matière"
 
-#: exam/models.py:121 exam/models.py:231
+#: exam/models.py:139 exam/models.py:253
 msgid "corrector"
 msgstr "correcteur"
 
-#: exam/models.py:123 exam/models.py:227 models/core.py:294 models/core.py:551
+#: exam/models.py:141 exam/models.py:250 models/core.py:348 models/core.py:622
 msgid "session"
 msgstr "séance"
 
-#: exam/models.py:124
+#: exam/models.py:142
 msgid "value"
 msgstr "valeur"
 
-#: exam/models.py:125 exam/templates/exam/quotas.html:22
+#: exam/models.py:143 exam/templates/exam/quotas.html:22
 msgid "date start"
 msgstr "date de début"
 
-#: exam/models.py:126 exam/templates/exam/quotas.html:23
+#: exam/models.py:144 exam/templates/exam/quotas.html:23
 msgid "date end"
 msgstr "date de fin"
 
-#: exam/models.py:127 exam/models.py:229 models/core.py:440 models/core.py:549
-#: models/core.py:639
+#: exam/models.py:145 exam/models.py:251 models/core.py:503 models/core.py:620
+#: models/core.py:710
 msgid "type"
 msgstr "type"
 
-#: exam/models.py:130
+#: exam/models.py:148
 msgid "Quota"
 msgstr ""
 
-#: exam/models.py:131 exam/templates/exam/quotas.html:12
+#: exam/models.py:149 exam/templates/exam/quotas.html:12
 msgid "Quotas"
 msgstr ""
 
-#: exam/models.py:180 models/core.py:509 models/pro.py:67
+#: exam/models.py:203 models/core.py:575 models/pro.py:67
 msgid "date added"
 msgstr "date d'ajout"
 
-#: exam/models.py:181 models/core.py:172 models/core.py:510 models/crfpa.py:263
+#: exam/models.py:204 models/core.py:200 models/core.py:576 models/crfpa.py:300
 #: models/pro.py:68
 msgid "date modified"
 msgstr "date de modification"
 
-#: exam/models.py:182
+#: exam/models.py:205
 msgid "UUID"
 msgstr ""
 
-#: exam/models.py:183
+#: exam/models.py:206
 msgid "MIME type"
 msgstr "Type MIME"
 
-#: exam/models.py:184
+#: exam/models.py:207
 msgid "sha1"
 msgstr ""
 
-#: exam/models.py:200
+#: exam/models.py:223
 msgid "script"
 msgstr "copie"
 
-#: exam/models.py:201
+#: exam/models.py:224
 msgid "Page file"
 msgstr "Fichier de page"
 
-#: exam/models.py:202
+#: exam/models.py:225
 msgid "Image file"
 msgstr "Fichier image"
 
-#: exam/models.py:203 models/pro.py:49 models/pro.py:85
+#: exam/models.py:226 models/pro.py:49 models/pro.py:85
 msgid "rank"
 msgstr "rang"
 
-#: exam/models.py:206
+#: exam/models.py:229
 msgid "Page"
 msgstr "Page"
 
-#: exam/models.py:207
+#: exam/models.py:230
 msgid "Pages"
 msgstr "Pages"
 
-#: exam/models.py:212 models/core.py:96 models/core.py:109 models/core.py:129
-#: models/core.py:153 models/core.py:222 models/core.py:272 models/core.py:525
-#: models/crfpa.py:45 models/crfpa.py:60 models/crfpa.py:79
-#: models/messages.py:12
+#: exam/models.py:235 models/appointment.py:29 models/appointment.py:293
+#: models/core.py:120 models/core.py:133 models/core.py:153 models/core.py:181
+#: models/core.py:276 models/core.py:326 models/core.py:591 models/crfpa.py:47
+#: models/crfpa.py:62 models/crfpa.py:81 models/messages.py:12
 msgid "name"
 msgstr "nom"
 
-#: exam/models.py:215
+#: exam/models.py:238
 msgid "ScriptType"
 msgstr "Type de copie"
 
-#: exam/models.py:216
+#: exam/models.py:239
 msgid "ScriptTypes"
 msgstr "Types de copies"
 
-#: exam/models.py:230
+#: exam/models.py:252
 msgid "author"
 msgstr "auteur"
 
-#: exam/models.py:232
+#: exam/models.py:254
 msgid "PDF file"
 msgstr "Fichier PDF"
 
-#: exam/models.py:233
+#: exam/models.py:255
 msgid "Box UUID"
 msgstr ""
 
-#: exam/models.py:234
+#: exam/models.py:256
 msgid "score"
 msgstr "note"
 
-#: exam/models.py:235 models/pro.py:125
+#: exam/models.py:257 models/pro.py:125
 msgid "comments"
 msgstr "commentaires"
 
-#: exam/models.py:236 models/core.py:303 models/pro.py:48 models/pro.py:88
-#: models/pro.py:104
+#: exam/models.py:258 models/core.py:357 models/pro.py:48 models/pro.py:88
+#: models/pro.py:104 webclass/models.py:132
 msgid "status"
 msgstr "status"
 
-#: exam/models.py:237
+#: exam/models.py:259
 msgid "reason"
 msgstr "raison"
 
-#: exam/models.py:238
+#: exam/models.py:260
 msgid "date submitted"
 msgstr "date de soumission"
 
-#: exam/models.py:239
+#: exam/models.py:261
 msgid "date marked"
 msgstr "date de correction"
 
-#: exam/models.py:240
+#: exam/models.py:262
 msgid "date rejected"
 msgstr "date de rejet"
 
-#: exam/models.py:241
+#: exam/models.py:263
 msgid "URL"
 msgstr ""
 
-#: exam/models.py:245 exam/templates/exam/inc/script_list.html:14
-#: templates/teleforma/course.html:50
+#: exam/models.py:268 exam/models.py:270 exam/templates/exam/scripts.html:83
+#: exam/templates/exam/inc/script_list.html:14
+#: templates/teleforma/course.html:52
 #: templates/teleforma/course_conference.html:39
 #: templates/teleforma/course_conference.html:67
 #: templates/teleforma/course_conference_audio.html:68
-#: templates/teleforma/course_media.html:86
-#: templates/teleforma/course_media.html:138
+#: templates/teleforma/course_media.html:87
+#: templates/teleforma/course_media.html:139
 #: templates/teleforma/course_media_video_embed.html:34
 #: templates/teleforma/inc/conference_list.html:26
 #: templates/teleforma/inc/media_list.html:37
-#: templates/teleforma/inc/media_list_pending.html:37
+#: templates/teleforma/inc/media_list_pending.html:38
 msgid "Session"
 msgstr "Séance"
 
-#: exam/models.py:258 exam/models.py:438 exam/models.py:453
+#: exam/models.py:286 exam/models.py:436 exam/models.py:451
 msgid "Script"
 msgstr "Copie"
 
-#: exam/models.py:259 exam/templates/exam/scripts.html:21
-#: templates/telemeta/base.html:116 templates/telemeta/base.html:121
+#: exam/models.py:287 exam/templates/exam/scripts.html:21
+#: templates/telemeta/base.html:122 templates/telemeta/base.html.py:127
 msgid "Scripts"
 msgstr "Copies"
 
-#: exam/templates/exam/inc/script_list.html:13
-#: exam/templates/exam/quotas.html:21
-#: templates/teleforma/course_conference.html:66
-#: templates/teleforma/course_media.html:137
-#: templates/teleforma/course_media_video_embed.html:33
-msgid "Course"
-msgstr "Matière"
-
-#: exam/templates/exam/inc/script_list.html:15
-#: templates/telemeta/inc/module_revisions.html:18
-#: templates/telemeta/lists.html:70
-msgid "Type"
-msgstr "Type"
+#: exam/views.py:221
+msgid "Pending scripts"
+msgstr "Copies en attente"
 
-#: exam/templates/exam/inc/script_list.html:16
-#: templates/telemeta/inc/user_list.html:19
-#: templates/telemeta/profile_detail.html:60
-msgid "Last Name"
-msgstr "Nom"
+#: exam/views.py:232
+msgid "Treated scripts"
+msgstr "Copie traitées"
 
-#: exam/templates/exam/inc/script_list.html:17
-#: templates/telemeta/inc/user_list.html:20
-#: templates/telemeta/profile_detail.html:59
-msgid "First Name"
-msgstr "Prénom"
+#: exam/views.py:241
+msgid "Rejected scripts"
+msgstr "Copies rejetées"
 
-#: exam/templates/exam/inc/script_list.html:18
-msgid "Submission date"
-msgstr "Date de soumission"
+#: exam/views.py:258
+msgid ""
+"Error: you have already submitted a script for this session, the same course "
+"and the same type!"
+msgstr ""
+"Erreur : vous avez déjà soumis une copie du même type pour la même matière "
+"et la même séance."
 
-#: exam/templates/exam/inc/script_list.html:19
-msgid "Mark date"
-msgstr "Date de correction"
+#: exam/views.py:262
+msgid ""
+"You have successfully submitted your script. It will be processed in the "
+"next hours."
+msgstr ""
+"Vous avez correctement soumis votre copie. Elle sera traitée dans les "
+"prochaines heures puis corrigée."
 
-#: exam/templates/exam/inc/script_list.html:20
-#: exam/templates/exam/quotas.html:20
-msgid "Corrector"
-msgstr "Correcteur"
+#: exam/views.py:266
+msgid ""
+"There was a problem with your submission. Please try again, later if "
+"possible."
+msgstr ""
+"Il y a une une erreur lors de votre soumission de copie. Merci de vérifier "
+"votre fichier ou de réessayer plus tard."
 
-#: exam/templates/exam/inc/script_list.html:21
-#: exam/templates/exam/script_detail.html:36
-msgid "Score"
-msgstr "Note"
+#: exam/views.py:311
+msgid "You must add your score to access to the statistics."
+msgstr "Vous devez ajouter votre note pour accéder aux statistiques."
 
-#: exam/templates/exam/messages/script_fix.txt:9
-#: exam/templates/exam/messages/script_marked.txt:9
-#: exam/templates/exam/messages/script_rejected.txt:7
-#: templates/postman/email_user_init.txt:24
-msgid "Best regards"
-msgstr "Cordialement"
+#: exam/views.py:390
+msgid "all courses"
+msgstr "toutes les matières"
 
-#: exam/templates/exam/messages/script_fix.txt:10
-#: exam/templates/exam/messages/script_marked.txt:10
-#: exam/templates/exam/messages/script_rejected.txt:8
-#: templates/postman/email_user.txt:20 templates/postman/email_user_init.txt:25
-#: templates/postman/email_visitor.txt:16
-msgid "The site administrator"
-msgstr "L'administrateur du site"
+#: exam/templates/exam/mass_score_form.html:139
+#: exam/templates/exam/score_form.html:82
+#: exam/templates/exam/script_form.html:91
+#: templates/registration/registration_form.html:125
+msgid "Submit"
+msgstr "Soumettre"
 
-#: exam/templates/exam/messages/script_fix.txt:10
-#: exam/templates/exam/messages/script_marked.txt:10
-#: exam/templates/exam/messages/script_rejected.txt:8
-#: templates/postman/email_user_init.txt:25
-msgid "of the"
-msgstr "du"
+#: exam/templates/exam/quotas.html:20 exam/templates/exam/scripts.html:68
+#: exam/templates/exam/inc/script_list.html:20
+msgid "Corrector"
+msgstr "Correcteur"
 
-#: exam/templates/exam/messages/script_fix.txt:13
-#: exam/templates/exam/messages/script_marked.txt:13
-#: exam/templates/exam/messages/script_rejected.txt:11
-#: templates/postman/email_user.txt:22 templates/postman/email_user_init.txt:28
-#: templates/postman/email_visitor.txt:18
-msgid ""
-"Note: This message is issued by an automated system.\n"
-"Do not reply, this would not be taken into account."
-msgstr ""
-"NB: Ce message est émis par un automate. Ne faites pas de réponse, elle ne "
-"serait pas prise en compte."
+#: exam/templates/exam/quotas.html:21 exam/templates/exam/scripts.html:76
+#: exam/templates/exam/inc/script_list.html:13 models/appointment.py:31
+#: models/crfpa.py:263 templates/teleforma/course_conference.html:66
+#: templates/teleforma/course_media.html:138
+#: templates/teleforma/course_media_video_embed.html:33
+msgid "Course"
+msgstr "Matière"
 
 #: exam/templates/exam/quotas.html:24 exam/templates/exam/scripts.html:25
-#: templates/teleforma/courses.html:48
+#: templates/teleforma/courses.html:51
 msgid "Pending"
 msgstr "En attente"
 
@@ -363,70 +433,66 @@ msgstr "Valeur"
 msgid "Level"
 msgstr "Niveau"
 
-#: exam/templates/exam/score_form.html:32 exam/templates/exam/scores.html:37
+#: exam/templates/exam/score_form.html:32 exam/templates/exam/scores.html:33
 msgid "New score"
 msgstr "Nouvelle note"
 
-#: exam/templates/exam/score_form.html:60
-#: exam/templates/exam/script_form.html:78
-#: templates/registration/registration_form.html:22
-msgid "Submit"
-msgstr "Soumettre"
-
 #: exam/templates/exam/scores.html:20 templates/teleforma/annals.html:15
-#: templates/telemeta/profile_detail.html:16
+#: templates/telemeta/profile_detail.html:17
 msgid "My courses"
 msgstr "Mes matières"
 
-#: exam/templates/exam/scores.html:48 templates/telemeta/base.html:133
-#: templates/telemeta/base.html:135
+#: exam/templates/exam/scores.html:49 templates/telemeta/base.html:143
+#: templates/telemeta/base.html.py:145
 msgid "Scores"
 msgstr "Notes"
 
-#: exam/templates/exam/script_detail.html:33
+#: exam/templates/exam/script_detail.html:55
 msgid "Topic"
 msgstr "Sujet"
 
-#: exam/templates/exam/script_detail.html:37
-#: exam/templates/exam/script_detail.html:54
+#: exam/templates/exam/script_detail.html:58
+#: exam/templates/exam/inc/script_list.html:21 templates/quiz/progress.html:60
+#: templates/quiz/sitting_detail.html:15 templates/quiz/sitting_list.html:16
+msgid "Score"
+msgstr "Note"
+
+#: exam/templates/exam/script_detail.html:59
+#: exam/templates/exam/script_detail.html:76
 msgid "Comments"
 msgstr "Commentaire"
 
-#: exam/templates/exam/script_detail.html:38
-msgid "Imprimer"
-msgstr ""
-
-#: exam/templates/exam/script_detail.html:40
-#: exam/templates/exam/scripts.html:27 templates/postman/view.html:25
+#: exam/templates/exam/script_detail.html:62
+#: exam/templates/exam/scripts.html:27 templates/postman/view.html:33
 msgid "Rejected"
 msgstr "Rejeté"
 
-#: exam/templates/exam/script_detail.html:43
+#: exam/templates/exam/script_detail.html:65
 msgid "Scoring"
 msgstr "Noter"
 
-#: exam/templates/exam/script_detail.html:44
-#: exam/templates/exam/script_detail.html:85
-#: exam/templates/exam/script_detail.html:103
+#: exam/templates/exam/script_detail.html:66
+#: exam/templates/exam/script_detail.html:107
+#: exam/templates/exam/script_detail.html:125
 msgid "Reject"
 msgstr "Rejeter"
 
-#: exam/templates/exam/script_detail.html:46
+#: exam/templates/exam/script_detail.html:68
 msgid "Submitted"
 msgstr "Soumise"
 
-#: exam/templates/exam/script_detail.html:58
+#: exam/templates/exam/script_detail.html:80
 msgid "Mark"
 msgstr "Note"
 
-#: exam/templates/exam/script_detail.html:80
-#: templates/postman/base_write.html:63
-#: templates/teleforma/inc/chat_room.html:13
+#: exam/templates/exam/script_detail.html:102
+#: templates/postman/base_write.html:110
+#: templates/teleforma/inc/chat_room.html:17
 msgid "Send"
 msgstr "Envoyé"
 
-#: exam/templates/exam/script_detail.html:108 templates/teleforma/help.html:11
-#: templates/telemeta/base.html:148 templates/telemeta/base.html:157
+#: exam/templates/exam/script_detail.html:130 templates/teleforma/help.html:11
+#: templates/telemeta/base.html:159 templates/telemeta/base.html.py:169
 msgid "Help"
 msgstr "Aide"
 
@@ -442,519 +508,576 @@ msgstr "Copie vierge"
 msgid "Answers"
 msgstr "Réponses"
 
-#: exam/templates/exam/scripts.html:67
-msgid "No scripts"
-msgstr "Aucune copie"
-
-#: exam/views.py:106
-msgid "Pending scripts"
-msgstr "Copies en attente"
-
-#: exam/views.py:132
-msgid "Treated scripts"
-msgstr "Copie traitées"
-
-#: exam/views.py:154
-msgid "Rejected scripts"
-msgstr "Copies rejetées"
-
-#: exam/views.py:173
-msgid ""
-"Error: you have already submitted a script for this session, the same course "
-"and the same type!"
-msgstr ""
-"Erreur : vous avez déjà soumis une copie du même type pour la même matière "
-"et la même séance."
-
-#: exam/views.py:177
-msgid ""
-"You have successfully submitted your script. It will be processed in the "
-"next hours."
-msgstr ""
-"Vous avez correctement soumis votre copie. Elle sera traitée dans les "
-"prochaines heures puis corrigée."
+#: exam/templates/exam/scripts.html:90
+#: exam/templates/exam/inc/script_list.html:15 templates/telemeta/lists.html:70
+#: templates/telemeta/inc/module_revisions.html:18
+msgid "Type"
+msgstr "Type"
 
-#: exam/views.py:181
-msgid ""
-"There was a problem with your submission. Please try again, later if "
-"possible."
+#: exam/templates/exam/scripts.html:98
+msgid "E-learning uniquement"
 msgstr ""
-"Il y a une une erreur lors de votre soumission de copie. Merci de vérifier "
-"votre fichier ou de réessayer plus tard."
 
-#: exam/views.py:218
-msgid "You must add your score to access to the statistics."
-msgstr "Vous devez ajouter votre note pour accéder aux statistiques."
+#: exam/templates/exam/scripts.html:113
+msgid "No scripts"
+msgstr "Aucune copie"
 
-#: exam/views.py:282
-msgid "all courses"
-msgstr "toutes les matières"
+#: exam/templates/exam/inc/script_list.html:16
+#: templates/telemeta/profile_detail.html:65
+#: templates/telemeta/inc/user_list.html:20
+msgid "Last Name"
+msgstr "Nom"
 
-#: models/ae.py:46 models/core.py:237 models/crfpa.py:132 models/crfpa.py:230
-#: models/pro.py:101 models/pro.py:140
-msgid "user"
-msgstr "utilisateur"
+#: exam/templates/exam/inc/script_list.html:17
+#: templates/telemeta/profile_detail.html:64
+#: templates/telemeta/inc/user_list.html:21
+msgid "First Name"
+msgstr "Prénom"
 
-#: models/ae.py:49
-msgid "platform only"
-msgstr "plateforme seulement"
+#: exam/templates/exam/inc/script_list.html:18
+msgid "Submission date"
+msgstr "Date de soumission"
 
-#: models/ae.py:51 models/core.py:223 models/core.py:239
-msgid "courses"
-msgstr "matières"
+#: exam/templates/exam/inc/script_list.html:19
+msgid "Mark date"
+msgstr "Date de correction"
 
-#: models/ae.py:62
-msgid "AE student"
-msgstr "Etudiant AE"
+#: exam/templates/exam/messages/script_fix.txt:9
+#: exam/templates/exam/messages/script_marked.txt:9
+#: exam/templates/exam/messages/script_rejected.txt:7
+#: templates/postman/email_user_init.txt:22
+msgid "Best regards"
+msgstr "Cordialement"
 
-#: models/ae.py:63
-msgid "AE students"
-msgstr "Etudiants AE"
+#: exam/templates/exam/messages/script_fix.txt:10
+#: exam/templates/exam/messages/script_marked.txt:10
+#: exam/templates/exam/messages/script_rejected.txt:8
+#: templates/postman/email_user.txt:20 templates/postman/email_user_init.txt:23
+#: templates/postman/email_visitor.txt:16
+msgid "The site administrator"
+msgstr "L'administrateur du site"
 
-#: models/core.py:74
-#: models/core.py:75
-msgid "check"
-msgstr ""
+#: exam/templates/exam/messages/script_fix.txt:10
+#: exam/templates/exam/messages/script_marked.txt:10
+#: exam/templates/exam/messages/script_rejected.txt:8
+#: templates/postman/email_user_init.txt:23
+msgid "of the"
+msgstr "du"
 
-#: models/core.py:75
-msgid "transfer"
+#: exam/templates/exam/messages/script_fix.txt:13
+#: exam/templates/exam/messages/script_marked.txt:13
+#: exam/templates/exam/messages/script_rejected.txt:11
+#: templates/postman/email_user.txt:22 templates/postman/email_user_init.txt:25
+#: templates/postman/email_visitor.txt:18
+msgid ""
+"Note: This message is issued by an automated system.\n"
+"Do not reply, this would not be taken into account."
 msgstr ""
+"NB: Ce message est émis par un automate. Ne faites pas de réponse, elle ne "
+"serait pas prise en compte."
 
-#: models/core.py:75
-msgid "credit card"
-msgstr "carte de crédit"
-
-#: models/core.py:75
-msgid "money"
+#: models/appointment.py:38
+msgid "activer la prise de rendez-vous"
 msgstr ""
 
-#: models/core.py:78
+#: models/core.py:92
 msgid "Hidden"
 msgstr "Caché"
 
-#: models/core.py:79
+#: models/core.py:93
 msgid "Private"
 msgstr "Privé"
 
-#: models/core.py:80
+#: models/core.py:94 webclass/models.py:28
 msgid "Draft"
 msgstr "Brouillon"
 
-#: models/core.py:81
+#: models/core.py:95 webclass/models.py:29
 msgid "Public"
 msgstr "Publié"
 
-#: models/core.py:97 models/core.py:110 models/core.py:130 models/core.py:154
-#: models/core.py:169 models/core.py:273 models/core.py:441 models/core.py:507
-#: models/core.py:526 models/crfpa.py:46 models/crfpa.py:80 models/crfpa.py:277
-#: models/crfpa.py:290 models/crfpa.py:303 models/pro.py:124
+#: models/core.py:121 models/core.py:134 models/core.py:154 models/core.py:182
+#: models/core.py:197 models/core.py:327 models/core.py:504 models/core.py:573
+#: models/core.py:592 models/crfpa.py:48 models/crfpa.py:82 models/crfpa.py:321
+#: models/crfpa.py:334 models/crfpa.py:347 models/pro.py:124
 msgid "description"
 msgstr "description"
 
-#: models/core.py:104 models/core.py:111 models/core.py:271 models/pro.py:123
+#: models/core.py:128 models/core.py:135 models/core.py:325 models/pro.py:123
 msgid "organization"
 msgstr "organisation"
 
-#: models/core.py:112
+#: models/core.py:136
 msgid "Master domain"
 msgstr ""
 
-#: models/core.py:124 models/core.py:133 models/core.py:167 models/core.py:242
-#: models/core.py:286
+#: models/core.py:148 models/core.py:157 models/core.py:195 models/core.py:296
+#: models/core.py:340 webclass/models.py:124
 msgid "department"
 msgstr "département"
 
-#: models/core.py:131 models/crfpa.py:82
+#: models/core.py:155 models/crfpa.py:84
 msgid "parent"
 msgstr ""
 
-#: models/core.py:135 models/core.py:299
+#: models/core.py:159 models/core.py:353
 msgid "begin date"
 msgstr "date de début"
 
-#: models/core.py:136 models/core.py:300
+#: models/core.py:160 models/core.py:354
 msgid "end date"
 msgstr "date de fin"
 
-#: models/core.py:137
+#: models/core.py:161
 msgid "date d'init de mot de passe"
 msgstr ""
 
-#: models/core.py:138
+#: models/core.py:162
 msgid "message pour internaute"
 msgstr ""
 
-#: models/core.py:139
+#: models/core.py:163
 msgid "message pour presentielle"
 msgstr ""
 
-#: models/core.py:140
+#: models/core.py:164
 msgid "is open"
 msgstr ""
 
-#: models/core.py:141
+#: models/core.py:165
 msgid "date de fin d'examens"
 msgstr ""
 
-#: models/core.py:161 models/core.py:291 models/core.py:544 models/core.py:633
+#: models/core.py:166
+msgid "nombre maximal de copies"
+msgstr ""
+
+#: models/core.py:189 models/core.py:345 models/core.py:613 models/core.py:704
 msgid "course type"
 msgstr "type de matière"
 
-#: models/core.py:168 models/core.py:506 models/pro.py:46 models/pro.py:83
+#: models/core.py:196 models/core.py:572 models/pro.py:46 models/pro.py:83
 msgid "title"
 msgstr "titre"
 
-#: models/core.py:170 models/core.py:511 models/crfpa.py:78
+#: models/core.py:198 models/core.py:577 models/crfpa.py:80
 msgid "code"
 msgstr "cote"
 
-#: models/core.py:171
+#: models/core.py:199
 msgid "tweeter title"
 msgstr "titre tweeter"
 
-#: models/core.py:173 models/core.py:527
+#: models/core.py:201 models/core.py:593
 msgid "number"
 msgstr "nombre"
 
-#: models/core.py:174 models/crfpa.py:83
+#: models/core.py:204 models/crfpa.py:87
 msgid "synthesis note"
 msgstr "note de synthèse"
 
-#: models/core.py:175 models/crfpa.py:86
+#: models/core.py:205 models/crfpa.py:90
 msgid "obligations"
 msgstr "obligations"
 
-#: models/core.py:176 models/crfpa.py:107
+#: models/core.py:206 models/crfpa.py:111
 msgid "magistral"
 msgstr "magistral"
 
-#: models/core.py:177 models/crfpa.py:89 models/crfpa.py:140
+#: models/core.py:207 models/crfpa.py:93 models/crfpa.py:160
 msgid "procedure"
 msgstr "procédure"
 
-#: models/core.py:178
+#: models/core.py:208 models/core.py:214
 msgid "written_speciality"
 msgstr "spécialité écrit"
 
-#: models/core.py:179
+#: models/core.py:209
 msgid "oral_speciality"
 msgstr "spécialité orale"
 
-#: models/core.py:180
+#: models/core.py:210
 msgid "oral_1"
 msgstr ""
 
-#: models/core.py:181
+#: models/core.py:211
 msgid "oral_2"
 msgstr ""
 
-#: models/core.py:182
+#: models/core.py:213 models/crfpa.py:115 models/crfpa.py:194
+msgid "civil rights"
+msgstr "droit civil"
+
+#: models/core.py:215 models/crfpa.py:121 models/crfpa.py:200
+#, fuzzy
+msgid "judiciary organization"
+msgstr "organisation juridique et procédures"
+
+#: models/core.py:216 models/crfpa.py:124 models/crfpa.py:203
+msgid "deontology"
+msgstr "déontologie"
+
+#: models/core.py:218
 msgid "copies d'examen"
 msgstr ""
 
-#: models/core.py:231
+#: models/core.py:219
+msgid "quiz"
+msgstr ""
+
+#: models/core.py:227
+#, fuzzy
+msgid "types"
+msgstr "type"
+
+#: models/core.py:277 models/core.py:293 models/crfpa.py:191
+msgid "courses"
+msgstr "matières"
+
+#: models/core.py:285
 msgid "course group"
 msgstr "groupe de matière"
 
-#: models/core.py:265 models/core.py:292
+#: models/core.py:291 models/core.py:859 models/crfpa.py:227
+#: models/crfpa.py:260 models/pro.py:101 models/pro.py:140
+msgid "user"
+msgstr "utilisateur"
+
+#: models/core.py:319 models/core.py:346 webclass/models.py:161
 msgid "professor"
 msgstr "professeur"
 
-#: models/core.py:280 models/core.py:296
+#: models/core.py:334 models/core.py:350
 msgid "room"
 msgstr "salle"
 
-#: models/core.py:285
+#: models/core.py:339
 msgid "public_id"
 msgstr "public id"
 
-#: models/core.py:298
+#: models/core.py:352
 msgid "comment"
 msgstr "commentaire"
 
-#: models/core.py:301 models/core.py:559 models/core.py:597 models/core.py:640
+#: models/core.py:355 models/core.py:630 models/core.py:668 models/core.py:711
 msgid "readers"
 msgstr ""
 
-#: models/core.py:304 models/crfpa.py:65 models/crfpa.py:66
+#: models/core.py:358 models/core.py:527
+msgid "streaming"
+msgstr "diffusion"
+
+#: models/core.py:359 models/crfpa.py:67 models/crfpa.py:68
 msgid "web class group"
 msgstr ""
 
-#: models/core.py:430 models/core.py:458 models/core.py:545 models/core.py:629
+#: models/core.py:493 models/core.py:521 models/core.py:614 models/core.py:700
 msgid "conference"
 msgstr "conférence"
 
-#: models/core.py:438
+#: models/core.py:501
 msgid "host"
 msgstr "hôte"
 
-#: models/core.py:439
+#: models/core.py:502
 msgid "port"
 msgstr "port"
 
-#: models/core.py:442
+#: models/core.py:505
 msgid "source password"
 msgstr ""
 
-#: models/core.py:443
+#: models/core.py:506
 msgid "admin password"
 msgstr ""
 
-#: models/core.py:450 models/core.py:461
+#: models/core.py:513 models/core.py:524
 msgid "streaming server"
 msgstr "serveur de diffusion"
 
-#: models/core.py:462
+#: models/core.py:525
 msgid "Streaming type"
 msgstr "Type de flux"
 
-#: models/core.py:464
-msgid "streaming"
-msgstr "diffusion"
-
-#: models/core.py:500
+#: models/core.py:566
 msgid "live stream"
 msgstr "stream en direct"
 
-#: models/core.py:508
+#: models/core.py:574
 msgid "credits"
 msgstr "crédits"
 
-#: models/core.py:512
+#: models/core.py:578
 msgid "published"
 msgstr "publié"
 
-#: models/core.py:513
+#: models/core.py:579
 msgid "mime type"
 msgstr "Type mime"
 
-#: models/core.py:514 models/pro.py:86
+#: models/core.py:580 models/pro.py:86
 msgid "weight"
 msgstr "poids"
 
-#: models/core.py:534
+#: models/core.py:603
 msgid "document type"
 msgstr "type de document"
 
-#: models/core.py:553 models/crfpa.py:133
+#: models/core.py:618
+#, fuzzy
+msgid "periods"
+msgstr "période"
+
+#: models/core.py:624 models/core.py:860 webclass/models.py:127
 msgid "iej"
 msgstr "iej"
 
-#: models/core.py:555
-msgid "annal"
-msgstr "annale"
+#: models/core.py:626
+msgid "annal"
+msgstr "annale"
+
+#: models/core.py:627
+msgid "year"
+msgstr "année"
+
+#: models/core.py:628 models/core.py:666
+msgid "file"
+msgstr "fichier"
+
+#: models/core.py:864 models/crfpa.py:131
+msgid "e-learning platform only"
+msgstr "formation e-learning uniquement"
+
+#: models/core.py:865
+msgid "application fees"
+msgstr "frais de dossier"
+
+#: models/core.py:867
+msgid "subscription fees"
+msgstr "frais d'inscription"
+
+#: models/core.py:868
+msgid "promo code"
+msgstr ""
+
+#: models/core.py:869 models/crfpa.py:268
+msgid "registration date"
+msgstr "date de pré-inscription"
+
+#: models/core.py:870
+msgid "subscription date"
+msgstr "date d'inscription"
+
+#: models/core.py:871
+msgid "subscribed"
+msgstr "inscrit"
+
+#: models/core.py:872
+msgid "confirmation sent"
+msgstr "confirmation envoyée"
+
+#: models/core.py:873
+msgid "studying level"
+msgstr "niveau d'étude"
+
+#: models/core.py:875
+msgid "balance de paiement"
+msgstr ""
+
+#: models/core.py:878
+msgid "envoi des fascicules"
+msgstr ""
 
-#: models/core.py:556
-msgid "year"
-msgstr "année"
+#: models/core.py:881
+#, fuzzy
+msgid "type de paiement"
+msgstr "département"
 
-#: models/core.py:557 models/core.py:595
-msgid "file"
-msgstr "fichier"
+#: models/core.py:884
+msgid "échéancier de paiement"
+msgstr ""
+
+#: models/core.py:888
+#, fuzzy
+msgid "commentaire"
+msgstr "commentaire"
 
-#: models/crfpa.py:53 models/crfpa.py:54 models/crfpa.py:61
-#: templates/registration/registration_pdf.html:48
-#: templates/teleforma/annals.html:31 templates/telemeta/inc/user_list.html:21
-#: templates/telemeta/profile_detail.html:64 templates/telemeta/users.html:28
+#: models/crfpa.py:55 models/crfpa.py:56 models/crfpa.py:63
+#: templates/registration/registration_pdf.html:74
+#: templates/teleforma/annals.html:31 templates/telemeta/profile_detail.html:69
+#: templates/telemeta/users.html:28 templates/telemeta/inc/user_list.html:22
 msgid "IEJ"
 msgstr "IEJ"
 
-#: models/crfpa.py:92 models/crfpa.py:143 models/crfpa.py:146
+#: models/crfpa.py:96 models/crfpa.py:118 models/crfpa.py:163
+#: models/crfpa.py:197
 msgid "written speciality"
 msgstr "spécialité écrit"
 
-#: models/crfpa.py:95 models/crfpa.py:149
+#: models/crfpa.py:99 models/crfpa.py:166
 msgid "oral speciality"
 msgstr "spécialité orale"
 
-#: models/crfpa.py:98
+#: models/crfpa.py:102
 msgid "oral 1"
 msgstr ""
 
-#: models/crfpa.py:101
+#: models/crfpa.py:105
 msgid "oral 2"
 msgstr ""
 
-#: models/crfpa.py:104 models/crfpa.py:158
+#: models/crfpa.py:108 models/crfpa.py:175
 msgid "options"
 msgstr "options"
 
-#: models/crfpa.py:109
+#: models/crfpa.py:127
 msgid "cost"
 msgstr "coût"
 
-#: models/crfpa.py:110
+#: models/crfpa.py:128
+msgid "e-learning cost with fascicle"
+msgstr ""
+
+#: models/crfpa.py:129
+msgid "e-learning cost without fascicle"
+msgstr ""
+
+#: models/crfpa.py:130
 msgid "available"
 msgstr ""
 
-#: models/crfpa.py:126 models/crfpa.py:137
+#: models/crfpa.py:148 models/crfpa.py:157
 msgid "training"
 msgstr "formation"
 
-#: models/crfpa.py:135
+#: models/crfpa.py:154
 msgid "trainings"
 msgstr "formations"
 
-#: models/crfpa.py:152
+#: models/crfpa.py:169
 msgid "oral de langue (option)"
 msgstr ""
 
-#: models/crfpa.py:155
+#: models/crfpa.py:172
 msgid "oral 2 (option)"
 msgstr ""
 
-#: models/crfpa.py:162
-msgid "e-learning platform only"
-msgstr "formation e-learning uniquement"
-
-#: models/crfpa.py:163
-msgid "application fees"
-msgstr "frais de dossier"
-
-#: models/crfpa.py:165
-msgid "subscription fees"
-msgstr "frais d'inscription"
-
-#: models/crfpa.py:166
-msgid "promo code"
-msgstr ""
-
-#: models/crfpa.py:167
-msgid "registration date"
-msgstr "date de pré-inscription"
-
-#: models/crfpa.py:168
-msgid "subscription date"
-msgstr "date d'inscription"
-
-#: models/crfpa.py:169
-msgid "subscribed"
-msgstr "inscrit"
-
-#: models/crfpa.py:170
-msgid "confirmation sent"
-msgstr "confirmation envoyée"
-
-#: models/crfpa.py:171
-msgid "studying level"
-msgstr "niveau d'étude"
-
-#: models/crfpa.py:222
+#: models/crfpa.py:182
 msgid "Student"
 msgstr "Etudiant"
 
-#: models/crfpa.py:223
+#: models/crfpa.py:183
 msgid "Students"
 msgstr "Etudiants"
 
-#: models/crfpa.py:231 templates/registration/registration_pdf.html:41
-#: templates/telemeta/profile_detail.html:77
-msgid "Address"
-msgstr "Adresse"
-
-#: models/crfpa.py:232
-msgid "Address detail"
-msgstr "Adresse (detail)"
-
-#: models/crfpa.py:233
-msgid "Postal code"
-msgstr "Code postal"
-
-#: models/crfpa.py:234
-msgid "City"
-msgstr "Ville"
+#: models/crfpa.py:208
+msgid "AE student"
+msgstr "Etudiant AE"
 
-#: models/crfpa.py:235
-msgid "Country"
-msgstr "Pays"
+#: models/crfpa.py:209
+msgid "AE students"
+msgstr "Etudiants AE"
 
-#: models/crfpa.py:236 templates/telemeta/profile_detail.html:88
+#: models/crfpa.py:233 templates/telemeta/profile_detail.html:93
 msgid "Language"
 msgstr "Langue"
 
-#: models/crfpa.py:237 templates/registration/registration_pdf.html:42
-#: templates/telemeta/profile_detail.html:78
-msgid "Telephone"
-msgstr "Téléphone"
-
-#: models/crfpa.py:238
+#: models/crfpa.py:235
 msgid "Expiration_date"
 msgstr "Date d'expiration"
 
-#: models/crfpa.py:239
+#: models/crfpa.py:236
 msgid "Password initialized"
 msgstr "Mot de passe initialisé"
 
-#: models/crfpa.py:240 templates/telemeta/profile_detail.html:79
+#: models/crfpa.py:237 templates/telemeta/profile_detail.html:84
 msgid "WiFi login"
 msgstr ""
 
-#: models/crfpa.py:241
+#: models/crfpa.py:238
 msgid "WiFi pass"
 msgstr ""
 
-#: models/crfpa.py:242
+#: models/crfpa.py:239
 msgid "birthday"
 msgstr "date de naissance"
 
-#: models/crfpa.py:246
+#: models/crfpa.py:249
 msgid "profile"
 msgstr "profil"
 
-#: models/crfpa.py:257 models/crfpa.py:275 models/crfpa.py:288
-#: models/crfpa.py:301
+#: models/crfpa.py:280
+#, fuzzy
+msgid "Correcteur"
+msgstr "Correcteur"
+
+#: models/crfpa.py:281
+#, fuzzy
+msgid "Correcteurs"
+msgstr "Correcteurs"
+
+#: models/crfpa.py:293 models/crfpa.py:319 models/crfpa.py:332
+#: models/crfpa.py:345
 msgid "student"
 msgstr "étudiant"
 
-#: models/crfpa.py:258 models/crfpa.py:276 models/crfpa.py:289
-#: models/crfpa.py:302
+#: models/crfpa.py:294 models/crfpa.py:320 models/crfpa.py:333
+#: models/crfpa.py:346
 msgid "amount"
 msgstr "montant"
 
-#: models/crfpa.py:259
+#: models/crfpa.py:295
 msgid "month"
 msgstr "mois"
 
-#: models/crfpa.py:260
-msgid "collected"
-msgstr "encaissé"
-
-#: models/crfpa.py:261
+#: models/crfpa.py:297
 msgid "payment type"
 msgstr "type de paiement"
 
-#: models/crfpa.py:262
+#: models/crfpa.py:299 models/crfpa.py:410
 msgid "date created"
 msgstr "date de création"
 
-#: models/crfpa.py:267
+#: models/crfpa.py:311
 msgid "Payment"
 msgstr "Paiement"
 
-#: models/crfpa.py:268
+#: models/crfpa.py:312
 msgid "Payments"
 msgstr "Paiements"
 
-#: models/crfpa.py:281
+#: models/crfpa.py:325
 msgid "Discount"
 msgstr "Réduction"
 
-#: models/crfpa.py:282
+#: models/crfpa.py:326
 msgid "Discounts"
 msgstr "Réductions"
 
-#: models/crfpa.py:294 models/crfpa.py:295
+#: models/crfpa.py:338 models/crfpa.py:339
 msgid "Optional fees"
 msgstr "Frais optionnels"
 
-#: models/crfpa.py:307
+#: models/crfpa.py:351
 msgid "Payback"
 msgstr "Remboursement"
 
-#: models/crfpa.py:308
+#: models/crfpa.py:352
 msgid "Paybacks"
 msgstr ""
 
+#: models/crfpa.py:359 models/crfpa.py:405 templates/quiz/quiz_list.html:12
+#: templates/teleforma/course.html:18 templates/teleforma/course.html.py:35
+#: templates/teleforma/course_conference_audio.html:66
+#: templates/teleforma/course_document.html:73
+#: templates/teleforma/inc/conference_list.html:25
+#: templates/teleforma/inc/media_list.html:36
+#: templates/teleforma/inc/media_list_pending.html:37
+#: templates/telemeta/lists.html:69 templates/telemeta/search_criteria.html:97
+#: templates/telemeta/inc/module_revisions.html:17
+msgid "Title"
+msgstr "Titre"
+
 #: models/messages.py:13
 msgid "students"
 msgstr "étudiants"
@@ -1047,11 +1170,12 @@ msgstr "question"
 msgid "minimum numbers of characters"
 msgstr "nombre de caractère minimum"
 
-#: models/pro.py:96
+#: models/pro.py:96 templates/quiz/question.html:47
+#: templates/quiz/sitting_detail.html:21
 msgid "Question"
 msgstr "Questions"
 
-#: models/pro.py:101 models/pro.py:102 models/pro.py:103
+#: models/pro.py:103
 msgid "answer"
 msgstr "réponse"
 
@@ -1059,10 +1183,6 @@ msgstr "réponse"
 msgid "validated"
 msgstr "validé"
 
-#: models/pro.py:117
-msgid "Answer"
-msgstr "Réponse"
-
 #: models/pro.py:126 models/pro.py:142
 msgid "testimonial_template"
 msgstr ""
@@ -1091,6 +1211,30 @@ msgstr "Page non trouvée"
 msgid "Server error"
 msgstr "Erreur du serveur"
 
+#: templates/admin/base.html:74
+msgid "Welcome,"
+msgstr ""
+
+#: templates/admin/base.html:82
+#, fuzzy
+msgid "Documentation"
+msgstr "Supports écrits"
+
+#: templates/admin/base.html:85
+#: templates/registration/password_change_form.html:3
+#: templates/registration/password_change_form.html:8
+#: templates/telemeta/profile_detail.html:50
+msgid "Change password"
+msgstr ""
+
+#: templates/admin/base.html:87
+msgid "Log out"
+msgstr ""
+
+#: templates/admin/base.html:107 templates/telemeta/base.html:108
+msgid "Home"
+msgstr "Accueil"
+
 #: templates/postman/archives.html:3
 #, fuzzy
 msgid "Archived Messages"
@@ -1140,81 +1284,69 @@ msgstr "Messages"
 msgid "Sorry, this page number is invalid."
 msgstr ""
 
-#: templates/postman/base_folder.html:39
+#: templates/postman/base_folder.html:40
 #: templates/teleforma/course_conference_record.html:69
 #: templates/telemeta/lists.html:75
 msgid "Action"
 msgstr ""
 
-#: templates/postman/base_folder.html:40
+#: templates/postman/base_folder.html:41
 msgid "Sender"
 msgstr ""
 
-#: templates/postman/base_folder.html:41 templates/postman/reply.html:4
-msgid "Recipient"
-msgstr ""
-
-#: templates/postman/base_folder.html:42
+#: templates/postman/base_folder.html:43
 msgid "Subject"
 msgstr ""
 
-#: templates/postman/base_folder.html:43
+#: templates/postman/base_folder.html:44
 #: templates/telemeta/inc/module_revisions.html:16
 msgid "Date"
 msgstr "Date"
 
-#: templates/postman/base_folder.html:61
+#: templates/postman/base_folder.html:62
 msgid "g:i A,M j,n/j/y"
 msgstr ""
 
-#: templates/postman/base_folder.html:69 templates/postman/view.html:39
+#: templates/postman/base_folder.html:70 templates/postman/view.html:47
 #: templates/telemeta/lists.html:58
 msgid "Delete"
 msgstr ""
 
-#: templates/postman/base_folder.html:72 templates/postman/view.html:43
+#: templates/postman/base_folder.html:73 templates/postman/view.html:51
 msgid "Archive"
 msgstr ""
 
-#: templates/postman/base_folder.html:75
+#: templates/postman/base_folder.html:76
 msgid "Undelete"
 msgstr ""
 
-#: templates/postman/base_folder.html:81
+#: templates/postman/base_folder.html:82
 #, fuzzy
 msgid "No messages."
 msgstr "Messages"
 
-#: templates/postman/base_write.html:30
+#: templates/postman/base_write.html:13
 msgid ""
 "Vous pouvez ici échanger des messages avec les professeurs et les "
 "administrateurs."
 msgstr ""
 
-#: templates/postman/base_write.html:32
+#: templates/postman/base_write.html:15
 msgid ""
 "Pour les questions concernant l'organisation des cours, le planning, les "
 "documents de cours ou les copies, adressez-vous à <b>Admin-CRFPA</b>."
 msgstr ""
 
-#: templates/postman/base_write.html:34
+#: templates/postman/base_write.html:17
 msgid ""
 "Pour les questions concernant uniquement l'accès à la plateforme et aux "
 "médias vidéo ou audio, lire d'abord"
 msgstr ""
 
-#: templates/postman/base_write.html:34
+#: templates/postman/base_write.html:19
 msgid "puis adressez-vous à <b>Support technique</b>."
 msgstr ""
 
-#: templates/postman/base_write.html:38
-msgid "to an administrator"
-msgstr "à un administrateur"
-
-#: templates/postman/base_write.html:46
-msgid "to a professor"
-msgstr "à un professeur"
-
 #: templates/postman/email_user.txt:1 templates/postman/email_user_init.txt:1
 msgid "Hello"
 msgstr "Bonjour"
@@ -1263,7 +1395,7 @@ msgstr ""
 msgid "Thank you again for your interest in our services."
 msgstr ""
 
-#: templates/postman/email_user.txt:20
+#: templates/postman/email_user.txt:20 templates/quiz/question.html:47
 msgid "of"
 msgstr "de"
 
@@ -1278,70 +1410,310 @@ msgstr ""
 msgid "%(organization)s : initialization of your e-learning account"
 msgstr "%(organization)s : initialisation de votre compte e-learning"
 
-#: templates/postman/email_visitor.txt:1
-msgid "Dear visitor,"
+#: templates/postman/email_visitor.txt:1
+msgid "Dear visitor,"
+msgstr ""
+
+#: templates/postman/email_visitor.txt:8
+msgid "As a reminder, please find below the content of your message."
+msgstr ""
+
+#: templates/postman/email_visitor.txt:11
+msgid "Please find below the answer from your correspondent."
+msgstr ""
+
+#: templates/postman/email_visitor.txt:15
+msgid "For more comfort, we encourage you to open an account on the site."
+msgstr ""
+
+#: templates/postman/inbox.html:3
+#, fuzzy
+msgid "Received Messages"
+msgstr "Messages"
+
+#: templates/postman/inbox.html:6
+msgid "Received"
+msgstr ""
+
+#: templates/postman/reply.html:3 templates/postman/view.html:56
+#: templates/postman/view.html.py:59
+msgid "Reply"
+msgstr ""
+
+#: templates/postman/sent.html:6
+msgid "Sent"
+msgstr ""
+
+#: templates/postman/trash.html:3
+#, fuzzy
+msgid "Deleted Messages"
+msgstr "Messages"
+
+#: templates/postman/trash.html:10
+msgid ""
+"Messages in this folder can be removed from time to time. For long term "
+"storage, use instead the archive folder."
+msgstr ""
+
+#: templates/postman/view.html:9
+msgid "Conversation"
+msgstr ""
+
+#: templates/postman/view.html:9 templates/telemeta/inc/user_list.html:73
+#, fuzzy
+msgid "Message"
+msgstr "Messages"
+
+#: templates/postman/view.html:33
+msgid ":"
+msgstr ""
+
+#: templates/postman/view.html:44
+msgid "Back"
+msgstr ""
+
+#: templates/postman/write.html:3 templates/telemeta/inc/user_list.html:29
+msgid "Write"
+msgstr ""
+
+#: templates/quiz/category_list.html:3 templates/quiz/quiz_list.html:3
+#: templates/quiz/sitting_list.html:3
+msgid "All Quizzes"
+msgstr ""
+
+#: templates/quiz/category_list.html:6
+#, fuzzy
+msgid "Category list"
+msgstr "catégories"
+
+#: templates/quiz/correct_answer.html:6
+msgid "You answered the above question incorrectly"
+msgstr ""
+
+#: templates/quiz/correct_answer.html:16
+msgid "This is the correct answer"
+msgstr ""
+
+#: templates/quiz/correct_answer.html:23
+msgid "This was your answer."
+msgstr ""
+
+#: templates/quiz/progress.html:6
+msgid "Progress Page"
+msgstr ""
+
+#: templates/quiz/progress.html:7
+#, fuzzy
+msgid "User Progress Page"
+msgstr "Profil utilisateur"
+
+#: templates/quiz/progress.html:13
+msgid "Question Category Scores"
+msgstr ""
+
+#: templates/quiz/progress.html:19 templates/quiz/quiz_detail.html:9
+#: templates/quiz/quiz_list.html:13 templates/quiz/sitting_detail.html:10
+#, fuzzy
+msgid "Category"
+msgstr "catégorie"
+
+#: templates/quiz/progress.html:20
+msgid "Correctly answererd"
+msgstr ""
+
+#: templates/quiz/progress.html:21
+#, fuzzy
+msgid "Incorrect"
+msgstr "correcteur"
+
+#: templates/quiz/progress.html:50
+msgid "Previous exam papers"
+msgstr ""
+
+#: templates/quiz/progress.html:52
+msgid "Below are the results of exams that you have sat."
+msgstr ""
+
+#: templates/quiz/progress.html:59
+#, fuzzy
+msgid "Quiz Title"
+msgstr "Titre"
+
+#: templates/quiz/progress.html:61
+msgid "Possible Score"
+msgstr ""
+
+#: templates/quiz/question.html:13 templates/quiz/result.html:13
+msgid "The previous question"
+msgstr ""
+
+#: templates/quiz/question.html:32 templates/quiz/result.html:21
+#: templates/quiz/result.html.py:80
+#, fuzzy
+msgid "Explanation"
+msgstr "Date d'expiration"
+
+#: templates/quiz/question.html:52
+#, fuzzy
+msgid "Question category"
+msgstr "Questions"
+
+#: templates/quiz/question.html:74
+msgid "Check"
+msgstr ""
+
+#: templates/quiz/quiz_detail.html:11
+msgid "You will only get one attempt at this quiz"
+msgstr ""
+
+#: templates/quiz/quiz_detail.html:16
+msgid "Start quiz"
+msgstr "Démarrer le quiz"
+
+#: templates/quiz/quiz_list.html:6
+msgid "List of quizzes"
+msgstr ""
+
+#: templates/quiz/quiz_list.html:14
+msgid "Exam"
+msgstr ""
+
+#: templates/quiz/quiz_list.html:15
+msgid "Single attempt"
+msgstr ""
+
+#: templates/quiz/quiz_list.html:31 templates/quiz/sitting_list.html:42
+#, fuzzy
+msgid "View details"
+msgstr "Adresse (detail)"
+
+#: templates/quiz/quiz_list.html:41
+msgid "There are no available quizzes"
+msgstr ""
+
+#: templates/quiz/result.html:7
+msgid "Exam Results for"
+msgstr ""
+
+#: templates/quiz/result.html:32
+msgid "Exam results"
+msgstr ""
+
+#: templates/quiz/result.html:34
+#, fuzzy
+msgid "Exam title"
+msgstr "titre"
+
+#: templates/quiz/result.html:38
+#, fuzzy
+msgid "You answered"
+msgstr "Votre réponse est"
+
+#: templates/quiz/result.html:38
+msgid "questions correctly out of"
+msgstr ""
+
+#: templates/quiz/result.html:38
+msgid "giving you"
+msgstr ""
+
+#: templates/quiz/result.html:38
+msgid "percent correct"
+msgstr ""
+
+#: templates/quiz/result.html:59
+msgid "Your session score is"
+msgstr ""
+
+#: templates/quiz/result.html:59
+msgid "out of a possible"
+msgstr ""
+
+#: templates/quiz/result.html:77
+#, fuzzy
+msgid "Your answer"
+msgstr "Votre réponse est"
+
+#: templates/quiz/single_complete.html:13
+msgid "You have already sat this exam and only one sitting is permitted"
 msgstr ""
 
-#: templates/postman/email_visitor.txt:8
-msgid "As a reminder, please find below the content of your message."
+#: templates/quiz/single_complete.html:15
+msgid "This exam is only accessible to signed in users"
 msgstr ""
 
-#: templates/postman/email_visitor.txt:11
-msgid "Please find below the answer from your correspondent."
+#: templates/quiz/sitting_detail.html:5
+msgid "Result of"
 msgstr ""
 
-#: templates/postman/email_visitor.txt:15
-msgid "For more comfort, we encourage you to open an account on the site."
+#: templates/quiz/sitting_detail.html:5
+msgid "for"
 msgstr ""
 
-#: templates/postman/inbox.html:3
+#: templates/quiz/sitting_detail.html:9
 #, fuzzy
-msgid "Received Messages"
-msgstr "Messages"
+msgid "Quiz title"
+msgstr "titre"
 
-#: templates/postman/inbox.html:6
-msgid "Received"
+#: templates/quiz/sitting_detail.html:13 templates/quiz/sitting_list.html:13
+#: templates/telemeta/inc/module_revisions.html:19
+msgid "User"
 msgstr ""
 
-#: templates/postman/reply.html:3 templates/postman/view.html:47
-#: templates/postman/view.html:50 templates/postman/view.html:53
-msgid "Reply"
-msgstr ""
+#: templates/quiz/sitting_detail.html:14 templates/quiz/sitting_list.html:15
+#, fuzzy
+msgid "Completed"
+msgstr "incomplet"
 
-#: templates/postman/sent.html:6
-msgid "Sent"
-msgstr ""
+#: templates/quiz/sitting_detail.html:22
+#, fuzzy
+msgid "User answer"
+msgstr "réponse"
 
-#: templates/postman/trash.html:3
+#: templates/quiz/sitting_detail.html:41
 #, fuzzy
-msgid "Deleted Messages"
-msgstr "Messages"
+msgid "incorrect"
+msgstr "correcteur"
 
-#: templates/postman/trash.html:10
-msgid ""
-"Messages in this folder can be removed from time to time. For long term "
-"storage, use instead the archive folder."
+#: templates/quiz/sitting_detail.html:43
+#, fuzzy
+msgid "Correct"
+msgstr "Correcteur"
+
+#: templates/quiz/sitting_detail.html:49
+msgid "Toggle whether correct"
 msgstr ""
 
-#: templates/postman/view.html:9
-msgid "Conversation"
+#: templates/quiz/sitting_list.html:6
+msgid "List of complete exams"
 msgstr ""
 
-#: templates/postman/view.html:9 templates/telemeta/inc/user_list.html:72
-#, fuzzy
-msgid "Message"
-msgstr "Messages"
+#: templates/quiz/sitting_list.html:14
+msgid "Quiz"
+msgstr ""
 
-#: templates/postman/view.html:25
-msgid ":"
+#: templates/quiz/sitting_list.html:28
+msgid "Filter"
 msgstr ""
 
-#: templates/postman/view.html:36
-msgid "Back"
+#: templates/quiz/sitting_list.html:52
+msgid "There are no matching quizzes"
 msgstr ""
 
-#: templates/postman/write.html:3 templates/telemeta/inc/user_list.html:28
-msgid "Write"
+#: templates/quiz/view_quiz_category.html:3
+msgid "Quizzes related to"
+msgstr ""
+
+#: templates/quiz/view_quiz_category.html:6
+msgid "Quizzes in the"
+msgstr ""
+
+#: templates/quiz/view_quiz_category.html:6
+msgid "category"
+msgstr "catégorie"
+
+#: templates/quiz/view_quiz_category.html:20
+msgid "There are no quizzes"
 msgstr ""
 
 #: templates/registration/activate.html:3
@@ -1391,10 +1763,10 @@ msgid ""
 "from our records.\n"
 "</p>\n"
 "<p>\n"
-"To activate this account, please click the following link within the next \n"
+"To activate this account, please click the following link within the next\n"
 "<b>%(expiration_days)s</b> days:<br/>\n"
-"<a href=\"http://%(sitedomain)s%(activation_key_url)s\">http://%(sitedomain)s"
-"%(activation_key_url)s</a>\n"
+"<a href=\"https://%(sitedomain)s%(activation_key_url)s\">https://"
+"%(sitedomain)s%(activation_key_url)s</a>\n"
 "</p>\n"
 "<p>\n"
 "Sincerely,<br/>\n"
@@ -1463,12 +1835,6 @@ msgstr "Mot de passe initialisé"
 msgid "Password successfully changed!"
 msgstr ""
 
-#: templates/registration/password_change_form.html:3
-#: templates/registration/password_change_form.html:8
-#: templates/telemeta/profile_detail.html:49
-msgid "Change password"
-msgstr ""
-
 #: templates/registration/password_reset_complete.html:3
 #, fuzzy
 msgid "Password reset complete"
@@ -1495,7 +1861,7 @@ msgid "Set password"
 msgstr ""
 
 #: templates/registration/password_reset_done.html:3
-#: templates/telemeta/profile_detail.html:106
+#: templates/telemeta/profile_detail.html:114
 msgid "Password reset"
 msgstr "Réinitialisation du mot de passe"
 
@@ -1546,139 +1912,134 @@ msgid ""
 msgstr ""
 
 #: templates/registration/registration_complete.html:6
-#: templates/registration/registration_pdf.html:13 views/crfpa.py:496
+#: templates/registration/registration_corrector_complete.html:6
+#: templates/registration/registration_corrector_pdf.html:14
+#: templates/registration/registration_pdf.html:14 views/crfpa.py:624
+#: views/crfpa.py:787 views/crfpa.py:801
 msgid "Registration"
 msgstr "Inscription"
 
-#: templates/registration/registration_complete.html:23
-#: templates/teleforma/annals.html:73 templates/teleforma/course_media.html:64
-#: templates/teleforma/inc/document_list.html:22
+#: templates/registration/registration_complete.html:19
+#: templates/teleforma/annals.html:73 templates/teleforma/course_media.html:65
+#: templates/teleforma/inc/document_list.html:20
 #: templates/teleforma/inc/media_list.html:56
-#: templates/teleforma/inc/media_list_pending.html:56
+#: templates/teleforma/inc/media_list_pending.html:57
 msgid "Download"
 msgstr "Télécharger"
 
-#: templates/registration/registration_form.html:6
-msgid "Pre-registration"
-msgstr "Pré-inscription"
-
-#: templates/registration/registration_pdf.html:35
-msgid "Training registration"
-msgstr "Fiche d'inscription"
-
-#: templates/registration/registration_pdf.html:35
-#: templates/registration/registration_pdf.html:49
-msgid "Training"
-msgstr "Formation"
-
-#: templates/registration/registration_pdf.html:39
+#: templates/registration/registration_corrector_pdf.html:36
+#: templates/registration/registration_pdf.html:41
 msgid "First name"
 msgstr "Prénom"
 
-#: templates/registration/registration_pdf.html:40
+#: templates/registration/registration_corrector_pdf.html:40
+#: templates/registration/registration_pdf.html:45
 msgid "Last name"
 msgstr "Nom"
 
-#: templates/registration/registration_pdf.html:43
+#: templates/registration/registration_corrector_pdf.html:52
+#: templates/registration/registration_pdf.html:57
 msgid "E-mail"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:44
-#: templates/telemeta/profile_detail.html:61
+#: templates/registration/registration_corrector_pdf.html:56
+#: templates/registration/registration_pdf.html:61
+#: templates/telemeta/profile_detail.html:66
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
-#: templates/registration/registration_pdf.html:45
-msgid "Birthday"
-msgstr "Date de naissance"
+#: templates/registration/registration_corrector_pdf.html:85
+#: templates/registration/registration_pdf.html:106
+msgid "Registration date"
+msgstr "Date de pré-inscription"
 
-#: templates/registration/registration_pdf.html:47
-msgid "Studying level"
-msgstr "Niveau d'étude"
+#: templates/registration/registration_form.html:34
+msgid "Pre-registration"
+msgstr "Pré-inscription"
+
+#: templates/registration/registration_pdf.html:36
+msgid "Training registration"
+msgstr "Fiche d'inscription"
+
+#: templates/registration/registration_pdf.html:36
+#: templates/registration/registration_pdf.html:78
+msgid "Training"
+msgstr "Formation"
 
-#: templates/registration/registration_pdf.html:50
+#: templates/registration/registration_pdf.html:82
 msgid "Training type"
 msgstr "Type de formation"
 
-#: templates/registration/registration_pdf.html:51
+#: templates/registration/registration_pdf.html:86
+msgid "Envoi postal des fascicules"
+msgstr ""
+
+#: templates/registration/registration_pdf.html:90
 msgid "Matière de procédure"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:52
+#: templates/registration/registration_pdf.html:94
 msgid "Matière juridique de spécialité"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:54
+#: templates/registration/registration_pdf.html:99
 msgid "Matière d'oral de langue"
 msgstr ""
 
-#: templates/registration/registration_pdf.html:57
-msgid "Registration date"
-msgstr "Date de pré-inscription"
-
-#: templates/registration/registration_pdf.html:58
+#: templates/registration/registration_pdf.html:110
 msgid "PROMO code"
 msgstr ""
 
-#: templates/teleforma/annals.html:6 templates/teleforma/annals.html:53
-#: templates/telemeta/base.html:113
+#: templates/teleforma/annals.html:6 templates/teleforma/annals.html.py:53
+#: templates/telemeta/base.html:119
 msgid "Annals"
 msgstr "Annales"
 
 #: templates/teleforma/annals.html:49
-#: templates/teleforma/inc/document_list.html:36
+#: templates/teleforma/inc/document_list.html:33
 msgid "No document"
 msgstr "Aucun document"
 
 #: templates/teleforma/annals.html:69
 #: templates/teleforma/inc/conference_list.html:18
-#: templates/teleforma/inc/document_list.html:20
+#: templates/teleforma/inc/document_list.html:18
+#: webclass/templates/webclass/inc/webclass_list.html:49
 msgid "View"
 msgstr "Voir"
 
-#: templates/teleforma/course.html:14
+#: templates/teleforma/course.html:15
 #: templates/teleforma/inc/document_list.html:7
 msgid "Documents"
 msgstr "Supports écrits"
 
-#: templates/teleforma/course.html:17 templates/teleforma/course.html:33
-#: templates/teleforma/course_conference_audio.html:66
-#: templates/teleforma/course_document.html:73
-#: templates/teleforma/inc/conference_list.html:25
-#: templates/teleforma/inc/media_list.html:36
-#: templates/teleforma/inc/media_list_pending.html:36
-#: templates/telemeta/inc/module_revisions.html:17
-#: templates/telemeta/lists.html:69 templates/telemeta/search_criteria.html:97
-msgid "Title"
-msgstr "Titre"
-
-#: templates/teleforma/course.html:18 templates/teleforma/course.html:34
+#: templates/teleforma/course.html:19 templates/teleforma/course.html.py:36
 msgid "Description"
 msgstr "Description"
 
-#: templates/teleforma/course.html:19 templates/teleforma/course.html:35
-#: templates/teleforma/course.html:52 templates/teleforma/course_media.html:149
-#: templates/telemeta/profile_detail.html:83
+#: templates/teleforma/course.html:20 templates/teleforma/course.html.py:37
+#: templates/teleforma/course.html:54 templates/teleforma/course_media.html:149
+#: templates/telemeta/profile_detail.html:88
 msgid "Date added"
 msgstr "Date d'ajout"
 
-#: templates/teleforma/course.html:30
+#: templates/teleforma/course.html:32
 msgid "Medias"
 msgstr "Médias"
 
-#: templates/teleforma/course.html:47
+#: templates/teleforma/course.html:49
 msgid "Conferences"
 msgstr "Conférences"
 
-#: templates/teleforma/course.html:51
+#: templates/teleforma/course.html:53
 #: templates/teleforma/course_conference.html:68
 #: templates/teleforma/course_conference_audio.html:67
-#: templates/teleforma/course_media.html:140
+#: templates/teleforma/course_media.html:141
 #: templates/teleforma/course_media_video_embed.html:36
 #: templates/teleforma/inc/conference_list.html:28
 #: templates/teleforma/inc/media_list.html:39
-#: templates/teleforma/inc/media_list_pending.html:39
-#: templates/telemeta/inc/user_list.html:48
+#: templates/teleforma/inc/media_list_pending.html:40
+#: templates/telemeta/inc/user_list.html:49
+#: webclass/templates/webclass/inc/webclass_list.html:58
 msgid "Professor"
 msgstr "Professeur"
 
@@ -1692,44 +2053,44 @@ msgstr "S T O P"
 msgid "Audio"
 msgstr ""
 
-#: templates/teleforma/course_conference.html:72
+#: templates/teleforma/course_conference.html:71
 #: templates/teleforma/course_media.html:143
-#: templates/teleforma/course_media_video_embed.html:39
+#: templates/teleforma/course_media_video_embed.html:38
 #: templates/teleforma/inc/media_list.html:43
-#: templates/teleforma/inc/media_list_pending.html:43
+#: templates/teleforma/inc/media_list_pending.html:44
 msgid "Comment"
 msgstr "Commentaire"
 
-#: templates/teleforma/course_conference.html:73
+#: templates/teleforma/course_conference.html:72
 #: templates/teleforma/course_media.html:144
-#: templates/teleforma/course_media_video_embed.html:40
+#: templates/teleforma/course_media_video_embed.html:39
 msgid "Begin date"
 msgstr "Date de début"
 
-#: templates/teleforma/course_conference.html:74
+#: templates/teleforma/course_conference.html:73
 #: templates/teleforma/course_media.html:145
-#: templates/teleforma/course_media_video_embed.html:41
+#: templates/teleforma/course_media_video_embed.html:40
 msgid "End date"
 msgstr "Date de fin"
 
-#: templates/teleforma/course_conference.html:75
+#: templates/teleforma/course_conference.html:74
 #: templates/teleforma/course_conference_audio.html:72
 msgid "Live"
 msgstr "Direct"
 
-#: templates/teleforma/course_conference.html:75
-#: templatetags/teleforma_tags.py:134
+#: templates/teleforma/course_conference.html:74
+#: templatetags/teleforma_tags.py:126
 msgid "Yes"
 msgstr "Oui"
 
-#: templates/teleforma/course_conference.html:76
+#: templates/teleforma/course_conference.html:75
 #: templates/teleforma/course_conference_audio.html:69
 #: templates/teleforma/course_media.html:146
-#: templates/teleforma/course_media_video_embed.html:42
+#: templates/teleforma/course_media_video_embed.html:41
 msgid "Room"
 msgstr "Salle"
 
-#: templates/teleforma/course_conference.html:78
+#: templates/teleforma/course_conference.html:77
 #: templates/teleforma/course_media.html:152
 msgid "Conference ID"
 msgstr "ID Conférence"
@@ -1742,7 +2103,8 @@ msgstr ""
 #: templates/teleforma/course_conference_audio.html:70
 #: templates/teleforma/inc/conference_list.html:30
 #: templates/teleforma/inc/media_list.html:41
-#: templates/teleforma/inc/media_list_pending.html:41
+#: templates/teleforma/inc/media_list_pending.html:42
+#: webclass/templates/webclass/inc/webclass_list.html:61
 msgid "Begin"
 msgstr "Début"
 
@@ -1751,12 +2113,12 @@ msgid "End"
 msgstr "Fin"
 
 #: templates/teleforma/course_conference_record.html:30
-#: templates/teleforma/courses.html:125
+#: templates/teleforma/courses.html:227
 msgid "Status"
 msgstr "Status"
 
 #: templates/teleforma/course_conference_record.html:41
-#: templates/teleforma/courses.html:42
+#: templates/teleforma/courses.html:44
 msgid "New conference"
 msgstr "Nouvelle conférence"
 
@@ -1767,14 +2129,14 @@ msgstr "Enregistrer et diffuser"
 #: templates/teleforma/course_media.html:29
 #: templates/teleforma/course_media.html:83
 #: templates/teleforma/inc/media_list.html:50
-#: templates/teleforma/inc/media_list_pending.html:50
+#: templates/teleforma/inc/media_list_pending.html:51
 msgid " published"
 msgstr " publié"
 
 #: templates/teleforma/course_media.html:36
 #: templates/teleforma/course_media.html:83
 #: templates/teleforma/inc/media_list.html:52
-#: templates/teleforma/inc/media_list_pending.html:52
+#: templates/teleforma/inc/media_list_pending.html:53
 msgid " rejected"
 msgstr " rejeté"
 
@@ -1794,68 +2156,74 @@ msgstr "ID Média"
 msgid "Web class group"
 msgstr ""
 
-#: templates/teleforma/courses.html:56
+#: templates/teleforma/courses.html:59
 msgid "My notes"
 msgstr "Mes notes"
 
-#: templates/teleforma/courses.html:66
+#: templates/teleforma/courses.html:69
 msgid "New note"
 msgstr "Nouvelle note"
 
-#: templates/teleforma/inc/conference_list.html:8
-msgid "Live conferences"
-msgstr "Conférences en direct"
+#: templates/teleforma/courses.html:113
+#: templates/teleforma/inc/media_list.html:17
+#: templates/teleforma/inc/media_list_pending.html:17
+msgid "Play"
+msgstr "Lire"
 
+#: templates/teleforma/courses.html:119 templates/teleforma/courses.html:125
 #: templates/teleforma/inc/conference_list.html:19
 #: templates/teleforma/inc/media_list.html:23
 #: templates/teleforma/inc/media_list.html:29
 #: templates/teleforma/inc/media_list_pending.html:23
 #: templates/teleforma/inc/media_list_pending.html:29
+#: templates/teleforma/inc/media_list_pending.html:31
+#: webclass/templates/webclass/inc/webclass_list.html:50
 msgid "Click here"
 msgstr "Cliquez ici"
 
-#: templates/teleforma/inc/media_list.html:17
-#: templates/teleforma/inc/media_list_pending.html:17
-msgid "Play"
-msgstr "Lire"
+#: templates/teleforma/inc/conference_list.html:8
+msgid "Live conferences"
+msgstr "Conférences en direct"
 
+#: templates/teleforma/inc/media_list.html:8
 #: templates/teleforma/inc/media_list_pending.html:8
 msgid "Passed conferences"
 msgstr "Conférences en différé"
 
-#: templates/telemeta/base.html:92 templates/telemeta/base.html:101
+#: templates/telemeta/base.html:94 templates/telemeta/base.html.py:103
 msgid "Desk"
 msgstr "Bureau"
 
-#: templates/telemeta/base.html:106
-msgid "Home"
-msgstr "Accueil"
-
-#: templates/telemeta/base.html:111
+#: templates/telemeta/base.html:113
 msgid "Messaging"
 msgstr "Messagerie"
 
-#: templates/telemeta/base.html:146
+#: templates/telemeta/base.html:116 templates/telemeta/users.html:6
+#: templates/telemeta/users.html.py:69
+msgid "Users"
+msgstr ""
+
+#: templates/telemeta/base.html:157
 msgid "Admin"
 msgstr ""
 
-#: templates/telemeta/base.html:154
+#: templates/telemeta/base.html:166 templates/telemeta/base.html.py:175
 msgid "Profile"
 msgstr "Profil"
 
-#: templates/telemeta/base.html:156
+#: templates/telemeta/base.html:168
 msgid "Lists"
 msgstr ""
 
-#: templates/telemeta/base.html:159
+#: templates/telemeta/base.html:171 templates/telemeta/base.html.py:176
 msgid "Sign out"
 msgstr ""
 
-#: templates/telemeta/base.html:201
+#: templates/telemeta/base.html:226
 msgid "Powered by"
 msgstr ""
 
-#: templates/telemeta/base.html:211
+#: templates/telemeta/base.html:236
 msgid "Legal notices"
 msgstr ""
 
@@ -1863,57 +2231,6 @@ msgstr ""
 msgid "Connexion"
 msgstr ""
 
-#: templates/telemeta/inc/module_revisions.html:19
-msgid "User"
-msgstr ""
-
-#: templates/telemeta/inc/module_revisions.html:40
-#: templates/telemeta/lists.html:92
-msgid "deleted"
-msgstr ""
-
-#: templates/telemeta/inc/module_searches.html:12
-msgid "Criteria"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:22
-#: templates/telemeta/profile_detail.html:65 templates/telemeta/users.html:15
-msgid "Trainings"
-msgstr "Formations"
-
-#: templates/telemeta/inc/user_list.html:23
-#: templates/telemeta/profile_detail.html:67
-msgid "Procedure"
-msgstr "Procédure"
-
-#: templates/telemeta/inc/user_list.html:24
-#: templates/telemeta/profile_detail.html:69
-msgid "Written spe"
-msgstr "Ecrit Spé"
-
-#: templates/telemeta/inc/user_list.html:25
-#: templates/telemeta/profile_detail.html:68
-msgid "Oral spe"
-msgstr "Oral Spé"
-
-#: templates/telemeta/inc/user_list.html:26
-#: templates/telemeta/profile_detail.html:70
-msgid "Oral 1"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:27
-#: templates/telemeta/profile_detail.html:71
-msgid "Oral 2"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:56
-msgid "Administrator"
-msgstr ""
-
-#: templates/telemeta/inc/user_list.html:64
-msgid "Unknown"
-msgstr ""
-
 #: templates/telemeta/lists.html:47
 msgid "My playlists"
 msgstr ""
@@ -1942,6 +2259,11 @@ msgstr "période d'enregistrement"
 msgid "Sound"
 msgstr "Sonore"
 
+#: templates/telemeta/lists.html:92
+#: templates/telemeta/inc/module_revisions.html:40
+msgid "deleted"
+msgstr ""
+
 #: templates/telemeta/login.html:29
 msgid "Password forgotten"
 msgstr ""
@@ -1950,51 +2272,76 @@ msgstr ""
 msgid "Sign in"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:6
+#: templates/telemeta/profile_detail.html:7
 msgid "User Profile"
 msgstr "Profil utilisateur"
 
-#: templates/telemeta/profile_detail.html:16
+#: templates/telemeta/profile_detail.html:17
 msgid "His courses"
 msgstr "Ses matières"
 
-#: templates/telemeta/profile_detail.html:36
+#: templates/telemeta/profile_detail.html:37
 msgid "Send a message"
 msgstr "Envoyer un message"
 
-#: templates/telemeta/profile_detail.html:44
+#: templates/telemeta/profile_detail.html:45
 msgid "User profile"
 msgstr "Profil utilisateur"
 
-#: templates/telemeta/profile_detail.html:51
+#: templates/telemeta/profile_detail.html:52
 msgid "Login as"
 msgstr "Se connecter en tant que"
 
-#: templates/telemeta/profile_detail.html:66
+#: templates/telemeta/profile_detail.html:70 templates/telemeta/users.html:15
+#: templates/telemeta/inc/user_list.html:23
+msgid "Trainings"
+msgstr "Formations"
+
+#: templates/telemeta/profile_detail.html:71
 msgid "Platform only"
 msgstr "Plateforme seulement"
 
-#: templates/telemeta/profile_detail.html:72
+#: templates/telemeta/profile_detail.html:73
+#: templates/telemeta/inc/user_list.html:26
+msgid "Oral spe"
+msgstr "Oral Spé"
+
+#: templates/telemeta/profile_detail.html:74
+#: templates/telemeta/inc/user_list.html:25
+msgid "Written spe"
+msgstr "Ecrit Spé"
+
+#: templates/telemeta/profile_detail.html:75
+#: templates/telemeta/inc/user_list.html:27
+msgid "Oral 1"
+msgstr ""
+
+#: templates/telemeta/profile_detail.html:76
+#: templates/telemeta/inc/user_list.html:28
+msgid "Oral 2"
+msgstr ""
+
+#: templates/telemeta/profile_detail.html:77
 msgid "Options"
 msgstr "Options"
 
-#: templates/telemeta/profile_detail.html:76
+#: templates/telemeta/profile_detail.html:81
 msgid "Email"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:80
+#: templates/telemeta/profile_detail.html:85
 msgid "WiFi password"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:84
+#: templates/telemeta/profile_detail.html:89
 msgid "Expiration date"
 msgstr "Date d'expiration"
 
-#: templates/telemeta/profile_detail.html:85
+#: templates/telemeta/profile_detail.html:90
 msgid "Last login"
 msgstr ""
 
-#: templates/telemeta/profile_detail.html:96
+#: templates/telemeta/profile_detail.html:101
 msgid "Apply"
 msgstr ""
 
@@ -2021,10 +2368,6 @@ msgstr "à"
 msgid "Year of publication"
 msgstr "obligation"
 
-#: templates/telemeta/users.html:6 templates/telemeta/users.html:69
-msgid "Users"
-msgstr ""
-
 #: templates/telemeta/users.html:41
 msgid "Courses"
 msgstr "Matières"
@@ -2033,34 +2376,46 @@ msgstr "Matières"
 msgid "No users"
 msgstr "Pas d'utilisateurs"
 
-#: templatetags/teleforma_tags.py:63
+#: templates/telemeta/inc/module_searches.html:12
+msgid "Criteria"
+msgstr ""
+
+#: templates/telemeta/inc/user_list.html:57
+msgid "Administrator"
+msgstr ""
+
+#: templates/telemeta/inc/user_list.html:65
+msgid "Unknown"
+msgstr ""
+
+#: templatetags/teleforma_tags.py:50
 msgid "General tweeter"
 msgstr "Tweeter général"
 
-#: templatetags/teleforma_tags.py:64
+#: templatetags/teleforma_tags.py:51
 msgid "Local tweeter"
 msgstr "Tweeter local"
 
-#: templatetags/teleforma_tags.py:129
+#: templatetags/teleforma_tags.py:121
 msgid "me"
 msgstr "moi"
 
-#: templatetags/teleforma_tags.py:136
+#: templatetags/teleforma_tags.py:128
 msgid "No"
 msgstr "Non"
 
-#: views/core.py:156
+#: views/core.py:157
 msgid "Access not allowed."
 msgstr "Accès non autorisé."
 
-#: views/core.py:157
+#: views/core.py:158
 msgid ""
 "Please login or contact the website administator to get a private access."
 msgstr ""
 "Merci de vous connecter ou bien contactez l'administateur du site pour "
 "obtenir un accès privé."
 
-#: views/core.py:270
+#: views/core.py:336
 msgid ""
 "You do NOT have access to this resource and then have been redirected to "
 "your desk."
@@ -2068,14 +2423,48 @@ msgstr ""
 "Vous n'avez pas accès à cette ressource et avez été redirigé vers votre "
 "bureau."
 
-#: views/core.py:618
+#: views/core.py:755
 msgid "A new live conference has started : "
 msgstr "Une nouvelle conférence en direct a commencé : "
 
-#: views/crfpa.py:423
-msgid "You have successfully register your account."
+#: webclass/models.py:109
+msgid "BBB server"
+msgstr ""
+
+#: webclass/models.py:110
+msgid "BBB servers"
+msgstr ""
+
+#: webclass/models.py:139 webclass/models.py:140
+msgid "webclass"
+msgstr ""
+
+#: webclass/models.py:163
+msgid "participants"
+msgstr ""
+
+#: webclass/models.py:173
+msgid "webclass slot"
 msgstr ""
 
+#~ msgid "platform only"
+#~ msgstr "plateforme seulement"
+
+#~ msgid "credit card"
+#~ msgstr "carte de crédit"
+
+#~ msgid "collected"
+#~ msgstr "encaissé"
+
+#~ msgid "Answer"
+#~ msgstr "Réponse"
+
+#~ msgid "to an administrator"
+#~ msgstr "à un administrateur"
+
+#~ msgid "to a professor"
+#~ msgstr "à un professeur"
+
 #, fuzzy
 #~| msgid "Grouped message"
 #~ msgid "Group messages"
@@ -2101,9 +2490,6 @@ msgstr ""
 #~ msgid "Validate"
 #~ msgstr "Validée"
 
-#~ msgid "Correctors"
-#~ msgstr "Correcteurs"
-
 #~ msgid "Treated"
 #~ msgstr "Traitées"
 
@@ -2147,12 +2533,6 @@ msgstr ""
 #~ msgid "Differed"
 #~ msgstr "Différé"
 
-#~ msgid "category"
-#~ msgstr "catégorie"
-
-#~ msgid "categories"
-#~ msgstr "catégories"
-
 #~ msgid "speciality"
 #~ msgstr "spécialité"
 
@@ -2182,11 +2562,3 @@ msgstr ""
 
 #~ msgid "course types"
 #~ msgstr "types de matières"
-
-
-#: templates/quiz/quiz_detail.html:16
-msgid "Start quiz"
-msgstr "Démarrer le quiz"
-
-msgid "Your answer was"
-msgstr "Votre réponse est"
diff --git a/teleforma/migrations/0132_auto__del_field_course_written_speciality__del_field_course_synthesis_.py b/teleforma/migrations/0132_auto__del_field_course_written_speciality__del_field_course_synthesis_.py
new file mode 100644 (file)
index 0000000..b3b9381
--- /dev/null
@@ -0,0 +1,861 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Removing M2M table for field written_speciality on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_written_speciality'))
+
+        # Removing M2M table for field synthesis_note on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_synthesis_note'))
+
+        # Removing M2M table for field oral_2 on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_oral_2'))
+
+        # Removing M2M table for field oral_1 on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_oral_1'))
+
+        # Removing M2M table for field obligation on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_obligation'))
+
+        # Removing M2M table for field oral_speciality on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_oral_speciality'))
+
+        # Removing M2M table for field magistral on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_magistral'))
+
+        # Removing M2M table for field options on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_options'))
+
+        # Removing M2M table for field procedure on 'Training'
+        db.delete_table(db.shorten_name('teleforma_training_procedure'))
+
+        # Deleting field 'Course.written_speciality'
+        db.delete_column('teleforma_course', 'written_speciality')
+
+        # Deleting field 'Course.synthesis_note'
+        db.delete_column('teleforma_course', 'synthesis_note')
+
+        # Deleting field 'Course.oral_2'
+        db.delete_column('teleforma_course', 'oral_2')
+
+        # Deleting field 'Course.oral_1'
+        db.delete_column('teleforma_course', 'oral_1')
+
+        # Deleting field 'Course.obligation'
+        db.delete_column('teleforma_course', 'obligation')
+
+        # Deleting field 'Course.oral_speciality'
+        db.delete_column('teleforma_course', 'oral_speciality')
+
+        # Deleting field 'Course.magistral'
+        db.delete_column('teleforma_course', 'magistral')
+
+        # Deleting field 'Course.procedure'
+        db.delete_column('teleforma_course', 'procedure')
+
+        # Adding field 'Student.iej'
+        # db.add_column('teleforma_ae_student', 'iej',
+        #               self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='student', null=True, on_delete=models.SET_NULL, to=orm['teleforma.IEJ']),
+        #               keep_default=False)
+
+
+    def backwards(self, orm):
+        # Adding M2M table for field written_speciality on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_written_speciality')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field synthesis_note on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_synthesis_note')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field oral_2 on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_oral_2')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field oral_1 on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_oral_1')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field obligation on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_obligation')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field oral_speciality on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_oral_speciality')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field magistral on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_magistral')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field options on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_options')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding M2M table for field procedure on 'Training'
+        m2m_table_name = db.shorten_name('teleforma_training_procedure')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('training', models.ForeignKey(orm['teleforma.training'], null=False)),
+            ('coursetype', models.ForeignKey(orm['teleforma.coursetype'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['training_id', 'coursetype_id'])
+
+        # Adding field 'Course.written_speciality'
+        db.add_column('teleforma_course', 'written_speciality',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Adding field 'Course.synthesis_note'
+        db.add_column('teleforma_course', 'synthesis_note',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Adding field 'Course.oral_2'
+        db.add_column('teleforma_course', 'oral_2',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Adding field 'Course.oral_1'
+        db.add_column('teleforma_course', 'oral_1',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Adding field 'Course.obligation'
+        db.add_column('teleforma_course', 'obligation',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Adding field 'Course.oral_speciality'
+        db.add_column('teleforma_course', 'oral_speciality',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Adding field 'Course.magistral'
+        db.add_column('teleforma_course', 'magistral',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Adding field 'Course.procedure'
+        db.add_column('teleforma_course', 'procedure',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+        # Deleting field 'Student.iej'
+        db.delete_column('teleforma_ae_student', 'iej_id')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'notes.note': {
+            'Meta': {'object_name': 'Note'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
+            'content': ('django.db.models.fields.TextField', [], {}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
+            'date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2020, 12, 17, 0, 0)'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'markup': ('django.db.models.fields.CharField', [], {'default': "'m'", 'max_length': '1'}),
+            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
+            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+            'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'rendered_content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['notes.Topic']"})
+        },
+        'notes.topic': {
+            'Meta': {'object_name': 'Topic'},
+            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}),
+            'slug': ('django_extensions.db.fields.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '50', 'separator': "u'-'", 'blank': 'True', 'populate_from': "'title'", 'overwrite': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'quiz.category': {
+            'Meta': {'object_name': 'Category'},
+            'category': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'quiz.quiz': {
+            'Meta': {'object_name': 'Quiz'},
+            'answers_at_end': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['quiz.Category']", 'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'draft': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'exam_paper': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'fail_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'max_questions': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'pass_mark': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'blank': 'True'}),
+            'random_order': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'single_attempt': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'success_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '60'}),
+            'url': ('django.db.models.fields.SlugField', [], {'max_length': '60'})
+        },
+        'teleforma.appointment': {
+            'Meta': {'unique_together': "(('slot', 'jury', 'slot_nb'),)", 'object_name': 'Appointment'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'jury': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'appointments'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.AppointmentJury']"}),
+            'slot': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'appointments'", 'to': "orm['teleforma.AppointmentSlot']"}),
+            'slot_nb': ('django.db.models.fields.IntegerField', [], {}),
+            'student': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'appointments'", 'to': "orm['auth.User']"})
+        },
+        'teleforma.appointmentjury': {
+            'Meta': {'ordering': "('id',)", 'object_name': 'AppointmentJury', 'db_table': "'teleforma_appointment_jury'"},
+            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'bbb_room': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'slot': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jurys'", 'null': 'True', 'to': "orm['teleforma.AppointmentSlot']"})
+        },
+        'teleforma.appointmentperiod': {
+            'Meta': {'ordering': "('id',)", 'object_name': 'AppointmentPeriod', 'db_table': "'teleforma_appointment_period'"},
+            'appointment_mail_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'appointment_mail_text_distance': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'appointment_slot_size': ('django.db.models.fields.IntegerField', [], {'default': '40'}),
+            'book_delay': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
+            'cancel_delay': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
+            'course': ('django.db.models.fields.related.ForeignKey', [], {'default': '19', 'to': "orm['teleforma.Course']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}),
+            'enable_appointment': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'end': ('django.db.models.fields.DateField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'appointment_periods'", 'symmetrical': 'False', 'to': "orm['teleforma.Period']"}),
+            'start': ('django.db.models.fields.DateField', [], {})
+        },
+        'teleforma.appointmentslot': {
+            'Meta': {'ordering': "('id',)", 'object_name': 'AppointmentSlot', 'db_table': "'teleforma_appointment_slot'"},
+            'appointment_period': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'slots'", 'null': 'True', 'to': "orm['teleforma.AppointmentPeriod']"}),
+            'date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'mode': ('django.db.models.fields.CharField', [], {'default': "'presentiel'", 'max_length': '20'}),
+            'nb': ('django.db.models.fields.IntegerField', [], {}),
+            'start': ('django.db.models.fields.TimeField', [], {})
+        },
+        'teleforma.conference': {
+            'Meta': {'ordering': "['-date_begin']", 'object_name': 'Conference'},
+            'comment': ('teleforma.fields.ShortTextField', [], {'max_length': '255', 'blank': 'True'}),
+            'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'conference'", 'to': "orm['teleforma.Course']"}),
+            'course_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'conference'", 'to': "orm['teleforma.CourseType']"}),
+            'date_begin': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'department': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Department']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'period': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Period']"}),
+            'professor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Professor']"}),
+            'public_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'readers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+            'room': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'to': "orm['teleforma.Room']"}),
+            'session': ('django.db.models.fields.CharField', [], {'default': "'1'", 'max_length': '16'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
+            'streaming': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'web_class_group': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conferences'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.WebClassGroup']"})
+        },
+        'teleforma.corrector': {
+            'Meta': {'ordering': "['user__last_name', '-date_registered']", 'object_name': 'Corrector'},
+            'courses': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['teleforma.Course']", 'null': 'True', 'blank': 'True'}),
+            'date_registered': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'pay_status': ('django.db.models.fields.CharField', [], {'default': "'honoraire'", 'max_length': '64', 'null': 'True', 'blank': 'True'}),
+            'period': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'corrector'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Period']"}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'corrector'", 'unique': 'True', 'to': "orm['auth.User']"})
+        },
+        'teleforma.course': {
+            'Meta': {'ordering': "['number']", 'object_name': 'Course'},
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'department': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'course'", 'to': "orm['teleforma.Department']"}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'has_exam_scripts': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_professor_sent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teleforma.Professor']", 'null': 'True', 'blank': 'True'}),
+            'number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'periods': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'courses'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Period']"}),
+            'quiz': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['quiz.Quiz']", 'null': 'True', 'blank': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'title_tweeter': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'types': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'course'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.CourseType']"})
+        },
+        'teleforma.coursegroup': {
+            'Meta': {'object_name': 'CourseGroup', 'db_table': "'teleforma_course_group'"},
+            'courses': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'course_groups'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Course']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'teleforma.coursetype': {
+            'Meta': {'object_name': 'CourseType', 'db_table': "'teleforma_course_type'"},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'teleforma.department': {
+            'Meta': {'object_name': 'Department'},
+            'default_period': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'departments'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Period']"}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'domain': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'department'", 'to': "orm['teleforma.Organization']"})
+        },
+        'teleforma.discount': {
+            'Meta': {'object_name': 'Discount', 'db_table': "'teleforma_discounts'"},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'student': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'discounts'", 'to': "orm['teleforma.Student']"}),
+            'value': ('django.db.models.fields.FloatField', [], {})
+        },
+        'teleforma.document': {
+            'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'},
+            'annal_year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'conference': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'document'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Conference']"}),
+            'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'document'", 'to': "orm['teleforma.Course']"}),
+            'course_type': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'document'", 'blank': 'True', 'to': "orm['teleforma.CourseType']"}),
+            'credits': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'file': ('telemeta.models.core.FileField', [], {'default': "''", 'max_length': '1024', 'db_column': "'filename'", 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'iej': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'document'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.IEJ']"}),
+            'is_annal': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'periods': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'documents'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Period']"}),
+            'readers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'document'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+            'session': ('django.db.models.fields.CharField', [], {'default': "'1'", 'max_length': '16'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'document'", 'null': 'True', 'to': "orm['teleforma.DocumentType']"}),
+            'weight': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'})
+        },
+        'teleforma.documentsimple': {
+            'Meta': {'ordering': "['-date_added']", 'object_name': 'DocumentSimple', 'db_table': "'teleforma_document_simple'"},
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'credits': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'file': ('telemeta.models.core.FileField', [], {'default': "''", 'max_length': '1024', 'db_column': "'filename'", 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'period': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'document_simple'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Period']"}),
+            'readers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'document_simple'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'weight': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'})
+        },
+        'teleforma.documenttype': {
+            'Meta': {'ordering': "['number']", 'object_name': 'DocumentType', 'db_table': "'teleforma_document_type'"},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'for_corrector': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'teleforma.groupedmessage': {
+            'Meta': {'object_name': 'GroupedMessage', 'db_table': "'teleforma_grouped_messages'"},
+            'date_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'grouped_messages'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.StudentGroup']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'message': ('django.db.models.fields.TextField', [], {}),
+            'sender': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'grouped_messages'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+            'sent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'subject': ('django.db.models.fields.CharField', [], {'max_length': '119'}),
+            'to_send': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+        },
+        'teleforma.home': {
+            'Meta': {'object_name': 'Home'},
+            'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'modified_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}),
+            'periods': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'home_texts'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Period']"}),
+            'text': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'default': '"Page d\'accueil"', 'max_length': '255'}),
+            'video': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teleforma.Media']", 'null': 'True', 'blank': 'True'}),
+            'visible_title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
+        },
+        'teleforma.iej': {
+            'Meta': {'ordering': "['name']", 'object_name': 'IEJ'},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'teleforma.livestream': {
+            'Meta': {'object_name': 'LiveStream', 'db_table': "'teleforma_live_stream'"},
+            'conference': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'livestream'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Conference']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'server': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'livestream'", 'to': "orm['teleforma.StreamingServer']"}),
+            'stream_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+            'streaming': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+        },
+        'teleforma.media': {
+            'Meta': {'ordering': "['-date_modified', '-conference__session']", 'object_name': 'Media'},
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'conference': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Conference']"}),
+            'course': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'to': "orm['teleforma.Course']"}),
+            'course_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'to': "orm['teleforma.CourseType']"}),
+            'credits': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'to': "orm['telemeta.MediaItem']"}),
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'period': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Period']"}),
+            'readers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+            'weight': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'})
+        },
+        'teleforma.newsitem': {
+            'Meta': {'object_name': 'NewsItem'},
+            'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'newsitems'", 'to': "orm['teleforma.Course']"}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'creator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'newsitems'", 'to': "orm['auth.User']"}),
+            'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'period': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'newsitems'", 'null': 'True', 'to': "orm['teleforma.Period']"}),
+            'text': ('tinymce.models.HTMLField', [], {}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'teleforma.optionalfee': {
+            'Meta': {'object_name': 'OptionalFee', 'db_table': "'teleforma_optional_fees'"},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'student': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'optional_fees'", 'to': "orm['teleforma.Student']"}),
+            'value': ('django.db.models.fields.FloatField', [], {})
+        },
+        'teleforma.organization': {
+            'Meta': {'object_name': 'Organization'},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'teleforma.parameters': {
+            'Meta': {'object_name': 'Parameters'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'inscription_text': ('tinymce.models.HTMLField', [], {'blank': 'True'})
+        },
+        'teleforma.payback': {
+            'Meta': {'object_name': 'Payback', 'db_table': "'teleforma_paybacks'"},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'student': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'paybacks'", 'to': "orm['teleforma.Student']"}),
+            'value': ('django.db.models.fields.FloatField', [], {})
+        },
+        'teleforma.payment': {
+            'Meta': {'ordering': "['scheduled', 'month']", 'object_name': 'Payment', 'db_table': "'teleforma_payments'"},
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'date_paid': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'month': ('django.db.models.fields.IntegerField', [], {'default': '1', 'null': 'True', 'blank': 'True'}),
+            'online_paid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'scheduled': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'student': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'payments'", 'to': "orm['teleforma.Student']"}),
+            'type': ('django.db.models.fields.CharField', [], {'default': "'online'", 'max_length': '64'}),
+            'value': ('django.db.models.fields.FloatField', [], {})
+        },
+        'teleforma.period': {
+            'Meta': {'ordering': "['name']", 'object_name': 'Period'},
+            'date_begin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_close_accounts': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_end': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_exam_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_inscription_end': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_inscription_start': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_password_init': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'department': ('telemeta.models.core.ForeignKey', [], {'default': 'None', 'related_name': "'period'", 'null': 'True', 'blank': 'True', 'to': "orm['teleforma.Department']"}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_open': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'message_local': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'message_platform': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nb_script': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['teleforma.Period']"})
+        },
+        'teleforma.professor': {
+            'Meta': {'ordering': "['user__last_name']", 'object_name': 'Professor'},
+            'courses': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'professor'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Course']"}),
+            'department': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'professor'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.Department']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'professor'", 'unique': 'True', 'to': "orm['auth.User']"})
+        },
+        'teleforma.profile': {
+            'Meta': {'object_name': 'Profile', 'db_table': "'teleforma_profiles'"},
+            'address': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'address_detail': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'birthday': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'birthday_place': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'init_password': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'language': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'siret': ('django.db.models.fields.CharField', [], {'max_length': '13', 'null': 'True', 'blank': 'True'}),
+            'ss_number': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
+            'telephone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
+            'wifi_login': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'wifi_pass': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
+        },
+        'teleforma.room': {
+            'Meta': {'object_name': 'Room'},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'room'", 'to': "orm['teleforma.Organization']"})
+        },
+        'teleforma.streamingserver': {
+            'Meta': {'object_name': 'StreamingServer', 'db_table': "'teleforma_streaming_server'"},
+            'admin_password': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'host': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'port': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+            'source_password': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '32'})
+        },
+        'teleforma.student': {
+            'Meta': {'ordering': "['user__last_name']", 'object_name': 'Student', 'db_table': "'teleforma_ae_student'"},
+            'application_fees': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+            'balance_intermediary': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+            'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'confirmation_sent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'courses': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'student'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Course']"}),
+            'date_registered': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_subscribed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'fascicule': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'iej': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['teleforma.IEJ']"}),
+            'is_subscribed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'level': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'payment_schedule': ('django.db.models.fields.CharField', [], {'default': "'split'", 'max_length': '64', 'null': 'True', 'blank': 'True'}),
+            'payment_type': ('django.db.models.fields.CharField', [], {'default': "'online'", 'max_length': '64', 'null': 'True', 'blank': 'True'}),
+            'period': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'student'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Period']"}),
+            'platform_only': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'portrait': ('django.db.models.fields.files.ImageField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+            'promo_code': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'receipt_id': ('django.db.models.fields.IntegerField', [], {'unique': 'True', 'null': 'True', 'blank': 'True'}),
+            'restricted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'subscription_fees': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'student'", 'unique': 'True', 'to': "orm['auth.User']"})
+        },
+        'teleforma.studentgroup': {
+            'Meta': {'object_name': 'StudentGroup', 'db_table': "'teleforma_student_groups'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'students': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'groups'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Student']"})
+        },
+        'teleforma.training': {
+            'Meta': {'object_name': 'Training'},
+            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+            'cost_elearning_fascicle': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+            'cost_elearning_nofascicle': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'duration': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['teleforma.Training']"}),
+            'period': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'training'", 'null': 'True', 'to': "orm['teleforma.Period']"}),
+            'platform_only': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+        },
+        'teleforma.webclassgroup': {
+            'Meta': {'ordering': "['name']", 'object_name': 'WebClassGroup'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'iejs': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'web_class_group'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.IEJ']"}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'telemeta.acquisitionmode': {
+            'Meta': {'ordering': "['value']", 'object_name': 'AcquisitionMode', 'db_table': "'acquisition_modes'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.adconversion': {
+            'Meta': {'ordering': "['value']", 'object_name': 'AdConversion', 'db_table': "'ad_conversions'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.ethnicgroup': {
+            'Meta': {'ordering': "['value']", 'object_name': 'EthnicGroup', 'db_table': "'ethnic_groups'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.genericstyle': {
+            'Meta': {'ordering': "['value']", 'object_name': 'GenericStyle', 'db_table': "'generic_styles'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.language': {
+            'Meta': {'ordering': "['name']", 'object_name': 'Language', 'db_table': "'languages'"},
+            'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'identifier': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}),
+            'name': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'part1': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}),
+            'part2B': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}),
+            'part2T': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}),
+            'scope': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}),
+            'type': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'})
+        },
+        'telemeta.legalright': {
+            'Meta': {'ordering': "['value']", 'object_name': 'LegalRight', 'db_table': "'legal_rights'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.location': {
+            'Meta': {'ordering': "['name']", 'object_name': 'Location', 'db_table': "'locations'"},
+            'complete_type': ('telemeta.models.core.ForeignKey', [], {'related_name': "'locations'", 'to': "orm['telemeta.LocationType']"}),
+            'current_location': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'past_names'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.Location']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_authoritative': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
+            'latitude': ('telemeta.models.core.FloatField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'longitude': ('telemeta.models.core.FloatField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'name': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '150'}),
+            'type': ('telemeta.models.core.IntegerField', [], {'default': '0', 'db_index': 'True', 'blank': 'True'})
+        },
+        'telemeta.locationtype': {
+            'Meta': {'ordering': "['name']", 'object_name': 'LocationType', 'db_table': "'location_types'"},
+            'code': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '64'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('telemeta.models.core.CharField', [], {'max_length': '150'})
+        },
+        'telemeta.mediacollection': {
+            'Meta': {'ordering': "['code']", 'object_name': 'MediaCollection', 'db_table': "'media_collections'"},
+            'a_informer_07_03': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'acquisition_mode': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.AcquisitionMode']"}),
+            'ad_conversion': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.AdConversion']"}),
+            'alt_ids': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'alt_title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'approx_duration': ('telemeta.models.core.DurationField', [], {'default': "'0'", 'blank': 'True'}),
+            'auto_period_access': ('telemeta.models.core.BooleanField', [], {'default': 'True'}),
+            'booklet_author': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'booklet_description': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'cnrs_contributor': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'code': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}),
+            'collector': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'collector_is_creator': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
+            'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'conservation_site': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'creator': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'doctype_code': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'external_references': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_published': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
+            'items_done': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'legal_rights': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.LegalRight']"}),
+            'metadata_author': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MetadataAuthor']"}),
+            'metadata_writer': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MetadataWriter']"}),
+            'old_code': ('telemeta.models.core.CharField', [], {'default': 'None', 'max_length': '250', 'null': 'True', 'blank': 'True'}),
+            'physical_format': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PhysicalFormat']"}),
+            'physical_items_num': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'public_access': ('telemeta.models.core.CharField', [], {'default': "'metadata'", 'max_length': '16', 'blank': 'True'}),
+            'publisher': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.Publisher']"}),
+            'publisher_collection': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PublisherCollection']"}),
+            'publisher_serial': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'publishing_status': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PublishingStatus']"}),
+            'recorded_from_year': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'recorded_to_year': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'recording_context': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.RecordingContext']"}),
+            'reference': ('telemeta.models.core.CharField', [], {'default': 'None', 'max_length': '250', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+            'state': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'title': ('telemeta.models.core.CharField', [], {'max_length': '250'}),
+            'travail': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'year_published': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'})
+        },
+        'telemeta.mediaitem': {
+            'Meta': {'object_name': 'MediaItem', 'db_table': "'media_items'"},
+            'alt_title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'approx_duration': ('telemeta.models.core.DurationField', [], {'default': "'0'", 'blank': 'True'}),
+            'author': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'auto_period_access': ('telemeta.models.core.BooleanField', [], {'default': 'True'}),
+            'code': ('telemeta.models.core.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '250', 'blank': 'True'}),
+            'collection': ('telemeta.models.core.ForeignKey', [], {'related_name': "'items'", 'to': "orm['telemeta.MediaCollection']"}),
+            'collector': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'collector_from_collection': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
+            'collector_selection': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'context_comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'contributor': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'copied_from_item': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'copies'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MediaItem']"}),
+            'creator_reference': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'cultural_area': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'depositor': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'digitalist': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'digitization_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'ethnic_group': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.EthnicGroup']"}),
+            'external_references': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'file': ('telemeta.models.core.FileField', [], {'default': "''", 'max_length': '1024', 'db_column': "'filename'", 'blank': 'True'}),
+            'generic_style': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.GenericStyle']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'language': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'language_iso': ('telemeta.models.core.ForeignKey', [], {'related_name': "'items'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['telemeta.Language']", 'blank': 'True', 'null': 'True'}),
+            'location': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'to': "orm['telemeta.Location']", 'null': 'True', 'blank': 'True'}),
+            'location_comment': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'mimetype': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
+            'moda_execut': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'old_code': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'organization': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'to': "orm['telemeta.Organization']", 'null': 'True', 'blank': 'True'}),
+            'public_access': ('telemeta.models.core.CharField', [], {'default': "'metadata'", 'max_length': '16', 'blank': 'True'}),
+            'publishing_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'recorded_from_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'recorded_to_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'recordist': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'rights': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'to': "orm['telemeta.Rights']", 'null': 'True', 'blank': 'True'}),
+            'scientist': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'summary': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}),
+            'title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'topic': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'to': "orm['telemeta.Topic']", 'null': 'True', 'blank': 'True'}),
+            'track': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}),
+            'vernacular_style': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.VernacularStyle']"})
+        },
+        'telemeta.metadataauthor': {
+            'Meta': {'ordering': "['value']", 'object_name': 'MetadataAuthor', 'db_table': "'metadata_authors'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.metadatawriter': {
+            'Meta': {'ordering': "['value']", 'object_name': 'MetadataWriter', 'db_table': "'metadata_writers'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.organization': {
+            'Meta': {'ordering': "['value']", 'object_name': 'Organization', 'db_table': "'organization'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.physicalformat': {
+            'Meta': {'ordering': "['value']", 'object_name': 'PhysicalFormat', 'db_table': "'physical_formats'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.publisher': {
+            'Meta': {'ordering': "['value']", 'object_name': 'Publisher', 'db_table': "'publishers'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.publishercollection': {
+            'Meta': {'ordering': "['value']", 'object_name': 'PublisherCollection', 'db_table': "'publisher_collections'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'publisher': ('telemeta.models.core.ForeignKey', [], {'related_name': "'publisher_collections'", 'to': "orm['telemeta.Publisher']"}),
+            'value': ('telemeta.models.core.CharField', [], {'max_length': '250'})
+        },
+        'telemeta.publishingstatus': {
+            'Meta': {'ordering': "['value']", 'object_name': 'PublishingStatus', 'db_table': "'publishing_status'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.recordingcontext': {
+            'Meta': {'ordering': "['value']", 'object_name': 'RecordingContext', 'db_table': "'recording_contexts'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.rights': {
+            'Meta': {'ordering': "['value']", 'object_name': 'Rights', 'db_table': "'rights'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.topic': {
+            'Meta': {'ordering': "['value']", 'object_name': 'Topic', 'db_table': "'topic'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        },
+        'telemeta.vernacularstyle': {
+            'Meta': {'ordering': "['value']", 'object_name': 'VernacularStyle', 'db_table': "'vernacular_styles'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'})
+        }
+    }
+
+    complete_apps = ['teleforma']
\ No newline at end of file
index d593086812f119f6a33e37a2d68726e28582c5ba..958b247e334999a6e912b470e1672e3e07dbf904 100755 (executable)
@@ -199,14 +199,17 @@ class Course(Model):
     title_tweeter = models.CharField(_('tweeter title'), max_length=255)
     date_modified = models.DateTimeField(_('date modified'), auto_now=True, null=True)
     number = models.IntegerField(_('number'), blank=True, null=True)
-    synthesis_note = models.BooleanField(_('synthesis note'))
-    obligation = models.BooleanField(_('obligations'))
-    magistral = models.BooleanField(_('magistral'))
-    procedure = models.BooleanField(_('procedure'))
-    written_speciality = models.BooleanField(_('written_speciality'))
-    oral_speciality = models.BooleanField(_('oral_speciality'))
-    oral_1 = models.BooleanField(_('oral_1'))
-    oral_2 = models.BooleanField(_('oral_2'))
+
+    if settings.TELEFORMA_E_LEARNING_TYPE != 'AE':
+        synthesis_note = models.BooleanField(_('synthesis note'))
+        obligation = models.BooleanField(_('obligations'))
+        magistral = models.BooleanField(_('magistral'))
+        procedure = models.BooleanField(_('procedure'))
+        written_speciality = models.BooleanField(_('written_speciality'))
+        oral_speciality = models.BooleanField(_('oral_speciality'))
+        oral_1 = models.BooleanField(_('oral_1'))
+        oral_2 = models.BooleanField(_('oral_2'))
+
     has_exam_scripts = models.BooleanField(_("copies d'examen"), default=True)
     quiz = models.ManyToManyField(Quiz, verbose_name=_('quiz'), blank=True, null=True)
     # last professor which received a student message on automatic mode
@@ -350,6 +353,7 @@ class Conference(models.Model):
     streaming       = models.BooleanField(_('streaming'), default=True)
     web_class_group = models.ForeignKey('WebClassGroup', related_name='conferences', verbose_name=_('web class group'),
                              blank=True, null=True, on_delete=models.SET_NULL)
+    # is_webclass     = models.BooleanField("Webclass", default=False)
 
     @property
     def description(self):
index ef5b411f6f2eb0f6ddd9d0e2a8a758b2bc23de91..5fdf78ae38d7f00caea5c6a94802d913837e8931 100755 (executable)
@@ -82,32 +82,35 @@ class Training(Model):
     description = models.CharField(_('description'), max_length=512, blank=True)
     period = models.ForeignKey('Period', related_name='training', verbose_name=_('period'), blank=True, null=True)
     parent = models.ForeignKey('Training', related_name='children', verbose_name=_('parent'), blank=True, null=True)
-    synthesis_note  = models.ManyToManyField('CourseType', related_name="training_synthesis_note", verbose_name=_('synthesis note'),
-                                        blank=True, null=True)
-    obligation = models.ManyToManyField('CourseType', related_name="training_obligation",
-                                        verbose_name=_('obligations'),
-                                        blank=True, null=True)
-    procedure = models.ManyToManyField('CourseType', related_name="training_procedure",
-                                        verbose_name=_('procedure'),
-                                        blank=True, null=True)
-    written_speciality = models.ManyToManyField('CourseType', related_name="training_written_speciality",
-                                        verbose_name=_('written speciality'),
-                                        blank=True, null=True)
-    oral_speciality = models.ManyToManyField('CourseType', related_name="training_oral_speciality",
-                                        verbose_name=_('oral speciality'),
-                                        blank=True, null=True)
-    oral_1 = models.ManyToManyField('CourseType', related_name="training_oral_1",
-                                        verbose_name=_('oral 1'),
-                                        blank=True, null=True)
-    oral_2 = models.ManyToManyField('CourseType', related_name="training_oral_2",
-                                        verbose_name=_('oral 2'),
-                                        blank=True, null=True)
-    options = models.ManyToManyField('CourseType', related_name="training_options",
-                                        verbose_name=_('options'),
-                                        blank=True, null=True)
-    magistral = models.ManyToManyField('CourseType', related_name="training_magistral",
-                                        verbose_name=_('magistral'),
-                                        blank=True, null=True)
+
+    if settings.TELEFORMA_E_LEARNING_TYPE != 'AE':
+        synthesis_note  = models.ManyToManyField('CourseType', related_name="training_synthesis_note", verbose_name=_('synthesis note'),
+                                            blank=True, null=True)
+        obligation = models.ManyToManyField('CourseType', related_name="training_obligation",
+                                            verbose_name=_('obligations'),
+                                            blank=True, null=True)
+        procedure = models.ManyToManyField('CourseType', related_name="training_procedure",
+                                            verbose_name=_('procedure'),
+                                            blank=True, null=True)
+        written_speciality = models.ManyToManyField('CourseType', related_name="training_written_speciality",
+                                            verbose_name=_('written speciality'),
+                                            blank=True, null=True)
+        oral_speciality = models.ManyToManyField('CourseType', related_name="training_oral_speciality",
+                                            verbose_name=_('oral speciality'),
+                                            blank=True, null=True)
+        oral_1 = models.ManyToManyField('CourseType', related_name="training_oral_1",
+                                            verbose_name=_('oral 1'),
+                                            blank=True, null=True)
+        oral_2 = models.ManyToManyField('CourseType', related_name="training_oral_2",
+                                            verbose_name=_('oral 2'),
+                                            blank=True, null=True)
+        options = models.ManyToManyField('CourseType', related_name="training_options",
+                                            verbose_name=_('options'),
+                                            blank=True, null=True)
+        magistral = models.ManyToManyField('CourseType', related_name="training_magistral",
+                                            verbose_name=_('magistral'),
+                                            blank=True, null=True)
+
     cost = models.FloatField(_('cost'), blank=True, null=True)
     cost_elearning_fascicle = models.FloatField(_('e-learning cost with fascicle'), blank=True, null=True)
     cost_elearning_nofascicle = models.FloatField(_('e-learning cost without fascicle'), blank=True, null=True)
@@ -146,9 +149,6 @@ if settings.TELEFORMA_E_LEARNING_TYPE != 'AE':
         written_speciality = models.ForeignKey('Course', related_name="written_speciality_students",
                                             verbose_name=_('written speciality'), help_text="Matière juridique de spécialité",
                                             blank=True, null=True, limit_choices_to={'written_speciality': True})
-        written_speciality = models.ForeignKey('Course', related_name="written_speciality_2students",
-                                        verbose_name=_('written speciality'), help_text="Matière juridique de spécialité",
-                                        blank=True, null=True, limit_choices_to={'written_speciality': True})
         oral_speciality = models.ForeignKey('Course', related_name="oral_speciality_students",
                                             verbose_name=_('oral speciality'),
                                             help_text="Matière d’oral de spécialité (matière incluse dans la formation approfondie, en option pour toutes les autres formations)",
index a53fa598efeb7327c0882843a233c8f58f216f54..fdf91cea951a2804f8225b233dc4d732593f2b7e 100644 (file)
@@ -6,7 +6,7 @@
 <div class="tabs module">
     <h3><img src="{% static 'teleforma/images/actus.png' %}" alt="actualités"/>Actualités</h3>
     <ul>
-        <li><a href="#news_local">{{ course.title_tweeter }}</a>
+        <li><a href="#news_local">{% if course.title_tweeter %}{{ course.title_tweeter }}{% else %}{{ course.title }}{% endif %}</a>
             {% if can_add %}<a href="{% url newsitem-create %}?course_id={{course.id}}&period_id={{period_id}}">+</a>{% endif %}
         </li>
         <li><a href="#news_global">Générales</a>
index 1777a065dc17a9a125ba97dd71f6fda4a757a0a3..8629fd91c32031c1080b1caf032a6dc87e408bac 100644 (file)
@@ -116,7 +116,7 @@ alt="logo" />
   <li><a href="{% url teleforma-users 0 0 0 %}" class="yellow">{% trans "Users" %}</a></li>
  {% endif %}
   {% if not user.student or not user.student.get.restricted %}
-    <li><a href="{% url teleforma-annals %}" class="yellow">{% trans "Annals" %}</a></li>
+    {% comment %} <li><a href="{% url teleforma-annals %}" class="yellow">{% trans "Annals" %}</a></li> {% endcomment %}
 
     {% if periods|length == 1 %}
         <li><a href="{% url teleforma-exam-scripts-pending periods.0.id %}" class="green">&nbsp;{% trans "Scripts" %}
@@ -139,7 +139,7 @@ alt="logo" />
       <li><a href="{% url teleforma-webclass-professor %}" class="yellow">Webclass</a></li>
     {% endif %}
 
-    {% if periods|length == 1 %}
+    {% comment %} {% if periods|length == 1 %}
         <li><a href="{% url teleforma-exam-scripts-scores-all periods.0.id %}" class="green">&nbsp;{% trans "Scores" %}</a></li>
     {% else %}
       <li><a href="#scores#" class="green">&nbsp;{% trans "Scores" %}</a>
@@ -149,7 +149,7 @@ alt="logo" />
           {% endfor %}
         </ul>
       </li>
-    {% endif %}
+    {% endif %} {% endcomment %}
   {% endif %}
 
  {% if user.is_authenticated %}
index e91ee306b2ad5f9e59b14c61eefe5e6cd8fe01c9..88659c20fb58cfcb53940a00da40d9144c9b8a3c 100644 (file)
    <thead>
    <tr><th>{% trans "Last Name"%}</th>
     <th>{% trans "First Name"%}</th>
-    <th>{% trans "IEJ"%}</th>
-    <th>{% trans "Trainings"%}</th>
-    <th>{% trans "Procedure"%}</th>
-    <th>{% trans "Written spe"%}</th>
-    <th>{% trans "Oral spe"%}</th>
-    <th>{% trans "Oral 1"%}</th>
-    <th>{% trans "Oral 2"%}</th>
-    <th>{% trans "Write"%}</th>
+    <th>Type</td>
+    <th></th>
     </tr>
     </thead>
     <tbody id="spacing">
 
      {% if user.student.get %}
       {% with user.student.get as student %}
-        <td>{{ student.iej.name }}</td>
-        <td>{% for training in student.trainings.all %}{{ training }} {% endfor %}</td>
-        <td>{{ student.procedure.code }}</td>
-        <td>{{ student.written_speciality.code }}</td>
-        <td>{{ student.oral_speciality.code }}</td>
-        <td>{{ student.oral_1.code }}</td>
-        <td>{{ student.oral_2.code }}</td>
+        <td>{% trans "Student"%}</td>
      {% endwith %}
     {% elif user.professor.get %}
         <td>{% trans "Professor" %}</td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
     {% elif user.is_staff %}
         <td>{% trans "Administrator" %}</td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
     {% else %}
         <td>{% trans "Unknown" %}</td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
-        <td></td>
     {%  endif %}
     <td><a href="{% url postman_write user.username %}" class="component_icon button" id="action_orange">{% trans "Message" %}</a></td>
     </tr>
index c3b519ac515a78cbf1030c8bbca04fd1d882b261..8411227549f3054d7fa6eafd5432b957b44acfe7 100644 (file)
       <dt>{% trans "Username" %}</dt><dd>{{ usr.username }}</dd>
 
       {% if usr.student.get %}
-        <dt>{% trans "IEJ" %}</dt><dd>{{ usr.student.get.iej }}</dd>
         <dt>{% trans "Trainings" %}</dt><dd>{% for training in usr.student.get.trainings.all %}{{ training }}<br />{% endfor %}</dd>
         <dt>{% trans "Platform only" %}</dt><dd>{{ usr.student.get.platform_only|yes_no }}</dd>
-        <dt>{% trans "Procedure"%}</dt><dd>{{ usr.student.get.procedure}}</dd>
-        <dt>{% trans "Oral spe"%}</dt><dd>{{ usr.student.get.oral_speciality }}</dd>
-        <dt>{% trans "Written spe"%}</dt><dd>{{ usr.student.get.written_speciality }}</dd>
-        <dt>{% trans "Oral 1"%}</dt><dd>{{ usr.student.get.oral_1 }}</dd>
-        <dt>{% trans "Oral 2"%}</dt><dd>{{ usr.student.get.oral_2 }}</dd>
-        <dt>{% trans "Options"%}</dt><dd>{{ usr.student.get.options }}</dd>
       {% endif %}
 
       {% if user.is_staff or user.is_superuser or usr == user %}
index c2f63cf7501766aaca8c70642f132d9b845c3637..e36a9ac11a25049c5fd7fc39bbd96b8f851b07a2 100644 (file)
@@ -114,6 +114,8 @@ urlpatterns = patterns('',
         name="teleforma-conference-audio"),
     url(r'^desk/conference_record/$', ConferenceRecordView.as_view(),
         name="teleforma-conference-record"),
+    url(r'^desk/bbbconference_record/$', BBBConferenceRecordView.as_view(),
+        name="teleforma-bbbconference-record"),
     url(r'^desk/periods/(?P<period_id>.*)/conferences/list/$', ConferenceListView.as_view(),
         name="teleforma-conferences"),
 
@@ -141,7 +143,6 @@ urlpatterns = patterns('',
     url(r'^update-training/(?P<id>.*)/$', update_training, name="update-training"),
 
     # News Item
-    url(r'^desk/periods/(?P<period_id>.*)/medias/(?P<pk>.*)/detail/$', MediaView.as_view(), name="teleforma-media-detail"),
     url(r'^newsitems/create', NewsItemCreate.as_view(), name='newsitem-create'),
     url(r'^newsitems/update/(?P<pk>.*)', NewsItemUpdate.as_view(), name='newsitem-update'),
     url(r'^newsitems/delete/(?P<pk>.*)', NewsItemDelete.as_view(), name='newsitem-delete'),
index 9b442600f748b502962dca8a54681e234152e965..0b017ad51336a18a023a9183160159906309b9a0 100644 (file)
@@ -70,10 +70,6 @@ def get_ae_courses(user, date_order=False, num_order=False, period=None):
         for course in s_courses:
             courses = format_ae_courses(courses, course=course)
 
-        magistrals = Course.objects.filter(magistral=True)
-        if magistrals:
-            courses = format_ae_courses(courses,
-                            queryset=magistrals)
 
     elif user.is_staff or user.is_superuser:
         courses = format_ae_courses(courses, queryset=Course.objects.all(), admin=True)
index b46522a0bb9a1323b00ee0f6a81b30ac4259ce79..d245e157d30f036aa1680cb53b518e691c556b08 100644 (file)
@@ -758,13 +758,14 @@ def live_message(conference):
         message = Message.objects.create_message(user, room, text)
 
 
-class ConferenceRecordView(FormView):
-    "Conference record form : TeleCaster module required"
-
+class ConferenceMixin(FormView):
     model = Conference
+    hidden_fields = ['started', 'date_begin', 'date_end', 'public_id', 'readers']
+
+class ConferenceRecordView(ConferenceMixin):
+    "Conference record form : TeleCaster module required"
     form_class = ConferenceForm
     template_name='teleforma/course_conference_record.html'
-    hidden_fields = ['started', 'date_begin', 'date_end', 'public_id', 'readers']
 
     def get_context_data(self, **kwargs):
         context = super(ConferenceRecordView, self).get_context_data(**kwargs)
@@ -873,6 +874,45 @@ class ConferenceRecordView(FormView):
         s = ServiceProxy(url)
         s.teleforma.create_conference(self.conference.to_json_dict())
 
+class BBBConferenceRecordView(ConferenceMixin):
+    "Conference record form to create BBB"
+
+    model = Conference
+    form_class = BBBConferenceForm
+    template_name='teleforma/course_conference_record.html'
+    hidden_fields = ['started', 'date_begin', 'date_end', 'public_id', 'readers']
+
+    def get_context_data(self, **kwargs):
+        context = super(ConferenceRecordView, self).get_context_data(**kwargs)
+        context['hidden_fields'] = self.hidden_fields
+        return context
+
+    def get_success_url(self):
+        return reverse('teleforma-conference-detail', kwargs={'period_id': self.conference.period.id,
+                                                              'pk':self.conference.id})
+
+    def form_valid(self, form):
+        form.save()
+        conference = form.instance
+        conference.date_begin = datetime.datetime.now()
+        conference.is_webclass = True
+        conference.professor = self.request.user
+        # conference.course = 
+        conference.save()
+        status = Status()
+
+        try:
+            live_message(conference)
+        except:
+            pass
+
+        return super(BBBConferenceRecordView, self).form_valid(form)
+
+    @method_decorator(access_required)
+    def dispatch(self, *args, **kwargs):
+        return super(BBBConferenceRecordView, self).dispatch(*args, **kwargs)
+
+
 
 class ProfessorListView(View):