From c7b6d0b0cd299402264ebc469d22924e00bfe16a Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Wed, 20 Oct 2021 18:52:35 +0200 Subject: [PATCH 1/3] add url and color to Resource --- .../studies/migrations/0037_resource_url.py | 24 +++++++++++++++++++ castellum/studies/models.py | 2 ++ 2 files changed, 26 insertions(+) create mode 100644 castellum/studies/migrations/0037_resource_url.py diff --git a/castellum/studies/migrations/0037_resource_url.py b/castellum/studies/migrations/0037_resource_url.py new file mode 100644 index 000000000..70e63866c --- /dev/null +++ b/castellum/studies/migrations/0037_resource_url.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.8 on 2021-10-27 08:43 + +import castellum.utils.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('studies', '0036_resource_managers'), + ] + + operations = [ + migrations.AddField( + model_name='resource', + name='color', + field=castellum.utils.fields.ColorField(default='#000000', max_length=7, verbose_name='Color'), + ), + migrations.AddField( + model_name='resource', + name='url', + field=models.URLField(blank=True, verbose_name='URL'), + ), + ] diff --git a/castellum/studies/models.py b/castellum/studies/models.py index 6ca990134..9af79f1a3 100644 --- a/castellum/studies/models.py +++ b/castellum/studies/models.py @@ -380,6 +380,8 @@ class StudyMembership(models.Model): class Resource(models.Model): name = models.CharField(_('Name'), max_length=128) managers = models.ManyToManyField(User, verbose_name=_('Managers'), blank=True) + url = models.URLField(_('URL'), blank=True) + color = ColorField(_('Color'), default='#000000') def __str__(self): return self.name -- GitLab From 4b5384e058829466823b859c0a0ae91b7f27b98b Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Wed, 20 Oct 2021 18:53:04 +0200 Subject: [PATCH 2/3] display external events from Resource instead of StudyTypeEventFeed --- castellum/recruitment/views.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/castellum/recruitment/views.py b/castellum/recruitment/views.py index 93fc45fb2..e42c11784 100644 --- a/castellum/recruitment/views.py +++ b/castellum/recruitment/views.py @@ -55,9 +55,9 @@ from castellum.castellum_auth.mixins import PermissionRequiredMixin from castellum.contacts.mixins import BaseContactUpdateView from castellum.pseudonyms.helpers import get_subject from castellum.studies.mixins import StudyMixin +from castellum.studies.models import Resource from castellum.studies.models import Study from castellum.studies.models import StudySession -from castellum.studies.models import StudyTypeEventFeed from castellum.subjects.mixins import BaseAdditionalInfoUpdateView from castellum.subjects.mixins import BaseDataProtectionUpdateView from castellum.subjects.mixins import SubjectMixin @@ -594,21 +594,21 @@ class CalendarView(StudyMixin, PermissionRequiredMixin, BaseCalendarView): return super().get_appointments().filter(session__study=self.object) def get_external_events(self): - for feed in StudyTypeEventFeed.objects.filter(study_type__studysession__study=self.object): + for resource in Resource.objects.filter(studysession__study=self.study).exclude(url=''): try: - text = cached_request(feed.url, timeout=60) + text = cached_request(resource.url, timeout=60) calendar = Calendar.from_ical(text) for event in calendar.walk('VEVENT'): yield { - 'title': '[{}] {}'.format(feed.study_type, event.get('SUMMARY', '')), + 'title': '[{}] {}'.format(resource, event.get('SUMMARY', '')), 'start': event.get('DTSTART').dt, 'end': event.get('DTEND').dt, - 'backgroundColor': feed.color, - 'borderColor': feed.color, - 'textColor': contrast_color(feed.color), + 'backgroundColor': resource.color, + 'borderColor': resource.color, + 'textColor': contrast_color(resource.color), } except Exception as e: - logger.error('Fetching StudyTypeEventFeed {} failed: {}'.format(feed.pk, e)) + logger.error('Fetching events for resource {} failed: {}'.format(resource.pk, e)) def get_events(self): return super().get_events() + list(self.get_external_events()) -- GitLab From f8aa184ebd7062ef4f38878e45829148cfb5c091 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Wed, 20 Oct 2021 18:53:46 +0200 Subject: [PATCH 3/3] rm StudyTypeEventFeed --- castellum/studies/admin.py | 1 - .../migrations/0038_delete_studytypeeventfeed.py | 16 ++++++++++++++++ castellum/studies/models.py | 9 --------- 3 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 castellum/studies/migrations/0038_delete_studytypeeventfeed.py diff --git a/castellum/studies/admin.py b/castellum/studies/admin.py index 27f4cd81a..3e521abfd 100644 --- a/castellum/studies/admin.py +++ b/castellum/studies/admin.py @@ -56,4 +56,3 @@ admin.site.register(models.Study, StudyAdmin) admin.site.register(models.StudyGroup) admin.site.register(models.StudyMembership) admin.site.register(models.StudyType, TranslatableAdmin) -admin.site.register(models.StudyTypeEventFeed) diff --git a/castellum/studies/migrations/0038_delete_studytypeeventfeed.py b/castellum/studies/migrations/0038_delete_studytypeeventfeed.py new file mode 100644 index 000000000..2468b6543 --- /dev/null +++ b/castellum/studies/migrations/0038_delete_studytypeeventfeed.py @@ -0,0 +1,16 @@ +# Generated by Django 3.2.8 on 2021-10-27 08:44 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('studies', '0037_resource_url'), + ] + + operations = [ + migrations.DeleteModel( + name='StudyTypeEventFeed', + ), + ] diff --git a/castellum/studies/models.py b/castellum/studies/models.py index 9af79f1a3..73e5b3b7f 100644 --- a/castellum/studies/models.py +++ b/castellum/studies/models.py @@ -66,15 +66,6 @@ class StudyType(TranslatableModel): return self.label -class StudyTypeEventFeed(models.Model): - study_type = models.ForeignKey(StudyType, on_delete=models.CASCADE) - url = models.URLField(_('URL')) - color = ColorField(_('Color')) - - def __str__(self): - return '{} {}'.format(self.study_type, self.url) - - class Study(models.Model): EDIT = 0 EXECUTION = 1 -- GitLab