From 07a7b40fb3fd77a83eae4cc902398f855706a26f Mon Sep 17 00:00:00 2001 From: Thibaut Born Date: Wed, 19 Jun 2024 16:54:48 +0200 Subject: [PATCH 1/3] convert values for event_listing to datetime context: the start and end values are later checked against datetime objects in the expand_events,which broke due to the passed DateTime and String formats (depending on the query) --- plone/app/event/browser/event_listing.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plone/app/event/browser/event_listing.py b/plone/app/event/browser/event_listing.py index 55c0f2e1..735eb0ab 100644 --- a/plone/app/event/browser/event_listing.py +++ b/plone/app/event/browser/event_listing.py @@ -1,6 +1,8 @@ from calendar import monthrange from datetime import date +from datetime import datetime from datetime import timedelta +from DateTime import DateTime from plone.app.contenttypes.behaviors.collection import ISyndicatableCollection from plone.app.event import _ from plone.app.event.base import _prepare_range @@ -238,7 +240,20 @@ def _expand_events_start_end(self, start, end): r = end.get("range") if r == "min": se["start"] = q + se = self.convert_values_to_datetime(se) return se["start"], se["end"] + + def convert_values_to_datetime(self, se): + # needed to make the comparisons possible between dates in the expand_events method + for key, time in se.items(): + if isinstance(time, DateTime): + se[key] = time.asdatetime() + if isinstance(time, str): + tz = self.now.tzinfo + naive_time = datetime.fromisoformat(time) + aware_time= naive_time.replace(tzinfo=tz) + se[key] = aware_time + return se def formatted_date(self, occ): provider = getMultiAdapter( From bcb489b4237f4d8c7c1f1886b79e7f922b6d33ce Mon Sep 17 00:00:00 2001 From: Thibaut Born Date: Thu, 20 Jun 2024 13:12:35 +0200 Subject: [PATCH 2/3] make event_listing act consistent context: event_listing didn't always show the results from the collection. --- plone/app/event/browser/event_listing.py | 32 ++++++++++++++++-------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/plone/app/event/browser/event_listing.py b/plone/app/event/browser/event_listing.py index 735eb0ab..033aa5a7 100644 --- a/plone/app/event/browser/event_listing.py +++ b/plone/app/event/browser/event_listing.py @@ -68,20 +68,30 @@ def __init__(self, context, request): ).isoformat() if self.mode is None: - self.mode = "day" if self._date else "future" + if self._date: + self.mode = "day" + elif self.is_start_or_end_in_query(): + self.mode = "all" + else: + self.mode = "future" self.uid = None # Used to get all occurrences from a single event. Overrides all other settings # noqa - @property - def show_filter(self): - ret = True + def is_start_or_end_in_query(self): if self.is_collection: ctx = self.default_context query = queryparser.parseFormquery(ctx, ctx.query) if "start" in query or "end" in query: - # Don't show the date filter, if a date is given in the - # collection's query - ret = False + return True + return False + + @property + def show_filter(self): + ret = True + if self.is_start_or_end_in_query(): + # Don't show the date filter, if a date is given in the + # collection's query + ret = False return ret @property @@ -152,12 +162,14 @@ def events(self, ret_mode=RET_MODE_ACCESSORS, expand=True, batch=True): ctx, ctx.query, sort_on=sort_on, sort_order=sort_order ) custom_query = self.request.get("contentFilter", {}) - if "start" not in query or "end" not in query: - # ... else don't show the navigation bar + # only use custom end or start dates, if none are used by the collection + if "start" not in query and "end" not in query: start, end = self._start_end start, end = _prepare_range(ctx, start, end) custom_query.update(start_end_query(start, end)) - res = ctx.results(batch=False, brains=True, custom_query=custom_query) + res = ctx.results(batch=False, brains=True, custom_query=custom_query) + else: + res = ctx.results(batch=False, brains=True) if expand: # get start and end values from the query to ensure limited # listing for occurrences From 6e2468934f4906a6ecec693436e0192d06b6dd91 Mon Sep 17 00:00:00 2001 From: Thibaut Born Date: Mon, 24 Jun 2024 17:29:43 +0200 Subject: [PATCH 3/3] restucture code event_listing context: make code more readable by seperating usecases --- plone/app/event/browser/configure.zcml | 20 ++ plone/app/event/browser/event_listing.py | 222 ++++++++++++++++++++--- 2 files changed, 216 insertions(+), 26 deletions(-) diff --git a/plone/app/event/browser/configure.zcml b/plone/app/event/browser/configure.zcml index ea49f92b..3d86ffc2 100644 --- a/plone/app/event/browser/configure.zcml +++ b/plone/app/event/browser/configure.zcml @@ -23,6 +23,26 @@ menu="plone_displayviews" title="Event listing" /> + +