Who is online improvements, calls a \"SELECT count(*)\" query instead of retrieving all the info from the database WhoIsOnline also rename to who_is__online

skala
Julio Montoya 16 years ago
parent 025671435f
commit 5f8bc0710b
  1. 9
      main/inc/banner.inc.php
  2. 4
      main/inc/lib/message.lib.php
  3. 78
      main/inc/lib/online.inc.php
  4. 2
      main/inc/lib/social.lib.php
  5. 22
      main/inc/lib/sortabletable.class.php
  6. 2
      main/mySpace/myStudents.php
  7. 2
      main/social/group_members.php
  8. 2
      main/social/home.php
  9. 2
      main/social/profile.php
  10. 2
      main/user/userInfo.php

@ -93,12 +93,11 @@ if ((api_get_setting('showonline', 'world') == 'true' AND !$_user['user_id']) OR
if (api_get_setting('use_session_mode') == 'true' && isset($_user['user_id']) && api_is_coach()) { if (api_get_setting('use_session_mode') == 'true' && isset($_user['user_id']) && api_is_coach()) {
echo '<li><a href="'.api_get_path(WEB_PATH).'whoisonlinesession.php?id_coach='.$_user['user_id'].'&amp;referer='.urlencode($_SERVER['REQUEST_URI']).'" target="_top">'.get_lang('UsersConnectedToMySessions').'</a></li>'; echo '<li><a href="'.api_get_path(WEB_PATH).'whoisonlinesession.php?id_coach='.$_user['user_id'].'&amp;referer='.urlencode($_SERVER['REQUEST_URI']).'" target="_top">'.get_lang('UsersConnectedToMySessions').'</a></li>';
} }
$number = count(WhoIsOnline(api_get_setting('time_limit_whosonline'))); $number = who_is_online_count(api_get_setting('time_limit_whosonline'));
if(!empty($_course['id'])) {
$online_in_course = who_is_online_in_this_course(api_get_user_id(), api_get_setting('time_limit_whosonline'), $_course['id']);
$number_online_in_course = count($online_in_course);
} else {
$number_online_in_course = 0; $number_online_in_course = 0;
if(!empty($_course['id'])) {
$number_online_in_course = who_is_online_in_this_course_count(api_get_user_id(), api_get_setting('time_limit_whosonline'), $_course['id']);
} }
echo '<li>'; echo '<li>';

@ -32,7 +32,7 @@ class MessageManager
public static function get_online_user_list($current_user_id) { public static function get_online_user_list($current_user_id) {
$min=30; $min=30;
global $_configuration; global $_configuration;
$userlist = WhoIsOnline($current_user_id,$_configuration['statistics_database'],$min); $userlist = who_is_online($current_user_id,$_configuration['statistics_database'],$min);
foreach($userlist as $row) { foreach($userlist as $row) {
$receiver_id = $row[0]; $receiver_id = $row[0];
$online_user_list[$receiver_id] = GetFullUserName($receiver_id).($current_user_id==$receiver_id?("&nbsp;(".get_lang('Myself').")"):("")); $online_user_list[$receiver_id] = GetFullUserName($receiver_id).($current_user_id==$receiver_id?("&nbsp;(".get_lang('Myself').")"):(""));
@ -95,7 +95,7 @@ class MessageManager
public static function users_connected_by_id() { public static function users_connected_by_id() {
global $_configuration, $_user; global $_configuration, $_user;
$minute=30; $minute=30;
$user_connect = WhoIsOnline($_user['user_id'],$_configuration['statistics_database'],$minute); $user_connect = who_is_online($_user['user_id'],$_configuration['statistics_database'],$minute);
for ($i=0; $i<count($user_connect); $i++) { for ($i=0; $i<count($user_connect); $i++) {
$user_id_list[$i]=$user_connect[$i][0]; $user_id_list[$i]=$user_connect[$i][0];
} }

@ -121,22 +121,22 @@ function LoginDelete($user_id) {
* @param bool optionally if it's set to true shows who friends from social network is online otherwise just shows all users online * @param bool optionally if it's set to true shows who friends from social network is online otherwise just shows all users online
* @return array For each line, a list of user IDs and login dates, or FALSE on error or empty results * @return array For each line, a list of user IDs and login dates, or FALSE on error or empty results
*/ */
function WhoIsOnline($valid, $friends = false) function who_is_online($valid, $friends = false) {
{
$valid = (int) $valid; $valid = (int) $valid;
$current_date = date('Y-m-d H:i:s',time()); $current_date = date('Y-m-d H:i:s',time());
$track_online_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ONLINE); $track_online_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ONLINE);
$friend_user_table = Database::get_main_table(TABLE_MAIN_USER_REL_USER); $friend_user_table = Database::get_main_table(TABLE_MAIN_USER_REL_USER);
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$query = ''; $query = '';
if ($friends) { if ($friends) {
// who friends from social network is online // who friends from social network is online
$query = " SELECT distinct login_user_id,login_date $query = "SELECT DISTINCT login_user_id,login_date
FROM $track_online_table FROM $track_online_table INNER JOIN $friend_user_table ON (friend_user_id = login_user_id)
INNER JOIN $friend_user_table ON (friend_user_id = login_user_id)
WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' AND friend_user_id <> '".api_get_user_id()."' AND relation_type='".USER_RELATION_TYPE_FRIEND."' AND user_id = '".api_get_user_id()."' "; WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' AND friend_user_id <> '".api_get_user_id()."' AND relation_type='".USER_RELATION_TYPE_FRIEND."' AND user_id = '".api_get_user_id()."' ";
} else { } else {
// all users online // all users online
$query = "SELECT login_user_id,login_date FROM ".$track_online_table ." WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' "; //$query = "SELECT login_user_id,login_date FROM ".$track_online_table ." WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' "; //WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."'
$query = "SELECT login_user_id,login_date FROM ".$track_online_table ." e INNER JOIN ".$table_user ." u ON (u.user_id=e.login_user_id) WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' ORDER BY picture_uri DESC";
} }
global $_configuration; global $_configuration;
@ -152,13 +152,14 @@ function WhoIsOnline($valid, $friends = false)
WHERE track.access_url_id = $access_url_id AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' AND friend_user_id <> '".api_get_user_id()."' AND relation_type='".USER_RELATION_TYPE_FRIEND."' "; WHERE track.access_url_id = $access_url_id AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' AND friend_user_id <> '".api_get_user_id()."' AND relation_type='".USER_RELATION_TYPE_FRIEND."' ";
} else { } else {
// all users online // all users online
$query = "SELECT login_user_id,login_date FROM ".$track_online_table ." track $query = "SELECT login_user_id,login_date FROM ".$track_online_table ." track INNER JOIN ".$table_user ." u ON (u.user_id=track.login_user_id)
WHERE track.access_url_id = $access_url_id AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' "; WHERE track.access_url_id = $access_url_id AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' ORDER BY picture_uri DESC ";
} }
} }
} }
$result = @Database::query($query); $result = @Database::query($query);
//@todo why we dont believe in db query results?
if (count($result)>0) { if (count($result)>0) {
$rtime = time(); $rtime = time();
$rdate = date("Y-m-d H:i:s",$rtime); $rdate = date("Y-m-d H:i:s",$rtime);
@ -190,6 +191,49 @@ function WhoIsOnline($valid, $friends = false)
} }
} }
function who_is_online_Count($valid, $friends = false) {
$valid = (int) $valid;
$current_date = date('Y-m-d H:i:s',time());
$track_online_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ONLINE);
$friend_user_table = Database::get_main_table(TABLE_MAIN_USER_REL_USER);
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$query = '';
if ($friends) {
// who friends from social network is online
$query = "SELECT DISTINCT count(login_user_id) as count
FROM $track_online_table INNER JOIN $friend_user_table ON (friend_user_id = login_user_id)
WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' AND friend_user_id <> '".api_get_user_id()."' AND relation_type='".USER_RELATION_TYPE_FRIEND."' AND user_id = '".api_get_user_id()."' ";
} else {
// all users online
$query = "SELECT count(login_id) FROM ".$track_online_table ." WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' "; //WHERE DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."'
}
global $_configuration;
if ($_configuration['multiple_access_urls']==true) {
$tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if ($access_url_id != -1) {
if ($friends) {
// friends from social network is online
$query = "SELECT DISTINCT count(login_user_id) as count
FROM $track_online_table track
INNER JOIN $friend_user_table ON (friend_user_id = login_user_id)
WHERE track.access_url_id = $access_url_id AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' AND friend_user_id <> '".api_get_user_id()."' AND relation_type='".USER_RELATION_TYPE_FRIEND."' ";
} else {
// all users online
$query = "SELECT count(login_id) as count FROM ".$track_online_table ." track
WHERE track.access_url_id = $access_url_id AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."' ";
}
}
}
$result = Database::query($query);
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result);
return $row['count'];
} else {
return false;
}
}
/** /**
@ -312,3 +356,21 @@ function who_is_online_in_this_course($uid, $valid, $coursecode=null)
return false; return false;
} }
} }
function who_is_online_in_this_course_count($uid, $valid, $coursecode=null)
{
if(empty($coursecode)) return false;
$track_online_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ONLINE);
$coursecode = Database::escape_string($coursecode);
$valid = Database::escape_string($valid);
$query = "SELECT count(login_user_id) as count FROM ".$track_online_table ." WHERE course='".$coursecode."' AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= NOW() ";
$result = Database::query($query);
$result = Database::query($query);
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result);
return $row['count'];
} else {
return false;
}
}

@ -827,7 +827,7 @@ class SocialManager extends UserManager {
if (api_get_setting('show_email_addresses') == 'true') { if (api_get_setting('show_email_addresses') == 'true') {
$table_header[] = array(get_lang('Email'), true); $table_header[] = array(get_lang('Email'), true);
} }
Display::display_sortable_table($table_header, $table_data, array(), array('per_page' => 20), $extra_params, array(),'grid'); Display::display_sortable_table($table_header, $table_data, array(), array('per_page' => 25), $extra_params, array(),'grid');
} }
} }
/** /**

@ -299,20 +299,24 @@ class SortableTable extends HTML_Table {
// @todo This style css must be moved to default.css only for dev // @todo This style css must be moved to default.css only for dev
echo '<style> echo '<style>
.main-grid { width:100%;}
.sub-header { width:100%; padding-top: 10px; padding-right: 10px; padding-left: 10px; height:30px;}
.grid_container { width:100%;} .grid_container { width:100%;}
.grid_item { height: 120px; width:98px; border:1px dotted #ccc; float:left; padding:5px; margin:8px;} .grid_item { height: 120px; width:98px; border:1px dotted #ccc; float:left; padding:5px; margin:8px;}
.grid_element_0 { width:100px; float:left; text-align:center; margin-bottom:5px;} .grid_element_0 { width:100px; float:left; text-align:center; margin-bottom:5px;}
.grid_element_1 { width:100px; float:left; text-align:center;margin-bottom:5px;} .grid_element_1 { width:100px; float:left; text-align:center;margin-bottom:5px;}
.grid_element_2 { width:150px; float:left;} .grid_element_2 { width:150px; float:left;}
.grid_selectbox { width:50%; float:left;} .grid_selectbox { width:30%; float:left;}
.grid_title { width:30%; float:left;} .grid_title { width:30%; float:left;}
.grid_nav { float:right;} .grid_nav { }
</style>'; </style>';
// @todo This also must be moved // @todo This also must be moved
$html = '<div class="sub-header">';
$html .= '<div class="main-grid">';
$html .= '<div class="sub-header">';
$html .= '<div class="grid_selectbox">'.$form.'</div>'; $html .= '<div class="grid_selectbox">'.$form.'</div>';
$html .= '<div class="grid_title">'.$this->get_table_title().'</div>'; $html .= '<div class="grid_title">'.$this->get_table_title().'</div>';
$html .= '<div class="grid_nav">'.$nav.'</div>'; $html .= '<div class="grid_nav">'.$nav.'</div>';
@ -336,7 +340,9 @@ class SortableTable extends HTML_Table {
$html .= '<form method="post" action="'.api_get_self().'?'.$params.'" name="form_'.$this->table_name.'">'; $html .= '<form method="post" action="'.api_get_self().'?'.$params.'" name="form_'.$this->table_name.'">';
} }
} }
$items = $this->get_clean_html(); // Getting the items of the table // Getting the items of the table
$items = $this->get_clean_html(false); //no sort
// Generation of style classes must be improved. Maybe we need a a table name to create style on the fly: // Generation of style classes must be improved. Maybe we need a a table name to create style on the fly:
// i.e: .whoisonline_table_grid_container instead of .grid_container // i.e: .whoisonline_table_grid_container instead of .grid_container
// where whoisonline is the table's name like drupal's template engine // where whoisonline is the table's name like drupal's template engine
@ -352,8 +358,12 @@ class SortableTable extends HTML_Table {
} }
$html .= '</div>'; $html .= '</div>';
} }
$html .= '</div>';
} }
$html .= '</div>'; //close grid_container
$html .= '</div>'; //close main grid
$html .= '<div class="clear"></div>'; $html .= '<div class="clear"></div>';
/* /*
if (!$empty_table) { if (!$empty_table) {
@ -529,7 +539,9 @@ class SortableTable extends HTML_Table {
$val = $pager->getOffsetByPageId(); $val = $pager->getOffsetByPageId();
$offset = $pager->getOffsetByPageId(); $offset = $pager->getOffsetByPageId();
$from = $offset[0] - 1; $from = $offset[0] - 1;
$table_data = $this->get_table_data($from, $sort); $table_data = $this->get_table_data($from, $sort);
$new_table_data = array(); $new_table_data = array();
if (is_array($table_data)) { if (is_array($table_data)) {
foreach ($table_data as $index => & $row) { foreach ($table_data as $index => & $row) {

@ -224,7 +224,7 @@ if (!empty ($_GET['student'])) {
// is the user online ? // is the user online ?
$student_online = Security :: remove_XSS($_GET['student']); $student_online = Security :: remove_XSS($_GET['student']);
$users_online = WhoIsOnline(30); $users_online = who_is_online(30);
foreach ($users_online as $online) { foreach ($users_online as $online) {
if (in_array($_GET['student'], $online)) { if (in_array($_GET['student'], $online)) {
$online = get_lang('Yes'); $online = get_lang('Yes');

@ -53,7 +53,7 @@ if (empty($group_id)) {
Display :: display_header($tool_name, 'Groups'); Display :: display_header($tool_name, 'Groups');
$user_online_list = WhoIsOnline(api_get_setting('time_limit_whosonline'), true); $user_online_list = who_is_online(api_get_setting('time_limit_whosonline'), true);
$user_online_count = count($user_online_list); $user_online_count = count($user_online_list);
$show_message = ''; $show_message = '';

@ -68,7 +68,7 @@ if (api_get_setting('profile', 'picture') == 'true') {
Display :: display_header(get_lang('Home')); Display :: display_header(get_lang('Home'));
$user_info = UserManager :: get_user_info_by_id(api_get_user_id()); $user_info = UserManager :: get_user_info_by_id(api_get_user_id());
$user_online_list = WhoIsOnline(api_get_setting('time_limit_whosonline'),true); $user_online_list = who_is_online(api_get_setting('time_limit_whosonline'),true);
$user_online_count = count($user_online_list); $user_online_count = count($user_online_list);
echo '<div id="social-content">'; echo '<div id="social-content">';

@ -248,7 +248,7 @@ if (is_array($personal_course_list)) {
$course_list_code = array_unique_dimensional($course_list_code); $course_list_code = array_unique_dimensional($course_list_code);
} }
$user_online_list = WhoIsOnline(api_get_setting('time_limit_whosonline'), true); $user_online_list = who_is_online(api_get_setting('time_limit_whosonline'), true);
$user_online_count = count($user_online_list); $user_online_count = count($user_online_list);
echo '<div id="social-content">'; echo '<div id="social-content">';

@ -461,7 +461,7 @@ elseif ($displayMode == "viewContentList") // default display
} }
// is the user online ? // is the user online ?
$users_online = WhoIsOnline(30); $users_online = who_is_online(30);
foreach ($users_online as $online) { foreach ($users_online as $online) {
if (in_array($userIdViewed, $online)) { if (in_array($userIdViewed, $online)) {

Loading…
Cancel
Save