query("SELECT * FROM mailbox_statuses ORDER BY id ASC")->fetchAll(); $default_status_id = db()->query("SELECT id FROM mailbox_statuses WHERE is_default = 1 LIMIT 1")->fetchColumn() ?: 1; // Function to send assignment notification function sendAssignmentNotification($assigned_to_id, $ref_no, $subject) { if (!$assigned_to_id) return; $stmt = db()->prepare("SELECT full_name, email FROM users WHERE id = ?"); $stmt->execute([$assigned_to_id]); $user = $stmt->fetch(); if ($user && !empty($user['email'])) { $to = $user['email']; $email_subject = "تنبيه: تم تعيين بريد جديد لك (رقم القيد: $ref_no)"; $htmlBody = "

مرحباً " . htmlspecialchars($user['full_name']) . "

لقد تم تعيين مهمة بريد جديد لك في النظام.

رقم القيد " . htmlspecialchars($ref_no) . "
الموضوع " . htmlspecialchars($subject) . "

يرجى الدخول للنظام لمتابعة المهمة.


هذا تنبيه تلقائي، يرجى عدم الرد.

"; MailService::sendMail($to, $email_subject, $htmlBody); } } // Handle actions if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; // Permission checks for POST actions if (($action === 'add' && !canAdd()) || ($action === 'edit' && !canEdit())) { $error = 'عذراً، ليس لديك الصلاحية للقيام بهذا الإجراء'; } else { $type = 'inbound'; $ref_no = $_POST['ref_no'] ?? ''; $date_registered = $_POST['date_registered'] ?? date('Y-m-d'); $due_date = !empty($_POST['due_date']) ? $_POST['due_date'] : null; $sender = $_POST['sender'] ?? ''; $recipient = $_POST['recipient'] ?? ''; $subject = $_POST['subject'] ?? ''; $description = $_POST['description'] ?? ''; $status_id = $_POST['status_id'] ?? $default_status_id; $assigned_to = !empty($_POST['assigned_to']) ? $_POST['assigned_to'] : null; $id = $_POST['id'] ?? 0; if ($ref_no && $subject) { try { if ($action === 'add') { $stmt = db()->prepare("INSERT INTO mailbox (type, ref_no, date_registered, due_date, sender, recipient, subject, description, status_id, assigned_to, created_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$type, $ref_no, $date_registered, $due_date, $sender, $recipient, $subject, $description, $status_id, $assigned_to, $user_id]); if ($assigned_to) { sendAssignmentNotification($assigned_to, $ref_no, $subject); } $_SESSION['success'] = 'تمت إضافة البريد بنجاح'; redirect('inbound.php'); } elseif ($action === 'edit') { // Get previous assigned_to to check if it changed $stmt_old = db()->prepare("SELECT assigned_to FROM mailbox WHERE id = ?"); $stmt_old->execute([$id]); $old_assigned_to = $stmt_old->fetchColumn(); $stmt = db()->prepare("UPDATE mailbox SET ref_no = ?, date_registered = ?, due_date = ?, sender = ?, recipient = ?, subject = ?, description = ?, status_id = ?, assigned_to = ? WHERE id = ? AND type = 'inbound'"); $stmt->execute([$ref_no, $date_registered, $due_date, $sender, $recipient, $subject, $description, $status_id, $assigned_to, $id]); if ($assigned_to && $assigned_to != $old_assigned_to) { sendAssignmentNotification($assigned_to, $ref_no, $subject); } $_SESSION['success'] = 'تم تحديث البيانات بنجاح'; redirect('inbound.php'); } } catch (PDOException $e) { if ($e->getCode() == 23000) { $error = 'رقم القيد مستخدم مسبقاً'; } else { $error = 'حدث خطأ: ' . $e->getMessage(); } } } else { $error = 'يرجى ملء الحقول المطلوبة (رقم القيد، الموضوع)'; } } } // Delete action if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['id'])) { if (!canDelete()) { $error = 'عذراً، ليس لديك الصلاحية لحذف السجلات'; } else { $id = $_GET['id']; $stmt = db()->prepare("DELETE FROM mailbox WHERE id = ? AND type = 'inbound'"); $stmt->execute([$id]); $_SESSION['success'] = 'تم حذف البريد بنجاح'; redirect('inbound.php'); } } // Get session messages if (isset($_SESSION['success'])) { $success = $_SESSION['success']; unset($_SESSION['success']); } if (isset($_SESSION['error'])) { $error = $_SESSION['error']; unset($_SESSION['error']); } $search = $_GET['search'] ?? ''; $my_tasks = isset($_GET['my_tasks']) && $_GET['my_tasks'] == 1; // Pagination settings $limit = 10; // Items per page $page = isset($_GET['page']) && is_numeric($_GET['page']) ? (int)$_GET['page'] : 1; if ($page < 1) $page = 1; $offset = ($page - 1) * $limit; $where_clauses = ["m.type = 'inbound'"]; $params = []; if ($search) { $where_clauses[] = "(m.ref_no LIKE ? OR m.sender LIKE ? OR m.subject LIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; $params[] = "%$search%"; } if ($my_tasks) { $where_clauses[] = "m.assigned_to = ?"; $params[] = $user_id; } $where_sql = implode(" AND ", $where_clauses); // Get total records for pagination $count_query = "SELECT COUNT(*) FROM mailbox m WHERE $where_sql"; $stmt_count = db()->prepare($count_query); $stmt_count->execute($params); $total_records = $stmt_count->fetchColumn(); $total_pages = ceil($total_records / $limit); // Fetch paginated results $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 $where_sql ORDER BY m.created_at DESC LIMIT $limit OFFSET $offset"; $stmt = db()->prepare($query); $stmt->execute($params); $mails = $stmt->fetchAll(); $users_list = db()->query("SELECT id, full_name FROM users ORDER BY full_name")->fetchAll(); // Handle Deep Link for Edit $deepLinkData = null; if (isset($_GET['action']) && $_GET['action'] === 'edit' && isset($_GET['id'])) { if (canEdit()) { $stmt = db()->prepare("SELECT * FROM mailbox WHERE id = ? AND type = 'inbound'"); $stmt->execute([$_GET['id']]); $deepLinkData = $stmt->fetch(); } } function getStatusBadgeInList($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) . ''; } ?>

البريد الوارد

onchange="this.form.submit()">
رقم القيد التاريخ الموعد النهائي الموضوع المرسل المسؤول الحالة الإجراءات
- غير معين
لا يوجد بريد وارد مسجل حالياً
1): ?>