diff --git a/src/agenda_culturel/forms.py b/src/agenda_culturel/forms.py index 89511c7..b1a01d8 100644 --- a/src/agenda_culturel/forms.py +++ b/src/agenda_culturel/forms.py @@ -137,6 +137,7 @@ class EventForm(ModelForm): required_css_class = 'required' old_local_image = CharField(widget=HiddenInput(), required=False) + simple_cloning = CharField(widget=HiddenInput(), required=False) tags = MultipleChoiceField( label=_("Tags"), @@ -181,6 +182,7 @@ class EventForm(ModelForm): def __init__(self, *args, **kwargs): is_authenticated = kwargs.pop("is_authenticated", False) self.cloning = kwargs.pop("is_cloning", False) + self.simple_cloning = kwargs.pop("is_simple_cloning", False) super().__init__(*args, **kwargs) if not is_authenticated: del self.fields["status"] @@ -191,6 +193,9 @@ class EventForm(ModelForm): def is_clone_from_url(self): return self.cloning + + def is_simple_clone_from_url(self): + return self.simple_cloning def clean_end_day(self): start_day = self.cleaned_data.get("start_day") diff --git a/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html b/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html index 7f05b23..23c6f6a 100644 --- a/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html +++ b/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html @@ -41,3 +41,6 @@ supprimer définitivement {% picto_from_name "x-circle" %} {% endif %} +{% if with_clone %} +Dupliquer {% picto_from_name "copy" %} +{% endif %} diff --git a/src/agenda_culturel/templates/agenda_culturel/event_form.html b/src/agenda_culturel/templates/agenda_culturel/event_form.html index 42bc98a..c6c0cb0 100644 --- a/src/agenda_culturel/templates/agenda_culturel/event_form.html +++ b/src/agenda_culturel/templates/agenda_culturel/event_form.html @@ -4,7 +4,11 @@ {% block title %}{% block og_title %} {% if object %}{% if form.is_clone_from_url %} -Création d'une copie de {% else %} +Création d'une copie locale de {% else %} +Édition de l'événement {{ object.title }} ({{ object.start_day }}) +{% endif %} +{% if form.is_simple_clone_from_url %} +Duplication de {% else %} Édition de l'événement {{ object.title }} ({{ object.start_day }}) {% endif %} {% else %} @@ -48,9 +52,10 @@ Création d'une copie de {% else %}
{% if object %}

{% if form.is_clone_from_url %} - Création d'une copie de {% else %} - Édition de l'événement{% endif %} {{ object.title }} ({{ object.start_day }})

- {% else %} + Création d'une copie locale de {% else %} + {% if form.is_simple_clone_from_url %} + Duplication de {% else %} + Édition de l'événement{% endif %}{% endif %} {{ object.title }} ({{ object.start_day }}) {% if from_import %}

Ajuster l'événement importé

{% else %} @@ -61,7 +66,7 @@ Création d'une copie de {% else %}
-{% if form.is_clone_from_url %} +{% if form.is_clone_from_url or form.is_simple_clone_from_url %} {% url "add_event_details" as urlparam %} {% endif %}
{% csrf_token %} diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html index ec25ff8..18f04e6 100644 --- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html +++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-single-inc.html @@ -98,7 +98,7 @@
Exporter ical {% picto_from_name "calendar" %} {% if perms.agenda_culturel.change_event and not noedit %} - {% include "agenda_culturel/edit-buttons-inc.html" with event=event %} + {% include "agenda_culturel/edit-buttons-inc.html" with event=event with_clone=1 %} {% endif %}
diff --git a/src/agenda_culturel/urls.py b/src/agenda_culturel/urls.py index 93eab8d..3eb6c3a 100644 --- a/src/agenda_culturel/urls.py +++ b/src/agenda_culturel/urls.py @@ -38,6 +38,7 @@ urlpatterns = [ path("event//moderate-next", EventModerateView.as_view(), name="moderate_event_next"), path("event//moderate-next/error", error_next_event, name="error_next_event"), path("moderate", EventModerateView.as_view(), name="moderate"), + path("event//simple-clone/edit", EventUpdateView.as_view(), name="simple_clone_edit"), path("event//clone/edit", EventUpdateView.as_view(), name="clone_edit"), path("event//update-from-source", update_from_source, name="update_from_source"), path( diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py index 0d5e61a..0dd4e44 100644 --- a/src/agenda_culturel/views.py +++ b/src/agenda_culturel/views.py @@ -304,14 +304,18 @@ class EventUpdateView( success_message = _("The event has been successfully modified.") def get_form_kwargs(self): + logger.warning("start kwargs") kwargs = super().get_form_kwargs() kwargs["is_authenticated"] = self.request.user.is_authenticated kwargs["is_cloning"] = self.is_cloning + kwargs["is_simple_cloning"] = self.is_simple_cloning return kwargs def get_initial(self): self.is_cloning = "clone" in self.request.path.split('/') + self.is_simple_cloning = "simple-clone" in self.request.path.split('/') result = super().get_initial() + if self.is_cloning and not "other_versions" in result: obj = self.get_object() # if no DuplicatedEvents is associated, create one @@ -322,20 +326,18 @@ class EventUpdateView( obj.save() result["other_versions"] = obj.other_versions result["status"] = Event.STATUS.PUBLISHED + + if self.is_simple_cloning: + result["other_versions"] = None + result["simple_cloning"] = True + + if self.is_cloning or self.is_simple_cloning: + obj = self.get_object() if obj.local_image: result["old_local_image"] = obj.local_image.name return result - def form_valid(self, form): - original = self.get_object() - # if an image is uploaded, it removes the url stored - if form.cleaned_data['local_image'] != original.local_image: - form.instance.image = None - - form.instance.import_sources = None - - return super().form_valid(form) class EventModerateView( @@ -504,6 +506,17 @@ class EventCreateView(SuccessMessageMixin, CreateView): return _("The event has been submitted and will be published as soon as it has been validated by the moderation team.") + def form_valid(self, form): + + logger.warning(str(form.cleaned_data)) + if form.cleaned_data['simple_cloning']: + form.instance.set_skip_duplicate_check() + + form.instance.import_sources = None + + return super().form_valid(form) + + def import_from_details(request): form = EventForm(request.POST, is_authenticated=request.user.is_authenticated) if form.is_valid():