Schlagwort: 🌍

  • email-versand


    E-Mail Versand

    Zentraler E-Mail-Versand

    Das E-Mail-Versand-Modul konfiguriert den SMTP-Versand fĂŒr das gesamte Netzwerk. Alle ausgehenden E-Mails des Weinhold Frameworks – von Kalender-Erinnerungen bis zu Passwort-Reset-Mails – laufen ĂŒber diese eine zentrale Konfiguration.

    Konfiguration

    SMTP-Server, Port, VerschlĂŒsselung (TLS/SSL), Benutzername und Passwort werden einmalig unter Weinhold → E-Mail Versand fĂŒr das gesamte Netzwerk eingetragen. Einzelne Subsites können optional einen abweichenden Absendernamen und eine eigene Absenderadresse festlegen.

    E-Mail-Templates

    Module können eigene E-Mail-Templates registrieren, die im Dashboard unter Weinhold → E-Mail Versand → Templates mit individuellem Betreff und Nachrichtentext angepasst werden können. Das Kalender-Modul nutzt dies z.B. fĂŒr Termin-Erinnerungen.

    In der Praxis

    Auf weinify.de lĂ€uft der gesamte transaktionale E-Mail-Versand – Passwort zurĂŒcksetzen, Kalender-Erinnerungen, Bestellbenachrichtigungen – ĂŒber dieses Modul. Kein Plugin-Wirrwarr, eine zentrale Stelle.

  • security-manager


    Security Manager

    Schutz vor Brute-Force-Angriffen

    Der Security Manager schĂŒtzt alle Sites im Netzwerk vor automatisierten Zugriffsversuchen und unerwĂŒnschten IPs. Er arbeitet still im Hintergrund und greift ein, bevor WordPress ĂŒberhaupt reagiert.

    IP-Blacklist

    Bestimmte IP-Adressen können dauerhaft auf eine Sperrliste gesetzt werden. Anfragen von diesen IPs werden sofort blockiert – noch bevor der WordPress-Login-Prozess startet.

    Login-Lockout

    Nach einer konfigurierbaren Anzahl fehlgeschlagener Login-Versuche wird die betreffende IP automatisch fĂŒr einen festgelegten Zeitraum gesperrt. Das stoppt Brute-Force-Angriffe zuverlĂ€ssig.

    Administration & Protokollierung

    Im Dashboard unter Weinhold → Security Manager können gesperrte IPs eingesehen, entsperrt oder dauerhaft blockiert werden. Alle Lockout-Ereignisse werden automatisch im Audit-Log protokolliert, sodass verdĂ€chtige AktivitĂ€ten nachvollziehbar bleiben.

  • geraetesicherheit


    GerÀtesicherheit

    Schutz vor unbekannten GerÀten

    Das GerĂ€tesicherheits-Modul erkennt beim Login, ob ein GerĂ€t zum ersten Mal verwendet wird. Ist das GerĂ€t unbekannt, muss der Nutzer eine Sicherheitsfrage beantworten, bevor der Zugang gewĂ€hrt wird – eine zusĂ€tzliche Schutzschicht, die auch bei kompromittierten Passwörtern greift.

    Wie es funktioniert

    Beim ersten Login von einem neuen Browser oder GerĂ€t erscheint eine zusĂ€tzliche Abfrageseite. Nach erfolgreicher Beantwortung wird das GerĂ€t als vertrauenswĂŒrdig gespeichert und beim nĂ€chsten Login automatisch erkannt – ohne erneute Abfrage.

    In der Praxis

    Das Modul wirkt netzwerkweit auf allen Sites gleichzeitig. Wer sich zum ersten Mal auf einer Subsite des Weinhold-Netzwerks einloggt, durchlĂ€uft automatisch diese SicherheitsprĂŒfung – ganz ohne zusĂ€tzliche Konfiguration auf Seitenebene.

  • benutzerverwaltung


    Benutzerverwaltung

    Das zentrale Login-System

    Die Benutzerverwaltung ist das Authentifizierungssystem des Weinhold Frameworks. Sie regelt Registrierung, Login, Profilbearbeitung, Passwort-Reset und Rollenzuweisung – netzwerkweit fĂŒr alle Sites.

    Shortcodes

    • [weinhold_auth_login] – Login-Formular
    • [weinhold_auth_register] – Registrierungsformular fĂŒr neue Nutzer
    • [weinhold_auth_profile] – Profilansicht und -bearbeitung fĂŒr eingeloggte Nutzer (Passwort Ă€ndern, Avatar hochladen)
    • [weinhold_auth_lostpassword] – Passwort zurĂŒcksetzen
    • [weinhold_auth_nav] – Navigationsleiste mit Links zu Login, Profil und weiteren Bereichen

    In der Praxis – weinify.de

    Auf weinify.de und allen Subsites lĂ€uft das komplette Login- und Registrierungssystem ĂŒber dieses Modul. Der [weinhold_auth_nav]-Shortcode ist im Custom Header eingebunden und sorgt fĂŒr die siteĂŒbergreifende Navigation zwischen Login, Profil und weiteren Seiten.

    Rollen & Berechtigungen

    Administratoren weisen Rollen und Modulberechtigungen zentral im Dashboard unter Weinhold → Nutzerverwaltung → Modulberechtigungen zu. So kann pro Modul konfiguriert werden, welche Rollen Lese- oder Schreibzugriff haben.

  • audit-log


    Audit-Log


    Der Audit-Log ist ein Core-Modul des Weinhold Frameworks – er ist immer aktiv und kann nicht deaktiviert werden. Er protokolliert alle relevanten Aktionen im gesamten Multisite-Netzwerk in einer gemeinsamen Tabelle, getrennt nach Site-ID.

    Allgemein

    Was wird protokolliert?


    Der Audit-Log ist in drei Kategorien unterteilt:
    WordPress-Ereignisse – werden automatisch vom Modul erfasst:
    Auth – Login (erfolgreich & fehlgeschlagen), Logout, Passwort-Reset-Anfragen und Resets inkl. IP-Adresse
    Benutzer & Rollen – Registrierung, Löschung, Rollenwechsel, ProfilĂ€nderungen, Zuweisung zu und Entfernung aus einzelnen Sites
    E-Mail – Erfolgreicher Versand und fehlgeschlagene E-Mails inkl. Betreff und EmpfĂ€nger
    Content – Erstellung, Aktualisierung und Löschung von BeitrĂ€gen, Seiten, Medien, Kommentaren sowie Taxonomie-Begriffen
    System – Plugin-Aktivierungen und -Deaktivierungen, Theme-Wechsel, Update-Prozesse
    Framework – Änderungen an Weinhold-Framework-Einstellungen (netzwerkweit & pro Site)
    Weinhold-Module – registrieren sich selbst ĂŒber einen Filter (z.B. Kalender, Security Manager, Highlights)
    Eigene Plugins – externe Plugins können sich ĂŒber einen separaten Filter eintragen

    Zwei Admin-Ansichten


    Pro Site unter Weinhold → Audit-Log – zeigt ausschließlich EintrĂ€ge der aktuellen Website, blĂ€tterbar (25/50/100/200 pro Seite, Sprung zu beliebiger Seite)
    Netzwerkweit unter Weinhold Netzwerk → Audit-Log – zeigt EintrĂ€ge aller Sites im Netzwerk, mit zusĂ€tzlichem Filter nach Site

    Filtern & Exportieren


    Beide Ansichten lassen sich filtern nach: Modul, Aktion, Status (ok / warning / error / info), Benutzer und Freitextsuche in Nachricht und Kontext. Alle gefilterten EintrĂ€ge können als CSV exportiert werden – der Export selbst wird ebenfalls im Log protokolliert.

    Statistiken


    Der Tab Statistiken gibt einen grafischen Überblick ĂŒber die AktivitĂ€t im gewĂ€hlten Zeitraum. Filterbar nach Site, Zeitraum (7 / 14 / 30 / 90 / 180 / 365 Tage) und Modul.
    Kacheln – Gesamtanzahl der Ereignisse sowie AufschlĂŒsselung nach Status (ok, warning, error, info)
    Verlauf – TĂ€gliches Balkendiagramm der Ereignisanzahl im gewĂ€hlten Zeitraum
    Ereignisse nach Modul – Horizontale Balken zeigen welche Module am aktivsten sind
    Top Aktionen – Die 15 hĂ€ufigsten Modul-Aktions-Kombinationen

    Einstellungen


    Die Einstellungen sind in drei Blöcke gegliedert:
    WordPress-Ereignisse – Einzelne Kategorien (Auth, Benutzer, E-Mail Erfolg/Fehler, Content, System, Framework) lassen sich netzwerkweit ein- oder ausschalten
    Weinhold-Module – Master-Schalter + pro Modul individuell aktivierbar/deaktivierbar
    Eigene Plugins – Master-Schalter + pro Plugin individuell aktivierbar/deaktivierbar
    Screenshot


    ZusĂ€tzlich gibt es eine Aufbewahrungsfrist (1–3650 Tage, Standard: 90 Tage).

    Pro-Site-Overrides


    Jede Untersite kann den Netzwerk-Standard fĂŒr jede einzelne Kategorie und fĂŒr jedes einzelne Modul ĂŒbersteuern – mit drei Optionen: Vererben (Netzwerk-Standard), Aktivieren oder Deaktivieren. So lĂ€sst sich z.B. die GerĂ€tesicherheit nur auf einer bestimmten Untersite aktivieren, wĂ€hrend sie auf den anderen vererbt-deaktiviert bleibt.

    Aufbewahrung


    Ein tĂ€glicher Cron-Job löscht automatisch alle EintrĂ€ge die Ă€lter als die konfigurierte Aufbewahrungsfrist sind – in Batches von 500 EintrĂ€gen um die Datenbank nicht zu belasten.
    Dateien

    modules/audit_log_core.php – Lade-Stub (nur Modul-Header, wird vom Framework-Core erkannt und geladen)
    modules/audit_log/audit_log.php – Daten- und Hook-Logik: Einstellungen, Datenbank-Installation, alle WordPress-Event-Hooks, die öffentliche API (log_event, get_rows, count_rows, get_stats, get_user_history). Wird auf jedem Seitenaufruf geladen, auch im Frontend.
    modules/audit_log/admin.php – Die komplette Admin-OberflĂ€che: Formular-Verarbeitung, CSV-Export sowie das Rendering aller Tabs (Log, Statistiken, Einstellungen, Bereinigung). Wird nur im WordPress-Backend geladen (is_admin()-PrĂŒfung in audit_log.php) – auf normalen Website-Seiten muss PHP diese Datei gar nicht erst einlesen.
    Kein eigenes CSS oder JS – das Modul nutzt ausschließlich WordPress-Admin-Standardstile.
    FĂŒr Entwickler

    Alle Funktionen in diesem Abschnitt liegen in modules/audit_log/audit_log.php (siehe „Dateien“ oben) – sie sind unabhĂ€ngig vom Admin-Bereich nutzbar.
    Es gibt zwei separate Registrierungswege – je nachdem ob es sich um ein Weinhold-Modul oder ein externes Plugin handelt:
    Weinhold-Module – Schritt 1: Modul registrieren

    add_filter( ‚weinhold_audit_modules‘, function( $modules ) {
    $modules[‚mein_modul‘] = array(
    ‚label‘ => ‚Mein Modul‘,
    ‚description‘ => ‚Kurzbeschreibung fĂŒr die Einstellungsseite.‘,
    ‚actions‘ => array(
    ‚eintrag_erstellt‘ => ‚Eintrag erstellt‘,
    ‚eintrag_geloescht‘ => ‚Eintrag gelöscht‘,
    ),
    );
    return $modules;
    } );

    Eigene Plugins – Schritt 1: Plugin registrieren

    add_filter( ‚weinhold_audit_custom_modules‘, function( $modules ) {
    $modules[‚mein_plugin‘] = array(
    ‚label‘ => ‚Mein Plugin‘,
    ‚description‘ => ‚Kurzbeschreibung.‘,
    ‚actions‘ => array(
    ‚aktion_a‘ => ‚Aktion A‘,
    ),
    );
    return $modules;
    } );

    Schritt 2 – Event auslösen (gleich fĂŒr beide)

    if ( function_exists( ‚weinhold_audit_log_log_event‘ ) ) {
    weinhold_audit_log_log_event(
    ‚mein_modul‘, // module_id (muss mit Registrierung ĂŒbereinstimmen)
    ‚eintrag_erstellt‘, // action
    ‚Neuer Eintrag wurde angelegt.‘,
    array(
    ’status‘ => ‚ok‘,
    ‚context‘ => array( ‚eintrag_id‘ => 42 ),
    )
    );
    }

    Die Funktion prĂŒft selbst ob das Logging fĂŒr das Modul aktiv ist und ob der jeweilige Master-Schalter gesetzt ist – kein eigenes Checking nötig.

    VerfĂŒgbare Kontext-Felder



    Feld Typ Bedeutung
    status string ok, warning, error oder info
    context array Beliebige zusĂ€tzliche Daten – werden als JSON gespeichert und sind durchsuchbar
    actor_user_id int Wer hat die Aktion ausgelöst (Standard: eingeloggter Nutzer)
    target_user_id int Wer ist betroffen (optional)
    site_id int FĂŒr welche Site (Standard: aktuelle Site)

    Datenstruktur eines Log-Eintrags


    So sieht ein gespeicherter Eintrag in der Datenbank aus:

    Spalte Typ Bedeutung
    id bigint, Auto-Increment PrimĂ€rschlĂŒssel
    created_at_gmt datetime Zeitstempel in UTC
    site_id bigint Welche Site im Netzwerk
    actor_user_id bigint, NULL möglich Wer hat die Aktion ausgelöst (NULL = System)
    target_user_id bigint, NULL möglich Wen betrifft es (optional)
    module varchar(64) Modul-ID, z.B. auth, content, mein_modul
    action varchar(100) Aktion, z.B. login, post_updated
    status varchar(20) ok / warning / error / info
    message text Lesbare Beschreibung
    context longtext JSON-String mit Zusatzdaten – durchsuchbar

    Daten lesen



    Funktion Beschreibung
    weinhold_audit_log_get_rows( array $filters, int $limit = 50, int $offset = 0 ): array Gibt gefilterte Log-EintrĂ€ge zurĂŒck. Filter: site_id, module, action, status, user_id, search, date_from, date_to. $limit ist auf 50.000 begrenzt.
    weinhold_audit_log_count_rows( array $filters ): int Gesamtanzahl fĂŒr Pagination – gleiche Filter wie oben.
    weinhold_audit_log_get_stats( int $site_id = 0, int $days = 30, string $module_filter = “ ): array Liefert die Daten hinter dem Statistiken-Tab: Gesamtanzahl, Status-AufschlĂŒsselung, tĂ€glicher Verlauf, Ereignisse nach Modul, Top-Aktionen.
    weinhold_audit_log_get_user_history( int $user_id, int $site_id = 0, int $limit = 20 ): array Letzte Aktionen eines bestimmten Benutzers.

    Registrierte Module abfragen


    Funktionen

    weinhold_audit_get_weinhold_modules(): array // Nur Weinhold-eigene Module
    weinhold_audit_get_custom_modules(): array // Nur externe/eigene Plugins
    weinhold_audit_get_registered_modules(): array // Beide kombiniert

    Wo die Einstellungen gespeichert werden



    Option Speicherort EnthÀlt
    weinhold_audit_log_settings Netzwerk-Option Bool-Schalter pro WP-Kategorie, log_weinhold_modules/log_custom_modules (Master-Schalter), weinhold_toggles/custom_toggles (Array pro Modul-ID), retention_days
    weinhold_audit_log_site_overrides Pro-Site-Option Gleiche Felder wie oben, aber dreiwertig: inherit / on / off. Modul-Overrides in weinhold_module_overrides / custom_module_overrides

    Besonderheiten

    Keine IP-Adress-Spalte in der Datenbank – IP-Adressen landen im context-JSON statt in einer eigenen Spalte. Die Freitextsuche durchsucht auch context, eine eigene Spalte war daher nicht nötig.
    weinhold_audit_log_get_user_history() existiert, wird aber bewusst nicht im Benutzerprofil angezeigt – die Funktion ist fertig und nutzbar, aber (noch) an keiner Stelle im Admin verlinkt.
    Kein doppeltes Logging bei neuen BeitrĂ€gen – transition_post_status ĂŒberspringt ÜbergĂ€nge, bei denen der alte Status new oder auto-draft war, weil die Erstellung bereits ĂŒber den save_post-Hook erfasst wird.
    DB-Migrationen laufen versioniert – Pattern: aktuelle Version aus get_site_option(‚weinhold_audit_log_db_version‘, 0) lesen, dann if ($installed_version < N) { … }-Blöcke nacheinander abarbeiten. So bleiben Updates idempotent, auch wenn jemand mehrere Versionen ĂŒberspringt.


  • shortcodes


    Shortcodes

    Das HerzstĂŒck des Frameworks

    Das Shortcode-Modul ist das RĂŒckgrat des Weinhold Frameworks. Es stellt eine zentrale Registry bereit, ĂŒber die alle anderen Module ihre Shortcodes registrieren – inklusive Beschreibung und Parameterdokumentation.

    Wie es funktioniert

    Jedes Modul ruft beim Laden weinhold_add_shortcode() auf und ĂŒbergibt Tag, Callback, Beschreibung und optionale Parameter-Dokumentation. Das Modul sammelt alle EintrĂ€ge und listet sie ĂŒbersichtlich im Admin-Dashboard unter Weinhold → Shortcodes auf – so hat man immer alle verfĂŒgbaren Shortcodes im Blick.

    Warum Core?

    Dieses Modul wird immer geladen, unabhĂ€ngig davon ob andere Module aktiv sind. Ohne es wĂŒrden keine Shortcodes anderer Module registriert. Es ist die stille Grundlage fĂŒr alles, was auf der Seite sichtbar wird.

  • kalender


    Kalender

    Termine fĂŒr das gesamte Netzwerk

    Das Kalender-Modul bringt einen netzwerkweiten Terminplaner ins Weinhold Framework. Termine werden zentral gespeichert und können von eingeloggten Nutzern erstellt, bearbeitet und geteilt werden – optional auch öffentlich fĂŒr alle Besucher. Auf weinify.de/kalender ist das Modul live im Einsatz.

    Shortcodes

    • [weinhold_calendar] – Persönlicher Kalender: Zeigt alle Termine netzwerkweit, die der eingeloggte Nutzer sehen darf. Beim Aktivieren des Moduls wird automatisch eine Seite unter /kalender mit diesem Shortcode erstellt.
    • [weinhold_public_calendar] – Öffentlicher Kalender: Zeigt die Termine der aktuellen Webseite. Nicht eingeloggte Besucher sehen nur öffentliche Termine.

    Sichtbarkeit von Terminen

    Beim Erstellen wÀhlt man zwischen drei Stufen:

    • 🌍 Netzwerk – Alle eingeloggten Nutzer können den Termin sehen
    • 🔒 Privat – Nur Ersteller und eingeladene Nutzer haben Zugriff
    • 🌐 Öffentlich – Jeder kann den Termin sehen, auch ohne Login (erfordert besondere Berechtigung)

    E-Mail-Erinnerungen

    Pro Termin kann eine E-Mail-Erinnerung aktiviert werden. In den persönlichen Einstellungen legt jeder Nutzer fest, wie viele Tage vorher die Erinnerung gesendet werden soll (0 = am selben Tag, -1 = deaktiviert). Der Versand lÀuft tÀglich automatisch per Cronjob.

    Farbkodierung & Herkunft

    Jeder Nutzer kann pro Webseite eine eigene Farbe fĂŒr die Terminanzeige konfigurieren. Bei der Termin-Erstellung wird außerdem die Herkunft (welche Subsite) zugeordnet – so behalten Mitglieder mehrerer Sites den Überblick.