prefix . 'wmf_submissions'; $charset = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS {$table} ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, form_id BIGINT(20) UNSIGNED NOT NULL, data LONGTEXT NOT NULL, ip VARCHAR(45) DEFAULT '', user_agent TEXT DEFAULT '', status VARCHAR(20) DEFAULT 'neu', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY form_id (form_id) ) {$charset};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); update_option( 'wmf_db_version', '2.0' ); } function wmf_get_fields() { return WMF_Field_Registry::instance()->get_fields(); } function wmf_get_field( $type ) { return WMF_Field_Registry::instance()->get_field( $type ); } function wmf_get_shortcode( $id ) { return '[wp_multi_formular id="' . intval($id) . '"]'; } function wmf_unique_id() { return 'field_' . substr( md5( uniqid( '', true ) ), 0, 8 ); } function wmf_get_form_meta( $form_id ) { $defaults = array( 'fields' => array(), 'submit_label' => 'Absenden', 'success_message' => 'Vielen Dank! Ihre Nachricht wurde gesendet.', 'error_message' => 'Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.', 'notify_admin' => '1', 'admin_email' => get_option('admin_email'), 'admin_subject' => 'Neue Formulareinreichung', 'admin_reply_to' => '1', 'notify_sender' => '0', 'sender_subject' => 'Ihre Nachricht wurde empfangen', 'sender_message' => 'Vielen Dank für Ihre Nachricht. Wir melden uns bald.', 'from_name' => get_bloginfo('name'), 'from_email' => get_option('admin_email'), 'save_submissions' => '1', 'recaptcha_enabled' => '0', 'honeypot_enabled' => '1', 'active_email_service' => '', 'email_list_field' => '', 'redirect_url' => '', 'css_class' => '', 'multi_step' => '0', 'step_labels' => array(), 'show_progress' => '1', ); $meta = get_post_meta( $form_id, '_wmf_form_data', true ); if ( ! is_array( $meta ) ) $meta = array(); return wp_parse_args( $meta, $defaults ); } function wmf_save_form_meta( $form_id, $data ) { update_post_meta( $form_id, '_wmf_form_data', $data ); } function wmf_get_submissions( $form_id, $args = array() ) { global $wpdb; $table = $wpdb->prefix . 'wmf_submissions'; $defaults = array( 'limit' => 50, 'offset' => 0, 'status' => '', 'search' => '' ); $args = wp_parse_args( $args, $defaults ); $where = $wpdb->prepare( 'WHERE form_id = %d', $form_id ); if ( $args['status'] ) $where .= $wpdb->prepare( ' AND status = %s', $args['status'] ); if ( $args['search'] ) $where .= $wpdb->prepare( ' AND data LIKE %s', '%' . $wpdb->esc_like( $args['search'] ) . '%' ); return $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$table} {$where} ORDER BY created_at DESC LIMIT %d OFFSET %d", $args['limit'], $args['offset'] ) ); } function wmf_count_submissions( $form_id, $status = '', $search = '' ) { global $wpdb; $where = $wpdb->prepare( 'WHERE form_id = %d', $form_id ); if ( $status ) $where .= $wpdb->prepare( ' AND status = %s', $status ); if ( $search ) $where .= $wpdb->prepare( ' AND data LIKE %s', '%' . $wpdb->esc_like( $search ) . '%' ); return (int) $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}wmf_submissions {$where}" ); } function wmf_get_client_ip() { foreach ( array('HTTP_CLIENT_IP','HTTP_X_FORWARDED_FOR','REMOTE_ADDR') as $k ) { if ( ! empty( $_SERVER[$k] ) ) { $ip = trim( explode(',', $_SERVER[$k])[0] ); if ( filter_var($ip, FILTER_VALIDATE_IP) ) return $ip; } } return ''; } /** * Sicherer Redirect - funktioniert auch wenn Header bereits gesendet wurden * (z.B. durch Plugins die Output vor wp_redirect() ausgeben) */ function wmf_safe_redirect( $url ) { $url = esc_url_raw( $url ); if ( ! headers_sent() ) { wp_redirect( $url ); exit; } // JavaScript-Fallback echo ''; echo ''; exit; }