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,105 @@
<?php
if (!defined('ABSPATH')) exit;
class WMF_Form_Processor {
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('init',array($this,'maybe_process'),20);
}
public function maybe_process() {
if(empty($_POST['wmf_action'])||$_POST['wmf_action']!=='submit') return;
if(empty($_POST['wmf_form_id'])) return;
if(!session_id()) session_start();
$form_id=intval($_POST['wmf_form_id']);
if(!wp_verify_nonce($_POST['wmf_nonce']??'','wmf_submit_'.$form_id)) {
$this->fail($form_id,'Sicherheitsüberprüfung fehlgeschlagen.'); return;
}
$form=get_post($form_id);
if(!$form||$form->post_type!=='wmf-form') return;
$meta = wmf_get_form_meta($form_id);
$fields = $meta['fields']??array();
// Honeypot prüfen
if(!empty($meta['honeypot_enabled'])&&$meta['honeypot_enabled']==='1') {
if(!empty($_POST['wmf_hp_'.md5($form_id)])) { $this->ok($form_id,$meta); return; } // stille Ablehnung
}
// Werte sammeln + validieren
$values=array(); $errors=array();
foreach($fields as $field) {
$type=$field['type']??'';
$obj=wmf_get_field($type);
if(!$obj) continue;
if(in_array($type,array('html','divider'))) continue;
$raw=$_POST['wmf_fields'][$field['id']]??'';
$val=$obj->sanitize($raw,$field);
$valid=$obj->validate($val,$field);
$values[$field['id']]=$val;
if($valid!==true) $errors[$field['id']]=$valid;
}
// Datei-Uploads
$file_values=array();
if(!empty($_FILES['wmf_files'])) {
foreach($fields as $field) {
if(($field['type']??'')!=='file') continue;
$uploaded=WMF_Field_File::handle_upload($field,$form_id);
if(!empty($uploaded)) $file_values[$field['id']]=$uploaded;
// Validierung nochmal mit Upload-Ergebnis
$valid=wmf_get_field('file')->validate('',$field);
if($valid!==true&&!isset($errors[$field['id']])) $errors[$field['id']]=$valid;
}
}
if(!empty($errors)) {
$_SESSION['wmf_values_'.$form_id]=$values;
$_SESSION['wmf_errors_'.$form_id]=$errors;
wp_redirect($this->current_url()); exit;
}
// Datei-URLs in Werte mergen
foreach($file_values as $fid=>$uploads) {
$urls=array_map(fn($u)=>$u['url'],$uploads);
$values[$fid]=implode(', ',$urls);
}
// Speichern
$submission_id=null;
if(!empty($meta['save_submissions'])&&$meta['save_submissions']==='1') {
$submission_id=WMF_Submission::save($form_id,$values);
}
// E-Mails
if(!empty($meta['notify_admin'])&&$meta['notify_admin']==='1') {
WMF_Mailer::notify_admin($form_id,$meta,$fields,$values,$file_values);
}
if(!empty($meta['notify_sender'])&&$meta['notify_sender']==='1') {
WMF_Mailer::notify_sender($form_id,$meta,$fields,$values);
}
do_action('wmf_form_submitted',$form_id,$meta,$fields,$values,$submission_id);
$this->ok($form_id,$meta);
}
private function ok($form_id,$meta) {
if(!empty($meta['redirect_url'])) { wp_redirect(esc_url_raw($meta['redirect_url'])); exit; }
if(!session_id()) session_start();
$_SESSION['wmf_success_'.$form_id]=true;
wp_redirect($this->current_url()); exit;
}
private function fail($form_id,$msg) {
if(!session_id()) session_start();
$_SESSION['wmf_errors_'.$form_id]=array('_global'=>$msg);
wp_redirect($this->current_url()); exit;
}
private function current_url() {
return (is_ssl()?'https':'http').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}
}