Was macht das Plugin?

QUEST ist die Plattform-Software hinter dem Bildungsprojekt q.u.e.s.t. (question. unlock. explore. skills. try.) der Ideenfabrik GmbH. Es bildet die gesamte Session-Verwaltung der Plattform itsmy.quest ab.

Kernfunktionen

  • Sessions als zentraler CPT mit dem Q.U.E.S.T.-Framework als Pflichtfeldern.
  • Voting, Quorum, Rotation bestimmen, welche Session als naechste durchgefuehrt wird.
  • Eltern-Hype kann eine freigegebene Session priorisieren, wenn die Rotation leer ist.
  • Einladungscodes verknuepfen Eltern/Paten mit Kindern und dokumentieren die DSGVO-Einwilligung.
  • Sponsor-System bindet Firmen, Ansprechpartner und Ressourcen an Sessions.
  • Abzeichen-Gamification belohnt Engagement und Teilnahme.
  • Events Calendar Bridge erzeugt Termine, sobald eine Session terminiert ist.
  • WooCommerce-Tickets fuer kostenpflichtige Sessions ueber Event Tickets Plus.

Changelog

v0.4.4 - 2026-05-28

Geändert

  • Frontend-CSS theme-adaptiv via color-mix(currentColor) — funktioniert auf hellen wie dunklen Theme-Sections.
  • Formulare transparent, volle Containerbreite.
  • Primaerfarbe auf QUEST-Limegruen (#b6f23a) umgestellt.
  • Schriftgroessen erhoeht (Body/Inputs 17px, Card-Titel 20px).
  • Input-Spezifitaet erhoeht gegen Avada-Theme-Overrides.

v0.4.3 - 2026-05-28

Behoben

  • Frontend-CSS/JS wurde auf Avada-Builder-Seiten nicht geladen — has_shortcode() ist nicht rekursiv und uebersieht genestete Shortcodes. Detection jetzt per strpos plus idempotenter Render-Wrapper-Enqueue.

v0.4.2 - 2026-05-28

Geändert

  • Frontend-CSS auf cleanes Design-System mit CSS-Variablen als Design-Tokens umgestellt (Cards, Status-Pills, Rank-Pills, Rarity-Borders, Forms, Buttons).
  • Responsive-Stack unter 600px, prefers-reduced-motion respektiert.

v0.4.1 - 2026-05-28

Hinzugefügt

  • 24h-Session-Reminder als stuendlicher Cron-Hook (idf_quest/hourly_reminders) mit Notifications-Trigger session_reminder_24h. Idempotent ueber Post-Meta. Schliesst den 13. E-Mail-Trigger aus Konzept §16.

v0.4.0 - 2026-05-28

Hinzugefügt

  • 19 Shortcodes (IDF_Quest_Shortcodes) für Avada Builder mit BEM-CSS-Klassen idf-quest__* — nur Layout im Plugin, Theme stylet Typografie und Farben: - Sessions: [quest_session_board], [quest_session_card], [quest_session_form], [quest_session_result], [quest_my_sessions], [quest_archive]. - Voting: [quest_vote_button], [quest_rotation]. - Kalender: idf-quest__*0 (Bridge zu The Events Calendar). - Profile/Badges: idf-quest__*1, idf-quest__*2, idf-quest__*3, idf-quest__*4. - Sponsoren: idf-quest__*5. - Eltern: idf-quest__*6, idf-quest__*7. - Sonstige: idf-quest__*8, idf-quest__*9, [quest_session_board]0. - Assets [quest_session_board]1 + [quest_session_board]2 werden nur enqueued, wenn mindestens ein Shortcode auf der Seite steht.
  • Reports-Service (IDF_Quest_Reports): REST POST /idf-quest/v1/report schreibt in wp_quest_reports (Gründe: inappropriate, spam, safety, other), schickt Admin-Mail. Submenu QUEST → Meldungen mit Tabelle und Status-Update (open / reviewed / resolved).
  • DSGVO-Service (IDF_Quest_DSGVO): - WordPress-Personal-Data-Exporter (Art. 20): liefert alle QUEST-Datensätze (Profil, Votes, Participations, Guardianships, Badges, Feedback, Reports, eigene Sessions) eines Users. - WordPress-Personal-Data-Eraser (Art. 17): anonymisiert Profil-Felder, Feedback-Kommentare und Report-Details; setzt Session-Authorenschaft auf 0. - REST POST /dsgvo/delete-child für Eltern/Pate (quest_manage_children-Cap): markiert das Kind mit _idf_quest_pending_deletion-User-Meta und anonymisiert sofort; endgültige Löschung des Accounts nach 30 Tagen über den täglichen Cron.
  • Helpers (IDF_Quest_Helpers): Altersgruppen-Berechnung (< 12, 12-14, 15-16, 17-18, 18+) statt Klartext-Geburtsdatum; can_view_profile() blockt Quester-Profile für Nicht-Eingeloggte; Avatar/Display-Name-Resolution.

Geändert

  • idf-quest.php: IDF_QUEST_VERSION = 0.4.0, Plugin-Header 0.4.0.
  • IDF_Quest_Plugin::boot() instanziiert shortcodes, reports, dsgvo.

v0.3.0 - 2026-05-28

Hinzugefügt

  • Events Calendar Bridge (IDF_Quest_Events_Bridge): Beim Übergang qs_scheduled wird automatisch ein tribe_events-Post angelegt (mit Venue aus session_address, Start aus session_timeframe_start, Dauer aus session_duration). Verknüpfung über Post-Meta _idf_quest_event_id (Session → Event) und _idf_quest_session_id (Event → Session). Datums-/Adress-Änderungen am Session-Post werden ins Event nachgezogen.
  • idf-event-tickets-Bridge (IDF_Quest_Tickets_Bridge): Bei cost_type=paid wird nach Event-Erstellung ein Ticket-Typ „Teilnahme" mit Preis aus session_cost_amount und Kapazität aus session_max_participants programmatisch angelegt. Hook idf/event-tickets/attendee_created spiegelt jeden Käufer in wp_quest_participations (Status confirmed), idf/event-tickets/attendee_checked_in setzt auf attended, idf/event-tickets/order_attendees_released (Storno/Refund/Trash) setzt auf cost_type=paid0.
  • Sponsor-Commitments-Service (IDF_Quest_Sponsors): REST-Endpoints POST /idf-quest/v1/sponsor/commit, POST /sponsor/confirm/{id}, GET /session/{id}/sponsors. Bei Freigabe einer Session werden im ACF-Feld session_proposed_sponsor empfohlene Sponsoren automatisch als offered-Commitment eingetragen. Status-Übergänge offeredconfirmeddelivered.
  • Feedback-Service (IDF_Quest_Feedback): REST POST /idf-quest/v1/feedback mit rating_fun, rating_learn, rating_master (jeweils 1–5) und Freitext-Kommentar. UNIQUE-Constraint (session_id, user_id) verhindert Doppel-Feedback. Aggregat-Endpoint GET /session/{id}/feedback/summary liefert Durchschnitte. Nur erlaubt nach qs_completed/qs_archived und nur für attended-Teilnehmer.
  • Badge-Auto-Award (IDF_Quest_Badges): Hook auf idf_quest/session_status_changed bei qs_completed prüft alle ACF-badge_criteria=auto-Abzeichen für jeden Teilnehmer und den Vorschlagenden. Unterstützte Trigger: sessions_attended, sessions_proposed, votes_cast, rotations_reached. Manueller Award über award().
  • Notifications-Service (IDF_Quest_Notifications) mit 11 E-Mail-Triggern aus Konzept §16: session_submitted, session_approved, session_rejected, quorum_reached, session_scheduled, session_completed, badge_awarded, invite_code_created, invite_code_redeemed, session_submitted0 (plus Subject/Body-Filter session_submitted1 für Theming). 24h-Erinnerung vor Session folgt in einer Patch-Version, sobald Cron-Hook steht.

Geändert

  • idf-quest.php: IDF_QUEST_VERSION = 0.3.0, Plugin-Header-Version 0.3.0.
  • IDF_Quest_Plugin::boot() instanziiert die sechs neuen Services (events_bridge, tickets_bridge, sponsors, feedback, badges, notifications).

v0.2.0 - 2026-05-28

Hinzugefügt

  • Session-Lifecycle-Service (IDF_Quest_Session_Lifecycle): Whitelist erlaubter Status-Übergänge, Capability-Check je Ziel-Status, Action-Hook idf_quest/session_status_changed($session_id, $from, $to, $context). Bypass-Modus für automatische Transitionen (Cron, Voting).
  • Einladungscode-Service (IDF_Quest_Invite_Codes): 8-stellige Base32-Codes (Lesbarkeits-Alphabet ohne I/L), TTL aus Settings, Max-Aktiv-Limit pro User. generate(), redeem() (legt zugleich wp_quest_guardianships-Eintrag mit DSGVO-Consent-Timestamp an), expire_old() für Cron.
  • Voting + Quorum + Rotation + Eltern-Hype (IDF_Quest_Voting): - REST-API unter idf-quest/v1: - POST /vote mit {session_id, vote_type} — Vote abgeben (approve / rotation / hype). - GET /session/{id}/votes — aktuelle Counts. - GET /rotation — sortierte Rotation-Queue. - Status-Gating je Vote-Typ (approve nur bei publish, rotation nur bei qs_in_rotation, hype nur bei publish + leerer Rotation). - Quorum-Promotion publish -> qs_in_rotation automatisch bei jedem approve-Vote (mit Cron-Fallback). - Eltern-Hype-Promotion publish -> qs_hyped automatisch bei erstem Hype-Vote, sofern Rotation leer. - Rotation-Sortierung nach Rotation-Vote-Count desc, Tiebreaker = ältestes Einreichungsdatum.
  • Cron (IDF_Quest_Cron): - Stündlich: Invite-Codes ablaufen lassen, Quorum-Fallback für alle publish-Sessions. - Täglich: qs_completed -> qs_archived nach archive_after_days. - Deaktivierung des Plugins macht wp_clear_scheduled_hook() für beide Jobs.
  • Admin-Standard-Navigation: Submenus QUEST -> Einstellungen / Hilfe / Uninstall im idf-home-Stil. Settings-Page editiert Quorum-Schwelle, Invite-TTL, Archivierungsfrist, Max-Invites, Mindestalter ohne Eltern. Speichern via Admin-AJAX idf_quest_save_settings.
  • uninstall.php: Opt-In-Datenlöschung über Option idf_quest_delete_on_uninstall. Bei true: dropt alle 8 Custom Tables, löscht CPT-Posts/Terms, entfernt Rollen und Admin-Caps, räumt Options + User-Meta auf. Default OFF (Daten bleiben).

Geändert

  • idf-quest.php: IDF_QUEST_VERSION = 0.2.0, Plugin Header Version: 0.2.0. Deaktivierungs-Hook stoppt jetzt zusätzlich die Cron-Events.
  • IDF_Quest_Plugin::boot() instanziiert die fünf neuen Services (lifecycle, invites, voting, cron + Admin-Erweiterung) idempotent.

v0.1.0 - 2026-05-28

Hinzugefügt

  • Plugin-Skeleton. Plugin-Header, Konstanten (IDF_QUEST_*), SPL-Auto-Loader für IDF_Quest_*-Klassen aus includes/, Aktivierungs- und Deaktivierungs-Hook, Text-Domain idf-quest, Bootstrap-Singleton.
  • 8 Custom Tables über dbDelta in IDF_Quest_Activator::install_tables(): quest_votes, quest_participations, quest_guardianships, quest_badge_awards, quest_sponsor_commitments, quest_invite_codes, quest_feedback, quest_reports. Schema-Version IDF_Quest_Activator::install_tables()0.
  • 4 Custom Post Types: quest_session, quest_sponsor, quest_badge, quest_resource. Alle unter dem QUEST-Menü angedockt.
  • 6 zusätzliche Custom Post Status für quest_session: qs_in_rotation, qs_scheduled, qs_active, qs_completed, qs_archived, qs_hyped. draft/pending/publish (= Freigegeben) bleiben WP-Standard.
  • 2 Taxonomien: quest_topic (für Sessions und Sponsoren), quest_format (mit drei Default-Terms: Präsenz/Online/Hybrid).
  • 6 Rollen + Capabilities: quester, quest_parent, quest_guardian, session_master, sponsor_contact, quest_helper. Caps-Matrix idempotent in IDF_Quest_Roles::install(). Admin erbt alle QUEST-Caps.
  • ACF-Field-Groups für alle CPTs und User-Profile, registriert via acf_add_local_field_group() auf acf/init. Inklusive Conditional Logic (z.B. Preis nur bei cost_type = paid).
  • Admin-Dashboard-Stub unter QUEST → Dashboard mit Statusanzeige für Tabellen, CPTs, Rollen, ACF und Einstellungen.
  • Default-Einstellungen in idf_quest_settings: Quorum 7 %, Einladungscode 7 Tage gültig, Auto-Archivierung nach 30 Tagen, max. 5 aktive Codes pro Eltern/Pate, Mindestalter ohne Eltern 16.
  • IDF Home-Integration: Update-Registrierung über idf_home_register_plugin() und Whitelist-Eintrag über idf/home/known_plugins.
  • Release-Workflow idf-ci/release-plugin@v1 für Tag-getriebene Releases.

Hinweis

Das ist Phase 1 von 4 nach dem Konzeptdokument quest_website_2026_1_JM.pdf. Folgephasen:

  • Phase 2 — Session-Lifecycle: Frontend-Einreichung, Voting (AJAX), Quorum-Cron, Rotation-Sortierung, Eltern-Hype, Einladungscode-UI.
  • Phase 3 — Integrationen: Events Calendar Bridge, Event Tickets Plus, Sponsor-Commitments-UI, Feedback, Badge-Auto-Award, E-Mail-Benachrichtigungen.
  • Phase 4 — Frontend & Polish: Alle ~18 Shortcodes, Avada-Builder-Templates, DSGVO-Export/Löschung, Responsive Polish.

0 Comments

Auf dieser Seite
Über dieses Plugin
  • Version: 0.4.4
  • Version vom: 28. Mai 2026
  • WordPress-Version: 6.0
  • Getestet bis WP-Version: 6.5
  • PHP-Version: 8.0
  • Kompatible Themes: Alle
  • Erforderliche Plugins: Advanced Custom Fields (ACF), WooCommerce, IDF Home
  • Mitwirkende: Joerg Martin