diff --git a/jira.php b/jira.php
index e06b75d..4a33f9d 100644
--- a/jira.php
+++ b/jira.php
@@ -56,7 +56,97 @@ foreach ($boards as &$b) {
}
unset($b);
-// Verzamel unieke projecten en types voor filter dropdowns en project switcher
+// Ophalen van actieve wachtrijfilters en toewijzingen van de ingelogde gebruiker
+$queueFilters = $jiraData['queue_filters'] ?? jira_get_queue_filters(true);
+$defaultQueueFilter = $jiraData['default_queue_filter'] ?? jira_get_user_queue_preference($userId);
+$userQueueFilters = $jiraData['user_queue_filters'] ?? jira_get_user_queue_preferences($userId);
+$userQueueFilters = array_values(array_filter(array_map('strtoupper', array_map('trim', $userQueueFilters ?? []))));
+$jiraData['user_queue_filters'] = $userQueueFilters;
+
+// Hulpfunctie om te controleren of een ticket behoort tot een wachtrij / project
+$issueMatchesQueue = function(array $iss, string $code) use ($queueFilters): bool {
+ $code = strtoupper(trim($code));
+ if (empty($code)) return true;
+
+ $pKey = strtoupper(trim($iss['project_key'] ?? ''));
+ if (empty($pKey) && !empty($iss['key']) && preg_match('/^([A-Z0-9]+)-/i', $iss['key'], $m)) {
+ $pKey = strtoupper($m[1]);
+ }
+ $pName = strtolower(trim($iss['project'] ?? ''));
+ $ol = strtolower(trim($iss['onderwerp_logging'] ?? ''));
+ $sum = strtolower(trim($iss['summary'] ?? ''));
+
+ // 1. Zoek geconfigureerd filter in database
+ foreach ($queueFilters as $qf) {
+ if (strtoupper(trim($qf['filter_code'] ?? '')) === $code) {
+ if (!empty($qf['project_key'])) {
+ $filterPKey = strtoupper(trim($qf['project_key']));
+ if ($pKey) {
+ if ($pKey !== $filterPKey) return false;
+ } elseif (strpos($pName, strtolower($filterPKey)) === false) {
+ return false;
+ }
+ }
+ if (!empty($qf['jql_clause'])) {
+ $jql = $qf['jql_clause'];
+ if (preg_match('/onderwerp\s+logging.*?in\s*\(([^)]+)\)/i', $jql, $jm)) {
+ $terms = array_map(function($t) { return trim($t, " '\"\t\n\r\0\x0B"); }, explode(',', strtolower($jm[1])));
+ $found = false;
+ foreach ($terms as $t) {
+ if ($t !== '' && (strpos($ol, $t) !== false || strpos($sum, $t) !== false)) {
+ $found = true;
+ break;
+ }
+ }
+ if (!$found) return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ // 2. Fallbacks voor standaard wachtrijen/projecten
+ if ($code === 'DX') {
+ $isSd = ($pKey === 'SD') || strpos($pName, 'servicedesk') !== false;
+ if (!$isSd) return false;
+ $dxTerms = ['koppeling', 'sso', 'endpoint', 'rest', 'datadump', 'uwv', 'migratie'];
+ foreach ($dxTerms as $t) {
+ if (strpos($ol, $t) !== false || strpos($sum, $t) !== false) return true;
+ }
+ return false;
+ }
+ if ($code === 'SD') {
+ return ($pKey === 'SD') || strpos($pName, 'servicedesk') !== false;
+ }
+ if ($code === 'IN') {
+ return ($pKey === 'IN') || strpos($pName, 'interface') !== false;
+ }
+ if ($code === 'AAN') {
+ return ($pKey === 'AAN') || strpos($pName, 'aanvraag') !== false;
+ }
+ if ($code === 'GEN') {
+ return ($pKey === 'GEN') || strpos($pName, 'general') !== false || strpos($pName, 'algemeen') !== false;
+ }
+
+ return ($pKey === $code);
+};
+
+// Als er specifieke projecten aan de gebruiker zijn toegewezen: verberg tickets van niet-toegewezen projecten
+if (!empty($userQueueFilters)) {
+ $filterByAssigned = function(array $issues) use ($userQueueFilters, $issueMatchesQueue): array {
+ return array_values(array_filter($issues, function($iss) use ($userQueueFilters, $issueMatchesQueue) {
+ foreach ($userQueueFilters as $qCode) {
+ if ($issueMatchesQueue($iss, $qCode)) return true;
+ }
+ return false;
+ }));
+ };
+ $assignedIssues = $filterByAssigned($assignedIssues);
+ $teamIssues = $filterByAssigned($teamIssues);
+ $jiraData['assigned_issues'] = $assignedIssues;
+ $jiraData['team_issues'] = $teamIssues;
+}
+
// Verzamel unieke projecten en types voor filter dropdowns en project switcher
$allIssues = array_merge($assignedIssues, $teamIssues);
$allProjects = [];
@@ -198,10 +288,6 @@ $allStatusesList = array_values($allStatusesMap);
ksort($allProjects);
ksort($allTypes);
-$queueFilters = $jiraData['queue_filters'] ?? jira_get_queue_filters(true);
-$defaultQueueFilter = $jiraData['default_queue_filter'] ?? jira_get_user_queue_preference($userId);
-$userQueueFilters = $jiraData['user_queue_filters'] ?? jira_get_user_queue_preferences($userId);
-
$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);
@@ -408,7 +494,7 @@ $statusesJson = json_encode($allStatusesList, JSON_HEX_TAG | JSON_HEX_APOS | JSO
-
+
@@ -416,7 +502,7 @@ $statusesJson = json_encode($allStatusesList, JSON_HEX_TAG | JSON_HEX_APOS | JSO
Projecten
-
Direct filteren op projectcode
+
Direct schakelen tussen jouw toegewezen projecten
@@ -427,108 +513,74 @@ $statusesJson = json_encode($allStatusesList, JSON_HEX_TAG | JSON_HEX_APOS | JSO
= count($allIssues) ?>
-
-
-
-
-
-
-
-
-
-
-
-
- $pData):
- $pKeyNorm = strtoupper($pKey);
- $pDataKeyNorm = strtoupper($pData['key'] ?? '');
- if (in_array($pKeyNorm, ['SD', 'IN', 'AAN', 'GEN']) || in_array($pDataKeyNorm, ['SD', 'IN', 'AAN', 'GEN'])) continue;
- $displayKey = !empty($pData['key']) ? $pData['key'] : $pKey;
+
-
-
-
-
-
-
-
-
-
-
-
-
Wachtrij
-
Filter op gekoppelde wachtrijen
-
-
-
-