Skip to content

Commit

Permalink
Implement Calendar
Browse files Browse the repository at this point in the history
  • Loading branch information
Merlin Buczek committed Jun 1, 2019
1 parent d4ebe07 commit b34f7dd
Show file tree
Hide file tree
Showing 22 changed files with 569 additions and 259 deletions.
20 changes: 20 additions & 0 deletions mpicms/base/models.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
from django.apps import apps
from django.db import models
from django.utils.translation import gettext as _
Expand All @@ -13,6 +14,7 @@
from wagtail.snippets.edit_handlers import SnippetChooserPanel

from mpicms.news.mixins import NewsMixin
from mpicms.events.models import Event


Page.show_in_menus_default = True
Expand Down Expand Up @@ -51,6 +53,24 @@ class HomePage(NewsMixin, Page):

content_panels = Page.content_panels

def get_context(self, request, *args, **kwargs):
context = super().get_context(request, *args, **kwargs)

# Events
events = []
for event in Event.objects.live():
events.append({
'title': event.title,
'start': event.start.isoformat(),
'end': event.end.isoformat(),
'url': event.get_url(request=request),
'color': '#006c66'
})

context["events"] = json.dumps(events)

return context

class Meta: # noqa
verbose_name = _("homepage")
verbose_name_plural = _("homepages")
Expand Down
71 changes: 0 additions & 71 deletions mpicms/events/date_filters.py

This file was deleted.

45 changes: 45 additions & 0 deletions mpicms/events/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Generated by Django 2.2.1 on 2019-06-01 11:08

from django.db import migrations, models
import django.db.models.deletion
import wagtail.core.fields


class Migration(migrations.Migration):

initial = True

dependencies = [
('wagtailcore', '0041_group_collection_permissions_verbose_name_plural'),
]

operations = [
migrations.CreateModel(
name='Event',
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')),
('start_date', models.DateTimeField()),
('end_date', models.DateTimeField(blank=True, null=True)),
('description', models.TextField(blank=True, max_length=400)),
('description_en', models.TextField(blank=True, max_length=400, null=True)),
('description_de', models.TextField(blank=True, max_length=400, null=True)),
('body', wagtail.core.fields.RichTextField(blank=True, verbose_name='content')),
('body_en', wagtail.core.fields.RichTextField(blank=True, null=True, verbose_name='content')),
('body_de', wagtail.core.fields.RichTextField(blank=True, null=True, verbose_name='content')),
],
options={
'ordering': ['start_date'],
},
bases=('wagtailcore.page',),
),
migrations.CreateModel(
name='EventIndex',
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')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
]
33 changes: 33 additions & 0 deletions mpicms/events/migrations/0002_auto_20190601_1604.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Generated by Django 2.2.1 on 2019-06-01 14:04

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('events', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='event',
name='end_time',
field=models.TimeField(blank=True, null=True),
),
migrations.AddField(
model_name='event',
name='start_time',
field=models.TimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='event',
name='end_date',
field=models.DateField(blank=True, null=True),
),
migrations.AlterField(
model_name='event',
name='start_date',
field=models.DateField(),
),
]
144 changes: 92 additions & 52 deletions mpicms/events/models.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,31 @@
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel, MultiFieldPanel
from wagtail.core.blocks import CharBlock, TextBlock, BlockQuoteBlock
from wagtail.core.fields import StreamField
from wagtail.core.models import Page
from wagtail.images.blocks import ImageChooserBlock
from wagtail.images.edit_handlers import ImageChooserPanel

from .mixins import AbstractEvent, AbstractPaginatedIndex
# from .utils import _DATE_FORMAT_RE
import json
from datetime import datetime

import datetime
import re
from django.core.exceptions import ValidationError
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db import models
from django.utils import timezone
from django.core.exceptions import ValidationError
# from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
# from django.db import models
# from django.utils import timezone
from django.utils.translation import gettext as _

from wagtail.admin.edit_handlers import FieldPanel, MultiFieldPanel
from wagtail.core.models import Page
# from wagtail.images.blocks import ImageChooserBlock
# from wagtail.images.edit_handlers import ImageChooserPanel
from wagtail.core.fields import RichTextField

