feat(admin-profile): separate central system administration into admin.php and personal settings into profile.php
This commit is contained in:
+20
-13
@@ -82,14 +82,18 @@ require_once __DIR__ . '/env_badge.php';
|
||||
<i data-lucide="map" class="w-4 h-4"></i>
|
||||
<span>Roadmap</span>
|
||||
</a>
|
||||
<a href="/integrations.php" class="flex items-center space-x-2 px-3.5 py-2 rounded-lg text-sm font-medium transition <?= $currentPage === 'integrations.php' ? 'bg-emerald-500/10 text-emerald-400 border border-emerald-500/20' : 'text-slate-400 hover:text-slate-200 hover:bg-slate-800/60' ?>">
|
||||
<i data-lucide="layers" class="w-4 h-4"></i>
|
||||
<span>Integraties</span>
|
||||
<a href="/profile.php" class="flex items-center space-x-2 px-3.5 py-2 rounded-lg text-sm font-medium transition <?= $currentPage === 'profile.php' ? 'bg-emerald-500/10 text-emerald-400 border border-emerald-500/20' : 'text-slate-400 hover:text-slate-200 hover:bg-slate-800/60' ?>">
|
||||
<i data-lucide="user" class="w-4 h-4"></i>
|
||||
<span>Mijn Profiel</span>
|
||||
</a>
|
||||
<?php if ($currentUser['role'] === 'ADMIN'): ?>
|
||||
<a href="/users.php" class="flex items-center space-x-2 px-3.5 py-2 rounded-lg text-sm font-medium transition <?= $currentPage === 'users.php' ? 'bg-emerald-500/10 text-emerald-400 border border-emerald-500/20' : 'text-slate-400 hover:text-slate-200 hover:bg-slate-800/60' ?>">
|
||||
<i data-lucide="users" class="w-4 h-4"></i>
|
||||
<span>Team & Invites</span>
|
||||
<span>Team</span>
|
||||
</a>
|
||||
<a href="/admin.php" class="flex items-center space-x-2 px-3.5 py-2 rounded-lg text-sm font-medium transition <?= $currentPage === 'admin.php' ? 'bg-emerald-500/10 text-emerald-400 border border-emerald-500/20' : 'text-slate-400 hover:text-slate-200 hover:bg-slate-800/60' ?>">
|
||||
<i data-lucide="shield-check" class="w-4 h-4 text-emerald-400"></i>
|
||||
<span>Beheer</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</nav>
|
||||
@@ -107,12 +111,15 @@ require_once __DIR__ . '/env_badge.php';
|
||||
<span>2FA Actief</span>
|
||||
</div>
|
||||
|
||||
<div class="text-right hidden sm:block">
|
||||
<div class="text-xs font-semibold text-slate-200"><?= htmlspecialchars($currentUser['name']) ?></div>
|
||||
<a href="/profile.php" class="text-right hidden sm:block group hover:opacity-90 transition" title="Mijn Profiel & Instellingen">
|
||||
<div class="text-xs font-semibold text-slate-200 group-hover:text-emerald-400 transition flex items-center justify-end space-x-1">
|
||||
<span><?= htmlspecialchars($currentUser['name']) ?></span>
|
||||
<i data-lucide="chevron-right" class="w-3 h-3 text-slate-500 group-hover:text-emerald-400 transition"></i>
|
||||
</div>
|
||||
<div class="text-[10px] text-slate-500">
|
||||
<?= $currentUser['role'] === 'ADMIN' ? 'Beheerder' : 'Collega' ?> • <?= htmlspecialchars($currentUser['email']) ?>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/auth/logout.php" title="Veilig uitloggen" class="p-2 rounded-lg text-slate-400 hover:text-red-400 hover:bg-red-500/10 border border-transparent hover:border-red-500/20 transition">
|
||||
<i data-lucide="log-out" class="w-4 h-4"></i>
|
||||
@@ -134,18 +141,18 @@ require_once __DIR__ . '/env_badge.php';
|
||||
<i data-lucide="map" class="w-4 h-4 mb-0.5"></i>
|
||||
<span>Roadmap</span>
|
||||
</a>
|
||||
<a href="/integrations.php" class="flex flex-col items-center py-1 <?= $currentPage === 'integrations.php' ? 'text-emerald-400 font-bold' : 'text-slate-400' ?>">
|
||||
<i data-lucide="layers" class="w-4 h-4 mb-0.5"></i>
|
||||
<span>Koppelingen</span>
|
||||
<a href="/profile.php" class="flex flex-col items-center py-1 <?= $currentPage === 'profile.php' ? 'text-emerald-400 font-bold' : 'text-slate-400' ?>">
|
||||
<i data-lucide="user" class="w-4 h-4 mb-0.5"></i>
|
||||
<span>Profiel</span>
|
||||
</a>
|
||||
<button type="button" onclick="openNotificationModal()" class="flex flex-col items-center py-1 text-slate-400 hover:text-white">
|
||||
<i data-lucide="bell" class="w-4 h-4 mb-0.5"></i>
|
||||
<span>Meldingen</span>
|
||||
</button>
|
||||
<?php if ($currentUser['role'] === 'ADMIN'): ?>
|
||||
<a href="/users.php" class="flex flex-col items-center py-1 <?= $currentPage === 'users.php' ? 'text-emerald-400 font-bold' : 'text-slate-400' ?>">
|
||||
<i data-lucide="users" class="w-4 h-4 mb-0.5"></i>
|
||||
<span>Team</span>
|
||||
<a href="/admin.php" class="flex flex-col items-center py-1 <?= $currentPage === 'admin.php' ? 'text-emerald-400 font-bold' : 'text-slate-400' ?>">
|
||||
<i data-lucide="shield" class="w-4 h-4 mb-0.5"></i>
|
||||
<span>Beheer</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
@@ -18,6 +18,51 @@ function jira_normalize_domain(string $domain): string {
|
||||
return rtrim($domain, '/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Haalt het centrale bedrijfsdomein voor Atlassian Jira op
|
||||
*/
|
||||
function jira_get_company_domain(): string {
|
||||
$domain = fociz_env('JIRA_DOMAIN', '');
|
||||
if (!empty($domain)) {
|
||||
return jira_normalize_domain($domain);
|
||||
}
|
||||
|
||||
try {
|
||||
$db = get_db_connection();
|
||||
// Zoek bij beheerder(s) in de integrations tabel
|
||||
$stmt = $db->query("
|
||||
SELECT i.settings
|
||||
FROM integrations i
|
||||
JOIN users u ON i.user_id = u.id
|
||||
WHERE u.role = 'ADMIN' AND i.provider = 'JIRA' AND i.settings IS NOT NULL
|
||||
ORDER BY i.updated_at DESC
|
||||
LIMIT 1
|
||||
");
|
||||
$row = $stmt->fetch();
|
||||
if (!empty($row['settings'])) {
|
||||
$settings = json_decode($row['settings'], true) ?: [];
|
||||
if (!empty($settings['jira_domain'])) {
|
||||
return jira_normalize_domain($settings['jira_domain']);
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback naar een willekeurige JIRA rij
|
||||
$fallback = $db->query("
|
||||
SELECT settings FROM integrations WHERE provider = 'JIRA' AND settings LIKE '%jira_domain%' LIMIT 1
|
||||
")->fetch();
|
||||
if (!empty($fallback['settings'])) {
|
||||
$settings = json_decode($fallback['settings'], true) ?: [];
|
||||
if (!empty($settings['jira_domain'])) {
|
||||
return jira_normalize_domain($settings['jira_domain']);
|
||||
}
|
||||
}
|
||||
} catch (Throwable $e) {
|
||||
error_log("jira_get_company_domain error: " . $e->getMessage());
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Genereert de Basic Authentication header voor Atlassian REST API
|
||||
*/
|
||||
@@ -240,7 +285,7 @@ function jira_get_user_issues(int $userId, bool $forceRefresh = false): array {
|
||||
}
|
||||
|
||||
$settings = json_decode($integration['settings'] ?? '{}', true) ?: [];
|
||||
$domain = $settings['jira_domain'] ?? fociz_env('JIRA_DOMAIN', '');
|
||||
$domain = !empty($settings['jira_domain']) ? $settings['jira_domain'] : jira_get_company_domain();
|
||||
$email = $settings['jira_email'] ?? fociz_env('JIRA_EMAIL', '');
|
||||
$apiToken = $settings['jira_api_token'] ?? fociz_env('JIRA_API_TOKEN', '');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user