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 perstrposplus 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-motionrespektiert.
v0.4.1 - 2026-05-28
Hinzugefügt
- 24h-Session-Reminder als stuendlicher Cron-Hook (
idf_quest/hourly_reminders) mit Notifications-Triggersession_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-Klassenidf-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): RESTPOST /idf-quest/v1/reportschreibt inwp_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. - RESTPOST /dsgvo/delete-childfü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()instanziiertshortcodes,reports,dsgvo.
v0.3.0 - 2026-05-28
Hinzugefügt
- Events Calendar Bridge (
IDF_Quest_Events_Bridge): Beim Übergangqs_scheduledwird automatisch eintribe_events-Post angelegt (mit Venue aussession_address, Start aussession_timeframe_start, Dauer aussession_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): Beicost_type=paidwird nach Event-Erstellung ein Ticket-Typ „Teilnahme" mit Preis aussession_cost_amountund Kapazität aussession_max_participantsprogrammatisch angelegt. Hookidf/event-tickets/attendee_createdspiegelt jeden Käufer inwp_quest_participations(Statusconfirmed),idf/event-tickets/attendee_checked_insetzt aufattended,idf/event-tickets/order_attendees_released(Storno/Refund/Trash) setzt aufcost_type=paid0. - Sponsor-Commitments-Service (
IDF_Quest_Sponsors): REST-EndpointsPOST /idf-quest/v1/sponsor/commit,POST /sponsor/confirm/{id},GET /session/{id}/sponsors. Bei Freigabe einer Session werden im ACF-Feldsession_proposed_sponsorempfohlene Sponsoren automatisch alsoffered-Commitment eingetragen. Status-Übergängeoffered→confirmed→delivered. - Feedback-Service (
IDF_Quest_Feedback): RESTPOST /idf-quest/v1/feedbackmitrating_fun,rating_learn,rating_master(jeweils 1–5) und Freitext-Kommentar. UNIQUE-Constraint(session_id, user_id)verhindert Doppel-Feedback. Aggregat-EndpointGET /session/{id}/feedback/summaryliefert Durchschnitte. Nur erlaubt nachqs_completed/qs_archivedund nur fürattended-Teilnehmer. - Badge-Auto-Award (
IDF_Quest_Badges): Hook aufidf_quest/session_status_changedbeiqs_completedprü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 überaward(). - 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-Filtersession_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-Hookidf_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 zugleichwp_quest_guardianships-Eintrag mit DSGVO-Consent-Timestamp an),expire_old()für Cron. - Voting + Quorum + Rotation + Eltern-Hype (
IDF_Quest_Voting): - REST-API unteridf-quest/v1: -POST /votemit{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-Promotionpublish->qs_in_rotationautomatisch bei jedem approve-Vote (mit Cron-Fallback). - Eltern-Hype-Promotionpublish->qs_hypedautomatisch 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 nacharchive_after_days. - Deaktivierung des Plugins machtwp_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 Optionidf_quest_delete_on_uninstall. Beitrue: 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ürIDF_Quest_*-Klassen ausincludes/, Aktivierungs- und Deaktivierungs-Hook, Text-Domainidf-quest, Bootstrap-Singleton. - 8 Custom Tables über
dbDeltainIDF_Quest_Activator::install_tables():quest_votes,quest_participations,quest_guardianships,quest_badge_awards,quest_sponsor_commitments,quest_invite_codes,quest_feedback,quest_reports. Schema-VersionIDF_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 inIDF_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()aufacf/init. Inklusive Conditional Logic (z.B. Preis nur beicost_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 überidf/home/known_plugins. - Release-Workflow
idf-ci/release-plugin@v1fü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.