diff --git a/wordpress-plugin/README.md b/wordpress-plugin/README.md index 05d7d032..11ebcfd0 100644 --- a/wordpress-plugin/README.md +++ b/wordpress-plugin/README.md @@ -62,7 +62,7 @@ Unter *Einstellungen → DeskHub Tickets* gibt es **„Speichern und Verbindung ## Grenzen -- **Keine Dateianhänge:** Die öffentliche API von DeskHub nimmt nur Text. Der Anhang-Upload des Kundenformulars fehlt deshalb im WordPress-Formular. +- **Dateianhänge (ab Plugin 1.3.0 und DeskHub 1.0.67):** Besucher können bis zu 5 Dateien anhängen (zusammen höchstens 10 MB). Erlaubte Typen und die Größe je Datei bestimmt DeskHub (Einstellungen → Uploads); im Plugin lässt sich die Funktion ausschalten, ein eigenes Formular in DeskHub kann Anhänge ebenfalls abschalten. Mit älterem DeskHub bleibt das Feld unsichtbar. - **Ältere DeskHub-Version:** Ohne die Formular-Schnittstelle (vor 1.0.64) zeigt das Plugin das einfache Formular ohne eigene Felder; Administratoren sehen einen Hinweis. - **IP-Adresse im Ticket:** DeskHub sieht die IP-Adresse Ihres WordPress-Servers, nicht die des Besuchers. - **Mengenbegrenzung der API:** DeskHub nimmt über die API höchstens 60 Tickets pro Minute an (für alle Aufrufer zusammen). diff --git a/wordpress-plugin/deskhub-tickets/assets/form.css b/wordpress-plugin/deskhub-tickets/assets/form.css index 65f98b47..18646e9a 100644 --- a/wordpress-plugin/deskhub-tickets/assets/form.css +++ b/wordpress-plugin/deskhub-tickets/assets/form.css @@ -107,6 +107,8 @@ .dht-wrap .dht-group { font-size: 1.1em !important; line-height: 1.3 !important; font-weight: 600 !important; letter-spacing: normal !important; text-transform: none !important; } .dht-radios.dht-inline { display: flex; flex-wrap: wrap; gap: 0 1.4em; } .dht-radios.dht-inline legend { flex: 1 1 100%; } +.dht-attach input[type="file"] { width: 100%; padding: .5em 0; font: inherit; color: inherit; } +.dht-attach .dht-help { display: block; } .dht-help { margin: .3em 0 0; font-size: .88em; color: var(--dht-muted); } .dht-req { color: #b91c1c; } .dht-group { margin: 1.2em 0 .6em; } diff --git a/wordpress-plugin/deskhub-tickets/assets/form.js b/wordpress-plugin/deskhub-tickets/assets/form.js index aed5a481..6fcdc0c9 100644 --- a/wordpress-plugin/deskhub-tickets/assets/form.js +++ b/wordpress-plugin/deskhub-tickets/assets/form.js @@ -43,6 +43,12 @@ var mi = message.querySelector('textarea'); if (mi) { mi.disabled = !f.messageShow; mi.required = !!f.messageShow; mi.placeholder = f.messageHint || ''; } } + var attach = form.querySelector('.dht-attach'); + if (attach) { + attach.hidden = !f.attachments; + var fi = attach.querySelector('input[type=file]'); + if (fi) { fi.disabled = !f.attachments; if (!f.attachments) { fi.value = ''; } } + } var submit = form.querySelector('.dht-submit'); if (submit && f.submitLabel) { submit.textContent = f.submitLabel; } } diff --git a/wordpress-plugin/deskhub-tickets/deskhub-tickets.php b/wordpress-plugin/deskhub-tickets/deskhub-tickets.php index f409cecc..d7c6ef9c 100644 --- a/wordpress-plugin/deskhub-tickets/deskhub-tickets.php +++ b/wordpress-plugin/deskhub-tickets/deskhub-tickets.php @@ -3,7 +3,7 @@ * Plugin Name: DeskHub Tickets * Plugin URI: https://git.viper.ipv64.net/M_Viper/deskhub * Description: Support-Tickets aus WordPress heraus in DeskHub anlegen und den Status abfragen. Formular und Statusabfrage per Shortcode, Spamschutz, Einwilligung und optional Cloudflare Turnstile. - * Version: 1.2.2 + * Version: 1.3.0 * Requires at least: 5.8 * Requires PHP: 7.4 * Author: DeskHub @@ -17,7 +17,7 @@ if (!defined('ABSPATH')) { exit; } -define('DESKHUB_TICKETS_VERSION', '1.2.2'); +define('DESKHUB_TICKETS_VERSION', '1.3.0'); define('DESKHUB_TICKETS_FILE', __FILE__); define('DESKHUB_TICKETS_DIR', plugin_dir_path(__FILE__)); define('DESKHUB_TICKETS_ASSETS', plugin_dir_url(__FILE__)); diff --git a/wordpress-plugin/deskhub-tickets/includes/class-client.php b/wordpress-plugin/deskhub-tickets/includes/class-client.php index 4115d035..8039e31c 100644 --- a/wordpress-plugin/deskhub-tickets/includes/class-client.php +++ b/wordpress-plugin/deskhub-tickets/includes/class-client.php @@ -71,13 +71,17 @@ class Deskhub_Tickets_Client public function create_ticket(array $data) { $fields = $data['fields'] ?? null; - unset($data['fields']); + $attachments = $data['attachments'] ?? null; + unset($data['fields'], $data['attachments']); $payload = array_filter($data, static function ($v) { return $v !== null && $v !== '' && $v !== 0; }); if (is_array($fields)) { $payload['fields'] = (object) $fields; // auch leer senden: Damit prüft DeskHub die Angaben gegen das Kundenformular } + if (is_array($attachments) && $attachments) { + $payload['attachments'] = array_values($attachments); + } $res = $this->request('POST', [], $payload); if (is_wp_error($res)) { return $res; diff --git a/wordpress-plugin/deskhub-tickets/includes/class-form.php b/wordpress-plugin/deskhub-tickets/includes/class-form.php index a7fdf902..0dba0af8 100644 --- a/wordpress-plugin/deskhub-tickets/includes/class-form.php +++ b/wordpress-plugin/deskhub-tickets/includes/class-form.php @@ -157,7 +157,7 @@ class Deskhub_Tickets_Form $texts = []; foreach ($forms as $tid => $fm) { $texts[$tid] = ['title' => $fm['title'], 'intro' => $fm['intro'], 'subjectShow' => $fm['subject']['show'], 'subjectLabel' => $fm['subject']['label'], - 'messageShow' => $fm['message']['show'], 'messageLabel' => $fm['message']['label'], 'messageHint' => $fm['message']['hint'], 'submitLabel' => $fm['submitLabel']]; + 'messageShow' => $fm['message']['show'], 'messageLabel' => $fm['message']['label'], 'messageHint' => $fm['message']['hint'], 'submitLabel' => $fm['submitLabel'], 'attachments' => $fm['attachments']['enabled']]; } if ($unsupported && current_user_can('manage_options')) { echo '
' . esc_html__('Der DeskHub-Server kennt die Formular-Schnittstelle noch nicht (bitte DeskHub aktualisieren). Bis dahin wird das einfache Formular ohne eigene Felder gezeigt. (Diese Meldung sehen nur Administratoren.)', 'deskhub-tickets') . '
'; @@ -175,7 +175,7 @@ class Deskhub_Tickets_Form $showSubject = (bool) $active['subject']['show']; $showMessage = (bool) $active['message']['show']; ?> -