diff --git a/main/migrations/0012_remove_mainpersonpage_facebook_and_more.py b/main/migrations/0012_remove_mainpersonpage_facebook_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..5a248c48a5a3bf337958157c7993a6d5b281507f --- /dev/null +++ b/main/migrations/0012_remove_mainpersonpage_facebook_and_more.py @@ -0,0 +1,52 @@ +# Generated by Django 4.0.7 on 2022-08-24 10:43 + +from django.db import migrations, models +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0011_alter_mainarticlepage_content_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='mainpersonpage', + name='facebook', + ), + migrations.RemoveField( + model_name='mainpersonpage', + name='instagram', + ), + migrations.RemoveField( + model_name='mainpersonpage', + name='twitter', + ), + migrations.AddField( + model_name='mainpersonpage', + name='main_image', + field=models.ImageField(blank=True, null=True, upload_to='', verbose_name='Hlavní obrázek'), + ), + migrations.AddField( + model_name='mainpersonpage', + name='people', + field=wagtail.fields.StreamField([('people_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('slug', wagtail.blocks.CharBlock(help_text='Není třeba vyplňovat, bude automaticky vyplněno', label='Slug skupiny', required=False)), ('person_list', wagtail.blocks.ListBlock(wagtail.blocks.PageChooserBlock(label='Detail osoby', page_type=['main.MainPersonPage']), label='Skupina osob'))], label='Seznam osob'))], blank=True, use_json_field=None, verbose_name='Lidé'), + ), + migrations.AddField( + model_name='mainpersonpage', + name='profile_image', + field=models.ImageField(blank=True, null=True, upload_to='', verbose_name='Profilový obrázek'), + ), + migrations.AddField( + model_name='mainpersonpage', + name='social_links', + field=wagtail.fields.StreamField([('social_links', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(label='Titulkek odkazu (text, který se zobrazí místo dlouhého odkazu)')), ('link', wagtail.blocks.URLBlock(label='Odkaz')), ('icon', wagtail.blocks.CharBlock(label='Ikona'))]))], blank=True, use_json_field=None, verbose_name='Odkazy na sociální sítě'), + ), + migrations.AlterField( + model_name='mainpeoplepage', + name='people', + field=wagtail.fields.StreamField([('people_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('slug', wagtail.blocks.CharBlock(help_text='Není třeba vyplňovat, bude automaticky vyplněno', label='Slug skupiny', required=False)), ('person_list', wagtail.blocks.ListBlock(wagtail.blocks.PageChooserBlock(label='Detail osoby', page_type=['main.MainPersonPage']), label='Skupina osob'))], label='Seznam osob'))], blank=True, use_json_field=None, verbose_name='Lidé'), + ), + ] diff --git a/main/models.py b/main/models.py index 74f6befa6f956b67a5a1630e40b1baff62022425..00dfbfe6e820a80d6c674ad4d9aa6dac8b8db7a7 100644 --- a/main/models.py +++ b/main/models.py @@ -415,6 +415,8 @@ class MainPeoplePage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): ### FIELDS + main_image = models.ImageField("Hlavní obrázek", blank=True, null=True) + profile_image = models.ImageField("Profilový obrázek", blank=True, null=True) before_name = models.CharField( "Tituly před jménem", max_length=16, blank=True, null=True ) @@ -434,13 +436,23 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, max_length=32, ) + social_links = StreamField( + [ + ("social_links", blocks.SocialLinkBlock()), + ], + verbose_name="Odkazy na sociální sítě", + blank=True, + ) + + people = StreamField( + [("people_group", blocks.PeopleGroupBlock(label="Seznam osob"))], + verbose_name="Lidé", + blank=True, + ) + email = models.CharField("E-mail", max_length=128, blank=True, null=True) phone = models.CharField("Telefonní kontakt", max_length=16, blank=True, null=True) - facebook = models.URLField("Odkaz na Facebook", blank=True, null=True) - twitter = models.URLField("Odkaz na Twitter", blank=True, null=True) - instagram = models.URLField("Odkaz na Instagram", blank=True, null=True) - settings_panels = [] ### RELATIONS @@ -450,6 +462,8 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, ### PANELS content_panels = Page.content_panels + [ + FieldPanel("main_image"), + FieldPanel("profile_image"), FieldPanel("before_name"), FieldPanel("after_name"), FieldPanel("position"), @@ -458,9 +472,8 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, FieldPanel("text"), FieldPanel("email"), FieldPanel("phone"), - FieldPanel("facebook"), - FieldPanel("twitter"), - FieldPanel("instagram"), + FieldPanel("social_links"), + FieldPanel("people"), ] def get_context(self, request): diff --git a/main/templates/main/main_person_page.html b/main/templates/main/main_person_page.html index 5775102e789518974781a840ad4f94604ef6fb5f..9119c3c96b00f904a073a1ffcc956e047a87fb58 100644 --- a/main/templates/main/main_person_page.html +++ b/main/templates/main/main_person_page.html @@ -2,9 +2,157 @@ {% load static wagtailcore_tags wagtailimages_tags shared_filters %} {% block content %} -<main role="main"> + <main role="main"> + {# {{> organisms-header }}#} + {##} + {# {{> molecules-photo_header }}#} - {% include 'main/includes/newsletter_section.html' %} -</main> + + <div class=""> + <section class="grid-container person-grid-container"> + <div class="grid-content leading-6"> + <article class="mb-4 xl:mb-24 xl:mr-2"> + <p class="font-alt mb-5"> + {{ page.text|richtext }} + </p> + </article> + </div> + <div class="grid-right-side mb-8 xl:mb-0"> + <div class="bg-grey-100 mb-1 px-7 py-9"> + <div class="flex mb-2"> + <i class="ico--envelope mr-2"></i> + <a href="mailto:{{ page.email }}" class="text-turquoise-500 underline"> + {{ page.email }} + </a> + </div> + <div class="flex mb-2"> + <i class="ico--phone mr-2"></i> + <a href="tel:+{{ page.phone }}"> + {{ page.phone }} + </a> + </div> + </div> + <div class="bg-grey-100 px-7 py-9"> + {% if page.facebook %} + <div class="flex mb-2"> + <i class="ico--facebook mr-2"></i> + <a href="{{ page.facebook }}"> + Facebook + </a> + </div> + {% endif %} + {% if page.twitter %} + <div class="flex mb-2"> + <i class="ico--twitter mr-2"></i> + <a href="{{ page.twitter }}"> + Twitter + </a> + </div> + {% endif %} + {% if page.instagram %} + <div class="flex mb-2"> + <i class="ico--instagram mr-2"></i> + <a href="{{ page.instagram }}"> + Instagram + </a> + </div> + {% endif %} + </div> + </div> + </section> + </div> + {% if not tweet_list.empty %} + <section class="grid-container no-max"> + <div class="grid-content-with-right-side"> + <h2 class="head-4xl text-center xl:text-left"> + Aktuálně na Twitteru + </h2> + <div class="mb-8 flex flex-wrap"> + {% for tweet in page.tweet_list %} + <div class="md:w-1/3 lg:w-1/4"> + <div class="p-4 flex flex-col items-center text-center border border-grey-100"> + <img class="rounded-full shadow-sm w-12 mb-2" src="https://randomuser.me/api/portraits/women/56.jpg" + alt="user image"/> + <h5 class="font-alt mb-2">{{ tweet.author_name }}</h5> + <small class="mb-4 text-turquoise-400">@{{ tweet.author_username }}</small> + <p class="text-base leading-6 mb-2">{{ tweet.text }}</p> + <a href="" class="hover:no-underline"> + <i class="ico--twitter text-turquoise-400 text-xl"></i> + </a> + </div> + </div> + {% endfor %} + </div> + </div> + </section> + {% endif %} + {% if not article_page_list.empty %} + <section class="grid-container mb-4 justify-start xl:mb-14"> + <div class="grid-content"> + <div class="leading-6"> + <h2 class="head-4xl"> + Články + </h2> + {% for article_preview in article_page_list %} + <div class="flex flex-col justify-between items-start mb-9"> + <div class="flex font-bold mb-4 text-xs text-white uppercase"> + <span class="bg-green-400 mr-1 px-1">{{ article_preview.date }}</span> + {% for tag in article_preview.tags.all %} + <span class="bg-violet-400 mr-1 px-1">{{ tag }}</span> + {% endfor %} + </div> + <h4 class="head-3xl mb-4"> + {{ article_preview.title }} + </h4> + <p class="mb-6"> + {{ article_preview.perex }} + </p> + {% include 'main/includes/button_animated.html' with btn_link=article_preview.url btn_text="Číst dále" %} + </div> + {% endfor %} + </div> + </div> + </section> + {% endif %} + {% for people_group in page.people %} + <section class="grid-container person-grid-container mb-4 justify-start xl:mb-14"> + <div class="grid-content-with-right-side"> + <h2 class="head-4xl text-left"> + {{ people_group.value.title }} + </h2> + {% for person in people_group %} + <div class="flex flex-wrap"> + <div class="flex mb-16 person-box-medium"> + <div class="shrink-0 mr-4"> + {% image people_group.value.profile_image max-300x300 as profile_image %} + <img + class="rounded-full shadow-sm w-20 mb-2 xl:w-44" + src="{{ profile_image.url }}" + alt=" {{ people_group.value.title }}" + > + </div> + <div class="flex flex-col justify-between py-4"> + <div class="flex flex-col"> + <h4 class="head-3xl"> + {{ people_group.value.title }} + </h4> + <span + class="text-sm xl:text-base leading-6 mb-6">{{ people_group.value.position|default_if_none:"" }}</span> + </div> + <div> + {% include 'main/includes/button_animated.html' with btn_link=people_group.value.url btn_text="Detail" %} + </div> + </div> + </div> + {% endfor %} + </div> + </div> + </section> + {% endfor %} + </div> + + {% include 'main/includes/newsletter_section.html' %} + + </main> {% endblock content %}