Skip to content
Snippets Groups Projects
Commit 3406eb99 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '11-rss-feed-for-upcoming-events' into 'master'

Resolve "RSS feed for upcoming events"

Closes #11

See merge request !4
parents 3f2e761e b98e05ec
No related branches found
No related tags found
1 merge request!4Resolve "RSS feed for upcoming events"
Pipeline #56246 failed
......@@ -13,6 +13,7 @@ Added
~~~~~
* Add link to public page to events list
* Add RSS feed of upcoming events
Fixed
~~~~~
......
......@@ -16,7 +16,7 @@ Licence
::
Copyright © 2018, 2021 Dominik George <dominik.george@teckids.org>
Copyright © 2018, 2021, 2022 Dominik George <dominik.george@teckids.org>
Copyright © 2019, 2022 Tom Teichler <tom.teichler@teckids.org>
Licenced under the EUPL, version 1.2 or later
......
......@@ -11,6 +11,6 @@ class DefaultConfig(AppConfig):
}
licence = "EUPL-1.2+"
copyright_info = (
([2018, 2021], "Dominik George", "dominik.george@teckids.org"),
([2018, 2021, 2022], "Dominik George", "dominik.george@teckids.org"),
([2019, 2022], "Tom Teichler", "tom.teichler@teckids.org"),
)
from datetime import datetime
from django.db import models
from django.urls import reverse
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from ckeditor.fields import RichTextField
......@@ -67,6 +69,9 @@ class Event(ExtensibleModel):
return self.date_registration >= now
return self.date_event > now
def get_absolute_url(self):
return reverse("event_by_name", kwargs={"slug": self.linked_group.short_name})
@property
def booked_percentage(self):
return self.linked_group.members.count() / self.max_participants * 100
......@@ -79,6 +84,10 @@ class Event(ExtensibleModel):
def owners_persons(self):
return self.linked_group.owners.all()
@classmethod
def upcoming_published_events(cls):
return Event.objects.filter(published=True, date_event__gte=now())
class Voucher(ExtensibleModel):
class Meta:
......
......@@ -40,6 +40,7 @@ urlpatterns = [
name="register_event_by_slug_start",
),
path("misc/set_email_needed/<slug:slug>", views.set_email_needed, name="set_email_needed"),
path("events/feed", views.UpcomingEventsRSSFeed(), name="upcoming_events_rss_feed"),
path("events/create", views.CreateEventView.as_view(), name="create_event"),
path("events/manage", views.manage_events, name="manage_events"),
path("vouchers/create", views.VoucherCreateView.as_view(), name="create_vouchers"),
......
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.syndication.views import Feed
from django.http import HttpRequest, HttpResponse
from django.shortcuts import redirect, render
from django.urls import reverse_lazy
from django.urls import reverse, reverse_lazy
from django.utils import timezone
from django.utils.decorators import method_decorator
from django.utils.text import slugify
......@@ -664,3 +665,34 @@ class TermEditView(PermissionRequiredMixin, AdvancedEditView):
template_name = "paweljong/term/edit.html"
success_url = reverse_lazy("terms")
success_message = _("The term has been saved.")
class UpcomingEventsRSSFeed(Feed):
"""RSS feed for published, upcoming events."""
def title(self):
return _("Upcoming events")
def link(self):
return reverse("index")
def feed_url(self):
return reverse("upcoming_events_rss_feed")
def description(self):
return _("Announcement feed of all upcoming events")
def ttl(self):
date_event = Event.upcoming_published_events().order_by("-date_event").first().date_event
date_now = timezone.now().date()
return (date_event - date_now).seconds
def items(self):
return Event.upcoming_published_events()
def item_title(self, item):
return item.display_name
def item_description(self, item):
return item.description
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment