forked from CGM_Public/pretix_original
Allow plugins to filter subevents in the public calendar (#5457)
* Allow plugins to filter subevents in the public calendar * Add to docs * Review notes
This commit is contained in:
@@ -85,7 +85,8 @@ from pretix.presale.ical import get_public_ical
|
||||
from pretix.presale.signals import item_description, seatingframe_html_head
|
||||
from pretix.presale.views.organizer import (
|
||||
EventListMixin, add_subevents_for_days, days_for_template,
|
||||
filter_qs_by_attr, has_before_after, weeks_for_template,
|
||||
filter_qs_by_attr, filter_subevents_with_plugins, has_before_after,
|
||||
weeks_for_template,
|
||||
)
|
||||
|
||||
from . import (
|
||||
@@ -546,6 +547,12 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
||||
self.subevent = request.event.subevents.using(settings.DATABASE_REPLICA).filter(pk=kwargs['subevent'], active=True).first()
|
||||
if not self.subevent:
|
||||
raise Http404()
|
||||
|
||||
# Prevent direct access to subevents that are hidden by a plugin
|
||||
subevents = filter_subevents_with_plugins([self.subevent], self.request.sales_channel)
|
||||
if self.subevent not in subevents:
|
||||
raise Http404()
|
||||
|
||||
return super().get(request, *args, **kwargs)
|
||||
else:
|
||||
return super().get(request, *args, **kwargs)
|
||||
@@ -703,9 +710,14 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
||||
).using(settings.DATABASE_REPLICA),
|
||||
self.request
|
||||
),
|
||||
limit_before, after, ebd, set(), self.request.event,
|
||||
self.kwargs.get('cart_namespace'),
|
||||
voucher,
|
||||
before=limit_before,
|
||||
after=after,
|
||||
ebd=ebd,
|
||||
timezones=set(),
|
||||
event=self.request.event,
|
||||
cart_namespace=self.kwargs.get('cart_namespace'),
|
||||
voucher=voucher,
|
||||
sales_channel=self.request.sales_channel,
|
||||
)
|
||||
|
||||
# Hide names of subevents in event series where it is always the same. No need to show the name of the museum thousands of times
|
||||
@@ -762,9 +774,14 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
||||
).using(settings.DATABASE_REPLICA),
|
||||
self.request
|
||||
),
|
||||
limit_before, after, ebd, set(), self.request.event,
|
||||
self.kwargs.get('cart_namespace'),
|
||||
voucher,
|
||||
before=limit_before,
|
||||
after=after,
|
||||
ebd=ebd,
|
||||
timezones=set(),
|
||||
event=self.request.event,
|
||||
cart_namespace=self.kwargs.get('cart_namespace'),
|
||||
voucher=voucher,
|
||||
sales_channel=self.request.sales_channel,
|
||||
)
|
||||
|
||||
# Hide names of subevents in event series where it is always the same. No need to show the name of the museum thousands of times
|
||||
@@ -803,7 +820,7 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
||||
future_only=self.request.event.settings.event_calendar_future_only
|
||||
)
|
||||
else:
|
||||
context['subevent_list'] = self.request.event.subevents_sorted(
|
||||
subevents = self.request.event.subevents_sorted(
|
||||
filter_qs_by_attr(
|
||||
self.request.event.subevents_annotated(
|
||||
self.request.sales_channel,
|
||||
@@ -812,12 +829,14 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
||||
self.request
|
||||
)
|
||||
)
|
||||
subevents = filter_subevents_with_plugins(list(subevents), self.request.sales_channel)
|
||||
context['subevent_list'] = subevents
|
||||
if self.request.event.settings.event_list_available_only and not voucher:
|
||||
context['subevent_list'] = [
|
||||
se for se in context['subevent_list']
|
||||
se for se in subevents
|
||||
if not se.presale_has_ended and (se.best_availability_state is None or se.best_availability_state >= Quota.AVAILABILITY_RESERVED)
|
||||
]
|
||||
context['visible_events'] = len(context['subevent_list']) > 0
|
||||
context['visible_events'] = len(subevents) > 0
|
||||
return context
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user