query("SELECT id FROM mailbox_statuses WHERE is_default = 1 LIMIT 1")->fetchColumn() ?: 1; if ($recipient_id && $subject) { $should_notify = false; $recipient_email = ''; try { db()->beginTransaction(); $stmt = db()->prepare("INSERT INTO internal_mail (ref_no, date_registered, subject, description, status_id, assigned_to, created_by) VALUES (?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$ref_no, $date_registered, $subject, $description, $default_status_id, $recipient_id, $user_id]); $mail_id = db()->lastInsertId(); // Handle Attachments if (!empty($_FILES['attachments']['name'][0])) { $upload_dir = 'uploads/attachments/'; if (!is_dir($upload_dir)) mkdir($upload_dir, 0777, true); foreach ($_FILES['attachments']['name'] as $key => $name) { if ($_FILES['attachments']['error'][$key] === 0) { $file_name = time() . '_' . basename($name); $target_path = $upload_dir . $file_name; if (move_uploaded_file($_FILES['attachments']['tmp_name'][$key], $target_path)) { $stmt = db()->prepare("INSERT INTO internal_attachments (mail_id, display_name, file_path, file_name, file_size) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$mail_id, $name, $target_path, $name, $_FILES['attachments']['size'][$key]]); } } } } // Get recipient info for notification $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'])) { $should_notify = true; $recipient_email = $recipient['email']; } db()->commit(); // Notify after commit if ($should_notify) { $email_subject = "رسالة داخلية جديدة من " . $_SESSION['name']; $htmlBody = "

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

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

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


" . $description . "

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

"; MailService::sendMail($recipient_email, $email_subject, $htmlBody); } $_SESSION['success'] = 'تم إرسال الرسالة بنجاح'; redirect('internal_outbox.php'); } catch (PDOException $e) { if (db()->inTransaction()) db()->rollBack(); $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 = "1=1 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 internal_mail 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, (SELECT GROUP_CONCAT(display_name SEPARATOR ', ') FROM internal_attachments WHERE mail_id = m.id) as attachment_names FROM internal_mail 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): ?>