Upload folder via GUI - inc

This commit is contained in:
Git Manager GUI
2026-04-13 18:52:46 +02:00
parent 9c47501712
commit 09ac38e9fa
31 changed files with 2058 additions and 0 deletions

View File

@@ -0,0 +1,158 @@
<?php
if ( ! defined( 'ABSPATH' ) ) exit;
abstract class WMF_Field_Base {
public $type = '';
public $label = '';
public $icon = 'dashicons-edit';
public $category = 'standard';
public function defaults() {
return array(
'id' => '',
'type' => $this->type,
'label' => $this->label,
'name' => '',
'placeholder' => '',
'description' => '',
'required' => '0',
'css_class' => '',
'width' => 'full',
// Bedingte Logik
'conditional_logic' => '0',
'conditional_action' => 'show', // show|hide
'conditional_rules' => array(), // [{field,operator,value}]
'conditional_match' => 'all', // all|any
// Schritt (mehrstufige Formulare)
'step' => 0,
);
}
abstract public function render( $field, $value = '' );
public function validate( $value, $field ) {
if ( ! empty( $field['required'] ) && $field['required'] === '1' ) {
$empty = ( $value === '' || $value === null || $value === array() );
if ( $empty ) return sprintf( 'Das Feld „%s" ist ein Pflichtfeld.', $field['label'] );
}
return true;
}
public function sanitize( $value, $field ) {
return sanitize_text_field( (string) $value );
}
/* Einstellungs-Panel im Builder */
public function settings_panel( $field ) {
?>
<div class="wmf-field-setting">
<label>Bezeichnung</label>
<input type="text" data-setting="label" value="<?php echo esc_attr($field['label']??''); ?>" class="widefat">
</div>
<div class="wmf-field-setting">
<label>Feldname <span class="wmf-hint">(intern, nur a-z, 0-9, _)</span></label>
<input type="text" data-setting="name" value="<?php echo esc_attr($field['name']??''); ?>" class="widefat wmf-slug-input">
</div>
<div class="wmf-field-setting">
<label>Platzhaltertext</label>
<input type="text" data-setting="placeholder" value="<?php echo esc_attr($field['placeholder']??''); ?>" class="widefat">
</div>
<div class="wmf-field-setting">
<label>Hilfetext (unter dem Feld)</label>
<input type="text" data-setting="description" value="<?php echo esc_attr($field['description']??''); ?>" class="widefat">
</div>
<div class="wmf-field-setting wmf-field-inline">
<label><input type="checkbox" data-setting="required" value="1" <?php checked($field['required']??'0','1'); ?>> Pflichtfeld</label>
</div>
<div class="wmf-field-setting">
<label>Breite</label>
<select data-setting="width" class="widefat">
<option value="full" <?php selected($field['width']??'full','full'); ?>>Volle Breite</option>
<option value="half" <?php selected($field['width']??'full','half'); ?>>½ Breite</option>
<option value="third" <?php selected($field['width']??'full','third'); ?>>⅓ Breite</option>
</select>
</div>
<div class="wmf-field-setting">
<label>CSS-Klasse</label>
<input type="text" data-setting="css_class" value="<?php echo esc_attr($field['css_class']??''); ?>" class="widefat">
</div>
<hr class="wmf-settings-sep">
<div class="wmf-field-setting">
<label>Bedingte Logik</label>
<select data-setting="conditional_logic" class="widefat wmf-conditional-toggle">
<option value="0" <?php selected($field['conditional_logic']??'0','0'); ?>>Deaktiviert</option>
<option value="1" <?php selected($field['conditional_logic']??'0','1'); ?>>Aktiviert</option>
</select>
</div>
<div class="wmf-conditional-rules" style="<?php echo ($field['conditional_logic']??'0')==='1'?'':'display:none'; ?>">
<div class="wmf-field-setting">
<label>Dieses Feld</label>
<select data-setting="conditional_action" class="widefat">
<option value="show" <?php selected($field['conditional_action']??'show','show'); ?>>anzeigen</option>
<option value="hide" <?php selected($field['conditional_action']??'show','hide'); ?>>ausblenden</option>
</select>
</div>
<div class="wmf-field-setting">
<label>wenn</label>
<select data-setting="conditional_match" class="widefat">
<option value="all" <?php selected($field['conditional_match']??'all','all'); ?>>alle Bedingungen erfüllt sind</option>
<option value="any" <?php selected($field['conditional_match']??'all','any'); ?>>eine Bedingung erfüllt ist</option>
</select>
</div>
<div class="wmf-conditional-rule-list" data-field-id="<?php echo esc_attr($field['id']??''); ?>">
<?php
$rules = $field['conditional_rules'] ?? array();
if (empty($rules)) $rules = array(array('field'=>'','operator'=>'=','value'=>''));
foreach($rules as $rule): ?>
<div class="wmf-rule-row">
<select class="wmf-rule-field" data-setting-rule="field">
<option value="">— Feld —</option>
</select>
<select class="wmf-rule-op" data-setting-rule="operator">
<option value="=" <?php selected($rule['operator']??'=','='); ?>>ist</option>
<option value="!=" <?php selected($rule['operator']??'=','!='); ?>>ist nicht</option>
<option value="contains" <?php selected($rule['operator']??'=','contains'); ?>>enthält</option>
<option value="not_empty" <?php selected($rule['operator']??'=','not_empty'); ?>>ist ausgefüllt</option>
</select>
<input type="text" class="wmf-rule-value" data-setting-rule="value" value="<?php echo esc_attr($rule['value']??''); ?>" placeholder="Wert">
<button type="button" class="wmf-rule-remove">✕</button>
</div>
<?php endforeach; ?>
</div>
<button type="button" class="button wmf-add-rule">+ Bedingung hinzufügen</button>
</div>
<?php
}
protected function wrapper_classes( $field ) {
$cls = array( 'wmf-field', 'wmf-field-' . $this->type );
$w = $field['width'] ?? 'full';
if ( $w !== 'full' ) $cls[] = 'wmf-field-width-' . $w;
if ( ! empty($field['css_class']) ) $cls[] = $field['css_class'];
if ( !empty($field['required']) && $field['required']==='1' ) $cls[] = 'wmf-required';
if ( !empty($field['conditional_logic']) && $field['conditional_logic']==='1' ) $cls[] = 'wmf-has-condition';
return implode(' ', $cls);
}
protected function render_label( $field ) {
if ( empty($field['label']) ) return;
$req = (!empty($field['required']) && $field['required']==='1') ? ' <span class="wmf-required-mark" aria-hidden="true">*</span>' : '';
printf( '<label for="%s" class="wmf-label">%s%s</label>', esc_attr($field['id']), esc_html($field['label']), $req );
}
protected function render_description( $field ) {
if ( empty($field['description']) ) return;
printf( '<p class="wmf-description">%s</p>', esc_html($field['description']) );
}
protected function conditional_attrs( $field ) {
if ( empty($field['conditional_logic']) || $field['conditional_logic'] !== '1' ) return '';
return sprintf(
' data-condition="%s" data-condition-action="%s" data-condition-match="%s" data-condition-rules="%s"',
'1',
esc_attr($field['conditional_action'] ?? 'show'),
esc_attr($field['conditional_match'] ?? 'all'),
esc_attr(wp_json_encode($field['conditional_rules'] ?? array()))
);
}
}