Compare commits
2 Commits
5f354972d9
...
9ca9f5db11
| Author | SHA1 | Date | |
|---|---|---|---|
| 9ca9f5db11 | |||
| 696e6b8f11 |
+11
-8
@@ -2,6 +2,8 @@ from urllib.parse import urlencode
|
||||
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext, gettext_lazy as _
|
||||
from django.utils.translation import ngettext
|
||||
from wagtail.admin.ui.tables import Column, DateColumn
|
||||
from wagtail.admin.ui.tables.pages import PageStatusColumn, PageTitleColumn
|
||||
from wagtail.admin.views.pages.choose_parent import ChooseParentView
|
||||
@@ -18,8 +20,9 @@ class EventDateColumn(Column):
|
||||
return "—"
|
||||
if len(occurrences) == 1:
|
||||
local = timezone.localtime(occurrences[0].start)
|
||||
return local.strftime("%Y-%m-%d kl %H:%M")
|
||||
return f"{len(occurrences)} forekomster"
|
||||
return local.strftime(gettext("%Y-%m-%d at %H:%M"))
|
||||
count = len(occurrences)
|
||||
return ngettext("%(count)d occurrence", "%(count)d occurrences", count) % {"count": count}
|
||||
|
||||
|
||||
class OrganizersColumn(Column):
|
||||
@@ -64,22 +67,22 @@ class EventPageListingViewSet(PageListingViewSet):
|
||||
index_view_class = EventPageIndexView
|
||||
choose_parent_view_class = EventChooseParentView
|
||||
icon = "date"
|
||||
menu_label = "Arrangementer"
|
||||
menu_label = _("Events")
|
||||
menu_order = 1
|
||||
add_to_admin_menu = True
|
||||
ordering = "-latest_revision_created_at"
|
||||
|
||||
columns = [
|
||||
PageTitleColumn("title", label="Tittel", sort_key="title", classname="title"),
|
||||
EventDateColumn("event_date", label="Dato", width="13%"),
|
||||
OrganizersColumn("organizers", label="Arrangører", width="12%"),
|
||||
PageTitleColumn("title", label=_("Title"), sort_key="title", classname="title"),
|
||||
EventDateColumn("event_date", label=_("Date"), width="13%"),
|
||||
OrganizersColumn("organizers", label=_("Organizers"), width="12%"),
|
||||
DateColumn(
|
||||
"latest_revision_created_at",
|
||||
label="Oppdatert",
|
||||
label=_("Updated"),
|
||||
sort_key="latest_revision_created_at",
|
||||
width="10%",
|
||||
),
|
||||
PageStatusColumn("status", label="Status", sort_key="live", width="10%"),
|
||||
PageStatusColumn("status", label=_("Status"), sort_key="live", width="10%"),
|
||||
]
|
||||
|
||||
|
||||
|
||||
+70
-184
@@ -75,11 +75,12 @@ class EventCategory(models.Model):
|
||||
help_text=_("The name of the category as it will appear in URLs."),
|
||||
)
|
||||
show_in_filters = models.BooleanField(
|
||||
default=False, help_text="Skal denne kategorien være mulig å filtrere på i programmet?"
|
||||
default=False,
|
||||
help_text=_("Should this category be available as a filter in the event programme?"),
|
||||
)
|
||||
|
||||
PIG_CHOICES = [
|
||||
("", "Ingen"),
|
||||
("", _("None")),
|
||||
] + ALL_PIGS
|
||||
|
||||
pig = models.CharField(
|
||||
@@ -87,14 +88,14 @@ class EventCategory(models.Model):
|
||||
choices=PIG_CHOICES,
|
||||
default="",
|
||||
blank=True,
|
||||
help_text="Standardgris for arrangementer av denne typen.",
|
||||
help_text=_("Default pig for events of this kind."),
|
||||
)
|
||||
|
||||
panels = [
|
||||
TitleFieldPanel("name"),
|
||||
FieldPanel("slug"),
|
||||
FieldPanel("show_in_filters"),
|
||||
FieldPanel("pig", heading="Gris"),
|
||||
FieldPanel("pig", heading=_("Pig")),
|
||||
]
|
||||
|
||||
graphql_fields = [
|
||||
@@ -105,8 +106,8 @@ class EventCategory(models.Model):
|
||||
]
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Event category"
|
||||
verbose_name_plural = "Event categories"
|
||||
verbose_name = _("event category")
|
||||
verbose_name_plural = _("event categories")
|
||||
ordering = ["name"]
|
||||
|
||||
def __str__(self):
|
||||
@@ -134,8 +135,8 @@ class EventOrganizerLink(Orderable):
|
||||
return f"{self.organizer.name}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Arrangør"
|
||||
verbose_name_plural = "Arrangører"
|
||||
verbose_name = _("organizer")
|
||||
verbose_name_plural = _("organizers")
|
||||
constraints = [
|
||||
UniqueConstraint(
|
||||
"event", "organizer", name="event_organizer_link_event_organizer_unique"
|
||||
@@ -163,13 +164,13 @@ class EventOrganizer(ClusterableModel):
|
||||
blank=True,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="organizers",
|
||||
help_text="Om en samfundsforening eller et utvalg står bak, velg det her.",
|
||||
help_text=_("If a DNS association or committee is behind it, choose it here."),
|
||||
)
|
||||
|
||||
external_url = models.URLField(
|
||||
blank=True,
|
||||
max_length=512,
|
||||
help_text="Lenke til nettstedet til ekstern arrangør",
|
||||
help_text=_("Link to the external organizer's website"),
|
||||
)
|
||||
|
||||
panels = [
|
||||
@@ -178,15 +179,15 @@ class EventOrganizer(ClusterableModel):
|
||||
FieldPanel(
|
||||
"association",
|
||||
widget=AssociationChooserWidget(linked_fields={"association": "#id_association"}),
|
||||
heading="Intern arrangør",
|
||||
heading=_("Internal organizer"),
|
||||
),
|
||||
MultiFieldPanel(
|
||||
heading="Ekstern arrangør",
|
||||
heading=_("External organizer"),
|
||||
children=[
|
||||
FieldPanel(
|
||||
"external_url",
|
||||
heading="Nettsted",
|
||||
help_text="La denne stå tom om arrangøren finnes i lista over.",
|
||||
heading=_("Website"),
|
||||
help_text=_("Leave this empty if the organizer exists in the list above."),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -200,8 +201,8 @@ class EventOrganizer(ClusterableModel):
|
||||
]
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Event organizer"
|
||||
verbose_name_plural = "Event organizers"
|
||||
verbose_name = _("event organizer")
|
||||
verbose_name_plural = _("event organizers")
|
||||
ordering = ["name"]
|
||||
|
||||
def __str__(self):
|
||||
@@ -234,19 +235,19 @@ class EventPage(HeadlessMixin, WPImportedPageMixin, Page):
|
||||
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!"
|
||||
help_text=_(
|
||||
"Choose an image for use in the programme and other surfaces. "
|
||||
"Should be a photo or an illustration without too much text "
|
||||
"– don't reuse a Facebook cover uncritically!"
|
||||
),
|
||||
)
|
||||
|
||||
subtitle = models.CharField(
|
||||
blank=True,
|
||||
max_length=128,
|
||||
help_text=(
|
||||
"En kort tekst som kommer rett under under tittelen. "
|
||||
"La denne gjerne stå tom om du fikk plass til det meste i tittelen."
|
||||
help_text=_(
|
||||
"A short text that appears right below the title. "
|
||||
"Feel free to leave it empty if you fit most of it in the main title."
|
||||
),
|
||||
)
|
||||
lead = RichTextField(features=["italic", "link"], blank=True)
|
||||
@@ -262,8 +263,8 @@ class EventPage(HeadlessMixin, WPImportedPageMixin, Page):
|
||||
)
|
||||
|
||||
PIG_CHOICES = [
|
||||
("", "Ingen"),
|
||||
("automatic", "Automatisk"),
|
||||
("", _("None")),
|
||||
("automatic", _("Automatic")),
|
||||
] + ALL_PIGS
|
||||
|
||||
pig = models.CharField(
|
||||
@@ -271,21 +272,21 @@ class EventPage(HeadlessMixin, WPImportedPageMixin, Page):
|
||||
choices=PIG_CHOICES,
|
||||
default="automatic",
|
||||
blank=True,
|
||||
help_text=(
|
||||
"Grisen som henger på arrangementssiden. "
|
||||
"Automatisk fører til at en velges basert på arrangementets kategori."
|
||||
help_text=_(
|
||||
"The pig that hangs out on the event page. "
|
||||
"Automatic causes one to be chosen based on the event's category."
|
||||
),
|
||||
)
|
||||
|
||||
ticket_url = models.URLField(
|
||||
blank=True,
|
||||
max_length=1024,
|
||||
help_text="Lenke direkte til billettkjøp, f.eks. TicketCo eller Ticketmaster",
|
||||
help_text=_("Direct link to ticket purchase, e.g. TicketCo, Billetto or Ticketmaster"),
|
||||
)
|
||||
facebook_url = models.URLField(
|
||||
blank=True,
|
||||
max_length=1024,
|
||||
help_text="Lenke direkte til arrangementet på Facebook",
|
||||
help_text=_("Direct link to the event on Facebook"),
|
||||
)
|
||||
|
||||
free = models.BooleanField(null=False, default=False)
|
||||
@@ -294,62 +295,65 @@ class EventPage(HeadlessMixin, WPImportedPageMixin, Page):
|
||||
price_member = models.CharField(max_length=32, blank=True)
|
||||
|
||||
ticket_panels = [
|
||||
FieldPanel("free", heading="Gratis", help_text="Er dette arrangementet gratis for alle?"),
|
||||
FieldPanel("free", heading=_("Free"), help_text=_("Is this event free for everyone?")),
|
||||
MultiFieldPanel(
|
||||
children=[
|
||||
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"),
|
||||
FieldPanel("price_regular", heading=_("Regular price")),
|
||||
FieldPanel("price_student", heading=_("Price for students")),
|
||||
FieldPanel("price_member", heading=_("Price for DNS members")),
|
||||
],
|
||||
help_text="",
|
||||
),
|
||||
HelpPanel(
|
||||
content=mark_safe(
|
||||
"Skriv <strong>0</strong> om gratis. Tomt felt skjuler priskategorien. Om mulig, skriv kun tall."
|
||||
_(
|
||||
"Write <strong>0</strong> for free. "
|
||||
"An empty field hides the price category. "
|
||||
"If possible, write digits only."
|
||||
)
|
||||
)
|
||||
),
|
||||
],
|
||||
attrs={"id": "specific_pricing_panel"},
|
||||
),
|
||||
FieldPanel("ticket_url", heading="Billettkjøpslenke"),
|
||||
FieldPanel("ticket_url", heading=_("Ticket purchase link")),
|
||||
]
|
||||
|
||||
content_panels = Page.content_panels + [
|
||||
FieldPanel("subtitle", heading="Undertittel"),
|
||||
FieldPanel("subtitle", heading=_("Subtitle")),
|
||||
FieldPanel("featured_image"),
|
||||
FieldPanel("lead", heading="Ingress"),
|
||||
FieldPanel("lead", heading=_("Lead")),
|
||||
FieldPanel("body"),
|
||||
FieldPanel("categories", widget=forms.CheckboxSelectMultiple),
|
||||
MultiFieldPanel(
|
||||
heading="Arrangører",
|
||||
heading=_("Organizers"),
|
||||
children=[
|
||||
HelpPanel(
|
||||
content=("Hvem står bak arrangementet?"),
|
||||
content=_("Who is behind the event?"),
|
||||
),
|
||||
MultipleChooserPanel(
|
||||
"organizer_links", chooser_field_name="organizer", label="Arrangør"
|
||||
"organizer_links", chooser_field_name="organizer", label=_("Organizer")
|
||||
),
|
||||
],
|
||||
),
|
||||
FieldPanel("pig", heading="Gris"),
|
||||
FieldPanel("pig", heading=_("Pig")),
|
||||
FieldPanel(
|
||||
"facebook_url",
|
||||
heading="Facebook-lenke",
|
||||
help_text="Lenke direkte til arrangementet på Facebook.",
|
||||
heading=_("Facebook link"),
|
||||
help_text=_("Direct link to the event on Facebook."),
|
||||
),
|
||||
MultiFieldPanel(heading="Priser og billettkjøp", children=ticket_panels),
|
||||
MultiFieldPanel(heading=_("Pricing and tickets"), children=ticket_panels),
|
||||
MultiFieldPanel(
|
||||
heading="Dato, tid og lokale",
|
||||
heading=_("Date, time and venue"),
|
||||
children=[
|
||||
HelpPanel(
|
||||
content=(
|
||||
"Om arrangementet går over flere dager, "
|
||||
"legg inn hver dag som en egen forekomst."
|
||||
content=_(
|
||||
"If the event spans several days, add each day as a separate occurrence."
|
||||
),
|
||||
),
|
||||
InlinePanel("occurrences", min_num=1, label="Forekomst"),
|
||||
InlinePanel("occurrences", min_num=1, label=_("Occurrence")),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -552,22 +556,24 @@ class EventOccurrence(Orderable):
|
||||
blank=True,
|
||||
max_length=128,
|
||||
help_text=mark_safe(
|
||||
"Bruk denne <em>om ingen av lokalene som kan velges til venstre</em> passer. "
|
||||
"F.eks. <em>Frederikkeplassen</em> eller <em>Sirkusteltet</em>."
|
||||
_(
|
||||
"Use this <em>if none of the venues that can be selected on the left</em> fit. "
|
||||
"E.g. <em>Frederikkeplassen</em> or <em>Sirkusteltet</em>."
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
panels = [
|
||||
FieldRowPanel(
|
||||
children=[
|
||||
FieldPanel("start", heading="Start"),
|
||||
FieldPanel("end", heading="Slutt"),
|
||||
FieldPanel("start", heading=_("Start")),
|
||||
FieldPanel("end", heading=_("End")),
|
||||
],
|
||||
),
|
||||
FieldRowPanel(
|
||||
children=[
|
||||
FieldPanel("venue", heading="Lokale"),
|
||||
FieldPanel("venue_custom", heading="Lokale som fritekst"),
|
||||
FieldPanel("venue", heading=_("Venue")),
|
||||
FieldPanel("venue_custom", heading=_("Venue as free text")),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -582,138 +588,18 @@ class EventOccurrence(Orderable):
|
||||
def clean(self):
|
||||
if self.venue and self.venue_custom:
|
||||
raise ValidationError(
|
||||
{"venue_custom": "Du kan ikke både velge et lokale og skrive noe i dette feltet."}
|
||||
{
|
||||
"venue_custom": _(
|
||||
"You can't both pick a venue and write something in this field."
|
||||
)
|
||||
}
|
||||
)
|
||||
if not self.venue and not self.venue_custom:
|
||||
raise ValidationError({"venue": "Lokale er påkrevd."})
|
||||
raise ValidationError({"venue": _("Venue is required.")})
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.start}--{self.end}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Forekomst"
|
||||
verbose_name_plural = "Forekomster"
|
||||
|
||||
|
||||
sample_legacy_event_json = """
|
||||
{
|
||||
"id": 64573,
|
||||
"date": "2023-12-27T11:28:34",
|
||||
"date_gmt": "2023-12-27T10:28:34",
|
||||
"guid": {
|
||||
"rendered": "https://studentersamfundet.no/?post_type=event&p=64573"
|
||||
},
|
||||
"modified": "2023-12-27T11:44:11",
|
||||
"modified_gmt": "2023-12-27T10:44:11",
|
||||
"slug": "quiz-147-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2",
|
||||
"status": "publish",
|
||||
"type": "event",
|
||||
"link": "https://studentersamfundet.no/arrangement/quiz-147-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2/",
|
||||
"title": {
|
||||
"rendered": "QUIZ",
|
||||
"decoded": "QUIZ"
|
||||
},
|
||||
"content": {
|
||||
"rendered": "\n<p>Det Norske Studentersamfund inviterer til quiz hver tirsdag kl. 19:00.</p>\n\n\n\n<p>Vi serverer 50 spørsmål som kan spenne seg fra one hit wonders fra 80-tallet, universets uendelighet, dyrelivets merkverdigheter og mye, mye mer!</p>\n\n\n\n<p>Quiz på Chateau Neuf er åpent for alle. Vinnere og “lucky losers” vil bli utnevnt hver kveld. Lag som er over seks personer er tillatt, men da trekkes dere for ett poeng per deltaker per runde.</p>\n\n\n\n<p>For de som ønsker å være med på sammenlagtkonkurransen for høsten vil den regnes ut for de tolv beste prestasjonene laget leverer. Så det vil fremdeles være god sjanse for å vinne sammenlagt selv dere må droppe en quiz eller to for eksamener eller andre forpliktelser.</p>\n\n\n\n<p>Velkommen quizglade mennesker!</p>\n\n\n\n<p>Gratis inngang!</p>\n",
|
||||
"protected": false
|
||||
},
|
||||
"excerpt": {
|
||||
"rendered": "<p>Det Norske Studentersamfund inviterer til quiz hver tirsdag kl. 19:00. Vi serverer 50 spørsmål som kan spenne seg fra one hit wonders fra 80-tallet, universets uendelighet, dyrelivets merkverdigheter og mye, mye mer! Quiz på Chateau Neuf er åpent for alle. Vinnere og “lucky losers” vil bli utnevnt hver kveld. Lag som er over seks personer […]</p>\n",
|
||||
"protected": false
|
||||
},
|
||||
"author": 2150,
|
||||
"featured_media": 64585,
|
||||
"template": "",
|
||||
"meta": [],
|
||||
"event_types": [13],
|
||||
"event_organizers": [390, 322],
|
||||
"facebook_url": "https://fb.me/e/2RDR5pZdr",
|
||||
"ticket_url": "",
|
||||
"price_regular": "",
|
||||
"price_member": "",
|
||||
"start_time": "2024-05-07T17:00:00+00:00",
|
||||
"end_time": "2024-05-07T20:00:00+00:00",
|
||||
"venue": "Glassbaren",
|
||||
"venue_id": "55063",
|
||||
"thumbnail": {
|
||||
"thumbnail": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-150x150.png",
|
||||
"medium": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-300x169.png",
|
||||
"medium_large": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-768x433.png",
|
||||
"large": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1280x720.png",
|
||||
"1536x1536": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1536x865.png",
|
||||
"2048x2048": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1.png",
|
||||
"four-column": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-393x342.png",
|
||||
"six-column": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-608x342.png",
|
||||
"extra-large": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1600x901.png",
|
||||
"newsletter-half": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-320x190.png",
|
||||
"newsletter-third": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-213x126.png",
|
||||
"featured": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1200x480.png"
|
||||
},
|
||||
"_links": {
|
||||
"self": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events/64573"
|
||||
}
|
||||
],
|
||||
"collection": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events"
|
||||
}
|
||||
],
|
||||
"about": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/types/event"
|
||||
}
|
||||
],
|
||||
"author": [
|
||||
{
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/users/2150"
|
||||
}
|
||||
],
|
||||
"version-history": [
|
||||
{
|
||||
"count": 1,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events/64573/revisions"
|
||||
}
|
||||
],
|
||||
"predecessor-version": [
|
||||
{
|
||||
"id": 64574,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events/64573/revisions/64574"
|
||||
}
|
||||
],
|
||||
"wp:featuredmedia": [
|
||||
{
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/media/64585"
|
||||
}
|
||||
],
|
||||
"wp:attachment": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/media?parent=64573"
|
||||
}
|
||||
],
|
||||
"wp:term": [
|
||||
{
|
||||
"taxonomy": "event_type",
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/event_types?post=64573"
|
||||
},
|
||||
{
|
||||
"taxonomy": "event_organizer",
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/event_organizers?post=64573"
|
||||
}
|
||||
],
|
||||
"curies": [
|
||||
{
|
||||
"name": "wp",
|
||||
"href": "https://api.w.org/{rel}",
|
||||
"templated": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
"""
|
||||
verbose_name = _("occurrence")
|
||||
verbose_name_plural = _("occurrences")
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
{
|
||||
"id": 64573,
|
||||
"date": "2023-12-27T11:28:34",
|
||||
"date_gmt": "2023-12-27T10:28:34",
|
||||
"guid": {
|
||||
"rendered": "https://studentersamfundet.no/?post_type=event&p=64573"
|
||||
},
|
||||
"modified": "2023-12-27T11:44:11",
|
||||
"modified_gmt": "2023-12-27T10:44:11",
|
||||
"slug": "quiz-147-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2",
|
||||
"status": "publish",
|
||||
"type": "event",
|
||||
"link": "https://studentersamfundet.no/arrangement/quiz-147-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-2-2-2-2-2-2-2-2-2-2-2-2-2/",
|
||||
"title": {
|
||||
"rendered": "QUIZ",
|
||||
"decoded": "QUIZ"
|
||||
},
|
||||
"content": {
|
||||
"rendered": "\n<p>Det Norske Studentersamfund inviterer til quiz hver tirsdag kl. 19:00.</p>\n\n\n\n<p>Vi serverer 50 spørsmål som kan spenne seg fra one hit wonders fra 80-tallet, universets uendelighet, dyrelivets merkverdigheter og mye, mye mer!</p>\n\n\n\n<p>Quiz på Chateau Neuf er åpent for alle. Vinnere og “lucky losers” vil bli utnevnt hver kveld. Lag som er over seks personer er tillatt, men da trekkes dere for ett poeng per deltaker per runde.</p>\n\n\n\n<p>For de som ønsker å være med på sammenlagtkonkurransen for høsten vil den regnes ut for de tolv beste prestasjonene laget leverer. Så det vil fremdeles være god sjanse for å vinne sammenlagt selv dere må droppe en quiz eller to for eksamener eller andre forpliktelser.</p>\n\n\n\n<p>Velkommen quizglade mennesker!</p>\n\n\n\n<p>Gratis inngang!</p>\n",
|
||||
"protected": false
|
||||
},
|
||||
"excerpt": {
|
||||
"rendered": "<p>Det Norske Studentersamfund inviterer til quiz hver tirsdag kl. 19:00. Vi serverer 50 spørsmål som kan spenne seg fra one hit wonders fra 80-tallet, universets uendelighet, dyrelivets merkverdigheter og mye, mye mer! Quiz på Chateau Neuf er åpent for alle. Vinnere og “lucky losers” vil bli utnevnt hver kveld. Lag som er over seks personer […]</p>\n",
|
||||
"protected": false
|
||||
},
|
||||
"author": 2150,
|
||||
"featured_media": 64585,
|
||||
"template": "",
|
||||
"meta": [],
|
||||
"event_types": [13],
|
||||
"event_organizers": [390, 322],
|
||||
"facebook_url": "https://fb.me/e/2RDR5pZdr",
|
||||
"ticket_url": "",
|
||||
"price_regular": "",
|
||||
"price_member": "",
|
||||
"start_time": "2024-05-07T17:00:00+00:00",
|
||||
"end_time": "2024-05-07T20:00:00+00:00",
|
||||
"venue": "Glassbaren",
|
||||
"venue_id": "55063",
|
||||
"thumbnail": {
|
||||
"thumbnail": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-150x150.png",
|
||||
"medium": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-300x169.png",
|
||||
"medium_large": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-768x433.png",
|
||||
"large": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1280x720.png",
|
||||
"1536x1536": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1536x865.png",
|
||||
"2048x2048": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1.png",
|
||||
"four-column": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-393x342.png",
|
||||
"six-column": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-608x342.png",
|
||||
"extra-large": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1600x901.png",
|
||||
"newsletter-half": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-320x190.png",
|
||||
"newsletter-third": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-213x126.png",
|
||||
"featured": "https://studentersamfundet.no/wp/wp-content/uploads/2023/12/quiz-header-1-1200x480.png"
|
||||
},
|
||||
"_links": {
|
||||
"self": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events/64573"
|
||||
}
|
||||
],
|
||||
"collection": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events"
|
||||
}
|
||||
],
|
||||
"about": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/types/event"
|
||||
}
|
||||
],
|
||||
"author": [
|
||||
{
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/users/2150"
|
||||
}
|
||||
],
|
||||
"version-history": [
|
||||
{
|
||||
"count": 1,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events/64573/revisions"
|
||||
}
|
||||
],
|
||||
"predecessor-version": [
|
||||
{
|
||||
"id": 64574,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/events/64573/revisions/64574"
|
||||
}
|
||||
],
|
||||
"wp:featuredmedia": [
|
||||
{
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/media/64585"
|
||||
}
|
||||
],
|
||||
"wp:attachment": [
|
||||
{
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/media?parent=64573"
|
||||
}
|
||||
],
|
||||
"wp:term": [
|
||||
{
|
||||
"taxonomy": "event_type",
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/event_types?post=64573"
|
||||
},
|
||||
{
|
||||
"taxonomy": "event_organizer",
|
||||
"embeddable": true,
|
||||
"href": "https://studentersamfundet.no/wp-json/wp/v2/event_organizers?post=64573"
|
||||
}
|
||||
],
|
||||
"curies": [
|
||||
{
|
||||
"name": "wp",
|
||||
"href": "https://api.w.org/{rel}",
|
||||
"templated": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from wagtail.admin.viewsets.chooser import ChooserViewSet
|
||||
|
||||
|
||||
@@ -5,10 +6,10 @@ class EventOrganizerChooserViewSet(ChooserViewSet):
|
||||
model = "events.EventOrganizer"
|
||||
icon = "group"
|
||||
per_page = 30
|
||||
page_title = "Choose organizers"
|
||||
choose_one_text = "Choose an organizer"
|
||||
choose_another_text = "Choose another organizer"
|
||||
edit_item_text = "Edit this organizer"
|
||||
page_title = _("Choose organizers")
|
||||
choose_one_text = _("Choose an organizer")
|
||||
choose_another_text = _("Choose another organizer")
|
||||
edit_item_text = _("Edit this organizer")
|
||||
form_fields = ["name", "association", "external_url"]
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
@@ -7,14 +7,49 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dnscms\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-05-19 20:44+0200\n"
|
||||
"POT-Creation-Date: 2026-05-19 21:17+0200\n"
|
||||
"Language: nb\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: events/models.py:73 events/models.py:155
|
||||
#: events/admin.py:23
|
||||
msgid "%Y-%m-%d at %H:%M"
|
||||
msgstr "%Y-%m-%d kl %H:%M"
|
||||
|
||||
#: events/admin.py:25
|
||||
#, python-format
|
||||
msgid "%(count)d occurrence"
|
||||
msgid_plural "%(count)d occurrences"
|
||||
msgstr[0] "%(count)d forekomst"
|
||||
msgstr[1] "%(count)d forekomster"
|
||||
|
||||
#: events/admin.py:70
|
||||
msgid "Events"
|
||||
msgstr "Arrangementer"
|
||||
|
||||
#: events/admin.py:76
|
||||
msgid "Title"
|
||||
msgstr "Tittel"
|
||||
|
||||
#: events/admin.py:77
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
#: events/admin.py:78 events/models.py:333
|
||||
msgid "Organizers"
|
||||
msgstr "Arrangører"
|
||||
|
||||
#: events/admin.py:81
|
||||
msgid "Updated"
|
||||
msgstr "Oppdatert"
|
||||
|
||||
#: events/admin.py:85
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: events/models.py:73 events/models.py:156
|
||||
msgid "slug"
|
||||
msgstr "permalenke"
|
||||
|
||||
@@ -22,18 +57,248 @@ msgstr "permalenke"
|
||||
msgid "The name of the category as it will appear in URLs."
|
||||
msgstr "Navnet på kategorien slik det vil vises i URL-er."
|
||||
|
||||
#: events/models.py:157
|
||||
#: events/models.py:79
|
||||
msgid "Should this category be available as a filter in the event programme?"
|
||||
msgstr "Skal denne kategorien være mulig å filtrere på i programmet?"
|
||||
|
||||
#: events/models.py:83 events/models.py:266
|
||||
msgid "None"
|
||||
msgstr "Ingen"
|
||||
|
||||
#: events/models.py:91
|
||||
msgid "Default pig for events of this kind."
|
||||
msgstr "Standardgris for arrangementer av denne typen."
|
||||
|
||||
#: events/models.py:98 events/models.py:343
|
||||
msgid "Pig"
|
||||
msgstr "Gris"
|
||||
|
||||
#: events/models.py:109
|
||||
msgid "event category"
|
||||
msgstr "arrangementskategori"
|
||||
|
||||
#: events/models.py:110
|
||||
msgid "event categories"
|
||||
msgstr "arrangementskategorier"
|
||||
|
||||
#: events/models.py:138
|
||||
msgid "organizer"
|
||||
msgstr "arrangør"
|
||||
|
||||
#: events/models.py:139
|
||||
msgid "organizers"
|
||||
msgstr "arrangører"
|
||||
|
||||
#: events/models.py:158
|
||||
msgid "The name of the organizer as it will appear in URLs."
|
||||
msgstr "Navnet på arrangøren slik det vil vises i URL-er."
|
||||
|
||||
#: events/models.py:395
|
||||
#: events/models.py:167
|
||||
msgid "If a DNS association or committee is behind it, choose it here."
|
||||
msgstr "Om en samfundsforening eller -utvalg står bak, velg det her."
|
||||
|
||||
#: events/models.py:173
|
||||
msgid "Link to the external organizer's website"
|
||||
msgstr "Lenke til nettstedet til ekstern arrangør"
|
||||
|
||||
#: events/models.py:182
|
||||
msgid "Internal organizer"
|
||||
msgstr "Intern arrangør"
|
||||
|
||||
#: events/models.py:185
|
||||
msgid "External organizer"
|
||||
msgstr "Ekstern arrangør"
|
||||
|
||||
#: events/models.py:189
|
||||
msgid "Website"
|
||||
msgstr "Nettsted"
|
||||
|
||||
#: events/models.py:190
|
||||
msgid "Leave this empty if the organizer exists in the list above."
|
||||
msgstr "La denne stå tom om arrangøren finnes i lista over."
|
||||
|
||||
#: events/models.py:204
|
||||
msgid "event organizer"
|
||||
msgstr "arrangør"
|
||||
|
||||
#: events/models.py:205
|
||||
msgid "event organizers"
|
||||
msgstr "arrangører"
|
||||
|
||||
#: events/models.py:239
|
||||
msgid ""
|
||||
"Choose an image for use in the programme and other surfaces. Should be a "
|
||||
"photo or an illustration without too much text – don't reuse a Facebook "
|
||||
"cover uncritically!"
|
||||
msgstr ""
|
||||
"Velg et bilde til bruk i programmet og andre visningsflater. Bør være et "
|
||||
"bilde eller en illustrasjon uten for mye tekst – ikke gjenbruk et Facebook-"
|
||||
"cover ukritisk!"
|
||||
|
||||
#: events/models.py:249
|
||||
msgid ""
|
||||
"A short text that appears right below the title. Feel free to leave it empty "
|
||||
"if you fit most of it in the main title."
|
||||
msgstr ""
|
||||
"En kort tekst som kommer rett under tittelen. La denne gjerne stå tom om du "
|
||||
"fikk plass til det meste i hovedtittelen."
|
||||
|
||||
#: events/models.py:267
|
||||
msgid "Automatic"
|
||||
msgstr "Automatisk"
|
||||
|
||||
#: events/models.py:276
|
||||
msgid ""
|
||||
"The pig that hangs out on the event page. Automatic causes one to be chosen "
|
||||
"based on the event's category."
|
||||
msgstr ""
|
||||
"Grisen som henger på arrangementssiden. Automatisk fører til at en velges "
|
||||
"basert på arrangementets kategori."
|
||||
|
||||
#: events/models.py:284
|
||||
msgid "Direct link to ticket purchase, e.g. TicketCo, Billetto or Ticketmaster"
|
||||
msgstr "Lenke direkte til billettkjøp, f.eks. TicketCo, Billetto eller Ticketmaster"
|
||||
|
||||
#: events/models.py:289
|
||||
msgid "Direct link to the event on Facebook"
|
||||
msgstr "Lenke direkte til arrangementet på Facebook"
|
||||
|
||||
#: events/models.py:299
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: events/models.py:299
|
||||
msgid "Is this event free for everyone?"
|
||||
msgstr "Er dette arrangementet gratis for alle?"
|
||||
|
||||
#: events/models.py:305
|
||||
msgid "Regular price"
|
||||
msgstr "Ordinær pris"
|
||||
|
||||
#: events/models.py:306
|
||||
msgid "Price for students"
|
||||
msgstr "Pris for studenter"
|
||||
|
||||
#: events/models.py:307
|
||||
msgid "Price for DNS members"
|
||||
msgstr "Pris for medlemmer av DNS"
|
||||
|
||||
#: events/models.py:314
|
||||
msgid ""
|
||||
"Write <strong>0</strong> for free. An empty field hides the price category. "
|
||||
"If possible, write digits only."
|
||||
msgstr ""
|
||||
"Skriv <strong>0</strong> om gratis. Tomt felt skjuler priskategorien. Om "
|
||||
"mulig, skriv kun tall."
|
||||
|
||||
#: events/models.py:323
|
||||
msgid "Ticket purchase link"
|
||||
msgstr "Billettkjøpslenke"
|
||||
|
||||
#: events/models.py:327
|
||||
msgid "Subtitle"
|
||||
msgstr "Undertittel"
|
||||
|
||||
#: events/models.py:329
|
||||
msgid "Lead"
|
||||
msgstr "Ingress"
|
||||
|
||||
#: events/models.py:336
|
||||
msgid "Who is behind the event?"
|
||||
msgstr "Hvem står bak arrangementet?"
|
||||
|
||||
#: events/models.py:339
|
||||
msgid "Organizer"
|
||||
msgstr "Arrangør"
|
||||
|
||||
#: events/models.py:346
|
||||
msgid "Facebook link"
|
||||
msgstr "Facebook-lenke"
|
||||
|
||||
#: events/models.py:347
|
||||
msgid "Direct link to the event on Facebook."
|
||||
msgstr "Lenke direkte til arrangementet på Facebook."
|
||||
|
||||
#: events/models.py:349
|
||||
msgid "Pricing and tickets"
|
||||
msgstr "Priser og billettkjøp"
|
||||
|
||||
#: events/models.py:351
|
||||
msgid "Date, time and venue"
|
||||
msgstr "Dato, tid og lokale"
|
||||
|
||||
#: events/models.py:355
|
||||
msgid "If the event spans several days, add each day as a separate occurrence."
|
||||
msgstr "Om arrangementet går over flere dager, legg inn hver dag som en egen forekomst."
|
||||
|
||||
#: events/models.py:359
|
||||
msgid "Occurrence"
|
||||
msgstr "Forekomst"
|
||||
|
||||
#: events/models.py:402
|
||||
msgid "event"
|
||||
msgstr "arrangement"
|
||||
|
||||
#: events/models.py:396
|
||||
#: events/models.py:403
|
||||
msgid "events"
|
||||
msgstr "arrangementer"
|
||||
|
||||
#: events/models.py:563
|
||||
msgid ""
|
||||
"Use this <em>if none of the venues that can be selected on the left</em> "
|
||||
"fit. E.g. <em>Frederikkeplassen</em> or <em>Sirkusteltet</em>."
|
||||
msgstr ""
|
||||
"Bruk denne <em>om ingen av lokalene som kan velges til venstre</em> passer. "
|
||||
"F.eks. <em>Frederikkeplassen</em> eller <em>Sirkusteltet</em>."
|
||||
|
||||
#: events/models.py:572
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
|
||||
#: events/models.py:573
|
||||
msgid "End"
|
||||
msgstr "Slutt"
|
||||
|
||||
#: events/models.py:578
|
||||
msgid "Venue"
|
||||
msgstr "Lokale"
|
||||
|
||||
#: events/models.py:579
|
||||
msgid "Venue as free text"
|
||||
msgstr "Lokale som fritekst"
|
||||
|
||||
#: events/models.py:596
|
||||
msgid "You can't both pick a venue and write something in this field."
|
||||
msgstr "Du kan ikke både velge et lokale og skrive noe i dette feltet."
|
||||
|
||||
#: events/models.py:601
|
||||
msgid "Venue is required."
|
||||
msgstr "Lokale er påkrevd."
|
||||
|
||||
#: events/models.py:607
|
||||
msgid "occurrence"
|
||||
msgstr "forekomst"
|
||||
|
||||
#: events/models.py:608
|
||||
msgid "occurrences"
|
||||
msgstr "forekomster"
|
||||
|
||||
#: events/views.py:9
|
||||
msgid "Choose organizers"
|
||||
msgstr "Velg arrangører"
|
||||
|
||||
#: events/views.py:10
|
||||
msgid "Choose an organizer"
|
||||
msgstr "Velg en arrangør"
|
||||
|
||||
#: events/views.py:11
|
||||
msgid "Choose another organizer"
|
||||
msgstr "Velg en annen arrangør"
|
||||
|
||||
#: events/views.py:12
|
||||
msgid "Edit this organizer"
|
||||
msgstr "Rediger denne arrangøren"
|
||||
|
||||
#: images/models.py:40
|
||||
msgid "image"
|
||||
msgstr "bilde"
|
||||
|
||||
Reference in New Issue
Block a user