recreate project

This commit is contained in:
root
2026-02-10 22:11:06 -05:00
commit 663c0cdbda
10149 changed files with 1379710 additions and 0 deletions
+249
View File
@@ -0,0 +1,249 @@
<?php
namespace App\Controllers\View;
use App\Models\UserModel;
use App\Models\StudentModel;
use App\Models\TeacherClassModel;
use App\Models\StudentClassModel;
use App\Models\UserRoleModel;
use App\Models\MessageModel;
use App\Controllers\BaseController;
class MessagesController extends BaseController
{
protected $messageModel;
public function __construct()
{
//$this->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);
}
}