Changeset 3748373 for dienstplan/trunk/docs/hooks-reference.md
- Timestamp:
- 10/15/2026 11:59:50 AM (2 days ago)
- File:
-
- 1 edited
-
dienstplan/trunk/docs/hooks-reference.md (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
dienstplan/trunk/docs/hooks-reference.md
r3744969 r3748373 1 1 # Hook-Referenz — WP Dienstplan 2 2 3 **Stand:** 2026- 06-01 (Mengen-Limits entfernt; Gruppen-Storage + Access-Control nach Premium)3 **Stand:** 2026-10-15 (Schichtleiter-Filter #187; Mengen-Limits entfernt; Gruppen-Storage + Access-Control nach Premium) 4 4 5 5 Diese Datei listet alle WordPress-Hooks (Filter und Actions), die das … … 53 53 ### `dienstplan_assignable_members` 54 54 55 **Default:** alle Nutzer mit `dienstplan_member` / `dienstplan_ admin`55 **Default:** alle Nutzer mit `dienstplan_member` / `dienstplan_shift_leader` / `dienstplan_admin` 56 56 **Parameter:** `array $members`, `int $planId`, `array $shiftTypes` 57 57 **Gefeuert in:** `CalendarShortcode::loadMembers()` 58 58 59 Free zeigt in der Admin-Zuweisen-Liste alle Dienstplan-Rollen. Premium59 Free zeigt in der Zuweisen-Liste alle Dienstplan-Rollen. Premium 60 60 reduziert die Liste bei gruppenbeschränkten Plänen auf Nutzer, die einer 61 61 der Plan-Gruppen angehören. Pläne ohne Gruppen-Zuordnung bleiben unverändert 62 62 (alle Mitglieder). 63 64 ### `dienstplan_user_assignable_to_plan` 65 66 **Default:** `true` 67 **Parameter:** `bool $assignable`, `int $userId`, `int $planId` 68 **Gefeuert in:** `ShiftController::handleAdminSignup()` 69 70 Serverseitige Entsprechung zu `dienstplan_assignable_members` für einen 71 einzelnen Nutzer. Free: immer `true`. Premium: gleiche Plan-Gruppen-Logik 72 wie das Dropdown (gemeinsame Methode in `GroupIntegration`). Gilt für 73 Admin und Schichtleiter. 74 75 ### `dienstplan_user_can_manage_plan` 76 77 **Default:** `false` 78 **Parameter:** `bool $allowed`, `int $userId`, `int $planId` 79 **Gefeuert in:** `Roles::userCanManagePlan()` (nur wenn der Nutzer `dienstplan_lead` hat und kein `dienstplan_manage`) 80 81 Ob ein Schichtleiter den angegebenen Plan verwalten darf (Belegung, 82 Schichtvorlagen). Free liefert immer `false` (Fail-Closed) — die Rolle 83 `dienstplan_shift_leader` verhält sich dann wie ein Mitglied. Premium 84 gibt `true`, wenn Feature Schichtleiter aktiv ist und der Nutzer dem Plan 85 in `dienstplan_plan_leaders` zugeordnet ist. Admins werden vor dem Filter 86 durchgelassen. 87 88 ### `dienstplan_managed_plan_ids` 89 90 **Default:** `[]` 91 **Parameter:** `array $planIds`, `int $userId` 92 **Gefeuert in:** `Roles::managedPlanIds()` (nur wenn der Nutzer kein `dienstplan_manage` hat) 93 94 Liste der Plan-IDs, die der Nutzer verwalten darf. Free: leeres Array. 95 Premium: IDs aus `plan_leaders` für den Nutzer (bei inaktivem Feature `[]`). 96 `Roles::managedPlanIds()` gibt für Admins `null` zurück (= alle Pläne) 97 ohne den Filter zu befragen; der Filter liefert nur die eingeschränkte 98 Menge für Schichtleiter. 99 100 ### `dienstplan_user_can_manage_event` 101 102 **Default:** `false` 103 **Parameter:** `bool $allowed`, `int $userId`, `int $eventId` 104 **Gefeuert in:** `Roles::userCanManageEvent()` (nur bei `dienstplan_lead` ohne `dienstplan_manage`) 105 106 Ob ein Schichtleiter den Termin verwalten darf. Free: immer `false`. 107 Premium: `true`, wenn der Termin mindestens einem Plan zugeordnet ist und 108 **alle** zugeordneten Pläne vom Nutzer geleitet werden. Globale Termine 109 (keine Plan-Zuordnung) bleiben Admin-Sache. 110 111 ### `dienstplan_event_visible_in_plan` 112 113 **Default:** `true` 114 **Parameter:** `bool $visible`, `int $eventId`, `int $planId` 115 **Gefeuert in:** `EventCalendarService::getForRange()` (wenn `$planId > 0`) 116 117 Steuert, ob ein Termin im Schichtkalender eines konkreten Plans erscheint. 118 Free: immer `true` (alle Termine in allen Plänen). Premium: Termine mit 119 Plan-Zuordnung nur in diesen Plänen; ohne Zuordnung (= global) überall. 120 121 Action `dienstplan_event_form_plan_fields( ?array $editEvent )` im 122 Termin-Modal: Premium rendert die Mehrfachauswahl „Erscheint in Dienstplänen“. 123 124 ### `dienstplan_plan_modal_fields` / `dienstplan_plan_saved` 125 126 **Action** `dienstplan_plan_modal_fields( ?array $plan )` — zusätzliches Feld 127 im Plan-Modal (Premium: Schichtleiter-Combobox). `$plan` ist im Create-Markup 128 `null`; Auswahl beim Bearbeiten setzt JS über `data-leaders`. 129 130 **Action** `dienstplan_plan_saved( int $planId, array $post )` — nach Create/ 131 Update in `PlanAdminController::handlePlanForm`. Premium speichert 132 `leader_ids[]` via `PlanLeaderRepository::setLeadersForPlan()`. 133 134 ### `dienstplan_calendar_plan_meta` 135 136 **Action** `dienstplan_calendar_plan_meta( int $planId, int $userId )` 137 **Gefeuert in:** `week-calendar.php`, `month-calendar.php` (unter den Plan-Tabs) 138 139 Premium rendert den Kontaktblock „Schichtleitung“ (Name, `mailto:`, optional 140 `tel:`). Ohne zugeordnete Leiter: kein Output. 141 142 ### `dienstplan_leader_phone` 143 144 **Default:** User-Meta `dienstplan_phone` 145 **Parameter:** `string $phone`, `int $userId` 146 147 Erlaubt Sites mit bestehendem Telefonfeld (z. B. WooCommerce `billing_phone`), 148 einen Wert für die Schichtleitungs-Anzeige zu liefern. 149 150 ### `dienstplan_plan_leader_ids` 151 152 **Default:** `[]` 153 **Parameter:** `array $ids`, `int $planId` 154 155 User-IDs der Leiter eines Plans (für `data-leaders` am Rename-Button). 63 156 64 157 ### `dienstplan_feature_enabled` … … 89 182 | `FEATURE_AUDIT_LOG` | `audit_log` | Pro | 90 183 | `FEATURE_STATISTICS` | `statistics` | Pro | 184 | `FEATURE_MULTIPLE_PLANS` | `multiple_plans` | Basis | 185 | `FEATURE_SHIFT_LEADERS` | `shift_leaders` | Basis | 91 186 | `FEATURE_SHIFT_TRADE` | `shift_trade` | Basis | 92 187 | `FEATURE_WEEKDAY_RESTRICTION` | `weekday_restriction` | Basis | … … 403 498 `$_POST['dienstplan_statistik_plans']`). Free invalidiert danach zentral den 404 499 Statistik-Cache. 500 501 ### `dienstplan_shift_type_saved` 502 503 **Parameter:** `int $typeId`, `array $post` 504 **Gefeuert in:** `AdminPages::handleShiftTypeForm()` (create/update) 505 506 Nach Speichern einer Schichtvorlage. Premium synchronisiert Gruppen und 507 Angebotsfelder nur, wenn die jeweiligen Schlüssel im `$post` stehen 508 (`group_ids` / `group_ids_present`, `weekdays_mask`, …). 509 510 ### `dienstplan_shift_type_toggled` 511 512 **Parameter:** `int $typeId`, `bool $active` 513 **Gefeuert in:** `AdminPages::handleShiftTypeToggle()` 514 515 Nach Aktivieren/Deaktivieren. Bewusst **nicht** `dienstplan_shift_type_saved` 516 mit leerem POST — das würde Qualifikationen und Wochentagsmaske zurücksetzen. 405 517 406 518 ### `dienstplan_shift_type_deleted` … … 511 623 Action-Namen auf Plugin-Slug-Präfix umgestellt; behebt 40 Plugin-Check- 512 624 Findings `WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound`). 625 - Issue #187 — Schichtleiter-Rolle: Filter `dienstplan_user_can_manage_plan`, 626 `dienstplan_managed_plan_ids`, `dienstplan_user_can_manage_event`, 627 `dienstplan_user_assignable_to_plan`, `dienstplan_event_visible_in_plan` 628 (Free-Naht; Premium liefert die Plan-Zuordnung).
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)