diff --git a/main/admin/add_users_to_session.php b/main/admin/add_users_to_session.php index fe91b83ae0..ce4b8f2165 100644 --- a/main/admin/add_users_to_session.php +++ b/main/admin/add_users_to_session.php @@ -99,7 +99,7 @@ function search_users($needle, $type) { // search users where username or firstname or lastname begins likes $needle $sql = 'SELECT user.user_id, username, lastname, firstname FROM '.$tbl_user.' user WHERE (username LIKE "'.$needle.'%" OR firstname LIKE "'.$needle.'%" - OR lastname LIKE "'.$needle.'%") AND user.status<>6 AND user.status<>'.DRH.''. + OR lastname LIKE "'.$needle.'%") AND user.status <> 6 AND user.status<>'.DRH.' '.$cond_user_id.' '. $order_clause. ' LIMIT 11'; break; @@ -163,7 +163,6 @@ function search_users($needle, $type) { $return .= '...
'; } } - $xajax_response -> addAssign('ajax_list_users_single','innerHTML',api_utf8_encode($return)); } else { global $nosessionUsersList; @@ -271,7 +270,8 @@ if ($ajax_search) { AND $tbl_session_rel_user.id_session = ".intval($id_session)." WHERE u.status<>".DRH." AND u.status<>6 AND - $tbl_session_rel_user.moved_to = 0 + $tbl_session_rel_user.moved_to = 0 AND + $tbl_session_rel_user.moved_status <> ".SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION." $order_clause"; if ($_configuration['multiple_access_urls']) { @@ -287,7 +287,8 @@ if ($ajax_search) { WHERE access_url_id = $access_url_id AND u.status<>".DRH." AND u.status<>6 AND - $tbl_session_rel_user.moved_to = 0 + $tbl_session_rel_user.moved_to = 0 AND + $tbl_session_rel_user.moved_status <> ".SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION." $order_clause"; } } @@ -407,7 +408,8 @@ if ($ajax_search) { $tbl_session_rel_user.relation_type<>".SESSION_RELATION_TYPE_RRHH." WHERE u.status <> ".DRH." AND u.status <> 6 AND - $tbl_session_rel_user.moved_to = 0 + $tbl_session_rel_user.moved_to = 0 AND + $tbl_session_rel_user.moved_status <> ".SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION." $order_clause"; if ($_configuration['multiple_access_urls']) { @@ -422,7 +424,9 @@ if ($ajax_search) { WHERE access_url_id = $access_url_id AND u.status<>".DRH." AND u.status<>6 AND - $tbl_session_rel_user.moved_to = 0 + $tbl_session_rel_user.moved_to = 0 AND + $tbl_session_rel_user.moved_status <> ".SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION." + $order_clause"; } } diff --git a/main/admin/change_user_session.php b/main/admin/change_user_session.php index 8fe388e01a..74f8996c3c 100644 --- a/main/admin/change_user_session.php +++ b/main/admin/change_user_session.php @@ -20,7 +20,6 @@ if (api_is_platform_admin()) { $sessions = SessionManager::get_sessions_by_coach(api_get_session_id()); } - $message = null; $session_to_select = array(); foreach ($sessions as $session) { @@ -32,6 +31,12 @@ foreach ($sessions as $session) { $session_name = api_get_session_name($session_id); $user_info = api_get_user_info($user_id); +//Check if user was already moved +$user_status = SessionManager::get_user_status_in_session($session_id, $user_id); +if (isset($user_status['moved_to']) && $user_status['moved_to'] != 0 || $user_status['moved_status'] == SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION) { + api_not_allowed(true); +} + $form = new FormValidator('change_user_session', 'post', api_get_self()); $form->addElement('hidden', 'user_id', $user_id); $form->addElement('hidden', 'id_session', $session_id); @@ -39,10 +44,9 @@ $form->addElement('header', get_lang('ChangeUserSession')); $form->addElement('label', get_lang('User'), ''.$user_info['complete_name'].''); $form->addElement('label', get_lang('CurrentSession'), $session_name); -$form->addElement('select', 'reason_id', get_lang('Action'), SessionManager::get_session_change_user_reasons()); -$form->addElement('select', 'new_session_id', get_lang('SessionDestination'), $session_to_select); +$form->addElement('select', 'reason_id', get_lang('Action'), SessionManager::get_session_change_user_reasons(), array('id' => 'reason_id')); +$form->addElement('select', 'new_session_id', get_lang('SessionDestination'), $session_to_select, array('id' => 'new_session_id')); -$form->addRule('new_session_id', get_lang('Required'), 'required'); $form->addElement('button', 'submit', get_lang('Change')); $content = $form->return_form(); @@ -62,6 +66,21 @@ $interbreadcrumb[] = array('url' => 'session_list.php','name' => get_lang('Sessi $interbreadcrumb[] = array('url' => 'resume_session.php?id_session='.$session_id,'name' => get_lang('SessionOverview')); $interbreadcrumb[] = array('url' => '#','name' => get_lang('ChangeUserSession')); +$htmlHeadXtra[] = ''; + $tpl = new Template(); $tpl->assign('message', $message); diff --git a/main/admin/resume_session.php b/main/admin/resume_session.php index 0381e3ec87..23ecb713bb 100644 --- a/main/admin/resume_session.php +++ b/main/admin/resume_session.php @@ -125,7 +125,19 @@ echo Display::page_subheader(get_lang('GeneralProperties').$url); : - + @@ -253,7 +265,7 @@ if ($session['nbr_users'] == 0) { $users = Database::store_result($result);*/ $orig_param = '&origin=resume_session&id_session='.$id_session; // change breadcrumb in destination page - $users = SessionManager::get_users_by_session($id_session, 0); + $users = SessionManager::get_users_by_session($id_session, 0); $reasons = SessionManager::get_session_change_user_reasons(); if (!empty($users)) @@ -268,14 +280,21 @@ if ($session['nbr_users'] == 0) { $row_class = null; $moved_date = '-'; - if (isset($user['moved_to']) && !empty($user['moved_to'])) { + $moved_link = ''.Display::return_icon('move.png', get_lang('ChangeUserSession')).' '; + + if (isset($user['moved_to']) && !empty($user['moved_to']) || $user['moved_status'] == SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION) { $information = $reasons[$user['moved_status']]; + + $moved_date = isset($user['moved_at']) && $user['moved_at'] != '0000-00-00 00:00:00' ? api_get_local_time($user['moved_at']) : '-'; $session_info = SessionManager::fetch($user['moved_to']); - $moved_date = isset($user['moved_at']) && $user['moved_at'] != '0000-00-00 00:00:00' ? api_get_local_time($user['moved_at']) : '-'; - $url = api_get_path(WEB_CODE_PATH).'admin/resume_session.php?id_session='.$session_info['id']; - $origin_destination = Display::url($session_info['name'], $url); + if ($session_info) { + $url = api_get_path(WEB_CODE_PATH).'admin/resume_session.php?id_session='.$session_info['id']; + $origin_destination = Display::url($session_info['name'], $url); + } $row_class = 'row_odd'; + + $moved_link = Display::return_icon('move_na.png', get_lang('ChangeUserSession')).' '; } $link_to_add_user_in_url = ''; @@ -297,7 +316,7 @@ if ($session['nbr_users'] == 0) { '.Display::return_icon('statistics.gif', get_lang('Reporting')).'  '.Display::return_icon('course.gif', get_lang('BlockCoursesForThisUser')).'  - '.Display::return_icon('user.png', get_lang('ChangeUserSession')).'  + '.$moved_link.' '.Display::return_icon('delete.png', get_lang('Delete')).' '.$link_to_add_user_in_url.' diff --git a/main/admin/session_course_user_list.php b/main/admin/session_course_user_list.php index f7790f3727..db0f9f9ed4 100644 --- a/main/admin/session_course_user_list.php +++ b/main/admin/session_course_user_list.php @@ -20,6 +20,7 @@ if (empty($id_session)) { } $course_info = api_get_course_info($_GET['course_code']); + if (empty($course_info)) { api_not_allowed(true); } @@ -27,7 +28,7 @@ if (empty($course_info)) { $course_code = $course_info['code']; $page = intval($_GET['page']); $action = $_REQUEST['action']; -$default_sort = api_sort_by_first_name() ? 'firstname':'lastname'; +$default_sort = api_sort_by_first_name() ? 'firstname':'lastname'; $sort = in_array($_GET['sort'], array('lastname','firstname','username')) ? $_GET['sort'] : $default_sort; $idChecked = (is_array($_GET['idChecked']) ? $_GET['idChecked'] : (is_array($_POST['idChecked']) ? $_POST['idChecked'] : null)); @@ -68,7 +69,7 @@ $from = $page * $limit; $is_western_name_order = api_is_western_name_order(); $Users = SessionManager::get_users_in_course_session($course_code, $id_session, $sort, $direction, $from, $limit); - + /* $sql = "SELECT DISTINCT u.user_id,".($is_western_name_order ? 'u.firstname, u.lastname' : 'u.lastname, u.firstname').", u.username, scru.id_user as is_subscribed @@ -109,7 +110,7 @@ if($page) { ?> | $limit) { +if ($nbr_results > $limit) { ?> '.SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION.' + ) '; + $where[] = ' AND session_course_user.course_code IS NOT NULL '; // 2 = coach // 0 = student if (isset($filter_by_status)) { $filter_by_status = intval($filter_by_status); - $filter_by_status_condition = " session_course_user.status = $filter_by_status AND "; + $filter_by_status_condition = " AND session_course_user.status = $filter_by_status AND "; } } else { $sql = 'SELECT DISTINCT course_rel_user.status as status_rel, user.user_id, course_rel_user.role, course_rel_user.tutor_id, user.* '; - $sql .= ' FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user '; - + $sql .= ' FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user '; $sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_COURSE_USER).' as course_rel_user ON user.user_id = course_rel_user.user_id AND course_rel_user.relation_type<>'.COURSE_RELATION_TYPE_RRHH.' AND course_rel_user.course_code="'.$course_code.'"'; @@ -1164,7 +1169,7 @@ class CourseManager { if (isset($filter_by_status) && $filter_by_status != '') { $filter_by_status = intval($filter_by_status); - $filter_by_status_condition = " course_rel_user.status = $filter_by_status AND "; + $filter_by_status_condition = " AND course_rel_user.status = $filter_by_status AND "; } } @@ -1172,15 +1177,35 @@ class CourseManager { if ($multiple_access_url) { $sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ON (au.user_id = user.user_id) '; } + + $keyword_condition = null; + if (!empty($keyword)) { + $where_keyword = array(); + $where_keyword[] = "firstname LIKE '%$keyword%'"; + $where_keyword[] = "lastname LIKE '%$keyword%'"; + $where_keyword[] = "username LIKE '%$keyword%'"; + $where_keyword[] = "official_code LIKE '%$keyword%'"; + $keyword_condition = ' AND ('.implode(' OR ', $where_keyword).') '; + } + + $where_condition = null; + if (!empty($where)) { + $where_condition = implode(' OR ', $where); + } + + $sql .= " WHERE 1=1 $filter_by_status_condition $where_condition $keyword_condition"; - $sql .= ' WHERE '.$filter_by_status_condition.' '.implode(' OR ', $where); - if ($multiple_access_url) { $current_access_url_id = api_get_current_access_url_id(); $sql .= " AND (access_url_id = $current_access_url_id ) "; } - $sql .= ' '.$order_by.' '.$limit; - + + $sql .= ' '.$order_by; + + if (!empty($keyword)) { + $sql .= ' '.$limit; + } + $rs = Database::query($sql); $users = array(); @@ -1195,11 +1220,9 @@ class CourseManager { if (isset($user['tutor_id'])) { $user_info['tutor_id'] = $user['tutor_id']; } - if (!empty($session_id)) { $user_info['status_session'] = $user['status_session']; } - $users[$user['user_id']] = $user_info; } } @@ -1213,8 +1236,7 @@ class CourseManager { * @param int $session_id * @return int */ - public static function get_users_count_in_course($course_code, $session_id = 0) { - // variable initialisation + public static function get_users_count_in_course($course_code, $session_id = 0) { $session_id = intval($session_id); $course_code = Database::escape_string($course_code); @@ -1224,7 +1246,13 @@ class CourseManager { $sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER).' as session_course_user ON user.user_id = session_course_user.id_user AND session_course_user.course_code = "'.$course_code.'" - AND session_course_user.id_session = '.$session_id; + AND session_course_user.id_session = '.$session_id.' + INNER JOIN '.Database::get_main_table(TABLE_MAIN_SESSION_USER).' as su + ON ( su.id_session = session_course_user.id_session AND + user.user_id = su.id_user AND + su.moved_to = 0 AND + su.moved_status <> '.SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION.' + )'; $where[] = ' session_course_user.course_code IS NOT NULL '; } else { diff --git a/main/inc/lib/main_api.lib.php b/main/inc/lib/main_api.lib.php index 2e27f96b1c..2bd56c02ae 100644 --- a/main/inc/lib/main_api.lib.php +++ b/main/inc/lib/main_api.lib.php @@ -1838,7 +1838,7 @@ function api_get_session_visibility($session_id) { if (Database::num_rows($result) > 0 ) { $row = Database::fetch_array($result, 'ASSOC'); - $visibility = $row['visibility']; + $visibility = $original_visibility = $row['visibility']; //I don't care the field visibility if ($row['date_start'] == '0000-00-00' && $row['date_end'] == '0000-00-00') { @@ -1910,7 +1910,14 @@ function api_get_session_visibility($session_id) { $visibility = SESSION_INVISIBLE; } } + } else { + //Student - check the moved_to variable + $user_status = SessionManager::get_user_status_in_session($session_id, api_get_user_id()); + if (isset($user_status['moved_to']) && $user_status['moved_to'] != 0) { + return $original_visibility; + } } + } else { $visibility = SESSION_INVISIBLE; } @@ -2614,10 +2621,6 @@ function api_is_allowed_to_session_edit($tutor = false, $coach = false) { // Get the session visibility $session_visibility = api_get_session_visibility($session_id); // if 5 the session is still available - //@todo We could load the session_rel_course_rel_user permission to increase the level of detail. - //echo api_get_user_id(); - //echo api_get_course_id(); - switch ($session_visibility) { case SESSION_VISIBLE_READ_ONLY: // 1 return false; @@ -2625,7 +2628,7 @@ function api_is_allowed_to_session_edit($tutor = false, $coach = false) { return true; case SESSION_INVISIBLE: // 3 return false; - case SESSION_AVAILABLE: //5 + case SESSION_AVAILABLE: //4 return true; } diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 5aa643a221..cf58d3247f 100644 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -675,6 +675,7 @@ class SessionManager { $enreg_user = Database::escape_string($enreg_user); $insert_sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user(id_session, course_code, id_user, visibility, status) VALUES('$id_session','$enreg_course','$enreg_user','$session_visibility', '0')"; Database::query($insert_sql); + if(Database::affected_rows()) { $nbr_users++; } @@ -697,10 +698,14 @@ class SessionManager { // Insert missing users into session $nbr_users = 0; foreach ($user_list as $enreg_user) { - $enreg_user = Database::escape_string($enreg_user); - $nbr_users++; - $insert_sql = "INSERT IGNORE INTO $tbl_session_rel_user (id_session, id_user) VALUES ('$id_session','$enreg_user')"; - Database::query($insert_sql); + $enreg_user = Database::escape_string($enreg_user); + $insert_sql = "INSERT IGNORE INTO $tbl_session_rel_user (id_session, id_user) VALUES ('$id_session','$enreg_user')"; + Database::query($insert_sql); + + //Reset moved_to just in case + $update_sql = "UPDATE $tbl_session_rel_user SET moved_to = 0 , moved_status = 0, moved_at ='0000-00-00 00:00:00' WHERE id_session = $id_session AND id_user = $enreg_user"; + Database::query($update_sql); + $nbr_users++; } // update number of users in the session @@ -713,6 +718,8 @@ class SessionManager { $update_sql = "UPDATE $tbl_session SET nbr_users= nbr_users + $nbr_users WHERE id='$id_session' "; Database::query($update_sql); } + + } function subscribe_users_to_session_course($user_list, $session_id, $course_code, $session_visibility = SESSION_VISIBLE_READ_ONLY ) { @@ -1642,7 +1649,7 @@ class SessionManager { * @param $session_id * @return unknown_type */ - public static function get_user_status_in_session($user_id, $course_code, $session_id) { + public static function get_user_status_in_course_session($user_id, $course_code, $session_id) { $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $sql = "SELECT session_rcru.status @@ -1659,6 +1666,17 @@ class SessionManager { } return $status; } + + static function get_user_status_in_session($session_id, $user_id) { + $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); + $sql = "SELECT * FROM $tbl_session_rel_user WHERE id_user = $user_id AND id_session = $session_id"; + $result = Database::query($sql); + if (Database::num_rows($result)) { + $result = Database::store_result($result, 'ASSOC'); + return $result[0]; + } + return array(); + } function get_all_sessions_by_promotion($id) { $t = Database::get_main_table(TABLE_MAIN_SESSION); @@ -1846,6 +1864,9 @@ class SessionManager { static function protect_session_edit($id) { api_protect_admin_script(true); $session_info = self::fetch($id); + if (empty($session_info)) { + api_not_allowed(true); + } if (!api_is_platform_admin() && api_get_setting('allow_session_admins_to_manage_all_sessions') != 'true') { if ($session_info['session_admin_id'] != api_get_user_id()) { api_not_allowed(true); @@ -1863,22 +1884,30 @@ class SessionManager { return Database::store_result($result); } - /* Add those changes in a table */ + /** + * @todo Add constatns in a DB table + */ static function get_session_change_user_reasons() { return array ( - self::SESSION_CHANGE_USER_REASON_SCHEDULE => get_lang('ScheduleChange'), - self::SESSION_CHANGE_USER_REASON_CLASSROOM => get_lang('ClassRoomChange'), - self::SESSION_CHANGE_USER_REASON_LOCATION => get_lang('LocationChange'), + self::SESSION_CHANGE_USER_REASON_SCHEDULE => get_lang('ScheduleChanged'), + self::SESSION_CHANGE_USER_REASON_CLASSROOM => get_lang('ClassRoomChanged'), + self::SESSION_CHANGE_USER_REASON_LOCATION => get_lang('LocationChanged'), self::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION => get_lang('EnrollmentAnnulation'), ); } + /** + * Gets the reason name + * @param int reason id + */ static function get_session_change_user_reason($id) { $reasons = self::get_session_change_user_reasons(); - return isset($reasons[$id]) ? $reasons[$id] : null; - + return isset($reasons[$id]) ? $reasons[$id] : null; } + /** + * Changes the user from one session to another due a reason + */ static function change_user_session($user_id, $old_session_id, $new_session_id, $reason_id) { if (!empty($user_id) && !empty($old_session_id) && !empty($new_session_id)) { $user_id = intval($user_id); @@ -1916,29 +1945,35 @@ class SessionManager { switch ($reason_id) { case self::SESSION_CHANGE_USER_REASON_SCHEDULE: case self::SESSION_CHANGE_USER_REASON_CLASSROOM: - case self::SESSION_CHANGE_USER_REASON_LOCATION: - break; + case self::SESSION_CHANGE_USER_REASON_LOCATION: + //Adding to the new session + self::suscribe_users_to_session($new_session_id, array($user_id), null, false); + + //Setting move_to if session was provided + $sql = "UPDATE $tbl_session_rel_user SET moved_to = '$new_session_id' + WHERE id_session = '$old_session_id' AND id_user ='$user_id'"; + Database::query($sql); + break; case self::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION: UserManager::deactivate_users(array($user_id)); break; } - //Adding to the new session - self::suscribe_users_to_session($new_session_id, array($user_id), null, false); - $now = api_get_utc_datetime(); - $sql = "UPDATE $tbl_session_rel_user SET moved_to = '$new_session_id', moved_at = '$now' - WHERE id_session = '$old_session_id' AND id_user ='$user_id'"; - Database::query($sql); - - $sql = "UPDATE $tbl_session_rel_user SET moved_status = $reason_id + $now = api_get_utc_datetime(); + //Setting the moved_status + $sql = "UPDATE $tbl_session_rel_user SET moved_status = $reason_id, moved_at = '$now' WHERE id_session = '$old_session_id' AND id_user ='$user_id'"; - Database::query($sql); + Database::query($sql); return true; } return; } + + /** + * Get users inside a course session + */ static function get_users_in_course_session($course_code, $id_session, $sort, $direction, $from = null, $limit = null) { $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); @@ -1954,9 +1989,9 @@ class SessionManager { //Select the number of users $sql = " SELECT DISTINCT u.user_id,".($is_western_name_order ? 'u.firstname, u.lastname' : 'u.lastname, u.firstname').", u.username, scru.id_user as is_subscribed FROM $tbl_session_rel_user sru INNER JOIN $tbl_user u ON (u.user_id=sru.id_user) - LEFT JOIN $tbl_session_rel_course_rel_user scru ON (u.user_id = scru.id_user AND scru.course_code = '".$course_code."' ) - WHERE sru.id_session = '$id_session' AND - sru.moved_to = 0 AND + LEFT JOIN $tbl_session_rel_course_rel_user scru ON (u.user_id = scru.id_user AND scru.course_code = '".$course_code."' ) + WHERE sru.id_session = '$id_session' AND + sru.moved_to = 0 AND sru.moved_status <> ".SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION." AND sru.relation_type<>".SESSION_RELATION_TYPE_RRHH; $sql .= " ORDER BY $sort $direction "; @@ -1981,7 +2016,7 @@ class SessionManager { srcru.id_session = sru.id_session AND srcru.course_code = '".Database::escape_string($course_code)."' AND srcru.id_session = '".intval($id_session)."' AND - sru.moved_to = 0 AND + (sru.moved_to = 0 AND sru.moved_status <> ".SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION.") AND sru.relation_type<>".SESSION_RELATION_TYPE_RRHH; $result = Database::query($sql); @@ -1991,6 +2026,12 @@ class SessionManager { return 0; } + /** + * Get the list of coaches (only user ids) + * @param string course_code + * @param in session_id + * @return array + */ static function get_session_course_coaches($course_code, $session_id) { $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); @@ -2002,9 +2043,9 @@ class SessionManager { session_rcru.course_code ='".Database::escape_string($course_code)."' AND session_rcru.status=2"; $result = Database::query($sql); - return Database::store_result($result); - + return Database::store_result($result); } + static function get_session_course_coaches_to_string($course_code, $session_id) { $coaches = self::get_session_course_coaches($course_code, $session_id); if (!empty($coaches)) { @@ -2030,10 +2071,10 @@ class SessionManager { if (!empty($id_session) && !empty($course_code)) { - Database::query("DELETE FROM $tbl_session_rel_course WHERE id_session='$id_session' AND course_code IN($course_code)"); + Database::query("DELETE FROM $tbl_session_rel_course WHERE id_session='$id_session' AND course_code = '$course_code'"); $nbr_affected_rows=Database::affected_rows(); - Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE id_session='$id_session' AND course_code IN($course_code)"); + Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE id_session='$id_session' AND course_code = '$course_code'"); Database::query("UPDATE $tbl_session SET nbr_courses=nbr_courses-$nbr_affected_rows WHERE id='$id_session'"); } } diff --git a/main/inc/local.inc.php b/main/inc/local.inc.php index 36914c465d..cfd6917b2d 100644 --- a/main/inc/local.inc.php +++ b/main/inc/local.inc.php @@ -883,7 +883,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // this user has no status related to this course // The user is subscribed in a session? The user is a Session coach a Session admin ? - $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); + $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE); $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER); @@ -894,7 +894,8 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { session_rcru.course_code = '$_cid' AND session_rcru.id_user = '$user_id' AND session_rcru.id_session = $session_id AND - session_rcru.status = 2"; + session_rcru.status = 2 + "; $result = Database::query($sql); $row = Database::store_result($result); @@ -909,16 +910,16 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { $is_sessionAdmin = true; } else { //Im a coach or a student? - $sql = "SELECT id_user, status FROM ".$tbl_session_course_user." + $sql = "SELECT cu.id_user, cu.status FROM $tbl_session_course_user cu WHERE course_code = '$_cid' AND - id_user = '".$user_id."' AND - id_session = '".$session_id."' + cu.id_user = '".$user_id."' AND + cu.id_session = '".$session_id."' LIMIT 1"; $result = Database::query($sql); if (Database::num_rows($result)) { $row = Database::fetch_array($result, 'ASSOC'); - + $session_course_status = $row['status']; switch ($session_course_status) { @@ -936,13 +937,14 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { } Session::write('_courseUser', $_courseUser); break; - case '0': //student + case '0': //Student $_courseUser['role'] = ''; $is_courseMember = true; $is_courseTutor = false; $is_courseAdmin = false; $is_courseCoach = false; $is_sessionAdmin = false; + Session::write('_courseUser', $_courseUser); break; default: @@ -1016,7 +1018,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { if ($session_id != 0) { if (!$is_platformAdmin) { // admin is not affected to the invisible session mode - $session_visibility = api_get_session_visibility($session_id); + $session_visibility = api_get_session_visibility($session_id); switch ($session_visibility) { case SESSION_INVISIBLE: diff --git a/main/user/subscribe_user.php b/main/user/subscribe_user.php index 4ab3017592..0d52d3b9d2 100644 --- a/main/user/subscribe_user.php +++ b/main/user/subscribe_user.php @@ -16,7 +16,6 @@ $current_course_tool = TOOL_USER; // the section (for the tabs) $this_section = SECTION_COURSES; - // notice for unauthorized people. api_protect_course_script(true); @@ -40,9 +39,6 @@ if ($_GET['keyword']) { Display :: display_header($tool_name, "User"); -// api_display_tool_title($tool_name); - - // Build search-form echo '
'; @@ -77,13 +73,11 @@ $list_not_register_user=''; if (isset ($_REQUEST['register'])) { if (isset($_REQUEST['type']) && $_REQUEST['type']=='teacher') { - if (!empty($current_session_id)) { $result_simple_sub = SessionManager::set_coach_to_course_session(intval($_REQUEST['user_id']), $current_session_id, $_course['sysCode']); } else { $result_simple_sub = CourseManager :: subscribe_user(intval($_REQUEST['user_id']), $_course['sysCode'],COURSEMANAGER); } - } else { $result_simple_sub=CourseManager :: subscribe_user(intval($_REQUEST['user_id']), $_course['sysCode']); } @@ -180,12 +174,9 @@ if (!empty($_SESSION['session_user_name'])) { unset($_SESSION['session_user_name']); } - - $is_western_name_order = api_is_western_name_order(); $sort_by_first_name = api_sort_by_first_name(); - // Build table $table = new SortableTable('subscribe_users', 'get_number_of_users', 'get_user_data', ($is_western_name_order xor $sort_by_first_name) ? 3 : 2); $parameters['keyword'] = Security::remove_XSS($_REQUEST['keyword']); @@ -359,20 +350,7 @@ function get_number_of_users() { if ($res) { $row = Database::fetch_row($res); $count_user = $row[0]; - } - - /* @todo seems not to be used - // we add 1 for every additional user (a user where the keyword matches one of the additional profile fields) - // that is not yet in the course and not yet in the search result - if (isset ($_REQUEST['keyword']) AND api_get_setting('ProfilingFilterAddingUsers') == 'true') { - foreach($additional_users as $additional_user_key=>$additional_user_value){ - if (!in_array($additional_user_key,$users) AND !in_array($additional_user_key,$users_of_course)){ - $result++; - } - } - } - */ - + } return $count_user; } /** @@ -413,8 +391,7 @@ function get_user_data($from, $number_of_items, $column, $direction) { u.active AS col4, u.user_id AS col5"; } - - + if (isset($_REQUEST['type']) && $_REQUEST['type']=='teacher') { // adding a teacher through a session if (!empty($_SESSION["id_session"])) { @@ -640,7 +617,7 @@ function active_filter($active, $url_params, $row) { $image='error'; } if ($row['0']<>$_user['user_id']) { // you cannot lock yourself out otherwise you could disable all the accounts including your own => everybody is locked out and nobody can change it anymore. - $result = '
'.Display::return_icon($image.'.png', get_lang(ucfirst($action)), array('border'=>'0', 'style'=>'vertical-align: middle;') , 16).'
'; + $result = Display::return_icon($image.'.png', get_lang(ucfirst($action)), array('border'=>'0', 'style'=>'vertical-align: middle;') , 16); } return $result; } diff --git a/main/user/user.php b/main/user/user.php index a113b8a5ed..6533905280 100644 --- a/main/user/user.php +++ b/main/user/user.php @@ -48,7 +48,7 @@ if (!api_is_platform_admin(true)) { /* Constants and variables */ -$course_code = Database::escape_string(api_get_course_id()); +$course_code = api_get_course_id(); $session_id = api_get_session_id(); $is_western_name_order = api_is_western_name_order(); $sort_by_first_name = api_sort_by_first_name(); @@ -134,13 +134,17 @@ if (api_is_allowed_to_edit(null, true)) { if (api_get_session_id()) { $table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); + $table_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $sql_query = "SELECT DISTINCT user.user_id, ".($is_western_name_order ? "user.firstname, user.lastname" : "user.lastname, user.firstname").", user.username, $select_email_condition phone, user.official_code, active $legal - FROM $table_session_course_user as session_course_user, $table_users as user "; + FROM $table_session_course_user as session_course_user, $table_users as user, $table_session_user as su"; if ($_configuration['multiple_access_urls']) { $sql_query .= ' , '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au '; } - $sql_query .=" WHERE course_code = '$course_code' AND session_course_user.id_user = user.user_id "; - $sql_query .= ' AND id_session = '.$session_id; + $sql_query .=" WHERE course_code = '$course_code' AND + session_course_user.id_user = user.user_id AND + su.id_user = session_course_user.id_user AND session_course_user.id_session = su.id_session AND + su.moved_to = 0 AND su.moved_status <> ".SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION." AND + session_course_user.id_session = $session_id"; if ($_configuration['multiple_access_urls']) { $sql_query .= " AND user.user_id = au.user_id AND access_url_id = $current_access_url_id "; @@ -343,7 +347,6 @@ if (api_is_allowed_to_edit(null, true)) { } } - /* FUNCTIONS */ function display_user_search_form() { @@ -354,10 +357,6 @@ function display_user_search_form() { echo ''; } -if (!$is_allowed_in_course) { - api_not_allowed(true); -} - /* Header */ if ($origin != 'learnpath') { if (isset($_GET['keyword']) && !empty($_GET['keyword'])) { @@ -416,31 +415,10 @@ if ( api_is_allowed_to_edit(null, true)) { /** * * Get the users to display on the current page. */ -function get_number_of_users() { - $counter = 0; - if (!empty($_SESSION["id_session"])){ - $a_course_users = CourseManager :: get_user_list_from_course_code($_SESSION['_course']['id'], $_SESSION['id_session']); - - } else { - $a_course_users = CourseManager :: get_user_list_from_course_code($_SESSION['_course']['id'], 0); - } - foreach ($a_course_users as $user_id => $o_course_user) { - if ((isset($_GET['keyword']) && search_keyword($o_course_user['firstname'], $o_course_user['lastname'], $o_course_user['username'], $o_course_user['official_code'], $_GET['keyword'])) || !isset($_GET['keyword']) || empty($_GET['keyword'])) { - $counter++; - } - } - return $counter; -} - -function search_keyword($firstname, $lastname, $username, $official_code, $keyword) { - if (api_strripos($firstname, $keyword) !== false || api_strripos($lastname, $keyword) !== false || api_strripos($username, $keyword) !== false || api_strripos($official_code, $keyword) !== false) { - return true; - } else { - return false; - } +function get_number_of_users() { + return CourseManager::get_users_count_in_course(api_get_course_id(), api_get_session_id(), null, null, null, $_GET['keyword']); } - /** * Get the users to display on the current page. */ @@ -453,9 +431,7 @@ function get_user_data($from, $number_of_items, $column, $direction) { $a_users = array(); // limit - if (!isset($_GET['keyword']) || empty($_GET['keyword'])) { - $limit = 'LIMIT '.intval($from).','.intval($number_of_items); - } + $limit = 'LIMIT '.intval($from).','.intval($number_of_items); if (!in_array($direction, array('ASC', 'DESC'))) { $direction = 'ASC'; @@ -494,86 +470,83 @@ function get_user_data($from, $number_of_items, $column, $direction) { $session_id = api_get_session_id(); $course_code = api_get_course_id(); - $a_course_users = CourseManager :: get_user_list_from_course_code($course_code, $session_id, $limit, $order_by); + $a_course_users = CourseManager :: get_user_list_from_course_code($course_code, $session_id, $limit, $order_by, null, $_REQUEST['keyword']); foreach ($a_course_users as $user_id => $o_course_user) { - if ((isset($_GET['keyword']) && search_keyword($o_course_user['firstname'], $o_course_user['lastname'], $o_course_user['username'], $o_course_user['official_code'], $_GET['keyword'])) || !isset($_GET['keyword']) || empty($_GET['keyword'])) { - - $groups_name = GroupManager :: get_user_group_name($user_id); - $temp = array(); - if (api_is_allowed_to_edit(null, true)) { - //if (api_get_setting('allow_user_course_subscription_by_course_admin') == 'true') { - $temp[] = $user_id; - //} - $image_path = UserManager::get_user_picture_path_by_id($user_id, 'web', false, true); - $user_profile = UserManager::get_picture_user($user_id, $image_path['file'], 22, USER_IMAGE_SIZE_SMALL, ' width="22" height="22" '); - if (!api_is_anonymous()) { - $photo = ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; - } else { - $photo = ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; - } - - $temp[] = $photo; - $temp[] = $o_course_user['official_code']; - - if ($is_western_name_order) { - $temp[] = $o_course_user['firstname']; - $temp[] = $o_course_user['lastname']; - } else { - $temp[] = $o_course_user['lastname']; - $temp[] = $o_course_user['firstname']; - } + $groups_name = GroupManager :: get_user_group_name($user_id); + $temp = array(); + if (api_is_allowed_to_edit(null, true)) { + //if (api_get_setting('allow_user_course_subscription_by_course_admin') == 'true') { + $temp[] = $user_id; + //} + $image_path = UserManager::get_user_picture_path_by_id($user_id, 'web', false, true); + $user_profile = UserManager::get_picture_user($user_id, $image_path['file'], 22, USER_IMAGE_SIZE_SMALL, ' width="22" height="22" '); + if (!api_is_anonymous()) { + $photo = ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; + } else { + $photo = ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; + } - $temp[] = $o_course_user['username']; - $temp[] = isset($o_course_user['role']) ? $o_course_user['role'] : null; //Description - $temp[] = implode(', ', $groups_name); //Group + $temp[] = $photo; + $temp[] = $o_course_user['official_code']; - // Status - $default_status = '-'; - if ((isset($o_course_user['status_rel']) && $o_course_user['status_rel'] == 1) || (isset($o_course_user['status_session']) && $o_course_user['status_session'] == 2)) { - $default_status = get_lang('CourseManager'); - } elseif (isset($o_course_user['tutor_id']) && $o_course_user['tutor_id'] == 1) { - $default_status = get_lang('Tutor'); - } - $temp[] = $default_status; - - //Active - $temp[] = $o_course_user['active']; - + if ($is_western_name_order) { + $temp[] = $o_course_user['firstname']; + $temp[] = $o_course_user['lastname']; + } else { + $temp[] = $o_course_user['lastname']; + $temp[] = $o_course_user['firstname']; + } + + $temp[] = $o_course_user['username']; + $temp[] = isset($o_course_user['role']) ? $o_course_user['role'] : null; //Description + $temp[] = implode(', ', $groups_name); //Group + + // Status + $default_status = '-'; + if ((isset($o_course_user['status_rel']) && $o_course_user['status_rel'] == 1) || (isset($o_course_user['status_session']) && $o_course_user['status_session'] == 2)) { + $default_status = get_lang('CourseManager'); + } elseif (isset($o_course_user['tutor_id']) && $o_course_user['tutor_id'] == 1) { + $default_status = get_lang('Tutor'); + } + $temp[] = $default_status; + + //Active + $temp[] = $o_course_user['active']; + + //User id for actions + $temp[] = $user_id; + } else { + $image_path = UserManager::get_user_picture_path_by_id($user_id, 'web', false, true); + $image_repository = $image_path['dir']; + $existing_image = $image_path['file']; + if (!api_is_anonymous()) { + $photo= ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; + } else { + $photo= ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; + } + $temp[] = $user_id; + $temp[] = $photo; + $temp[] = $o_course_user['official_code']; + + if ($is_western_name_order) { + $temp[] = $o_course_user['firstname']; + $temp[] = $o_course_user['lastname']; + } else { + $temp[] = $o_course_user['lastname']; + $temp[] = $o_course_user['firstname']; + } + $temp[] = $o_course_user['username']; + $temp[] = $o_course_user['role']; + $temp[] = implode(', ', $groups_name);//Group + + if ($course_info['unsubscribe'] == 1) { //User id for actions - $temp[] = $user_id; - } else { - $image_path = UserManager::get_user_picture_path_by_id($user_id, 'web', false, true); - $image_repository = $image_path['dir']; - $existing_image = $image_path['file']; - if (!api_is_anonymous()) { - $photo= ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; - } else { - $photo= ''.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).''; - } $temp[] = $user_id; - $temp[] = $photo; - $temp[] = $o_course_user['official_code']; - - if ($is_western_name_order) { - $temp[] = $o_course_user['firstname']; - $temp[] = $o_course_user['lastname']; - } else { - $temp[] = $o_course_user['lastname']; - $temp[] = $o_course_user['firstname']; - } - $temp[] = $o_course_user['username']; - $temp[] = $o_course_user['role']; - $temp[] = implode(', ', $groups_name);//Group - - if ($course_info['unsubscribe'] == 1) { - //User id for actions - $temp[] = $user_id; - } - //$temp[] = $o_course_user['official_code']; - } - $a_users[$user_id] = $temp; - } + } + //$temp[] = $o_course_user['official_code']; + } + $a_users[$user_id] = $temp; } return $a_users; } @@ -605,7 +578,6 @@ function active_filter($active, $url_params, $row) { return $result; } - /** * Build the modify-column of the table * @param int $user_id The user id