From e1bf8b31fc215a4fc52e4eb7aa7ef317dcb556b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com>
Date: Fri, 14 Jan 2022 15:29:42 +0100
Subject: [PATCH] shared: Remove outdated shared Person model

---
 .../migrations/0031_auto_20220114_1527.py     | 43 +++++++++++
 district/models.py                            | 44 +++++------
 region/migrations/0008_auto_20220114_1527.py  | 43 +++++++++++
 region/models.py                              | 44 +++++------
 shared/migrations/0002_delete_person.py       | 18 +++++
 shared/models.py                              | 75 -------------------
 .../shared/person_badge_snippet.html          | 18 ++---
 .../shared/person_badge_wide_snippet.html     | 16 ++--
 shared/wagtail_hooks.py                       | 17 -----
 9 files changed, 159 insertions(+), 159 deletions(-)
 create mode 100644 district/migrations/0031_auto_20220114_1527.py
 create mode 100644 region/migrations/0008_auto_20220114_1527.py
 create mode 100644 shared/migrations/0002_delete_person.py
 delete mode 100644 shared/wagtail_hooks.py

diff --git a/district/migrations/0031_auto_20220114_1527.py b/district/migrations/0031_auto_20220114_1527.py
new file mode 100644
index 00000000..afdfee7a
--- /dev/null
+++ b/district/migrations/0031_auto_20220114_1527.py
@@ -0,0 +1,43 @@
+# Generated by Django 3.2.8 on 2022-01-14 14:27
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("wagtailimages", "0023_add_choose_permissions"),
+        ("district", "0030_alter_districtelectionpage_content"),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name="districtpersonpage",
+            name="person",
+        ),
+        migrations.AlterField(
+            model_name="districtpersonpage",
+            name="background_photo",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailimages.image",
+                verbose_name="obrázek do záhlaví",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="districtpersonpage",
+            name="profile_photo",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailimages.image",
+                verbose_name="profilová fotka",
+            ),
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index 2b38540d..456d3d71 100644
--- a/district/models.py
+++ b/district/models.py
@@ -20,7 +20,7 @@ from wagtail.images.edit_handlers import ImageChooserPanel
 from wagtailmetadata.models import MetadataPageMixin
 
 from calendar_utils.models import CalendarMixin
-from shared.models import ArticleMixin, Person, SubpageMixin
+from shared.models import ArticleMixin, SubpageMixin
 from uniweb.constants import RICH_TEXT_FEATURES
 
 from .blocks import (
@@ -430,6 +430,7 @@ class DistrictPersonPage(SubpageMixin, MetadataPageMixin, Page):
         blank=True,
         null=True,
         related_name="+",
+        verbose_name="obrázek do záhlaví",
     )
     profile_photo = models.ForeignKey(
         "wagtailimages.Image",
@@ -437,11 +438,10 @@ class DistrictPersonPage(SubpageMixin, MetadataPageMixin, Page):
         blank=True,
         null=True,
         related_name="+",
+        verbose_name="profilová fotka",
     )
-    person = models.ForeignKey(Person, on_delete=models.PROTECT, null=True)
     text = RichTextField("text", blank=True, features=RICH_TEXT_FEATURES)
 
-    # Fallbackové hodnoty pro data získávana z API (viz Person model)
     email = models.EmailField("Email", blank=True, null=True)
     phone = models.CharField("Telefon", max_length=16, blank=True, null=True)
     city = models.CharField("Město/obec", max_length=64, blank=True, null=True)
