WP Manifestindependent plugin directory
manifest / content / handschelle

Die-Handschelle

Wordpress Plugin zur Dokumentation von Straftaten politischer Personen.

by Die-Handschelle · github.com/vildemil/handschelle · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/vildemil/handschelle/archive/refs/heads/main.zip

Dokumentation von Straftaten politischer Personen als WordPress-Plugin. Documentation of crimes by political figures as a WordPress plugin.

Version 17.0
E-Mail info@die-handschelle.com
Website https://www.die-handschelle.com
Lizenz GPL-2.0+
Requires WordPress 5.5+, PHP 7.4+, GD Library

Table of Contents

Einleitung / Introduction

Die letzten Tage gab es immer wieder Berichte über verurteilte Straftäter in unseren Parlamenten, aber leider waren die Informationen immer dürftig, nur schwer zu finden und spätestens nach einigen Tagen verschwanden diese „Vorfälle" im digitalen Rauschen und wurden vergessen.

„Wie wäre es, wenn diese Informationen zentral gesammelt werden?" Eine interessante Frage und einige Stunden „Vibe-Coding" später gibt es nun „Die-Handschelle". Eine Datenbank in der nach kriminellen Mandatsträgern gefiltert werden kann.

Jeder kann mitmachen und neue Fälle melden. Jeder Eintrag wird vor der Veröffentlichung genau geprüft.


„Die-Handschelle" benötigt Deine Hilfe.

Während der Entwicklung dieser Datenbank stellte sich schnell heraus, dass es auf allen politischen Ebenen Mandatsträger mit einer zweifelhaften Vergangenheit gibt — und es sind so viele, dass wir nicht alle Informationen alleine finden können.

Das Projekt „Die-Handschelle" steht noch ganz am Anfang. „Die-Handschelle" wird stetig weiter entwickelt und weitere Funktionen sind in Vorbereitung.

Bitte unterstützt das Projekt, indem ihr dabei helft, Straftäter in unseren Parlamenten zu identifizieren.

Danke — „Die-Handschelle"


To Do

Planned features for upcoming versions:

  • Mailing-Liste: Newsletter / subscription list so followers are notified when new entries are published.
  • Multilanguage: Full multilingual support (DE / EN and more) via the WordPress language system.
  • Multiple Offences: Support for recording multiple separate crimes per person, each with its own status, verdict, and source link.
  • Multiuser: Role-based multi-user system with individual dashboards, personal submission histories, and per-user moderation rights.
  • International Version

Important Notes

  • New public submissions are not approved by default (freigegeben = 0). An admin must approve them via Übersicht → ✅ Freigeben.
  • Profile images are automatically resized to a maximum height of 450 px using the GD library (required).
  • CSV export uses UTF-8 with BOM and semicolons as delimiters for Excel compatibility. The import is header-based and backward-compatible.
  • The Edit page is hidden from the admin sidebar but accessible via the ✏ button in the Overview table.
  • Authors and higher (role Author, Editor, Administrator) see an inline edit button on every entry card in the frontend — Subscribers and Contributors do not.
  • The inline edit panel and admin form both include Google, Qwant, DuckDuckGo, Bing, Abgeordnetenwatch search buttons next to the name field.
  • All forms use WordPress nonce verification to prevent CSRF attacks. If nonce verification fails (e.g. after a long session or cached page), the user sees a visible error message (⚠️ Fehler beim Speichern) instead of a silent redirect.
  • All user input is sanitized with WordPress sanitization functions before writing to the database.
  • Social media icons are rendered as inline SVG with brand colors and hover effects — no external icon library required.
  • Image uploads are automatically renamed to name-HA.ext (e.g. max-mustermann-HA.jpg) using sanitize_title().
  • The admin image field supports two workflows: (1) pick from the WP Media Library via the wp.media modal, or (2) upload a new file directly.
  • Database auto-migration: After updating the plugin, maybe_upgrade_table() runs on plugins_loaded and adds any missing columns via dbDelta(). No data is ever lost.

Full notes: important-notes.txt


Release Notes

17.0 (2026-03-30)

  • bemerkung_straftat in [handschelle-wanted]: Added "Bemerkung" row to the wanted-poster card, shown after the Urteil row when the field is non-empty. Publicly visible to all visitors.

16.9 (2026-03-30)

  • Bemerkung zur Straftat: New bemerkung_straftat (TEXT) column added to the main table. Stores a public-facing remark about the primary offence — shown in the straftat card section for all visitors, separate from the admin-only bemerkung field. Admin edit form updated with a dedicated "Bemerkung zur Straftat" textarea; register/smart forms updated accordingly. CSV export/import and backup/restore include the new column. DB migration in maybe_upgrade_table() adds the column automatically on existing installs.

