Adding more fixes see #4871

skala
Julio Montoya 14 years ago
parent 0914e97f79
commit ea7a661df9
  1. 16
      main/admin/add_users_to_session.php
  2. 27
      main/admin/change_user_session.php
  3. 33
      main/admin/resume_session.php
  4. 7
      main/admin/session_course_user_list.php
  5. 2
      main/course_info/legal.php
  6. 66
      main/inc/lib/course.lib.php
  7. 15
      main/inc/lib/main_api.lib.php
  8. 101
      main/inc/lib/sessionmanager.lib.php
  9. 18
      main/inc/local.inc.php
  10. 29
      main/user/subscribe_user.php
  11. 192
      main/user/user.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 .= '...<br />';
}
}
$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";
}
}

@ -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'), '<b>'.$user_info['complete_name'].'</b>');
$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[] = '<script>
$(document).ready(function() {
$("#reason_id").change(function() {
value = $(this).val();
if (value == "'.SessionManager::SESSION_CHANGE_USER_REASON_ENROLLMENT_ANNULATION.'") {
$("#new_session_id").parent().parent().hide();
} else {
$("#new_session_id").parent().parent().show();
}
});
});
</script>';
$tpl = new Template();
$tpl->assign('message', $message);

@ -125,7 +125,19 @@ echo Display::page_subheader(get_lang('GeneralProperties').$url);
<?php echo api_ucfirst(get_lang('SessionVisibility')) ?> :
</td>
<td>
<?php if ($session['visibility']==1) echo get_lang('ReadOnly'); elseif($session['visibility']==2) echo get_lang('Visible');elseif($session['visibility']==3) echo api_ucfirst(get_lang('Invisible')) ?>
<?php
if (isset($session['date_end']) && $session['date_end'] != '00-00-0000') {
if ($session['visibility'] == 1)
echo get_lang('ReadOnly');
elseif($session['visibility'] == 2)
echo get_lang('Visible');
elseif($session['visibility'] == 3)
echo api_ucfirst(get_lang('Invisible')) ;
} else {
//By default course sessions can be access normally see function api_get_session_visibility() when no date_end is proposed
echo get_lang('Visible');
}
?>
</td>
</tr>
@ -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 = '<a href="change_user_session.php?user_id='.$user['user_id'].'&id_session='.$id_session.'">'.Display::return_icon('move.png', get_lang('ChangeUserSession')).'</a>&nbsp;';
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')).'&nbsp;';
}
$link_to_add_user_in_url = '';
@ -297,7 +316,7 @@ if ($session['nbr_users'] == 0) {
<td>
<a href="../mySpace/myStudents.php?student='.$user['user_id'].''.$orig_param.'">'.Display::return_icon('statistics.gif', get_lang('Reporting')).'</a>&nbsp;
<a href="session_course_user.php?id_user='.$user['user_id'].'&id_session='.$id_session.'">'.Display::return_icon('course.gif', get_lang('BlockCoursesForThisUser')).'</a>&nbsp;
<a href="change_user_session.php?user_id='.$user['user_id'].'&id_session='.$id_session.'">'.Display::return_icon('user.png', get_lang('ChangeUserSession')).'</a>&nbsp;
'.$moved_link.'
<a href="'.api_get_self().'?id_session='.$id_session.'&action=delete&user='.$user['user_id'].'" onclick="javascript:if(!confirm(\''.get_lang('ConfirmYourChoice').'\')) return false;">'.Display::return_icon('delete.png', get_lang('Delete')).'</a>
'.$link_to_add_user_in_url.'
</td>

@ -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) {
?>
|
<?php
if($nbr_results > $limit) {
if ($nbr_results > $limit) {
?>
<a href="<?php echo api_get_self(); ?>?id_session=<?php echo $id_session; ?>&course_code=<?php echo urlencode($course_code); ?>&page=<?php echo $page+1; ?>&sort=<?php echo $sort; ?>"><?php echo get_lang('Next');?></a>
<?php

@ -67,7 +67,7 @@ if (empty($session_id)) {
header('Location: '.$url);
}
$user_session_status = SessionManager::get_user_status_in_session($user_id, $course_code, $session_id);
$user_session_status = SessionManager::get_user_status_in_course_session($user_id, $course_code, $session_id);
if (isset($user_session_status) || api_check_user_access_to_legal($course_info['visibility'])) {
$user_accepted_legal = CourseManager::is_user_accepted_legal($user_id, $course_code, $session_id);

@ -1121,11 +1121,11 @@ class CourseManager {
* @param int if using the session_id: 0 or 2 (student, coach), if using session_id = 0 STUDENT or COURSEMANAGER
* @return array
*/
public static function get_user_list_from_course_code($course_code, $session_id = 0, $limit = '', $order_by = '', $filter_by_status = null) {
// variable initialisation
public static function get_user_list_from_course_code($course_code, $session_id = 0, $limit = null, $order_by =null, $filter_by_status = null, $keyword = null) {
$session_id = intval($session_id);
$course_code = Database::escape_string($course_code);
$where = array();
$keyword = Database::escape_string($keyword);
$where = array();
// if the $order_by does not contain 'ORDER BY' we have to check if it is a valid field that can be sorted on
if (!strstr($order_by,'ORDER BY')) {
@ -1141,22 +1141,27 @@ class CourseManager {
if (!empty($session_id)) {
$sql = 'SELECT DISTINCT user.user_id, session_course_user.status as status_session, user.* ';
$sql .= ' FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user ';
$sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER).' as session_course_user
$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;
$where[] = ' session_course_user.course_code IS NOT NULL ';
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[] = ' 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 {

@ -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;
}

@ -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'");
}
}

@ -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:

@ -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 '<div class="actions">';
@ -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 = '<center>'.Display::return_icon($image.'.png', get_lang(ucfirst($action)), array('border'=>'0', 'style'=>'vertical-align: middle;') , 16).'</center>';
$result = Display::return_icon($image.'.png', get_lang(ucfirst($action)), array('border'=>'0', 'style'=>'vertical-align: middle;') , 16);
}
return $result;
}

@ -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 '</form>';
}
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 = '<a href="userInfo.php?'.api_get_cidreq().'&origin='.$origin.'&amp;uInfo='.$user_id.'" title="'.get_lang('Info').'" ><img src="'.$user_profile['file'].'" '.$user_profile['style'].' alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" /></a>';
} else {
$photo = '<img src="'.$user_profile['file'].'" '.$user_profile['style'].' alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" title="'.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 = '<a href="userInfo.php?'.api_get_cidreq().'&origin='.$origin.'&amp;uInfo='.$user_id.'" title="'.get_lang('Info').'" ><img src="'.$user_profile['file'].'" '.$user_profile['style'].' alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" /></a>';
} else {
$photo = '<img src="'.$user_profile['file'].'" '.$user_profile['style'].' alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" title="'.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= '<a href="userInfo.php?'.api_get_cidreq().'&origin='.$origin.'&amp;uInfo='.$user_id.'" title="'.get_lang('Info').'" ><img src="'.$image_repository.$existing_image.'" alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" width="22" height="22" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" /></a>';
} else {
$photo= '<img src="'.$image_repository.$existing_image.'" alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" width="22" height="22" title="'.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= '<a href="userInfo.php?'.api_get_cidreq().'&origin='.$origin.'&amp;uInfo='.$user_id.'" title="'.get_lang('Info').'" ><img src="'.$image_repository.$existing_image.'" alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" width="22" height="22" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" /></a>';
} else {
$photo= '<img src="'.$image_repository.$existing_image.'" alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" width="22" height="22" title="'.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

Loading…
Cancel
Save