@@ -457,16 +457,22 @@ class DistrictPersonPage(SubpageMixin, MetadataPageMixin, Page):
     ### PANELS
 
     content_panels = Page.content_panels + [
-        FieldPanel("person"),
-        FieldPanel("job"),
-        FieldPanel("job_function"),
-        ImageChooserPanel("background_photo"),
-        ImageChooserPanel("profile_photo"),
+        MultiFieldPanel(
+            [
+                FieldPanel("job"),
+                FieldPanel("job_function"),
+            ],
+            "Základní údaje",
+        ),
+        MultiFieldPanel(
+            [
+                ImageChooserPanel("profile_photo"),
+                ImageChooserPanel("background_photo"),
+            ],
+            "Fotky",
+        ),
         FieldPanel("perex"),
         FieldPanel("text"),
-    ]
-
-    settings_panels = [
         MultiFieldPanel(
             [
                 FieldPanel("email"),
@@ -489,6 +495,8 @@ class DistrictPersonPage(SubpageMixin, MetadataPageMixin, Page):
         ),
     ]
 
+    settings_panels = []
+
     ### RELATIONS
 
     parent_page_types = ["district.DistrictPeoplePage"]
@@ -520,20 +528,6 @@ class DistrictPersonPage(SubpageMixin, MetadataPageMixin, Page):
         context["random_people"] = context["random_people"][:3]
         return context
 
-    def get_email(self):
-        return self.person.email if self.person.email else self.email
-
-    def get_phone(self):
-        return self.person.phone if self.person.phone else self.phone
-
-    @property
-    def pageperex(self):
-        """
-        Vraci perex Pirata nejblizzsi lokalnimu kontextu. Zamerne jiny nazev, aby
-        v template bylo na vyber z x.perex, x.person.perex a x.pageperex
-        """
-        return self.perex or self.person.perex
-
 
 class DistrictPeoplePage(SubpageMixin, MetadataPageMixin, Page):
     ### FIELDS
diff --git a/region/migrations/0008_auto_20220114_1527.py b/region/migrations/0008_auto_20220114_1527.py
new file mode 100644
index 00000000..40661f63
--- /dev/null
+++ b/region/migrations/0008_auto_20220114_1527.py
@@ -0,0 +1,43 @@
+# Generated by Django 3.2.8 on 2022-01-14 14:27
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("wagtailimages", "0023_add_choose_permissions"),
+        ("region", "0007_alter_regionelectionpage_content"),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name="regionpersonpage",
+            name="person",
+        ),
+        migrations.AlterField(
+            model_name="regionpersonpage",
+            name="background_photo",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailimages.image",
+                verbose_name="obrázek do záhlaví",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="regionpersonpage",
+            name="profile_photo",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailimages.image",
+                verbose_name="profilová fotka",
+            ),
+        ),
+    ]
diff --git a/region/models.py b/region/models.py
index d470839a..4a4c23ab 100644
--- a/region/models.py
+++ b/region/models.py
@@ -20,7 +20,7 @@ from wagtail.images.edit_handlers import ImageChooserPanel
 from wagtailmetadata.models import MetadataPageMixin
 
 from calendar_utils.models import CalendarMixin
-from shared.models import ArticleMixin, Person, SubpageMixin
+from shared.models import ArticleMixin, SubpageMixin
 from uniweb.constants import RICH_TEXT_FEATURES
 
 from .blocks import (
@@ -426,6 +426,7 @@ class RegionPersonPage(SubpageMixin, MetadataPageMixin, Page):
         blank=True,
         null=True,
         related_name="+",
+        verbose_name="obrázek do záhlaví",
     )
     profile_photo = models.ForeignKey(
         "wagtailimages.Image",
@@ -433,11 +434,10 @@ class RegionPersonPage(SubpageMixin, MetadataPageMixin, Page):
         blank=True,
         null=True,
         related_name="+",
+        verbose_name="profilová fotka",
     )
-    person = models.ForeignKey(Person, on_delete=models.PROTECT, null=True)
     text = RichTextField("text", blank=True, features=RICH_TEXT_FEATURES)
 
-    # Fallbackové hodnoty pro data získávana z API (viz Person model)
     email = models.EmailField("Email", blank=True, null=True)
     phone = models.CharField("Telefon", max_length=16, blank=True, null=True)
     city = models.CharField("Město/obec", max_length=64, blank=True, null=True)
