/** * Get the progress of a exercise * @param int $sessionId The session ID (session.id) * @param int $courseId The course ID (course.id) * @param int $exerciseId The quiz ID (c_quiz.id) * @param int $answer The answer status (0 = incorrect, 1 = correct, 2 = both) * @param array $options An array of options you can pass to the query (limit, where and order) * @return array An array with the data of exercise(s) progress */ public static function get_exercise_progress($sessionId = 0, $courseId = 0, $exerciseId = 0, $date_from = null, $date_to = null, $options = array()) { $sessionId = intval($sessionId); $courseId = intval($courseId); $exerciseId = intval($exerciseId); $date_from = Database::escape_string($date_from); $date_to = Database::escape_string($date_to); /* * This method gets the data by blocks, as previous attempts at one single * query made it take ages. The logic of query division is described below */ // Get tables names $tuser = Database::get_main_table(TABLE_MAIN_USER); $tquiz = Database::get_course_table(TABLE_QUIZ_TEST); $tquiz_answer = Database::get_course_table(TABLE_QUIZ_ANSWER); $tquiz_question = Database::get_course_table(TABLE_QUIZ_QUESTION); $tquiz_rel_question = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION); $ttrack_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES); $ttrack_attempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $sessions = array(); $courses = array(); // if session ID is defined but course ID is empty, get all the courses // from that session if (!empty($sessionId) && empty($courseId)) { // $courses is an array of course int id as index and course details hash as value $courses = SessionManager::get_course_list_by_session_id($sessionId); $sessions[$sessionId] = api_get_session_info($sessionId); } elseif (empty($sessionId) && !empty($courseId)) { // if, to the contrary, course is defined but not sessions, get the sessions that include this course // $sessions is an array like: [0] => ('id' => 3, 'name' => 'Session 35'), [1] => () etc; $course = api_get_course_info_by_id($courseId); $sessionsTemp = SessionManager::get_session_by_course($courseId); $courses[$courseId] = $course; foreach ($sessionsTemp as $sessionItem) { $sessions[$sessionItem['id']] = $sessionItem; } } elseif (!empty($courseId) && !empty($sessionId)) { //none is empty $course = api_get_course_info_by_id($courseId); $courses[$courseId] = array($course['code']); $courses[$courseId]['code'] = $course['code']; $sessions[$sessionId] = api_get_session_info($sessionId); } else { //both are empty, not enough data, return an empty array return array(); } // Now we have two arrays of courses and sessions with enough data to proceed // If no course could be found, we shouldn't return anything. // Sessions can be empty (then we only return the pure-course-context results) if (count($courses) < 1) { return array(); } $data = array(); // The following loop is less expensive than what it seems: // - if a course was defined, then we only loop through sessions // - if a session was defined, then we only loop through courses // - if a session and a course were defined, then we only loop once foreach ($courses as $courseIdx => $courseData) { $where = ''; $whereParams = array(); $whereSessionParams = ''; if (count($sessions > 0)) { foreach ($sessions as $sessionIdx => $sessionData) { if (!empty($sessionIdx)) { $whereSessionParams .= $sessionIdx . ','; } } $whereSessionParams = substr($whereSessionParams, 0, -1); } if (!empty($exerciseId)) { $exerciseId = intval($exerciseId); $where .= ' AND q.id = %d '; $whereParams[] = $exerciseId; } /* * This feature has been disabled for now, to avoid having to * join two very large tables //2 = show all questions (wrong and correct answered) if ($answer != 2) { $answer = intval($answer); //$where .= ' AND qa.correct = %d'; //$whereParams[] = $answer; } */ $limit = ''; if (!empty($options['limit'])) { $limit = " LIMIT " . $options['limit']; } if (!empty($options['where'])) { $where .= ' AND ' . Database::escape_string($options['where']); } $order = ''; if (!empty($options['order'])) { $order = " ORDER BY " . $options['order']; } if (!empty($date_to) && !empty($date_from)) { $where .= sprintf(" AND (te.start_date BETWEEN '%s 00:00:00' AND '%s 23:59:59')", $date_from, $date_to); } $sql = "SELECT\n te.session_id,\n ta.id as attempt_id,\n te.exe_user_id as user_id,\n te.exe_id as exercise_attempt_id,\n ta.question_id,\n ta.answer as answer_id,\n ta.tms as time,\n te.exe_exo_id as quiz_id,\n CONCAT ('c', q.c_id, '_e', q.id) as exercise_id,\n q.title as quiz_title,\n qq.description as description\n FROM {$ttrack_exercises} te\n INNER JOIN {$ttrack_attempt} ta ON ta.exe_id = te.exe_id\n INNER JOIN {$tquiz} q ON q.id = te.exe_exo_id\n INNER JOIN {$tquiz_rel_question} rq ON rq.exercice_id = q.id AND rq.c_id = q.c_id\n INNER JOIN {$tquiz_question} qq\n ON\n qq.id = rq.question_id AND\n qq.c_id = rq.c_id AND\n qq.position = rq.question_order AND\n ta.question_id = rq.question_id\n WHERE\n te.c_id = {$courseIdx} " . (empty($whereSessionParams) ? '' : "AND te.session_id IN ({$whereSessionParams})") . "\n AND q.c_id = {$courseIdx}\n {$where} {$order} {$limit}"; $sql_query = vsprintf($sql, $whereParams); // Now browse through the results and get the data $rs = Database::query($sql_query); $userIds = array(); $questionIds = array(); $answerIds = array(); while ($row = Database::fetch_array($rs)) { //only show if exercise is visible if (api_get_item_visibility($courseData, 'quiz', $row['exercise_id'])) { $userIds[$row['user_id']] = $row['user_id']; $questionIds[$row['question_id']] = $row['question_id']; $answerIds[$row['question_id']][$row['answer_id']] = $row['answer_id']; $row['session'] = $sessions[$row['session_id']]; $data[] = $row; } } // Now fill questions data. Query all questions and answers for this test to avoid $sqlQuestions = "SELECT tq.c_id, tq.id as question_id, tq.question, tqa.id_auto,\n tqa.answer, tqa.correct, tq.position, tqa.id_auto as answer_id\n FROM {$tquiz_question} tq, {$tquiz_answer} tqa\n WHERE\n tqa.question_id = tq.id AND\n tqa.c_id = tq.c_id AND\n tq.c_id = {$courseIdx} AND\n tq.id IN (" . implode(',', $questionIds) . ")"; $resQuestions = Database::query($sqlQuestions); $answer = array(); $question = array(); while ($rowQuestion = Database::fetch_assoc($resQuestions)) { $questionId = $rowQuestion['question_id']; $answerId = $rowQuestion['answer_id']; $answer[$questionId][$answerId] = array('position' => $rowQuestion['position'], 'question' => $rowQuestion['question'], 'answer' => $rowQuestion['answer'], 'correct' => $rowQuestion['correct']); $question[$questionId]['question'] = $rowQuestion['question']; } // Now fill users data $sqlUsers = "SELECT user_id, username, lastname, firstname\n FROM {$tuser}\n WHERE user_id IN (" . implode(',', $userIds) . ")"; $resUsers = Database::query($sqlUsers); while ($rowUser = Database::fetch_assoc($resUsers)) { $users[$rowUser['user_id']] = $rowUser; } foreach ($data as $id => $row) { $rowQuestId = $row['question_id']; $rowAnsId = $row['answer_id']; $data[$id]['session'] = $sessions[$row['session_id']]['name']; $data[$id]['firstname'] = $users[$row['user_id']]['firstname']; $data[$id]['lastname'] = $users[$row['user_id']]['lastname']; $data[$id]['username'] = $users[$row['user_id']]['username']; $data[$id]['answer'] = $answer[$rowQuestId][$rowAnsId]['answer']; $data[$id]['correct'] = $answer[$rowQuestId][$rowAnsId]['correct'] == 0 ? get_lang('No') : get_lang('Yes'); $data[$id]['question'] = $question[$rowQuestId]['question']; $data[$id]['question_id'] = $rowQuestId; $data[$id]['description'] = $row['description']; } /* The minimum expected array structure at the end is: attempt_id, session name, exercise_id, quiz_title, username, lastname, firstname, time, question_id, question, answer, */ } return $data; }
',', false ); } if (!empty($teacherList)) { echo Display::page_subheader2(get_lang('Teachers')); echo $teacherList; } if (!empty($coaches)) { echo Display::page_subheader2(get_lang('Coaches')); echo $coaches; } $sessionList = SessionManager::get_session_by_course($courseInfo['code']); if (!empty($sessionList)) { echo Display::page_subheader2(get_lang('SessionList')); $sessionToShow = array(); foreach ($sessionList as $session) { $url = api_get_path(WEB_CODE_PATH).'mySpace/course.php?session_id='.$session['id'].'&cidReq='.$courseInfo['code']; $sessionToShow[] = Display::url($session['name'], $url); } echo implode(', ', $sessionToShow); } echo Display::page_subheader2(get_lang('StudentList')); // PERSON_NAME_DATA_EXPORT is buggy $is_western_name_order = api_is_western_name_order();
/** * @param array $courseInfo * @param int $id doc id * @param string $visibility visible/invisible * @param int $userId */ public static function updateVisibilityFromAllSessions($courseInfo, $id, $visibility, $userId) { $sessionList = SessionManager::get_session_by_course($courseInfo['real_id']); if (!empty($sessionList)) { foreach ($sessionList as $session) { $sessionId = $session['id']; api_item_property_update($courseInfo, TOOL_DOCUMENT, $id, $visibility, $userId, null, null, null, null, $sessionId); } } }
$table->set_header(0, get_lang('OfficialCode'), true); if ($is_western_name_order) { $table->set_header(1, get_lang('FirstName'), true); $table->set_header(2, get_lang('LastName'), true); } else { $table->set_header(1, get_lang('LastName'), true); $table->set_header(2, get_lang('FirstName'), true); } $table->set_header(3, get_lang('Email'), true); $table->set_header(4, get_lang('Status'), true); $table->set_header(5, '', false); $table->display(); } else { echo get_lang('NoUsersInCourse'); } $session_list = SessionManager::get_session_by_course($course->code); $url = api_get_path(WEB_CODE_PATH); if (!empty($session_list)) { foreach ($session_list as &$session) { $session[0] = Display::url($session[0], $url . 'admin/resume_session.php?id_session=' . $session['id']); unset($session[1]); } echo Display::page_header(get_lang('Sessions')); $table = new SortableTableFromArray($session_list, 0, 20, 'user_table'); $table->display(); } /*$group = new UserGroup(); $usegroups = $group->get_usergroup_by_course($course->id);*/ /*@todo This should be dissapear classes are a deprecated feature*/ /* //Show all classes subscribed in this course
/** * @param int $courseId * @param array $teachers * @param bool $deleteTeachersNotInList * @param bool $editTeacherInSessions * @param bool $deleteSessionTeacherNotInList * @return bool */ public static function updateTeachers($courseId, $teachers, $deleteTeachersNotInList = true, $editTeacherInSessions = false, $deleteSessionTeacherNotInList = false, $teacherBackup = array()) { if (empty($teachers)) { return false; } if (!is_array($teachers)) { $teachers = array($teachers); } $courseId = intval($courseId); $courseInfo = api_get_course_info_by_id($courseId); $course_code = $courseInfo['code']; $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); $alreadyAddedTeachers = CourseManager::getTeacherListFromCourse($course_code); if ($deleteTeachersNotInList) { // Delete only teacher relations that doesn't match the selected teachers $cond = null; if (count($teachers) > 0) { foreach ($teachers as $key) { $key = Database::escape_string($key); $cond .= " AND user_id <> '" . $key . "'"; } } $sql = 'DELETE FROM ' . $course_user_table . ' WHERE c_id ="' . $courseId . '" AND status="1" AND relation_type = 0 ' . $cond; Database::query($sql); } if (count($teachers) > 0) { foreach ($teachers as $userId) { $userId = intval($userId); // We check if the teacher is already subscribed in this course $sql = 'SELECT 1 FROM ' . $course_user_table . ' WHERE user_id = "' . $userId . '" AND c_id = "' . $courseId . '" '; $result = Database::query($sql); if (Database::num_rows($result)) { $sql = 'UPDATE ' . $course_user_table . ' SET status = "1" WHERE c_id = "' . $courseId . '" AND user_id = "' . $userId . '" '; } else { $userCourseCategory = '0'; if (isset($teacherBackup[$userId]) && isset($teacherBackup[$userId][$course_code])) { $courseUserData = $teacherBackup[$userId][$course_code]; $userCourseCategory = $courseUserData['user_course_cat']; } $sql = "INSERT INTO " . $course_user_table . " SET\n c_id = " . $courseId . ",\n user_id = " . $userId . ",\n status = '1',\n is_tutor = '0',\n sort = '0',\n relation_type = '0',\n user_course_cat = '{$userCourseCategory}'\n "; } Database::query($sql); } } if ($editTeacherInSessions) { $sessions = SessionManager::get_session_by_course($courseId); if (!empty($sessions)) { foreach ($sessions as $session) { // Remove old and add new if ($deleteSessionTeacherNotInList) { foreach ($teachers as $userId) { SessionManager::set_coach_to_course_session($userId, $session['id'], $courseId); } $teachersToDelete = array(); if (!empty($alreadyAddedTeachers)) { $teachersToDelete = array_diff(array_keys($alreadyAddedTeachers), $teachers); } if (!empty($teachersToDelete)) { foreach ($teachersToDelete as $userId) { SessionManager::set_coach_to_course_session($userId, $session['id'], $courseId, true); } } } else { // Add new teachers only foreach ($teachers as $userId) { SessionManager::set_coach_to_course_session($userId, $session['id'], $courseId); } } } } } }
$tool_name = get_lang('DocumentQuota'); $interbreadcrumb[] = array('url' => 'document.php', 'name' => get_lang('Documents')); $htmlHeadXtra[] = api_get_js('jqplot/jquery.jqplot.js'); $htmlHeadXtra[] = api_get_js('jqplot/plugins/jqplot.pieRenderer.js'); $htmlHeadXtra[] = api_get_js('jqplot/plugins/jqplot.donutRenderer.js'); $htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH) . 'javascript/jqplot/jquery.jqplot.css'); $course_code = api_get_course_id(); $course_id = api_get_course_int_id(); $session_id = api_get_session_id(); $group_id = api_get_group_id(); $user_id = api_get_user_id(); $user_info = api_get_user_info($user_id); $session = array(); $user_name = $user_info['complete_name']; $course_list = SessionManager::get_course_list_by_session_id($session_id); $session_list = SessionManager::get_session_by_course($course_id); $total_quota_bytes = DocumentManager::get_course_quota(); $quota_bytes = DocumentManager::documents_total_space($course_id, 0, 0); $quota_percentage = round($quota_bytes / $total_quota_bytes, 2) * 100; $session[] = array(get_lang('Course') . ' (' . format_file_size($quota_bytes) . ')', $quota_percentage); $used_quota_bytes = $quota_bytes; if (!empty($session_list)) { foreach ($session_list as $session_data) { $quota_percentage = 0; $quota_bytes = intval(DocumentManager::documents_total_space($course_id, null, $session_data['id'])); if (!empty($quota_bytes)) { $quota_percentage = round($quota_bytes / $total_quota_bytes, 2) * 100; } if ($session_id == $session_data['id']) { $session_data['name'] = $session_data['name'] . ' * '; }
$form->addText('title', get_lang('Title'), true); $form->applyFilter('title', 'html_filter'); $form->applyFilter('title', 'trim'); // Code $element = $form->addElement('text', 'real_code', array(get_lang('CourseCode'), get_lang('ThisValueCantBeChanged'))); $element->freeze(); // Visual code $form->addText('visual_code', array(get_lang('VisualCode'), get_lang('OnlyLettersAndNumbers'), get_lang('ThisValueIsUsedInTheCourseURL')), true, ['maxlength' => CourseManager::MAX_COURSE_LENGTH_CODE, 'pattern' => '[a-zA-Z0-9]+', 'title' => get_lang('OnlyLettersAndNumbers')]); $form->applyFilter('visual_code', 'strtoupper'); $form->applyFilter('visual_code', 'html_filter'); $form->addElement('advmultiselect', 'course_teachers', get_lang('CourseTeachers'), $allTeachers); $courseInfo['course_teachers'] = $course_teachers; if (array_key_exists('add_teachers_to_sessions_courses', $courseInfo)) { $form->addElement('checkbox', 'add_teachers_to_sessions_courses', null, get_lang('TeachersWillBeAddedAsCoachInAllCourseSessions')); } $coursesInSession = SessionManager::get_session_by_course($courseInfo['real_id']); if (!empty($coursesInSession)) { foreach ($coursesInSession as $session) { $sessionId = $session['id']; $coaches = SessionManager::getCoachesByCourseSession($sessionId, $courseInfo['real_id']); $teachers = $allTeachers; $sessionTeachers = array(); foreach ($coaches as $coachId) { $userInfo = api_get_user_info($coachId); $sessionTeachers[] = $coachId; if (isset($teachers[$coachId])) { unset($teachers[$coachId]); } } $groupName = 'session_coaches[' . $sessionId . ']'; $platformTeacherId = 'platform_teachers_by_session_' . $sessionId;
/** * Send emails to users. * @param bool $sendToUsersInSession * @param bool $sendToDrhUsers send a copy of the message to the DRH users * related to the main user */ public function send($sendToUsersInSession = false, $sendToDrhUsers = false) { $sender = $this->sender(); $subject = $this->subject(); // Send email one by one to avoid antispam $users = $this->sent_to(); foreach ($users as $user) { $message = $this->message($user['user_id']); MessageManager::send_message_simple($user['user_id'], $subject, $message, $sender['user_id'], $sendToDrhUsers, true); } if ($sendToUsersInSession) { $sessionList = SessionManager::get_session_by_course($this->course['real_id']); if (!empty($sessionList)) { foreach ($sessionList as $sessionInfo) { $sessionId = $sessionInfo['id']; $message = $this->message(null, $sessionId); $userList = CourseManager::get_user_list_from_course_code($this->course['code'], $sessionId); if (!empty($userList)) { foreach ($userList as $user) { MessageManager::send_message_simple($user['user_id'], $subject, $message, $sender['user_id'], false, true); } } } } } $this->log_mail_sent(); }
} $withFilter = false; $reportTitle = get_lang('TimeReportIncludingAllCoursesAndSessionsByTeacher'); $reportSubTitle = sprintf(get_lang('TimeSpentBetweenXAndY'), $selectedFrom, $selectedUntil); $timeReport = new TeacherTimeReport(); if (!empty($selectedCourse)) { $withFilter = true; $course = api_get_course_info($selectedCourse); $reportTitle = sprintf(get_lang('TimeReportForCourseX'), $course['title']); $teachers = CourseManager::getTeacherListFromCourse($course['real_id']); foreach ($teachers as $teacher) { $totalTime = UserManager::getTimeSpentInCourses($teacher['user_id'], $course['real_id'], 0, $selectedFrom, $selectedUntil); $formattedTime = api_format_time($totalTime); $timeReport->data[] = array('session' => null, 'course' => array('id' => $course['real_id'], 'name' => $course['title']), 'coach' => array('userId' => $teacher['user_id'], 'lastname' => $teacher['lastname'], 'firstname' => $teacher['firstname'], 'username' => $teacher['username'], 'completeName' => api_get_person_name($teacher['firstname'], $teacher['lastname'])), 'totalTime' => $formattedTime); } $sessionsByCourse = SessionManager::get_session_by_course($course['real_id']); foreach ($sessionsByCourse as $session) { $coaches = CourseManager::get_coachs_from_course($session['id'], $course['real_id']); if ($coaches) { foreach ($coaches as $coach) { $totalTime = UserManager::getTimeSpentInCourses($coach['user_id'], $course['real_id'], $session['id'], $selectedFrom, $selectedUntil); $formattedTime = api_format_time($totalTime); $timeReport->data[] = array('session' => array('id' => $session['id'], 'name' => $session['name']), 'course' => array('id' => $course['real_id'], 'name' => $course['title']), 'coach' => array('userId' => $coach['user_id'], 'lastname' => $coach['lastname'], 'firstname' => $coach['firstname'], 'username' => $coach['username'], 'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])), 'totalTime' => $formattedTime); } } } } if (!empty($selectedSession)) { $withFilter = true; $session = api_get_session_info($selectedSession); $sessionData = array('id' => $session['id'], 'name' => $session['name']);
\t\t<div class="controls"> \t\t\t<table cellpadding="0" cellspacing="0"> \t\t\t\t<tr> \t\t\t\t\t<!-- BEGIN error --><span class="form_error">{error}</span><br /><!-- END error -->\t<td>{element}</td> \t\t\t\t</tr> \t\t\t</table> \t\t</div> \t</div> EOT; $renderer = $form->defaultRenderer(); $renderer->setElementTemplate($element_template, 'group'); $form->addGroup($group, 'group', get_lang('CourseTeachers'), '</td><td width="80" align="center">' . '<input class="arrowr" style="width:30px;height:30px;padding-right:12px" type="button" onclick="moveItem(document.getElementById(\'platform_teachers\'), document.getElementById(\'course_teachers\'))"><br><br>' . '<input class="arrowl" style="width:30px;height:30px;padding-left:13px" type="button" onclick="moveItem(document.getElementById(\'course_teachers\'), document.getElementById(\'platform_teachers\'))"></td><td>'); if (array_key_exists('add_teachers_to_sessions_courses', $course)) { $form->addElement('checkbox', 'add_teachers_to_sessions_courses', null, get_lang('TeachersWillBeAddedAsCoachInAllCourseSessions')); } $coursesInSession = SessionManager::get_session_by_course($course['code']); if (!empty($coursesInSession)) { foreach ($coursesInSession as $session) { $sessionId = $session['id']; $coaches = SessionManager::getCoachesByCourseSession($sessionId, $course['code']); $teachers = $allTeachers; $sessionTeachers = array(); foreach ($coaches as $coachId) { $userInfo = api_get_user_info($coachId); $sessionTeachers[$coachId] = $userInfo['complete_name']; if (isset($teachers[$coachId])) { unset($teachers[$coachId]); } } $groupName = 'session_coaches[' . $sessionId . ']'; $platformTeacherId = 'platform_teachers_by_session_' . $sessionId;
/** * @param int $announcementId */ public static function addAnnouncementToAllUsersInSessions($announcementId) { $courseCode = api_get_course_id(); $_course = api_get_course_info(); $sessionList = SessionManager::get_session_by_course(api_get_course_int_id()); if (!empty($sessionList)) { foreach ($sessionList as $sessionInfo) { $sessionId = $sessionInfo['id']; $userList = CourseManager::get_user_list_from_course_code($courseCode, $sessionId); if (!empty($userList)) { foreach ($userList as $user) { api_item_property_update($_course, TOOL_ANNOUNCEMENT, $announcementId, "AnnouncementUpdated", api_get_user_id(), 0, $user['user_id'], 0, 0, $sessionId); } } } } }
$table->set_header(0, get_lang('OfficialCode'), true); if ($is_western_name_order) { $table->set_header(1, get_lang('FirstName'), true); $table->set_header(2, get_lang('LastName'), true); } else { $table->set_header(1, get_lang('LastName'), true); $table->set_header(2, get_lang('FirstName'), true); } $table->set_header(3, get_lang('Email'), true); $table->set_header(4, get_lang('Status'), true); $table->set_header(5, '', false); $table->display(); } else { echo Display::display_warning_message(get_lang('NoUsersInCourse')); } $session_list = SessionManager::get_session_by_course($course_info['real_id']); $url = api_get_path(WEB_CODE_PATH); if (!empty($session_list)) { foreach ($session_list as &$session) { $session[0] = Display::url($session[0], $url . 'admin/resume_session.php?id_session=' . $session['id']); unset($session[1]); } echo Display::page_subheader(get_lang('Sessions')); $table = new SortableTableFromArray($session_list, 0, 20, 'user_table'); $table->display(); } $extra_field = new ExtraField('course'); $extra_fields = $extra_field->get_all(); if (!empty($extra_fields)) { echo Display::page_subheader(get_lang('ExtraFields')); echo '<table class="data_table">';
/** * @param string $course_code * @param array $teachers * @param bool $deleteTeachersNotInList * @param bool $editTeacherInSessions * @param bool $deleteSessionTeacherNotInList * @return bool */ public static function updateTeachers($course_code, $teachers, $deleteTeachersNotInList = true, $editTeacherInSessions = false, $deleteSessionTeacherNotInList = false) { if (empty($teachers)) { return false; } if (!is_array($teachers)) { $teachers = array($teachers); } $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); $alreadyAddedTeachers = CourseManager::get_teacher_list_from_course_code($course_code); if ($deleteTeachersNotInList) { // Delete only teacher relations that doesn't match the selected teachers $cond = null; if (count($teachers) > 0) { foreach ($teachers as $key) { $key = Database::escape_string($key); $cond .= " AND user_id <> '" . $key . "'"; } } $sql = 'DELETE FROM ' . $course_user_table . ' WHERE course_code="' . Database::escape_string($course_code) . '" AND status="1"' . $cond; Database::query($sql); } if (count($teachers) > 0) { foreach ($teachers as $userId) { $userId = intval($userId); // We check if the teacher is already subscribed in this course $sql = 'SELECT 1 FROM ' . $course_user_table . ' HERE user_id = "' . $userId . '" AND course_code = "' . $course_code . '" '; $result = Database::query($sql); if (Database::num_rows($result)) { $sql = 'UPDATE ' . $course_user_table . ' SET status = "1" WHERE course_code = "' . $course_code . '" AND user_id = "' . $userId . '" '; } else { $sql = "INSERT INTO " . $course_user_table . " SET\n course_code = '" . Database::escape_string($course_code) . "',\n user_id = '" . $userId . "',\n status = '1',\n role = '',\n tutor_id = '0',\n sort = '0',\n user_course_cat='0'"; } Database::query($sql); } } if ($editTeacherInSessions) { $sessions = SessionManager::get_session_by_course($course_code); if (!empty($sessions)) { foreach ($sessions as $session) { // Remove old and add new if ($deleteSessionTeacherNotInList) { foreach ($teachers as $userId) { SessionManager::set_coach_to_course_session($userId, $session['id'], $course_code); } $teachersToDelete = array(); if (!empty($alreadyAddedTeachers)) { $teachersToDelete = array_diff(array_keys($alreadyAddedTeachers), $teachers); } if (!empty($teachersToDelete)) { foreach ($teachersToDelete as $userId) { SessionManager::set_coach_to_course_session($userId, $session['id'], $course_code, true); } } } else { // Add new teachers only foreach ($teachers as $userId) { SessionManager::set_coach_to_course_session($userId, $session['id'], $course_code); } } } } } }