rsvp_announcement — Kanban Cards

rsvp_announcement — Kanban Cards

Project: RSVP-System Recipe Cookbook Feature: rsvp_announcement Source: D7 Whitinghamvt.org Announcement content type audit (2026-03-12) Depends on: ADR-0018 (Announcement Entity Architecture)


Card 1: ADR-0018 — Announcement Entity Architecture

Priority: Blocker Status: Proposed Assignee: Stephen

Decide: composed entities with references (recommended) vs. single content type with conditional fields. This decision gates all other cards. See ADR-0018 for full analysis.

Acceptance: ADR status moved to Accepted. Architecture documented. Bridge recipe structure confirmed.


Card 2: rsvp_announcement recipe — Core Fields

Priority: High Status: Backlog Blocked by: Card 1

Create the rsvp_announcement Drupal recipe with core fields:

  • Title (required)
  • Body with Summary (text_with_summary, Full HTML)
  • Highlight Image (media reference, image type, reuse from library)
  • External Link (link field — title + URL, optional)
  • Publishing Date Range (daterange field — start/end, default: now + 180 days). Controls announcement visibility. This is the auto-expire mechanism.
  • Read More toggle (boolean or taxonomy — controls whether "More Information" link displays. If External Link is set, link points there; otherwise points to node.)
  • Show Posted Date (boolean, default on)

Notes from D7 audit:

  • The 180-day default publishing range is critical to the town clerk workflow. Announcements expire without manual cleanup.
  • The Summary field is used for teaser displays. In D7 it's a separate textarea above the body. In D11 this is native to text_with_summary.
  • Highlight Image in D7 uses the Media module with a dedicated announcement/highlights file directory and 4MB limit. D11 should use Media Library with similar constraints.
  • External Link in D7: "If left empty, the Announcement will link back to itself." This self-linking default must be preserved.

Acceptance: Recipe installs cleanly. Content type available with all fields. Default form display configured. Default view display configured.


Card 3: rsvp_announcement recipe — Display Location Taxonomy

Priority: High Status: Backlog Blocked by: Card 1

Replace the D7 field_display_location (hardcoded list_text with ~60 string values like "Home - Village Announcements", "Library - Main - Footer") with a taxonomy vocabulary.

D7 values to migrate (sample):

  • Home - Frontpage
  • Home - Frontpage - Footer
  • Local Government - Main
  • Local Government - Town Departments
  • Our Town - Happenings
  • Library - Main
  • Library - Kids
  • Visit Us - See and Do
  • (and ~50 more, each with a paired "-Footer" variant)

Design considerations:

  • The D7 values encode a two-level hierarchy: Section + Subsection, plus a "Footer" flag. In D11 this should be a hierarchical taxonomy with a boolean "Footer placement" field on the term, not separate terms for main vs. footer.
  • This vocabulary is Whitinghamvt-specific. The recipe should provide the vocabulary structure and the field, but not the terms. Terms are site-specific configuration or seed data.
  • For RSVP-System as a redistributable recipe, consider whether this becomes a generic "Placement" vocabulary or stays announcement-specific.

Acceptance: Taxonomy vocabulary created. Entity reference field on Announcement. D7 display location values mapped to D11 terms with hierarchy. Footer flag field on taxonomy term.


Card 4: rsvp_announcement recipe — Department Reference

Priority: High Status: Backlog Blocked by: Card 1

Add field_department as an entity reference to the Community taxonomy (per ADR-0003 Community taxonomy architecture).

D7 context:

  • In D7, Department is a content type (not taxonomy). Announcements reference Department nodes via entity reference, multi-value, required. Default: "General".
  • ~30 departments: Selectboard, Town Clerk, Library, Transfer Station, Planning Commission, Fire Department, Zoning Administrator, etc.

D11 mapping:

  • In RSVP-System, departments map to the Community taxonomy (ADR-0003) as children of the Municipal community type, or as a dedicated "Department" vocabulary.
  • Decision: use Community taxonomy with a "Department" parent term, or create a separate Department vocabulary? Leaning toward Community taxonomy for consistency with the broader RSVP-System model.
  • Required field. Default term TBD.

Acceptance: Entity reference field on Announcement. Multi-value. Required. Default value configured. Existing D7 departments mapped to D11 taxonomy terms.


Card 5: rsvp_announcement_event bridge recipe

Priority: Medium Status: Backlog Blocked by: Cards 1, 2, and rsvp_event recipe

Create the rsvp_announcement_event bridge recipe that connects Announcements to Events.

Fields added to Announcement:

  • Post to Calendar (boolean toggle)
  • Calendar (taxonomy reference — which calendar(s) to post to, checkboxes. D7 values: "Events & Happenings", "Town Calendar", "Library")
  • Event Reference (entity reference to EventSeries, inline entity form)