@@ -453,16 +453,22 @@ class RegionPersonPage(SubpageMixin, MetadataPageMixin, Page):
     ### PANELS
 
     content_panels = Page.content_panels + [
-        FieldPanel("person"),
-        FieldPanel("job"),
-        FieldPanel("job_function"),
-        ImageChooserPanel("background_photo"),
-        ImageChooserPanel("profile_photo"),
+        MultiFieldPanel(
+            [
+                FieldPanel("job"),
+                FieldPanel("job_function"),
+            ],
+            "Základní údaje",
+        ),
+        MultiFieldPanel(
+            [
+                ImageChooserPanel("profile_photo"),
+                ImageChooserPanel("background_photo"),
+            ],
+            "Fotky",
+        ),
         FieldPanel("perex"),
         FieldPanel("text"),
-    ]
-
-    settings_panels = [
         MultiFieldPanel(
             [
                 FieldPanel("email"),
@@ -485,6 +491,8 @@ class RegionPersonPage(SubpageMixin, MetadataPageMixin, Page):
         ),
     ]
 
+    settings_panels = []
+
     ### RELATIONS
 
     parent_page_types = ["region.RegionPeoplePage"]
@@ -516,20 +524,6 @@ class RegionPersonPage(SubpageMixin, MetadataPageMixin, Page):
         context["random_people"] = context["random_people"][:3]
         return context
 
-    def get_email(self):
-        return self.person.email if self.person.email else self.email
-
-    def get_phone(self):
-        return self.person.phone if self.person.phone else self.phone
-
-    @property
-    def pageperex(self):
-        """
-        Vraci perex Pirata nejblizzsi lokalnimu kontextu. Zamerne jiny nazev, aby
-        v template bylo na vyber z x.perex, x.person.perex a x.pageperex
-        """
-        return self.perex or self.person.perex
-
 
 class RegionPeoplePage(SubpageMixin, MetadataPageMixin, Page):
     ### FIELDS
diff --git a/shared/migrations/0002_delete_person.py b/shared/migrations/0002_delete_person.py
new file mode 100644
index 00000000..6f8a104a
--- /dev/null
+++ b/shared/migrations/0002_delete_person.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.8 on 2022-01-14 14:27
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("region", "0008_auto_20220114_1527"),
+        ("district", "0031_auto_20220114_1527"),
+        ("shared", "0001_initial"),
+    ]
+
+    operations = [
+        migrations.DeleteModel(
+            name="Person",
+        ),
+    ]
diff --git a/shared/models.py b/shared/models.py
index 3cdf86c2..7fec651d 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -82,78 +82,3 @@ class ArticleMixin(models.Model):
     def tag_filter_page(self):
         """Page used for filtering by tags in url like `?tag=foo`."""
         return self.get_parent()
-
-
-class Person(models.Model):
-    """Informace o Piratovi. Slouzi prevazne jako cache informaci o osobe pro
-    uziti v ramci Majaku. Snaha je zadavat tady minimum informaci o osobe a
-    zbytek vytahovat via API z jinych zdroju, neb nechceme dalsi databazi lidi.
-    """
-
-    # ve formatu iapi: https://iapi.pirati.cz/v1/user?username=john.doe
-    username = models.TextField("Uživatelské jméno osoby", blank=False)
-    profile_id = models.IntegerField(
-        "Číslo medailonku (0..2) z lide.pirati.cz",
-        blank=True,
-        default=0,
-        validators=[MinValueValidator(0), MaxValueValidator(2)],
-    )
-
-    perex = models.TextField("Defaultni perex osoby", blank=True)
-
-    panels = [
-        FieldPanel("username"),
-        FieldPanel("profile_id"),
-        FieldPanel("perex"),
-    ]
-
-    def _iapi(self):
-        """Vrati data o osobe z piratskeho IAPI jako json. Cached via django cache"""
-        key = f"profile_{self.username}"
-        profile = cache.get(key)
-        if profile is None:
-            profile = requests.get(
-                f"https://iapi.pirati.cz/v1/user?username={self.username}"
-            ).json()
-            cache.set(key, profile, 3600)
-        return profile
-
-    @property
-    def name(self):
-        return self._iapi().get("displayname")
-
-    @property
-    def email(self):
-        try:
-            return self._iapi()["profiles"][self.profile_id]["email"]
-        except (IndexError, KeyError):
-            return None
-
-    @property
-    def phone(self):
-        try:
-            return self._iapi()["profiles"][self.profile_id]["phone"]
-        except (IndexError, KeyError):
-            return None
-
-    @property
-    def longtext(self):  # medailonek
-        return ""  # TODO
-
-    @property
-    def portrait(self):  # profilova fotka
-        try:
-            return self._iapi()["profiles"][self.profile_id]["photo"]
-        except (IndexError, KeyError):
-            return None
-
-    @property
-    def facebook(self):
-        return None  # TODO
-
-    def __str__(self):
-        return self.username
-
-    class Meta:
-        verbose_name_plural = "Piráti"
-        verbose_name = "Pirát"
diff --git a/shared/templates/shared/person_badge_snippet.html b/shared/templates/shared/person_badge_snippet.html
index 8cfff9b3..65f97ab5 100644
--- a/shared/templates/shared/person_badge_snippet.html
+++ b/shared/templates/shared/person_badge_snippet.html
@@ -3,13 +3,13 @@
 <div class="badge badge--condensed">
   <a href="{{ person_page.url }}" class="avatar badge__avatar avatar--sm">
     {% image person_page.profile_photo max-80x80 as profile_img %}
