Users - Fix load students table in reporting - refs BT#20249

pull/4416/head
Christian 3 years ago
parent aef07867d1
commit d19450c29d
  1. 7
      main/inc/lib/sessionmanager.lib.php
  2. 29
      main/inc/lib/tracking.lib.php
  3. 29
      main/inc/lib/usermanager.lib.php
  4. 94
      main/mySpace/student.php
  5. 49
      main/mySpace/users.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));

@ -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,

@ -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;

@ -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);
}

@ -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;
}

Loading…
Cancel
Save