221 lines
7.6 KiB
Python
221 lines
7.6 KiB
Python
from django.db import models
|
|
from grapple.helpers import register_singular_query_field
|
|
from grapple.models import (
|
|
GraphQLBoolean,
|
|
GraphQLImage,
|
|
GraphQLRichText,
|
|
GraphQLStreamfield,
|
|
GraphQLString,
|
|
)
|
|
from wagtail.admin.panels import FieldPanel, FieldRowPanel, MultiFieldPanel
|
|
from wagtail.fields import RichTextField, StreamField
|
|
from wagtail.models import Page
|
|
from wagtail.search import index
|
|
from wagtail_wordpress_import.models import WPImportedPageMixin
|
|
|
|
from dnscms.blocks import ImageSliderBlock
|
|
from dnscms.fields import CommonStreamField
|
|
|
|
|
|
@register_singular_query_field("venueIndex")
|
|
class VenueIndex(Page):
|
|
# there can only be one venue index page
|
|
max_count = 1
|
|
subpage_types = ["venues.VenuePage"]
|
|
|
|
lead = RichTextField(features=["italic", "link"], blank=True)
|
|
body = CommonStreamField
|
|
|
|
content_panels = Page.content_panels + [
|
|
FieldPanel("lead", heading="Ingress"),
|
|
FieldPanel("body", heading="Innhold"),
|
|
]
|
|
|
|
graphql_fields = [GraphQLRichText("lead"), GraphQLStreamfield("body")]
|
|
|
|
|
|
@register_singular_query_field("venueRentalIndex")
|
|
class VenueRentalIndex(Page):
|
|
# there can only be one venue index page
|
|
max_count = 1
|
|
subpage_types = []
|
|
|
|
lead = RichTextField(features=["italic", "link"], blank=True)
|
|
body = CommonStreamField
|
|
|
|
content_panels = Page.content_panels + [
|
|
FieldPanel("lead", heading="Ingress"),
|
|
FieldPanel("body", heading="Innhold"),
|
|
]
|
|
|
|
graphql_fields = [GraphQLRichText("lead"), GraphQLStreamfield("body")]
|
|
|
|
|
|
class VenuePage(WPImportedPageMixin, Page):
|
|
# no children
|
|
subpage_types = []
|
|
parent_page_types = ["venues.VenueIndex"]
|
|
# should not be able to be shown in menus
|
|
show_in_menus = False
|
|
|
|
featured_image = models.ForeignKey(
|
|
"images.CustomImage",
|
|
null=True,
|
|
blank=True,
|
|
on_delete=models.SET_NULL,
|
|
related_name="+",
|
|
help_text=(
|
|
"Bilde av lokalet som brukes i oversiktvisninger. "
|
|
"Blir ikke automatisk med i bildekarusellen."
|
|
),
|
|
)
|
|
|
|
images = StreamField(
|
|
[
|
|
("image_slider", ImageSliderBlock()),
|
|
],
|
|
block_counts={"image_slider": {"max_num": 1}},
|
|
blank=True,
|
|
help_text=(
|
|
"Bilder som vises i bildekarusellen når man leser mer om lokalet. "
|
|
"Inkluderer ikke automatisk bildet over."
|
|
),
|
|
)
|
|
|
|
body = CommonStreamField
|
|
|
|
show_as_bookable = models.BooleanField(
|
|
default=True, help_text="Skal lokalet vises i oversikten over lokaler som leies ut?"
|
|
)
|
|
show_in_overview = models.BooleanField(
|
|
default=True,
|
|
help_text="Skal lokalet vises i oversikten over lokaler på undersiden /lokaler?",
|
|
)
|
|
floor = models.CharField(
|
|
blank=True,
|
|
max_length=255,
|
|
)
|
|
preposition = models.CharField(
|
|
blank=True, max_length=255, help_text="Er man i eller på lokalet?"
|
|
)
|
|
tech_specs_url = models.URLField(
|
|
blank=True,
|
|
max_length=512,
|
|
help_text="Lenke til tekniske spesifikasjoner for lokalet",
|
|
)
|
|
used_for = models.CharField(blank=True, max_length=255)
|
|
capability_audio = models.CharField(blank=True, max_length=255)
|
|
capability_audio_video = models.CharField(blank=True, max_length=255)
|
|
capability_bar = models.CharField(blank=True, max_length=255)
|
|
capability_lighting = models.CharField(blank=True, max_length=255)
|
|
capacity_legal = models.CharField(blank=True, max_length=255)
|
|
capacity_standing = models.CharField(blank=True, max_length=255)
|
|
capacity_sitting = models.CharField(blank=True, max_length=255)
|
|
|
|
# "used_for": "Konsert, foredrag, fest, debatt, teater",
|
|
|
|
capability_panels = [
|
|
FieldRowPanel(
|
|
children=[
|
|
FieldPanel("capability_bar", heading="Bar"),
|
|
FieldPanel("capability_audio", heading="Lyd"),
|
|
FieldPanel("capability_lighting", heading="Lys"),
|
|
FieldPanel("capability_audio_video", heading="A/V"),
|
|
],
|
|
),
|
|
]
|
|
|
|
capacity_panels = [
|
|
FieldRowPanel(
|
|
children=[
|
|
FieldPanel("capacity_legal", heading="Branntillatelse for"),
|
|
FieldPanel("capacity_sitting", heading="Stående"),
|
|
FieldPanel("capacity_standing", heading="Sittende"),
|
|
],
|
|
),
|
|
]
|
|
|
|
content_panels = Page.content_panels + [
|
|
FieldPanel("featured_image"),
|
|
FieldPanel("images", heading="Bilder"),
|
|
FieldPanel("body", heading="Innhold"),
|
|
FieldPanel("floor", heading="Etasje"),
|
|
FieldPanel("preposition", heading="Preposisjon"),
|
|
FieldPanel("show_as_bookable", heading="Vis på utleieside"),
|
|
FieldPanel("show_in_overview", heading="Vis i lokaleoversikt"),
|
|
FieldPanel("used_for", heading="Egnet for"),
|
|
MultiFieldPanel(
|
|
heading="Kapabiliteter",
|
|
children=capability_panels,
|
|
),
|
|
MultiFieldPanel(
|
|
heading="Kapasitet",
|
|
children=capacity_panels,
|
|
),
|
|
FieldPanel("tech_specs_url", heading="Tekniske spesifikasjoner"),
|
|
]
|
|
|
|
graphql_fields = [
|
|
GraphQLImage("featured_image"),
|
|
GraphQLStreamfield("images"),
|
|
GraphQLStreamfield("body"),
|
|
GraphQLString("floor"),
|
|
GraphQLString("preposition"),
|
|
GraphQLString("used_for"),
|
|
GraphQLString("tech_specs_url"),
|
|
GraphQLBoolean("show_as_bookable"),
|
|
GraphQLBoolean("show_in_overview"),
|
|
GraphQLString("capability_audio"),
|
|
GraphQLString("capability_audio_video"),
|
|
GraphQLString("capability_bar"),
|
|
GraphQLString("capability_lighting"),
|
|
GraphQLString("capacity_legal"),
|
|
GraphQLString("capacity_standing"),
|
|
GraphQLString("capacity_sitting"),
|
|
]
|
|
|
|
search_fields = Page.search_fields + [
|
|
index.SearchField("body"),
|
|
]
|
|
|
|
settings_panels = Page.settings_panels + WPImportedPageMixin.wordpress_panels
|
|
|
|
def import_wordpress_data(self, data):
|
|
import html
|
|
|
|
# Wagtail page model fields
|
|
self.title = html.unescape(data["title"])
|
|
self.slug = data["slug"]
|
|
self.first_published_at = data["first_published_at"]
|
|
self.last_published_at = data["last_published_at"]
|
|
self.latest_revision_created_at = data["latest_revision_created_at"]
|
|
self.search_description = data["search_description"]
|
|
|
|
# debug fields
|
|
self.wp_post_id = data["wp_post_id"]
|
|
self.wp_post_type = data["wp_post_type"]
|
|
self.wp_link = data["wp_link"]
|
|
self.wp_raw_content = data["wp_raw_content"]
|
|
self.wp_block_json = data["wp_block_json"]
|
|
self.wp_processed_content = data["wp_processed_content"]
|
|
self.wp_normalized_styles = data["wp_normalized_styles"]
|
|
self.wp_post_meta = data["wp_post_meta"]
|
|
|
|
# own model fields
|
|
self.body = data["body"] or ""
|
|
|
|
meta = data["wp_post_meta"]
|
|
self.show_as_bookable = meta.get("neuf_venues_show_on_booking_page", False)
|
|
self.preposition = meta.get("neuf_venues_preposition") or ""
|
|
self.floor = meta.get("neuf_venues_floor") or ""
|
|
self.used_for = meta.get("neuf_venues_used_for") or ""
|
|
|
|
self.capability_bar = meta.get("neuf_venues_bar") or ""
|
|
self.capability_audio = meta.get("neuf_venues_audio") or ""
|
|
self.capability_lighting = meta.get("neuf_venues_lighting") or ""
|
|
self.capability_audio_video = meta.get("neuf_venues_audio_video") or ""
|
|
|
|
self.capacity_legal = meta.get("neuf_venues_capacity_legal") or ""
|
|
self.capacity_standing = meta.get("neuf_venues_capacity_standing") or ""
|
|
self.capacity_sitting = meta.get("neuf_venues_capacity_sitting") or ""
|