calendar-plugin/requirements/settings.md

2.4 KiB

Plugin Settings Requirements

Purpose

Define implemented setup/settings and diagnostics behavior for the calendar plugin admin pages.

Scope

This document covers:

  • Admin menu structure for plugin management pages
  • Setup page controls and persisted settings
  • Diagnostics page and diagnostics download behavior

Admin Navigation

The plugin must provide a single WordPress admin menu entry with these pages:

  • Top-level menu: Calendar Plugin
  • Sub-pages: Setup, Users, Diagnostics
  • Access capability: manage_options

The top-level duplicate submenu entry should be removed so only the explicit pages appear in navigation.

Setup Page

The Setup page must support:

  • Saving plugin settings
  • Seeding default events
  • Deleting all event and recurrence-exception data

Setup form controls:

  • CalDAV/ICS Calendar Name (caldav_calendar_name)
  • URL Slug Prefix (url_slug)
  • Verification Page Path (verification_page_path)
  • Plugin Table Prefix (table_prefix)
  • ICS Access Mode (ics_access_mode: public_read or authenticated_read)
  • Diagnostics Enabled (diagnostics_enabled)
  • Uninstall Cleanup (uninstall_cleanup_mode: keep or remove)

Behavior requirements:

  • Save, seed, and delete-all actions provide success/failure messaging on the Setup page.
  • Setup POST actions are nonce-protected.
  • table_prefix updates rename plugin tables (events, exceptions, users, tokens, audit log) without dropping existing data.
  • Prefix changes must fail safely if target tables already exist.
  • url_slug affects canonical routed paths for ICS and CalDAV endpoints.

Settings Persistence

  • Settings are persisted through plugin options storage and returned by the admin settings API (/wp-json/calendar/v1/settings).
  • Runtime endpoints and UI links must reflect the latest saved settings.

Diagnostics Page

The Diagnostics page must be admin-only and show:

  • Whether diagnostics are enabled
  • Runtime metadata snapshot (generation time, endpoint paths, user context, table stem)
  • Recent audit log rows when diagnostics are enabled

Diagnostics download behavior:

  • Download action is available only when diagnostics_enabled=1
  • Download uses a nonce-protected admin-post action
  • Response is JSON attachment (calendar-diagnostics-*.json)

Security and Access

  • Setup, Users, and Diagnostics pages require manage_options.
  • Form actions must validate WordPress nonces.
  • Inputs must be sanitized/normalized before persistence.