Skip to content
Snippets Groups Projects
Commit 80ac676e authored by Tomáš's avatar Tomáš
Browse files

Merge branch 'master' into feat/uniweb-charts

parents 936ba9c4 107a3313
Branches
No related tags found
2 merge requests!714Release,!700Add charts to uniweb & district pages
Pipeline #11382 passed
Showing
with 66652 additions and 75 deletions
......@@ -4,7 +4,7 @@ default_language_version:
exclude: snapshots/
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.1.0
rev: v4.4.0
hooks:
- id: trailing-whitespace
exclude: ^.*\.md$
......@@ -21,11 +21,12 @@ repos:
- id: seed-isort-config
- repo: https://github.com/timothycrosley/isort
rev: 5.10.1
rev: 5.12.0
hooks:
- id: isort
- repo: https://github.com/psf/black
rev: 22.3.0
rev: 22.12.0
hooks:
- id: black
args: ["-t", "py310"]
......@@ -9,9 +9,25 @@ logger = logging.getLogger(__name__)
class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout.write("Removing orphaned calendars...")
for cal in Calendar.objects.filter(
districtcenterpage=None,
districthomepage=None,
elections2021calendarpage=None,
senatcampaignhomepage=None,
uniwebhomepage=None,
):
try:
self.stdout.write(f"- {cal.id} | {cal.url}")
cal.delete()
except Exception as e:
logger.error("Calendar delete failed for %s", cal.url, exc_info=True)
self.stdout.write(" - failed")
self.stdout.write(str(e))
self.stdout.write("Updating calendars...")
for cal in Calendar.objects.all():
self.stdout.write(f"\n@ {cal.url}")
self.stdout.write(f"\n@ {cal.id} | {cal.url}")
try:
cal.update_source()
self.stdout.write("+ ok")
......
......@@ -99,8 +99,6 @@ class CalendarMixin(models.Model):
# delete related Calendar when URL is cleared
if not self.calendar_url and self.calendar:
# TODO handle revisions and maybe other live pages with the same calendar
# self.calendar.delete()
self.calendar = None
super().save(*args, **kwargs)
from operator import itemgetter
from typing import TYPE_CHECKING
from zoneinfo import ZoneInfo
import arrow
import bleach
from django.conf import settings
from zoneinfo import ZoneInfo
if TYPE_CHECKING:
from icalevnt.icalparser import Event
......
# Generated by Django 4.0.7 on 2022-08-11 16:38
from django.db import migrations, models
import wagtail.blocks
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('district', '0095_alter_districtpersonpage_options_and_more'),
("district", "0095_alter_districtpersonpage_options_and_more"),
]
operations = [
migrations.AddField(
model_name='districtelectioncampaignpage',
name='show_program_points_inline',
field=models.BooleanField(default=False, help_text='Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.', verbose_name='Zobrazit obsah celého programu na jedné stránce'),
model_name="districtelectioncampaignpage",
name="show_program_points_inline",
field=models.BooleanField(
default=False,
help_text="Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.",
verbose_name="Zobrazit obsah celého programu na jedné stránce",
),
),
migrations.AlterField(
model_name='districtinteractiveprogrampage',
name='content',
field=wagtail.fields.StreamField([('interactive_program_block', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název části programu', required=True)), ('heading', wagtail.blocks.CharBlock(label='Nadpis', required=True)), ('description', wagtail.blocks.RichTextBlock(blank=True, label='Krátký popis, BEZ BODŮ', required=False)), ('icon', wagtail.blocks.ChoiceBlock(choices=[('verejne-sluzby', 'Veřejné služby'), ('zdravotni-pece', 'Zdravotní péče'), ('sport', 'Sport'), ('sport-plavec', 'Sport - plavec'), ('socialni-politika', 'Sociální politika'), ('aktivni-verejnost', 'Aktivní veřejnost'), ('priroda', 'Příroda'), ('vzdelavani', 'Vzdělávání'), ('kultura', 'Kultura'), ('otevrena-radnice', 'Otevřená radnice'), ('cestovni-ruch', 'Cestovní ruch'), ('doprava', 'Doprava'), ('bydleni', 'Bydlení')], label='Ikona')), ('program_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('content', wagtail.blocks.RichTextBlock(label='Obsah', required=True))]), label='Seznam bodů', required=True))]))], use_json_field=None, verbose_name='Části programu'),
model_name="districtinteractiveprogrampage",
name="content",
field=wagtail.fields.StreamField(
[
(
"interactive_program_block",
wagtail.blocks.StructBlock(
[
(
"name",
wagtail.blocks.CharBlock(
label="Název části programu", required=True
),
),
(
"heading",
wagtail.blocks.CharBlock(
label="Nadpis", required=True
),
),
(
"description",
wagtail.blocks.RichTextBlock(
blank=True,
label="Krátký popis, BEZ BODŮ",
required=False,
),
),
(
"icon",
wagtail.blocks.ChoiceBlock(
choices=[
("verejne-sluzby", "Veřejné služby"),
("zdravotni-pece", "Zdravotní péče"),
("sport", "Sport"),
("sport-plavec", "Sport - plavec"),
("socialni-politika", "Sociální politika"),
("aktivni-verejnost", "Aktivní veřejnost"),
("priroda", "Příroda"),
("vzdelavani", "Vzdělávání"),
("kultura", "Kultura"),
("otevrena-radnice", "Otevřená radnice"),
("cestovni-ruch", "Cestovní ruch"),
("doprava", "Doprava"),
("bydleni", "Bydlení"),
],
label="Ikona",
),
),
(
"program_items",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"content",
wagtail.blocks.RichTextBlock(
label="Obsah", required=True
),
)
]
),
label="Seznam bodů",
required=True,
),
),
]
),
)
],
use_json_field=None,
verbose_name="Části programu",
),
),
]
......@@ -6,13 +6,20 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('district', '0096_districtelectioncampaignpage_show_program_points_inline_and_more'),
(
"district",
"0096_districtelectioncampaignpage_show_program_points_inline_and_more",
),
]
operations = [
migrations.AlterField(
model_name='districtelectioncampaignpage',
name='show_program_points_inline',
field=models.BooleanField(default=False, help_text='Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.', verbose_name='Zobrazit obsah programu na jedné stránce'),
model_name="districtelectioncampaignpage",
name="show_program_points_inline",
field=models.BooleanField(
default=False,
help_text="Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.",
verbose_name="Zobrazit obsah programu na jedné stránce",
),
),
]
# Generated by Django 4.0.7 on 2022-08-11 19:26
from django.db import migrations, models
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('district', '0097_alter_districtelectioncampaignpage_show_program_points_inline'),
(
"district",
"0097_alter_districtelectioncampaignpage_show_program_points_inline",
),
]
operations = [
migrations.AlterField(
model_name='districtelectionprogrampage',
name='guarantor',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='district.districtpersonpage', verbose_name='Garant'),
model_name="districtelectionprogrampage",
name="guarantor",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="district.districtpersonpage",
verbose_name="Garant",
),
),
]
# Generated by Django 4.0.7 on 2022-08-11 19:27
from django.db import migrations, models
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('district', '0098_alter_districtelectionprogrampage_guarantor'),
("district", "0098_alter_districtelectionprogrampage_guarantor"),
]
operations = [
migrations.AlterField(
model_name='districtelectionprogrampage',
name='guarantor',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='district.districtpersonpage', verbose_name='Garant'),
model_name="districtelectionprogrampage",
name="guarantor",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="district.districtpersonpage",
verbose_name="Garant",
),
),
]
# Generated by Django 4.0.7 on 2022-09-05 12:16
from django.db import migrations, models
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wagtailimages', '0024_index_image_file_hash'),
('district', '0099_alter_districtelectionprogrampage_guarantor'),
("wagtailimages", "0024_index_image_file_hash"),
("district", "0099_alter_districtelectionprogrampage_guarantor"),
]
operations = [
migrations.AddField(
model_name='districtarticlepage',
name='thumb_image',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='thumb_image', to='wagtailimages.image', verbose_name='náhledový obrázek'),
model_name="districtarticlepage",
name="thumb_image",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="thumb_image",
to="wagtailimages.image",
verbose_name="náhledový obrázek",
),
),
]
This diff is collapsed.
# Generated by Django 4.1.5 on 2023-01-31 19:42
import django.db.models.deletion
import modelcluster.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("district", "0102_alter_districtarticlepage_content_and_more"),
]
operations = [
migrations.AlterField(
model_name="districtarticletag",
name="content_object",
field=modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="tagged_items",
to="district.districtarticlepage",
),
),
migrations.AlterField(
model_name="districtpersontag",
name="content_object",
field=modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="tagged_items",
to="district.districtpersonpage",
),
),
]
......@@ -71,6 +71,7 @@ class DistrictHomePage(
],
verbose_name="Blok pod headerem",
blank=True,
use_json_field=True,
)
content = StreamField(
......@@ -85,6 +86,7 @@ class DistrictHomePage(
],
verbose_name="Obsah stránky",
blank=True,
use_json_field=True,
)
articles_title = models.CharField("Nadpis článků", max_length=256)
......@@ -177,6 +179,7 @@ class DistrictHomePage(
verbose_name="Osoby v zápatí webu",
blank=True,
max_num=6,
use_json_field=True,
)
# settings
......@@ -336,7 +339,9 @@ class DistrictHomePage(
class DistrictArticleTag(TaggedItemBase):
content_object = ParentalKey(
"district.DistrictArticlePage", on_delete=models.CASCADE
"district.DistrictArticlePage",
on_delete=models.CASCADE,
related_name="tagged_items",
)
......@@ -546,6 +551,7 @@ class DistrictContactPage(
[("item", blocks.PersonCustomPositionBlock())],
verbose_name="Kontakty",
blank=True,
use_json_field=True,
)
text = RichTextField("Text", blank=True, features=RICH_TEXT_DEFAULT_FEATURES)
......@@ -573,7 +579,9 @@ class DistrictContactPage(
class DistrictPersonTag(TaggedItemBase):
content_object = ParentalKey(
"district.DistrictPersonPage", on_delete=models.CASCADE
"district.DistrictPersonPage",
on_delete=models.CASCADE,
related_name="tagged_items",
)
......@@ -642,6 +650,7 @@ class DistrictPersonPage(
[("other_url", blocks.PersonUrlBlock())],
verbose_name="Další odkaz",
blank=True,
use_json_field=True,
)
### PANELS
......@@ -753,6 +762,7 @@ class DistrictPeoplePage(
],
verbose_name="Obsah stránky",
blank=True,
use_json_field=True,
)
### PANELS
......@@ -786,6 +796,7 @@ class DistrictElectionBasePage(
],
verbose_name="Obsah",
blank=True,
use_json_field=True,
)
### PANELS
......@@ -906,6 +917,7 @@ class DistrictElectionCampaignPage(DistrictElectionBasePage):
],
verbose_name="Kandidátní listina",
blank=True,
use_json_field=True,
)
candidate_list_title = models.CharField(
"Titulek kandidátní listiny",
......@@ -948,6 +960,7 @@ class DistrictElectionCampaignPage(DistrictElectionBasePage):
blank=True,
null=True,
help_text="Použije se v hlavním banneru.",
use_json_field=True,
)
hero_image = models.ForeignKey(
"wagtailimages.Image",
......@@ -1096,6 +1109,7 @@ class DistrictInteractiveProgramPage(
[("interactive_program_block", blocks.InteractiveProgramBlock())],
verbose_name="Části programu",
blank=False,
use_json_field=True,
)
### PANELS
......@@ -1144,6 +1158,7 @@ class DistrictProgramPage(
],
verbose_name="obsah stránky",
blank=True,
use_json_field=True,
)
### PANELS
......@@ -1199,6 +1214,7 @@ class DistrictCenterPage(
],
verbose_name="Obsah",
blank=True,
use_json_field=True,
)
text = RichTextField("Text", blank=True, null=True)
sidebar_content = StreamField(
......@@ -1212,6 +1228,7 @@ class DistrictCenterPage(
],
verbose_name="Obsah bočního panelu",
blank=True,
use_json_field=True,
)
### PANELS
......@@ -1285,6 +1302,7 @@ class DistrictCrossroadPage(
[("cards", blocks.CardLinkWithHeadlineBlock())],
verbose_name="Karty rozcestníku",
blank=True,
use_json_field=True,
)
content = StreamField(
......@@ -1295,6 +1313,7 @@ class DistrictCrossroadPage(
],
verbose_name="Obsah stránky",
blank=True,
use_json_field=True,
)
### PANELS
......@@ -1345,6 +1364,7 @@ class DistrictCustomPage(
],
verbose_name="Obsah",
blank=True,
use_json_field=True,
)
### PANELS
......@@ -1381,6 +1401,7 @@ class DistrictGeoFeatureCollectionPage(
blank=True,
null=True,
help_text="Použije se v hlavním banneru.",
use_json_field=True,
)
content = StreamField(
DEFAULT_CONTENT_BLOCKS
......@@ -1390,6 +1411,7 @@ class DistrictGeoFeatureCollectionPage(
],
verbose_name="Obsah úvodní",
blank=True,
use_json_field=True,
)
content_after = StreamField(
DEFAULT_CONTENT_BLOCKS
......@@ -1399,6 +1421,7 @@ class DistrictGeoFeatureCollectionPage(
],
verbose_name="Obsah za mapou",
blank=True,
use_json_field=True,
)
content_footer = StreamField(
DEFAULT_CONTENT_BLOCKS
......@@ -1408,6 +1431,7 @@ class DistrictGeoFeatureCollectionPage(
],
verbose_name="Obsah v patičkové části",
blank=True,
use_json_field=True,
)
image = models.ForeignKey(
"wagtailimages.Image",
......@@ -1619,6 +1643,7 @@ class DistrictGeoFeatureDetailPage(
],
verbose_name="Obsah",
blank=True,
use_json_field=True,
)
parts_section_title = models.CharField(
"Titulek přehledu součástí",
......
......@@ -2,6 +2,9 @@
<!doctype html>
<html lang="cs">
<head>
{% if request.in_preview_panel %}
<base target="_blank">
{% endif %}
<!-- Meta -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width" />
......
......@@ -2,6 +2,9 @@
<!doctype html>
<html lang="cs">
<head>
{% if request.in_preview_panel %}
<base target="_blank">
{% endif %}
<!-- Font loader -->
<script type="text/javascript">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment