' . __('Backup-Datei nicht gefunden.', 'wp-multi-toolkit') . '
';
}
}
}
// Funktion zur Anzeige der Backup-Seite und der Liste der Backups im Admin-Bereich
function wpmt_display_backup_page() {
$upload_dir = wp_upload_dir();
$backup_dir = $upload_dir['basedir'] . '/wpmt_backups';
// Hole eine Liste der Backups
$backups = glob($backup_dir . '/*.sql');
?>
';
echo '';
echo '';
echo '';
// JavaScript zum Setzen des Cookies nach Zustimmung
?>
insert(
$wpdb->prefix . 'wpmt_cookie_consent',
array(
'user_ip' => $_SERVER['REMOTE_ADDR'],
'consent_given' => 1,
'timestamp' => current_time('mysql')
)
);
}
wp_die();
}
add_action('wp_ajax_wpmt_save_cookie_consent', 'wpmt_save_cookie_consent');
add_action('wp_ajax_nopriv_wpmt_save_cookie_consent', 'wpmt_save_cookie_consent');
// Tabelle für die Cookie-Zustimmung erstellen (bei Aktivierung des Plugins oder beim Laden des Plugins)
function wpmt_create_cookie_consent_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmt_cookie_consent';
// Prüfen, ob die Tabelle bereits existiert
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") !== $table_name) {
// Tabelle erstellen
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id bigint(20) NOT NULL AUTO_INCREMENT,
user_ip varchar(255) NOT NULL,
consent_given tinyint(1) NOT NULL,
timestamp datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
}
// Aufruf beim Laden des Plugins
add_action('plugins_loaded', 'wpmt_create_cookie_consent_table');
// Aufruf bei der Aktivierung des Plugins
register_activation_hook(__FILE__, 'wpmt_create_cookie_consent_table');
/*
* Backup Autoveröffentlichung
*/
// Funktion, um zukünftige Posts zu veröffentlichen
function pubMissedPosts() {
if (is_front_page() || is_single()) {
global $wpdb;
$now = gmdate('Y-m-d H:i:00');
// Überprüfe, ob benutzerdefinierte Beitragstypen vorhanden sind
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names'; // names oder objects, names ist der Standard
$operator = 'and'; // 'and' oder 'or'
$post_types = get_post_types($args, $output, $operator);
if (count($post_types) === 0) {
$sql = "SELECT ID FROM $wpdb->posts WHERE post_type IN ('post', 'page') AND post_status = 'future' AND post_date_gmt < '$now'";
} else {
$str = implode('\',\'', $post_types);
$sql = "SELECT ID FROM $wpdb->posts WHERE post_type IN ('page', 'post', '$str') AND post_status = 'future' AND post_date_gmt < '$now'";
}
$resulto = $wpdb->get_results($sql);
if ($resulto) {
foreach ($resulto as $thisarr) {
wp_publish_post($thisarr->ID);
}
}
}
}
// Die Funktion beim Laden der Seite aufrufen
add_action('wp_head', 'pubMissedPosts');
/*
* Gitea - Ticket - BUG - Report
*/
/**
* Sendet ein Support-Ticket an den Server und leitet es an das entsprechende Gitea-Repository weiter.
*
* @param string $plugin_name Der Name des Plugins (z. B. wp-multi, wp-multi-teamcard).
* @param string $title Der Titel des Tickets.
* @param string $description Die Beschreibung des Tickets.
* @param string $label Die Kategorie des Tickets (z. B. bug, enhancement).
* @return string Die Rückmeldung (Erfolg oder Fehler).
*/
function send_support_ticket_to_server($plugin_name, $title, $description, $label = 'bug') {
$server_url = 'https://m-viper.de/gitea-issue-creator.php';
// Daten für die Anfrage vorbereiten
$data = [
'plugin' => $plugin_name,
'title' => $title,
'description' => $description,
'label' => $label
];
$args = [
'method' => 'POST',
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json',
],
'timeout' => 45,
];
$response = wp_remote_post($server_url, $args);
if (is_wp_error($response)) {
$error_message = $response->get_error_message();
return '' . sprintf(__('Es gab einen Fehler bei der Ticketübertragung: %s', 'wp-multi-toolkit'), $error_message) . '';
}
$response_body = wp_remote_retrieve_body($response);
$response_data = json_decode($response_body, true);
if (isset($response_data['message']) && $response_data['message'] === 'Issues erfolgreich erstellt') {
return '' . __('Issues erfolgreich erstellt', 'wp-multi-toolkit') . '';
} else {
return '' . sprintf(__('Es gab einen Fehler: %s', 'wp-multi-toolkit'), esc_html($response_body)) . '';
}
}
/**
* Rendert das Support-Ticket-Formular im Admin-Bereich.
*/
function support_ticket_form() {
?>
' . $result . '
';
}
?>
__('Entschuldigung, das verstehe ich nicht. Versuche es mit einer anderen Frage oder erstelle ein Support-Ticket unter WP-Multi Support!', 'wp-multi-toolkit')
));
// Stichwörter aus den Antworten extrahieren (ohne 'default')
$keywords = array_keys($assistant_responses);
unset($keywords[array_search('default', $keywords)]); // Entfernt 'default' aus der Liste
$keywords_list = implode(', ', $keywords);
?>
TG-Notify".', 'wp-multi-toolkit');
$responses['discord'] = __('Schickt Benachrichtigungen für neue Beiträge an Discord. Konfiguriere dies unter "Notify > DC-Notify".', 'wp-multi-toolkit');
$responses['admin links'] = __('Füge eigene Links (z. B. zu externen Seiten) im Adminpanel hinzu. Gehe zu "Werkzeuge > Admin-Link hinzufügen".', 'wp-multi-toolkit');
$responses['gast-autor'] = __('Gib Gastautoren unter "Benutzer > Gastautor (Übersicht)" ein. Sie werden in jedem Beitrag im Frontend angezeigt.', 'wp-multi-toolkit');
$responses['beitrag report'] = __('Unangemessene Beiträge melden und bearbeiten. Sieh die Liste unter "Gemeldete Beiträge".', 'wp-multi-toolkit');
$responses['textbox'] = __('Fügt eine Textbox mit vordefinierten Texten am Beitragsende hinzu. Texte können im Adminpanel hinterlegt werden.', 'wp-multi-toolkit');
$responses['banner'] = __('Stelle ein Informationsbanner unter "WP Stat & Notice" ein (Header oder Footer).', 'wp-multi-toolkit');
$responses['inhaltsverzeichnis'] = __('Nutze den Shortcode [alphabetical_index], um ein Inhaltsverzeichnis aller Beiträge zu erstellen.', 'wp-multi-toolkit');
$responses['lesezeichen'] = __('Gäste können Lesezeichen mit [add_bookmark] setzen und mit [display_bookmarks] anzeigen. Per Cookie gespeichert.', 'wp-multi-toolkit');
$responses['custom shortcode'] = __('Erstelle eigene Shortcodes und wähle sie unter "Beitrag erstellen" im Editor aus.', 'wp-multi-toolkit');
$responses['kommentar sperren'] = __('Sperre Benutzer für Kommentare unter "Benutzer sperren" (z. B. via Benutzername, IP, Mail).', 'wp-multi-toolkit');
$responses['filter'] = __('Verbiete Rufnummern, Mailadressen, URLs, IPs oder Schimpfwörter unter "Kommentare > Kommentar Filter". Verstöße werden mit * ersetzt.', 'wp-multi-toolkit');
$responses['analytics'] = __('Sieh die beliebtesten Beiträge (Views, Kommentare, Titel, ID, Zeitstempel) unter "Benutzer > Benutzer Analytics".', 'wp-multi-toolkit');
$responses['pinwand'] = __('Hinterlege Nachrichten für Backend-Nutzer unter "Pinnwand". Diese können erstellt, bearbeitet oder gelöscht werden.', 'wp-multi-toolkit');
$responses['brute force'] = __('Schutz vor Brute-Force: Loggt Fehlversuche und sperrt nach 5 Versuchen. Einstellungen unter "Sicherheit".', 'wp-multi-toolkit');
$responses['anti spam'] = __('Blockiert Spam und Bots. Konfiguriere dies unter "Sicherheit" mit Übersicht im Adminpanel.', 'wp-multi-toolkit');
$responses['auto tag'] = __('Fügt fehlende Tags automatisch hinzu. Verwalte verbotene Wörter unter "Beiträge > Automatische Tags".', 'wp-multi-toolkit');
$responses['login deaktivieren'] = __('Deaktiviere Logins im Profil unter "Benutzer > Alle Benutzer > Benutzer auswählen".', 'wp-multi-toolkit');
$responses['text copy'] = __('Schützt Texte vor Kopieren (Rechtsklick-Sperre). Aktiviere dies in den WP Multi-Einstellungen.', 'wp-multi-toolkit');
$responses['trash mail'] = __('Verbietet Trash-Mail-Adressen in Kommentaren. Die Liste wird vom Entwickler gepflegt.', 'wp-multi-toolkit');
// WP Multi Comment Notifications
$responses['kommentar benachrichtigung'] = __('Schickt Benachrichtigungen für neue Kommentare per Mail, Telegram oder Discord. Einstellungen unter "Kommentare > Kommentar Benachrichtigung".', 'wp-multi-toolkit');
// WP Multi Kategorie
$responses['kategorien ausblenden'] = __('Blende einzelne Kategorien unter "Beiträge > Kategorie Filter" aus.', 'wp-multi-toolkit');
// WP Multi Search
$responses['suchfunktion'] = __('Füge eine Suchfunktion (Allgemein, Gastautor, Titel) als Shortcode, Widget oder Menüeintrag hinzu. Einstellungen unter "Einstellung > WP-Multi Search".', 'wp-multi-toolkit');
// WP Multi Team-Card
$responses['teamcard'] = __('Mit dem WP Multi Team-Card Plugin kannst du Teammitglieder mit Name, Funktion, Zuständigkeit und Bild erstellen. Nutze den Shortcode [teamcards] für die Anzeige im Frontend.', 'wp-multi-toolkit');
$responses['teammitglied hinzufügen'] = __('Gehe zu "Team-Cards" im Admin-Menü, fülle die Felder (Name, Funktion, Zuständigkeit, Bild) aus und klicke auf "Teammitglied hinzufügen".', 'wp-multi-toolkit');
$responses['teamcard shortcode'] = __('Verwende den Shortcode [teamcards] in einem Beitrag oder einer Seite, um alle Teammitglieder anzuzeigen. Für eine bestimmte Kategorie nutze z. B. [teamcards kategorie="slug"].', 'wp-multi-toolkit');
$responses['teamcard kategorie'] = __('Erstelle Kategorien für Teammitglieder unter "Beiträge > Kategorien". Weise sie den Teammitgliedern zu, um sie mit dem Shortcode [teamcards kategorie="slug"] gefiltert anzuzeigen.', 'wp-multi-toolkit');
$responses['teamcard bild'] = __('Füge ein Bild für ein Teammitglied hinzu, indem du in der "Team-Cards"-Verwaltung auf "Bild auswählen" klickst. Das Bild wird im Frontend in der Teamkarte angezeigt.', 'wp-multi-toolkit');
$responses['teamcard löschen'] = __('Um ein Teammitglied zu löschen, gehe zu "Team-Cards", finde das Mitglied in der Liste und klicke auf "Löschen".', 'wp-multi-toolkit');
$responses['teamcard reihenfolge'] = __('Ändere die Reihenfolge der Teammitglieder, indem du die Zeilen in der "Team-Cards"-Tabelle per Drag-and-Drop verschiebst.', 'wp-multi-toolkit');
$responses['teamcard deinstallation'] = __('Beim Löschen des WP Multi Team-Card Plugins werden alle Teammitglieder, Kategorien und Bilder aus der Datenbank entfernt. Erstelle ein Backup, wenn du die Daten behalten möchtest.', 'wp-multi-toolkit');
$responses['teamcard updates'] = __('Prüfe Updates für das WP Multi Team-Card Plugin unter https://git.viper.ipv64.net/M_Viper/wp-multi-teamcard. Eine Benachrichtigung erscheint im Admin-Bereich, wenn eine neue Version verfügbar ist.', 'wp-multi-toolkit');
// WP Multi Toolkit
$responses['update management'] = __('Zeigt den Status der WP Multi Plugins und verfügbare Updates im Dashboard-Widget "Verfügbare Updates für WP Multi Toolkit".', 'wp-multi-toolkit');
$responses['support issues'] = __('Erstelle Support-Tickets unter "WP-Multi Support" für Antworten zu WP Multi Plugins.', 'wp-multi-toolkit');
$responses['dokumentation'] = __('Finde die Dokumentation unter "WP-Multi Support > Dokumentation" mit Links zu den Plugins.', 'wp-multi-toolkit');
$responses['virtueller assistent'] = __('Ich bin der virtuelle Assistent! Stelle mir Fragen zu WP Multi Plugins unter "WP-Multi Support > Virtueller Assistent".', 'wp-multi-toolkit');
$responses['toolbar'] = __('Die Schnellstart-Toolbar unten rechts bietet Zugriff auf Support, Updates, Dokumentation und mich!', 'wp-multi-toolkit');
$responses['wp multi plugins'] = __('Folgende Plugins gehören zur WP Multi-Reihe: - WP Multi Toolkit: Schnittstelle für alle WP Multi Plugins. - WP Multi: Hauptplugin mit vielen Funktionen. - WP Multi Comment Notifications: Benachrichtigungen für Kommentare. - WP Multi Search: Erweiterte Suchfunktion. - WP Multi Kategorie: Kategoriefilter.', 'wp-multi-toolkit');
// Allgemeine Fragen und Antworten zu WP Multi Plugins
$responses['was sind wp multi plugins'] = __('Die WP Multi Plugins sind eine Sammlung von WordPress-Plugins, die erweiterte Funktionen für deine Website bieten. Dazu gehören Tools für Benachrichtigungen, Sicherheit, Statistiken, Kommentar-Management und mehr. Sieh dir die Liste unter "wp multi plugins" an!', 'wp-multi-toolkit');
$responses['wie installiere ich ein plugin'] = __('Gehe zu "Plugins > Neu hinzufügen" in deinem WordPress-Dashboard, lade die Plugin-Datei (z. B. von https://git.viper.ipv64.net/M_Viper) hoch und aktiviere es. Alternativ kannst du es manuell über FTP in den Ordner /wp-content/plugins/ hochladen und aktivieren.', 'wp-multi-toolkit');
$responses['wo finde ich updates'] = __('Updates für WP Multi Plugins findest du im Dashboard-Widget "Verfügbare Updates für WP Multi Toolkit" oder auf https://git.viper.ipv64.net/M_Viper. Lade die neueste Version herunter und aktualisiere das Plugin manuell.', 'wp-multi-toolkit');
$responses['wie erstelle ich ein support ticket'] = __('Gehe zu "WP-Multi Support" im Admin-Menü, wähle das Plugin, gib einen Titel und eine Beschreibung ein und sende das Ticket ab. Du erhältst eine Bestätigung, wenn es erfolgreich erstellt wurde.', 'wp-multi-toolkit');
$responses['welche voraussetzungen gibt es'] = __('Die WP Multi Plugins benötigen mindestens WordPress 6.7.2. Einige Funktionen (z. B. Telegram- oder Discord-Benachrichtigungen) erfordern API-Keys oder zusätzliche Konfiguration. Details findest du in der Dokumentation.', 'wp-multi-toolkit');
$responses['sind die plugins kostenlos'] = __('Ja, alle WP Multi Plugins sind kostenlos verfügbar unter https://git.viper.ipv64.net/M_Viper. Es gibt keine versteckten Kosten und es wird kein Geld angenommen.', 'wp-multi-toolkit');
$responses['wie deaktiviere ich ein plugin'] = __('Gehe zu "Plugins > Installierte Plugins" in deinem WordPress-Dashboard, suche das Plugin und klicke auf "Deaktivieren". Du kannst es danach löschen, wenn du es nicht mehr benötigst.', 'wp-multi-toolkit');
$responses['wo finde ich die dokumentation'] = __('Die Dokumentation ist unter "WP-Multi Support > Dokumentation" im Admin-Menü verfügbar. Sie enthält Details zu jedem Plugin und Links zu den Download-Seiten.', 'wp-multi-toolkit');
$responses['wer entwickelt die plugins'] = __('Die WP Multi Plugins werden von M_Viper entwickelt. Mehr Infos findest du auf https://m-viper.de oder im Repository https://git.viper.ipv64.net/M_Viper.', 'wp-multi-toolkit');
$responses['kann ich eigene funktionen hinzufügen'] = __('Ja, die Plugins sind Open Source. Du kannst den Code auf https://git.viper.ipv64.net/M_Viper anpassen. Für Vorschläge erstelle ein Support-Ticket mit der Kategorie "Verbesserung".', 'wp-multi-toolkit');
return $responses;
});
/*
* Schnellzugriff-Menü (Floating Toolbar)
*/
function wpmt_add_floating_toolbar() {
if (!current_user_can('manage_options') || !is_admin()) {
return;
}
?>
',
sprintf(
__('Ihre Version ist aktuell. Version %s ist die neueste Version.', 'wp-multi-toolkit'),
esc_html($installed_version)
)
);
} else {
printf(
'
%s
',
sprintf(
__('Es ist eine neue Version von %s verfügbar! Version %s ist jetzt verfügbar.', 'wp-multi-toolkit'),
esc_html($plugin['name']),
esc_html($latest_version)
)
);
printf(
'
';
}
// Update-Einstellungen
function wpmt_update_general_settings() {
add_settings_section(
'wpmt_update_section',
__('WP Multi Toolkit Update Einstellungen', 'wp-multi-toolkit'),
null,
'general'
);
add_settings_field(
'wpmt_update_show_prereleases',
__('Pre-Releases anzeigen', 'wp-multi-toolkit'),
'wpmt_update_show_prereleases_callback',
'general',
'wpmt_update_section'
);
register_setting('general', 'wpmt_update_show_prereleases', array(
'type' => 'boolean',
'description' => __('Aktivieren, um Pre-Releases im Dashboard und in den Versionsinformationen anzuzeigen.', 'wp-multi-toolkit'),
'default' => 0,
));
}
add_action('admin_init', 'wpmt_update_general_settings');
// Callback-Funktion für das Anzeigen der Checkbox
function wpmt_update_show_prereleases_callback() {
$checked = get_option('wpmt_update_show_prereleases', false);
echo '';
echo '
' . __('Achtung: Pre-Releases sind Beta-Versionen und können Fehler enthalten. Verwenden Sie sie nur, wenn Sie Fehlerberichterstattung oder Tests durchführen möchten.', 'wp-multi-toolkit') . '
';
}
// Deinstallation
function wpmt_uninstall() {
$repos = array('wp-multi-toolkit', 'wp-multi', 'WP-Multi-Search', 'wp-multi-comment-notifications');
foreach ($repos as $repo) {
delete_option("wpmt_update_latest_version_{$repo}");
delete_option("wpmt_update_release_notes_{$repo}");
delete_option("wpmt_update_is_prerelease_{$repo}");
}
delete_option('wpmt_update_show_prereleases');
delete_option('wpmt_multi_settings');
wp_clear_scheduled_hook('wpmt_update_check_event');
}
register_uninstall_hook(__FILE__, 'wpmt_uninstall');
/*
* Ban Funktion
*/
// Add Admin Menu
add_action('admin_menu', 'wp_multi_toolkit_setup_menu');
function wp_multi_toolkit_setup_menu() {
if (!current_user_can('manage_options')) {
return;
}
add_submenu_page(
'users.php',
'WP Multi Ban',
'WP Multi Ban',
'manage_options',
'wp-multi-ban',
'wp_multi_ban_options_page'
);
}
// WP Multi Ban Functions
### Function: Get IP Address
function wp_multi_ban_get_ip() {
$banned_options = get_option('wp_multi_ban_options', array('reverse_proxy' => 0));
if (!empty($banned_options['reverse_proxy']) && intval($banned_options['reverse_proxy']) === 1) {
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) {
if (!empty($_SERVER[$key])) {
foreach (explode(',', $_SERVER[$key]) as $ip) {
$ip = trim($ip);
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
return esc_attr($ip);
}
}
}
}
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
if (strpos($ip, ',') !== false) {
$ip = explode(',', $ip)[0];
}
return esc_attr($ip);
}
return '';
}
### Function: Preview Banned Message
add_action('wp_ajax_wp_multi_ban_admin', 'wp_multi_ban_preview_banned_message');
function wp_multi_ban_preview_banned_message() {
if (!current_user_can('manage_options')) {
wp_send_json_error('Zugriff verweigert');
}
$banned_stats = get_option('wp_multi_ban_stats', array('users' => array(), 'count' => 0));
$banned_message = stripslashes(get_option('wp_multi_ban_message', 'Ihr Zugriff auf %SITE_NAME% (%SITE_URL%) wurde gesperrt.'));
$banned_message = str_replace(
array(
'%SITE_NAME%',
'%SITE_URL%',
'%USER_ATTEMPTS_COUNT%',
'%USER_IP%',
'%USER_HOSTNAME%',
'%TOTAL_ATTEMPTS_COUNT%'
),
array(
esc_html(get_option('blogname')),
esc_url(get_option('siteurl')),
number_format_i18n($banned_stats['users'][wp_multi_ban_get_ip()] ?? 0),
esc_html(wp_multi_ban_get_ip()),
esc_html(@gethostbyaddr(wp_multi_ban_get_ip())),
number_format_i18n($banned_stats['count'] ?? 0)
),
$banned_message
);
wp_send_json_success(array('message' => $banned_message));
}
### Function: Print Out Banned Message
function wp_multi_ban_print_banned_message() {
$banned_ip = wp_multi_ban_get_ip();
$banned_stats = get_option('wp_multi_ban_stats', array('users' => array(), 'count' => 0));
$banned_stats['count'] = isset($banned_stats['count']) ? $banned_stats['count'] + 1 : 1;
$banned_stats['users'][$banned_ip] = isset($banned_stats['users'][$banned_ip]) ? $banned_stats['users'][$banned_ip] + 1 : 1;
update_option('wp_multi_ban_stats', $banned_stats);
$banned_message = stripslashes(get_option('wp_multi_ban_message', 'Ihr Zugriff auf %SITE_NAME% (%SITE_URL%) wurde gesperrt.'));
$banned_message = str_replace(
array(
'%SITE_NAME%',
'%SITE_URL%',
'%USER_ATTEMPTS_COUNT%',
'%USER_IP%',
'%USER_HOSTNAME%',
'%TOTAL_ATTEMPTS_COUNT%'
),
array(
esc_html(get_option('blogname')),
esc_url(get_option('siteurl')),
number_format_i18n($banned_stats['users'][$banned_ip] ?? 0),
esc_html($banned_ip),
esc_html(@gethostbyaddr($banned_ip)),
number_format_i18n($banned_stats['count'] ?? 0)
),
$banned_message
);
echo 'Gesperrt' . $banned_message . '';
exit;
}
### Function: Process Banning
function wp_multi_ban_process_ban($banarray, $against) {
if (!empty($banarray) && !empty($against) && is_array($banarray)) {
foreach ($banarray as $cban) {
if (wp_multi_ban_preg_match_wildcard($cban, $against)) {
wp_multi_ban_print_banned_message();
}
}
}
}
### Function: Process Banned IP Range
function wp_multi_ban_process_ban_ip_range($banned_ips_range) {
if (!empty($banned_ips_range) && is_array($banned_ips_range)) {
foreach ($banned_ips_range as $banned_ip_range) {
$range = explode('-', $banned_ip_range);
if (count($range) === 2) {
$range_start = trim($range[0]);
$range_end = trim($range[1]);
if (wp_multi_ban_check_ip_within_range(wp_multi_ban_get_ip(), $range_start, $range_end)) {
wp_multi_ban_print_banned_message();
break;
}
}
}
}
}
### Function: Banned
add_action('init', 'wp_multi_ban_banned', 1);
function wp_multi_ban_banned() {
$ip = wp_multi_ban_get_ip();
if (empty($ip)) {
return;
}
$banned_ips = get_option('wp_multi_ban_ips', array());
$banned_ips_range = get_option('wp_multi_ban_ips_range', array());
$banned_hosts = get_option('wp_multi_ban_hosts', array());
$banned_referers = get_option('wp_multi_ban_referers', array());
$banned_user_agents = get_option('wp_multi_ban_user_agents', array());
$banned_exclude_ips = get_option('wp_multi_ban_exclude_ips', array());
if (is_array($banned_exclude_ips) && in_array($ip, $banned_exclude_ips)) {
return;
}
if (is_array($banned_ips)) {
wp_multi_ban_process_ban($banned_ips, $ip);
}
if (is_array($banned_ips_range)) {
wp_multi_ban_process_ban_ip_range($banned_ips_range);
}
if (is_array($banned_hosts)) {
wp_multi_ban_process_ban($banned_hosts, @gethostbyaddr($ip));
}
if (is_array($banned_referers) && !empty($_SERVER['HTTP_REFERER'])) {
wp_multi_ban_process_ban($banned_referers, $_SERVER['HTTP_REFERER']);
}
if (is_array($banned_user_agents) && !empty($_SERVER['HTTP_USER_AGENT'])) {
wp_multi_ban_process_ban($banned_user_agents, $_SERVER['HTTP_USER_AGENT']);
}
}
### Function: Check Whether IP Within A Given IP Range
function wp_multi_ban_check_ip_within_range($ip, $range_start, $range_end) {
$range_start = ip2long($range_start);
$range_end = ip2long($range_end);
$ip = ip2long($ip);
return ($ip !== false && $range_start !== false && $range_end !== false && $ip >= $range_start && $ip <= $range_end);
}
### Function: Wildcard Check
function wp_multi_ban_preg_match_wildcard($regex, $subject) {
if (empty($regex) || empty($subject)) {
return false;
}
$regex = preg_quote($regex, '#');
$regex = str_replace('\*', '.*', $regex);
return preg_match("#^$regex$#i", $subject) === 1;
}
### Function: Activate Ban Module
function wp_multi_ban_activate() {
$default_message = 'Ihr Zugriff auf %SITE_NAME% (%SITE_URL%) wurde gesperrt.' . "\n\n" .
'Details:' . "\n" .
'- Ihre IP: %USER_IP%' . "\n" .
'- Hostname: %USER_HOSTNAME%' . "\n" .
'- Ihre Versuche: %USER_ATTEMPTS_COUNT%' . "\n" .
'- Gesamtanzahl Sperrversuche: %TOTAL_ATTEMPTS_COUNT%' . "\n\n" .
'Bitte kontaktieren Sie den Support von %SITE_NAME%, falls Sie Fragen haben.';
add_option('wp_multi_ban_ips', array());
add_option('wp_multi_ban_hosts', array());
add_option('wp_multi_ban_stats', array('users' => array(), 'count' => 0));
add_option('wp_multi_ban_message', $default_message);
add_option('wp_multi_ban_referers', array());
add_option('wp_multi_ban_exclude_ips', array());
add_option('wp_multi_ban_ips_range', array());
add_option('wp_multi_ban_user_agents', array());
add_option('wp_multi_ban_options', array('reverse_proxy' => 0));
}
### Function: Admin Options Page
function wp_multi_ban_options_page() {
if (!current_user_can('manage_options')) {
wp_die('Zugriff verweigert');
}
$text = '';
if (!empty($_POST['Submit'])) {
check_admin_referer('wp_multi_ban_templates');
$banned_options = array('reverse_proxy' => isset($_POST['banned_option_reverse_proxy']) ? 1 : 0);
$banned_ips = array();
$banned_ips_range = array();
$banned_hosts = array();
$banned_referers = array();
$banned_user_agents = array();
$banned_exclude_ips = array();
$admin_ip = wp_multi_ban_get_ip();
$admin_login = trim(wp_get_current_user()->user_login);
if (!empty($_POST['banned_ips'])) {
foreach (explode("\n", trim($_POST['banned_ips'])) as $banned_ip) {
$banned_ip = trim($banned_ip);
if ($admin_login === 'admin' && $banned_ip === $admin_ip) {
$text .= '
Diese IP \'' . esc_html($banned_ip) . '\' gehört dem Admin und wird nicht gesperrt.