16.8 (2026-03-30)

  • [handschelle-straftaten-liste] CSS: Output wrapped in .hs-frontend; CSS now uses --hs-font, --hs-border, --hs-primary design tokens exclusively — no hardcoded values. Spacing and sizing aligned with .hs-statistik-ol pattern. Version bump 16.7 → 16.8.

16.7 (2026-03-30)

  • [handschelle-straftaten-liste]: New shortcode that renders a plain alphabetical text list of all unique Straftaten from approved entries. Duplicates are removed, entries are sorted case-insensitively A–Z, output is a two-column <ul> (single column on mobile). Version bump 16.6 → 16.7.

16.6 (2026-03-29)

  • Version bump: 16.5 → 16.6.
  • Documentation refresh: Updated README.md and all *.txt documentation files to reflect version 16.6.

16.5 (2026-03-28)

  • Version bump: 16.4 → 16.5.

16.4 (2026-03-28)

  • AI-Profil: all field placeholders: Expanded placeholder support from 3 to 19 fields. The AI-Profil button now passes every relevant entry field as a data-* attribute. The JS replace() function substitutes all of them before sending each question to the LLM. The admin description lists every available placeholder. New placeholders: {beruf}, {spitzname}, {geburtsort}, {geburtsdatum}, {geburtsland}, {verstorben}, {dod}, {aufgabe_partei}, {parlament}, {parlament_name}, {status_aktiv}, {urteil}, {aktenzeichen}, {status_straftat}, {bemerkung}. Version bump 16.3 → 16.4.

16.3 (2026-03-28)

  • AI-Profil button: Every entry card (for logged-in users) now shows a 🧾 AI-Profil button when at least one profile question is configured. Clicking it opens a modal overlay that fires the configured questions one by one to the selected LLM, displaying each Q&A pair as the answer arrives with a pulsing loading indicator. A ✅ Fertig line appears when all questions are answered. The modal can be closed with ✕, a click on the backdrop, or Escape.
    • Admin config (Ollama KI → 🧾 AI-Profil Fragen): textarea for questions (one per line, {name} / {partei} / {straftat} placeholders), system-prompt field, provider dropdown (Ollama / OpenAI / Claude / Gemini — only shows providers with a configured key), and model text input.
    • Backend: ajax_profile_ask AJAX handler routes to the selected provider; inject_profile_config() injects window.hsProfileConfig into the page footer.
    • Version bump 16.2 → 16.3.

16.2 (2026-03-28)

  • Multi-model list: grouped & sorted: The Mehrere Modelle gleichzeitig checkbox list now renders a visible provider header (Ollama, OpenAI, Claude, Gemini) before each group, and sorts models alphabetically by name within each group. Version bump 16.1 → 16.2.

16.1 (2026-03-28)

  • Provider prefix in model dropdown & lists: Every entry in the model selector and multi-model checkbox list now shows Provider - Model (e.g. Ollama - llama3.2, OpenAI - gpt-4o, Claude - claude-sonnet-4-5, Gemini - gemini-2.0-flash). Applies both when a single provider is active and when multiple providers are combined with optgroups. The group-header rows have been removed from the checkbox list since the provider is already visible in each label. Version bump 16.0 → 16.1.

16.0 (2026-03-28)

  • Google Gemini integration: Added full Gemini support as a fourth LLM provider. New 🤖 Google Gemini section in the Ollama KI admin page with API-key field (placeholder AIza…), set/clear flow, model dropdown (gemini-2.5-pro, gemini-2.0-flash, gemini-2.0-flash-lite, gemini-1.5-pro, gemini-1.5-flash), and connection-test button. Two new AJAX handlers (ajax_chat_gemini, ajax_chat_gemini_models) call the Google Generative Language API with the correct contents/parts format and optional system_instruction. The JS chat widget loads Gemini models in parallel, displays them in an optgroup, maps them to hs_chat_gemini, and includes them in multi-model mode and the repost picker. Gemini also appears in the admin Chat-Test panel. Version bump 15.9 → 16.0.

15.9 (2026-03-28)

  • ChatGPT model update: Added gpt-4.5, o3, and o4-mini to the OpenAI model list in the admin dropdown and the ajax_chat_openai_models endpoint. Fixed ajax_chat_openai to omit the temperature parameter for o-series reasoning models (o1, o3, o3-mini, o4-mini), which do not support it. Version bump 15.8 → 15.9.

15.8 (2026-03-27)

  • Ollama Local / Remote toggle: Added a Server-Typ radio selector (🖥️ Lokaler Server / ☁️ Remote-Server) to the Ollama KI admin page. In local mode the URL is always forced to http://localhost:11434 and the URL/API-key fields are hidden. In remote mode the URL and API-key fields appear; the chat widget hides its URL-override row and all server-side AJAX handlers ignore any client-supplied URL, keeping the remote endpoint fully admin-controlled. Version bump 15.7 → 15.8.

