Jira bord changes
This commit is contained in:
@@ -93,6 +93,74 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$messageType = 'success';
|
||||
}
|
||||
|
||||
// 2b. Jira Wachtrijfilter toevoegen of bewerken
|
||||
elseif ($action === 'save_jira_queue_filter') {
|
||||
$filterId = (int)($_POST['filter_id'] ?? 0);
|
||||
$filterCode = strtoupper(trim($_POST['filter_code'] ?? ''));
|
||||
$filterName = trim($_POST['filter_name'] ?? '');
|
||||
$projectKey = strtoupper(trim($_POST['project_key'] ?? ''));
|
||||
$jqlClause = trim($_POST['jql_clause'] ?? '');
|
||||
$description = trim($_POST['description'] ?? '');
|
||||
$isActive = isset($_POST['is_active']) ? 1 : 0;
|
||||
$sortOrder = (int)($_POST['sort_order'] ?? 0);
|
||||
|
||||
if (empty($filterCode) || empty($filterName) || empty($jqlClause)) {
|
||||
$message = "Filtercode, naam en JQL-clausule zijn verplicht.";
|
||||
$messageType = 'error';
|
||||
} else {
|
||||
if ($filterId > 0) {
|
||||
$stmt = $db->prepare("
|
||||
UPDATE jira_queue_filters
|
||||
SET filter_code = ?, filter_name = ?, project_key = ?, jql_clause = ?, description = ?, is_active = ?, sort_order = ?, updated_at = NOW()
|
||||
WHERE id = ?
|
||||
");
|
||||
$stmt->execute([$filterCode, $filterName, $projectKey ?: null, $jqlClause, $description, $isActive, $sortOrder, $filterId]);
|
||||
$message = "Wachtrijfilter '{$filterName}' is succesvol bijgewerkt.";
|
||||
} else {
|
||||
$stmt = $db->prepare("
|
||||
INSERT INTO jira_queue_filters (filter_code, filter_name, project_key, jql_clause, description, is_active, sort_order)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
filter_name = VALUES(filter_name),
|
||||
project_key = VALUES(project_key),
|
||||
jql_clause = VALUES(jql_clause),
|
||||
description = VALUES(description),
|
||||
is_active = VALUES(is_active),
|
||||
sort_order = VALUES(sort_order),
|
||||
updated_at = NOW()
|
||||
");
|
||||
$stmt->execute([$filterCode, $filterName, $projectKey ?: null, $jqlClause, $description, $isActive, $sortOrder]);
|
||||
$message = "Nieuw wachtrijfilter '{$filterName}' is succesvol toegevoegd.";
|
||||
}
|
||||
$messageType = 'success';
|
||||
}
|
||||
}
|
||||
|
||||
// 2c. Jira Wachtrijfilter verwijderen
|
||||
elseif ($action === 'delete_jira_queue_filter') {
|
||||
$filterId = (int)($_POST['filter_id'] ?? 0);
|
||||
if ($filterId > 0) {
|
||||
$stmt = $db->prepare("DELETE FROM jira_queue_filters WHERE id = ?");
|
||||
$stmt->execute([$filterId]);
|
||||
$message = "Wachtrijfilter is succesvol verwijderd.";
|
||||
$messageType = 'success';
|
||||
}
|
||||
}
|
||||
|
||||
// 2d. Teamleden toewijzen aan Jira Wachtrijfilter
|
||||
elseif ($action === 'save_user_jira_assignments') {
|
||||
$assignments = $_POST['user_filter'] ?? [];
|
||||
if (is_array($assignments)) {
|
||||
$upd = $db->prepare("UPDATE users SET default_jira_filter_code = ? WHERE id = ?");
|
||||
foreach ($assignments as $uId => $fCode) {
|
||||
$fCode = trim($fCode);
|
||||
$upd->execute([$fCode !== '' ? $fCode : null, (int)$uId]);
|
||||
}
|
||||
$message = "Standaard Jira wachtrijtoewijzingen voor het team zijn succesvol opgeslagen.";
|
||||
$messageType = 'success';
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Organisatie Werkdag Standaarden opslaan (Release v1.4)
|
||||
elseif ($action === 'save_workday_settings') {
|
||||
$workdayStart = trim($_POST['workday_start'] ?? '08:30');
|
||||
@@ -215,6 +283,15 @@ try {
|
||||
error_log("Fout bij ophalen recente gebruikers: " . $e->getMessage());
|
||||
}
|
||||
|
||||
$allUsersForJira = [];
|
||||
$allJiraFilters = [];
|
||||
try {
|
||||
$allUsersForJira = $db->query("SELECT id, name, email, role, avatar_url, default_jira_filter_code FROM users ORDER BY name ASC")->fetchAll() ?: [];
|
||||
$allJiraFilters = $db->query("SELECT * FROM jira_queue_filters ORDER BY sort_order ASC, id ASC")->fetchAll() ?: [];
|
||||
} catch (Throwable $e) {
|
||||
error_log("Fout bij ophalen jira filters/users: " . $e->getMessage());
|
||||
}
|
||||
|
||||
$pageTitle = 'Systeembeheer & Integraties — Fociz';
|
||||
require_once __DIR__ . '/includes/header.php';
|
||||
?>
|
||||
@@ -497,6 +574,286 @@ require_once __DIR__ . '/includes/header.php';
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- 2b. Atlassian Jira Wachtrijfilters & Gebruikerskoppelingen -->
|
||||
<div class="fociz-card p-6 sm:p-7 space-y-6">
|
||||
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-6 border-b border-slate-100 dark:border-slate-800/80">
|
||||
<div class="flex items-center space-x-3.5">
|
||||
<div class="w-12 h-12 rounded-xl bg-gradient-to-tr from-sky-500 to-indigo-600 text-white flex items-center justify-center font-bold shadow-md shadow-indigo-500/20 flex-shrink-0">
|
||||
<i data-lucide="sliders" class="w-6 h-6"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="flex items-center space-x-2">
|
||||
<h2 class="text-lg font-bold text-slate-900 dark:text-white tracking-tight">Jira Wachtrijfilters & Toewijzingen</h2>
|
||||
<span class="px-2.5 py-0.5 rounded-full bg-indigo-50 dark:bg-indigo-950/40 border border-indigo-200 dark:border-indigo-800/60 text-indigo-700 dark:text-indigo-400 text-[10px] font-bold">
|
||||
ServiceDesk & Teams
|
||||
</span>
|
||||
</div>
|
||||
<p class="text-xs text-slate-500 dark:text-slate-400 mt-0.5">
|
||||
Beheer aangepaste JQL-wachtrijfilters (zoals DX en SD) en wijs teamleden toe aan hun standaard wachtrij.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" onclick="openJiraFilterModal()" class="inline-flex items-center space-x-2 px-4 py-2.5 rounded-xl bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-bold transition shadow-xs cursor-pointer self-start sm:self-center">
|
||||
<i data-lucide="plus" class="w-4 h-4"></i>
|
||||
<span>Nieuw Wachtrijfilter</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Overzicht van actieve wachtrijfilters -->
|
||||
<div>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<h3 class="text-xs font-bold text-slate-900 dark:text-white uppercase tracking-wider flex items-center space-x-1.5">
|
||||
<i data-lucide="filter" class="w-3.5 h-3.5 text-indigo-500"></i>
|
||||
<span>Geconfigureerde Wachtrijfilters (<?= count($allJiraFilters) ?>)</span>
|
||||
</h3>
|
||||
<span class="text-[11px] text-slate-400">Worden getoond als snelle filtertabs op de Jira pagina</span>
|
||||
</div>
|
||||
|
||||
<?php if (empty($allJiraFilters)): ?>
|
||||
<div class="p-6 rounded-2xl bg-slate-50 dark:bg-[#0c0f17] border border-slate-200 dark:border-slate-800 text-center">
|
||||
<p class="text-xs text-slate-500">Nog geen wachtrijfilters ingesteld. Klik op "Nieuw Wachtrijfilter" om te beginnen.</p>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<?php
|
||||
$userNamesByFilter = [];
|
||||
foreach ($allUsersForJira as $u) {
|
||||
if (!empty($u['default_jira_filter_code'])) {
|
||||
$userNamesByFilter[$u['default_jira_filter_code']][] = $u['name'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<div class="grid grid-cols-1 gap-3.5">
|
||||
<?php foreach ($allJiraFilters as $filter): ?>
|
||||
<?php
|
||||
$assignedColleagues = $userNamesByFilter[$filter['filter_code']] ?? [];
|
||||
$filterJsonSafe = htmlspecialchars(json_encode($filter), ENT_QUOTES, 'UTF-8');
|
||||
?>
|
||||
<div class="p-4 rounded-2xl bg-slate-50 dark:bg-[#0c0f17] border border-slate-200 dark:border-slate-800 hover:border-indigo-500/40 transition flex flex-col md:flex-row md:items-center justify-between gap-4">
|
||||
<div class="space-y-2 flex-1 min-w-0">
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<span class="font-mono text-xs font-black px-2.5 py-0.5 rounded-lg bg-indigo-100 text-indigo-800 dark:bg-indigo-950/70 dark:text-indigo-300 border border-indigo-200 dark:border-indigo-800/80">
|
||||
<?= htmlspecialchars($filter['filter_code']) ?>
|
||||
</span>
|
||||
<span class="text-xs font-bold text-slate-900 dark:text-white">
|
||||
<?= htmlspecialchars($filter['filter_name']) ?>
|
||||
</span>
|
||||
<?php if (!empty($filter['project_key'])): ?>
|
||||
<span class="text-[11px] font-medium px-2 py-0.5 rounded-md bg-slate-200/80 dark:bg-slate-800 text-slate-700 dark:text-slate-300">
|
||||
Project: <?= htmlspecialchars($filter['project_key']) ?>
|
||||
</span>
|
||||
<?php else: ?>
|
||||
<span class="text-[11px] font-medium px-2 py-0.5 rounded-md bg-slate-100 dark:bg-slate-800/60 text-slate-500">
|
||||
Alle projecten
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
<?php if (empty($filter['is_active'])): ?>
|
||||
<span class="text-[10px] font-bold px-2 py-0.5 rounded-full bg-rose-50 text-rose-700 dark:bg-rose-950/40 dark:text-rose-400">
|
||||
Inactief
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($filter['description'])): ?>
|
||||
<p class="text-[11px] text-slate-500 dark:text-slate-400">
|
||||
<?= htmlspecialchars($filter['description']) ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- JQL preview box -->
|
||||
<div class="p-2.5 rounded-xl bg-white dark:bg-[#111622] border border-slate-200/90 dark:border-slate-800 text-[11px] font-mono text-slate-700 dark:text-indigo-300 break-all select-all">
|
||||
<span class="text-slate-400 dark:text-slate-500 mr-1.5 font-sans font-bold">JQL:</span><?= htmlspecialchars($filter['jql_clause']) ?>
|
||||
</div>
|
||||
|
||||
<!-- Toegewezen collega's -->
|
||||
<div class="flex items-center space-x-2 text-[11px] text-slate-500 dark:text-slate-400 pt-0.5">
|
||||
<span class="font-semibold text-slate-700 dark:text-slate-300">Standaard gekoppeld aan:</span>
|
||||
<?php if (!empty($assignedColleagues)): ?>
|
||||
<span class="inline-flex items-center gap-1.5 flex-wrap">
|
||||
<?php foreach ($assignedColleagues as $cName): ?>
|
||||
<span class="px-2 py-0.5 rounded-md bg-sky-50 text-sky-700 dark:bg-sky-950/50 dark:text-sky-300 border border-sky-200 dark:border-sky-800/60 font-medium">
|
||||
<?= htmlspecialchars($cName) ?>
|
||||
</span>
|
||||
<?php endforeach; ?>
|
||||
</span>
|
||||
<?php else: ?>
|
||||
<span class="italic text-slate-400">Nog niemand specifiek toegewezen</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Actieknoppen -->
|
||||
<div class="flex items-center space-x-2 self-start md:self-center flex-shrink-0 pt-2 md:pt-0 border-t md:border-t-0 border-slate-200 dark:border-slate-800 w-full md:w-auto justify-end">
|
||||
<button type="button" onclick="editJiraFilter(<?= $filterJsonSafe ?>)" class="px-3 py-1.5 rounded-xl bg-slate-200/80 hover:bg-slate-300 dark:bg-slate-800 dark:hover:bg-slate-700 text-slate-800 dark:text-slate-200 text-xs font-semibold transition cursor-pointer">
|
||||
Bewerken
|
||||
</button>
|
||||
<form method="POST" action="/admin.php" onsubmit="return confirm('Weet u zeker dat u het filter \'<?= htmlspecialchars(addslashes($filter['filter_name'])) ?>\' wilt verwijderen?');" class="inline">
|
||||
<input type="hidden" name="action" value="delete_jira_queue_filter">
|
||||
<input type="hidden" name="filter_id" value="<?= (int)$filter['id'] ?>">
|
||||
<button type="submit" class="p-2 rounded-xl text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-950/40 transition cursor-pointer" title="Verwijderen">
|
||||
<i data-lucide="trash-2" class="w-4 h-4"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Team Wachtrijmatrix: Standaard Wachtrij per Teamlid -->
|
||||
<div class="pt-6 border-t border-slate-100 dark:border-slate-800/80 space-y-4">
|
||||
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-2">
|
||||
<div>
|
||||
<h3 class="text-xs font-bold text-slate-900 dark:text-white uppercase tracking-wider flex items-center space-x-1.5">
|
||||
<i data-lucide="users" class="w-3.5 h-3.5 text-indigo-500"></i>
|
||||
<span>Team Wachtrijmatrix: Standaard Wachtrij per Collega</span>
|
||||
</h3>
|
||||
<p class="text-[11px] text-slate-500 dark:text-slate-400 mt-0.5">
|
||||
Wijs collega's toe aan hun primaire wachtrij (bijv. DX of SD). Wanneer zij de Jira pagina openen, wordt deze wachtrij direct als standaard getoond.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form method="POST" action="/admin.php" class="space-y-4">
|
||||
<input type="hidden" name="action" value="save_user_jira_assignments">
|
||||
|
||||
<div class="overflow-x-auto rounded-2xl border border-slate-200 dark:border-slate-800">
|
||||
<table class="w-full text-left text-xs">
|
||||
<thead class="bg-slate-100 dark:bg-[#0c0f17] text-slate-600 dark:text-slate-400 font-bold border-b border-slate-200 dark:border-slate-800">
|
||||
<tr>
|
||||
<th class="py-3 px-4">Teamlid</th>
|
||||
<th class="py-3 px-4">E-mailadres</th>
|
||||
<th class="py-3 px-4">Rol</th>
|
||||
<th class="py-3 px-4 w-72">Standaard Wachtrijfilter</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100 dark:divide-slate-800/80 bg-white dark:bg-[#111622]">
|
||||
<?php foreach ($allUsersForJira as $usr): ?>
|
||||
<tr class="hover:bg-slate-50/50 dark:hover:bg-slate-800/30 transition">
|
||||
<td class="py-3 px-4">
|
||||
<div class="flex items-center space-x-2.5">
|
||||
<?php if (!empty($usr['avatar_url'])): ?>
|
||||
<img src="<?= htmlspecialchars($usr['avatar_url']) ?>" alt="Avatar" class="w-7 h-7 rounded-full object-cover border border-slate-200 dark:border-slate-700">
|
||||
<?php else: ?>
|
||||
<div class="w-7 h-7 rounded-full bg-indigo-100 dark:bg-indigo-900/60 text-indigo-700 dark:text-indigo-300 font-bold flex items-center justify-center text-[10px]">
|
||||
<?= strtoupper(substr($usr['name'], 0, 1)) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<span class="font-bold text-slate-900 dark:text-white"><?= htmlspecialchars($usr['name']) ?></span>
|
||||
</div>
|
||||
</td>
|
||||
<td class="py-3 px-4 font-mono text-slate-600 dark:text-slate-400">
|
||||
<?= htmlspecialchars($usr['email']) ?>
|
||||
</td>
|
||||
<td class="py-3 px-4">
|
||||
<span class="px-2 py-0.5 rounded-full text-[10px] font-bold <?= $usr['role'] === 'ADMIN' ? 'bg-purple-100 text-purple-800 dark:bg-purple-950/60 dark:text-purple-300' : 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300' ?>">
|
||||
<?= $usr['role'] ?>
|
||||
</span>
|
||||
</td>
|
||||
<td class="py-3 px-4">
|
||||
<select name="user_filter[<?= (int)$usr['id'] ?>]" class="w-full bg-slate-50 dark:bg-[#0c0f17] border border-slate-300 dark:border-slate-700 rounded-xl px-3 py-1.5 text-xs text-slate-900 dark:text-white focus:outline-none focus:ring-1 focus:ring-indigo-500 cursor-pointer">
|
||||
<option value="">Geen voorkeur (alles tonen)</option>
|
||||
<?php foreach ($allJiraFilters as $f): ?>
|
||||
<?php if ($f['is_active']): ?>
|
||||
<option value="<?= htmlspecialchars($f['filter_code']) ?>" <?= ($usr['default_jira_filter_code'] === $f['filter_code']) ? 'selected' : '' ?>>
|
||||
<?= htmlspecialchars($f['filter_code']) ?> — <?= htmlspecialchars($f['filter_name']) ?>
|
||||
</option>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end pt-2">
|
||||
<button type="submit" class="px-5 py-2.5 rounded-xl bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-bold transition shadow-xs cursor-pointer">
|
||||
Wachtrijtoewijzingen Opslaan
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- MODAL: Wachtrijfilter Toevoegen / Bewerken -->
|
||||
<div id="jiraFilterModal" class="fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-sm hidden items-center justify-center p-4 overflow-y-auto">
|
||||
<div class="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl w-full max-w-lg shadow-2xl p-6 transition transform">
|
||||
<div class="flex items-center justify-between pb-4 border-b border-slate-100 dark:border-slate-800">
|
||||
<div class="flex items-center space-x-2.5">
|
||||
<div class="w-9 h-9 rounded-xl bg-indigo-50 dark:bg-indigo-950/50 text-indigo-600 dark:text-indigo-400 flex items-center justify-center font-bold">
|
||||
<i data-lucide="filter" class="w-4 h-4"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h3 id="jiraFilterModalTitle" class="text-sm font-bold text-slate-900 dark:text-white">Wachtrijfilter Configureren</h3>
|
||||
<p class="text-[11px] text-slate-400">Beheer JQL zoekclausule en koppeling</p>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" onclick="closeJiraFilterModal()" class="text-slate-400 hover:text-slate-600 dark:hover:text-slate-200 p-1.5 rounded-lg transition cursor-pointer">
|
||||
<i data-lucide="x" class="w-4 h-4"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<form method="POST" action="/admin.php" class="mt-4 space-y-4">
|
||||
<input type="hidden" name="action" value="save_jira_queue_filter">
|
||||
<input type="hidden" id="filterModal_id" name="filter_id" value="0">
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
||||
<div>
|
||||
<label class="block text-xs font-semibold text-slate-700 dark:text-slate-300 mb-1">
|
||||
Filter Code <span class="text-red-500">*</span>
|
||||
</label>
|
||||
<input type="text" id="filterModal_code" name="filter_code" required placeholder="bijv. DX of SD" class="w-full bg-slate-50 dark:bg-[#0c0f17] border border-slate-300 dark:border-slate-700 rounded-xl px-3 py-2 text-xs text-slate-900 dark:text-white font-mono uppercase focus:outline-none focus:ring-1 focus:ring-indigo-500">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-semibold text-slate-700 dark:text-slate-300 mb-1">
|
||||
Doel Project (optioneel)
|
||||
</label>
|
||||
<input type="text" id="filterModal_project" name="project_key" placeholder="bijv. SD of SERVICEDESK" class="w-full bg-slate-50 dark:bg-[#0c0f17] border border-slate-300 dark:border-slate-700 rounded-xl px-3 py-2 text-xs text-slate-900 dark:text-white font-mono uppercase focus:outline-none focus:ring-1 focus:ring-indigo-500">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-xs font-semibold text-slate-700 dark:text-slate-300 mb-1">
|
||||
Filter Naam <span class="text-red-500">*</span>
|
||||
</label>
|
||||
<input type="text" id="filterModal_name" name="filter_name" required placeholder="bijv. DX — Koppelingen, SSO & Migratie" class="w-full bg-slate-50 dark:bg-[#0c0f17] border border-slate-300 dark:border-slate-700 rounded-xl px-3 py-2 text-xs text-slate-900 dark:text-white focus:outline-none focus:ring-1 focus:ring-indigo-500">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-xs font-semibold text-slate-700 dark:text-slate-300 mb-1">
|
||||
JQL Clausule <span class="text-red-500">*</span>
|
||||
</label>
|
||||
<textarea id="filterModal_jql" name="jql_clause" rows="3" required placeholder='bijv. "Onderwerp logging[dropdown]" in (Koppelingen, SSO-koppeling, Rest-endpoints, Datadump, UWV-koppeling, Migratie)' class="w-full bg-slate-50 dark:bg-[#0c0f17] border border-slate-300 dark:border-slate-700 rounded-xl px-3 py-2 text-xs text-slate-900 dark:text-white font-mono focus:outline-none focus:ring-1 focus:ring-indigo-500"></textarea>
|
||||
<span class="text-[10px] text-slate-400">Voer de exacte JQL filterclausule in die in Jira op de issues wordt toegepast.</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-xs font-semibold text-slate-700 dark:text-slate-300 mb-1">
|
||||
Omschrijving / Toelichting
|
||||
</label>
|
||||
<input type="text" id="filterModal_desc" name="description" placeholder="Korte toelichting voor het team" class="w-full bg-slate-50 dark:bg-[#0c0f17] border border-slate-300 dark:border-slate-700 rounded-xl px-3 py-2 text-xs text-slate-900 dark:text-white focus:outline-none focus:ring-1 focus:ring-indigo-500">
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between pt-2">
|
||||
<label class="flex items-center space-x-2 text-xs text-slate-700 dark:text-slate-300 cursor-pointer">
|
||||
<input type="checkbox" id="filterModal_active" name="is_active" value="1" checked class="w-4 h-4 rounded text-indigo-600 focus:ring-indigo-500 border-slate-300 dark:border-slate-700">
|
||||
<span>Filter is actief</span>
|
||||
</label>
|
||||
<div class="flex items-center space-x-2">
|
||||
<button type="button" onclick="closeJiraFilterModal()" class="px-4 py-2 rounded-xl text-xs font-semibold text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800 transition cursor-pointer">
|
||||
Annuleren
|
||||
</button>
|
||||
<button type="submit" class="px-4 py-2 rounded-xl text-xs font-bold bg-indigo-600 hover:bg-indigo-500 text-white transition cursor-pointer shadow-xs">
|
||||
Filter Opslaan
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 3. Organisatie Werkdag Standaarden (Release v1.4) -->
|
||||
<div class="fociz-card p-6 sm:p-7 space-y-6">
|
||||
<div class="flex items-center justify-between pb-4 border-b border-slate-100 dark:border-slate-800/80">
|
||||
@@ -860,6 +1217,49 @@ function toggleAdminGuide() {
|
||||
arrow.classList.toggle('rotate-180');
|
||||
}
|
||||
}
|
||||
|
||||
// Jira Wachtrijfilter Modalfuncties
|
||||
function openJiraFilterModal() {
|
||||
document.getElementById('jiraFilterModalTitle').innerText = 'Nieuw Wachtrijfilter Toevoegen';
|
||||
document.getElementById('filterModal_id').value = '0';
|
||||
document.getElementById('filterModal_code').value = '';
|
||||
document.getElementById('filterModal_name').value = '';
|
||||
document.getElementById('filterModal_project').value = 'SD';
|
||||
document.getElementById('filterModal_jql').value = '';
|
||||
document.getElementById('filterModal_desc').value = '';
|
||||
document.getElementById('filterModal_active').checked = true;
|
||||
|
||||
const modal = document.getElementById('jiraFilterModal');
|
||||
modal.classList.remove('hidden');
|
||||
modal.classList.add('flex');
|
||||
}
|
||||
|
||||
function editJiraFilter(filter) {
|
||||
document.getElementById('jiraFilterModalTitle').innerText = `Wachtrijfilter '${filter.filter_name}' Bewerken`;
|
||||
document.getElementById('filterModal_id').value = filter.id || '0';
|
||||
document.getElementById('filterModal_code').value = filter.filter_code || '';
|
||||
document.getElementById('filterModal_name').value = filter.filter_name || '';
|
||||
document.getElementById('filterModal_project').value = filter.project_key || '';
|
||||
document.getElementById('filterModal_jql').value = filter.jql_clause || '';
|
||||
document.getElementById('filterModal_desc').value = filter.description || '';
|
||||
document.getElementById('filterModal_active').checked = (filter.is_active != 0);
|
||||
|
||||
const modal = document.getElementById('jiraFilterModal');
|
||||
modal.classList.remove('hidden');
|
||||
modal.classList.add('flex');
|
||||
}
|
||||
|
||||
function closeJiraFilterModal() {
|
||||
const modal = document.getElementById('jiraFilterModal');
|
||||
modal.classList.add('hidden');
|
||||
modal.classList.remove('flex');
|
||||
}
|
||||
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape') {
|
||||
closeJiraFilterModal();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php require_once __DIR__ . '/includes/footer.php'; ?>
|
||||
|
||||
Reference in New Issue
Block a user