diff --git a/district/blocks.py b/district/blocks.py index ef39822efd9cd3fa6febff6343d3dfb24a2a96b7..423bf15bc5f18bb660baf03ef8d36641a7acd565 100644 --- a/district/blocks.py +++ b/district/blocks.py @@ -137,18 +137,6 @@ class CenterContactBlock(StructBlock): label = "Kontakt" -class ContactItemBlock(StructBlock): - name = CharBlock(label="Role") - person = PageChooserBlock( - label="Osoba", - page_type=["district.DistrictPersonPage"], - ) - - class Meta: - icon = "mail" - label = "Kontakt" - - class HomepageHeaderBlock(StructBlock): title = CharBlock(label="Titulek", required=False, help_text="Nap") image = ImageChooserBlock() diff --git a/district/migrations/0083_alter_districtcontactpage_contact_people.py b/district/migrations/0083_alter_districtcontactpage_contact_people.py new file mode 100644 index 0000000000000000000000000000000000000000..aeb74ce853fbf550d3d8ec86d141e870f792dab9 --- /dev/null +++ b/district/migrations/0083_alter_districtcontactpage_contact_people.py @@ -0,0 +1,96 @@ +# Generated by Django 4.0.4 on 2022-06-02 14:33 + +import wagtail.core.blocks +import wagtail.core.fields +from django.db import migrations +from wagtail.core.blocks import StreamValue + + +def name_to_position(block): + block["value"]["position"] = block["value"]["name"] + del block["value"]["name"] + return block + + +def position_to_name(block): + block["value"]["name"] = block["value"]["position"] + del block["value"]["position"] + + return block + + +def get_content(page, mapper): + stream_data = [] + mapped = False + + for block in page.contact_people.raw_data: + if block["type"] == "item": + stream_data.append(mapper(block)) + mapped = True + + else: + stream_data.append(block) + + return stream_data, mapped + + +def migrate(apps, mapper): + DistrictContactPage = apps.get_model("district", "DistrictContactPage") + + for page in DistrictContactPage.objects.all(): + contact_people, mapped = get_content(page, mapper) + + if mapped: + page.contact_people = StreamValue( + page.contact_people, contact_people, is_lazy=True + ) + page.save() + + +def forwards(apps, schema_editor): + migrate(apps, name_to_position) + + +def backwards(apps, schema_editor): + migrate(apps, position_to_name) + + +class Migration(migrations.Migration): + + dependencies = [ + ("district", "0082_alter_districtcenterpage_sidebar_content_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="districtcontactpage", + name="contact_people", + field=wagtail.core.fields.StreamField( + [ + ( + "item", + wagtail.core.blocks.StructBlock( + [ + ( + "position", + wagtail.core.blocks.CharBlock( + label="Název pozice", required=False + ), + ), + ( + "person", + wagtail.core.blocks.PageChooserBlock( + label="Osoba", + page_type=["district.DistrictPersonPage"], + ), + ), + ] + ), + ) + ], + blank=True, + verbose_name="Kontakty", + ), + ), + migrations.RunPython(forwards, backwards), + ] diff --git a/district/models.py b/district/models.py index 10420258e50e6ea0a964ce11d7b18e10bc0faadd..b5a0ce91e94981045e72d90c7871e731c292e7d5 100644 --- a/district/models.py +++ b/district/models.py @@ -450,7 +450,7 @@ class DistrictContactPage( ### FIELDS contact_people = StreamField( - [("item", blocks.ContactItemBlock())], + [("item", blocks.PersonCustomPositionBlock())], verbose_name="Kontakty", blank=True, ) diff --git a/district/templates/district/district_contact_page.html b/district/templates/district/district_contact_page.html index 63adf19e40f529219cb72f5eea8ac67e1505e7c0..12a2763454afaa65becd95cb2deb5ee55274423b 100644 --- a/district/templates/district/district_contact_page.html +++ b/district/templates/district/district_contact_page.html @@ -17,12 +17,18 @@ {% for item in page.contact_people %} <div> - <h2 class="head-heavy-sm mb-2 lg:mb-4"> - {{ item.value.name }} - </h2> + {% if item.value.position %} + <h2 class="head-heavy-sm mb-2 lg:mb-4"> + {{ item.value.position }} + </h2> + {% elif item.value.person.job_function %} + <h2 class="head-heavy-sm mb-2 lg:mb-4"> + {{ item.value.person.job_function }} + </h2> + {% endif %} <div class="card elevation-3"> <div class="card__body"> - {% include "shared/person_badge_wide_snippet.html" with person_page=item.value.person %} + {% include "shared/person_badge_wide_snippet.html" with person_page=item.value.person title=item.value.position %} </div> </div> </div>