false, 'message' => 'Missing parameters. Use: message/send/{receiver_id}/{subject}/{message}']); return; } // Verify receiver exists $receiver = UserModel::getPublicProfileOfUser($receiver_id); if (!$receiver) { header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => 'Receiver not found']); return; } // Send the message $sender_id = Session::get('user_id'); $success = MessageModel::sendToUser($sender_id, $receiver_id, $subject, $message); header('Content-Type: application/json'); if ($success) { echo json_encode(['success' => true, 'message' => 'Message sent successfully']); } else { echo json_encode(['success' => false, 'message' => 'Failed to send message']); } } /** * Send a message to a group via URL parameters * URL format: message/sendgroup/{group_type}/{subject}/{message} * group_type can be: admins, moderators, all_users */ public function sendgroup() { // Handle POST request if ($_SERVER['REQUEST_METHOD'] === 'POST') { $group_type = isset($_POST['group_type']) ? $_POST['group_type'] : null; $subject = isset($_POST['subject']) ? $_POST['subject'] : 'No Subject'; $message = isset($_POST['message']) ? $_POST['message'] : null; if (!$group_type || !$message) { Session::add('feedback_negative', 'Group type and message are required'); Redirect::to('message'); return; } // Validate group type if (!in_array($group_type, ['admins', 'moderators', 'all_users'])) { Session::add('feedback_negative', 'Invalid group type'); Redirect::to('message'); return; } // Send the message $sender_id = Session::get('user_id'); $success = MessageModel::sendToGroup($sender_id, $group_type, $subject, $message); if ($success) { Session::add('feedback_positive', 'Message sent to group successfully'); } else { Session::add('feedback_negative', 'Failed to send message to group'); } Redirect::to('message'); return; } // Handle GET request $url_parts = explode('/', trim($_SERVER['REQUEST_URI'], '/')); $group_type = isset($url_parts[2]) ? $url_parts[2] : null; $subject = isset($url_parts[3]) ? urldecode($url_parts[3]) : null; $message = isset($url_parts[4]) ? urldecode($url_parts[4]) : null; if (!$group_type || !$subject || !$message) { header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => 'Missing parameters. Use: message/sendgroup/{group_type}/{subject}/{message}']); return; } // Validate group type if (!in_array($group_type, ['admins', 'moderators', 'all_users'])) { header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => 'Invalid group type. Must be: admins, moderators, or all_users']); return; } // Send the message $sender_id = Session::get('user_id'); $success = MessageModel::sendToGroup($sender_id, $group_type, $subject, $message); header('Content-Type: application/json'); if ($success) { echo json_encode(['success' => true, 'message' => 'Message sent to group successfully']); } else { echo json_encode(['success' => false, 'message' => 'Failed to send message to group']); } } /** * Show the messenger interface */ public function index() { $user_id = Session::get('user_id'); // Get conversations and unread count $conversations = MessageModel::getConversations($user_id); $unread_count = MessageModel::getUnreadCount($user_id); $this->View->render('message/index', array( 'conversations' => $conversations, 'unread_count' => $unread_count, 'all_users' => MessageModel::getAllUsers($user_id) )); } /** * Show conversation with a specific user */ public function conversation() { $user_id = Session::get('user_id'); $url_parts = explode('/', trim($_SERVER['REQUEST_URI'], '/')); $other_user_id = isset($url_parts[2]) ? $url_parts[2] : null; if (!$other_user_id) { Redirect::to('message'); return; } // Get user info for the other person $other_user = UserModel::getPublicProfileOfUser($other_user_id); if (!$other_user) { Redirect::to('message'); return; } // Get messages $messages = MessageModel::getMessagesWithUser($user_id, $other_user_id); $this->View->render('message/conversation', array( 'messages' => $messages, 'other_user' => $other_user )); } /** * Get unread count as JSON */ public function unreadcount() { $user_id = Session::get('user_id'); $unread_count = MessageModel::getUnreadCount($user_id); header('Content-Type: application/json'); echo json_encode(['unread_count' => $unread_count]); } }