]> git.0d.be Git - django-panik-emissions.git/commitdiff
don't allow regular user to choose an arbitrary date/time for episodes
authorFrédéric Péters <fpeters@0d.be>
Sun, 28 Aug 2022 07:48:19 +0000 (09:48 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sun, 28 Aug 2022 07:48:19 +0000 (09:48 +0200)
emissions/forms.py
emissions/views.py

index 6a9da51c594b2612fcac47bda1a98c459ecfbfea..20987a6c6ced74f574f948fe514700f52de8672f 100644 (file)
@@ -209,12 +209,21 @@ class EpisodeNewForm(EpisodeForm):
         return fields
 
     def __init__(self, *args, **kwargs):
+        user = kwargs.pop('user', None)
         super().__init__(*args, **kwargs)
         emission = kwargs.get('initial', {}).get('emission')
+        free_datetime = bool(
+            (user and user.has_perm('emissions.add_diffusion')) or not emission.schedule_set.exists()
+        )
         diffusion_fields = self.get_diffusion_fields(emission)
         for field_name in list(self.fields.keys()):
-            if field_name.endswith('_diffusion') and not field_name in diffusion_fields:
-                del self.fields[field_name]
+            if field_name.endswith('_diffusion'):
+                if field_name not in diffusion_fields:
+                    # remove extra diffusion fields
+                    del self.fields[field_name]
+                elif not free_datetime:
+                    # turn diffusion fields in select widgets for users
+                    self.fields[field_name].widget = DiffusionDateTimeWidget(emission)
 
     def save(self, commit=True):
         episode = super().save(commit=commit)
index 3351f6ea763b26e5731c6abcd34c1952c0cb5c7d..3e186cc0982ebede5bb49f3ecb2e2e69d6d80efe 100644 (file)
@@ -198,6 +198,11 @@ class EpisodeCreateView(CreateView):
             raise PermissionDenied()
         return super().get_form(*args, **kwargs)
 
+    def get_form_kwargs(self):
+        kwargs = super().get_form_kwargs()
+        kwargs['user'] = self.request.user
+        return kwargs
+
     def get_initial(self):
         initial = super().get_initial()
         initial['emission'] = Emission.objects.get(slug=self.kwargs.get('emission_slug'))