Implements automatic creation of required plugin pages (Community Login, Trainer Registration, Trainer Dashboard) upon plugin activation. This addresses E2E test failures caused by missing pages in the test environment. - Adds activation hook in `hvac-community-events.php` to call `hvac_ce_create_required_pages`. - The callback function checks for existing pages by slug and creates them using `wp_insert_post` if missing. Includes debug logging. Also fixes issues identified during E2E test debugging: - Corrects fatal error in `includes/community/class-login-handler.php` by replacing undefined constant `HVAC_COMMUNITY_EVENTS_PATH` with `HVAC_CE_PLUGIN_DIR`. - Updates `tests/e2e/tests/login.spec.ts` to use the correct selector `#wp-submit` for the login form submit button instead of `button[type="submit"]`. Documentation updates: - Adds `docs/automatic-page-creation-plan.md`. - Updates `README.md` regarding automatic page creation. - Updates Memory Bank files (`decisionLog.md`, `progress.md`, `activeContext.md`). Note: Activation hook logging did not appear during WP-CLI activation, requiring further investigation if page creation issues persist. E2E test confirmation pending.
98 lines
No EOL
5.7 KiB
Markdown
98 lines
No EOL
5.7 KiB
Markdown
# 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` | `<!-- wp:shortcode -->[hvac_community_login]<!-- /wp:shortcode -->` | Shortcode confirmed. |
|
|
| Trainer Registration | Trainer Registration | `trainer-registration` | `<!-- wp:shortcode -->[hvac_trainer_registration]<!-- /wp:shortcode -->` | 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 |