query("SELECT COUNT(*) FROM mailbox WHERE type = 'inbound'")->fetchColumn() : 0; $total_outbound = canView('outbound') ? db()->query("SELECT COUNT(*) FROM mailbox WHERE type = 'outbound'")->fetchColumn() : 0; // Fetch statuses for badge and count $statuses_data = db()->query("SELECT * FROM mailbox_statuses")->fetchAll(PDO::FETCH_UNIQUE); // For the "In Progress" stat card, we might need a specific status or just a sum of non-closed statuses. $in_progress_id = null; foreach ($statuses_data as $id => $s) { if ($s['name'] == 'in_progress') { $in_progress_id = $id; break; } } $in_progress_count = 0; if ($in_progress_id) { $where_types = []; if (canView('inbound')) $where_types[] = "'inbound'"; if (canView('outbound')) $where_types[] = "'outbound'"; if (!empty($where_types)) { $types_sql = implode(',', $where_types); $stmt = db()->prepare("SELECT COUNT(*) FROM mailbox WHERE status_id = ? AND type IN ($types_sql)"); $stmt->execute([$in_progress_id]); $in_progress_count = $stmt->fetchColumn(); } } // My Assignments $my_assignments = []; $assignment_types = []; if (canView('inbound')) $assignment_types[] = "'inbound'"; if (canView('outbound')) $assignment_types[] = "'outbound'"; if (canView('internal')) $assignment_types[] = "'internal'"; if (!empty($assignment_types)) { $types_sql = implode(',', $assignment_types); $my_assignments = db()->prepare("SELECT m.*, s.name as status_name, s.color as status_color FROM mailbox m LEFT JOIN mailbox_statuses s ON m.status_id = s.id WHERE m.assigned_to = ? AND m.type IN ($types_sql) ORDER BY m.created_at DESC LIMIT 5"); $my_assignments->execute([$user_id]); $my_assignments = $my_assignments->fetchAll(); } // Recent Mail (Global for Admin/Clerk, otherwise limited) $recent_mail = []; $recent_types = []; if (canView('inbound')) $recent_types[] = "'inbound'"; if (canView('outbound')) $recent_types[] = "'outbound'"; if (!empty($recent_types)) { $types_sql = implode(',', $recent_types); $recent_mail_query = "SELECT m.*, s.name as status_name, s.color as status_color, u.full_name as assigned_to_name FROM mailbox m LEFT JOIN mailbox_statuses s ON m.status_id = s.id LEFT JOIN users u ON m.assigned_to = u.id WHERE m.type IN ($types_sql)"; if (!$is_admin && ($_SESSION['user_role'] ?? '') !== 'clerk') { $recent_mail_query .= " AND (m.assigned_to = ? OR m.created_by = ?)"; $recent_stmt = db()->prepare($recent_mail_query . " ORDER BY m.created_at DESC LIMIT 10"); $recent_stmt->execute([$user_id, $user_id]); } else { $recent_stmt = db()->prepare($recent_mail_query . " ORDER BY m.created_at DESC LIMIT 10"); $recent_stmt->execute(); } $recent_mail = $recent_stmt->fetchAll(); } function getStatusBadge($mail) { $status_name = $mail['status_name'] ?? 'غير معروف'; $status_color = $mail['status_color'] ?? '#6c757d'; // Translation for default statuses $display_name = $status_name; if ($status_name == 'received') $display_name = 'تم الاستلام'; if ($status_name == 'in_progress') $display_name = 'قيد المعالجة'; if ($status_name == 'closed') $display_name = 'مكتمل'; return '' . htmlspecialchars($display_name) . ''; } ?>

لوحة التحكم الإدارية

query("SELECT COUNT(*) FROM mailbox WHERE due_date < CURDATE() AND status_id IN (SELECT id FROM mailbox_statuses WHERE name != 'closed') AND type != 'internal'")->fetchColumn(); if ($overdue_count > 0): ?>
هناك مهام متأخرة تتطلب انتباهك!
عرض التقرير
البريد الوارد

البريد الصادر

قيد المعالجة

المستخدمين

query("SELECT COUNT(*) FROM users")->fetchColumn() ?>

مهامي الحالية
رقم القيد الموضوع الموعد النهائي - الحالة
رقم القيد النوع الموضوع الموعد النهائي المرسل/المستلم المسؤول الحالة التاريخ
وارد صادر - غير معين