diff --git a/dnscms/.gitignore b/dnscms/.gitignore index 43c8170..b446d08 100644 --- a/dnscms/.gitignore +++ b/dnscms/.gitignore @@ -6,3 +6,4 @@ /.venv/ /static/ /media/ +db.sqlite3 diff --git a/dnscms/db.sqlite3 b/dnscms/db.sqlite3 deleted file mode 100644 index 560bfd4..0000000 Binary files a/dnscms/db.sqlite3 and /dev/null differ diff --git a/dnscms/events/migrations/0004_eventpage_featured_image.py b/dnscms/events/migrations/0004_eventpage_featured_image.py new file mode 100644 index 0000000..6eff2bc --- /dev/null +++ b/dnscms/events/migrations/0004_eventpage_featured_image.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.4 on 2024-05-09 20:36 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0003_rename_event_eventpage_eventoccurrence'), + ('wagtailimages', '0026_delete_uploadedimage'), + ] + + operations = [ + migrations.AddField( + model_name='eventpage', + name='featured_image', + field=models.ForeignKey(blank=True, help_text='Velg et bilde til bruk i programmet og andre visningsflater. Bør helst være et bilde eller en illustrasjon uten tekst.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'), + ), + ] diff --git a/dnscms/events/migrations/0005_eventpage_facebook_url_eventpage_price_member_and_more.py b/dnscms/events/migrations/0005_eventpage_facebook_url_eventpage_price_member_and_more.py new file mode 100644 index 0000000..dc65f7b --- /dev/null +++ b/dnscms/events/migrations/0005_eventpage_facebook_url_eventpage_price_member_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 5.0.4 on 2024-05-09 22:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0004_eventpage_featured_image'), + ] + + operations = [ + migrations.AddField( + model_name='eventpage', + name='facebook_url', + field=models.URLField(blank=True, help_text='Lenke direkte til arrangementet på Facebook', max_length=512), + ), + migrations.AddField( + model_name='eventpage', + name='price_member', + field=models.IntegerField(blank=True, help_text='Pris for medlemmer av DNS', null=True), + ), + migrations.AddField( + model_name='eventpage', + name='price_regular', + field=models.IntegerField(blank=True, help_text='Ordinær pris', null=True), + ), + migrations.AddField( + model_name='eventpage', + name='price_student', + field=models.IntegerField(blank=True, help_text='Pris for studenter', null=True), + ), + migrations.AddField( + model_name='eventpage', + name='ticket_url', + field=models.URLField(blank=True, help_text='Lenke direkte til billettkjøp, f.eks. TicketCo eller TicketMaster', max_length=512), + ), + ] diff --git a/dnscms/events/migrations/0006_alter_eventpage_featured_image_and_more.py b/dnscms/events/migrations/0006_alter_eventpage_featured_image_and_more.py new file mode 100644 index 0000000..aec360a --- /dev/null +++ b/dnscms/events/migrations/0006_alter_eventpage_featured_image_and_more.py @@ -0,0 +1,40 @@ +# Generated by Django 5.0.4 on 2024-05-09 23:03 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0005_eventpage_facebook_url_eventpage_price_member_and_more'), + ('wagtailimages', '0026_delete_uploadedimage'), + ] + + operations = [ + migrations.AlterField( + model_name='eventpage', + name='featured_image', + field=models.ForeignKey(blank=True, help_text='Velg et bilde til bruk i programmet og andre visningsflater. Bør være et bilde eller en illustrasjon uten tekst – ikke gjenbruk et Facebook-cover ukritisk!', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'), + ), + migrations.AlterField( + model_name='eventpage', + name='price_member', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='eventpage', + name='price_regular', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='eventpage', + name='price_student', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='eventpage', + name='ticket_url', + field=models.URLField(blank=True, help_text='Lenke direkte til billettkjøp, f.eks. TicketCo eller Ticketmaster', max_length=512), + ), + ] diff --git a/dnscms/events/migrations/0007_alter_eventpage_body.py b/dnscms/events/migrations/0007_alter_eventpage_body.py new file mode 100644 index 0000000..d6e6467 --- /dev/null +++ b/dnscms/events/migrations/0007_alter_eventpage_body.py @@ -0,0 +1,21 @@ +# Generated by Django 5.0.4 on 2024-05-09 23:09 + +import wagtail.blocks +import wagtail.fields +import wagtail.images.blocks +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0006_alter_eventpage_featured_image_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='eventpage', + name='body', + field=wagtail.fields.StreamField([('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.images.blocks.ImageChooserBlock())]), + ), + ] diff --git a/dnscms/events/models.py b/dnscms/events/models.py index c8e274a..5b4e458 100644 --- a/dnscms/events/models.py +++ b/dnscms/events/models.py @@ -1,7 +1,7 @@ from django.db import models -from grapple.models import GraphQLStreamfield, GraphQLString +from grapple.models import GraphQLImage, GraphQLInt, GraphQLStreamfield, GraphQLString from wagtail import blocks -from wagtail.admin.panels import FieldPanel +from wagtail.admin.panels import FieldPanel, FieldRowPanel, HelpPanel, MultiFieldPanel from wagtail.fields import StreamField from wagtail.images.blocks import ImageChooserBlock from wagtail.models import Page @@ -17,28 +17,92 @@ class EventIndex(Page): class EventPage(Page): # no children subpage_types = [] + # should not be able to be shown in menus + show_in_menus = False + + # inherited from Page: + # title = text + # slug = text (in promote panel) + # content_type = points to this model + # live = bool + # owner = page creator + # first_published_at = datetime + # last_published_at = datetime + # seo_title: text (in promote panel) + # search_description: text (in promote panel) + + featured_image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text=( + "Velg et bilde til bruk i programmet og andre visningsflater. " + "Bør være et bilde eller en illustrasjon uten tekst " + "– ikke gjenbruk et Facebook-cover ukritisk!" + ), + ) - # author = models.CharField(max_length=255) - # date = models.DateField("Post date") body = StreamField( [ - ("heading", blocks.CharBlock(form_classname="title")), ("paragraph", blocks.RichTextBlock()), ("image", ImageChooserBlock()), ] ) + ticket_url = models.URLField( + blank=True, + max_length=512, + help_text="Lenke direkte til billettkjøp, f.eks. TicketCo eller Ticketmaster", + ) + facebook_url = models.URLField( + blank=True, + max_length=512, + help_text="Lenke direkte til arrangementet på Facebook", + ) + + # "event_types": [13], + # "event_organizers": [390, 322], + # "start_time": "2024-05-07T17:00:00+00:00", + # "end_time": "2024-05-07T20:00:00+00:00", + # "venue": "Glassbaren", + # "venue_id": "55063", + + price_regular = models.IntegerField(null=True, blank=True) + price_student = models.IntegerField(null=True, blank=True) + price_member = models.IntegerField(null=True, blank=True) + + ticket_panels = [ + FieldPanel("ticket_url", heading="Billettkjøpslenke"), + FieldRowPanel( + children=[ + FieldPanel("price_regular", heading="Ordinær pris"), + FieldPanel("price_student", heading="Pris for studenter"), + FieldPanel("price_member", heading="Pris for medlemmer av DNS"), + ], + help_text="", + ), + HelpPanel(content="La alle prisfeltene stå tomme om arrangementet er gratis."), + ] + content_panels = Page.content_panels + [ - # FieldPanel('author'), - # FieldPanel('date'), + FieldPanel("featured_image"), FieldPanel("body"), + MultiFieldPanel( + heading="Priser og billettkjøp", + children=ticket_panels, + ), ] graphql_fields = [ - GraphQLString("heading"), - # GraphQLString("date"), - # GraphQLString("author"), + GraphQLImage("featured_image"), GraphQLStreamfield("body"), + GraphQLString("ticket_url"), + GraphQLString("facebook_url"), + GraphQLInt("price_regular"), + GraphQLInt("price_student"), + GraphQLInt("price_member"), ]