diff --git a/jira.php b/jira.php
index fa4bbc1..ed02880 100644
--- a/jira.php
+++ b/jira.php
@@ -98,15 +98,102 @@ foreach ($allIssues as $iss) {
}
}
-// Statussen uitbreiden met officiële Jira instantie statussen
-$availableStatuses = $jiraData['available_statuses'] ?? [];
-if (!empty($availableStatuses)) {
- foreach ($availableStatuses as $st) {
- if (!empty($st['name'])) {
- $allStatuses[$st['name']] = $st['name'];
- }
+// Bepaal welke projecten getoond worden: alleen projecten die tickets hebben, plus SD/IN/AAN/GEN
+// Geen statussen van projecten die niet gebruikt worden!
+$activeProjectKeys = [];
+foreach ($coreProjects as $cKey => $cMeta) {
+ if (isset($usedProjectKeys[$cKey]) || !empty($projectCounts[$cMeta['name']]) || !empty($projectCounts[$cKey])) {
+ $activeProjectKeys[$cKey] = true;
}
}
+foreach ($usedProjectKeys as $uKey => $val) {
+ $activeProjectKeys[$uKey] = true;
+}
+if (empty($activeProjectKeys)) {
+ $activeProjectKeys = array_fill_keys(['SD', 'IN', 'AAN', 'GEN'], true);
+}
+
+// Haal projectstatussen op uit jiraData
+$rawProjectStatuses = $jiraData['project_statuses'] ?? [];
+
+// Bouw gestructureerde lijst van statussen gegroepeerd per project
+$projectStatusesData = [];
+$allStatusesMap = [];
+
+foreach (array_keys($activeProjectKeys) as $pKey) {
+ $pName = $coreProjects[$pKey]['name'] ?? ($allProjects[$pKey]['name'] ?? $pKey);
+ $pColor = $coreProjects[$pKey]['color'] ?? 'slate';
+
+ $pStatuses = [];
+
+ // 1. Statussen uit Jira API voor dit project
+ if (!empty($rawProjectStatuses[$pKey])) {
+ foreach ($rawProjectStatuses[$pKey] as $st) {
+ $sName = trim($st['name'] ?? '');
+ if (empty($sName)) continue;
+ $sKey = strtolower($sName);
+ $pStatuses[$sKey] = [
+ 'name' => $sName,
+ 'status_category' => $st['status_category'] ?? 'indeterminate',
+ 'category_name' => $st['category_name'] ?? '',
+ ];
+ }
+ }
+
+ // 2. Statussen die op de tickets van dit project voorkomen toevoegen/mergen
+ foreach ($allIssues as $iss) {
+ $issPKey = strtoupper(trim($iss['project_key'] ?? ''));
+ if (empty($issPKey) && !empty($iss['key']) && preg_match('/^([A-Z0-9]+)-/i', $iss['key'], $m)) {
+ $issPKey = strtoupper($m[1]);
+ }
+ if ($issPKey === $pKey && !empty($iss['status'])) {
+ $sName = trim($iss['status']);
+ $sKey = strtolower($sName);
+ if (!isset($pStatuses[$sKey])) {
+ $pStatuses[$sKey] = [
+ 'name' => $sName,
+ 'status_category' => $iss['status_category'] ?? 'indeterminate',
+ 'category_name' => '',
+ ];
+ }
+ }
+ }
+
+ // Fallback als een project nog geen statussen heeft
+ if (empty($pStatuses)) {
+ $fallback = [
+ ['name' => 'To Do', 'status_category' => 'new'],
+ ['name' => 'In behandeling', 'status_category' => 'indeterminate'],
+ ['name' => 'Gesloten', 'status_category' => 'done'],
+ ];
+ foreach ($fallback as $fb) {
+ $pStatuses[strtolower($fb['name'])] = $fb;
+ }
+ }
+
+ // Sorteren: To Do / Nieuw (1), In behandeling / Uitvoering (2), Gesloten / Gereed (3)
+ uasort($pStatuses, function($a, $b) {
+ $order = ['new' => 1, 'indeterminate' => 2, 'done' => 3];
+ $oa = $order[$a['status_category'] ?? 'indeterminate'] ?? 2;
+ $ob = $order[$b['status_category'] ?? 'indeterminate'] ?? 2;
+ if ($oa !== $ob) return $oa - $ob;
+ return strcasecmp($a['name'], $b['name']);
+ });
+
+ $statusList = array_values($pStatuses);
+ foreach ($statusList as $st) {
+ $allStatusesMap[strtolower($st['name'])] = $st;
+ }
+
+ $projectStatusesData[] = [
+ 'key' => $pKey,
+ 'name' => $pName,
+ 'color' => $pColor,
+ 'statuses' => $statusList,
+ ];
+}
+
+$allStatusesList = array_values($allStatusesMap);
ksort($allProjects);
ksort($allTypes);
@@ -117,6 +204,8 @@ $userQueueFilters = $jiraData['user_queue_filters'] ?? jira_get_user_queue_prefe
$jiraDataJson = json_encode($jiraData, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
$boardsJson = json_encode($boards, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
+$projectStatusesJson = json_encode($projectStatusesData, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
+$statusesJson = json_encode($allStatusesList, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
?>
@@ -393,48 +482,48 @@ $boardsJson = json_encode($boards, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
Statussen per Project
+
+
+ •
+
+ •
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+