From 230d989e5fbe74a1529c3fb45a5e3914a363ff4b Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Sun, 20 Mar 2022 22:32:17 +0100 Subject: [PATCH] Assign calendar urls to users using a new model --- .../core/migrations/0039_personal_ical_url.py | 31 +++++++++++++++++ aleksis/core/models.py | 34 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 aleksis/core/migrations/0039_personal_ical_url.py diff --git a/aleksis/core/migrations/0039_personal_ical_url.py b/aleksis/core/migrations/0039_personal_ical_url.py new file mode 100644 index 000000000..02d9cb3a9 --- /dev/null +++ b/aleksis/core/migrations/0039_personal_ical_url.py @@ -0,0 +1,31 @@ +# Generated by Django 3.2.12 on 2022-02-20 21:04 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + +from aleksis.core.feeds import PersonalICalFeedBase + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0038_notification_send_at'), + ] + + operations = [ + migrations.CreateModel( + name='PersonalICalUrl', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True, verbose_name='UUID')), + ('name', models.CharField(max_length=255, verbose_name='Name')), + ('ical_feed', models.CharField(choices=PersonalICalFeedBase.subclass_choices, max_length=255, verbose_name='Selected ICal feed')), + ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='calendar_urls', to='core.person', verbose_name='Person')), + ], + options={ + 'verbose_name': 'Personal Calendar URL', + 'verbose_name_plural': 'Personal Calendar URLs', + }, + ), + ] diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 7c555b409..3d2c31fef 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -4,6 +4,7 @@ import hmac from datetime import date, datetime, timedelta from typing import Any, Iterable, List, Optional, Sequence, Union from urllib.parse import urlparse +import uuid from django.conf import settings from django.contrib.auth import get_user_model @@ -51,6 +52,7 @@ from phonenumber_field.modelfields import PhoneNumberField from polymorphic.models import PolymorphicModel from aleksis.core.data_checks import BrokenDashboardWidgetDataCheck, DataCheck, DataCheckRegistry +from .feeds import PersonalICalFeedBase from .managers import ( CurrentSiteManagerWithoutMigrations, @@ -1351,3 +1353,35 @@ class OAuthRefreshToken(AbstractRefreshToken): """Placeholder for customising the RefreshToken model.""" pass + + +class PersonalICalUrl(models.Model): + """Calendar URL for a person""" + + person = models.ForeignKey( + "Person", + on_delete=models.CASCADE, + related_name="calendar_urls", + verbose_name=_("Person"), + ) + uuid = models.UUIDField(default=uuid.uuid4, editable=False, verbose_name=_("UUID"), unique=True) + name = models.CharField(max_length=255, verbose_name=_("Name")) + ical_feed = models.CharField( + max_length=255, + verbose_name=_("Selected ICal feed"), + choices=PersonalICalFeedBase.subclass_choices, + ) + + @property + def ical_feed_object(self): + return PersonalICalFeedBase.subclasses_dict.get(self.ical_feed) + + class Meta: + verbose_name = _("Personal Calendar URL") + verbose_name_plural = _("Personal Calendar URLs") + + def __str__(self): + return self.name + + def get_absolute_url(self): + return reverse("ical_feed", kwargs={"slug": self.uuid}) -- GitLab