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>
129 lines
5.9 KiB
PHP
129 lines
5.9 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
if (!isset($submissions) && !isset($error)) {
|
|
require_once dirname(dirname(__DIR__)) . '/actions/admin/approval_queue_action.php';
|
|
$viewData = task_cert_admin_approval_queue_action();
|
|
if (is_array($viewData)) {
|
|
extract($viewData, EXTR_SKIP);
|
|
}
|
|
}
|
|
|
|
$error = $error ?? null;
|
|
$submissions = $submissions ?? [];
|
|
$csrfToken = $csrf_token ?? '';
|
|
$searchQuery = (string) ($search_query ?? '');
|
|
$taskIdFilter = (int) ($task_id_filter ?? 0);
|
|
|
|
if (!function_exists('task_cert_render_styles')) {
|
|
require_once dirname(dirname(__DIR__)) . '/bootstrap.php';
|
|
}
|
|
task_cert_render_styles(['admin']);
|
|
$taskCertBaseUrl = task_cert_base_url();
|
|
$taskListUrl = task_cert_view_url('admin.task_list');
|
|
$taskFormUrl = task_cert_view_url('admin.task_form');
|
|
$approvalQueueUrl = task_cert_view_url('admin.approval_queue');
|
|
$escalationUrl = task_cert_view_url('admin.escalation_dashboard');
|
|
$categoriesUrl = task_cert_view_url('admin.task_categories');
|
|
$approvalQueueQuery = [];
|
|
if ($taskIdFilter > 0) {
|
|
$approvalQueueQuery['task_id'] = $taskIdFilter;
|
|
}
|
|
if ($searchQuery !== '') {
|
|
$approvalQueueQuery['q'] = $searchQuery;
|
|
}
|
|
$approvalQueueCurrentUrl = task_cert_view_url('admin.approval_queue', $approvalQueueQuery);
|
|
$approvalQueueResetUrl = $taskIdFilter > 0
|
|
? task_cert_view_url('admin.approval_queue', ['task_id' => $taskIdFilter])
|
|
: $approvalQueueUrl;
|
|
$methodLabelMap = TaskCertConstants::methodLabels();
|
|
?>
|
|
<div class="task-cert task-cert-admin-approval">
|
|
<div class="task-cert-admin-toolbar">
|
|
<div class="task-cert-admin-toolbar-head">
|
|
<h2 class="task-cert-admin-toolbar-title">Admin</h2>
|
|
<div class="task-cert-admin-toolbar-actions">
|
|
<?php if (!$error): ?>
|
|
<a href="<?php echo TaskCertView::e($taskFormUrl); ?>" class="btn task-cert-btn-success">Neue Aufgabe</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
<div class="task-cert-admin-toolbar-nav">
|
|
<div class="task-cert-admin-nav" aria-label="Admin-Navigation">
|
|
<a href="<?php echo TaskCertView::e($taskListUrl); ?>" class="task-cert-admin-nav-link">Aufgabenliste</a>
|
|
<a href="<?php echo TaskCertView::e($approvalQueueUrl); ?>" class="task-cert-admin-nav-link is-active">Freigaben</a>
|
|
<a href="<?php echo TaskCertView::e($escalationUrl); ?>" class="task-cert-admin-nav-link">Eskalationen</a>
|
|
<a href="<?php echo TaskCertView::e($categoriesUrl); ?>" class="task-cert-admin-nav-link">Kategorien</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php if ($error): ?>
|
|
<div class="task-cert-error"><?php echo TaskCertView::e($error); ?></div>
|
|
<?php endif; ?>
|
|
|
|
<form method="get" action="<?php echo TaskCertView::e($approvalQueueUrl); ?>" class="task-cert-admin-list-search">
|
|
<?php if ($taskIdFilter > 0): ?>
|
|
<input type="hidden" name="task_id" value="<?php echo $taskIdFilter; ?>">
|
|
<?php endif; ?>
|
|
<label for="task-cert-admin-search-approval-queue">Suche</label>
|
|
<div class="task-cert-admin-list-search-row">
|
|
<input
|
|
type="search"
|
|
id="task-cert-admin-search-approval-queue"
|
|
name="q"
|
|
value="<?php echo TaskCertView::e($searchQuery); ?>"
|
|
placeholder="Aufgabe, Mitarbeiter, Methode oder ID"
|
|
>
|
|
<button type="submit" class="btn">Suchen</button>
|
|
<?php if ($searchQuery !== ''): ?>
|
|
<a href="<?php echo TaskCertView::e($approvalQueueResetUrl); ?>" class="btn">Zurücksetzen</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
</form>
|
|
|
|
<table class="task-cert-table">
|
|
<thead>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th>Aufgabe</th>
|
|
<th>Methode</th>
|
|
<th>Mitarbeiter</th>
|
|
<th>Inhalt</th>
|
|
<th>Aktion</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($submissions as $submission): ?>
|
|
<tr>
|
|
<td><?php echo (int) $submission['id']; ?></td>
|
|
<td><?php echo TaskCertView::e($submission['task_title'] ?? ''); ?></td>
|
|
<?php $methodType = (string) ($submission['method_type'] ?? ''); ?>
|
|
<td><?php echo TaskCertView::e($methodLabelMap[$methodType] ?? $methodType); ?></td>
|
|
<td>
|
|
<?php echo TaskCertView::e($submission['contact_name'] ?? ''); ?>
|
|
(<?php echo TaskCertView::e($submission['contact_email'] ?? ''); ?>)
|
|
</td>
|
|
<td><pre><?php echo TaskCertView::e((string) json_encode($submission['payload'] ?? [], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); ?></pre></td>
|
|
<td>
|
|
<form action="<?php echo TaskCertView::e($taskCertBaseUrl . '/endpoints/admin/approval_decision.php'); ?>" method="post">
|
|
<input type="hidden" name="csrf_token" value="<?php echo TaskCertView::e($csrfToken); ?>">
|
|
<input type="hidden" name="submission_id" value="<?php echo (int) $submission['id']; ?>">
|
|
<input type="hidden" name="redirect_to" value="<?php echo TaskCertView::e($approvalQueueCurrentUrl); ?>">
|
|
<textarea name="note" rows="2" placeholder="Notiz"></textarea>
|
|
<button type="submit" name="decision" value="approve">Freigeben</button>
|
|
<button type="submit" name="decision" value="reject">Ablehnen</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
|
|
<?php if ($submissions === []): ?>
|
|
<tr>
|
|
<td colspan="6">Keine offenen Freigaben.</td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|