Browse Source

Fix EventPage previews (#555)

While previewing an EventPage, if no future occurrences exist,
instead return the latest event.
Jeremy Childers 2 years ago
parent
commit
c8bac743bb

+ 0 - 1
coderedcms/blocks/html_blocks.py

@@ -244,7 +244,6 @@ class PageListBlock(BaseBlock):
         label = _("Latest Pages")
 
     def get_context(self, value, parent_context=None):
-
         context = super().get_context(value, parent_context=parent_context)
 
         indexer = value["indexed_by"].specific

+ 0 - 1
coderedcms/blocks/stream_form_blocks.py

@@ -15,7 +15,6 @@ from coderedcms.forms import (
 
 
 class CoderedFormAdvSettings(CoderedAdvSettings):
-
     condition_trigger_id = blocks.CharBlock(
         required=False,
         max_length=255,

+ 10 - 12
coderedcms/models/page_models.py

@@ -807,20 +807,24 @@ class CoderedEventPage(CoderedWebPage, BaseEvent):
             noc = self.next_occurrence()
             if noc:
                 return noc
-            aoc = []
-            for occurrence in self.occurrences.all():
-                aoc += [instance for instance in occurrence.all_occurrences()]
-            if len(aoc) > 0:
-                return aoc[-1]  # last one in the list
 
         except AttributeError:
             # Triggers when a preview is initiated on an
             # EventPage because it uses a FakeQuerySet object.
             # Here we manually compute the next_occurrence
             occurrences = [e.next_occurrence() for e in self.occurrences.all()]
-            if occurrences:
+            # If there are no more occurrences, we find the last one instead
+            if occurrences and None not in occurrences:
                 return sorted(occurrences, key=lambda tup: tup[0])[0]
 
+        # If both of the above methods fail to find a future occurrence,
+        # instead return the last occurrence.
+        aoc = []
+        for occurrence in self.occurrences.all():
+            aoc += [instance for instance in occurrence.all_occurrences()]
+        if len(aoc) > 0:
+            return aoc[-1]  # last one in the list
+
     @property
     def seo_struct_event_dict(self) -> dict:
         next_occ = self.most_recent_occurrence
@@ -879,7 +883,6 @@ class CoderedEventPage(CoderedWebPage, BaseEvent):
 
         # For each occurrence rule in all of the occurrence rules for this event.
         for occurrence in self.occurrences.all():
-
             # Add the qualifying generated event instances to the list.
             event_instances += [
                 instance
@@ -1280,7 +1283,6 @@ class CoderedFormMixin(models.Model):
         processed_data = {}
         # Handle file uploads
         for key, val in form.cleaned_data.items():
-
             if (
                 type(val) == InMemoryUploadedFile
                 or type(val) == TemporaryUploadedFile
@@ -1318,7 +1320,6 @@ class CoderedFormMixin(models.Model):
     def process_form_submission(
         self, request, form, form_submission, processed_data
     ):
-
         # Save to database
         if self.save_to_database:
             form_submission.save()
@@ -1332,7 +1333,6 @@ class CoderedFormMixin(models.Model):
             context = Context(self.data_to_dict(processed_data, request))
             # Render emails as if they are django templates.
             for email in self.confirmation_emails.all():
-
                 # Build email message parameters.
                 message_args = {}
                 # From
@@ -1437,7 +1437,6 @@ class CoderedFormMixin(models.Model):
         message.send()
 
     def render_landing_page(self, request, form_submission=None):
-
         """
         Renders the landing page.
 
@@ -1646,7 +1645,6 @@ class CoderedSubmissionRevision(SubmissionRevision, models.Model):
 
 
 class CoderedSessionFormSubmission(SessionFormSubmission):
-
     INCOMPLETE = "incomplete"
     COMPLETE = "complete"
     REVIEWED = "reviewed"

+ 0 - 1
coderedcms/settings.py

@@ -4,7 +4,6 @@ from django.conf import settings
 
 
 class _DefaultSettings:
-
     CRX_PROTECTED_MEDIA_URL = "/protected/"
     CRX_PROTECTED_MEDIA_ROOT = os.path.join(settings.BASE_DIR, "protected")
     CRX_PROTECTED_MEDIA_UPLOAD_WHITELIST = []

+ 0 - 1
coderedcms/tests/testapp/models.py

@@ -60,7 +60,6 @@ class FormPageField(CoderedFormField):
 
 
 class FormConfirmEmail(CoderedEmail):
-
     page = ParentalKey("FormPage", related_name="confirmation_emails")
 
 

+ 0 - 1
coderedcms/wagtail_flexible_forms/models.py

@@ -293,7 +293,6 @@ class Steps(list):
 
 
 class SessionFormSubmission(AbstractFormSubmission):
-
     session_key = CharField(max_length=40, null=True, default=None)
     user = ForeignKey(
         settings.AUTH_USER_MODEL,