15.7 (2026-03-27)

  • Ollama Cloud Config: Added optional Cloud API-Key field to the Ollama KI admin page (Verbindung section). When set, the key is sent as an Authorization: Bearer … header on all requests to the Ollama server (both chat and model-list endpoints), enabling use of cloud-hosted or authentication-protected Ollama instances. The key is stored in the WordPress options table and never exposed to the frontend. Version bump 15.6 → 15.7.

15.6 (2026-03-26)

  • Admin Chat-Test: New 💬 Chat-Test section in the Ollama KI admin page. Select any configured provider (Ollama, OpenAI, Claude), pick a model from a dynamically loaded dropdown, type a test question, and click ▶ Senden to fire a real chat request. The reply is shown inline with model name, response time, and tokens/sec. Only providers with API keys configured appear in the provider selector. Version bump 15.5 → 15.6.

15.5 (2026-03-26)

  • Claude (Anthropic) integration: Configure an Anthropic API key under Ollama KI → Claude (Anthropic) in the WordPress admin. Once set, Claude models (claude-opus-4-5, claude-sonnet-4-5, claude-3-5-sonnet-20241022, claude-3-5-haiku-20241022, claude-3-opus-20240229, claude-3-haiku-20240307) appear alongside Ollama and OpenAI models in the chat widget's model dropdown (grouped by provider). All existing features — Repost, Multi-LLM mode — work transparently with Claude models. The backend routes each request to the Anthropic Messages API (hs_chat_claude); the key is never exposed to the frontend. Version bump 15.4 → 15.5.

15.4 (2026-03-26)

  • OpenAI / ChatGPT integration: Configure an OpenAI API key under Ollama KI → OpenAI / ChatGPT in the WordPress admin. Once set, GPT models (gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-4, gpt-3.5-turbo, o1, o3-mini) appear alongside local Ollama models in the chat widget's model dropdown (grouped by provider). All existing features — Repost, Multi-LLM mode — work transparently with OpenAI models. The backend routes each request to the correct API (hs_chat for Ollama, hs_chat_openai for OpenAI); the key is never exposed to the frontend. Version bump 15.3 → 15.4.

15.3 (2026-03-26)

  • [handschelle-chat] – Multi-LLM mode: New columns icon (⊟) button in the chat header activates multi-model mode. When active, the settings panel reveals a checkbox list of all locally available Ollama models. Checking two or more models and sending a message fires parallel AJAX requests; responses appear side-by-side in labelled columns (single column on mobile). The first successful reply is used to maintain conversation history for follow-up questions. Version bump 15.2 → 15.3.

15.2 (2026-03-26)

  • [handschelle-chat] – Repost with different LLM: Each assistant response now shows a "↻ Repost" button in the status line. Clicking it reveals an inline model selector populated from the local Ollama instance; confirming re-sends the same user message (with full conversation context up to that point) to the chosen model. The alternative response appears directly below the original, visually marked with an accent border. No PHP changes required — the existing hs_chat AJAX endpoint handles any model.

15.1 (2026-03-26)

  • KI-Analyse link format: Updated all card/ticker templates to build the KI link for each Straftat as /chat/?frage="Was weist du über"<Name>+<Partei>+<Straftat>? (URL-encoded in code).
  • Version bump: Bumped version from 15.0 to 15.1; updated README.md and all .txt files to reflect the new version.

15.0 (2026-03-26)

  • Version bump: Bumped version from 14.9 to 15.0; updated README.md and all .txt files to reflect the new version.

14.9 (2026-03-26)

  • WordPress theme responsive width: Mobile always renders at 95% viewport width; desktop (≥782px) always renders at 90% viewport width — implemented via CSS root padding variable overrides in wordpressc template/style.css and style.min.css.

14.8 (2026-03-25)

  • New shortcode [handschelle-straftaten]: Dropdown listing all distinct Straftat values (from both the main table and the approved offences table). Selecting a crime displays full entry cards (render_card()) for every person linked to that crime — main straftat field and any additional offence in wp_die_handschelle_offences are both searched. Query parameter: hs_straftat.
  • Handschelle_Database::get_distinct_straftaten(): New DB method — UNION of straftat from main table and straftat from offences table (both freigegeben=1, ordered A-Z).
  • Handschelle_Database::get_entries_by_straftat(): New DB method — returns full rows (SELECT *) for all approved entries where straftat matches in the main table or in any approved offence row.

14.7 (2026-03-25)

  • Version bump: Bumped version from 14.6 to 14.7.

14.6 (2026-03-24)

  • "Status der Straftat" – added "Berufung" option: Extended the status dropdown for offences with a fourth option "Berufung" (appeal). Available choices are now: "Ermittlungen laufen", "Verurteilt", "Eingestellt", "Berufung".

