upskill-event-manager/templates/page-native-event-test.php
ben 60e7ae33af feat: implement Phase 1A native WordPress event form system
 HVAC_Event_Form_Builder Implementation:
- Native WordPress event form builder extending HVAC_Form_Builder
- Complete datetime field types (start/end dates, timezone, all-day)
- Comprehensive venue field group (name, address, capacity, coordinates)
- Organizer field group (name, email, phone, website) with validation
- HVAC-specific fields (trainer requirements, certifications, equipment)
- Featured image upload support with security validation
- WordPress-native security integration (nonces, sanitization)
- Comprehensive form validation and error handling

🏗️ Architecture Improvements:
- Extract HVAC_Singleton_Trait to standalone file for better organization
- Add proper file loading order in HVAC_Plugin class
- Include core security framework and form builder dependencies

🧪 Testing Infrastructure:
- Native event test template for Phase 1A validation
- Staging deployment and testing completed successfully
- All form fields render and validate correctly

🎯 Strategic Progress:
- Phase 1A complete: Native form foundation established
- Eliminates dependency on problematic TEC Community Events forms
- Provides foundation for Phase 1B tribe_events post creation

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 15:48:09 -03:00

232 lines
No EOL
6.1 KiB
PHP

<?php
/**
* Template Name: Native Event Test
* Description: Test template for native WordPress event form functionality
*/
// Define constant to indicate we are in a page template
define('HVAC_IN_PAGE_TEMPLATE', true);
get_header();
?>
<style>
.hvac-native-event-test {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.hvac-native-event-test h1 {
color: #1a1a1a;
font-size: 28px;
margin-bottom: 20px;
}
.hvac-form-notice {
background: #f0f7ff;
border: 1px solid #0073aa;
border-radius: 4px;
padding: 12px;
margin-bottom: 20px;
}
.hvac-form-notice p {
margin: 0;
color: #0073aa;
}
.form-group {
margin-bottom: 20px;
}
.form-group label {
display: block;
font-weight: bold;
margin-bottom: 5px;
}
.form-group input,
.form-group textarea,
.form-group select {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
}
.form-group textarea {
height: 100px;
resize: vertical;
}
.venue-group,
.organizer-group {
border: 1px solid #e0e0e0;
padding: 15px;
border-radius: 5px;
margin: 20px 0;
}
.venue-group h3,
.organizer-group h3 {
margin-top: 0;
color: #0073aa;
}
.required {
color: #d00;
}
.error {
color: #d00;
font-size: 14px;
display: block;
margin-top: 5px;
}
.button {
background: #0073aa;
color: white;
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
}
.button:hover {
background: #005177;
}
.success-message {
background: #d4edda;
border: 1px solid #c3e6cb;
color: #155724;
padding: 12px;
border-radius: 4px;
margin-bottom: 20px;
}
</style>
<div class="hvac-native-event-test">
<?php
// Display trainer navigation menu
if (class_exists('HVAC_Menu_System')) {
HVAC_Menu_System::instance()->render_trainer_menu();
}
?>
<h1>Native Event Form Builder Test</h1>
<div class="hvac-form-notice">
<p><strong>Phase 1A Testing:</strong> This page tests the new HVAC_Event_Form_Builder with datetime, venue, organizer, and HVAC-specific fields.</p>
</div>
<?php
$form_submitted = false;
$form_errors = [];
$success_message = '';
// Handle form submission
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['hvac_event_form_nonce'])) {
// Verify nonce for security
if (wp_verify_nonce($_POST['hvac_event_form_nonce'], 'hvac_event_form')) {
try {
// Create event form builder instance
$event_form = new HVAC_Event_Form_Builder('hvac_event_form');
$event_form->create_event_form();
// Validate submitted data
$form_errors = $event_form->validate($_POST);
if (empty($form_errors)) {
// Sanitize data
$sanitized_data = $event_form->sanitize($_POST);
// Process the form (this would normally create the event)
$success_message = 'Event form validation successful! Data has been sanitized and is ready for processing.';
$form_submitted = true;
// In Phase 1B, this is where we would create the tribe_events post
} else {
$event_form->set_errors($form_errors);
}
} catch (Exception $e) {
$form_errors['general'] = 'Form processing error: ' . $e->getMessage();
}
} else {
$form_errors['nonce'] = 'Security check failed. Please refresh the page and try again.';
}
}
// Display success message
if ($success_message) {
echo '<div class="success-message">' . esc_html($success_message) . '</div>';
}
// Display general errors
if (isset($form_errors['general'])) {
echo '<div class="error" style="background: #f8d7da; border: 1px solid #f5c6cb; padding: 12px; border-radius: 4px; margin-bottom: 20px;">';
echo esc_html($form_errors['general']);
echo '</div>';
}
if (isset($form_errors['nonce'])) {
echo '<div class="error" style="background: #f8d7da; border: 1px solid #f5c6cb; padding: 12px; border-radius: 4px; margin-bottom: 20px;">';
echo esc_html($form_errors['nonce']);
echo '</div>';
}
// Create and display the event form
try {
$event_form = new HVAC_Event_Form_Builder('hvac_event_form');
$event_form->create_event_form();
// Set any existing errors
if (!empty($form_errors)) {
$event_form->set_errors($form_errors);
}
// Set form data if submitted (for re-population on errors)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$event_form->set_data($_POST);
}
// Add some custom wrapper HTML
echo '<div class="native-event-form-wrapper">';
echo '<h3>Event Information</h3>';
echo $event_form->render();
echo '</div>';
} catch (Exception $e) {
echo '<div class="error" style="background: #f8d7da; border: 1px solid #f5c6cb; padding: 12px; border-radius: 4px;">';
echo 'Form Builder Error: ' . esc_html($e->getMessage());
echo '</div>';
}
?>
<div style="margin-top: 30px; padding: 15px; background: #f9f9f9; border-radius: 4px;">
<h4>Phase 1A Implementation Status:</h4>
<ul>
<li>✅ HVAC_Event_Form_Builder class created</li>
<li>✅ DateTime field types (start/end dates, timezone, all-day)</li>
<li>✅ Venue field group (name, address, capacity, coordinates)</li>
<li>✅ Organizer field group (name, email, phone, website)</li>
<li>✅ HVAC-specific fields (trainer requirements, certifications, equipment)</li>
<li>✅ Featured image upload support</li>
<li>✅ WordPress security integration (nonce, sanitization, validation)</li>
<li>✅ Form validation and error handling</li>
<li>⏳ Next: Phase 1B - tribe_events post creation integration</li>
</ul>
</div>
</div>
<?php
get_footer();
?>