query("SELECT id, title FROM boards WHERE is_archived = 0 ORDER BY id ASC")->fetchAll(); } else { $stmt = $db->prepare(" SELECT b.id, b.title FROM boards b JOIN board_members bm ON b.id = bm.board_id WHERE bm.user_id = ? AND b.is_archived = 0 ORDER BY b.id ASC "); $stmt->execute([$userId]); $boards = $stmt->fetchAll(); } $boardIds = array_column($boards, 'id'); $lanesByBoard = []; if (!empty($boardIds)) { $inClause = implode(',', array_map('intval', $boardIds)); $lanes = $db->query("SELECT id, board_id, title, color FROM board_lanes WHERE board_id IN ({$inClause}) ORDER BY position ASC")->fetchAll(); foreach ($lanes as $lane) { $lanesByBoard[$lane['board_id']][] = $lane; } } foreach ($boards as &$b) { $b['lanes'] = $lanesByBoard[$b['id']] ?? []; } unset($b); // Verzamel unieke projecten en types voor filter dropdowns en project switcher $allIssues = array_merge($assignedIssues, $teamIssues); $allProjects = []; $allTypes = []; $allPriorities = ['Highest', 'High', 'Medium', 'Low']; $allStatuses = []; $projectCounts = []; foreach ($allIssues as $iss) { if (!empty($iss['project'])) { $p = $iss['project']; $allProjects[$p] = [ 'name' => $p, 'key' => $iss['project_key'] ?? '', ]; $projectCounts[$p] = ($projectCounts[$p] ?? 0) + 1; } if (!empty($iss['issue_type'])) { $allTypes[$iss['issue_type']] = $iss['issue_type']; } if (!empty($iss['status'])) { $sName = trim($iss['status']); $sKey = strtolower($sName); $allStatuses[$sKey] = [ 'name' => $sName, 'status_category' => $iss['status_category'] ?? 'indeterminate', 'category_name' => '', ]; } } // Statussen uitbreiden met ALLE officiële Jira Cloud instantie statussen $availableStatuses = $jiraData['available_statuses'] ?? []; if (!empty($availableStatuses)) { foreach ($availableStatuses as $st) { if (!empty($st['name'])) { $sName = trim($st['name']); $sKey = strtolower($sName); $cat = $st['status_category'] ?? ($allStatuses[$sKey]['status_category'] ?? 'indeterminate'); $allStatuses[$sKey] = [ 'name' => $sName, 'status_category' => $cat, 'category_name' => $st['category_name'] ?? '', ]; } } } // Fallback statussen als Jira nog geen verbinding heeft if (empty($allStatuses)) { $fallbackList = [ ['name' => 'To Do', 'status_category' => 'new'], ['name' => 'In behandeling', 'status_category' => 'indeterminate'], ['name' => 'In Progress', 'status_category' => 'indeterminate'], ['name' => 'Wachten op klant', 'status_category' => 'indeterminate'], ['name' => 'In Review', 'status_category' => 'indeterminate'], ['name' => 'Gesloten', 'status_category' => 'done'], ['name' => 'Done', 'status_category' => 'done'], ]; foreach ($fallbackList as $fb) { $allStatuses[strtolower($fb['name'])] = $fb; } } // Sorteren: To Do / Nieuw (1), In Uitvoering / Behandeling (2), Gesloten / Gereed (3), daarbinnen alfabetisch uasort($allStatuses, 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']); }); $allStatusesList = array_values($allStatuses); 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); $statusesJson = json_encode($allStatusesList, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); ?>

Atlassian Jira Hub

Live Verbonden Demomodus

Interactieve Voorbeeldweergave (Sandbox)

Je bekijkt momenteel demotickets. Koppel je Atlassian Jira Cloud instantie in je profiel om direct de live tickets van jouw organisatie in te laden.

Koppel Jira Cloud
Synchronisatiefout:
Controleer instellingen
Verbonden met als Demodataset actief met voorbeeldtickets
Projecten

Direct filteren op projectcode

$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

Ticket succesvol verwerkt