from .date_filters import get_day_range, get_month_range, get_week_range, get_year_range
from .managers import DatedEventManager
from .utils import date_to_datetime
# from .date_filters import get_range
# from .managers import DatedEventManager
# from .utils import date_to_datetime


class Event(Page):
start_date = models.DateTimeField()
end_date = models.DateTimeField(blank=True, null=True)
objects = DatedEventManager()
description = models.TextField(max_length=400, help_text='Briefly describe your event', null=False, blank=True)
start_date = models.DateField()
end_date = models.DateField(blank=True, null=True)
start_time = models.TimeField(blank=True, null=True)
end_time = models.TimeField(blank=True, null=True)
# objects = DatedEventManager()
description = models.TextField(max_length=400, null=False, blank=True)
body = RichTextField(_("content"), blank=True)

parent_page_types = ['events.EventIndex']
Expand All @@ -38,13 +36,27 @@ class Event(Page):
MultiFieldPanel(
[
FieldPanel('start_date'),
FieldPanel('start_time'),
FieldPanel('end_date'),
FieldPanel('end_time'),
],
heading="Event Start / End Dates"
),
FieldPanel('body', classname="full"),
]

@property
def start(self):
if self.start_time:
return datetime.combine(self.start_date, self.start_time)
return self.start_date

@property
def end(self):
if self.end_time:
return datetime.combine(self.end_date, self.end_time)
return self.end_date

def clean(self):
"""Clean the model fields, if end_date is before start_date raise a ValidationError."""
super().clean()
Expand All @@ -57,38 +69,66 @@ class Meta(object): # noqa


class EventIndex(Page):
parent_page_types = []
parent_page_types = ['base.HomePage']
subpage_types = ['events.Event']

PAGINATE_BY = 3
# PAGINATE_BY = 3

# search_fields = Page.search_fields + [
# index.SearchField('body'),
# index.FilterField('date'),
# ]

content_panels = Page.content_panels
# promote_panels = [
# MultiFieldPanel(Page.promote_panels, "Common page configuration"),
# ]

def get_context(self, request, *args, **kwargs):
"""
Adds child pages to the context and paginates them.
"""
context = super().get_context(request, *args, **kwargs)
children = self.get_children().type(Event)

# Period
period = request.GET.get('scope', None)
start_date = request.GET.get('start_date', '')
if period:
self.get_start_end(period, start_date)
children.filter(start_date__gte=start_date).filter(end_date__lte=end_date)

# Pagination
paginator = Paginator(queryset, PAGINATE_BY)
page_num = request.GET.get('page', 1) or 1

try:
queryset = paginator.page(page_num)
except PageNotAnInteger:
queryset = paginator.page(1)
except EmptyPage:
queryset = paginator.page(paginator.num_pages)

context.update(
children=queryset,
paginator=paginator
)
return context

events = []
for child in self.get_children().type(Event).live().specific():
events.append({
'title': child.title,
'start': child.start.isoformat(),
'end': child.end.isoformat(),
'url': child.get_url(request=request),
'color': '#006c66'
})

context["events"] = json.dumps(events)

return context


# def get_context(self, request, *args, **kwargs):
# """
# Adds child pages to the context and paginates them.
# """
# context = super().get_context(request, *args, **kwargs)
# children = self.get_children().type(Event)

# # Period
# period = request.GET.get('scope', None)
# start_date = request.GET.get('start_date', '')
# if period:
# self.get_start_end(period, start_date)
# children.filter(start_date__gte=start_date).filter(end_date__lte=end_date)

# # Pagination
# paginator = Paginator(queryset, PAGINATE_BY)
# page_num = request.GET.get('page', 1) or 1

# try:
# queryset = paginator.page(page_num)
# except PageNotAnInteger:
# queryset = paginator.page(1)
# except EmptyPage:
# queryset = paginator.page(paginator.num_pages)

# context.update(
# children=queryset,
# paginator=paginator
# )
# return context
Loading

0 comments on commit b34f7dd

Please sign in to comment.