Browse Source

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

Julio Montoya 15 years ago
parent
commit
5f8bc0710b

+ 5 - 6
main/inc/banner.inc.php

@@ -93,14 +93,13 @@ 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()) {
 	    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'));
+	
+	$number_online_in_course = 0;
 	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 = who_is_online_in_this_course_count(api_get_user_id(), api_get_setting('time_limit_whosonline'), $_course['id']);
 	}
-
+	
  	echo '<li>';
 	// Display the who's online of the platform
 	if ((api_get_setting('showonline', 'world') == 'true' AND !$_user['user_id']) OR (api_get_setting('showonline', 'users') == 'true' AND $_user['user_id'])) {

+ 2 - 2
main/inc/lib/message.lib.php

@@ -32,7 +32,7 @@ class MessageManager
 	public static function get_online_user_list($current_user_id) {
 		$min=30;
 		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) {
 			$receiver_id = $row[0];
 			$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() {
 		global $_configuration, $_user;
 		$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++) {
 			$user_id_list[$i]=$user_connect[$i][0];
 		}

+ 78 - 16
main/inc/lib/online.inc.php

@@ -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
  * @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;
 	$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 login_user_id,login_date
-					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()."' ";
+		$query = "SELECT DISTINCT login_user_id,login_date
+				  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 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;
@@ -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."'  ";
 			} else {
 				// all users online
-				$query = "SELECT login_user_id,login_date FROM ".$track_online_table ." track
-							WHERE track.access_url_id =  $access_url_id AND DATE_ADD(login_date,INTERVAL $valid MINUTE) >= '".$current_date."'  ";
+				$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."' ORDER BY picture_uri DESC  ";
 			}
 		}
 	}
-
+	
 	$result = @Database::query($query);
+	//@todo why we dont believe in db query results?
 	if (count($result)>0) {
 		$rtime = time();
 		$rdate = date("Y-m-d H:i:s",$rtime);
@@ -166,9 +167,9 @@ function WhoIsOnline($valid, $friends = false)
 		$rarray = array();
 
 		while(list($login_user_id,$login_date)= Database::fetch_row($result)) {
-			$barray = array();
+			$barray = array();			
 			array_push($barray,$login_user_id);
-			array_push($barray,$login_date);
+			array_push($barray,$login_date);	
 
 			// YYYY-MM-DD HH:MM:SS, db date format
 			$hour = substr($login_date,11,2);
@@ -179,17 +180,60 @@ function WhoIsOnline($valid, $friends = false)
 			$year = substr($login_date,0,4);
 			// db timestamp
 			$dbtime = mktime($hour,$minute,$secund,$month,$day,$year);
-
+			
 			if ($dbtime>$validtime) {
 				array_push($rarray,$barray);
 			}
-		}
+		}		
 		return $rarray;
 	} else {
 		return 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;
+	}
+}
 
 
 /**
@@ -202,7 +246,7 @@ function GetFullUserName($uid)
 	$uid = (int) $uid;
 	$uid = Database::escape_string($uid);
 	$user_table = Database::get_main_table(TABLE_MAIN_USER);
-	$query = "SELECT firstname,lastname FROM ".$user_table." WHERE user_id='$uid'";
+	$query = "SELECT firstname, lastname FROM ".$user_table." WHERE user_id='$uid'";
 	$result = @Database::query($query);
 	if (count($result)>0) {
 		$str = '';
@@ -311,4 +355,22 @@ function who_is_online_in_this_course($uid, $valid, $coursecode=null)
 	} else {
 		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;
+	}
+}

+ 4 - 4
main/inc/lib/social.lib.php

@@ -790,7 +790,7 @@ class SocialManager extends UserManager {
 				$extra_params['cidReq'] = Security::remove_XSS($_GET['cidReq']);
 				$course_url = '&amp;cidReq='.Security::remove_XSS($_GET['cidReq']);
 			}
-
+			
 			foreach ($user_list as $user) {
 				$uid = $user[0];
 				$user_info = api_get_user_info($uid);
@@ -801,7 +801,7 @@ class SocialManager extends UserManager {
 						$url = api_get_path(WEB_PATH).'main/social/profile.php?u='.$uid.$course_url;
 					} else {
 						$url = '?id='.$uid.$course_url;
-					}
+					} 
 				} else {
 					$url = '#';
 				}
@@ -826,8 +826,8 @@ class SocialManager extends UserManager {
 
 			if (api_get_setting('show_email_addresses') == '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');
 		}
 	}
 	/**

+ 31 - 19
main/inc/lib/sortabletable.class.php

@@ -299,20 +299,24 @@ class SortableTable extends HTML_Table {
 
 			// @todo This style css must be moved to default.css only for dev
 			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_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_1 { width:100px; float:left; text-align:center;margin-bottom:5px;}
 					.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_nav 		{ float:right;}
+					.grid_nav 		{ }
 
 			</style>';
 
 			// @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_title">'.$this->get_table_title().'</div>';
 			$html .= '<div class="grid_nav">'.$nav.'</div>';
@@ -321,26 +325,28 @@ class SortableTable extends HTML_Table {
 			$html .= '<div class="clear"></div>';
 			if (count($this->form_actions) > 0) {
 				$script= '<script language="JavaScript" type="text/javascript">
-																/*<![CDATA[*/
-																function setCheckbox(value) {
-													 				d = document.form_'.$this->table_name.';
-													 				for (i = 0; i < d.elements.length; i++) {
-													   					if (d.elements[i].type == "checkbox") {
-																		     d.elements[i].checked = value;
-													   					}
-													 				}
-																}
-																/*]]>*/
-															</script>';
+							/*<![CDATA[*/
+							function setCheckbox(value) {
+				 				d = document.form_'.$this->table_name.';
+				 				for (i = 0; i < d.elements.length; i++) {
+				   					if (d.elements[i].type == "checkbox") {
+									     d.elements[i].checked = value;
+				   					}
+				 				}
+							}
+							/*]]>*/
+						</script>';
 				$params = $this->get_sortable_table_param_string().'&amp;'.$this->get_additional_url_paramstring();
 				$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:
 		// i.e: .whoisonline_table_grid_container instead of  .grid_container
 		// where whoisonline is the table's name like drupal's template engine
