Skip to content
Snippets Groups Projects
Verified Commit 1f2fb9ec authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Add RSS feed of upcoming events

parent 3f2e761e
No related branches found
No related tags found
1 merge request!4Resolve "RSS feed for upcoming events"
Pipeline #56233 canceled
...@@ -13,6 +13,7 @@ Added ...@@ -13,6 +13,7 @@ Added
~~~~~ ~~~~~
* Add link to public page to events list * Add link to public page to events list
* Add RSS feed of upcoming events
Fixed Fixed
~~~~~ ~~~~~
......
from datetime import datetime from datetime import datetime
from django.db import models 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 django.utils.translation import gettext_lazy as _
from ckeditor.fields import RichTextField from ckeditor.fields import RichTextField
...@@ -67,6 +69,9 @@ class Event(ExtensibleModel): ...@@ -67,6 +69,9 @@ class Event(ExtensibleModel):
return self.date_registration >= now return self.date_registration >= now
return self.date_event > now return self.date_event > now
def get_absolute_url(self):
return reverse("event_by_name", kwargs={"slug": self.linked_group.short_name})
@property @property
def booked_percentage(self): def booked_percentage(self):
return self.linked_group.members.count() / self.max_participants * 100 return self.linked_group.members.count() / self.max_participants * 100
...@@ -79,6 +84,10 @@ class Event(ExtensibleModel): ...@@ -79,6 +84,10 @@ class Event(ExtensibleModel):
def owners_persons(self): def owners_persons(self):
return self.linked_group.owners.all() 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 Voucher(ExtensibleModel):
class Meta: class Meta:
......
...@@ -40,6 +40,7 @@ urlpatterns = [ ...@@ -40,6 +40,7 @@ urlpatterns = [
name="register_event_by_slug_start", name="register_event_by_slug_start",
), ),
path("misc/set_email_needed/<slug:slug>", views.set_email_needed, name="set_email_needed"), path("misc/set_email_needed/<slug:slug>", views.set_email_needed, name="set_email_needed"),
path("events/feed", views.UpcomingEventsRSSFeed.as_view(), name="upcoming_events_rss_feed"),
path("events/create", views.CreateEventView.as_view(), name="create_event"), path("events/create", views.CreateEventView.as_view(), name="create_event"),
path("events/manage", views.manage_events, name="manage_events"), path("events/manage", views.manage_events, name="manage_events"),
path("vouchers/create", views.VoucherCreateView.as_view(), name="create_vouchers"), path("vouchers/create", views.VoucherCreateView.as_view(), name="create_vouchers"),
......
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.syndication.views import Feed
from django.http import HttpRequest, HttpResponse from django.http import HttpRequest, HttpResponse
from django.shortcuts import redirect, render 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 import timezone
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.text import slugify from django.utils.text import slugify
...@@ -664,3 +665,34 @@ class TermEditView(PermissionRequiredMixin, AdvancedEditView): ...@@ -664,3 +665,34 @@ class TermEditView(PermissionRequiredMixin, AdvancedEditView):
template_name = "paweljong/term/edit.html" template_name = "paweljong/term/edit.html"
success_url = reverse_lazy("terms") success_url = reverse_lazy("terms")
success_message = _("The term has been saved.") 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()
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