/** * Unsubscribe one or more users from a course * * @param mixed user_id or an array with user ids * @param string course code * @param int session id * @assert ('', '') === false * */ public static function unsubscribe_user($user_id, $course_code, $session_id = 0) { if (!is_array($user_id)) { $user_id = array($user_id); } if (count($user_id) == 0) { return; } if (!empty($session_id)) { $session_id = intval($session_id); } else { $session_id = api_get_session_id(); } $user_list = array(); // Cleaning the $user_id variable if (is_array($user_id)) { $new_user_id_list = array(); foreach ($user_id as $my_user_id) { $new_user_id_list[] = intval($my_user_id); } $new_user_id_list = array_filter($new_user_id_list); $user_list = $new_user_id_list; $user_ids = implode(',', $new_user_id_list); } else { $user_ids = intval($user_id); $user_list[] = $user_id; } $course_info = api_get_course_info($course_code); $course_id = $course_info['real_id']; // Unsubscribe user from all groups in the course. $sql = "DELETE FROM " . Database::get_course_table(TABLE_GROUP_USER) . "\n WHERE c_id = {$course_id} AND user_id IN (" . $user_ids . ")"; Database::query($sql); $sql = "DELETE FROM " . Database::get_course_table(TABLE_GROUP_TUTOR) . "\n WHERE c_id = {$course_id} AND user_id IN (" . $user_ids . ")"; Database::query($sql); // Erase user student publications (works) in the course - by André Boivin if (!empty($user_list)) { require_once api_get_path(SYS_CODE_PATH) . 'work/work.lib.php'; foreach ($user_list as $userId) { // Getting all work from user $workList = getWorkPerUser($userId); if (!empty($workList)) { foreach ($workList as $work) { $work = $work['work']; // Getting user results if (!empty($work->user_results)) { foreach ($work->user_results as $workSent) { deleteWorkItem($workSent['id'], $course_info); } } } } } } // Unsubscribe user from all blogs in the course. Database::query("DELETE FROM " . Database::get_course_table(TABLE_BLOGS_REL_USER) . " WHERE c_id = {$course_id} AND user_id IN (" . $user_ids . ")"); Database::query("DELETE FROM " . Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER) . " WHERE c_id = {$course_id} AND user_id IN (" . $user_ids . ")"); // Deleting users in forum_notification and mailqueue course tables $sql = "DELETE FROM " . Database::get_course_table(TABLE_FORUM_NOTIFICATION) . "\n WHERE c_id = {$course_id} AND user_id IN (" . $user_ids . ")"; Database::query($sql); $sql = "DELETE FROM " . Database::get_course_table(TABLE_FORUM_MAIL_QUEUE) . "\n WHERE c_id = {$course_id} AND user_id IN (" . $user_ids . ")"; Database::query($sql); // Unsubscribe user from the course. if (!empty($session_id)) { // Delete in table session_rel_course_rel_user $sql = "DELETE FROM " . Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER) . "\n WHERE\n session_id ='" . $session_id . "' AND\n c_id = '" . $course_id . "' AND\n user_id IN ({$user_ids})"; Database::query($sql); foreach ($user_list as $uid) { // check if a user is register in the session with other course $sql = "SELECT user_id FROM " . Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER) . "\n WHERE session_id='{$session_id}' AND user_id='{$uid}'"; $rs = Database::query($sql); if (Database::num_rows($rs) == 0) { // Delete in table session_rel_user $sql = "DELETE FROM " . Database::get_main_table(TABLE_MAIN_SESSION_USER) . "\n WHERE\n session_id ='" . $session_id . "' AND\n user_id = '{$uid}' AND\n relation_type<>" . SESSION_RELATION_TYPE_RRHH . ""; Database::query($sql); } } // Update the table session $sql = "SELECT COUNT(*) FROM " . Database::get_main_table(TABLE_MAIN_SESSION_USER) . "\n WHERE session_id = '" . $session_id . "' AND relation_type <> " . SESSION_RELATION_TYPE_RRHH; $row = Database::fetch_array(Database::query($sql)); $count = $row[0]; // number of users by session $sql = "UPDATE " . Database::get_main_table(TABLE_MAIN_SESSION) . " SET nbr_users = '{$count}'\n WHERE id = '" . $session_id . "'"; Database::query($sql); // Update the table session_rel_course $sql = "SELECT COUNT(*) FROM " . Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER) . "\n WHERE session_id = '{$session_id}' AND c_id = '{$course_id}' AND status<>2"; $row = Database::fetch_array(@Database::query($sql)); $count = $row[0]; // number of users by session and course $sql = "UPDATE " . Database::get_main_table(TABLE_MAIN_SESSION_COURSE) . "\n SET nbr_users = '{$count}'\n WHERE session_id = '{$session_id}' AND c_id = '{$course_id}'"; Database::query($sql); } else { $sql = "DELETE FROM " . Database::get_main_table(TABLE_MAIN_COURSE_USER) . "\n WHERE\n user_id IN (" . $user_ids . ") AND\n relation_type<>" . COURSE_RELATION_TYPE_RRHH . " AND\n c_id = '" . $course_id . "'"; Database::query($sql); // add event to system log $user_id = api_get_user_id(); Event::addEvent(LOG_UNSUBSCRIBE_USER_FROM_COURSE, LOG_COURSE_CODE, $course_code, api_get_utc_datetime(), $user_id); foreach ($user_list as $userId) { $userInfo = api_get_user_info($userId); Event::addEvent(LOG_UNSUBSCRIBE_USER_FROM_COURSE, LOG_USER_OBJECT, $userInfo, api_get_utc_datetime(), $user_id); } } }
api_not_allowed(); } $interbreadcrumb[] = array('url' => '../group/group.php', 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => '../group/group_space.php?gidReq=' . $group_id, 'name' => get_lang('GroupSpace') . ' ' . $group_properties['name']); } else { if (!api_is_allowed_to_edit(false, true)) { api_not_allowed(true); } } $interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH) . 'work/work.php?' . api_get_cidreq(), 'name' => get_lang('StudentPublications')); $interbreadcrumb[] = array('url' => '#', 'name' => $userInfo['complete_name']); Display::display_header(null); echo '<div class="actions">'; echo '<a href="' . api_get_path(WEB_CODE_PATH) . 'work/work.php?' . api_get_cidreq() . '&origin=' . $origin . '&gradebook=' . $gradebook . '">' . Display::return_icon('back.png', get_lang('BackToWorksList'), '', ICON_SIZE_MEDIUM) . '</a>'; echo '</div>'; $workPerUser = getWorkPerUser($studentId); $table = new HTML_Table(array('class' => 'data_table')); $column = 0; $row = 0; $headers = array(get_lang('Title'), get_lang('HandedOutDate'), get_lang('HandOutDateLimit'), get_lang('Score'), get_lang('Actions')); foreach ($headers as $header) { $table->setHeaderContents($row, $column, $header); $column++; } $row++; $column = 0; foreach ($workPerUser as $work) { $work = $work['work']; $scoreWeight = intval($work->qualification) == 0 ? null : $work->qualification; $workId = $work->id; $workExtraData = get_work_assignment_by_id($workId);
/** * Downloads all user files per user * @param int $userId * @param array $courseInfo * @return bool */ function downloadAllFilesPerUser($userId, $courseInfo) { $userInfo = api_get_user_info($userId); if (empty($userInfo) || empty($courseInfo)) { return false; } require_once api_get_path(LIBRARY_PATH).'pclzip/pclzip.lib.php'; $tempZipFile = api_get_path(SYS_ARCHIVE_PATH).api_get_unique_id().".zip"; $coursePath = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/work/'; $zip = new PclZip($tempZipFile); $workPerUser = getWorkPerUser($userId); if (!empty($workPerUser)) { $files = array(); foreach ($workPerUser as $work) { $work = $work['work']; foreach ($work->user_results as $userResult) { if (empty($userResult['url']) || empty($userResult['contains_file'])) { continue; } $data = getFileContents($userResult['id'], $courseInfo); if (!empty($data) && isset($data['path'])) { $files[basename($data['path'])] = array( 'title' => $data['title'], 'path' => $data['path'] ); } } } if (!empty($files)) { Session::write('files', $files); foreach ($files as $data) { $zip->add( $data['path'], PCLZIP_OPT_REMOVE_PATH, $coursePath, PCLZIP_CB_PRE_ADD, 'preAddAllWorkStudentCallback' ); } } // Start download of created file $name = basename(replace_dangerous_char($userInfo['complete_name'])).'.zip'; event_download($name.'.zip (folder)'); if (Security::check_abs_path($tempZipFile, api_get_path(SYS_ARCHIVE_PATH))) { DocumentManager::file_send_for_download($tempZipFile, true, $name); @unlink($tempZipFile); exit; } } exit; }