feat: add standalone form page, close all audit gaps, pass v1.0 milestone
Add standalone form page template that bypasses the theme, with admin setting and auto-creation on plugin activation. Fix reCAPTCHA v3 double submission, remove jQuery dependency, extend localized JS strings, and overhaul form CSS/JS. Update milestone audit to PASSED (9/9, 10/10, 5/5). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
64
templates/form-page.php
Normal file
64
templates/form-page.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/**
|
||||
* Standalone Form Page Template
|
||||
*
|
||||
* Renders the umzugsliste form as a full HTML document without theme wrapper.
|
||||
*
|
||||
* @package Umzugsliste
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$plugin_url = UMZUGSLISTE_PLUGIN_URL;
|
||||
$captcha = Umzugsliste_Captcha::get_instance();
|
||||
|
||||
// Build localization data
|
||||
$l10n_data = array(
|
||||
'fieldRequired' => __( 'This field is required', 'siegel-umzugsliste' ),
|
||||
'invalidEmail' => __( 'Please enter a valid email address', 'siegel-umzugsliste' ),
|
||||
'selectMovingDate' => __( 'Please select a complete moving date', 'siegel-umzugsliste' ),
|
||||
'enterFurnitureItem' => __( 'Please enter at least one furniture item', 'siegel-umzugsliste' ),
|
||||
'stepNext' => __( 'Next', 'siegel-umzugsliste' ),
|
||||
'stepBack' => __( 'Back', 'siegel-umzugsliste' ),
|
||||
'stepSubmit' => __( 'Submit Request', 'siegel-umzugsliste' ),
|
||||
'summaryTitle' => __( 'Summary', 'siegel-umzugsliste' ),
|
||||
'summaryMovingDate' => __( 'Moving Date', 'siegel-umzugsliste' ),
|
||||
'summaryLoading' => __( 'Loading Address', 'siegel-umzugsliste' ),
|
||||
'summaryUnloading' => __( 'Unloading Address', 'siegel-umzugsliste' ),
|
||||
'summaryGrandTotal' => __( 'Grand Total', 'siegel-umzugsliste' ),
|
||||
'summaryItems' => __( 'Items', 'siegel-umzugsliste' ),
|
||||
'summaryCbm' => __( 'cbm', 'siegel-umzugsliste' ),
|
||||
'summaryMontage' => __( 'Assembly', 'siegel-umzugsliste' ),
|
||||
'summaryYes' => __( 'Yes', 'siegel-umzugsliste' ),
|
||||
'summaryNo' => __( 'No', 'siegel-umzugsliste' ),
|
||||
'summaryAdditional' => __( 'Additional Work', 'siegel-umzugsliste' ),
|
||||
'summaryOther' => __( 'Other', 'siegel-umzugsliste' ),
|
||||
'totalLabel' => __( 'Total', 'siegel-umzugsliste' ),
|
||||
'roomTotalLabel' => __( 'Room Total', 'siegel-umzugsliste' ),
|
||||
'grandTotalLabel' => __( 'Grand Total', 'siegel-umzugsliste' ),
|
||||
'quantityLabel' => __( 'Qty', 'siegel-umzugsliste' ),
|
||||
'cbmLabel' => __( 'cbm', 'siegel-umzugsliste' ),
|
||||
'nonce' => wp_create_nonce( 'umzugsliste_submit' ),
|
||||
);
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html <?php language_attributes(); ?>>
|
||||
<head>
|
||||
<meta charset="<?php bloginfo( 'charset' ); ?>">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo esc_html__( 'Moving List', 'siegel-umzugsliste' ); ?> - <?php bloginfo( 'name' ); ?></title>
|
||||
<link rel="stylesheet" href="<?php echo esc_url( $plugin_url . 'assets/css/form.css?v=' . UMZUGSLISTE_VERSION ); ?>">
|
||||
<script>
|
||||
var umzugslisteL10n = <?php echo wp_json_encode( $l10n_data ); ?>;
|
||||
</script>
|
||||
<?php if ( $captcha->is_enabled() && $captcha->get_script_url() ) : ?>
|
||||
<script src="<?php echo esc_url( $captcha->get_script_url() ); ?>" async defer></script>
|
||||
<?php endif; ?>
|
||||
</head>
|
||||
<body class="umzugsliste-standalone">
|
||||
<?php echo Umzugsliste_Form_Renderer::render(); ?>
|
||||
<script src="<?php echo esc_url( $plugin_url . 'assets/js/form.js?v=' . UMZUGSLISTE_VERSION ); ?>"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user