From 6bc351aaa4989713cc4f58de63183b31057c9177 Mon Sep 17 00:00:00 2001 From: Niek Rabelink Date: Tue, 15 Sep 2026 22:31:53 +0200 Subject: [PATCH] Jira 26 --- admin.php | 23 +++- includes/auth.php | 4 +- includes/integrations/jira.php | 238 +++++++++++++++++++++++---------- jira.php | 223 +++++++++++++++++++++++++++++- 4 files changed, 412 insertions(+), 76 deletions(-) diff --git a/admin.php b/admin.php index 6da445e..cc01e22 100644 --- a/admin.php +++ b/admin.php @@ -1349,7 +1349,20 @@ require_once __DIR__ . '/includes/header.php';
@@ -1495,10 +1508,14 @@ require_once __DIR__ . '/includes/header.php';
-
+ +
+ +
+ 0 + +
+
+
${statusRowsHtml}
@@ -1293,6 +1473,7 @@ function renderStatusCheckboxes() { updateStatusCounts(); updateStatusDropdownLabel(); updateProjectStatusDropdownVisibility(); + updateAssignedPillState(); } function updateProjectStatusDropdownVisibility() { @@ -1386,6 +1567,11 @@ function updateStatusCounts() { projIssues = projIssues.filter(iss => isIssueInQueue(iss, currentProject)); } + // Toegewezen aan mij filter per project meenemen in de status tellingen + if (isProjectOnlyAssignedActive(currentProject, pKey)) { + projIssues = projIssues.filter(iss => isIssueAssignedToMe(iss)); + } + const projTotalEl = document.getElementById(`projTotal_${pKey}`); if (projTotalEl) { projTotalEl.innerText = `(${projIssues.length})`; @@ -1401,6 +1587,8 @@ function updateStatusCounts() { } }); }); + + updateAssignedPillState(); } function onStatusCheckboxChange(projectKey) { @@ -1556,11 +1744,18 @@ function updateStatusDropdownLabel() { badgeEl.className = "px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-indigo-100 dark:bg-indigo-950/60 text-indigo-700 dark:text-indigo-300"; } } + + // Toon indicator indien Toegewezen aan mij actief is voor dit project + const isAssignedOnly = projectOnlyAssigned.has(pKey) || projectOnlyAssigned.has('ALL'); + if (isAssignedOnly) { + hasAnyCustomFilter = true; + labelEl.innerText += " • Mijn"; + } }); const btnReset = document.getElementById('btnResetFiltersInline'); if (btnReset) { - const isCustom = hasAnyCustomFilter || currentProject !== '' || document.getElementById('jiraSearchInput')?.value; + const isCustom = hasAnyCustomFilter || currentProject !== '' || projectOnlyAssigned.size > 0 || document.getElementById('jiraSearchInput')?.value; if (isCustom) btnReset.classList.remove('hidden'); else btnReset.classList.add('hidden'); } @@ -1628,6 +1823,7 @@ function selectProject(proj) { closeAllProjectStatusDropdowns(); updateProjectPills(); updateProjectStatusDropdownVisibility(); + updateAssignedPillState(); updateStatusCounts(); applyFilters(); } @@ -1942,7 +2138,13 @@ function updateProjectCounts() { } const elAll = document.getElementById('projCount_all'); - if (elAll) elAll.innerText = currentList.length; + if (elAll) { + let allFiltered = currentList; + if (projectOnlyAssigned.has('ALL')) { + allFiltered = allFiltered.filter(iss => isIssueAssignedToMe(iss)); + } + elAll.innerText = allFiltered.length; + } const pills = document.querySelectorAll('.project-pill'); pills.forEach(p => { @@ -1950,7 +2152,11 @@ function updateProjectCounts() { if (!pKey) return; const el = document.getElementById(`projCount_${pKey}`); if (el) { - el.innerText = currentList.filter(iss => isIssueInQueue(iss, pKey)).length; + let pList = currentList.filter(iss => isIssueInQueue(iss, pKey)); + if (projectOnlyAssigned.has(pKey.toUpperCase()) || projectOnlyAssigned.has('ALL')) { + pList = pList.filter(iss => isIssueAssignedToMe(iss)); + } + el.innerText = pList.length; } }); } @@ -1995,6 +2201,10 @@ function clearSearch() { function resetAllFilters() { currentProject = ''; currentQueue = ''; + projectOnlyAssigned.clear(); + try { + localStorage.removeItem('fociz_jira_project_only_assigned'); + } catch (e) {} closeAllProjectStatusDropdowns(); selectAllStatuses(true); @@ -2009,6 +2219,7 @@ function resetAllFilters() { document.getElementById('clearSearchBtn')?.classList.add('hidden'); updateProjectPills(); updateProjectStatusDropdownVisibility(); + updateAssignedPillState(); updateStatusCounts(); applyFilters(); } @@ -2048,6 +2259,12 @@ function applyFilters() { } } + // 3. Toegewezen aan mij (uitvoerder) per project filter + const isAssignedFilterActive = isProjectOnlyAssignedActive(projectVal, issPKey); + if (isAssignedFilterActive && !isIssueAssignedToMe(iss)) { + return false; + } + // 4. Type filter (uit drawer) if (typeVal && (iss.issue_type || '').toLowerCase() !== typeVal) { return false; -- 2.52.0