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