14.5 (2026-03-24)

  • CSS – removed shortcode output width restrictions: Removed max-width: 440px from .hs-login-wrap and .hs-register-wrap; removed max-width: 600px from .hs-wanted-card; removed max-width: 520px from pie-chart canvas elements ([handschelle-pie-partei], [handschelle-pie-partei-filter]). All shortcode outputs now expand to the full available container width.

14.4 (2026-03-24)

  • README – txt files as chapters: Replaced flat "Links to Documentation" list with individual ## chapter sections for each .txt file (build-package.txt, code-reference.txt, fields-database-schema.txt, Next-Commands.txt, plugin-structure.txt, prompt.txt, shortcodes.txt). important-notes.txt and instructions-for-ai-llm.txt retain their inline content but now include a link to the txt file. Table of Contents updated accordingly.

14.3 (2026-03-23)

  • [handschelle-smart] – selector heading black: "👤 Person auswählen" heading changed to "Bekannte Personendaten laden!" with black background and white text.
  • [handschelle-smart] – selector label updated: Label renamed from "Bekannte Person" to "Bekannte Personendaten laden!".
  • [handschelle-smart] – note text colour black + bold: The person-selector hint text now displays in black with bold weight for visibility.
  • [handschelle-smart] – loaded field data shown BOLD: Locked/loaded fields (hs-field-locked) now render values in bold (font-weight: bold) so loaded data is clearly distinguishable from empty fields.
  • [handschelle-smart] – Personal section 2-column layout: Personal section restructured into left (image) and right (personal data fields) columns using flexbox; responsive single-column on narrow screens.
  • [handschelle-smart] – image upload always in Personal left column: Bild upload (when not loaded) and read-only Bild preview (when person loaded) are both placed in the left column of the Personal section.
  • README – Installation from GitHub moved: Installation from GitHub section (with all sub-sections) removed from README; content lives in installation-from-github.txt.
  • README – Connect GitHub to AI Tools moved: Connect GitHub to AI Tools section removed from README; content moved to new Connect GitHub to AI Tools.txt.

14.2 (2026-03-23)

  • [handschelle-smart] – section headings styled red: ⚖ Neue Straftat melden, 🏛 Politik, 📱 Social-Media Links, and 📋 Personal headings now display with a red background and white text to visually distinguish form sections.
  • [handschelle-smart] – renamed Straftat heading: "⚖ Details zur Straftat" renamed to "⚖ Neue Straftat melden. (Neue Einträge werden vor Freigabe überprüft!)" to inform users that new entries are reviewed before approval.
  • [handschelle-smart] – person-selector note updated: Hint text updated to "Wähle eine bereits bekannte Person aus dem Dropdown, um deren Daten zu übernehmen. Alle geladenen Felder werden schreibgeschützt!".

14.1 (2026-03-23)

  • New shortcode [handschelle-pie-partei-filter]: Pie chart showing entries per party (same as [handschelle-pie-partei]) with an "Nur Aktive anzeigen" checkbox; when checked, the chart filters to only entries where status_aktiv = 1.
  • [handschelle-wanted] – exclude iNAKTIV persons: The wanted-poster shortcode now adds AND status_aktiv = 1 to its query so persons marked as inactive are never selected for display.

14.0 (2026-03-23)

  • Version bump: Bumped version from 12.Alpha.04 to 14.0; updated README.md and all .txt files to reflect the new version.

12.Alpha.02 (2026-03-22)

  • Fix: Weitere Straftaten not saving (MySQL 8.0): Removed invalid DEFAULT '' from TEXT NOT NULL columns in create_table() and create_offences_table() — MySQL 8.0 strict mode rejects this syntax (Error 1101), causing the offences table to never be created and all insert_offence() calls to silently fail. maybe_upgrade_table() now always calls create_offences_table() before the version-check early-return so the table is self-healing. The recreate admin action now also creates the offences table.

12.Alpha.01 (2026-03-22)

  • Version bump: Bumped version from Final-11 to 12.Alpha.01; updated README.md and all .txt files to reflect the new version.

Final-11 (2026-03-19)

  • Version bump: Bumped version from Final-10 to Final-11; updated README.md and all .txt files to reflect the new version.

Final-10 (2026-03-19)

  • Version milestone: Marked version 10.1 as Final-10 to signify the stable, production-ready final release of the version-10 feature set.

10.1 (2026-03-18)

  • "Straftat melden!" link on every card: All cards now show a permanent ⚠ Straftat melden! mailto link (info@die-handschelle.com) with a pre-filled subject line (Straftat melden - <Name> - <Partei>). Visible to all visitors including guests (previously "Eintrag melden!" was logged-in only). Added .hs-card-melden and .hs-melden-link CSS classes.

