Plugin Directory


Ignore:
Timestamp:
10/15/2026 11:59:50 AM (2 days ago)
Author:
wpdienstplan
Message:

Update to version 3.10.0 from GitHub

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dienstplan/trunk/docs/hooks-reference.md

    r3744969 r3748373  
    11# Hook-Referenz — WP Dienstplan
    22
    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)
    44
    55Diese Datei listet alle WordPress-Hooks (Filter und Actions), die das
    … …  
    5353### `dienstplan_assignable_members`
    5454
    55 **Default:** alle Nutzer mit `dienstplan_member` / `dienstplan_admin`
     55**Default:** alle Nutzer mit `dienstplan_member` / `dienstplan_shift_leader` / `dienstplan_admin`
    5656**Parameter:** `array $members`, `int $planId`, `array $shiftTypes`
    5757**Gefeuert in:** `CalendarShortcode::loadMembers()`
    5858
    59 Free zeigt in der Admin-Zuweisen-Liste alle Dienstplan-Rollen. Premium
     59Free zeigt in der Zuweisen-Liste alle Dienstplan-Rollen. Premium
    6060reduziert die Liste bei gruppenbeschränkten Plänen auf Nutzer, die einer
    6161der Plan-Gruppen angehören. Pläne ohne Gruppen-Zuordnung bleiben unverändert
    6262(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
     70Serverseitige Entsprechung zu `dienstplan_assignable_members` für einen
     71einzelnen Nutzer. Free: immer `true`. Premium: gleiche Plan-Gruppen-Logik
     72wie das Dropdown (gemeinsame Methode in `GroupIntegration`). Gilt für
     73Admin 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
     81Ob ein Schichtleiter den angegebenen Plan verwalten darf (Belegung,
     82Schichtvorlagen). Free liefert immer `false` (Fail-Closed) — die Rolle
     83`dienstplan_shift_leader` verhält sich dann wie ein Mitglied. Premium
     84gibt `true`, wenn Feature Schichtleiter aktiv ist und der Nutzer dem Plan
     85in `dienstplan_plan_leaders` zugeordnet ist. Admins werden vor dem Filter
     86durchgelassen.
     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
     94Liste der Plan-IDs, die der Nutzer verwalten darf. Free: leeres Array.
     95Premium: IDs aus `plan_leaders` für den Nutzer (bei inaktivem Feature `[]`).
     96`Roles::managedPlanIds()` gibt für Admins `null` zurück (= alle Pläne)
     97ohne den Filter zu befragen; der Filter liefert nur die eingeschränkte
     98Menge 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
     106Ob ein Schichtleiter den Termin verwalten darf. Free: immer `false`.
     107Premium: `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
     117Steuert, ob ein Termin im Schichtkalender eines konkreten Plans erscheint.
     118Free: immer `true` (alle Termine in allen Plänen). Premium: Termine mit
     119Plan-Zuordnung nur in diesen Plänen; ohne Zuordnung (= global) überall.
     120
     121Action `dienstplan_event_form_plan_fields( ?array $editEvent )` im
     122Termin-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
     127im 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/
     131Update 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
     139Premium 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
     147Erlaubt Sites mit bestehendem Telefonfeld (z. B. WooCommerce `billing_phone`),
     148einen Wert für die Schichtleitungs-Anzeige zu liefern.
     149
     150### `dienstplan_plan_leader_ids`
     151
     152**Default:** `[]`
     153**Parameter:** `array $ids`, `int $planId`
     154
     155User-IDs der Leiter eines Plans (für `data-leaders` am Rename-Button).
    63156
    64157### `dienstplan_feature_enabled`
    … …  
    89182| `FEATURE_AUDIT_LOG`                | `audit_log`           | Pro               |
    90183| `FEATURE_STATISTICS`               | `statistics`          | Pro               |
     184| `FEATURE_MULTIPLE_PLANS`           | `multiple_plans`      | Basis             |
     185| `FEATURE_SHIFT_LEADERS`            | `shift_leaders`       | Basis             |
    91186| `FEATURE_SHIFT_TRADE`              | `shift_trade`         | Basis             |
    92187| `FEATURE_WEEKDAY_RESTRICTION`      | `weekday_restriction` | Basis             |
    … …  
    403498`$_POST['dienstplan_statistik_plans']`). Free invalidiert danach zentral den
    404499Statistik-Cache.
     500
     501### `dienstplan_shift_type_saved`
     502
     503**Parameter:** `int $typeId`, `array $post`
     504**Gefeuert in:** `AdminPages::handleShiftTypeForm()` (create/update)
     505
     506Nach Speichern einer Schichtvorlage. Premium synchronisiert Gruppen und
     507Angebotsfelder 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
     515Nach Aktivieren/Deaktivieren. Bewusst **nicht** `dienstplan_shift_type_saved`
     516mit leerem POST — das würde Qualifikationen und Wochentagsmaske zurücksetzen.
    405517
    406518### `dienstplan_shift_type_deleted`
    … …  
    511623  Action-Namen auf Plugin-Slug-Präfix umgestellt; behebt 40 Plugin-Check-
    512624  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.