From d19450c29d8fbafd7589363b8788d57ab7000fa6 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 9 Oct 2022 22:08:53 -0500 Subject: [PATCH] Users - Fix load students table in reporting - refs BT#20249 --- main/inc/lib/sessionmanager.lib.php | 7 ++- main/inc/lib/tracking.lib.php | 29 ++++++--- main/inc/lib/usermanager.lib.php | 29 ++++++++- main/mySpace/student.php | 94 +++++++++++++++-------------- main/mySpace/users.php | 49 +++++++++++---- 5 files changed, 140 insertions(+), 68 deletions(-) diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 64eaa78529..a9094154cc 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -6090,7 +6090,8 @@ class SessionManager $lastConnectionDate = null, $sessionIdList = [], $studentIdList = [], - $filterByStatus = null + $filterByStatus = null, + $filterUsers = null ) { $filterByStatus = (int) $filterByStatus; $userId = (int) $userId; @@ -6204,6 +6205,10 @@ class SessionManager $userConditions .= " AND u.last_login <= '$lastConnectionDate' "; } + if (!empty($filterUsers)) { + $userConditions .= " AND u.id IN(".implode(',', $filterUsers).")"; + } + if (!empty($keyword)) { $keyword = trim(Database::escape_string($keyword)); $keywordParts = array_filter(explode(' ', $keyword)); diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php index 104050751c..ad8cd6525b 100755 --- a/main/inc/lib/tracking.lib.php +++ b/main/inc/lib/tracking.lib.php @@ -2130,12 +2130,14 @@ class Tracking public static function getStats($userId, $getCount = false) { $courses = []; + $students = []; $assignedCourses = []; $drhCount = 0; $teachersCount = 0; $studentBossCount = 0; $courseCount = 0; $assignedCourseCount = 0; + $studentCount = 0; $checkSessionVisibility = api_get_configuration_value('show_users_in_active_sessions_in_tracking'); $allowDhrAccessToAllStudents = api_get_configuration_value('drh_allow_access_to_all_students'); @@ -2245,14 +2247,23 @@ class Tracking ); } else { if (api_is_drh() && $allowDhrAccessToAllStudents) { - $studentList = UserManager::get_user_list(['status' => STUDENT]); + $studentList = UserManager::get_user_list( + ['status' => STUDENT], + [], + false, + false, + null, + null, + null, + $getCount + ); } else { $studentList = UserManager::getUsersFollowedByUser( $userId, STUDENT, false, false, - false, + $getCount, null, null, null, @@ -2265,10 +2276,14 @@ class Tracking ); } - $students = []; - if (is_array($studentList)) { - foreach ($studentList as $studentData) { - $students[] = $studentData['user_id']; + if ($getCount) { + $studentCount = (int) $studentList; + } else { + $students = []; + if (is_array($studentList)) { + foreach ($studentList as $studentData) { + $students[] = $studentData['user_id']; + } } } @@ -2404,7 +2419,7 @@ class Tracking return [ 'drh' => $drhCount, 'teachers' => $teachersCount, - 'student_count' => count($students), + 'student_count' => $studentCount, 'student_list' => $students, 'student_bosses' => $studentBossCount, 'courses' => $courseCount, diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index 6ee02dcecf..e9eb11f380 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -2122,12 +2122,19 @@ class UserManager $limit_to = false, $idCampus = null, $keyword = null, - $lastConnectionDate = null + $lastConnectionDate = null, + $getCount = false, + $filterUsers = null ) { $user_table = Database::get_main_table(TABLE_MAIN_USER); $userUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $return_array = []; - $sql = "SELECT user.* FROM $user_table user "; + + if ($getCount) { + $sql = "SELECT count(user.id) as nbUsers FROM $user_table user "; + } else { + $sql = "SELECT user.* FROM $user_table user "; + } if (api_is_multiple_url_enabled()) { if ($idCampus) { @@ -2180,6 +2187,10 @@ class UserManager } } + if (!empty($filterUsers)) { + $sql .= " AND user.id IN(".implode(',', $filterUsers).")"; + } + if (count($order_by) > 0) { $sql .= ' ORDER BY '.Database::escape_string(implode(',', $order_by)); } @@ -2190,6 +2201,13 @@ class UserManager $sql .= " LIMIT $limit_from, $limit_to"; } $sql_result = Database::query($sql); + + if ($getCount) { + $result = Database::fetch_array($sql_result); + + return $result['nbUsers']; + } + while ($result = Database::fetch_array($sql_result)) { $result['complete_name'] = api_get_person_name($result['firstname'], $result['lastname']); $return_array[] = $result; @@ -5480,7 +5498,8 @@ class UserManager $lastConnectionDate = null, $status = null, $keyword = null, - $checkSessionVisibility = false + $checkSessionVisibility = false, + $filterUsers = null ) { // Database Table Definitions $tbl_user = Database::get_main_table(TABLE_MAIN_USER); @@ -5556,6 +5575,10 @@ class UserManager $userConditions .= " AND u.last_login <= '$lastConnectionDate' "; } + if (!empty($filterUsers)) { + $userConditions .= " AND u.id IN(".implode(',', $filterUsers).")"; + } + $sessionConditionsCoach = null; $dateCondition = ''; $drhConditions = null; diff --git a/main/mySpace/student.php b/main/mySpace/student.php index a7cce7d414..34faeaf213 100755 --- a/main/mySpace/student.php +++ b/main/mySpace/student.php @@ -47,12 +47,12 @@ if (isset($_GET['user_id']) && '' != $_GET['user_id'] && isset($_GET['type']) && function get_count_users(): int { - $users = get_users(null, null, 0, 3); + $users = get_users(null, null, 0, 3, true); - return count($users); + return $users['count_users']; } -function get_users($from, $limit, $column, $direction): array +function get_users($from, $limit, $column = 0, $direction = 3, $getCount = false): array { global $export_csv; $active = $_GET['active'] ?? 1; @@ -66,6 +66,39 @@ function get_users($from, $limit, $column, $direction): array if (!empty($sleepingDays)) { $lastConnectionDate = api_get_utc_datetime(strtotime($sleepingDays.' days ago')); } + + // Filter by Extra Fields + $useExtraFields = false; + $extraFieldResult = []; + foreach ($_GET as $key => $value) { + if (substr($key, 0, 6) == 'extra_') { + $variable = substr($key, 6); + if (UserManager::is_extra_field_available($variable) && !empty($value)) { + if (is_array($value)) { + $value = $value[$key]; + } + $useExtraFields = true; + $extraFieldResult[] = UserManager::get_extra_user_data_by_value( + $variable, + $value, + true + ); + } + } + } + $filterUsers = []; + if ($useExtraFields) { + if (count($extraFieldResult) > 1) { + for ($i = 0; $i < count($extraFieldResult) - 1; $i++) { + if (is_array($extraFieldResult[$i + 1])) { + $filterUsers = array_intersect($extraFieldResult[$i], $extraFieldResult[$i + 1]); + } + } + } else { + $filterUsers = $extraFieldResult[0]; + } + } + $is_western_name_order = api_is_western_name_order(); $coach_id = api_get_user_id(); $column = 'u.user_id'; @@ -77,7 +110,7 @@ function get_users($from, $limit, $column, $direction): array $students = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus( 'drh_all', api_get_user_id(), - false, + $getCount, $from, $limit, $column, @@ -87,7 +120,8 @@ function get_users($from, $limit, $column, $direction): array $lastConnectionDate, null, null, - api_is_student_boss() ? null : STUDENT + api_is_student_boss() ? null : STUDENT, + $filterUsers ); $drhLoaded = true; } @@ -104,7 +138,9 @@ function get_users($from, $limit, $column, $direction): array $limit, null, $keyword, - $lastConnectionDate + $lastConnectionDate, + $getCount, + $filterUsers ); $drhLoaded = true; } @@ -117,7 +153,7 @@ function get_users($from, $limit, $column, $direction): array api_is_student_boss() ? null : STUDENT, false, false, - false, + $getCount, $from, $limit, $column, @@ -126,56 +162,22 @@ function get_users($from, $limit, $column, $direction): array $lastConnectionDate, api_is_student_boss() ? STUDENT_BOSS : COURSEMANAGER, $keyword, - $checkSessionVisibility + $checkSessionVisibility, + $filterUsers ); } - $url = $webCodePath.'mySpace/myStudents.php'; - - // Filter by Extra Fields - $useExtraFields = false; - $extraFieldResult = []; - foreach ($_GET as $key => $value) { - if (substr($key, 0, 6) == 'extra_') { - $variable = substr($key, 6); - if (UserManager::is_extra_field_available($variable) && !empty($value)) { - if (is_array($value)) { - $value = $value[$key]; - } - $useExtraFields = true; - $extraFieldResult[] = UserManager::get_extra_user_data_by_value( - $variable, - $value, - true - ); - } - } + if ($getCount) { + return ['count_users' => (int) $students]; } - $filterUsers = []; - if ($useExtraFields) { - if (count($extraFieldResult) > 1) { - for ($i = 0; $i < count($extraFieldResult) - 1; $i++) { - if (is_array($extraFieldResult[$i + 1])) { - $filterUsers = array_intersect($extraFieldResult[$i], $extraFieldResult[$i + 1]); - } - } - } else { - $filterUsers = $extraFieldResult[0]; - } - } + $url = $webCodePath.'mySpace/myStudents.php'; $all_datas = []; foreach ($students as $student_data) { $student_id = $student_data['user_id']; $student_data = api_get_user_info($student_id); - if ($useExtraFields) { - if (!in_array($student_id, $filterUsers)) { - continue; - } - } - if (isset($_GET['id_session'])) { $courses = Tracking::get_course_list_in_session_from_student($student_id, $sessionId); } diff --git a/main/mySpace/users.php b/main/mySpace/users.php index d3daf3e01a..223386393a 100755 --- a/main/mySpace/users.php +++ b/main/mySpace/users.php @@ -51,21 +51,45 @@ function get_count_users() $sleepingDays = isset($_GET['sleeping_days']) ? (int) $_GET['sleeping_days'] : null; $active = isset($_GET['active']) ? (int) $_GET['active'] : 1; $keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : null; - $status = isset($_GET['status']) ? Security::remove_XSS($_GET['status']) : null; + $status = !empty($_GET['status']) ? Security::remove_XSS($_GET['status']) : null; $lastConnectionDate = null; if (!empty($sleepingDays)) { $lastConnectionDate = api_get_utc_datetime(strtotime($sleepingDays.' days ago')); } - return SessionManager::getCountUserTracking( - $keyword, - $active, - $lastConnectionDate, - null, - null, - $status - ); + $usersCount = 0; + $allowDhrAccessToAllStudents = api_get_configuration_value('drh_allow_access_to_all_students'); + if ($allowDhrAccessToAllStudents) { + $conditions = []; + if (isset($status)) { + $conditions['status'] = $status; + } + if (isset($active)) { + $conditions['active'] = (int) $active; + } + $usersCount = UserManager::get_user_list( + $conditions, + [], + false, + false, + null, + $keyword, + $lastConnectionDate, + true + ); + } else { + $usersCount = SessionManager::getCountUserTracking( + $keyword, + $active, + $lastConnectionDate, + null, + null, + $status + ); + } + + return $usersCount; } function get_users($from, $limit, $column, $direction) @@ -74,7 +98,7 @@ function get_users($from, $limit, $column, $direction) $keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : null; $sleepingDays = isset($_GET['sleeping_days']) ? (int) $_GET['sleeping_days'] : null; $sessionId = isset($_GET['id_session']) ? (int) $_GET['id_session'] : 0; - $status = isset($_GET['status']) ? Security::remove_XSS($_GET['status']) : null; + $status = !empty($_GET['status']) ? Security::remove_XSS($_GET['status']) : null; $lastConnectionDate = null; if (!empty($sleepingDays)) { @@ -105,7 +129,10 @@ function get_users($from, $limit, $column, $direction) } $allowDhrAccessToAllStudents = api_get_configuration_value('drh_allow_access_to_all_students'); if ($allowDhrAccessToAllStudents) { - $conditions = ['status' => STUDENT]; + $conditions = []; + if (isset($status)) { + $conditions['status'] = $status; + } if (isset($active)) { $conditions['active'] = (int) $active; }