Jira aanpassingen
This commit is contained in:
@@ -171,15 +171,29 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
}
|
||||
}
|
||||
|
||||
// 2d. Teamleden toewijzen aan Jira Wachtrijfilter
|
||||
// 2d. Teamleden toewijzen aan Jira Wachtrijfilters (meervoudig)
|
||||
elseif ($action === 'save_user_jira_assignments') {
|
||||
$activeTab = 'jira';
|
||||
$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]);
|
||||
$assignments = $_POST['user_filters'] ?? [];
|
||||
$submittedUserIds = isset($_POST['user_ids']) && is_array($_POST['user_ids']) ? array_map('intval', $_POST['user_ids']) : [];
|
||||
|
||||
// Fallback als user_ids niet meegestuurd werd (bv. oude formulier submission met user_filter)
|
||||
if (empty($submittedUserIds) && !empty($_POST['user_filter']) && is_array($_POST['user_filter'])) {
|
||||
$submittedUserIds = array_map('intval', array_keys($_POST['user_filter']));
|
||||
foreach ($_POST['user_filter'] as $uId => $sCode) {
|
||||
$sCode = trim($sCode);
|
||||
$assignments[$uId] = $sCode !== '' ? [$sCode] : [];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($submittedUserIds)) {
|
||||
$upd = $db->prepare("UPDATE users SET default_jira_filter_codes = ?, default_jira_filter_code = ? WHERE id = ?");
|
||||
foreach ($submittedUserIds as $uId) {
|
||||
$rawList = isset($assignments[$uId]) && is_array($assignments[$uId]) ? $assignments[$uId] : [];
|
||||
$cleanCodes = array_values(array_unique(array_filter(array_map('trim', $rawList))));
|
||||
$jsonVal = !empty($cleanCodes) ? json_encode($cleanCodes) : null;
|
||||
$firstVal = !empty($cleanCodes) ? $cleanCodes[0] : null;
|
||||
$upd->execute([$jsonVal, $firstVal, (int)$uId]);
|
||||
}
|
||||
fociz_log_audit($userId, 'SETTINGS_UPDATED', 'jira_assignments', null, [], 'SUCCESS', $adminUser['email']);
|
||||
$message = "Standaard Jira wachtrijtoewijzingen voor het team zijn succesvol opgeslagen.";
|
||||
@@ -511,7 +525,7 @@ try {
|
||||
$allUsersForJira = [];
|
||||
$allJiraFilters = [];
|
||||
try {
|
||||
$allUsersForJira = $db->query("SELECT id, name, email, role, avatar_url, default_jira_filter_code FROM users ORDER BY name ASC")->fetchAll() ?: [];
|
||||
$allUsersForJira = $db->query("SELECT id, name, email, role, avatar_url, default_jira_filter_code, default_jira_filter_codes 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());
|
||||
@@ -1373,10 +1387,10 @@ require_once __DIR__ . '/includes/header.php';
|
||||
<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>
|
||||
<span>Team Wachtrijmatrix: Gekoppelde Wachtrijen 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.
|
||||
Koppel collega's aan één of meerdere wachtrijfilters (bijv. SD, IN, AAN, GEN of DX). Collega's zien in de Jira Hub direct de tickets van hun gekoppelde wachtrijen.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1393,13 +1407,25 @@ require_once __DIR__ . '/includes/header.php';
|
||||
<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>
|
||||
<th class="py-3 px-4">Gekoppelde Wachtrijen (Meervoudig)</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): ?>
|
||||
<?php foreach ($allUsersForJira as $usr):
|
||||
$userSelectedCodes = [];
|
||||
if (!empty($usr['default_jira_filter_codes'])) {
|
||||
$decoded = json_decode($usr['default_jira_filter_codes'], true);
|
||||
if (is_array($decoded)) {
|
||||
$userSelectedCodes = $decoded;
|
||||
}
|
||||
}
|
||||
if (empty($userSelectedCodes) && !empty($usr['default_jira_filter_code'])) {
|
||||
$userSelectedCodes = [$usr['default_jira_filter_code']];
|
||||
}
|
||||
?>
|
||||
<tr class="hover:bg-slate-50/50 dark:hover:bg-slate-800/30 transition">
|
||||
<td class="py-3 px-4">
|
||||
<input type="hidden" name="user_ids[]" value="<?= (int)$usr['id'] ?>">
|
||||
<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" onerror="this.classList.add('hidden'); if(this.nextElementSibling) this.nextElementSibling.classList.remove('hidden');">
|
||||
@@ -1423,16 +1449,18 @@ require_once __DIR__ . '/includes/header.php';
|
||||
</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; ?>
|
||||
<div class="flex flex-wrap gap-1.5 items-center">
|
||||
<?php foreach ($allJiraFilters as $f):
|
||||
if (!$f['is_active']) continue;
|
||||
$code = $f['filter_code'];
|
||||
$isChecked = in_array($code, $userSelectedCodes, true);
|
||||
?>
|
||||
<label class="inline-flex items-center space-x-1.5 px-2.5 py-1 rounded-lg border text-xs font-semibold cursor-pointer transition select-none <?= $isChecked ? 'bg-indigo-50 border-indigo-300 text-indigo-700 dark:bg-indigo-950/60 dark:border-indigo-700 dark:text-indigo-300' : 'bg-slate-50 border-slate-200 text-slate-600 dark:bg-slate-900/40 dark:border-slate-800 dark:text-slate-400 hover:border-slate-300 dark:hover:border-slate-700' ?>">
|
||||
<input type="checkbox" name="user_filters[<?= (int)$usr['id'] ?>][]" value="<?= htmlspecialchars($code) ?>" <?= $isChecked ? 'checked' : '' ?> class="w-3.5 h-3.5 rounded text-indigo-600 border-slate-300 dark:border-slate-700 focus:ring-indigo-500 cursor-pointer">
|
||||
<span title="<?= htmlspecialchars($f['filter_name']) ?>"><?= htmlspecialchars($code) ?></span>
|
||||
</label>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
|
||||
Reference in New Issue
Block a user