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) . '';
}
?>
بريد الموظفين - الصادر
= htmlspecialchars($success) ?>
= htmlspecialchars($error) ?>
| المستلم |
الموضوع |
التاريخ |
الحالة |
الإجراء |
= htmlspecialchars($msg['recipient_name'] ?: 'مستخدم غير معروف') ?>
|
= htmlspecialchars($msg['subject']) ?>
= strip_tags($msg['description']) ?>
|
= date('Y-m-d H:i', strtotime($msg['created_at'])) ?>
|
= getStatusBadgeInternal($msg) ?> |
عرض
|
|
لم يتم إرسال أي رسائل حالياً
|
1): ?>