diff --git a/main/inc/banner.inc.php b/main/inc/banner.inc.php index 2627ad7407..fe6e85dc05 100755 --- a/main/inc/banner.inc.php +++ b/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 '
  • '.get_lang('UsersConnectedToMySessions').'
  • '; } - $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 '
  • '; // 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'])) { diff --git a/main/inc/lib/message.lib.php b/main/inc/lib/message.lib.php index db14c3bead..8b47321e24 100755 --- a/main/inc/lib/message.lib.php +++ b/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?(" (".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 '".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; } -} \ No newline at end of file +} + +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; + } +} diff --git a/main/inc/lib/social.lib.php b/main/inc/lib/social.lib.php index b2a757dcc4..2996c36ffc 100755 --- a/main/inc/lib/social.lib.php +++ b/main/inc/lib/social.lib.php @@ -790,7 +790,7 @@ class SocialManager extends UserManager { $extra_params['cidReq'] = Security::remove_XSS($_GET['cidReq']); $course_url = '&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'); } } /** diff --git a/main/inc/lib/sortabletable.class.php b/main/inc/lib/sortabletable.class.php index 6d235b83ac..fd035f7d00 100755 --- a/main/inc/lib/sortabletable.class.php +++ b/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 ''; // @todo This also must be moved - $html = '
    '; + + $html .= '
    '; + $html .= '
    '; $html .= '
    '.$form.'
    '; $html .= '
    '.$this->get_table_title().'
    '; $html .= '
    '.$nav.'
    '; @@ -321,26 +325,28 @@ class SortableTable extends HTML_Table { $html .= '
    '; if (count($this->form_actions) > 0) { $script= ''; + /*table_name.'; + for (i = 0; i < d.elements.length; i++) { + if (d.elements[i].type == "checkbox") { + d.elements[i].checked = value; + } + } + } + /*]]>*/ + '; $params = $this->get_sortable_table_param_string().'&'.$this->get_additional_url_paramstring(); $html .= '
    '; } } - $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 .= '
    '; if (is_array($items) && count($items) > 0) { foreach ($items as & $row) { @@ -351,9 +357,13 @@ class SortableTable extends HTML_Table { $i++; } $html .= '
    '; - } - $html .= '
    '; + } } + $html .= '
    '; //close grid_container + + $html .= '
    '; //close main grid + + $html .= '
    '; /* 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) { diff --git a/main/mySpace/myStudents.php b/main/mySpace/myStudents.php index 30c1cdd4a3..c0e3fd8a99 100755 --- a/main/mySpace/myStudents.php +++ b/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'); diff --git a/main/social/group_members.php b/main/social/group_members.php index 891c851070..73de55649a 100755 --- a/main/social/group_members.php +++ b/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 = ''; diff --git a/main/social/home.php b/main/social/home.php index b820e43cc9..be76ab9f2e 100755 --- a/main/social/home.php +++ b/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 '
    '; diff --git a/main/social/profile.php b/main/social/profile.php index 50b1924b7d..5557b70797 100755 --- a/main/social/profile.php +++ b/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 '
    '; diff --git a/main/user/userInfo.php b/main/user/userInfo.php index e38d5e1720..e763eff30b 100755 --- a/main/user/userInfo.php +++ b/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)) {