Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 126b063e78 | |||
| 4e85783827 | |||
| 7d205bfd6a | |||
| 51e9bcc564 | |||
| 76b6677a61 | |||
| 010da8d592 | |||
| 574f047b89 | |||
| bba046eb3a |
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
68
README.txt
68
README.txt
@@ -1,27 +1,55 @@
|
|||||||
KGV Contact Form Pro - WordPress Plugin
|
=== KGV Kontakt Form ===
|
||||||
|
Contributors: ronnygrobel
|
||||||
|
Tags: contact form, kontaktformular, vereinswebseite, kategorien, datenschutz
|
||||||
|
Requires at least: 6.0
|
||||||
|
Tested up to: 6.8
|
||||||
|
Stable tag: 1.4.7
|
||||||
|
Requires PHP: 7.2
|
||||||
|
License: GPLv2 or later
|
||||||
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
Beschreibung:
|
Kategoriebasiertes Kontaktformular mit Routing, Datenschutz-Checkbox und Anfrageverwaltung im WordPress-Backend.
|
||||||
KGV Contact Form Pro ist ein WordPress-Plugin fuer ein kategoriebasiertes Kontaktformular mit Verwaltung der Anfragen im Backend.
|
|
||||||
|
== Description ==
|
||||||
|
|
||||||
|
KGV Kontakt Form stellt ein flexibles Kontaktformular fuer Vereinsseiten bereit.
|
||||||
|
Anfragen werden kategoriebasiert verarbeitet und koennen im Backend verwaltet werden.
|
||||||
|
|
||||||
|
= Features =
|
||||||
|
|
||||||
|
* Kategoriebasiertes Formular
|
||||||
|
* Mehrere Empfaengeradressen pro Kategorie
|
||||||
|
* Datenschutz-Checkbox
|
||||||
|
* Nachrichtenverwaltung im Backend (gelesen/ungelesen)
|
||||||
|
* Rollenfreigabe fuer Kontaktanfragen
|
||||||
|
|
||||||
|
== Installation ==
|
||||||
|
|
||||||
Installation:
|
|
||||||
1. Plugin nach `wp-content/plugins/KGV-Contact-Form/` hochladen.
|
1. Plugin nach `wp-content/plugins/KGV-Contact-Form/` hochladen.
|
||||||
2. In WordPress unter `Plugins` aktivieren.
|
2. Plugin im WordPress-Backend aktivieren.
|
||||||
3. Gewuenschte Kategorie(n) und Empfaenger im Backend einrichten.
|
3. Kategorien und Empfaenger konfigurieren.
|
||||||
4. Formular per Shortcode auf einer Seite oder in einem Beitrag einbinden.
|
4. Formular mit dem Shortcode einbinden.
|
||||||
|
|
||||||
Shortcode:
|
== Frequently Asked Questions ==
|
||||||
`[kgv_contact_form]`
|
|
||||||
|
|
||||||
Funktionen:
|
= Wie binde ich das Formular ein? =
|
||||||
- kategoriebasiertes Kontaktformular
|
|
||||||
- mehrere E-Mail-Adressen pro Kategorie
|
|
||||||
- Datenschutz-Checkbox im Formular
|
|
||||||
- Nachrichtenbereich fuer zusaetzliche Angaben
|
|
||||||
- Backend-Uebersicht fuer Anfragen (gelesen/ungelesen)
|
|
||||||
|
|
||||||
Rollen und Rechte:
|
Verwende den Shortcode `[kgv_contact_form]` auf einer Seite oder in einem Beitrag.
|
||||||
- Administratoren koennen Kategorien verwalten.
|
|
||||||
- Autoren und Mitarbeiter koennen Kontaktanfragen im Backend einsehen.
|
|
||||||
|
|
||||||
Version:
|
= Koennen mehrere Empfaenger pro Kategorie genutzt werden? =
|
||||||
1.4.0
|
|
||||||
|
Ja, pro Kategorie koennen mehrere E-Mail-Adressen hinterlegt werden.
|
||||||
|
|
||||||
|
== Changelog ==
|
||||||
|
|
||||||
|
= 1.4.6 =
|
||||||
|
* Release 1.4.6 erstellt.
|
||||||
|
* Versionsnummer in Plugin-Datei und Readme erhoeht.
|
||||||
|
|
||||||
|
= 1.4.4 =
|
||||||
|
* Versionsabgleich zwischen Plugin-Header, Code und Readme.
|
||||||
|
* WordPress-Readme-Format weiter vereinheitlicht.
|
||||||
|
|
||||||
|
= 1.4.3 =
|
||||||
|
* Aktuelle Version laut Plugin-Header.
|
||||||
|
* Stabilitaets- und Pflegeupdates.
|
||||||
|
|||||||
@@ -23,9 +23,26 @@
|
|||||||
.kgv-contact-form textarea:focus{outline:none;border-color:#2271b1;box-shadow:0 0 0 3px rgba(34,113,177,.12)}
|
.kgv-contact-form textarea:focus{outline:none;border-color:#2271b1;box-shadow:0 0 0 3px rgba(34,113,177,.12)}
|
||||||
.kgv-cf-privacy{margin:8px 0 18px;font-size:.95rem;line-height:1.5}
|
.kgv-cf-privacy{margin:8px 0 18px;font-size:.95rem;line-height:1.5}
|
||||||
.kgv-cf-privacy label{display:flex;gap:10px;align-items:flex-start}
|
.kgv-cf-privacy label{display:flex;gap:10px;align-items:flex-start}
|
||||||
.kgv-contact-form button{appearance:none;border:none;border-radius:10px;padding:12px 18px;font-weight:700;cursor:pointer;background:#2271b1;color:#fff}
|
.kgv-contact-form button{
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 8px 12px;
|
||||||
|
min-height: 38px;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-decoration: none;
|
||||||
|
background: var(--kgv-accent,#1f6f4a);
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1.2;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.kgv-cf-alert{max-width:760px;margin:0 0 16px;padding:12px 14px;border-radius:12px}
|
.kgv-cf-alert{max-width:760px;margin:0 0 16px;padding:12px 14px;border-radius:12px}
|
||||||
.kgv-cf-alert-success{border:1px solid #c6e1c6;background:#ecf7ed}
|
.kgv-cf-alert-success{border:1px solid #c6e1c6;background:#ecf7ed}
|
||||||
.kgv-cf-alert-error{border:1px solid #e5b3b3;background:#fff2f2}
|
.kgv-cf-alert-error{border:1px solid #e5b3b3;background:#fff2f2}
|
||||||
.kgv-cf-hp{position:absolute !important;left:-9999px !important;opacity:0 !important;pointer-events:none !important}
|
.kgv-cf-hp{position:absolute !important;left:-9999px !important;opacity:0 !important;pointer-events:none !important}
|
||||||
|
.kgv-cf-captcha label{font-weight:600;margin-bottom:8px;display:block}
|
||||||
|
.kgv-cf-captcha input[type="text"]{max-width:120px}
|
||||||
@media (max-width:700px){.kgv-cf-grid{grid-template-columns:1fr}.kgv-contact-form{padding:18px;border-radius:14px}}
|
@media (max-width:700px){.kgv-cf-grid{grid-template-columns:1fr}.kgv-contact-form{padding:18px;border-radius:14px}}
|
||||||
|
|||||||
@@ -2,17 +2,18 @@
|
|||||||
/**
|
/**
|
||||||
* Plugin Name: KGV Kontakt Form
|
* Plugin Name: KGV Kontakt Form
|
||||||
* Description: Kontaktformular mit Nachrichtenbereich, Kategorien, Routing je Kategorie, Datenschutz-Checkbox, gelesen/ungelesen, Mehrfach-E-Mail und Rollenfreigabe für Kontaktanfragen.
|
* Description: Kontaktformular mit Nachrichtenbereich, Kategorien, Routing je Kategorie, Datenschutz-Checkbox, gelesen/ungelesen, Mehrfach-E-Mail und Rollenfreigabe für Kontaktanfragen.
|
||||||
* Version: 1.4.2
|
* Version: 1.5.0
|
||||||
* Author: Ronny Grobel
|
* Author: Ronny Grobel
|
||||||
* Author URI: https://apex-project.de/
|
* Author URI: https://apex-project.de/
|
||||||
* Plugin URI: https://apex-project.de/
|
* Plugin URI: https://wordpress.apex-project.de/
|
||||||
* Update URI: https://git.apex-project.de/Wordpress_Plugins/KGV-Contact-Form
|
* Update URI: https://git.apex-project.de/Wordpress_Plugins/KGV-Contact-Form
|
||||||
* Gitea Plugin URI: https://git.apex-project.de/Wordpress_Plugins/KGV-Contact-Form
|
* Gitea Plugin URI: https://git.apex-project.de/Wordpress_Plugins/KGV-Contact-Form
|
||||||
|
* Requires Plugins: KGV-Updater
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('ABSPATH')) exit;
|
if (!defined('ABSPATH')) exit;
|
||||||
|
|
||||||
define('KGV_CF_VERSION', '1.4.0');
|
define('KGV_CF_VERSION', '1.5.0');
|
||||||
define('KGV_CF_VIEW_CAP', 'kgv_view_contact_requests');
|
define('KGV_CF_VIEW_CAP', 'kgv_view_contact_requests');
|
||||||
define('KGV_CF_MANAGE_CAP', 'manage_options');
|
define('KGV_CF_MANAGE_CAP', 'manage_options');
|
||||||
|
|
||||||
@@ -109,6 +110,55 @@ function kgv_cf_run_schema_update() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- CAPTCHA (serverseitig, kein externer Dienst) ---
|
||||||
|
|
||||||
|
function kgv_cf_generate_captcha() {
|
||||||
|
$a = wp_rand(1, 12);
|
||||||
|
$b = wp_rand(1, 12);
|
||||||
|
$ops = ['+', '-', '×'];
|
||||||
|
$op = $ops[array_rand($ops)];
|
||||||
|
|
||||||
|
switch ($op) {
|
||||||
|
case '-':
|
||||||
|
if ($b > $a) { [$a, $b] = [$b, $a]; }
|
||||||
|
$answer = $a - $b;
|
||||||
|
break;
|
||||||
|
case '×':
|
||||||
|
$a = wp_rand(1, 9);
|
||||||
|
$b = wp_rand(1, 9);
|
||||||
|
$answer = $a * $b;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$answer = $a + $b;
|
||||||
|
}
|
||||||
|
|
||||||
|
$token = bin2hex(random_bytes(16));
|
||||||
|
set_transient('kgv_cf_cap_' . $token, (string) $answer, HOUR_IN_SECONDS);
|
||||||
|
|
||||||
|
return [
|
||||||
|
'token' => $token,
|
||||||
|
'question' => sprintf('Sicherheitsfrage: Wie viel ist %d %s %d?', $a, $op, $b),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
function kgv_cf_verify_captcha($token, $given) {
|
||||||
|
if (empty($token) || !ctype_xdigit($token) || strlen($token) !== 32) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$key = 'kgv_cf_cap_' . sanitize_text_field($token);
|
||||||
|
$stored = get_transient($key);
|
||||||
|
delete_transient($key);
|
||||||
|
|
||||||
|
if ($stored === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim((string) $given) === $stored;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Ende CAPTCHA ---
|
||||||
|
|
||||||
function kgv_cf_enqueue_assets() {
|
function kgv_cf_enqueue_assets() {
|
||||||
wp_enqueue_style(
|
wp_enqueue_style(
|
||||||
'kgv-contact-form-style',
|
'kgv-contact-form-style',
|
||||||
@@ -335,6 +385,15 @@ function kgv_cf_render_form() {
|
|||||||
|
|
||||||
<input type="text" name="kgv_hp" value="" autocomplete="off" tabindex="-1" class="kgv-cf-hp">
|
<input type="text" name="kgv_hp" value="" autocomplete="off" tabindex="-1" class="kgv-cf-hp">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$captcha = kgv_cf_generate_captcha();
|
||||||
|
?>
|
||||||
|
<p class="kgv-cf-field kgv-cf-captcha">
|
||||||
|
<label for="kgv_captcha_answer"><?php echo esc_html($captcha['question']); ?> *</label>
|
||||||
|
<input type="text" id="kgv_captcha_answer" name="kgv_captcha_answer" inputmode="numeric" pattern="-?[0-9]+" autocomplete="off" required>
|
||||||
|
<input type="hidden" name="kgv_captcha_token" value="<?php echo esc_attr($captcha['token']); ?>">
|
||||||
|
</p>
|
||||||
|
|
||||||
<?php wp_nonce_field('kgv_contact_form_submit', 'kgv_nonce'); ?>
|
<?php wp_nonce_field('kgv_contact_form_submit', 'kgv_nonce'); ?>
|
||||||
|
|
||||||
<p class="kgv-cf-submit">
|
<p class="kgv-cf-submit">
|
||||||
@@ -359,6 +418,13 @@ function kgv_cf_handle_form_submit() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$captcha_token = isset($_POST['kgv_captcha_token']) ? sanitize_text_field(wp_unslash($_POST['kgv_captcha_token'])) : '';
|
||||||
|
$captcha_answer = isset($_POST['kgv_captcha_answer']) ? sanitize_text_field(wp_unslash($_POST['kgv_captcha_answer'])) : '';
|
||||||
|
|
||||||
|
if (!kgv_cf_verify_captcha($captcha_token, $captcha_answer)) {
|
||||||
|
kgv_cf_redirect_with_flag('kgv_error', '1');
|
||||||
|
}
|
||||||
|
|
||||||
$name = sanitize_text_field($_POST['kgv_name'] ?? '');
|
$name = sanitize_text_field($_POST['kgv_name'] ?? '');
|
||||||
$email = sanitize_email($_POST['kgv_email'] ?? '');
|
$email = sanitize_email($_POST['kgv_email'] ?? '');
|
||||||
$category_id = absint($_POST['kgv_category'] ?? 0);
|
$category_id = absint($_POST['kgv_category'] ?? 0);
|
||||||
|
|||||||
55
readme.txt
Executable file
55
readme.txt
Executable file
@@ -0,0 +1,55 @@
|
|||||||
|
=== KGV Kontakt Form ===
|
||||||
|
Contributors: ronnygrobel
|
||||||
|
Tags: contact form, kontaktformular, vereinswebseite, kategorien, datenschutz
|
||||||
|
Requires at least: 6.0
|
||||||
|
Tested up to: 6.8
|
||||||
|
Stable tag: 1.5.0
|
||||||
|
Requires PHP: 7.2
|
||||||
|
License: GPLv2 or later
|
||||||
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
|
Kategoriebasiertes Kontaktformular mit Routing, Datenschutz-Checkbox und Anfrageverwaltung im WordPress-Backend.
|
||||||
|
|
||||||
|
== Description ==
|
||||||
|
|
||||||
|
KGV Kontakt Form stellt ein flexibles Kontaktformular fuer Vereinsseiten bereit.
|
||||||
|
Anfragen werden kategoriebasiert verarbeitet und koennen im Backend verwaltet werden.
|
||||||
|
|
||||||
|
= Features =
|
||||||
|
|
||||||
|
* Kategoriebasiertes Formular
|
||||||
|
* Mehrere Empfaengeradressen pro Kategorie
|
||||||
|
* Datenschutz-Checkbox
|
||||||
|
* Nachrichtenverwaltung im Backend (gelesen/ungelesen)
|
||||||
|
* Rollenfreigabe fuer Kontaktanfragen
|
||||||
|
|
||||||
|
== Installation ==
|
||||||
|
|
||||||
|
1. Plugin nach `wp-content/plugins/KGV-Contact-Form/` hochladen.
|
||||||
|
2. Plugin im WordPress-Backend aktivieren.
|
||||||
|
3. Kategorien und Empfaenger konfigurieren.
|
||||||
|
4. Formular mit dem Shortcode einbinden.
|
||||||
|
|
||||||
|
== Frequently Asked Questions ==
|
||||||
|
|
||||||
|
= Wie binde ich das Formular ein? =
|
||||||
|
|
||||||
|
Verwende den Shortcode `[kgv_contact_form]` auf einer Seite oder in einem Beitrag.
|
||||||
|
|
||||||
|
= Koennen mehrere Empfaenger pro Kategorie genutzt werden? =
|
||||||
|
|
||||||
|
Ja, pro Kategorie koennen mehrere E-Mail-Adressen hinterlegt werden.
|
||||||
|
|
||||||
|
== Changelog ==
|
||||||
|
|
||||||
|
= 1.4.6 =
|
||||||
|
* Release 1.4.6 erstellt.
|
||||||
|
* Versionsnummer in Plugin-Datei und Readme erhoeht.
|
||||||
|
|
||||||
|
= 1.4.4 =
|
||||||
|
* Versionsabgleich zwischen Plugin-Header, Code und Readme.
|
||||||
|
* WordPress-Readme-Format weiter vereinheitlicht.
|
||||||
|
|
||||||
|
= 1.4.3 =
|
||||||
|
* Aktuelle Version laut Plugin-Header.
|
||||||
|
* Stabilitaets- und Pflegeupdates.
|
||||||
Reference in New Issue
Block a user