10.0 (2026-03-18)

  • Version milestone: Consolidated all changes from 9.3–9.6 into stable release 10.0. No functional changes; version bumped to mark the multiple-offences feature set as production-ready.

9.6 (2026-03-18)

  • [handschelle-privacy] shortcode: New shortcode renders the bilingual Datenschutz / Privacy chapter as styled HTML (two cards, DE + EN). Covers GDPR legal basis, stored / not-stored data, guest anonymisation, and deletion-request contact. CSS classes: .hs-privacy, .hs-privacy-section, .hs-privacy-heading, .hs-privacy-divider.

9.5 (2026-03-18)

  • CSS – offence buttons: Added .hs-offence-remove-btn / .hs-offence-inline-remove styles (red delete button; WP's .button class is admin-only and not available on the frontend). Added .hs-add-offence-inline-btn for the frontend inline-edit panel. Added .hs-card-extra-offence p paragraph style to match .hs-card-straftat p.

9.4 (2026-03-18)

  • Backup & Restore: Offences included: backup_full() now exports a second file handschelle-offences.csv inside the ZIP (columns: entry_id, straftat, urteil, status_straftat, link_quelle, aktenzeichen, bemerkung). restore_full() now reads this file and re-inserts all additional offences after the main entries are restored, mapping old entry IDs to newly-assigned IDs via an $entry_id_map. The success message now reports offence count separately. Backward-compatible: old backups without handschelle-offences.csv restore main entries normally with zero offences.

9.3 (2026-03-18)

  • Multiple Offences per Person: Each person entry can now have any number of additional offences. A new table wp_die_handschelle_offences stores the extra offences (fields: straftat, urteil, status_straftat, link_quelle, aktenzeichen, bemerkung). The primary offence remains in the main table for full backward compatibility.
  • Admin form: New "⚖ Weitere Straftaten" section with existing offences shown as editable rows, a delete button per row, and an "Add further offence" button (JS-based cloning of a template row). Works for both "New Entry" and "Edit Entry" pages.
  • Frontend inline-edit: Same add/remove functionality available in the per-card inline edit panel.
  • Card display: render_card() fetches and renders all additional offences below the primary offence, each with its own status badge, source link (logged-in users only), and optional remarks. Each is labelled "Straftat 2", "Straftat 3", etc.
  • Cascade delete: Deleting a main entry also deletes all its associated offences.
  • DB migration: maybe_upgrade_table() now creates the offences table if missing. Existing data is untouched.

9.2 (2026-03-16)

  • Website-Icon für Gäste: Nicht eingeloggte Besucher sehen statt des Personenfotos das Website-Icon (get_site_icon_url). Das Foto-Bild ist nicht verlinkt – der Klick-Link zum Detailprofil entfällt für Gäste.

9.1 (2026-03-16)

  • Karten-Footer für Gäste ausgeblendet: Nicht eingeloggte Besucher sehen keine Links mehr in Karten (keine Quelle, keine E-Mail, keine Suchmaschinen, kein Social-Media, kein „Eintrag melden"). Der gesamte hs-card-footer wird nur noch gerendert, wenn is_user_logged_in() gilt.

9.0 (2026-03-16)

  • Gast-Karten: Website-Icon statt Profilfoto: Nicht eingeloggte Besucher sehen in render_card das WordPress-Site-Icon (get_site_icon_url(96)) als Kartenbild statt des echten Profilfotos. Kein Site-Icon gesetzt → Fallback auf 👤. Klasse hs-card-img-siteicon sorgt für object-fit:contain und Innenabstand. Der Bearbeiten-Button prüft jetzt korrekt publish_posts über $is_author.

8.9 (2026-03-16)

  • Name-Datenschutz (global): Neue Hilfsfunktion hs_display_name() in helpers.php. Nicht eingeloggte Besucher sehen statt des Namens ████████. Gilt für alle Shortcodes: Karten (render_card), alle Ticker-Varianten, Wordcloud, Statistik-Tabelle, Bilder-Galerie und Namens-Dropdowns.

8.8 (2026-03-16)

  • [handschelle-ticker-icons]: Neuer Shortcode – identisch wie [handschelle-straftat-link], aber mit kleinem rundem Profilbild (28 px) vor dem Namen; kein Bild → Initiale des Namens als Platzhalter (dunkelblauer Kreis). Attribute speed und page wie bei [handschelle-straftat-link].

8.7 (2026-03-16)

  • [handschelle-straftat-link]: Jeder Eintrag ist jetzt als Ganzes ein klickbarer Link (<a>) auf ?hs_name_name=<name>; einzelne Partei- und Name-Links entfernt zugunsten des Item-Links.

8.6 (2026-03-16)

  • [handschelle-result]: Neuer Shortcode – zeigt Eintrags-Karten für ?hs_name_name=<name>; zeigt nichts an, wenn kein Name übergeben wurde oder keine freigegebenen Einträge vorhanden sind. Gedacht als Zielseite für Links aus [handschelle-straftat-link].

8.5 (2026-03-16)

  • Straftat-Link-Ticker [handschelle-straftat-link]: Neuer Shortcode – identisches Layout wie [handschelle-straftat], aber Name und Partei sind klickbare Links; Name verlinkt auf ?hs_name_name=<name>, Partei auf ?hs_name_partei=<partei>; optionales Attribut page für Ziel-URL (Standard: aktuelle Seite).
  • CSS: .hs-st-link – dezenter Unterstrich-Stil (dotted) für Ticker-Links; Hover-Effekt (Opacity).

8.4 (2026-03-16)

  • Registrierungsformular erweitert: [handschelle-register] hat jetzt zusätzliche optionale Felder: Vorname, Nachname, Spitzname, Webseite; Vorname/Nachname nebeneinander (2-Spalten-Grid, responsive); gespeichert via wp_update_user() nach Kontoerstellung.

8.3 (2026-03-16)

  • Benutzer-Freischaltung: Neue Registrierungen erhalten den Status pending (User-Meta hs_user_status); Login ist gesperrt bis zur Freischaltung; Admin wird per E-Mail benachrichtigt.
  • Login-Sperre: authenticate-Filter blockiert pending- und deactivated-Konten mit jeweils eigenem Fehlertext.
  • Admin-Menü: 👥 Benutzer (Die-Handschelle → Benutzer): Übersicht aller Benutzer mit Status-Badge; Aktionen: Freischalten, Deaktivieren, Löschen; Pending-Zähler als Badge im Menütitel; Admins sind vor Änderungen geschützt.

8.0 (2026-03-16)

  • README: Shortcodes overview table sorted A-Z; added missing [handschelle-ticker] entry; fields in Person, Crime/Legal and Social Media schema groups sorted A-Z; straftat type corrected to TEXT (no limit); version constant updated to 8.0; shortcodes.php count corrected to 24.
  • To Do: Added To Do section (after Einleitung) with planned features: Mailing-Liste, Multilanguage, Multiple Offences, Multiuser.

7.9 (2026-03-16)

  • Straftat-Feld: Textfarbe auf Schwarz (#000000) gesetzt in allen Anzeigebereichen (Karte, Bild-Tooltip, Ticker); 200-Zeichen-Limit entfernt (kein maxlength, kein substr-Truncation); vollständiger Text wird in beiden Ticker-Shortcodes angezeigt.

7.8 (2026-03-16)

  • Registrierungs-Formular [handschelle-register]: Neues Registrierungs-Shortcode mit Feldern für Benutzername, E-Mail und Passwort (mit Bestätigung); respektiert die WordPress-Einstellung „Jeder kann sich registrieren", zeigt passende Fehlermeldungen und sendet nach Erfolg E-Mails an Nutzer und Admin.

7.7 (2026-03-16)

  • Login-Formular [handschelle-login]: Neues Anmelde-Shortcode mit Benutzername/Passwort-Eingabe, „Angemeldet bleiben"-Checkbox, „Passwort vergessen"-Link und optionalem redirect-Attribut; eingeloggten Nutzern wird eine Willkommensnachricht mit Abmelden-Button angezeigt.

7.6 (2026-03-16)

  • Straftat-Ticker [handschelle-straftat]: Neuer News-Ticker mit weißem Hintergrund und schwarzem Rahmen; zeigt Partei (rot), Name (schwarz), Straftat (schwarz) und Status Straftat (rot) aller freigegebenen Einträge. Geschwindigkeit über Attribut speed einstellbar.

7.5 (2026-03-16)

  • News-Ticker [handschelle-ticker]: Neuer Shortcode mit horizontalem CSS-Laufband; zeigt Name, Partei und Straftat aller freigegebenen Einträge. Geschwindigkeit über Attribut speed (Sekunden, Standard 40, Minimum 5) einstellbar.

7.4 (2026-03-16)

  • Profilfelder in Karten & Formularen: Neue Felder geburtsland, email_privat, email_oeffentlich und spitzname werden nun in Frontend-Karten, Inline-Edit-Formular und Admin-Übersicht angezeigt.

7.3 (2026-03-15)

  • Domain & E-Mail update: Changed all references from www.die-handschelle.dewww.die-handschelle.com and Info@die-handschelle.deinfo@die-handschelle.com across shortcodes, README, and all doc files; also fixed typo info@hanschelle.cominfo@die-handschelle.com in the "Eintrag melden" mailto link.

7.2 (2026-03-15)

  • Fix Backup/Restore image mapping: Converted restore_full() from fixed numeric column indices to header-based mapping (same approach as CSV import); old backups created before the verstorben/dod columns were added now restore correctly instead of assigning bild to the wrong column.
  • Fix Backup/Restore bild validation: After attempting ID remapping, if the attachment ID is not found in the remap table and does not exist on the current site, bild is cleared instead of storing a stale/wrong ID.
  • Fix image display after restore/import: handschelle_get_image_url() now falls back from mediumfullwp_get_attachment_url() so images are always visible even when WP thumbnail sizes weren't regenerated.
  • Fix image replacement on edit: Editing an entry and uploading a new image now deletes the old attachment from the media library (admin edit and frontend inline edit), preventing orphaned files and wrong image references.

7.1 (2026-03-15)

  • Cards & Forms: Added verstorben/dod and bemerkung_person to frontend cards (display), frontend submission form, and inline edit form; JS toggle converted to delegated class-based handler (hs-verstorben-cb / hs-dod-row) so it works across all form instances on the same page.
  • CSS: Added .hs-badge-verstorben (grey badge) and .hs-card-bemerkung-person styles.

7.0 (2026-03-15)

  • Fix Urteil maxlength in shortcodes: Frontend submission form and frontend edit form both had maxlength="50" for urteil; corrected to maxlength="200" to match DB schema and admin form.

6.9 (2026-03-15)

  • DoD / Verstorben: Added verstorben checkbox and dod (date of death) date field to Eintragsdetails; DoD field is shown/hidden via JS when checkbox is toggled.
  • Bemerkung zur Person: New bemerkung_person text field (max. 500 chars) added to Eintragsdetails section for person-level remarks.
  • Urteil erweitert: urteil field expanded from 50 to 200 characters in DB schema, form, sanitizer, and CSV import/export.

6.8 (2026-03-15)

  • Table of Contents: Added TOC after the header metadata block with links to all ## and ### sections

6.7 (2026-03-15)

  • Restore .txt content to README: All documentation sections (Installation, Build, Shortcodes, Fields/Schema, Code Reference, Plugin Structure, AI Instructions, Recreate from Scratch) merged back inline into README.md; Dokumentation link section removed

6.6 (2026-03-15)

  • Important Notes in README: Moved "Important Notes" section back into README.md (was extracted to important-notes.txt in 6.5)

6.5 (2026-03-15)

  • Dokumentation aufgeteilt: Alle Themen-Abschnitte aus README.md in separate .txt-Dateien ausgelagert; README.md enthält nur noch Projektinfo, Einleitung und Release Notes

6.4 (2026-03-15)

  • Complete README update: Fixed HANDSCHELLE_VERSION constant example (6.26.3); corrected field/column count from 32 to 31 everywhere (Fields section, CSV section, Recreate prompt); fixed shortcode count from 16 to 19 in Plugin Structure; added missing [handschelle-asc-link] to Shortcodes overview table, detailed section, and Recreate prompt; updated AI-instructions version examples from 6.2 to 6.3

6.3 (2026-03-15)

  • Build / Package: Added ## Build / Package section with zip commands to create a distributable ZIP, a quick one-liner variant, and a GD verification command

6.2 (2026-03-14)

  • Recreate from Scratch: Added ## Recreate from Scratch section to README — a complete, self-contained prompt for rebuilding the entire plugin with an AI assistant from a blank slate
  • ToC: Added entry for new section; fixed stale HANDSCHELLE_VERSION // '6.0' reference in Code Reference

6.1 (2026-03-14)

  • Version policy: Version is now bumped by 0.1 per commit (was 0.01); old comment in die-handschelle.php corrected accordingly
  • LLM Instructions: Added ## Instructions for AI / LLM section to README with version-bump rules, shortcode checklist, schema rules, and general coding standards

6.0 (2026-03-14)

  • [wordcloud-name]: Word cloud of all approved person names — font size proportional to entry count, shows Name (Partei), tooltip shows exact count; pure CSS/HTML, no external library
  • [wordcloud-urteil]: Word cloud of all distinct verdicts (urteil) — font size proportional to frequency; only entries with a non-empty verdict are included
  • Dropdown styling: Text color set to black (#000), background set to white (#fff), transparency removed — applies to all select elements (.hs-select, .hs-field select, .hs-edit-form select, .hs-bulk-select)
  • Eintrag melden: Every card now has a ⚠️ Eintrag melden! mailto link in the footer — opens a pre-addressed e-mail to info@die-handschelle.com with subject Meldung - <Name> - <Partei>
  • Bilder-Galerie: Hover tooltip and click-link removed from gallery images — images display as plain <img> tags with name/crime captions only
  • Edit-Button Sichtbarkeit: Inline-edit button and panel on frontend cards are now visible only to users with role Author or higher (publish_posts capability) — Subscribers and Contributors no longer see the edit controls

3.09 (2026-03-14)

  • Hintergrundfarbe: --hs-bg auf #f0f0f0 (neutrales Hellgrau) geändert; alle Eingabefelder und Dropdowns nutzen var(--hs-bg) statt #fafafa
  • Bugfix – Neue Einträge nicht gespeichert: Bei Nonce-Fehler (z. B. Cache) erhält der Nutzer jetzt eine sichtbare Fehlermeldung (⚠️ Fehler beim Speichern. Bitte Seite neu laden…) statt stiller Weiterleitung; $wpdb->insert()-Ergebnis wird geprüft — Erfolgsmeldung erscheint nur bei tatsächlich gespeichertem Eintrag; datum_eintrag fällt jetzt auch bei leerem String auf das aktuelle Datum zurück (?: statt ??)
  • Bugfix – Backup/Restore Feldzuordnung: Im Restore-Code waren alle CSV-Spalten ab Index 4 um 2 Positionen verschoben (geburtsort und geburtsdatum wurden übersprungen); bild-ID wurde aus Spalte 4 (geburtsort) statt aus Spalte 6 gelesen → falsche Bildzuordnung; geburtsort, geburtsdatum, sm_linkedin, sm_xing, sm_truth_social wurden nie wiederhergestellt; freigegeben wurde aus Spalte 23 (sm_wikipedia) statt aus Spalte 28 gelesen — alles korrigiert

3.08 (2026-03-14)

  • [handschelle-asc]: Output is now horizontally centered (justify-content: center)

3.07 (2026-03-14)

  • [handschelle-disclaimer]: E-Mail → info@die-handschelle.com, Website → www.die-handschelle.com, Buy-Me-A-Coffee → buymeacoffee.com/dorfmuellersak47, tagline in quotation marks
  • Neuer Shortcode [handschelle-asc]: Horizontale zentrierte Liste aller Parteien mit Eintragsanzahl (A→Z, ohne Header, kleiner Font)
  • Neue Felder: geburtsort (VARCHAR 100), geburtsdatum (DATE), sm_linkedin, sm_xing, sm_truth_social — in allen Formularen, Karten, CSV
  • Alter: Admin-Übersicht zeigt berechnetes Alter; Karte zeigt Geburtsdatum + Alter
  • Suchmaschinen: Qwant, DuckDuckGo und Bing überall, wo bisher nur Google stand (Karten-Footer, Name-Dropdown, Name-Anzeige, Admin-Formular, Inline-Edit-Panel)
  • [handschelle-bilder] klickbar: Klick auf Bild öffnet Personendetails via ?hs_name=<Name>; neues Attribut link="" für die Zielseite
  • CSV Import: Komplett auf header-basiertes Mapping umgestellt (rückwärtskompatibel mit alten CSVs); CSV-Export enthält alle 32 Spalten

3.06 (2026-03-14)

  • [handschelle-bilder]: Name und Straftat als Beschriftung unter jedem Bild
  • [handschelle-bilder]: Reiner CSS-Tooltip beim Hover mit allen Personendaten
  • [handschelle-anzeige]: Standard limit auf 0 gesetzt (keine Paginierung)
  • DB-Migration: maybe_upgrade_table() — fehlende Spalten werden via dbDelta() beim Plugin-Update automatisch ergänzt, kein Datenverlust

3.05 (2026-03-13)

  • Keine Hintergrundfarben: Hintergrundfarben von Frontend-Containern entfernt — Plugin integriert sich neutral ins Theme
  • Volle Breite: Alle Shortcode-Wrapper verwenden hs-full-width (100 % Breite)
  • Alle Links im Karten-Footer: Google- und Abgeordnetenwatch-Links aus dem Karten-Header entfernt; alle Links jetzt im .hs-card-footer
  • Neuer Shortcode [handschelle-statistik-nolink]
  • MediaID-Remapping beim Backup/Restore: bild-map.json in ZIP; automatisches ID-Remapping beim Restore

3.04 (2026-03-13)

  • Such-Buttons überall: Google und Abgeordnetenwatch in Admin-Formular, Frontend-Inline-Edit und Name-Anzeige
  • Karten-Bild klickbar: Profilfoto verlinkt auf ?hs_name=<name> der gleichen Seite
  • Vollbreite Name-Ergebnisse: .hs-cards-single für Personenansicht

3.03 (2026-03-13)

  • Bild-Umbenennung: Schema geändert auf <Name>-HA.<ext> (z. B. max-mustermann-HA.jpg)
  • Neuer Shortcode [handschelle-statistik-ol]
  • Admin: Backup & Restore: Vollständiges Backup

This README is longer than the copy stored here. Read the rest on GitHub →