diff --git a/api/mail.php b/api/mail.php index 0b7e526..b910b71 100644 --- a/api/mail.php +++ b/api/mail.php @@ -30,6 +30,22 @@ try { exit; } + // 0b. Uitgeschakelde mappen opslaan + if ($action === 'save_disabled_folders') { + $input = file_get_contents('php://input'); + $data = json_decode($input, true); + $folders = $data['disabled_folders'] ?? ($_POST['disabled_folders'] ?? []); + if (is_string($folders)) { + $folders = json_decode($folders, true) ?: []; + } + if (!is_array($folders)) { + $folders = []; + } + $ok = microsoft_save_disabled_folders($userId, $folders); + echo json_encode(['success' => $ok, 'disabled_folders' => $folders]); + exit; + } + // 1. Inbox of specifieke map berichten ophalen if ($action === 'get_folder_messages' || $action === 'get_inbox') { $folderId = trim($_GET['folder_id'] ?? ($_POST['folder_id'] ?? 'inbox')); diff --git a/includes/integrations/microsoft.php b/includes/integrations/microsoft.php index 4b9df3b..12a9ca0 100644 --- a/includes/integrations/microsoft.php +++ b/includes/integrations/microsoft.php @@ -1180,6 +1180,51 @@ function microsoft_get_mail_demo_data(?string $folderId = 'inbox'): array { ]; } +/** + * Haalt de door de gebruiker uitgeschakelde mailmappen op + */ +function microsoft_get_disabled_folders(int $userId): array { + try { + $db = get_db_connection(); + $stmt = $db->prepare("SELECT settings FROM integrations WHERE user_id = ? AND provider = 'OUTLOOK'"); + $stmt->execute([$userId]); + $row = $stmt->fetch(); + if (!$row || empty($row['settings'])) return []; + $settings = json_decode($row['settings'], true); + if (is_array($settings) && !empty($settings['disabled_mail_folders']) && is_array($settings['disabled_mail_folders'])) { + return array_values(array_unique(array_filter(array_map('strval', $settings['disabled_mail_folders'])))); + } + return []; + } catch (Throwable $e) { + return []; + } +} + +/** + * Slaat de uitgeschakelde mailmappen op voor een gebruiker + */ +function microsoft_save_disabled_folders(int $userId, array $disabledFolders): bool { + try { + $db = get_db_connection(); + $stmt = $db->prepare("SELECT settings FROM integrations WHERE user_id = ? AND provider = 'OUTLOOK'"); + $stmt->execute([$userId]); + $row = $stmt->fetch(); + $settings = ($row && !empty($row['settings'])) ? (json_decode($row['settings'], true) ?: []) : []; + + $clean = array_values(array_unique(array_filter(array_map('strval', $disabledFolders)))); + $settings['disabled_mail_folders'] = $clean; + + $update = $db->prepare("UPDATE integrations SET settings = ?, updated_at = NOW() WHERE user_id = ? AND provider = 'OUTLOOK'"); + $ok = $update->execute([json_encode($settings, JSON_UNESCAPED_UNICODE), $userId]); + + fociz_cache_delete("ms_folders_{$userId}"); + return $ok; + } catch (Throwable $e) { + error_log("microsoft_save_disabled_folders error: " . $e->getMessage()); + return false; + } +} + /** * Haalt alle beschikbare mailmappen op van Microsoft Graph API (exclusief SPAM/Junk, Prullenbak/Deleted, Outbox en Concepten) */ @@ -1237,12 +1282,20 @@ function microsoft_fetch_mail_folders(int $userId, bool $forceRefresh = false): 'is_child' => false, ], ]; - $totalUnread = array_sum(array_column($demoFolders, 'unread_count')); + $disabledFolders = microsoft_get_disabled_folders($userId); + $disabledSet = array_flip($disabledFolders); + $totalUnread = 0; + foreach ($demoFolders as $df) { + if (!isset($disabledSet[$df['id']])) { + $totalUnread += (int)($df['unread_count'] ?? 0); + } + } return [ - 'success' => true, - 'is_demo' => true, - 'folders' => $demoFolders, - 'total_unread' => $totalUnread, + 'success' => true, + 'is_demo' => true, + 'folders' => $demoFolders, + 'total_unread' => $totalUnread, + 'disabled_folders' => $disabledFolders, ]; } @@ -1427,13 +1480,22 @@ function microsoft_fetch_mail_folders(int $userId, bool $forceRefresh = false): return strcasecmp($a['name'], $b['name']); }); - $totalUnread = array_sum(array_column($folders, 'unread_count')); + $disabledFolders = microsoft_get_disabled_folders($userId); + $disabledSet = array_flip($disabledFolders); + + $totalUnread = 0; + foreach ($folders as $f) { + if (!isset($disabledSet[$f['id']])) { + $totalUnread += (int)($f['unread_count'] ?? 0); + } + } $result = [ - 'success' => true, - 'is_demo' => false, - 'folders' => $folders, - 'total_unread' => $totalUnread, + 'success' => true, + 'is_demo' => false, + 'folders' => $folders, + 'total_unread' => $totalUnread, + 'disabled_folders' => $disabledFolders, ]; fociz_cache_set($cacheKey, $result, 300); // 5 minuten cache diff --git a/mail.php b/mail.php index 4cbda85..8b9641b 100644 --- a/mail.php +++ b/mail.php @@ -42,6 +42,9 @@ $outlookInt = $stmtInt->fetch(); $isOutlookConfigured = !empty($outlookInt['access_token']) && empty($outlookInt['is_demo_mode']); $isLiveMail = $isOutlookConfigured && !$isDemo; +$disabledFolderIds = $foldersData['disabled_folders'] ?? microsoft_get_disabled_folders($userId); +$jsonDisabledFolders = json_encode(array_values($disabledFolderIds), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); + $jsonMessages = json_encode($messages, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); $jsonFolders = json_encode($mailFolders, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); ?> @@ -170,9 +173,17 @@ $jsonFolders = json_encode($mailFolders, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX
-
- Inbox & Mappen () - Sorteer: Nieuwste eerst +
+
+ Inbox & Mappen () + +
+
+ +
@@ -551,8 +562,43 @@ $jsonFolders = json_encode($mailFolders, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX
+ + +