Conditional field behavior:

  • "Post to Calendar" checkbox reveals Calendar selection and Event Reference fields.
  • Inline Entity Form (or equivalent) allows creating a new EventSeries directly from the Announcement form.
  • Event inherits: title from Announcement title, body from Announcement body (or empty). Date/time, recurrence, all-day are set on the Event entity.

D7 recurrence features to preserve:

  • All Day checkbox
  • Show End Date checkbox
  • Repeat toggle with RRULE: Daily (every N days, every weekday, MWF, TuTh), Weekly (every N weeks, select days), Monthly (by day of month or by weekday position), Yearly
  • Stop repeating: after N occurrences or on date
  • Exclude dates (EXDATE) and Include dates (RDATE)
  • All of this is already handled by the Recurring Events module in the existing rsvp_event architecture.

Acceptance: Bridge recipe installs on top of rsvp_announcement + rsvp_event. Conditional field behavior works. Inline event creation works. Events created from announcements appear on calendar Views.


Card 6: rsvp_announcement_document bridge recipe

Priority: Medium Status: Backlog Blocked by: Cards 1, 2, and rsvp_document recipe

Create the rsvp_announcement_document bridge recipe that connects Announcements to Documents.

Fields added to Announcement:

  • Include File Cabinet Attachment (boolean toggle)
  • Document Reference (entity reference to Document, inline entity form, unlimited cardinality)

Conditional field behavior:

  • "Include File Cabinet Attachment" checkbox reveals Document Reference field.
  • Inline Entity Form allows creating a new Document directly from the Announcement form.

Document entity fields (from D7 audit, for rsvp_document recipe):

  • File upload (txt, jpg, png, pdf, doc, docx, xls, xlsx — 20MB max)
  • Document Type (taxonomy or list: Meeting Minutes & Agendas, Informational, Public Hearing Notice, Ordinances/Bylaws/Policies, Forms, Event Attachment, Town Warning, Annual Town Meeting / Town Reports & Election Results)
  • Document Filed Date
  • List as Important Department Doc (boolean)

Acceptance: Bridge recipe installs on top of rsvp_announcement + rsvp_document. Conditional field behavior works. Inline document creation works. Documents created from announcements appear in File Cabinet search/Solr.


Card 7: Migration — D7 Announcement to D11

Priority: Medium Status: Backlog Blocked by: Cards 2-6

Migrate D7 Announcement nodes to D11 entity structure.

Migration mapping:

D7 Field D11 Entity D11 Field
title Announcement title
body + summary Announcement body
field_announcement_time Announcement field_publishing_date_range
field_highlight_image Announcement field_highlight_image (media)
field_external_link Announcement field_external_link
field_read_more_link Announcement field_read_more
field_show_posted_date Announcement field_show_posted_date
field_display_location Announcement field_display_location (taxonomy ref)
field_department Announcement field_department (taxonomy ref)
field_post_to_calendar = 1 EventSeries (create new entity)
field_calendar EventSeries field_calendar (taxonomy ref)
field_date_and_time EventSeries field_event_date (smart_date + rrule)
field_attach_doc = 1 Document (create new entity)
field_additional_information Document field_file
field_document_type Document field_document_type
field_document_date Document field_document_date
field_list_important Document field_list_important

Migration phases:

  1. Migrate taxonomy terms (Calendar, Department/Community, Document Type, Display Location)
  2. Migrate Announcement nodes (core fields only)
  3. Migrate Documents (from announcements with field_attach_doc = 1), create entity references
  4. Migrate Events (from announcements with field_post_to_calendar = 1), create entity references
  5. Verify: all D7 announcements have D11 counterparts, all references resolve, publishing date ranges preserved

Acceptance: All D7 announcements migrated. Entity references correct. Calendar events display on calendars. Documents appear in File Cabinet search. Publishing date ranges enforce visibility correctly.


Card 8: Admin Settings & Publishing Options

Priority: Low Status: Backlog Blocked by: Card 2

Port the D7 "Admin Settings" vertical tab fields:

  • Workflow / moderation state (D7 uses Workflow module; D11 uses Content Moderation or Workflows)
  • Pathauto pattern for announcement URLs
  • Metatag defaults (title: [node:title] | [site:name], description: [node:summary])
  • Revision enabled by default
  • Published by default

Notes:

  • D7 has Node Class (CSS class assignment per node) — evaluate if needed in D11 or if Layout Builder/Canvas handles this.
  • D7 has "Exclude from search" checkbox — map to Search API index exclusion in D11.
  • D7 authored by defaults to current user. Preserve.

Acceptance: URL aliases generate correctly. Meta tags populate. Content moderation workflow configured. Revisions enabled.