query("SELECT id FROM mailbox_statuses WHERE is_default = 1 LIMIT 1")->fetchColumn() ?: 1; if ($recipient_id && $subject) { try { $stmt = db()->prepare("INSERT INTO mailbox (type, ref_no, date_registered, subject, description, status_id, assigned_to, created_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$type, $ref_no, $date_registered, $subject, $description, $default_status_id, $recipient_id, $user_id]); // Notify recipient $stmt_recp = db()->prepare("SELECT full_name, email FROM users WHERE id = ?"); $stmt_recp->execute([$recipient_id]); $recipient = $stmt_recp->fetch(); if ($recipient && !empty($recipient['email'])) { $email_subject = "رسالة داخلية جديدة من " . $_SESSION['username']; $htmlBody = "

لديك رسالة داخلية جديدة

الموضوع: " . htmlspecialchars($subject) . "

المرسل: " . htmlspecialchars($_SESSION['username']) . "


" . $description . "

يمكنك الرد من خلال النظام.

"; MailService::sendMail($recipient['email'], $email_subject, $htmlBody); } $_SESSION['success'] = 'تم إرسال الرسالة بنجاح'; redirect('internal_outbox.php'); } catch (PDOException $e) { $error = 'حدث خطأ: ' . $e->getMessage(); } } else { $error = 'يرجى اختيار المرسل إليه وكتابة الموضوع'; } } // Get session messages if (isset($_SESSION['success'])) { $success = $_SESSION['success']; unset($_SESSION['success']); } if (isset($_SESSION['error'])) { $error = $_SESSION['error']; unset($_SESSION['error']); } // Search and filtering $search = $_GET['search'] ?? ''; $page = isset($_GET['page']) && is_numeric($_GET['page']) ? (int)$_GET['page'] : 1; $limit = 10; $offset = ($page - 1) * $limit; $params = [$user_id]; $where = "m.type = 'internal' AND m.created_by = ?"; if ($search) { $where .= " AND (m.subject LIKE ? OR m.description LIKE ? OR u_recp.full_name LIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; $params[] = "%$search%"; } // Get total for pagination $count_stmt = db()->prepare("SELECT COUNT(*) FROM mailbox m LEFT JOIN users u_recp ON m.assigned_to = u_recp.id WHERE $where"); $count_stmt->execute($params); $total_records = $count_stmt->fetchColumn(); $total_pages = ceil($total_records / $limit); // Fetch messages $query = "SELECT m.*, u_recp.full_name as recipient_name, u_recp.profile_image as recipient_image, s.name as status_name, s.color as status_color FROM mailbox m LEFT JOIN users u_recp ON m.assigned_to = u_recp.id LEFT JOIN mailbox_statuses s ON m.status_id = s.id WHERE $where ORDER BY m.created_at DESC LIMIT $limit OFFSET $offset"; $stmt = db()->prepare($query); $stmt->execute($params); $messages = $stmt->fetchAll(); // Users for compose $users_list = db()->prepare("SELECT id, full_name, username FROM users WHERE id != ? ORDER BY full_name"); $users_list->execute([$user_id]); $users_list = $users_list->fetchAll(); function getStatusBadgeInternal($mail) { $status_name = $mail['status_name'] ?? 'received'; $status_color = $mail['status_color'] ?? '#6c757d'; $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) . ''; } ?>

بريد الموظفين - الصادر

المستلم الموضوع التاريخ الحالة الإجراء
عرض

لم يتم إرسال أي رسائل حالياً

1): ?>