diff --git a/gestioncof/forms.py b/gestioncof/forms.py index 5d936885..9c9b63f1 100644 --- a/gestioncof/forms.py +++ b/gestioncof/forms.py @@ -346,4 +346,4 @@ class CalendarForm(forms.ModelForm): class Meta: model = CalendarSubscription - exclude = ['user'] + exclude = ['user', 'token'] diff --git a/gestioncof/migrations/0005_add_calendar.py b/gestioncof/migrations/0005_add_calendar.py index 83b68a12..780586aa 100644 --- a/gestioncof/migrations/0005_add_calendar.py +++ b/gestioncof/migrations/0005_add_calendar.py @@ -17,7 +17,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CalendarSubscription', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(verbose_name='ID', serialize=False, + auto_created=True, primary_key=True)), + ('token', models.UUIDField()), ('subscribe_to_events', models.BooleanField(default=True)), ('shows', models.ManyToManyField(to='bda.Spectacle')), ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)), @@ -25,7 +27,8 @@ class Migration(migrations.Migration): ), migrations.AlterModelOptions( name='custommail', - options={'verbose_name': 'Mail personnalisable', 'verbose_name_plural': 'Mails personnalisables'}, + options={'verbose_name': 'Mail personnalisable', + 'verbose_name_plural': 'Mails personnalisables'}, ), migrations.AlterModelOptions( name='eventoptionchoice', @@ -34,11 +37,14 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='event', name='end_date', - field=models.DateTimeField(null=True, verbose_name=b'Date de fin', blank=True), + field=models.DateTimeField(null=True, verbose_name=b'Date de fin', + blank=True), ), migrations.AlterField( model_name='event', name='start_date', - field=models.DateTimeField(null=True, verbose_name=b'Date de d\xc3\xa9but', blank=True), + field=models.DateTimeField(null=True, + verbose_name=b'Date de d\xc3\xa9but', + blank=True), ), ] diff --git a/gestioncof/models.py b/gestioncof/models.py index aedd43e7..1a9c0e16 100644 --- a/gestioncof/models.py +++ b/gestioncof/models.py @@ -237,6 +237,7 @@ class Clipper(models.Model): class CalendarSubscription(models.Model): + token = models.UUIDField() user = models.OneToOneField(User) shows = models.ManyToManyField(Spectacle) subscribe_to_events = models.BooleanField(default=True) diff --git a/gestioncof/templates/calendar_subscription.html b/gestioncof/templates/calendar_subscription.html index 65a8b9e6..64cd1826 100644 --- a/gestioncof/templates/calendar_subscription.html +++ b/gestioncof/templates/calendar_subscription.html @@ -10,8 +10,10 @@

{{ error }}

{% endif %} +{% if token %}

Calendrier disponible à -cette adresse

+cette adresse

+{% endif %}
{% csrf_token %} diff --git a/gestioncof/urls.py b/gestioncof/urls.py index 4eaef916..ae1df693 100644 --- a/gestioncof/urls.py +++ b/gestioncof/urls.py @@ -42,5 +42,6 @@ events_patterns = [ calendar_patterns = [ url(r'^subscription$', 'gestioncof.views.calendar'), - url(r'^calendar.ics$', 'gestioncof.views.calendar_ics') + url(r'^(?P[a-z0-9-]+)/calendar.ics$', + 'gestioncof.views.calendar_ics') ] diff --git a/gestioncof/views.py b/gestioncof/views.py index e954fde8..74678c28 100644 --- a/gestioncof/views.py +++ b/gestioncof/views.py @@ -1,6 +1,7 @@ # coding: utf-8 import unicodecsv +import uuid from datetime import timedelta from icalendar import Calendar, Event as Vevent @@ -633,23 +634,26 @@ def calendar(request): form = CalendarForm(request.POST, instance=instance) if form.is_valid(): subscription = form.save(commit=False) - subscription.user = request.user + if instance is None: + subscription.user = request.user + subscription.token = uuid.uuid4() subscription.save() form.save_m2m() return render(request, "calendar_subscription.html", - {'form': form, 'success': True}) + {'form': form, + 'success': True, + 'token': str(subscription.token)}) else: return render(request, "calendar_subscription.html", {'form': form, 'error': "Formulaire incorrect"}) else: return render(request, "calendar_subscription.html", - {'form': CalendarForm(instance=instance)}) + {'form': CalendarForm(instance=instance), + 'token': instance.token if instance else None}) -@cof_required -def calendar_ics(request): - subscription, _ = CalendarSubscription.objects.get_or_create( - user=request.user) +def calendar_ics(request, token): + subscription = get_object_or_404(CalendarSubscription, token=token) vcal = Calendar() for show in subscription.shows.all(): vevent = Vevent()