$per_page,
'offset' => $offset,
'status' => $status_filter,
'search' => $search,
));
$total = wmf_count_submissions($form_id, $status_filter, $search);
$total_pages = ceil($total / $per_page);
$base_url = add_query_arg(array(
'page' => 'wp-multi-formular',
'view_submissions' => $form_id,
), admin_url('admin.php'));
?>
get_row($wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}wmf_submissions WHERE id = %d AND form_id = %d",
$submission_id, $form_id
));
if(!$row) {
echo 'Einreichung nicht gefunden.
';
return;
}
// Als gelesen markieren
if($row->status === 'neu') {
WMF_Submission::update_status($submission_id, 'gelesen');
$row->status = 'gelesen';
}
$data = json_decode($row->data, true) ?? array();
$meta = wmf_get_form_meta($form_id);
$fields = self::get_display_fields($meta);
$form = get_post($form_id);
$back_url = add_query_arg(array(
'page' => 'wp-multi-formular',
'view_submissions' => $form_id,
), admin_url('admin.php'));
$prev_url = self::get_adjacent_url($submission_id, $form_id, 'prev');
$next_url = self::get_adjacent_url($submission_id, $form_id, 'next');
?>
Technische Informationen
| User-Agent | user_agent ?: '—'); ?> |
| Erstellt am | created_at); ?> |
| Datenbank-ID | id); ?> |
—';
return;
}
switch($type) {
case 'checkbox':
$vals = is_array($val) ? $val : explode(', ', $val);
echo '';
foreach($vals as $v) echo '- ' . esc_html($v) . '
';
echo '
';
break;
case 'gdpr':
$icon = $val === '1' ? '✅' : '❌';
echo $icon . ' ' . ($val === '1' ? 'Zugestimmt' : 'Nicht zugestimmt');
break;
case 'signature':
if(strpos($val, 'data:image') === 0) {
echo '
';
} else {
echo 'Keine Unterschrift';
}
break;
case 'file':
$urls = is_array($val) ? $val : explode(', ', $val);
echo '';
foreach($urls as $url) {
$url = trim($url);
if(!$url) continue;
$filename = basename(parse_url($url, PHP_URL_PATH));
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$is_image = in_array($ext, array('jpg','jpeg','png','gif','webp'));
if($is_image) {
echo '
';
} else {
echo '
📎 ' . esc_html($filename) . '';
}
}
echo '
';
break;
case 'rating':
$stars = intval($val);
$max = intval($field['max_stars'] ?? 5);
echo '';
for($i = 1; $i <= $max; $i++) {
echo '★';
}
echo ' ' . $stars . '/' . $max . '
';
break;
case 'url':
echo '' . esc_html($val) . '';
break;
case 'email':
echo '' . esc_html($val) . '';
break;
case 'textarea':
echo '' . nl2br(esc_html($val)) . '
';
break;
default:
if(is_array($val)) {
echo '';
foreach($val as $v) echo '- ' . esc_html($v) . '
';
echo '
';
} else {
echo '' . esc_html($val) . '';
}
}
}
/* ================================================================
HILFSFUNKTIONEN
================================================================ */
private static function get_display_fields($meta) {
return array_values(array_filter($meta['fields'] ?? array(), function($f) {
return !in_array($f['type'] ?? '', array('html','divider','hidden'));
}));
}
private static function get_adjacent_url($submission_id, $form_id, $direction) {
global $wpdb;
$op = $direction === 'prev' ? '>' : '<';
$order = $direction === 'prev' ? 'ASC' : 'DESC';
$adj = $wpdb->get_var($wpdb->prepare(
"SELECT id FROM {$wpdb->prefix}wmf_submissions WHERE form_id = %d AND id {$op} %d ORDER BY id {$order} LIMIT 1",
$form_id, $submission_id
));
if(!$adj) return null;
return add_query_arg(array('page'=>'wp-multi-formular','view_submission'=>$adj,'form_id'=>$form_id), admin_url('admin.php'));
}
public static function status_label($s) {
return array('neu'=>'Neu','gelesen'=>'Gelesen','archiviert'=>'Archiviert')[$s] ?? $s;
}
public static function export_url($form_id) {
return wp_nonce_url(add_query_arg(array('wmf_action'=>'export_csv','form_id'=>$form_id,'page'=>'wp-multi-formular'), admin_url('admin.php')), 'wmf_export_csv');
}
public static function maybe_export($form_id) {
if(empty($_GET['wmf_action']) || $_GET['wmf_action'] !== 'export_csv') return;
if(!wp_verify_nonce($_GET['_wpnonce'] ?? '', 'wmf_export_csv')) return;
$meta = wmf_get_form_meta($form_id);
$fields = self::get_display_fields($meta);
$rows = wmf_get_submissions($form_id, array('limit'=>9999));
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="formular-' . $form_id . '-einreichungen.csv"');
$out = fopen('php://output', 'w');
fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
$header = array('ID','Datum','Status','IP');
foreach($fields as $f) $header[] = $f['label'];
fputcsv($out, $header, ';');
foreach($rows as $row) {
$data = json_decode($row->data, true) ?? array();
$line = array($row->id, date_i18n('d.m.Y H:i', strtotime($row->created_at)), self::status_label($row->status), $row->ip);
foreach($fields as $f) {
$v = $data[$f['id']] ?? '';
if(is_array($v)) $v = implode(', ', $v);
if(($f['type']??'') === 'signature') $v = '(Unterschrift)';
$line[] = $v;
}
fputcsv($out, $line, ';');
}
fclose($out);
exit;
}
}