Skip to content

v3.2.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 06:00
· 22 commits to main since this release
1cd9a3c

New Features

  • Expose flags.all_day (EventON's evcal_allday) on reads and accept it on writes, so consumers can tell an all-day event from one that happens to run 00:00 to 23:59.
  • Expose featured_media (the featured image attachment ID) on event reads, so a read-modify-write clone keeps its image.
  • RSVP attendee records expose headcount (raw stored party size) alongside count (displayed party size), plus repeat_interval for the occurrence the RSVP belongs to.
  • RSVP attendee and summary routes accept a repeat_interval filter, and the rsvp filter accepts waitlist.
  • RSVP summaries report waitlist_records and waitlist_attendees_total as their own buckets.

Improvements

  • Date-range and upcoming list filters now match any occurrence of a repeating event, not just the first, and orderby=start_at no longer drops events that have no stored start timestamp from results or totals.
  • Unknown status values on the events list return 400 instead of silently returning the default status set, and a slug filter whose every value sanitizes away now matches nothing instead of returning every event.
  • start_time/end_time accept HH:MM:SS (seconds are dropped), matching what the published schema already advertised.
  • Coordinates are range-checked (lat ±90, lon ±180), virtual.moderator_id rejects negatives instead of flipping their sign, malformed email addresses are rejected instead of silently erasing the stored value, and a virtual end before the event start is rejected.
  • Repeat configuration and per-interval RSVP capacities survive being toggled off, matching EventON's own admin behavior, so re-enabling restores the prior setup.
  • event_type term colors can be cleared by sending an empty value.
  • FAQ display order is persisted to _evotax_order_evo_faq, and organizers and FAQs are returned in EventON's saved order rather than alphabetically.
  • The MCP manifest's documented list filters and examples now match the parameters the routes actually accept, required_for_create includes title, and fields/custom_fields are declared write args. Published location.lat/lon types are string, matching what reads return.
  • RSVP event-time lookups cache their EventON objects per request instead of rebuilding them per attendee.
  • Permanently deleting an event now removes its RSVP records instead of leaving orphans.

Bug Fixes

  • Stop corrupting event times on unrelated updates. Datetime meta was rewritten on every save from the boundary-extended _unix_*_ev values, so a title-only PATCH on a dl/ml/yl event overwrote the stored times with 00:00/23:59 permanently. Datetime meta is now written only when the request carries datetime input, and the base wall clock is read from evcal_srow/evcal_erow.
  • Fix custom repeat intervals being written in the wrong coordinate space. Client-authored intervals were stored as real epochs where EventON expects the wall clock interpreted as UTC, rendering occurrences hours off, and EventON silently dropped the first interval because index 0 did not match the base occurrence. Intervals are now built in EventON's space with the base occurrence always at index 0, and intervals[].start_at/end_at are formatted from that space so their ISO offsets are correct.
  • Fix the documented fields/custom_fields wrapper discarding every nested object. Normalization read the raw request body instead of the flattened payload, so a wrapped location, timezone, flags, virtual, repeat, rsvp, seo, faqs, health, interaction, or organizers was dropped, and a wrapped location returned 400 eventon_apify_missing_location_term after the post had already been created.
  • Fix start_at/end_at values carrying an explicit UTC or offset designator being stored as site-local wall time, shifting the event by the offset. The instant is now converted into the event timezone.
  • Fix every formatted time falling back to UTC on sites configured with a UTC offset rather than a named timezone, while the payload still reported the offset.
  • Stop partial RSVP and repeat updates from enabling the feature. Sending any rsvp.* sub-field without rsvp_enabled unconditionally wrote evors_rsvp = yes, so a PATCH of just additional_emails opened the public RSVP form on an event where RSVP was deliberately off. Presence now implies enabling only when no stored flag exists.
  • Stop re-asserting event_status from deleting the stored status_reason.
  • Reject unknown interaction.mode values instead of silently rewriting them to slide_down_eventcard, which also deleted the stored interaction URL.
  • Preserve legitimately falsy EventON term meta such as a latitude of 0, which EventON's own save helper strips via array_filter.
  • Preserve client keys in rsvp.repeat_capacities; reindexing a sparse map shifted capacities between occurrences, and EventON treats a missing or zero entry as sold out.
  • Correct RSVP summary math to match EventON: only published RSVP records count, records with a stored headcount of 0 are skipped, and waitlisted records no longer inflate the yes totals.
  • Reject impossible calendar dates such as 2026-02-31 instead of silently rolling them over to 2026-03-03.
  • Reject event times before 1970 instead of flipping them into the future via absint.
  • Close a redaction bypass on the wp/v2 compatibility surface: because WordPress dispatches routes case-insensitively while the guard compared the raw path, a request for /wp/v2/Types or /wp/v2/Taxonomies returned the EventON type and taxonomy metadata that the guard strips from the lowercase paths. Route matching is now case-folded, and the guard's taxonomy fallback list covers event_type_3 and event_type_4.
  • Attaching a term by a name whose sanitized slug collides with a differently-named existing term no longer renames that shared term.
  • Read legacy evcal_lat/evcal_lon in the pre-taxonomy location fallback, so map_url and latlng populate for events that only stored coordinates.
  • Re-slash post content when rolling back a failed write, so backslashes survive the compensating update.
  • Exclude repeat_interval, uid, and lang from RSVP attendee custom_fields.

Full Changelog: v3.1.0...v3.2.0