Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 126b063e78 | |||
| 4e85783827 | |||
| 7d205bfd6a | |||
| 51e9bcc564 | |||
| 76b6677a61 | |||
| 010da8d592 | |||
| 574f047b89 |
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:
|
||||
KGV Contact Form Pro ist ein WordPress-Plugin fuer ein kategoriebasiertes Kontaktformular mit Verwaltung der Anfragen im Backend.
|
||||
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 ==
|
||||
|
||||
Installation:
|
||||
1. Plugin nach `wp-content/plugins/KGV-Contact-Form/` hochladen.
|
||||
2. In WordPress unter `Plugins` aktivieren.
|
||||
3. Gewuenschte Kategorie(n) und Empfaenger im Backend einrichten.
|
||||
4. Formular per Shortcode auf einer Seite oder in einem Beitrag einbinden.
|
||||
2. Plugin im WordPress-Backend aktivieren.
|
||||
3. Kategorien und Empfaenger konfigurieren.
|
||||
4. Formular mit dem Shortcode einbinden.
|
||||
|
||||
Shortcode:
|
||||
`[kgv_contact_form]`
|
||||
== Frequently Asked Questions ==
|
||||
|
||||
Funktionen:
|
||||
- kategoriebasiertes Kontaktformular
|
||||
- mehrere E-Mail-Adressen pro Kategorie
|
||||
- Datenschutz-Checkbox im Formular
|
||||
- Nachrichtenbereich fuer zusaetzliche Angaben
|
||||
- Backend-Uebersicht fuer Anfragen (gelesen/ungelesen)
|
||||
= Wie binde ich das Formular ein? =
|
||||
|
||||
Rollen und Rechte:
|
||||
- Administratoren koennen Kategorien verwalten.
|
||||
- Autoren und Mitarbeiter koennen Kontaktanfragen im Backend einsehen.
|
||||
Verwende den Shortcode `[kgv_contact_form]` auf einer Seite oder in einem Beitrag.
|
||||
|
||||
Version:
|
||||
1.4.0
|
||||
= 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.
|
||||
|
||||
@@ -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-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-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-success{border:1px solid #c6e1c6;background:#ecf7ed}
|
||||
.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-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}}
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* 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.
|
||||
* Version: 1.4.3
|
||||
* Version: 1.5.0
|
||||
* Author: Ronny Grobel
|
||||
* 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
|
||||
* Gitea Plugin URI: https://git.apex-project.de/Wordpress_Plugins/KGV-Contact-Form
|
||||
* Requires Plugins: KGV-Updater
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
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_MANAGE_CAP', 'manage_options');
|
||||
|
||||
@@ -110,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() {
|
||||
wp_enqueue_style(
|
||||
'kgv-contact-form-style',
|
||||
@@ -336,6 +385,15 @@ function kgv_cf_render_form() {
|
||||
|
||||
<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'); ?>
|
||||
|
||||
<p class="kgv-cf-submit">
|
||||
@@ -360,6 +418,13 @@ function kgv_cf_handle_form_submit() {
|
||||
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'] ?? '');
|
||||
$email = sanitize_email($_POST['kgv_email'] ?? '');
|
||||
$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