diff --git a/assets/js/form.js b/assets/js/form.js index ffe8e82..547adc0 100644 --- a/assets/js/form.js +++ b/assets/js/form.js @@ -409,7 +409,7 @@ function getFieldVal(name) { var el = qs('[name="' + name + '"]'); if (!el) return ''; - if (el.tagName === 'SELECT') return el.options[el.selectedIndex].value; + if (el.tagName === 'SELECT') return el.selectedIndex >= 0 ? el.options[el.selectedIndex].value : ''; return el.value.trim(); } diff --git a/includes/class-admin-menu.php b/includes/class-admin-menu.php index 7a07541..7b09f57 100644 --- a/includes/class-admin-menu.php +++ b/includes/class-admin-menu.php @@ -69,6 +69,16 @@ class Umzugsliste_Admin_Menu { array( $this, 'settings_page' ) // Callback ); + // Add Test Email submenu + add_submenu_page( + 'umzugsliste', + 'Test Email', + 'Test Email', + 'manage_options', + 'umzugsliste-test-email', + array( Umzugsliste_Test_Email::get_instance(), 'render_admin_page' ) + ); + // Remove duplicate top-level menu item remove_submenu_page( 'umzugsliste', 'umzugsliste' ); } diff --git a/includes/class-form-renderer.php b/includes/class-form-renderer.php index 18fed1f..076ca78 100644 --- a/includes/class-form-renderer.php +++ b/includes/class-form-renderer.php @@ -206,20 +206,99 @@ class Umzugsliste_Form_Renderer {
- + diff --git a/includes/class-test-email.php b/includes/class-test-email.php new file mode 100644 index 0000000..52d028a --- /dev/null +++ b/includes/class-test-email.php @@ -0,0 +1,306 @@ + '2. OG', + 'eGeschoss' => 'EG', + 'bLift' => 'ja', + 'eLift' => 'nein', + 'bTelefax' => '0611 123457', + 'eTelefax' => '06131 654322', + 'bMobil' => '0170 1234567', + 'eMobil' => '0171 7654321', + 'eE-Mail' => 'test@example.com', + ); + + // Room data - pick 2-3 items per room with fixed quantities + $room_picks = array( + 'wohnzimmer' => array( array( 0, 2 ), array( 4, 4 ), array( 8, 1 ) ), + 'schlafzimmer' => array( array( 2, 1 ), array( 3, 2 ), array( 5, 2 ) ), + 'arbeitszimmer' => array( array( 1, 1 ), array( 3, 2 ), array( 8, 1 ) ), + 'bad' => array( array( 0, 1 ), array( 1, 1 ) ), + 'kueche_esszimmer' => array( array( 4, 1 ), array( 7, 4 ), array( 9, 1 ) ), + 'kinderzimmer' => array( array( 2, 1 ), array( 3, 1 ), array( 6, 1 ) ), + 'keller' => array( array( 0, 2 ), array( 4, 4 ), array( 8, 1 ) ), + ); + + $rooms = Umzugsliste_Furniture_Data::get_rooms(); + + foreach ( $rooms as $room_key => $room_label ) { + $post_array_name = ucfirst( $room_key ); + if ( 'kueche_esszimmer' === $room_key ) { + $post_array_name = 'Kueche_Esszimmer'; + } + + $furniture_items = Umzugsliste_Furniture_Data::get_furniture_items( $room_key ); + $picks = $room_picks[ $room_key ]; + $room_data = array(); + + foreach ( $picks as $pick ) { + $idx = $pick[0]; + $quantity = $pick[1]; + + if ( isset( $furniture_items[ $idx ] ) ) { + $item = $furniture_items[ $idx ]; + $name = $item['name']; + + $room_data[ 'v' . $name ] = (string) $quantity; + $room_data[ 'q' . $name ] = (string) $item['cbm']; + $room_data[ 'm' . $name ] = ( $quantity > 2 ) ? 'ja' : 'nein'; + } + } + + $data[ $post_array_name ] = $room_data; + } + + // Additional work + $sections = Umzugsliste_Furniture_Data::get_additional_work(); + $additional_work = array(); + + // Montage - both checkboxes checked + $montage_data = array(); + foreach ( $sections['montage']['fields'] as $field ) { + $key = self::get_field_key( $field ); + $montage_data[ $key ] = 'ja'; + } + $additional_work['montage'] = $montage_data; + + // Schrank - mix of Abbau, Aufbau, Beides + $schrank_values = array( 'Abbau', 'Aufbau', 'Beides', 'Abbau', 'Aufbau', 'Beides' ); + $schrank_data = array(); + $i = 0; + foreach ( $sections['schrank']['fields'] as $field ) { + $key = self::get_field_key( $field ); + $schrank_data[ $key ] = $schrank_values[ $i % count( $schrank_values ) ]; + $i++; + } + $additional_work['schrank'] = $schrank_data; + + // Elektriker - all checked with varied _anzahl values + $elektriker_data = array(); + $anzahl = 1; + foreach ( $sections['elektriker']['fields'] as $field ) { + $key = self::get_field_key( $field ); + $elektriker_data[ $key ] = 'ja'; + $elektriker_data[ $key . '_anzahl' ] = (string) $anzahl; + $anzahl++; + } + $additional_work['elektriker'] = $elektriker_data; + + // Duebelarbeiten - all checked with varied _anzahl values + $duebel_data = array(); + $anzahl = 2; + foreach ( $sections['duebelarbeiten']['fields'] as $field ) { + $key = self::get_field_key( $field ); + $duebel_data[ $key ] = 'ja'; + $duebel_data[ $key . '_anzahl' ] = (string) $anzahl; + $anzahl += 2; + } + $additional_work['duebelarbeiten'] = $duebel_data; + + // Packarbeiten - all 4 checkboxes checked, text quantities filled + $pack_data = array(); + $pack_fields = $sections['packarbeiten']['fields']; + for ( $i = 0; $i < 4 && $i < count( $pack_fields ); $i++ ) { + $key = self::get_field_key( $pack_fields[ $i ] ); + $pack_data[ $key ] = 'ja'; + } + for ( $i = 4; $i < 6 && $i < count( $pack_fields ); $i++ ) { + $key = self::get_field_key( $pack_fields[ $i ] ); + $pack_data[ $key ] = ( $i === 4 ) ? '25' : '5'; + } + $additional_work['packarbeiten'] = $pack_data; + + // Anfahrt - all checkboxes checked + distance text values + $anfahrt_data = array(); + $anfahrt_fields = $sections['anfahrt']['fields']; + foreach ( $anfahrt_fields as $i => $field ) { + $key = self::get_field_key( $field ); + if ( 'checkbox' === $field['type'] ) { + $anfahrt_data[ $key ] = 'ja'; + } else { + $anfahrt_data[ $key ] = ( $i === 6 ) ? '15' : '25'; + } + } + $additional_work['anfahrt'] = $anfahrt_data; + + $data['additional_work'] = $additional_work; + + // Sonstiges + $data['sonstiges'] = "Bitte vorsichtig mit dem antiken Schrank im Wohnzimmer.\nDas Klavier muss besonders geschützt werden."; + + return $data; + } + + /** + * Get field key matching email generator logic + * + * @param array $field Field definition + * @return string Field key + */ + private static function get_field_key( $field ) { + if ( ! empty( $field['key'] ) ) { + return sanitize_key( $field['key'] ); + } + return sanitize_title( $field['name'] ); + } + + /** + * Render admin page + */ + public function render_admin_page() { + // Handle send test email + $notice = ''; + if ( isset( $_POST['send_test_email'] ) && check_admin_referer( 'umzugsliste_send_test_email' ) ) { + $notice = $this->send_test_email(); + } + + $preview_url = add_query_arg( + array( + 'page' => 'umzugsliste-test-email', + 'action' => 'preview', + ), + admin_url( 'admin.php' ) + ); + + ?> +Test email sent to ' . esc_html( $to ) . '.
'; + } + return 'Failed to send test email. Check your mail configuration.