messageModel = new MessageModel(); } public function inbox() { $userId = session()->get('user_id'); $receivedMessages = $this->messageModel->getInboxMessages($userId); return view('messages/inbox', [ 'receivedMessages' => $receivedMessages ]); } public function sent() { $userId = session()->get('user_id'); $sentMessages = $this->messageModel->getSentMessages($userId); return view('messages/sent', [ 'sentMessages' => $sentMessages ]); } public function drafts() { $userId = session()->get('user_id'); $draftMessages = $this->messageModel->getDraftMessages($userId); return view('messages/drafts', [ 'draftMessages' => $draftMessages ]); } public function trash() { $userId = session()->get('user_id'); $trashedMessages = $this->messageModel->getTrashedMessages($userId); return view('messages/trash', [ 'trashedMessages' => $trashedMessages ]); } public function index() { $userRoleModel = new UserRoleModel(); //$role = session()->get('role'); $userId = session()->get('user_id'); // Fetch the user role from the user_roles and roles tables $role = $userRoleModel->select('roles.name') ->join('roles', 'roles.id = user_roles.role_id') ->where('user_roles.user_id', $userId) ->get() ->getRowArray(); // Fetch received messages based on role $db = \Config\Database::connect(); $builder = $db->table('messages'); $builder->select('messages.*, users.firstname AS sender_name'); $builder->join('users', 'messages.sender_id = users.id'); $builder->where('messages.recipient_id', $userId); $query = $builder->get(); $receivedMessages = $query->getResultArray(); return view('/messages', [ 'receivedMessages' => $receivedMessages, 'role' => $role['name'] ]); } public function send() { $db = \Config\Database::connect(); $userRoleModel = new UserRoleModel(); //$role = session()->get('role'); $userId = session()->get('user_id'); // Fetch the user role from the user_roles and roles tables $role = $userRoleModel->select('roles.name') ->join('roles', 'roles.id = user_roles.role_id') ->where('user_roles.user_id', $userId) ->get() ->getRowArray(); // Handle file upload (if any) $attachmentPath = null; $file = $this->request->getFile('attachment'); if ($file && $file->isValid() && !$file->hasMoved()) { $attachmentPath = $file->store(); } // Determine recipient based on role or input $recipientId = $this->getRecipientId($role); // Prepare data for insertion $data = [ 'sender_id' => $userId, 'recipient_id' => $recipientId, 'subject' => $this->request->getPost('subject'), 'message' => $this->request->getPost('message'), 'sent_datetime' => utc_now(), 'message_number' => $this->generateMessageNumber(), 'priority' => $this->request->getPost('priority') ?: 'normal', 'attachment' => $attachmentPath, 'status' => 'sent' ]; $builder = $db->table('messages'); $builder->insert($data); return redirect()->to(base_url('messages'))->with('status', 'Message sent successfully'); } public function receive() { $userId = session()->get('user_id'); $db = \Config\Database::connect(); $builder = $db->table('messages'); $builder->select('messages.*, users.firstname AS sender_name'); $builder->join('users', 'messages.sender_id = users.id'); $builder->where('messages.recipient_id', $userId); $builder->orderBy('sent_datetime', 'DESC'); $query = $builder->get(); $receivedMessages = $query->getResultArray(); // Mark messages as read foreach ($receivedMessages as $message) { if ($message['read_status'] == 0) { $this->markAsRead($message['id']); } } // Assuming $role['name'] contains the role name //$roleName = strtolower($role['name']); // Convert role name to lowercase if needed // Construct the view path dynamically // $viewPath = '/' . $roleName . '/' . $roleName . '_messages'; // Return the view //return view($viewPath, ['receivedMessages' => $receivedMessages]); } private function generateMessageNumber() { return 'MSG-' . date('YmdHis'); } private function markAsRead($messageId) { $db = \Config\Database::connect(); $builder = $db->table('messages'); $builder->where('id', $messageId); $builder->update([ 'read_status' => 1, 'read_datetime' => utc_now() ]); } private function getRecipientId($role) { // You can customize this logic to retrieve recipient_id based on the role or input switch (strtolower($role['name'])) { case 'teacher': return 1; // Example: return teacher's ID case 'parent': return 2; // Example: return parent's ID case 'admin': return 3; // Example: return admin's ID case 'student': return 4; // Example: return student's ID case 'guest': return 5; // Example: return guest's ID case 'administrator': return 6; // Example: return administrator's ID default: throw new \Exception('Invalid role: ' . $role['name']); } } public function getRecipients($type) { $recipients = []; $teacherClassModel = new TeacherClassModel(); $studentClassModel = new StudentClassModel(); $studentsModel = new StudentModel(); $teacherClasses = $teacherClassModel->findAll(); if ($type === 'teacher') { $userModel = new UserModel(); // Assuming the UserModel is in the App\Models namespace foreach ($teacherClasses as $teacher) { $user = $userModel->find($teacher['teacher_id']); if ($user) { $recipients[] = [ 'id' => $teacher['teacher_id'], 'name' => $user['firstname'] . ' ' . $user['lastname'] ]; } } } elseif ($type === 'parent') { foreach ($teacherClasses as $class) { $students = $studentClassModel ->active() ->where('student_class.class_section_id', $class['class_section_id']) ->findAll(); foreach ($students as $student) { $studentData = $studentsModel ->where('id', $student['student_id']) ->where('is_active', 1) ->first(); if ($studentData) { if ($studentData['firstparent']) { $recipients[] = [ 'id' => $studentData['parent_id'], 'name' => $studentData['firstparent'] ]; } if ($studentData['secondparent']) { $recipients[] = [ 'id' => $studentData['secondparent_user_id'], 'name' => $studentData['secondparent'] ]; } } } } } return $this->response->setJSON($recipients); } }