0 && !empty($_course['id'])) { $query = "REPLACE INTO ".$online_table ." (login_id,login_user_id,login_date,user_ip, c_id, session_id, access_url_id) VALUES ($uid,$uid,'$login_date','$user_ip', '".$_course['real_id']."' , '$session_id' , '$access_url_id' )"; } else { $query = "REPLACE INTO ".$online_table ." (login_id,login_user_id,login_date,user_ip, c_id, session_id, access_url_id) VALUES ($uid,$uid,'$login_date','$user_ip', 0, '$session_id', '$access_url_id')"; } Database::query($query); } } /** * @param int $userId */ function preventMultipleLogin($userId) { $table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ONLINE); $userId = intval($userId); if (api_get_settings('prevent_multiple_simultaneous_login') === 'true') { if (!empty($userId) && !api_is_anonymous()) { $isFirstLogin = Session::read('first_user_login'); if (empty($isFirstLogin)) { $sql = "SELECT login_id FROM $table WHERE login_user_id = " . $userId . " LIMIT 1"; $result = Database::query($sql); $loginData = array(); if (Database::num_rows($result)) { $loginData = Database::fetch_array($result); } $userIsReallyOnline = user_is_online($userId); // Trying double login. if (!empty($loginData) && $userIsReallyOnline == true) { session_regenerate_id(); Session::destroy(); header('Location: '.api_get_path(WEB_PATH).'index.php?loginFailed=1&error=multiple_connection_not_allowed'); exit; } else { // First time Session::write('first_user_login', 1); } } } } } /** * This function handles the logout and is called whenever there is a $_GET['logout'] * @return void Directly redirects the user or leaves him where he is, but doesn't return anything * @author Fernando P. GarcĂ­a */ function online_logout($user_id = null, $logout_redirect = false) { global $extAuthSource; // Database table definition $tbl_track_login = Database :: get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); if (empty($user_id)) { $user_id = isset($_GET['uid']) ? intval($_GET['uid']) : 0; } //Changing global chat status to offline if (api_is_global_chat_enabled()) { $chat = new Chat(); $chat->setUserStatus(0); } // selecting the last login of the user $sql = "SELECT login_id, login_date FROM $tbl_track_login WHERE login_user_id = $user_id ORDER BY login_date DESC LIMIT 0,1"; $q_last_connection = Database::query($sql); if (Database::num_rows($q_last_connection)>0) { $i_id_last_connection = Database::result($q_last_connection,0,"login_id"); } if (!isset($_SESSION['login_as'])) { $current_date = api_get_utc_datetime(); $sql = "UPDATE $tbl_track_login SET logout_date='".$current_date."' WHERE login_id='$i_id_last_connection'"; Database::query($sql); } //LoginDelete($user_id); //from inc/lib/online.inc.php - removes the "online" status //the following code enables the use of an external logout function. //example: define a $extAuthSource['ldap']['logout']="file.php" in configuration.php // then a function called ldap_logout() inside that file // (using *authent_name*_logout as the function name) and the following code // will find and execute it $uinfo = api_get_user_info($user_id); if (($uinfo['auth_source'] != PLATFORM_AUTH_SOURCE) && is_array($extAuthSource)) { if (is_array($extAuthSource[$uinfo['auth_source']])) { $subarray = $extAuthSource[$uinfo['auth_source']]; if (!empty($subarray['logout']) && file_exists($subarray['logout'])) { require_once($subarray['logout']); $logout_function = $uinfo['auth_source'].'_logout'; if (function_exists($logout_function)) { $logout_function($uinfo); } } } } require_once api_get_path(SYS_PATH) . 'main/chat/chat_functions.lib.php'; exit_of_chat($user_id); session_regenerate_id(); Session::destroy(); if ($logout_redirect) { header("Location: ".api_get_path(WEB_PATH)."index.php"); return; } } /** * Returns a list (array) of users who are online and in this course. * @param int User ID * @param int Number of minutes * @param string Course code (could be empty, but then the function returns false) * @return array Each line gives a user id and a login time */ function who_is_online_in_this_course($from, $number_of_items, $uid, $time_limit, $course_code) { if (empty($course_code)) return false; if (empty($time_limit)) { $time_limit = api_get_setting('display.time_limit_whosonline'); } else { $time_limit = intval($time_limit); } $online_time = time() - $time_limit * 60; $current_date = api_get_utc_datetime($online_time); $track_online_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ONLINE); $course_code = Database::escape_string($course_code); $courseInfo = api_get_course_info($course_code); $courseId = $courseInfo['real_id']; $from = intval($from); $number_of_items = intval($number_of_items); $query = "SELECT login_user_id, login_date FROM $track_online_table WHERE login_user_id <> 2 AND c_id = $courseId AND login_date >= '$current_date' LIMIT $from, $number_of_items "; $result = Database::query($query); if ($result) { $users_online = array(); while(list($login_user_id, $login_date) = Database::fetch_row($result)) { $users_online[] = $login_user_id; } return $users_online; } else { return false; } } function who_is_online_in_this_course_count($uid, $time_limit, $coursecode=null) { if (empty($coursecode)) { return false; } $track_online_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ONLINE); $coursecode = Database::escape_string($coursecode); $time_limit = Database::escape_string($time_limit); $online_time = time() - $time_limit * 60; $current_date = api_get_utc_datetime($online_time); $courseId = api_get_course_int_id($coursecode); if (empty($courseId)) { return false; } $query = "SELECT count(login_user_id) as count FROM $track_online_table WHERE login_user_id <> 2 AND c_id = $courseId AND login_date >= '$current_date' "; $result = Database::query($query); if (Database::num_rows($result) > 0) { $row = Database::fetch_array($result); return $row['count']; } else { return false; } } /** * Gets a list of chat calls made by others to the current user (info kept in main.user table) * @param none - taken from global space * @return string An HTML-formatted message */ function chatcall() { $_cid = api_get_course_id(); $_user = api_get_user_info(); if (!$_user['user_id']) { return (false); } $userId = intval($_user['user_id']); $track_user_table = Database::get_main_table(TABLE_MAIN_USER); $sql="SELECT chatcall_user_id, chatcall_date FROM $track_user_table WHERE ( id = $userId )"; $result=Database::query($sql); $row=Database::fetch_array($result); $login_date=$row['chatcall_date']; $hour = substr($login_date,11,2); $minute = substr($login_date,14,2); $second = substr($login_date,17,2); $month = substr($login_date,5,2); $day = substr($login_date,8,2); $year = substr($login_date,0,4); $calltime = mktime($hour,$minute,$second,$month,$day,$year); $time = api_get_utc_datetime(); $minute_passed=5; //within this limit, the chat call request is valid $limittime = mktime(date("H"),date("i")-$minute_passed,date("s"),date("m"),date("d"),date("Y")); if (($row['chatcall_user_id']) and ($calltime>$limittime)) { $webpath = api_get_path(WEB_CODE_PATH); $userInfo = api_get_user_info($row['chatcall_user_id']); $message=get_lang('YouWereCalled').' : '.$userInfo['complete_name'].'
'.get_lang('DoYouAccept') ."

" ."" . get_lang("Yes") ."" ."  |  " ."" . get_lang("No") ."" ."

"; return($message); } else { return false; } }