# Automatic Page Creation Plan **Date:** 2025-03-28 **Status:** Approved ## 1. Goal Implement automatic creation of required plugin pages (Login, Registration, Dashboard) upon plugin activation. This ensures a consistent setup across environments, simplifies the user experience, and resolves E2E test failures caused by missing pages (specifically the Community Login page). ## 2. Background The initial task was to fix failing E2E tests for the Community Login page. Investigation revealed: * The tests targeted `/community-login/`, but this page was not guaranteed to exist or contain the `[hvac_community_login]` shortcode in the development environment restored from backup. * Searches confirmed the plugin did not include logic (`wp_insert_post`) to automatically create this or other required pages. * Manual page creation is possible but less reliable and adds setup steps. * The decision was made to add functionality to the plugin to create necessary pages automatically upon activation. ## 3. Required Pages & Shortcodes (Phase 1) The following pages will be created automatically if they do not already exist with the specified slug: | Feature | Title | Slug | Shortcode / Content | Notes | | :------------------- | :--------------------- | :--------------------- | :---------------------------------------------------------------------- | :----------------------------------------- | | Community Login | Community Login | `community-login` | `[hvac_community_login]` | Shortcode confirmed. | | Trainer Registration | Trainer Registration | `trainer-registration` | `[hvac_trainer_registration]` | Shortcode confirmed. | | Trainer Dashboard | Trainer Dashboard | `hvac-dashboard` | *(Empty)* | Relies on template redirect or assignment. | *(Phase 2 pages like Email Attendees, Order Summary can be added later once their shortcodes/implementation details are confirmed).* ## 4. Implementation Plan 1. **Activation Hook:** Use `register_activation_hook` in the main plugin file (`hvac-community-events.php`) to register a callback function that runs only when the plugin is activated. 2. **Callback Function (`hvac_ce_create_required_pages`):** * Define an array containing the details for the required pages (Title, Slug, Content) as shown in the table above. * Iterate through this array. * For each page definition: * Check if a page with the specified `slug` already exists using `get_page_by_path( $slug, OBJECT, 'page' )`. * **If the page does NOT exist:** * Prepare the post data array for `wp_insert_post()`: * `post_title`: From the page definition array. * `post_name` (slug): From the page definition array key. * `post_content`: From the page definition array (using Gutenberg block format for shortcodes). * `post_status`: `'publish'`. * `post_type`: `'page'`. * `comment_status`: `'closed'`. * `ping_status`: `'closed'`. * Call `wp_insert_post( $post_data )` to create the page. * *(Optional but Recommended):* Store the returned `$page_id` in a WordPress option (e.g., `hvac_community_pages` array) keyed by the feature (e.g., 'login', 'registration') for potential future use (like cleanup on deactivation or easy lookup). * **If the page DOES exist:** Do nothing to avoid duplicates or overwriting user changes. ## 5. Testing Strategy 1. **Manual Testing:** * Ensure the plugin is deactivated. * Delete any existing pages with the slugs `community-login`, `trainer-registration`, `hvac-dashboard`. * Activate the plugin. * Verify in WP Admin -> Pages that the three pages now exist with the correct titles, slugs, and content (shortcodes or empty). * Verify the pages use the default theme template and are editable with the block editor. 2. **E2E Testing:** * Run the login test suite: `./bin/run-tests.sh --login` * Confirm the tests now pass as the `/community-login/` page exists and contains the shortcode. 3. **Unit/Integration Testing (Optional but Recommended):** * Add tests for the `hvac_ce_create_required_pages` function. * Mock `get_page_by_path` and `wp_insert_post`. * Verify `wp_insert_post` is called with the correct data when a page is missing. * Verify `wp_insert_post` is *not* called when `get_page_by_path` finds an existing page. ## 6. Documentation Updates * Update `memory-bank/decisionLog.md`: Add decision for automatic page creation. * Update `memory-bank/progress.md`: Add task for implementing this feature. * Update `wordpress-dev/README.md`: Note that required pages are now created automatically on activation. ## 7. Process Flow Diagram ```mermaid graph TD A[Plugin Activation] --> B{Run Activation Callback}; B --> C{Loop Through Required Pages (Login, Register, Dashboard...)}; C --> D{Page Exists? (Check by Slug)}; D -- No --> E[Prepare Page Data (Title, Slug, Shortcode Block)]; D -- Yes --> C; E --> F[Create Page via wp_insert_post()]; F --> G{Store Page ID? (Optional)}; G -- Yes --> H[Update WP Option with Page ID]; G -- No --> C; H --> C; C -- All Pages Processed --> I[Activation Complete]; subgraph "Activation Logic" B C D E F G H end