$selected_users = array(); if (!empty($group_member_list)) { foreach ($group_member_list as $index => $user) { $selected_users[] = $user['user_id']; } } $group_members_element = $form->addElement('advmultiselect', 'group_members', get_lang('GroupMembers'), $possible_users, 'style="width: 280px;"'); $form->addFormRule('check_group_members'); // submit button $form->addButtonSave(get_lang('SaveSettings')); if ($form->validate()) { $values = $form->exportValues(); // Storing the users (we first remove all users and then add only those who were selected) GroupManager::unsubscribe_all_users($current_group['id']); if (isset($_POST['group_members']) && count($_POST['group_members']) > 0) { GroupManager::subscribe_users($values['group_members'], $current_group['id']); } // Returning to the group area (note: this is inconsistent with the rest of chamilo) $cat = GroupManager::get_category_from_group($current_group['id']); if (isset($_POST['group_members']) && count($_POST['group_members']) > $max_member && $max_member != GroupManager::MEMBER_PER_GROUP_NO_LIMIT) { Display::addFlash(Display::return_message(get_lang('GroupTooMuchMembers'), 'warning')); header('Location: group.php?' . api_get_cidreq(true, false)); } else { Display::addFlash(Display::return_message(get_lang('GroupSettingsModified'), 'success')); header('Location: group.php?' . api_get_cidreq(true, false) . '&category=' . $cat['id']); } exit; } $action = isset($_GET['action']) ? $_GET['action'] : null; switch ($action) { case 'empty':
/** * @param string $file * @param bool $moveFile * @param array $teacherBackup * @param array $groupBackup */ private function importCourses($file, $moveFile = true, &$teacherBackup = array(), &$groupBackup = array()) { $data = Import::csv_to_array($file); if (!empty($data)) { $this->logger->addInfo(count($data) . " records found."); foreach ($data as $row) { $row = $this->cleanCourseRow($row); $courseCode = CourseManager::get_course_id_from_original_id($row['extra_' . $this->extraFieldIdNameList['course']], $this->extraFieldIdNameList['course']); $courseInfo = api_get_course_info($courseCode); if (empty($courseInfo)) { // Create $params = array(); $params['title'] = $row['title']; $params['exemplary_content'] = false; $params['wanted_code'] = $row['course_code']; $params['course_category'] = $row['course_category']; $params['course_language'] = $row['language']; $params['teachers'] = $row['teachers']; $courseInfo = CourseManager::create_course($params); if (!empty($courseInfo)) { CourseManager::update_course_extra_field_value($courseInfo['code'], 'external_course_id', $row['extra_' . $this->extraFieldIdNameList['course']]); $this->logger->addInfo("Courses - Course created " . $courseInfo['code']); } else { $this->logger->addError("Courses - Can't create course:" . $row['title']); } } else { // Update $params = array('title' => $row['title'], 'category_code' => $row['course_category']); $result = CourseManager::update_attributes($courseInfo['real_id'], $params); $addTeacherToSession = isset($courseInfo['add_teachers_to_sessions_courses']) && !empty($courseInfo['add_teachers_to_sessions_courses']) ? true : false; $teachers = $row['teachers']; if (!is_array($teachers)) { $teachers = array($teachers); } if ($addTeacherToSession) { CourseManager::updateTeachers($courseInfo['id'], $row['teachers'], false, true, false, $teacherBackup); } else { CourseManager::updateTeachers($courseInfo['id'], $row['teachers'], false, false, false, $teacherBackup); } foreach ($teachers as $teacherId) { if (isset($groupBackup['tutor'][$teacherId]) && isset($groupBackup['tutor'][$teacherId][$courseInfo['code']])) { foreach ($groupBackup['tutor'][$teacherId][$courseInfo['code']] as $data) { GroupManager::subscribe_tutors(array($teacherId), $data['group_id'], $data['c_id']); } } if (isset($groupBackup['user'][$teacherId]) && isset($groupBackup['user'][$teacherId][$courseInfo['code']]) && !empty($groupBackup['user'][$teacherId][$courseInfo['code']])) { foreach ($groupBackup['user'][$teacherId][$courseInfo['code']] as $data) { GroupManager::subscribe_users(array($teacherId), $data['group_id'], $data['c_id']); } } } if ($result) { $this->logger->addInfo("Courses - Course updated " . $courseInfo['code']); } else { $this->logger->addError("Courses - Course NOT updated " . $courseInfo['code']); } } } } if ($moveFile) { $this->moveFile($file); } }
$nameTools = get_lang('GroupSpace'); $interbreadcrumb[] = array('url' => 'group.php?' . api_get_cidReq(), 'name' => get_lang('Groups')); /* Ensure all private groups // Juan Carlos Raña Trabado */ $forums_of_groups = get_forums_of_group($current_group['id']); if (!GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_session_id())) { api_not_allowed(true); } Display::display_header($nameTools . ' ' . Security::remove_XSS($current_group['name']), 'Group'); /* Introduction section (editable by course admin) */ Display::display_introduction_section(TOOL_GROUP); /* Actions and Action links */ /* * User wants to register in this group */ if (!empty($_GET['selfReg']) && GroupManager::is_self_registration_allowed($user_id, $current_group['id'])) { GroupManager::subscribe_users($user_id, $current_group['id']); Display::display_normal_message(get_lang('GroupNowMember')); } /* * User wants to unregister from this group */ if (!empty($_GET['selfUnReg']) && GroupManager::is_self_unregistration_allowed($user_id, $current_group['id'])) { GroupManager::unsubscribe_users($user_id, $current_group['id']); Display::display_normal_message(get_lang('StudentDeletesHimself')); } echo '<div class="actions">'; echo '<a href="group.php">' . Display::return_icon('back.png', get_lang('BackToGroupList'), '', ICON_SIZE_MEDIUM) . '</a>'; /* * Register to group */ $subscribe_group = '';
Display::addFlash(Display::return_message(get_lang('ItemUpdated'))); header("Location: {$currentUrl}"); exit; } break; case 'set_invisible': if (api_is_allowed_to_edit()) { GroupManager::setInvisible($my_get_id); Display::addFlash(Display::return_message(get_lang('ItemUpdated'))); header("Location: {$currentUrl}"); exit; } break; case 'self_reg': if (GroupManager::is_self_registration_allowed($userId, $my_group_id)) { GroupManager::subscribe_users($userId, $my_group_id); Display::addFlash(Display::return_message(get_lang('GroupNowMember'))); header("Location: {$currentUrl}"); exit; } break; case 'self_unreg': if (GroupManager::is_self_unregistration_allowed($userId, $my_group_id)) { GroupManager::unsubscribe_users($userId, $my_group_id); Display::addFlash(Display::return_message(get_lang('StudentDeletesHimself'))); header("Location: {$currentUrl}"); exit; } break; } }
/** * @param string $file * @param bool $updateSession options: * true: if the session exists it will be updated. * false: if session exists a new session will be created adding a counter session1, session2, etc * @param int $defaultUserId * @param mixed $logger * @param array $extraFields convert a file row to an extra field. Example in CSV file there's a SessionID then it will * converted to extra_external_session_id if you set this: array('SessionId' => 'extra_external_session_id') * @param string $extraFieldId * @param int $daysCoachAccessBeforeBeginning * @param int $daysCoachAccessAfterBeginning * @param int $sessionVisibility * @param array $fieldsToAvoidUpdate * @param bool $deleteUsersNotInList * @param bool $updateCourseCoaches * @param bool $sessionWithCoursesModifier * @param int $showDescription * @param array $teacherBackupList * @param array $groupBackup * @return array */ static function importCSV($file, $updateSession, $defaultUserId = null, $logger = null, $extraFields = array(), $extraFieldId = null, $daysCoachAccessBeforeBeginning = null, $daysCoachAccessAfterBeginning = null, $sessionVisibility = 1, $fieldsToAvoidUpdate = array(), $deleteUsersNotInList = false, $updateCourseCoaches = false, $sessionWithCoursesModifier = false, $addOriginalCourseTeachersAsCourseSessionCoaches = true, $removeAllTeachersFromCourse = true, $showDescription = null, &$teacherBackupList = array(), &$groupBackup = array()) { $content = file($file); $error_message = null; $session_counter = 0; if (empty($defaultUserId)) { $defaultUserId = api_get_user_id(); } $eol = PHP_EOL; if (PHP_SAPI != 'cli') { $eol = '<br />'; } $debug = false; if (isset($logger)) { $debug = true; } $extraParameters = null; if (!empty($daysCoachAccessBeforeBeginning) && !empty($daysCoachAccessAfterBeginning)) { $extraParameters .= ' , nb_days_access_before_beginning = ' . intval($daysCoachAccessBeforeBeginning); $extraParameters .= ' , nb_days_access_after_end = ' . intval($daysCoachAccessAfterBeginning); } if (!is_null($showDescription)) { $extraParameters .= ' , show_description = ' . intval($showDescription); } $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $sessions = array(); if (!api_strstr($content[0], ';')) { $error_message = get_lang('NotCSV'); } else { $tag_names = array(); foreach ($content as $key => $enreg) { $enreg = explode(';', trim($enreg)); if ($key) { foreach ($tag_names as $tag_key => $tag_name) { $sessions[$key - 1][$tag_name] = $enreg[$tag_key]; } } else { foreach ($enreg as $tag_name) { $tag_names[] = api_preg_replace('/[^a-zA-Z0-9_\\-]/', '', $tag_name); } if (!in_array('SessionName', $tag_names) || !in_array('DateStart', $tag_names) || !in_array('DateEnd', $tag_names)) { $error_message = get_lang('NoNeededData'); break; } } } $sessionList = array(); // Looping the sessions. foreach ($sessions as $enreg) { $user_counter = 0; $course_counter = 0; if (isset($extraFields) && !empty($extraFields)) { foreach ($extraFields as $original => $to) { $enreg[$to] = isset($enreg[$original]) ? $enreg[$original] : null; } } $session_name = Database::escape_string($enreg['SessionName']); // Default visibility $visibilityAfterExpirationPerSession = $sessionVisibility; if (isset($enreg['VisibilityAfterExpiration'])) { $visibility = $enreg['VisibilityAfterExpiration']; switch ($visibility) { case 'read_only': $visibilityAfterExpirationPerSession = SESSION_VISIBLE_READ_ONLY; break; case 'accessible': $visibilityAfterExpirationPerSession = SESSION_VISIBLE; break; case 'not_accessible': $visibilityAfterExpirationPerSession = SESSION_INVISIBLE; break; } } if (empty($session_name)) { continue; } $date_start = $enreg['DateStart']; $date_end = $enreg['DateEnd']; $session_category_id = isset($enreg['SessionCategory']) ? $enreg['SessionCategory'] : null; $sessionDescription = isset($enreg['SessionDescription']) ? $enreg['SessionDescription'] : null; $extraSessionParameters = null; if (!empty($sessionDescription)) { $extraSessionParameters = " , description = '" . Database::escape_string($sessionDescription) . "'"; } // Searching a general coach. if (!empty($enreg['Coach'])) { $coach_id = UserManager::get_user_id_from_username($enreg['Coach']); if ($coach_id === false) { // If the coach-user does not exist - I'm the coach. $coach_id = $defaultUserId; } } else { $coach_id = $defaultUserId; } if (!$updateSession) { // Always create a session. $unique_name = false; $i = 0; // Change session name, verify that session doesn't exist. $suffix = null; while (!$unique_name) { if ($i > 1) { $suffix = ' - ' . $i; } $sql = 'SELECT 1 FROM ' . $tbl_session . ' WHERE name="' . $session_name . $suffix . '"'; $rs = Database::query($sql); if (Database::result($rs, 0, 0)) { $i++; } else { $unique_name = true; $session_name .= $suffix; } } $sessionCondition = ''; if (!empty($session_category_id)) { $sessionCondition = "session_category_id = '{$session_category_id}',"; } // Creating the session. $sql = "INSERT IGNORE INTO {$tbl_session} SET\n name = '" . $session_name . "',\n id_coach = '{$coach_id}',\n access_start_date = '{$date_start}',\n access_end_date = '{$date_end}',\n visibility = '{$visibilityAfterExpirationPerSession}',\n {$sessionCondition}\n session_admin_id = " . intval($defaultUserId) . $extraParameters . $extraSessionParameters; Database::query($sql); $session_id = Database::insert_id(); if ($debug) { if ($session_id) { foreach ($enreg as $key => $value) { if (substr($key, 0, 6) == 'extra_') { //an extra field self::update_session_extra_field_value($session_id, substr($key, 6), $value); } } $logger->addInfo("Sessions - Session created: #{$session_id} - {$session_name}"); } else { $logger->addError("Sessions - Session NOT created: {$session_name}"); } } $session_counter++; } else { $sessionId = null; if (isset($extraFields) && !empty($extraFields) && !empty($enreg['extra_' . $extraFieldId])) { $sessionId = self::getSessionIdFromOriginalId($enreg['extra_' . $extraFieldId], $extraFieldId); if (empty($sessionId)) { $my_session_result = false; } else { $my_session_result = true; } } else { $my_session_result = self::get_session_by_name($enreg['SessionName']); } if ($my_session_result === false) { // Creating a session. $sql = "INSERT IGNORE INTO {$tbl_session} SET\n name = '{$session_name}',\n id_coach = '{$coach_id}',\n access_start_date = '{$date_start}',\n access_end_date = '{$date_end}',\n visibility = '{$visibilityAfterExpirationPerSession}',\n session_category_id = '{$session_category_id}' " . $extraParameters . $extraSessionParameters; Database::query($sql); // We get the last insert id. $my_session_result = SessionManager::get_session_by_name($enreg['SessionName']); $session_id = $my_session_result['id']; if ($session_id) { foreach ($enreg as $key => $value) { if (substr($key, 0, 6) == 'extra_') { //an extra field self::update_session_extra_field_value($session_id, substr($key, 6), $value); } } if ($debug) { $logger->addInfo("Sessions - #{$session_id} created: {$session_name}"); } // Delete session-user relation only for students $sql = "DELETE FROM {$tbl_session_user}\n WHERE session_id = '{$session_id}' AND relation_type <> " . SESSION_RELATION_TYPE_RRHH; Database::query($sql); $sql = "DELETE FROM {$tbl_session_course} WHERE session_id = '{$session_id}'"; Database::query($sql); // Delete session-course-user relationships students and coaches. if ($updateCourseCoaches) { $sql = "DELETE FROM {$tbl_session_course_user}\n WHERE session_id = '{$session_id}' AND status in ('0', '2')"; Database::query($sql); } else { // Delete session-course-user relation ships *only* for students. $sql = "DELETE FROM {$tbl_session_course_user}\n WHERE session_id = '{$session_id}' AND status <> 2"; Database::query($sql); } } } else { if ($debug) { $logger->addError("Sessions - Session to be updated: {$session_name}"); } // Updating the session. $params = array('id_coach' => $coach_id, 'access_start_date' => $date_start, 'access_end_date' => $date_end, 'visibility' => $visibilityAfterExpirationPerSession, 'session_category_id' => $session_category_id); if (!empty($sessionDescription)) { $params['description'] = $sessionDescription; } if (!empty($fieldsToAvoidUpdate)) { foreach ($fieldsToAvoidUpdate as $field) { unset($params[$field]); } } if (isset($sessionId) && !empty($sessionId)) { if (!empty($enreg['SessionName'])) { $params['name'] = $enreg['SessionName']; } $session_id = $sessionId; } else { $row = Database::query("SELECT id FROM {$tbl_session} WHERE name = '{$session_name}'"); list($session_id) = Database::fetch_array($row); } if ($session_id) { if ($debug) { $logger->addError("Sessions - Session to be updated #{$session_id}"); } $sessionInfo = api_get_session_info($session_id); $params['show_description'] = isset($sessionInfo['show_description']) ? $sessionInfo['show_description'] : intval($showDescription); if (!empty($daysCoachAccessBeforeBeginning) && !empty($daysCoachAccessAfterBeginning)) { if (empty($sessionInfo['nb_days_access_before_beginning']) || !empty($sessionInfo['nb_days_access_before_beginning']) && $sessionInfo['nb_days_access_before_beginning'] < $daysCoachAccessBeforeBeginning) { $params['nb_days_access_before_beginning'] = intval($daysCoachAccessBeforeBeginning); } if (empty($sessionInfo['nb_days_access_after_end']) || !empty($sessionInfo['nb_days_access_after_end']) && $sessionInfo['nb_days_access_after_end'] < $daysCoachAccessAfterBeginning) { $params['nb_days_access_after_end'] = intval($daysCoachAccessAfterBeginning); } } Database::update($tbl_session, $params, array('id = ?' => $session_id)); foreach ($enreg as $key => $value) { if (substr($key, 0, 6) == 'extra_') { //an extra field self::update_session_extra_field_value($session_id, substr($key, 6), $value); } } // Delete session-user relation only for students $sql = "DELETE FROM {$tbl_session_user}\n WHERE session_id = '{$session_id}' AND relation_type <> " . SESSION_RELATION_TYPE_RRHH; Database::query($sql); $sql = "DELETE FROM {$tbl_session_course} WHERE session_id = '{$session_id}'"; Database::query($sql); // Delete session-course-user relationships students and coaches. if ($updateCourseCoaches) { $sql = "DELETE FROM {$tbl_session_course_user}\n WHERE session_id = '{$session_id}' AND status in ('0', '2')"; Database::query($sql); } else { // Delete session-course-user relation ships *only* for students. $sql = "DELETE FROM {$tbl_session_course_user}\n WHERE session_id = '{$session_id}' AND status <> 2"; Database::query($sql); } } else { if ($debug) { $logger->addError("Sessions - Session not found"); } } } $session_counter++; } $sessionList[] = $session_id; $users = explode('|', $enreg['Users']); // Adding the relationship "Session - User" for students $userList = array(); if (is_array($users)) { foreach ($users as $user) { $user_id = UserManager::get_user_id_from_username($user); if ($user_id !== false) { $userList[] = $user_id; // Insert new users. $sql = "INSERT IGNORE INTO {$tbl_session_user} SET\n user_id = '{$user_id}',\n session_id = '{$session_id}',\n registered_at = '" . api_get_utc_datetime() . "'"; Database::query($sql); if ($debug) { $logger->addInfo("Sessions - Adding User #{$user_id} ({$user}) to session #{$session_id}"); } $user_counter++; } } } if ($deleteUsersNotInList) { // Getting user in DB in order to compare to the new list. $usersListInDatabase = self::get_users_by_session($session_id, 0); if (!empty($usersListInDatabase)) { if (empty($userList)) { foreach ($usersListInDatabase as $userInfo) { self::unsubscribe_user_from_session($session_id, $userInfo['user_id']); } } else { foreach ($usersListInDatabase as $userInfo) { if (!in_array($userInfo['user_id'], $userList)) { self::unsubscribe_user_from_session($session_id, $userInfo['user_id']); } } } } } $courses = explode('|', $enreg['Courses']); // See BT#6449 $onlyAddFirstCoachOrTeacher = false; if ($sessionWithCoursesModifier) { if (count($courses) >= 2) { // Only first teacher in course session; $onlyAddFirstCoachOrTeacher = true; // Remove all teachers from course. $removeAllTeachersFromCourse = false; } } foreach ($courses as $course) { $courseArray = bracketsToArray($course); $course_code = $courseArray[0]; if (CourseManager::course_exists($course_code)) { $courseInfo = api_get_course_info($course_code); $courseId = $courseInfo['real_id']; // Adding the course to a session. $sql = "INSERT IGNORE INTO {$tbl_session_course}\n SET c_id = '{$courseId}', session_id='{$session_id}'"; Database::query($sql); SessionManager::installCourse($session_id, $courseInfo['real_id']); if ($debug) { $logger->addInfo("Sessions - Adding course '{$course_code}' to session #{$session_id}"); } $course_counter++; $course_coaches = isset($courseArray[1]) ? $courseArray[1] : null; $course_users = isset($courseArray[2]) ? $courseArray[2] : null; $course_users = explode(',', $course_users); $course_coaches = explode(',', $course_coaches); // Checking if the flag is set TeachersWillBeAddedAsCoachInAllCourseSessions (course_edit.php) $addTeachersToSession = true; if (array_key_exists('add_teachers_to_sessions_courses', $courseInfo)) { $addTeachersToSession = $courseInfo['add_teachers_to_sessions_courses']; } // If any user provided for a course, use the users array. if (empty($course_users)) { if (!empty($userList)) { SessionManager::subscribe_users_to_session_course($userList, $session_id, $course_code); if ($debug) { $msg = "Sessions - Adding student list " . implode(', #', $userList) . " to course: '{$course_code}' and session #{$session_id}"; $logger->addInfo($msg); } } } // Adding coaches to session course user. if (!empty($course_coaches)) { $savedCoaches = array(); // only edit if add_teachers_to_sessions_courses is set. if ($addTeachersToSession) { if ($addOriginalCourseTeachersAsCourseSessionCoaches) { // Adding course teachers as course session teachers. $alreadyAddedTeachers = CourseManager::getTeacherListFromCourse($course_code); if (!empty($alreadyAddedTeachers)) { $teachersToAdd = array(); foreach ($alreadyAddedTeachers as $user) { $teachersToAdd[] = $user['username']; } $course_coaches = array_merge($course_coaches, $teachersToAdd); } } foreach ($course_coaches as $course_coach) { $coach_id = UserManager::get_user_id_from_username($course_coach); if ($coach_id !== false) { // Just insert new coaches SessionManager::updateCoaches($session_id, $courseId, array($coach_id), false); if ($debug) { $logger->addInfo("Sessions - Adding course coach: user #{$coach_id} ({$course_coach}) to course: '{$course_code}' and session #{$session_id}"); } $savedCoaches[] = $coach_id; } else { $error_message .= get_lang('UserDoesNotExist') . ' : ' . $course_coach . $eol; } } } // Custom courses/session coaches $teacherToAdd = null; // Only one coach is added. if ($onlyAddFirstCoachOrTeacher == true) { foreach ($course_coaches as $course_coach) { $coach_id = UserManager::get_user_id_from_username($course_coach); if ($coach_id !== false) { $teacherToAdd = $coach_id; break; } } // Un subscribe everyone that's not in the list. $teacherList = CourseManager::getTeacherListFromCourse($courseId); if (!empty($teacherList)) { foreach ($teacherList as $teacher) { if ($teacherToAdd != $teacher['user_id']) { $sql = "SELECT * FROM " . Database::get_main_table(TABLE_MAIN_COURSE_USER) . "\n WHERE\n user_id = " . $teacher['user_id'] . " AND\n course_code = '" . $course_code . "'\n "; $result = Database::query($sql); $userCourseData = Database::fetch_array($result, 'ASSOC'); $teacherBackupList[$teacher['user_id']][$course_code] = $userCourseData; $sql = "SELECT * FROM " . Database::get_course_table(TABLE_GROUP_USER) . "\n WHERE\n user_id = " . $teacher['user_id'] . " AND\n c_id = '" . $courseInfo['real_id'] . "'\n "; $result = Database::query($sql); while ($groupData = Database::fetch_array($result, 'ASSOC')) { $groupBackup['user'][$teacher['user_id']][$course_code][$groupData['group_id']] = $groupData; } $sql = "SELECT * FROM " . Database::get_course_table(TABLE_GROUP_TUTOR) . "\n WHERE\n user_id = " . $teacher['user_id'] . " AND\n c_id = '" . $courseInfo['real_id'] . "'\n "; $result = Database::query($sql); while ($groupData = Database::fetch_array($result, 'ASSOC')) { $groupBackup['tutor'][$teacher['user_id']][$course_code][$groupData['group_id']] = $groupData; } CourseManager::unsubscribe_user($teacher['user_id'], $course_code); } } } if (!empty($teacherToAdd)) { SessionManager::updateCoaches($session_id, $courseId, array($teacherToAdd), true); $userCourseCategory = ''; if (isset($teacherBackupList[$teacherToAdd]) && isset($teacherBackupList[$teacherToAdd][$course_code])) { $courseUserData = $teacherBackupList[$teacherToAdd][$course_code]; $userCourseCategory = $courseUserData['user_course_cat']; } CourseManager::subscribe_user($teacherToAdd, $course_code, COURSEMANAGER, 0, $userCourseCategory); if (isset($groupBackup['user'][$teacherToAdd]) && isset($groupBackup['user'][$teacherToAdd][$course_code]) && !empty($groupBackup['user'][$teacherToAdd][$course_code])) { foreach ($groupBackup['user'][$teacherToAdd][$course_code] as $data) { GroupManager::subscribe_users($teacherToAdd, $data['group_id'], $data['c_id']); } } if (isset($groupBackup['tutor'][$teacherToAdd]) && isset($groupBackup['tutor'][$teacherToAdd][$course_code]) && !empty($groupBackup['tutor'][$teacherToAdd][$course_code])) { foreach ($groupBackup['tutor'][$teacherToAdd][$course_code] as $data) { GroupManager::subscribe_tutors($teacherToAdd, $data['group_id'], $data['c_id']); } } } } // See BT#6449#note-195 // All coaches are added. if ($removeAllTeachersFromCourse) { $teacherToAdd = null; foreach ($course_coaches as $course_coach) { $coach_id = UserManager::get_user_id_from_username($course_coach); if ($coach_id !== false) { $teacherToAdd[] = $coach_id; } } if (!empty($teacherToAdd)) { // Deleting all course teachers and adding the only coach as teacher. $teacherList = CourseManager::getTeacherListFromCourse($courseId); if (!empty($teacherList)) { foreach ($teacherList as $teacher) { if (!in_array($teacher['user_id'], $teacherToAdd)) { $sql = "SELECT * FROM " . Database::get_main_table(TABLE_MAIN_COURSE_USER) . "\n WHERE\n user_id = " . $teacher['user_id'] . " AND\n course_code = '" . $course_code . "'\n "; $result = Database::query($sql); $userCourseData = Database::fetch_array($result, 'ASSOC'); $teacherBackupList[$teacher['user_id']][$course_code] = $userCourseData; $sql = "SELECT * FROM " . Database::get_course_table(TABLE_GROUP_USER) . "\n WHERE\n user_id = " . $teacher['user_id'] . " AND\n c_id = '" . $courseInfo['real_id'] . "'\n "; $result = Database::query($sql); while ($groupData = Database::fetch_array($result, 'ASSOC')) { $groupBackup['user'][$teacher['user_id']][$course_code][$groupData['group_id']] = $groupData; } $sql = "SELECT * FROM " . Database::get_course_table(TABLE_GROUP_TUTOR) . "\n WHERE\n user_id = " . $teacher['user_id'] . " AND\n c_id = '" . $courseInfo['real_id'] . "'\n "; $result = Database::query($sql); while ($groupData = Database::fetch_array($result, 'ASSOC')) { $groupBackup['tutor'][$teacher['user_id']][$course_code][$groupData['group_id']] = $groupData; } CourseManager::unsubscribe_user($teacher['user_id'], $course_code); } } } foreach ($teacherToAdd as $teacherId) { $userCourseCategory = ''; if (isset($teacherBackupList[$teacherId]) && isset($teacherBackupList[$teacherId][$course_code])) { $courseUserData = $teacherBackupList[$teacherId][$course_code]; $userCourseCategory = $courseUserData['user_course_cat']; } CourseManager::subscribe_user($teacherId, $course_code, COURSEMANAGER, 0, $userCourseCategory); if (isset($groupBackup['user'][$teacherId]) && isset($groupBackup['user'][$teacherId][$course_code]) && !empty($groupBackup['user'][$teacherId][$course_code])) { foreach ($groupBackup['user'][$teacherId][$course_code] as $data) { GroupManager::subscribe_users($teacherId, $data['group_id'], $data['c_id']); } } if (isset($groupBackup['tutor'][$teacherId]) && isset($groupBackup['tutor'][$teacherId][$course_code]) && !empty($groupBackup['tutor'][$teacherId][$course_code])) { foreach ($groupBackup['tutor'][$teacherId][$course_code] as $data) { GroupManager::subscribe_tutors($teacherId, $data['group_id'], $data['c_id']); } } } } } // Continue default behaviour. if ($onlyAddFirstCoachOrTeacher == false) { // Checking one more time see BT#6449#note-149 $coaches = SessionManager::getCoachesByCourseSession($session_id, $courseId); // Update coaches if only there's 1 course see BT#6449#note-189 if (empty($coaches) || count($courses) == 1) { foreach ($course_coaches as $course_coach) { $course_coach = trim($course_coach); $coach_id = UserManager::get_user_id_from_username($course_coach); if ($coach_id !== false) { // Just insert new coaches SessionManager::updateCoaches($session_id, $courseId, array($coach_id), false); if ($debug) { $logger->addInfo("Sessions - Adding course coach: user #{$coach_id} ({$course_coach}) to course: '{$course_code}' and session #{$session_id}"); } $savedCoaches[] = $coach_id; } else { $error_message .= get_lang('UserDoesNotExist') . ' : ' . $course_coach . $eol; } } } } } // Adding Students, updating relationship "Session - Course - User". $course_users = array_filter($course_users); if (!empty($course_users)) { foreach ($course_users as $user) { $user_id = UserManager::get_user_id_from_username($user); if ($user_id !== false) { SessionManager::subscribe_users_to_session_course(array($user_id), $session_id, $course_code); if ($debug) { $logger->addInfo("Sessions - Adding student: user #{$user_id} ({$user}) to course: '{$course_code}' and session #{$session_id}"); } } else { $error_message .= get_lang('UserDoesNotExist') . ': ' . $user . $eol; } } } $inserted_in_course[$course_code] = $courseInfo['title']; } } $access_url_id = api_get_current_access_url_id(); UrlManager::add_session_to_url($session_id, $access_url_id); $sql = "UPDATE {$tbl_session} SET nbr_users = '{$user_counter}', nbr_courses = '{$course_counter}' WHERE id = '{$session_id}'"; Database::query($sql); } } return array('error_message' => $error_message, 'session_counter' => $session_counter, 'session_list' => $sessionList); }
// Tool introduction Display::display_introduction_section(TOOL_GROUP); /* * Self-registration and un-registration */ $my_group_id = isset($_GET['group_id']) ? intval($_GET['group_id']) : null; $my_msg = isset($_GET['msg']) ? Security::remove_XSS($_GET['msg']) : null; $my_group = isset($_REQUEST['group']) ? Security::remove_XSS($_REQUEST['group']) : null; $my_get_id1 = isset($_GET['id1']) ? Security::remove_XSS($_GET['id1']) : null; $my_get_id2 = isset($_GET['id2']) ? Security::remove_XSS($_GET['id2']) : null; $my_get_id = isset($_GET['id']) ? Security::remove_XSS($_GET['id']) : null; if (isset($_GET['action'])) { switch ($_GET['action']) { case 'self_reg': if (GroupManager::is_self_registration_allowed($_SESSION['_user']['user_id'], $my_group_id)) { GroupManager::subscribe_users($_SESSION['_user']['user_id'], $my_group_id); Display::display_confirmation_message(get_lang('GroupNowMember')); } break; case 'self_unreg': if (GroupManager::is_self_unregistration_allowed($_SESSION['_user']['user_id'], $my_group_id)) { GroupManager::unsubscribe_users($_SESSION['_user']['user_id'], $my_group_id); Display::display_confirmation_message(get_lang('StudentDeletesHimself')); } break; case 'show_msg': Display::display_confirmation_message($my_msg); break; case 'warning_message': Display::display_warning_message($my_msg); break;