45 lines
1.9 KiB
PHP
45 lines
1.9 KiB
PHP
<?php
|
|
if (!defined('ABSPATH')) exit;
|
|
class WMF_Builder {
|
|
private static $instance=null;
|
|
public static function instance() {
|
|
if(is_null(self::$instance)){self::$instance=new self();self::$instance->hook();}
|
|
return self::$instance;
|
|
}
|
|
public function hook() {
|
|
add_action('wp_ajax_wmf_get_field_settings',array($this,'ajax_field_settings'));
|
|
add_action('wp_ajax_wmf_preview_form', array($this,'ajax_preview'));
|
|
}
|
|
public function ajax_field_settings() {
|
|
check_ajax_referer('wmf_admin','nonce');
|
|
if(!current_user_can('manage_options')) wp_die();
|
|
$type=sanitize_text_field($_POST['field_type']??'');
|
|
$field=json_decode(stripslashes($_POST['field_data']??'{}'),true);
|
|
$obj=wmf_get_field($type);
|
|
if(!$obj) wp_send_json_error('Unbekannter Feldtyp: '.$type);
|
|
ob_start(); $obj->settings_panel($field); $html=ob_get_clean();
|
|
wp_send_json_success(array('html'=>$html));
|
|
}
|
|
public function ajax_preview() {
|
|
check_ajax_referer('wmf_admin','nonce');
|
|
if(!current_user_can('manage_options')) wp_die();
|
|
$form_id=intval($_POST['form_id']??0);
|
|
$fields=json_decode(stripslashes($_POST['fields']??'[]'),true);
|
|
$meta=wmf_get_form_meta($form_id);
|
|
$meta['fields']=$fields;
|
|
ob_start();
|
|
echo '<div class="wmf-preview-wrap">';
|
|
foreach($fields as $field) {
|
|
$obj=wmf_get_field($field['type']??'');
|
|
if(!$obj) continue;
|
|
echo '<div class="wmf-field-wrap">';
|
|
$obj->render($field,'');
|
|
echo '</div>';
|
|
}
|
|
echo '<div class="wmf-submit-wrap"><button type="button" class="wmf-submit-button" disabled>'.esc_html($meta['submit_label']?:'Absenden').'</button></div>';
|
|
echo '</div>';
|
|
$html=ob_get_clean();
|
|
wp_send_json_success(array('html'=>$html));
|
|
}
|
|
}
|