Files
awo-hamburg-intranet/module/tasks/endpoints/admin/recalculate_escalations.php
Moritz Weinmann 743476f64a Module tasks + knowledgecenter_update aus Kundenprojekt übernehmen (bereinigt)
Beide Module wurden aus einem anderen Kundenprojekt kopiert und bereinigt:

Knowledgecenter:
- Bild-Cache (1.985 Dateien) geleert, Ordnerstruktur mit .gitkeep behalten
- Files-Gallery-Lizenzschlüssel entfernt (config.php)
- Kundenspezifische Kategorien gelöscht: Teil I/II/III QM-Struktur,
  nummerierte QM-Kapitel, Gremien (Präsidium/Finanzausschuss/Landesausschuss),
  Sitzungsservice-Serie, Protokoll-Abteilungen, Testeinträge
- 56 generische Kategorien bleiben (Downloads, Onboarding, Personalthemen …)

Tasks:
- Alle Betriebsdaten gelöscht (114 Tasks, 914 Submissions, 579 Assignments)
- Task-Definitionen und Verlinkungen geleert
- Kategoriestruktur bleibt (Allgemein, IT, Personal, Buchhaltung …)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 09:20:02 +02:00

64 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
require_once dirname(dirname(__DIR__)) . '/bootstrap.php';
$auth = TaskCertAuthContext::fromGlobals();
$isCli = PHP_SAPI === 'cli';
if (!$isCli && !TaskCertRequest::isPost()) {
TaskCertResponse::error('Methode nicht erlaubt', 405);
}
if (!$isCli) {
if (!$auth->hasPermission('r-task-cert-admin')) {
TaskCertResponse::error('Keine Berechtigung', 403);
}
TaskCertCsrf::assertValidFromRequest(true);
}
try {
$services = task_cert_services();
$apply = true;
$taskId = null;
if ($isCli) {
$options = getopt('', ['task_id::', 'apply', 'dry-run']);
if ($options !== false) {
if (isset($options['task_id']) && !is_array($options['task_id'])) {
$parsedTaskId = (int) $options['task_id'];
if ($parsedTaskId > 0) {
$taskId = $parsedTaskId;
}
}
if (isset($options['dry-run'])) {
$apply = false;
}
if (isset($options['apply'])) {
$apply = true;
}
}
}
$summary = $services['escalationService']->recalculateEscalationsDetailed($apply, $taskId);
$changed = (int) ($summary['changed_assignments'] ?? 0);
if ($apply) {
CronHeartbeat::record('recalculate_escalations', ['changed' => $changed]);
}
TaskCertResponse::json([
'success' => true,
'changed' => $changed,
'summary' => $summary,
]);
} catch (Throwable $throwable) {
TaskCertResponse::json([
'success' => false,
'error' => $throwable->getMessage(),
], 400);
}