-    <img src="{% firstof person_page.person.portrait profile_img.url %}" alt="{{ person_page.person.name }}"/>
+    <img src="{{ profile_img.url }}" alt="{{ person_page.title }}"/>
   </a>
 
   <div class="badge__body">
     <span class="head-heavy-2xs badge__title">
-      <a href="{{ person_page.url }}" title="{{ person_page.person.name }}" class="content-block--nostyle">
-        {{ person_page.person.name }}
+      <a href="{{ person_page.url }}" title="{{ person_page.title }}" class="content-block--nostyle">
+        {{ person_page.title }}
       </a>
     </span>
     <span class="badge__occupation">
@@ -20,17 +20,17 @@
       {% endif %}
     </span>
     {% if not skipcontacts %}
-      {% if person_page.get_phone %}
-        <a href="tel:{{ person_page.get_phone }}"
+      {% if person_page.phone %}
+        <a href="tel:{{ person_page.phone }}"
            class="contact-line icon-link content-block--nostyle contact-line--responsive badge__link">
           <i class="ico--phone"></i>
-          <span>{{ person_page.get_phone }}</span>
+          <span>{{ person_page.phone }}</span>
         </a>
       {% endif %}
-      {% if person_page.get_email %}
-        <a href="mailto:{{ person_page.get_email }}"
+      {% if person_page.email %}
+        <a href="mailto:{{ person_page.email }}"
            class="contact-line icon-link content-block--nostyle contact-line--responsive badge__link">
-          <i class="ico--envelope"></i><span>{{ person_page.get_email }}</span>
+          <i class="ico--envelope"></i><span>{{ person_page.email }}</span>
         </a>
       {% endif %}
     {% endif %}
diff --git a/shared/templates/shared/person_badge_wide_snippet.html b/shared/templates/shared/person_badge_wide_snippet.html
index 3853c2e7..02e38803 100644
--- a/shared/templates/shared/person_badge_wide_snippet.html
+++ b/shared/templates/shared/person_badge_wide_snippet.html
@@ -3,12 +3,12 @@
 <div class="badge w-full">
   <div class="avatar avatar--md badge__avatar">
     {% image person_page.profile_photo max-100x100 as profile_img %}
-    <img src="{% firstof person_page.person.portrait profile_img.url %}" alt="{{ person_page.person.name }}"/>
+    <img src="{{ profile_img.url }}" alt="{{ person_page.title }}"/>
   </div>
 
   <div class="badge__body">
     <a href="{{ person_page.url }}" class="head-heavy-xs">
-      {{ person_page.person.name }}
+      {{ person_page.title }}
     </a>
     <p class="badge__occupation">
       {% if title %}
@@ -17,16 +17,16 @@
         {{ person_page.job_function|default_if_none:"" }}
       {% endif %}
     </p>
-    {% if person_page.get_phone %}
-      <a href="tel:{{ person_page.get_phone }}" class="contact-line contact-line--responsive icon-link badge__link">
+    {% if person_page.phone %}
+      <a href="tel:{{ person_page.phone }}" class="contact-line contact-line--responsive icon-link badge__link">
         <i class="ico--phone"></i>
-        <span>{{ person_page.get_phone }}</span>
+        <span>{{ person_page.phone }}</span>
       </a>
     {% endif %}
-    {% if person_page.get_email %}
-      <a href="mailto:{{ person_page.get_email }}" class="contact-line contact-line--responsive icon-link badge__link">
+    {% if person_page.email %}
+      <a href="mailto:{{ person_page.email }}" class="contact-line contact-line--responsive icon-link badge__link">
         <i class="ico--envelope"></i>
-        <span>{{ person_page.get_email }}</span>
+        <span>{{ person_page.email }}</span>
       </a>
     {% endif %}
   </div>
diff --git a/shared/wagtail_hooks.py b/shared/wagtail_hooks.py
deleted file mode 100644
index a286602d..00000000
--- a/shared/wagtail_hooks.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
-
-from .models import Person
-
-
-class PersonAdmin(ModelAdmin):
-    model = Person
-    menu_label = "Pirati"
-    menu_icon = "group"
-    menu_order = 200
-    add_to_settings_menu = False
-    exclude_from_explorer = False
-    list_display = ("username",)
-    search_fields = ("username",)
-
-
-modeladmin_register(PersonAdmin)
-- 
GitLab