diff --git a/home/migrations/0016_homepeoplepage_homepersonpage.py b/home/migrations/0016_homepeoplepage_homepersonpage.py new file mode 100644 index 0000000000000000000000000000000000000000..6bd66a90926a33612a89527878cfdc8bdb2c8e18 --- /dev/null +++ b/home/migrations/0016_homepeoplepage_homepersonpage.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2.4 on 2023-08-12 19:00 + +from django.db import migrations, models +import django.db.models.deletion +import wagtail.contrib.routable_page.models +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0083_workflowcontenttype'), + ('wagtailimages', '0025_alter_image_file_alter_rendition_file'), + ('home', '0015_alter_homepage_options'), + ] + + operations = [ + migrations.CreateModel( + name='HomePeoplePage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), + ('content', wagtail.fields.RichTextField(blank=True, null=True, verbose_name='Obsah')), + ], + options={ + 'verbose_name': 'Rozcestník uživatelů', + }, + bases=(wagtail.contrib.routable_page.models.RoutablePageMixin, 'wagtailcore.page'), + ), + migrations.CreateModel( + name='HomePersonPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), + ('name', models.CharField(max_length=64, verbose_name='Jméno')), + ('position', models.TextField(blank=True, null=True, verbose_name='Pracovní pozice')), + ('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='Emailová adresa')), + ('description', wagtail.fields.RichTextField(blank=True, null=True, verbose_name='Popis')), + ('image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Profilový obrázek')), + ], + options={ + 'abstract': False, + }, + bases=(wagtail.contrib.routable_page.models.RoutablePageMixin, 'wagtailcore.page'), + ), + ] diff --git a/home/migrations/0017_alter_homepeoplepage_options_and_more.py b/home/migrations/0017_alter_homepeoplepage_options_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..3aa1d0c99534947fa6c231e1c9b6333c2e7f0e8a --- /dev/null +++ b/home/migrations/0017_alter_homepeoplepage_options_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.4 on 2023-08-12 19:01 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0016_homepeoplepage_homepersonpage'), + ] + + operations = [ + migrations.AlterModelOptions( + name='homepeoplepage', + options={'verbose_name': 'Rozcestník osob'}, + ), + migrations.AlterModelOptions( + name='homepersonpage', + options={'verbose_name': 'Osoba'}, + ), + ] diff --git a/home/migrations/0018_remove_homepersonpage_name.py b/home/migrations/0018_remove_homepersonpage_name.py new file mode 100644 index 0000000000000000000000000000000000000000..9a1c6701c3eae3719cc50c8295ed2a3d3aee1aca --- /dev/null +++ b/home/migrations/0018_remove_homepersonpage_name.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.4 on 2023-08-12 19:01 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0017_alter_homepeoplepage_options_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='homepersonpage', + name='name', + ), + ] diff --git a/home/migrations/0019_alter_homepage_controller_and_more.py b/home/migrations/0019_alter_homepage_controller_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..c13331f77d51fa4389f8eda697f597158dcb1032 --- /dev/null +++ b/home/migrations/0019_alter_homepage_controller_and_more.py @@ -0,0 +1,40 @@ +# Generated by Django 4.2.4 on 2023-08-12 19:21 + +from django.db import migrations +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0018_remove_homepersonpage_name'), + ] + + operations = [ + migrations.AlterField( + model_name='homepage', + name='controller', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Kontrolor'), + ), + migrations.AlterField( + model_name='homepage', + name='council_members', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Správní rada'), + ), + migrations.AlterField( + model_name='homepage', + name='director', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Ředitel'), + ), + migrations.AlterField( + model_name='homepage', + name='employees', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Zaměstnanci'), + ), + migrations.AlterField( + model_name='homepage', + name='volunteers', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Dobrovolníci'), + ), + ] diff --git a/home/migrations/0020_homearticlepage_author_page_and_more.py b/home/migrations/0020_homearticlepage_author_page_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..bc9d6a820bc0365a39264ee69fe689a8429cfc32 --- /dev/null +++ b/home/migrations/0020_homearticlepage_author_page_and_more.py @@ -0,0 +1,71 @@ +# Generated by Django 4.2.4 on 2023-08-12 19:27 + +from django.db import migrations, models +import django.db.models.deletion +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0019_alter_homepage_controller_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='homearticlepage', + name='author_page', + field=models.ForeignKey(blank=True, help_text='Pokud je vybrána stránka, není nutno vyplňovat jméno autora níže.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='home.homepersonpage', verbose_name='Stránka autora'), + ), + migrations.AddField( + model_name='homedocumentpage', + name='author_page', + field=models.ForeignKey(blank=True, help_text='Pokud je vybrána stránka, není nutno vyplňovat jméno autora níže.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='home.homepersonpage', verbose_name='Stránka autora'), + ), + migrations.AddField( + model_name='homeeventpage', + name='author_page', + field=models.ForeignKey(blank=True, help_text='Pokud je vybrána stránka, není nutno vyplňovat jméno autora níže.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='home.homepersonpage', verbose_name='Stránka autora'), + ), + migrations.AlterField( + model_name='homearticlepage', + name='author', + field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Jméno autora'), + ), + migrations.AlterField( + model_name='homedocumentpage', + name='author', + field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Jméno autora'), + ), + migrations.AlterField( + model_name='homeeventpage', + name='author', + field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Jméno autora'), + ), + migrations.AlterField( + model_name='homepage', + name='controller', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Kontrolor'), + ), + migrations.AlterField( + model_name='homepage', + name='council_members', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Správní rada'), + ), + migrations.AlterField( + model_name='homepage', + name='director', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Ředitel'), + ), + migrations.AlterField( + model_name='homepage', + name='employees', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Zaměstnanci'), + ), + migrations.AlterField( + model_name='homepage', + name='volunteers', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Dobrovolníci'), + ), + ] diff --git a/home/migrations/0021_alter_homepage_controller_and_more.py b/home/migrations/0021_alter_homepage_controller_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..946cb281e320f8b84b0982aa1ecc189b1b6294fd --- /dev/null +++ b/home/migrations/0021_alter_homepage_controller_and_more.py @@ -0,0 +1,40 @@ +# Generated by Django 4.2.4 on 2023-08-12 19:39 + +from django.db import migrations +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0020_homearticlepage_author_page_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='homepage', + name='controller', + field=wagtail.fields.StreamField([('person', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Kontrolor'), + ), + migrations.AlterField( + model_name='homepage', + name='council_members', + field=wagtail.fields.StreamField([('person', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Správní rada'), + ), + migrations.AlterField( + model_name='homepage', + name='director', + field=wagtail.fields.StreamField([('person', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Ředitel'), + ), + migrations.AlterField( + model_name='homepage', + name='employees', + field=wagtail.fields.StreamField([('person', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Zaměstnanci'), + ), + migrations.AlterField( + model_name='homepage', + name='volunteers', + field=wagtail.fields.StreamField([('person', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Dobrovolníci'), + ), + ] diff --git a/home/migrations/0022_alter_homepage_controller_and_more.py b/home/migrations/0022_alter_homepage_controller_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..f58c59950cf30c93363d37691ddff4f791a27fa0 --- /dev/null +++ b/home/migrations/0022_alter_homepage_controller_and_more.py @@ -0,0 +1,40 @@ +# Generated by Django 4.2.4 on 2023-08-12 19:49 + +from django.db import migrations +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0021_alter_homepage_controller_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='homepage', + name='controller', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Kontrolor'), + ), + migrations.AlterField( + model_name='homepage', + name='council_members', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Správní rada'), + ), + migrations.AlterField( + model_name='homepage', + name='director', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Ředitel'), + ), + migrations.AlterField( + model_name='homepage', + name='employees', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Zaměstnanci'), + ), + migrations.AlterField( + model_name='homepage', + name='volunteers', + field=wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Jméno')), ('position', wagtail.blocks.TextBlock(label='Pracovní pozice', required=False)), ('email', wagtail.blocks.EmailBlock(label='E-mailová adresa', required=False))])), ('person_page', wagtail.blocks.PageChooserBlock(icon='user', label='Stránka osoby', page_type=['home.HomePersonPage']))], blank=True, null=True, use_json_field=True, verbose_name='Dobrovolníci'), + ), + ] diff --git a/home/models.py b/home/models.py index 262f4f5f5ee50cb440637259cc05350be5459f10..c939d03443473c9cdf82d271e7ad95af9ae53a8d 100644 --- a/home/models.py +++ b/home/models.py @@ -1,6 +1,7 @@ from django.db import models from django.utils import timezone from wagtail.admin.panels import FieldPanel, MultiFieldPanel, TabbedInterface, ObjectList +from wagtail.blocks import PageChooserBlock from wagtail.contrib.routable_page.models import RoutablePageMixin, path from wagtail.documents import get_document_model from wagtail.fields import RichTextField, StreamField @@ -26,7 +27,16 @@ class HomePage(RoutablePageMixin, Page): # --- People --- director = StreamField( - [("person", PersonBlock())], + [ + ( + "person", + PersonBlock() + ), + ( + "person_page", + PageChooserBlock(page_type="home.HomePersonPage", label="Stránka osoby", icon="user") + ) + ], verbose_name="Ředitel", use_json_field=True, blank=True, @@ -41,7 +51,16 @@ class HomePage(RoutablePageMixin, Page): ) controller = StreamField( - [("person", PersonBlock())], + [ + ( + "person", + PersonBlock() + ), + ( + "person_page", + PageChooserBlock(page_type="home.HomePersonPage", label="Stránka osoby", icon="user") + ) + ], verbose_name="Kontrolor", use_json_field=True, blank=True, @@ -52,7 +71,16 @@ class HomePage(RoutablePageMixin, Page): ) council_members = StreamField( - [("person", PersonBlock())], + [ + ( + "person", + PersonBlock() + ), + ( + "person_page", + PageChooserBlock(page_type="home.HomePersonPage", label="Stránka osoby", icon="user") + ) + ], verbose_name="Správní rada", use_json_field=True, blank=True, @@ -63,7 +91,16 @@ class HomePage(RoutablePageMixin, Page): ) volunteers = StreamField( - [("person", PersonBlock())], + [ + ( + "person", + PersonBlock() + ), + ( + "person_page", + PageChooserBlock(page_type="home.HomePersonPage", label="Stránka osoby", icon="user") + ) + ], verbose_name="Dobrovolníci", use_json_field=True, blank=True, @@ -74,7 +111,16 @@ class HomePage(RoutablePageMixin, Page): ) employees = StreamField( - [("person", PersonBlock())], + [ + ( + "person", + PersonBlock() + ), + ( + "person_page", + PageChooserBlock(page_type="home.HomePersonPage", label="Stránka osoby", icon="user") + ) + ], verbose_name="Zaměstnanci", use_json_field=True, blank=True, @@ -88,6 +134,7 @@ class HomePage(RoutablePageMixin, Page): "home.HomeArticlesPage", "home.HomeEventsPage", "home.HomeDocumentsPage", + "home.HomePeoplePage" ] intro_panels = Page.content_panels + [ @@ -172,6 +219,9 @@ class HomePage(RoutablePageMixin, Page): verbose_name = "Domovská stránka" +# --- BEGIN Articles, events and documents --- + + class HomeArticlesPage(RoutablePageMixin, Page): content = RichTextField(verbose_name="Obsah", blank=True, null=True) @@ -229,8 +279,17 @@ class HomeDocumentsPage(RoutablePageMixin, Page): class HomeContentPageMixin(RoutablePageMixin, Page): tags = models.ManyToManyField("Tag", verbose_name="Štítky") + author_page = models.ForeignKey( + "home.HomePersonPage", + on_delete=models.SET_NULL, + blank=True, + null=True, + verbose_name="Stránka autora", + help_text="Pokud je vybrána stránka, není nutno vyplňovat jméno autora níže." + ) + author = models.CharField( - verbose_name="Autor", + verbose_name="Jméno autora", max_length=128, blank=True, null=True, @@ -243,7 +302,13 @@ class HomeContentPageMixin(RoutablePageMixin, Page): parent_page_type = ["home.HomeArticlesPage"] content_panels = Page.content_panels + [ - FieldPanel("author", icon="user"), + MultiFieldPanel( + [ + FieldPanel("author_page", icon="user"), + FieldPanel("author", icon="user"), + ], + heading="Autor" + ), FieldPanel("date", icon="calendar"), FieldPanel("content", icon="pilcrow"), ] @@ -263,7 +328,13 @@ class HomeArticlePage(HomeContentPageMixin): perex = models.TextField(verbose_name="Perex") content_panels = Page.content_panels + [ - FieldPanel("author", icon="user"), + MultiFieldPanel( + [ + FieldPanel("author_page", icon="user"), + FieldPanel("author", icon="user"), + ], + heading="Autor" + ), FieldPanel("date", icon="calendar"), FieldPanel("perex", icon="pilcrow"), FieldPanel("content", icon="pilcrow"), @@ -284,7 +355,13 @@ class HomeEventPage(HomeContentPageMixin): content_panels = Page.content_panels + [ FieldPanel("date", icon="calendar"), FieldPanel("location", icon="globe"), - FieldPanel("author", icon="user"), + MultiFieldPanel( + [ + FieldPanel("author_page", icon="user"), + FieldPanel("author", icon="user"), + ], + heading="Autor" + ), FieldPanel("content", icon="pilcrow"), ] @@ -303,7 +380,13 @@ class HomeDocumentPage(HomeContentPageMixin): content_panels = Page.content_panels + [ FieldPanel("document", icon="doc-full"), - FieldPanel("author", icon="user"), + MultiFieldPanel( + [ + FieldPanel("author_page", icon="user"), + FieldPanel("author", icon="user"), + ], + heading="Autor" + ), FieldPanel("date", icon="calendar"), FieldPanel("content", icon="pilcrow"), ] @@ -312,6 +395,58 @@ class HomeDocumentPage(HomeContentPageMixin): verbose_name = "Dokument" +# --- END Articles, events and documents --- +# --- BEGIN People --- + + +class HomePeoplePage(RoutablePageMixin, Page): + content = RichTextField(verbose_name="Obsah", blank=True, null=True) + + parent_page_type = ["home.HomePage"] + subpage_types = ["home.HomePersonPage"] + + content_panels = Page.content_panels + [ + FieldPanel("content", icon="pilcrow"), + ] + + @property + def people(self): + return HomePersonPage.objects.live().order_by("-title").all() + + class Meta: + verbose_name = "Rozcestník osob" + + +class HomePersonPage(RoutablePageMixin, Page): + image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name='+', + verbose_name="Profilový obrázek" + ) + + position = models.TextField(verbose_name="Pracovní pozice", blank=True, null=True) + + email = models.EmailField(verbose_name="Emailová adresa", blank=True, null=True) + + description = RichTextField(verbose_name="Popis", blank=True, null=True) + + content_panels = Page.content_panels + [ + FieldPanel("image", icon="image"), + FieldPanel("position", icon="pilcrow"), + FieldPanel("email", icon="mail"), + FieldPanel("description", icon="pilcrow"), + ] + + class Meta: + verbose_name = "Osoba" + + +# --- END People --- + + class Tag(models.Model): name = models.CharField(verbose_name="Jméno", max_length=32) diff --git a/home/templates/home/blocks/person_page_block.html b/home/templates/home/blocks/person_page_block.html new file mode 100644 index 0000000000000000000000000000000000000000..903facb5e32ce79cac58b1df7100c3f8c6f81844 --- /dev/null +++ b/home/templates/home/blocks/person_page_block.html @@ -0,0 +1,25 @@ +<li> + <div class="flex gap-2"> + <div class="flex gap-2"> + <a href="{{ page.url }}"> + {% if page.position %} + <strong>{{ page.title }}</strong> + {% else %} + {{ page.title }} + {% endif %} + </a> + + {% if page.email %} + <a href="mailto:{{ page.email }}"> + <div class="flex items-center"> + <i class="ico--at text-xl text-pii-cyan"></i> + </div> + </a> + {% endif %} + </div> + </div> + + {% if page.position %} + <p class="leading-4 whitespace-pre-line">{{ page.position }}</p> + {% endif %} +</li> diff --git a/home/templates/home/home_article_page.html b/home/templates/home/home_article_page.html index 45c7731ac797532c8914fe975f25c8dd5170e78b..4f0b5b74ccf4d37a16ecfacdb3388be657cb464f 100644 --- a/home/templates/home/home_article_page.html +++ b/home/templates/home/home_article_page.html @@ -11,7 +11,16 @@ <i class="ico--calendar"></i> <div>{{ page.date }}</div> </div> - {% if page.author %} + + {% if page.author_page %} + <a + class="flex gap-2 items-center" + href="{{ page.author_page.url }}" + > + <i class="ico--user"></i> + <div>{{ page.author_page.title }}</div> + </a> + {% elif page.author %} <div class="flex gap-2 items-center"> <i class="ico--user"></i> <div>{{ page.author }}</div> diff --git a/home/templates/home/home_document_page.html b/home/templates/home/home_document_page.html index a50f53b1dee5032ee8e3f1a0b93551d3089abd78..54e9eadd405b0c5e0e16cc4c8f03b676da8a8fcc 100644 --- a/home/templates/home/home_document_page.html +++ b/home/templates/home/home_document_page.html @@ -6,8 +6,16 @@ <div class="container"> <h1 class="font-bebas text-4xl">{{ page.title }}</h1> - {% if page.author %} - <div class="flex gap-2 mt-3 items-center text-gray-700"> + {% if page.author_page %} + <a + class="flex gap-2 items-center" + href="{{ page.author_page.url }}" + > + <i class="ico--user"></i> + <div>{{ page.author_page.title }}</div> + </a> + {% elif page.author %} + <div class="flex gap-2 items-center"> <i class="ico--user"></i> <div>{{ page.author }}</div> </div> diff --git a/home/templates/home/home_documents_page.html b/home/templates/home/home_documents_page.html index 6d9dfa087945dc1195c060178f13377734eb43d9..82d187d54e23f14cafcdb2c994f2db9ab55f14fa 100644 --- a/home/templates/home/home_documents_page.html +++ b/home/templates/home/home_documents_page.html @@ -12,7 +12,7 @@ </div> {% endif %} - <ul class="flex flex-col gap-2 list-disc ml-3"> + <ul class="flex flex-col gap-2 list-disc ml-3 font-serif"> {% for document in page.documents %} <li> <a diff --git a/home/templates/home/home_event_page.html b/home/templates/home/home_event_page.html index 4e67595aae849df3aa32451292e59b66f29a7854..f8f38c0c2218734dcb746dc850daabbebb345ec1 100644 --- a/home/templates/home/home_event_page.html +++ b/home/templates/home/home_event_page.html @@ -21,7 +21,15 @@ </div> {% endif %} - {% if page.author %} + {% if page.author_page %} + <a + class="flex gap-2 items-center" + href="{{ page.author_page.url }}" + > + <i class="ico--user"></i> + <div>{{ page.author_page.title }}</div> + </a> + {% elif page.author %} <div class="flex gap-2 items-center"> <i class="ico--user"></i> <div>{{ page.author }}</div> diff --git a/home/templates/home/home_events_page.html b/home/templates/home/home_events_page.html index 109bb99dd86271a696a790227b8424a5da9aa4f9..3fe549f403f20e8a17f01084a98ce8d23de4ff27 100644 --- a/home/templates/home/home_events_page.html +++ b/home/templates/home/home_events_page.html @@ -12,19 +12,18 @@ </div> {% endif %} - <ul class="flex flex-col gap-2 list-disc ml-3"> + <ul class="flex flex-col gap-2 list-disc ml-3 font-serif"> {% for event in page.events %} <li class="text-gray-500"> <a - class="flex gap-3" + class="flex gap-2 flex-wrap" href="{{ event.url }}" > + <div class="underline text-black">{{ event.title }}</div> <div> - {{ event.date }}{% if event.location %}, - {{ event.location }} - {% endif %} + ({{ event.date }}{% if event.location %}, + {{ event.location }}{% endif %}) </div> - <div class="underline text-black">{{ event.title }}</div> </a> </li> {% endfor %} diff --git a/home/templates/home/home_page.html b/home/templates/home/home_page.html index 0add6da8f1f57d7e67ab580072287a7712232770..1959d3c304dd5d451c1248335907a166cc430543 100644 --- a/home/templates/home/home_page.html +++ b/home/templates/home/home_page.html @@ -164,7 +164,9 @@ </div> </section> - <section class="container flex flex-col gap-3" id="dary"> + <section class="container flex flex-col gap-3"> + <span class="invisible relative top-[-8rem]" id="dary"></span> + <h2 class="font-bebas text-3xl uppercase leading-7">Dary</h2> <div> @@ -176,7 +178,9 @@ </div> </section> - <section class="flex justify-center bg-grey-50 p-10 w-full" id="kontakty"> + <section class="flex justify-center bg-grey-50 p-10 w-full"> + <span class="invisible relative top-[-8rem]" id="kontakty"></span> + <div class="container flex flex-col gap-3"> <h2 class="font-bebas text-3xl uppercase leading-7">Kontakty</h2> @@ -210,7 +214,9 @@ </div> </section> - <section class="container flex flex-col gap-3" id="lide"> + <section class="container flex flex-col gap-3"> + <span class="invisible relative top-[-8rem]" id="lide"></span> + <h2 class="font-bebas text-3xl uppercase leading-7">Lidé</h2> <div class="flex flex-col lg:grid lg:grid-cols-3 gap-20 min-h-screen"> @@ -221,9 +227,13 @@ {{ page.director_description }} </p> - <ul> + <ul class="flex flex-col gap-3"> {% for block in page.director %} - {% include_block block %} + {% if block.block_type == "person" %} + {% include_block block %} + {% else %} + {% include "home/blocks/person_page_block.html" with page=block.value %} + {% endif %} {% endfor %} </ul> </section> @@ -241,9 +251,13 @@ {{ page.controller_description }} </p> - <ul> + <ul class="flex flex-col gap-3"> {% for block in page.controller %} - {% include_block block %} + {% if block.block_type == "person" %} + {% include_block block %} + {% else %} + {% include "home/blocks/person_page_block.html" with page=block %} + {% endif %} {% endfor %} </ul> </section> @@ -258,7 +272,11 @@ <ul class="flex flex-col gap-3"> {% for block in page.council_members %} - {% include_block block %} + {% if block.block_type == "person" %} + {% include_block block %} + {% else %} + {% include "home/blocks/person_page_block.html" with page=block %} + {% endif %} {% endfor %} </ul> </section> @@ -279,7 +297,11 @@ </h4> <ul class="flex flex-col leading-5"> {% for block in page.volunteers %} - {% include_block block %} + {% if block.block_type == "person" %} + {% include_block block %} + {% else %} + {% include "home/blocks/person_page_block.html" with page=block %} + {% endif %} {% endfor %} </ul> </section> @@ -297,7 +319,11 @@ </p> {% for block in page.employees %} - {% include_block block %} + {% if block.block_type == "person" %} + {% include_block block %} + {% else %} + {% include "home/blocks/person_page_block.html" with page=block %} + {% endif %} {% endfor %} </ul> </section> diff --git a/home/templates/home/home_people_page.html b/home/templates/home/home_people_page.html new file mode 100644 index 0000000000000000000000000000000000000000..6bc7bfdea2e33db69c93869b76c40d3211c55bf6 --- /dev/null +++ b/home/templates/home/home_people_page.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} +{% load static wagtailcore_tags %} + +{% block content %} +<main class="flex flex-col items-center gap-10 pt-14"> + <div class="container"> + <h1 class="font-bebas text-4xl mb-4">{{ page.title }}</h1> + + {% if page.content %} + <div class="prose font-serif mb-3"> + {{ page.content|richtext }} + </div> + {% endif %} + + <ul class="flex flex-col gap-2 list-disc ml-3 font-serif"> + {% for person in page.people %} + <li> + <a + class="underline" + href="{{ person.url }}" + > + {{ person.title }} + </a> + </li> + {% endfor %} + </ul> + </div> +</main> +{% endblock content %} diff --git a/home/templates/home/home_person_page.html b/home/templates/home/home_person_page.html new file mode 100644 index 0000000000000000000000000000000000000000..0d6fd81ed90758a27918b8327f94d2590129be71 --- /dev/null +++ b/home/templates/home/home_person_page.html @@ -0,0 +1,44 @@ +{% extends "base.html" %} +{% load static wagtailcore_tags wagtailimages_tags %} + +{% block content %} +<main class="flex justify-center pt-14"> + <div class="container flex flex-col gap-5"> + <div class="flex gap-3"> + {% if page.image %} + {% image page.image max-400x400 as profile_image %} + + <img + class="rounded-full w-40 h-40" + src="{{ profile_image.url }}" + alt="Profilový obrázek osoby {{ page.title }}" + > + {% endif %} + <div class="flex flex-col"> + <h1 class="font-bebas text-4xl">{{ page.title }}</h1> + + {% if page.position %} + <div class="text-gray-500 whitespace-pre-line font-serif">{{ page.position }}</div> + {% endif %} + + {% if page.email %} + <hr class="my-2"> + + <a class="flex gap-2 font-serif text-gray-500" href="mailto:{{ page.email }}"> + <div class="flex items-center"> + <i class="ico--at text-xl"></i> + </div> + <span>{{ page.email }}</span> + </a> + {% endif %} + </div> + </div> + + {% if page.position %} + <div class="prose max-w-screen-md font-serif"> + {{ page.position|richtext }} + </div> + {% endif %} + </div> +</main> +{% endblock content %} diff --git a/institut/templates/base.html b/institut/templates/base.html index c25a00ca76b3f80d9d4a6c05950a5b267b102b46..d9d96a7b28aa2f2ffc4a155d71f431cd562fbac9 100644 --- a/institut/templates/base.html +++ b/institut/templates/base.html @@ -45,7 +45,7 @@ <body> {% wagtailuserbar %} - <nav class="bg-grey-800 py-8 flex justify-center"> + <nav class="sticky top-0 drop-shadow-lg bg-grey-800 py-8 flex justify-center"> <div class="flex gap-7 container text-white items-center"> <a href="/" @@ -62,8 +62,7 @@ ></div> <div class="gap-4 hidden md:flex"> - <a class="nav__item" href="/#uvod">Úvod</a> - <a class="nav__item" href="/clanky">Aktuálně</a> + <a class="nav__item" href="/clanky">Články</a> <a class="nav__item" href="/akce">Akce</a> <a class="nav__item" href="/dokumenty">Dokumenty</a> <a class="nav__item" href="/#dary">Dary</a>