Die-Handschelle
Wordpress Plugin zur Dokumentation von Straftaten politischer Personen.
by Die-Handschelle · github.com/vildemil/handschelle · website
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.zipDokumentation von Straftaten politischer Personen als WordPress-Plugin. Documentation of crimes by political figures as a WordPress plugin.
| Version | 17.0 |
| 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
- To Do
- Important Notes
- Release Notes
- Installation from GitHub
- Shortcodes
- Overview
[handschelle][handschelle-anzeige][handschelle-asc][handschelle-asc-link][handschelle-bilder][handschelle-disclaimer][handschelle-karte][handschelle-login][handschelle-name][handschelle-name-anzeige][handschelle-name-partei][handschelle-partei][handschelle-pie-partei][handschelle-privacy][handschelle-register][handschelle-result][handschelle-statistik][handschelle-statistik-name][handschelle-statistik-nolink][handschelle-statistik-ol][handschelle-statistik-partei][handschelle-straftat][handschelle-straftat-link][handschelle-straftaten][handschelle-suche][handschelle-ticker][handschelle-ticker-icons][wordcloud-name][wordcloud-urteil]- Typical Page Setup
- Build Package
- Code Reference
- Fields & Database Schema
- Next Commands
- Plugin Structure
- Prompt
- Shortcodes Reference
- Instructions for AI / LLM
- Datenschutz / Privacy
- Connect GitHub to AI Tools
- Recreate from Scratch
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) usingsanitize_title(). - The admin image field supports two workflows: (1) pick from the WP Media Library via the
wp.mediamodal, or (2) upload a new file directly. - Database auto-migration: After updating the plugin,
maybe_upgrade_table()runs onplugins_loadedand adds any missing columns viadbDelta(). 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-onlybemerkungfield. 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 inmaybe_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-primarydesign tokens exclusively — no hardcoded values. Spacing and sizing aligned with.hs-statistik-olpattern. 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.mdand all*.txtdocumentation 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 JSreplace()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_askAJAX handler routes to the selected provider;inject_profile_config()injectswindow.hsProfileConfiginto the page footer. - Version bump 16.2 → 16.3.
- Admin config (Ollama KI → 🧾 AI-Profil Fragen): textarea for questions (one per line,
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 correctcontents/partsformat and optionalsystem_instruction. The JS chat widget loads Gemini models in parallel, displays them in an optgroup, maps them tohs_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, ando4-minito the OpenAI model list in the admin dropdown and theajax_chat_openai_modelsendpoint. Fixedajax_chat_openaito omit thetemperatureparameter 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:11434and 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_chatfor Ollama,hs_chat_openaifor 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 existinghs_chatAJAX 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.cssandstyle.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 inwp_die_handschelle_offencesare both searched. Query parameter:hs_straftat. Handschelle_Database::get_distinct_straftaten(): New DB method — UNION ofstraftatfrom main table andstraftatfrom offences table (bothfreigegeben=1, ordered A-Z).Handschelle_Database::get_entries_by_straftat(): New DB method — returns full rows (SELECT *) for all approved entries wherestraftatmatches 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: 440pxfrom.hs-login-wrapand.hs-register-wrap; removedmax-width: 600pxfrom.hs-wanted-card; removedmax-width: 520pxfrom 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.txtfile (build-package.txt,code-reference.txt,fields-database-schema.txt,Next-Commands.txt,plugin-structure.txt,prompt.txt,shortcodes.txt).important-notes.txtandinstructions-for-ai-llm.txtretain 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📋 Personalheadings 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 wherestatus_aktiv = 1. [handschelle-wanted]– exclude iNAKTIV persons: The wanted-poster shortcode now addsAND status_aktiv = 1to 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 ''fromTEXT NOT NULLcolumns increate_table()andcreate_offences_table()— MySQL 8.0 strict mode rejects this syntax (Error 1101), causing the offences table to never be created and allinsert_offence()calls to silently fail.maybe_upgrade_table()now always callscreate_offences_table()before the version-check early-return so the table is self-healing. Therecreateadmin 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-meldenand.hs-melden-linkCSS 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-removestyles (red delete button; WP's.buttonclass is admin-only and not available on the frontend). Added.hs-add-offence-inline-btnfor the frontend inline-edit panel. Added.hs-card-extra-offence pparagraph style to match.hs-card-straftat p.
9.4 (2026-03-18)
- Backup & Restore: Offences included:
backup_full()now exports a second filehandschelle-offences.csvinside 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 withouthandschelle-offences.csvrestore 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_offencesstores 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-footerwird nur noch gerendert, wennis_user_logged_in()gilt.
9.0 (2026-03-16)
- Gast-Karten: Website-Icon statt Profilfoto: Nicht eingeloggte Besucher sehen in
render_carddas WordPress-Site-Icon (get_site_icon_url(96)) als Kartenbild statt des echten Profilfotos. Kein Site-Icon gesetzt → Fallback auf 👤. Klassehs-card-img-siteiconsorgt fürobject-fit:containund Innenabstand. Der Bearbeiten-Button prüft jetzt korrektpublish_postsüber$is_author.
8.9 (2026-03-16)
- Name-Datenschutz (global): Neue Hilfsfunktion
hs_display_name()inhelpers.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). Attributespeedundpagewie 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 Attributpagefü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 viawp_update_user()nach Kontoerstellung.
8.3 (2026-03-16)
- Benutzer-Freischaltung: Neue Registrierungen erhalten den Status
pending(User-Metahs_user_status); Login ist gesperrt bis zur Freischaltung; Admin wird per E-Mail benachrichtigt. - Login-Sperre:
authenticate-Filter blockiertpending- unddeactivated-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;straftattype 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 optionalemredirect-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 Attributspeedeinstellbar.
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 Attributspeed(Sekunden, Standard 40, Minimum 5) einstellbar.
7.4 (2026-03-16)
- Profilfelder in Karten & Formularen: Neue Felder
geburtsland,email_privat,email_oeffentlichundspitznamewerden 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.de→www.die-handschelle.comandInfo@die-handschelle.de→info@die-handschelle.comacross shortcodes, README, and all doc files; also fixed typoinfo@hanschelle.com→info@die-handschelle.comin 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 theverstorben/dodcolumns were added now restore correctly instead of assigningbildto 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,
bildis cleared instead of storing a stale/wrong ID. - Fix image display after restore/import:
handschelle_get_image_url()now falls back frommedium→full→wp_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/dodandbemerkung_personto 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-personstyles.
7.0 (2026-03-15)
- Fix Urteil maxlength in shortcodes: Frontend submission form and frontend edit form both had
maxlength="50"forurteil; corrected tomaxlength="200"to match DB schema and admin form.
6.9 (2026-03-15)
- DoD / Verstorben: Added
verstorbencheckbox anddod(date of death) date field to Eintragsdetails; DoD field is shown/hidden via JS when checkbox is toggled. - Bemerkung zur Person: New
bemerkung_persontext field (max. 500 chars) added to Eintragsdetails section for person-level remarks. - Urteil erweitert:
urteilfield 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_VERSIONconstant example (6.2→6.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 from6.2to6.3
6.3 (2026-03-15)
- Build / Package: Added
## Build / Packagesection withzipcommands 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 Scratchsection 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.1per commit (was0.01); old comment indie-handschelle.phpcorrected accordingly - LLM Instructions: Added
## Instructions for AI / LLMsection 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 toinfo@die-handschelle.comwith subjectMeldung - <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_postscapability) — Subscribers and Contributors no longer see the edit controls
3.09 (2026-03-14)
- Hintergrundfarbe:
--hs-bgauf#f0f0f0(neutrales Hellgrau) geändert; alle Eingabefelder und Dropdowns nutzenvar(--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_eintragfä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 (
geburtsortundgeburtsdatumwurden übersprungen);bild-ID wurde aus Spalte 4 (geburtsort) statt aus Spalte 6 gelesen → falsche Bildzuordnung;geburtsort,geburtsdatum,sm_linkedin,sm_xing,sm_truth_socialwurden nie wiederhergestellt;freigegebenwurde 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 Attributlink=""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]: Standardlimitauf 0 gesetzt (keine Paginierung)- DB-Migration:
maybe_upgrade_table()— fehlende Spalten werden viadbDelta()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.jsonin 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-singlefü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 →