-
+		
 		$html .= '<div class="grid_container">';
 		if (is_array($items) && count($items) > 0) {
 			foreach ($items as & $row) {
@@ -351,9 +357,13 @@ class SortableTable extends HTML_Table {
 					$i++;
 				}
 				$html .= '</div>';
-			}
-			$html .= '</div>';
+			}			
 		}
+		$html .= '</div>'; //close grid_container
+		
+		$html .= '</div>'; //close main grid
+		
+	
 		$html .= '<div class="clear"></div>';
 		/*
 		if (!$empty_table) {
@@ -528,8 +538,10 @@ class SortableTable extends HTML_Table {
 		$pager = $this->get_pager();
 		$val = $pager->getOffsetByPageId();
 		$offset = $pager->getOffsetByPageId();
-		$from = $offset[0] - 1;
+		$from = $offset[0] - 1; 
+		
 		$table_data = $this->get_table_data($from, $sort);
+		
 		$new_table_data = array();
 		if (is_array($table_data)) {
 			foreach ($table_data as $index => & $row) {

+ 1 - 1
main/mySpace/myStudents.php

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

+ 1 - 1
main/social/group_members.php

@@ -53,7 +53,7 @@ if (empty($group_id)) {
 
 
 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); 
 
 $show_message	= ''; 

+ 1 - 1
main/social/home.php

@@ -68,7 +68,7 @@ if (api_get_setting('profile', 'picture') == 'true') {
 
 Display :: display_header(get_lang('Home'));
 $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);
 
 echo '<div id="social-content">';

+ 1 - 1
main/social/profile.php

@@ -248,7 +248,7 @@ if (is_array($personal_course_list)) {
 	$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);
 
 echo '<div id="social-content">';

+ 1 - 1
main/user/userInfo.php

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