| Server IP : 188.114.97.2 / Your IP : 104.23.243.200 Web Server : Apache/2.4.59 (Debian) System : Linux EDL-STRETCH 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 User : edlftp ( 1002) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/nicolasj/www/sms.formationlangues.be/application/models/ |
Upload File : |
<?php
class Teacher_model extends CI_Model
{
public const TEACHER_ROLES = [
0 => 'full_teacher', # full teacher
1 => 'substitute_teacher',
2 => 'supervisor',
3 => 'viewer_teacher'
];
public function get_entry(int $id)
{
if ($id <= 0) {
return null;
}
$result = $this->db->get_where('teacher', ['teacher_id' => $id])->result();
return isset($result[0]) ? $result[0] : null;
}
public function update_entry(int $id, array $fields): bool
{
if ($id <= 0 || empty($fields)) {
return false;
}
return $this->db->update('teacher', $fields, ['teacher_id' => $id]);
}
public function count(): array
{
$query = $this->db->query(
"SELECT t.teacher_id, t.admin_contract
FROM `teacher` t
LEFT JOIN user as u ON u.user_id = t.teacher_id
LEFT JOIN course_teacher as ct ON ct.teacher_id = t.teacher_id
LEFT JOIN course_scheduled_new as cs ON cs.ID = ct.lesson_id
LEFT JOIN course_new as c ON c.ID = cs.CourseID
WHERE u.is_active = 1 AND u.Archived = 0 AND c.Archived != 1
GROUP BY t.teacher_id");
$teachers = $query->result();
$count_teachers = 0;
$count_animators = 0;
foreach ($teachers as $t) {
if ((int) $t->admin_contract === 1) {
$count_animators++;
} else if ((int) $t->admin_contract > 1) {
$count_teachers++;
}
}
return [
'teachers' => $count_teachers,
'animators' => $count_animators
];
}
/**
* Returns an lesson assignments by id
*
* @param integer $teacher_id
* @param integer $course_id
* @return array
*/
public function lesson_teacher_assignment(int $teacher_lesson_id) : ?stdClass
{
$result = $this->db->join('course_scheduled_new', 'course_scheduled_new.ID = course_teacher.lesson_id', 'inner')
->get_where('course_teacher', ['course_teacher.id' => $teacher_lesson_id])
->result();
return isset($result[0]) ? $result[0] : null;
}
/**
* Returns course_teacher for a course
*
* @param integer $teacher_id
* @param integer $course_id
* @return array
*/
public function get_course_teacher(int $teacher_id, int $course_id) : array
{
$query = $this->db->get_where('course_teacher', ['course_id' => $course_id, 'teacher_id' => $teacher_id]);
$course_teacher = $query->result();
return $course_teacher;
}
/**
* Returns course_teacher for all courses
*
* @param integer $teacher_id
* @param integer $course_id
* @return array
*/
public function get_courses_teacher(int $teacher_id) : array
{
$query = $this->db->get_where('course_teacher', ['teacher_id' => $teacher_id]);
$course_teacher = $query->result();
return $course_teacher;
}
/**
* Returns all lesson assignments from a teacher for a course
*
* @param integer $teacher_id
* @param integer $course_id
* @return array
*/
public function lessons_teacher_assignment(int $teacher_id, int $course_id) : array
{
$query = $this->db->join('course_scheduled_new', 'course_scheduled_new.ID = course_teacher.lesson_id', 'inner')
->get_where('course_teacher', ['course_id' => $course_id, 'teacher_id' => $teacher_id]);
$lessons_teacher = $query->result();
return $lessons_teacher;
}
/**
* Returns lesson assignment from a teacher for a lesson
*
* @param integer $teacher_id
* @param integer $course_id
* @return array
*/
public function lesson_teacher_assignment_by_lesson_id(int $teacher_id, int $lesson_id) : ?stdClass
{
$result = $this->db->join('course_scheduled_new', 'course_scheduled_new.ID = course_teacher.lesson_id', 'inner')
->get_where('course_teacher', ['lesson_id' => $lesson_id, 'teacher_id' => $teacher_id])
->result();
return isset($result[0]) ? $result[0] : null;
}
/**
* Check if the teacher have an valid account (fullfilled)
*
* @param integer $user_id
* @return bool
*/
public function fullfilled_teacher(int $user_id) : bool
{
$teacher = $this->get_entry($user_id);
if (empty($teacher)) {
return true;
}
$this->load->model('address_model');
$valid = !empty($teacher->address_id) && !empty($this->address_model->fullfilled($teacher->address_id)) && !empty($teacher->dob);
$valid = $valid && !empty($teacher->dob) && in_array((int) $teacher->admin_contract, [1, 3]) && in_array((int) $teacher->admin_state, [1, 2]);
return $valid;
}
/**
* Change teacher role for an specific lesson
*
* @param int $teacher_lesson_id
* @param int $role_id
* @return bool
*/
public function change_lesson_role(int $teacher_lesson_id, int $role_id) : bool
{
if (empty(self::TEACHER_ROLES[$role_id])) {
return false;
}
return $this->db->update('course_teacher', ['teacher_role_id' => $role_id], ['id' => $teacher_lesson_id]);
}
/**
* Check if the teacher can edit lesson
*
* @param int $lesson_id
* @param int $teacher_id
* @return bool
*/
public function can_edit_lesson(int $lesson_id, int $teacher_id) : bool
{
if (empty($lesson_id) || empty($teacher_id)) {
return false;
}
$lesson_teacher = $this->db->get_where('course_teacher', ['lesson_id' => $lesson_id, 'teacher_id' => $teacher_id])->result();
if (empty($lesson_teacher[0])) {
return false;
}
return ((int) $lesson_teacher[0]->teacher_role_id) !== 3;
}
/**
* Check if the teacher can generate contract (not already signed and user/teacher profile fullfilled)
*
* @param integer $teacher_id
* @return boolean
*/
public function teacher_available_to_generate_contract(int $teacher_id) : bool
{
if (empty($teacher_id) || $teacher_id <= 0) {
return false;
}
$teacher = $this->get_entry($teacher_id);
if (empty($teacher)) {
return false;
}
$this->load->model('address_model');
$valid = !empty($teacher->address_id) && !empty($this->address_model->fullfilled($teacher->address_id)) && !empty($teacher->dob);
$valid = $valid && !empty($teacher->iban);
$valid = $valid && !empty($teacher->dob) && in_array((int) $teacher->admin_contract, [1, 3]) && in_array((int) $teacher->admin_state, [0, 3]);
return $valid;
}
/**
* Check if the teacher can sign contract (not already signed and user/teacher profile fullfilled)
*
* @param integer $teacher_id
* @return boolean
*/
public function teacher_available_to_sign_contract(int $teacher_id) : bool
{
if (empty($teacher_id) || $teacher_id <= 0) {
return false;
}
$teacher = $this->get_entry($teacher_id);
if (empty($teacher)) {
return false;
}
$this->load->model('address_model');
$valid = !empty($teacher->address_id) && !empty($this->address_model->fullfilled($teacher->address_id)) && !empty($teacher->dob);
$valid = $valid && !empty($teacher->iban);
$valid = $valid && !empty($teacher->dob) && in_array((int) $teacher->admin_contract, [1, 3]) && in_array((int) $teacher->admin_state, [2]);
return $valid;
}
}