prepare("SELECT * FROM integrations WHERE user_id = ? AND provider = 'JIRA'"); $stmtExisting->execute([$userId]); $existing = $stmtExisting->fetch(); $existingSettings = json_decode($existing['settings'] ?? '{}', true) ?: []; if (($jiraToken === '' || $jiraToken === '••••••••••••••••') && !empty($existingSettings['jira_api_token']) && $existingSettings['jira_api_token'] !== '••••••••••••••••') { $jiraToken = $existingSettings['jira_api_token']; } $accountName = $existingSettings['account_name'] ?? ''; $accountId = $existingSettings['account_id'] ?? ''; if (!empty($jiraDomain) && !empty($jiraEmail) && !empty($jiraToken)) { $testRes = jira_test_connection($jiraDomain, $jiraEmail, $jiraToken); if (!$testRes['success']) { $message = "Jira Verbindingsfout: " . $testRes['error']; $messageType = 'error'; } else { $accountName = $testRes['user']['displayName'] ?? 'Jira Gebruiker'; $accountId = $testRes['user']['accountId'] ?? ''; $message = "Verbinding met Jira geslaagd! Ingelogd als: {$accountName}"; $messageType = 'success'; } } else { $message = "Jira instellingen opgeslagen."; $messageType = 'success'; } $newSettings = [ 'jira_domain' => $jiraDomain, 'jira_email' => $jiraEmail, 'jira_api_token' => $jiraToken, 'account_name' => $accountName, 'account_id' => $accountId, ]; $stmt = $db->prepare(" INSERT INTO integrations (user_id, provider, is_enabled, is_demo_mode, settings, last_sync_at) VALUES (?, 'JIRA', 1, 0, ?, NOW()) ON DUPLICATE KEY UPDATE is_demo_mode = 0, settings = VALUES(settings), last_sync_at = NOW() "); $stmt->execute([$userId, json_encode($newSettings)]); unset($_SESSION["jira_issues_user_{$userId}"]); } // 4. Jira ontkoppelen elseif ($action === 'disconnect_jira') { jira_disconnect($userId); header('Location: /profile.php?success=' . urlencode('Atlassian Jira is succesvol ontkoppeld.')); exit; } // 5. Notificatievoorkeuren opslaan elseif ($action === 'save_notifications') { $settings = [ 'enabled' => isset($_POST['notif_enabled']) ? 1 : 0, 'lead_time_minutes' => (int)($_POST['lead_time_minutes'] ?? 5), 'repeat_count' => (int)($_POST['repeat_count'] ?? 2), 'repeat_interval_minutes' => (int)($_POST['repeat_interval_minutes'] ?? 2), 'sound_enabled' => isset($_POST['sound_enabled']) ? 1 : 0, ]; update_user_notification_settings($userId, $settings); $message = "Uw persoonlijke notificatievoorkeuren zijn succesvol opgeslagen."; $messageType = 'success'; } // 6. Profielnaam bijwerken elseif ($action === 'update_profile') { $name = trim($_POST['name'] ?? ''); if (strlen($name) < 2) { $message = "Voer een geldige naam in van minimaal 2 tekens."; $messageType = 'error'; } else { $stmt = $db->prepare("UPDATE users SET name = ? WHERE id = ?"); $stmt->execute([$name, $userId]); $_SESSION['user_name'] = $name; $user['name'] = $name; $message = "Uw profielnaam is succesvol bijgewerkt."; $messageType = 'success'; } } // 7. Wachtwoord wijzigen elseif ($action === 'change_password') { $currentPassword = $_POST['current_password'] ?? ''; $newPassword = $_POST['new_password'] ?? ''; $confirmPassword = $_POST['confirm_password'] ?? ''; $stmtU = $db->prepare("SELECT password_hash FROM users WHERE id = ?"); $stmtU->execute([$userId]); $storedHash = $stmtU->fetchColumn(); if (!password_verify($currentPassword, $storedHash)) { $message = "Uw huidige wachtwoord is niet correct ingevoerd."; $messageType = 'error'; } elseif (strlen($newPassword) < 8) { $message = "Het nieuwe wachtwoord moet minimaal 8 tekens lang zijn."; $messageType = 'error'; } elseif ($newPassword !== $confirmPassword) { $message = "Het nieuwe wachtwoord en de bevestiging komen niet overeen."; $messageType = 'error'; } else { $newHash = password_hash($newPassword, PASSWORD_DEFAULT); $stmtUp = $db->prepare("UPDATE users SET password_hash = ? WHERE id = ?"); $stmtUp->execute([$newHash, $userId]); $message = "Uw wachtwoord is succesvol gewijzigd."; $messageType = 'success'; } } } // Actuele gegevens ophalen $stmtUser = $db->prepare("SELECT * FROM users WHERE id = ?"); $stmtUser->execute([$userId]); $userProfile = $stmtUser->fetch(); // Outlook status ophalen $stmtOutlook = $db->prepare("SELECT * FROM integrations WHERE user_id = ? AND provider = 'OUTLOOK'"); $stmtOutlook->execute([$userId]); $outlookRow = $stmtOutlook->fetch(); $isOutlookConnected = !empty($outlookRow['access_token']) && empty($outlookRow['is_demo_mode']); $outlookSettings = json_decode($outlookRow['settings'] ?? '{}', true) ?: []; // Jira status ophalen $stmtJira = $db->prepare("SELECT * FROM integrations WHERE user_id = ? AND provider = 'JIRA'"); $stmtJira->execute([$userId]); $jiraRow = $stmtJira->fetch(); $jiraSettings = json_decode($jiraRow['settings'] ?? '{}', true) ?: []; $isJiraConnected = !empty($jiraSettings['jira_api_token']); $companyJiraDomain = jira_get_company_domain(); $activeJiraDomain = !empty($jiraSettings['jira_domain']) ? $jiraSettings['jira_domain'] : $companyJiraDomain; // Centrale Azure App configuratie status $appConfig = microsoft_get_app_config(); // Notificatie-instellingen $notifSettings = get_user_notification_settings($userId); // Thema ophalen $userTheme = get_user_theme($userId); $pageTitle = 'Mijn Profiel & Koppelingen — Fociz'; require_once __DIR__ . '/includes/header.php'; ?>
= htmlspecialchars($userProfile['email']) ?> • Lid sinds = date('d-m-Y', strtotime($userProfile['created_at'])) ?>
Kies uw gewenste uiterlijk: rustig donker grafiet, kraakhelder licht of synchroniseer met uw apparaat.
Synchroniseer uw agenda-afspraken automatisch met uw dagplanning
Krijg uw dagelijkse afspraken automatisch te zien in Fociz en ontvang herinneringen vóórdat uw vergaderingen beginnen.
Importeer uw toegewezen Jira issues direct naar uw dagelijkse takenlijst
Krijg realtime meldingen vanuit uw browser zodra een afspraak nadert
Uw Fociz account is optimaal beveiligd met een Authenticator app (TOTP) voor maximale privacy- en dataveiligheid.