|
|
|
@ -6,19 +6,18 @@ |
|
|
|
|
@author Julio Montoya <gugli100@gmail.com> BeezNest 2011 |
|
|
|
|
* @package chamilo.admin |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
$cidReset = true; |
|
|
|
|
require_once '../inc/global.inc.php'; |
|
|
|
|
|
|
|
|
|
global $_configuration; |
|
|
|
|
|
|
|
|
|
$current_access_url_id = api_get_current_access_url_id(); |
|
|
|
|
|
|
|
|
|
$action = isset($_REQUEST["action"]) ? $_REQUEST["action"] : null; |
|
|
|
|
|
|
|
|
|
// Blocks the possibility to delete a user |
|
|
|
|
$delete_user_available = true; |
|
|
|
|
if (isset($_configuration['deny_delete_users']) && $_configuration['deny_delete_users']) { |
|
|
|
|
$delete_user_available = false; |
|
|
|
|
$deleteUserAvailable = true; |
|
|
|
|
if (api_get_configuration_value('deny_delete_users')) { |
|
|
|
|
$deleteUserAvailable = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=get_user_courses'; |
|
|
|
@ -301,69 +300,63 @@ function prepare_user_sql_query($is_count) { |
|
|
|
|
* Make sure this function is protected because it does NOT check password! |
|
|
|
|
* |
|
|
|
|
* This function defines globals. |
|
|
|
|
* @param int User ID |
|
|
|
|
* @param int $userId |
|
|
|
|
* @return bool False on failure, redirection on success |
|
|
|
|
* @author Evie Embrechts |
|
|
|
|
* @author Yannick Warnier <yannick.warnier@dokeos.com> |
|
|
|
|
*/ |
|
|
|
|
function login_user($user_id) { |
|
|
|
|
$user_id = intval($user_id); |
|
|
|
|
$user_info = api_get_user_info($user_id); |
|
|
|
|
function login_user($userId) |
|
|
|
|
{ |
|
|
|
|
$userId = intval($userId); |
|
|
|
|
$userInfo = api_get_user_info($userId); |
|
|
|
|
|
|
|
|
|
// Check if the user is allowed to 'login_as' |
|
|
|
|
$can_login_as = api_can_login_as($user_id); |
|
|
|
|
$canLoginAs = api_can_login_as($userId); |
|
|
|
|
|
|
|
|
|
if (!$canLoginAs) { |
|
|
|
|
|
|
|
|
|
if (!$can_login_as) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Load $_user to be sure we clean it before logging in |
|
|
|
|
global $uidReset, $loginFailed, $_user; |
|
|
|
|
|
|
|
|
|
$main_user_table = Database::get_main_table(TABLE_MAIN_USER); |
|
|
|
|
$main_admin_table = Database::get_main_table(TABLE_MAIN_ADMIN); |
|
|
|
|
$track_e_login_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); |
|
|
|
|
$main_user_table = Database::get_main_table(TABLE_MAIN_USER); |
|
|
|
|
$main_admin_table = Database::get_main_table(TABLE_MAIN_ADMIN); |
|
|
|
|
$track_e_login_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); |
|
|
|
|
|
|
|
|
|
unset($_user['user_id']); // uid not in session ? prevent any hacking |
|
|
|
|
$firstname = $userInfo['firstname']; |
|
|
|
|
$lastname = $userInfo['lastname']; |
|
|
|
|
$userId = $userInfo['id']; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$firstname = $user_info['firstname']; |
|
|
|
|
$lastname = $user_info['lastname']; |
|
|
|
|
$user_id = $user_info['id']; |
|
|
|
|
|
|
|
|
|
//$message = "Attempting to login as ".api_get_person_name($firstname, $lastname)." (id ".$user_id.")"; |
|
|
|
|
if (api_is_western_name_order()) { |
|
|
|
|
$message = sprintf(get_lang('AttemptingToLoginAs'),$firstname,$lastname,$user_id); |
|
|
|
|
$message = sprintf(get_lang('AttemptingToLoginAs'),$firstname,$lastname, $userId); |
|
|
|
|
} else { |
|
|
|
|
$message = sprintf(get_lang('AttemptingToLoginAs'), $lastname, $firstname, $user_id); |
|
|
|
|
$message = sprintf(get_lang('AttemptingToLoginAs'), $lastname, $firstname, $userId); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$loginFailed = false; |
|
|
|
|
$uidReset = false; |
|
|
|
|
|
|
|
|
|
if ($user_id) { // a uid is given (log in succeeded) |
|
|
|
|
if ($userId) { |
|
|
|
|
// a uid is given (log in succeeded) |
|
|
|
|
|
|
|
|
|
$sql_query = "SELECT user.*, a.user_id is_admin, |
|
|
|
|
$sql = " |
|
|
|
|
SELECT user.*, a.user_id is_admin, |
|
|
|
|
UNIX_TIMESTAMP(login.login_date) login_date |
|
|
|
|
FROM $main_user_table |
|
|
|
|
LEFT JOIN $main_admin_table a |
|
|
|
|
ON user.id = a.user_id |
|
|
|
|
LEFT JOIN $track_e_login_table login |
|
|
|
|
ON user.id = login.login_user_id |
|
|
|
|
WHERE user.id = '".$user_id."' |
|
|
|
|
ORDER BY login.login_date DESC LIMIT 1"; |
|
|
|
|
WHERE user.id = '".$userId."' |
|
|
|
|
ORDER BY login.login_date DESC |
|
|
|
|
LIMIT 1"; |
|
|
|
|
|
|
|
|
|
$sql_result = Database::query($sql_query); |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Database::num_rows($sql_result) > 0) { |
|
|
|
|
if (Database::num_rows($result) > 0) { |
|
|
|
|
// Extracting the user data |
|
|
|
|
|
|
|
|
|
$user_data = Database::fetch_array($sql_result); |
|
|
|
|
$user_data = Database::fetch_array($result); |
|
|
|
|
|
|
|
|
|
//Delog the current user |
|
|
|
|
// Logout the current user |
|
|
|
|
|
|
|
|
|
LoginDelete($_SESSION["_user"]["user_id"]); |
|
|
|
|
LoginDelete(api_get_user_id()); |
|
|
|
|
|
|
|
|
|
// Cleaning session variables |
|
|
|
|
unset($_SESSION['_user']); |
|
|
|
@ -371,26 +364,26 @@ function login_user($user_id) { |
|
|
|
|
unset($_SESSION['is_allowedCreateCourse']); |
|
|
|
|
unset($_SESSION['_uid']); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$_user['firstName'] = $user_data['firstname']; |
|
|
|
|
$_user['lastName'] = $user_data['lastname']; |
|
|
|
|
$_user['mail'] = $user_data['email']; |
|
|
|
|
$_user['lastLogin'] = $user_data['login_date']; |
|
|
|
|
$_user['official_code'] = $user_data['official_code']; |
|
|
|
|
$_user['picture_uri'] = $user_data['picture_uri']; |
|
|
|
|
$_user['user_id'] = $user_data['id']; |
|
|
|
|
$_user['id'] = $user_data['id']; |
|
|
|
|
$_user['status'] = $user_data['status']; |
|
|
|
|
$_user['firstName'] = $user_data['firstname']; |
|
|
|
|
$_user['lastName'] = $user_data['lastname']; |
|
|
|
|
$_user['mail'] = $user_data['email']; |
|
|
|
|
$_user['lastLogin'] = $user_data['login_date']; |
|
|
|
|
$_user['official_code'] = $user_data['official_code']; |
|
|
|
|
$_user['picture_uri'] = $user_data['picture_uri']; |
|
|
|
|
$_user['user_id'] = $user_data['id']; |
|
|
|
|
$_user['id'] = $user_data['id']; |
|
|
|
|
$_user['status'] = $user_data['status']; |
|
|
|
|
|
|
|
|
|
$is_platformAdmin = (bool) (!is_null($user_data['is_admin'])); |
|
|
|
|
$is_allowedCreateCourse = (bool) ($user_data['status'] == 1); |
|
|
|
|
|
|
|
|
|
// Filling session variables with new data |
|
|
|
|
$_SESSION['_uid'] = $user_id; |
|
|
|
|
$_SESSION['_user'] = $_user; |
|
|
|
|
$_SESSION['is_platformAdmin'] = $is_platformAdmin; |
|
|
|
|
$_SESSION['is_allowedCreateCourse'] = $is_allowedCreateCourse; |
|
|
|
|
$_SESSION['login_as'] = true; // will be useful later to know if the user is actually an admin or not (example reporting)s |
|
|
|
|
$_SESSION['_uid'] = $userId; |
|
|
|
|
$_SESSION['_user'] = $_user; |
|
|
|
|
$_SESSION['is_platformAdmin'] = $is_platformAdmin; |
|
|
|
|
$_SESSION['is_allowedCreateCourse'] = $is_allowedCreateCourse; |
|
|
|
|
// will be useful later to know if the user is actually an admin or not (example reporting) |
|
|
|
|
$_SESSION['login_as'] = true; |
|
|
|
|
|
|
|
|
|
$target_url = api_get_path(WEB_PATH)."user_portal.php"; |
|
|
|
|
$message .= '<br />'.sprintf(get_lang('LoginSuccessfulGoToX'),'<a href="'.$target_url.'">'.$target_url.'</a>'); |
|
|
|
@ -519,7 +512,7 @@ function user_filter($name, $params, $row) { |
|
|
|
|
* @return string Some HTML-code with modify-buttons |
|
|
|
|
*/ |
|
|
|
|
function modify_filter($user_id, $url_params, $row) { |
|
|
|
|
global $charset, $_admins_list, $delete_user_available; |
|
|
|
|
global $charset, $_admins_list; |
|
|
|
|
$is_admin = in_array($user_id,$_admins_list); |
|
|
|
|
$statusname = api_get_status_langvars(); |
|
|
|
|
$user_is_anonymous = false; |
|
|
|
@ -631,7 +624,7 @@ function modify_filter($user_id, $url_params, $row) { |
|
|
|
|
if (api_is_platform_admin()) { |
|
|
|
|
$result .= ' <a href="'.api_get_path(WEB_AJAX_PATH).'agenda.ajax.php?a=get_user_agenda&user_id='.$user_id.'" class="agenda_opener">'. |
|
|
|
|
Display::return_icon('month.png', get_lang('FreeBusyCalendar'), array(), ICON_SIZE_SMALL).'</a>'; |
|
|
|
|
if ($delete_user_available) { |
|
|
|
|
if (api_get_configuration_value('deny_delete_users')) { |
|
|
|
|
if ($user_id != api_get_user_id() && |
|
|
|
|
!$user_is_anonymous && |
|
|
|
|
api_global_admin_can_edit_admin($user_id) |
|
|
|
@ -744,7 +737,7 @@ if (!empty($action)) { |
|
|
|
|
$user_to_delete = $_GET['user_id']; |
|
|
|
|
$current_user_id = api_get_user_id(); |
|
|
|
|
|
|
|
|
|
if ($delete_user_available && api_global_admin_can_edit_admin($_GET['user_id'])) { |
|
|
|
|
if ($deleteUserAvailable && api_global_admin_can_edit_admin($_GET['user_id'])) { |
|
|
|
|
if ($user_to_delete != $current_user_id && UserManager :: delete_user($_GET['user_id'])) { |
|
|
|
|
$message = Display :: return_message(get_lang('UserDeleted'), 'confirmation'); |
|
|
|
|
} else { |
|
|
|
@ -906,7 +899,7 @@ $defaults['keyword_inactive'] = 1; |
|
|
|
|
$form->setDefaults($defaults); |
|
|
|
|
$form->addElement('html','</div>'); |
|
|
|
|
|
|
|
|
|
$form = $form->return_form(); |
|
|
|
|
$form = $form->returnForm(); |
|
|
|
|
|
|
|
|
|
$table = new SortableTable('users', 'get_number_of_users', 'get_user_data', (api_is_western_name_order() xor api_sort_by_first_name()) ? 3 : 2); |
|
|
|
|
$table->set_additional_parameters($parameters); |
|
|
|
@ -936,10 +929,10 @@ $table->set_column_filter(8, 'active_filter'); |
|
|
|
|
$table->set_column_filter(10, 'modify_filter'); |
|
|
|
|
|
|
|
|
|
// Only show empty actions bar if delete users has been blocked |
|
|
|
|
if (api_is_platform_admin() && !(isset($_configuration['deny_delete_users']) && $_configuration['deny_delete_users'])) { |
|
|
|
|
$table->set_form_actions(array ('delete' => get_lang('DeleteFromPlatform'))); |
|
|
|
|
if (api_is_platform_admin() && !($deleteUserAvailable)) { |
|
|
|
|
$table->set_form_actions(array('delete' => get_lang('DeleteFromPlatform'))); |
|
|
|
|
} else { |
|
|
|
|
$table->set_form_actions(array ('none' => get_lang('NoActionAvailable'))); |
|
|
|
|
$table->set_form_actions(array('none' => get_lang('NoActionAvailable'))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$table_result = $table->return_table(); |
|
|
|
|