diff --git a/district/forms.py b/district/forms.py index 830224afde0cf46166c6a52a9da173d2bb13c527..8ec53632a8f20d1e3c7837f3345c94cdf7c6dedb 100644 --- a/district/forms.py +++ b/district/forms.py @@ -2,6 +2,8 @@ import os import tempfile from shared.forms import JekyllImportForm as SharedJekyllImportForm +from wagtail.admin.forms import WagtailAdminPageForm +from wagtail.models.media import Collection from .tasks import import_jekyll_articles from .tasks import import_people_from_group @@ -25,4 +27,24 @@ class JekyllImportForm(SharedJekyllImportForm): url=self.cleaned_data["jekyll_repo_url"], dry_run=self.cleaned_data["dry_run"], use_git=True, - ) \ No newline at end of file + ) + + +class DistrictPeoplePageForm(WagtailAdminPageForm): + def save(self, *args, **kwargs): + # If anything inside the content field has changed, + # sync Octopus profiles just in case. + if "content" in self.changed_data: + collection_id = self.instance.root_page.image_collection_id + + if collection_id is None: + collection_id = Collection.objects.first().id + + for shortcut in self.instance.get_syncable_octopus_groups(): + import_people_from_group.delay( + self.instance.id, + collection_id, + shortcut, + ) + + return super().save(*args, **kwargs) \ No newline at end of file diff --git a/district/models.py b/district/models.py index c87bab1d0a2fa6af3fa10a21944bf62f46534265..21e60d2884a1c76e2b6bd901e7a7815b530d6953 100644 --- a/district/models.py +++ b/district/models.py @@ -71,7 +71,7 @@ from shared.utils import ( ) from . import blocks -from .forms import JekyllImportForm +from .forms import JekyllImportForm, DistrictPeoplePageForm CONTENT_BLOCKS = DEFAULT_CONTENT_BLOCKS + [ ("chart", ChartBlock()), @@ -575,6 +575,8 @@ class DistrictPersonPage(MainPersonPageMixin): class DistrictPeoplePage(MainPeoplePageMixin): + base_form_class = DistrictPeoplePageForm + ### FIELDS content = StreamField( @@ -614,7 +616,8 @@ class DistrictPeoplePage(MainPeoplePageMixin): if block.block_type == "octopus_group": group_shortcuts.append(block.value["group_shortcut"]) - return group_shortcuts + # Don't duplicate groups needlessly + return list(set(group_shortcuts)) class DistrictCalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, Page): diff --git a/shared/people_import.py b/shared/people_import.py index 26894a590724dc8e07c6f00230af04915abaf6a7..8c0fc83f5df012dcc17d4351dac81e2dcb84d6f8 100644 --- a/shared/people_import.py +++ b/shared/people_import.py @@ -291,6 +291,14 @@ class PeopleGroupImporter: person_page = self.person_page_model.objects.filter(person=person_instance).descendant_of(self.people_parent_page).first() if person_page is None: + if not isinstance(person_instance.display_name, str): + logger.warning( + "Skipping page creation for user %s, they have no display name", + person_instance.username + ) + + continue + person_page = self.person_page_model( person=person_instance, is_automatically_created=True, diff --git a/shared/templatetags/people_filters.py b/shared/templatetags/people_filters.py index 2a172bbcd7cabe3a8c613eea00abbd3a9d1ce6e6..3d9e822a84dfa8d39ba158cc07abff2f378f2315 100644 --- a/shared/templatetags/people_filters.py +++ b/shared/templatetags/people_filters.py @@ -8,7 +8,7 @@ def is_first_people_type(content, forloop): first_people_type_position = None for position, item in enumerate(content): - if item.block_type in ("people_group", "team_group"): + if item.block_type in ("octopus_group", "people_group", "team_group"): if first_people_type_position is None: first_people_type_position = position break