Fixing reporting see BT#7297

1.9.x
Julio Montoya 12 years ago
parent 96bcf99ec2
commit ef1b7dab87
  1. 137
      main/inc/lib/sessionmanager.lib.php
  2. 74
      main/inc/lib/tracking.lib.php
  3. 83
      main/inc/lib/usermanager.lib.php
  4. 369
      main/mySpace/index.php
  5. 16
      main/mySpace/student.php
  6. 20
      main/mySpace/teachers.php
  7. 295
      main/mySpace/users.php

@ -3451,6 +3451,7 @@ class SessionManager
* @param string $lastConnectionDate
* @param array $sessionIdList
* @param array $studentIdList
* @param int $filterByStatus
* @return array|int
*/
public static function getAllUsersFromCoursesFromAllSessionFromStatus(
@ -3465,8 +3466,11 @@ class SessionManager
$active = null,
$lastConnectionDate = null,
$sessionIdList = array(),
$studentIdList = array()
$studentIdList = array(),
$filterByStatus = null
) {
$filterByStatus = intval($filterByStatus);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
@ -3477,7 +3481,6 @@ class SessionManager
$userId = intval($userId);
$limitCondition = null;
if (isset($from) && isset($numberItems)) {
$from = intval($from);
$numberItems = intval($numberItems);
@ -3496,27 +3499,35 @@ class SessionManager
switch ($status) {
case 'drh':
// Classic DRH
if (empty($sessionIdList)) {
$studentListSql = UserManager::get_users_followed_by_drh($userId, STUDENT, true, true);
$studentListSql = array_keys($studentListSql);
if (empty($studentIdList)) {
$studentListSql = UserManager::get_users_followed_by_drh($userId, $filterByStatus, true, false);
$studentIdList = array_keys($studentListSql);
$studentListSql = "'".implode("','", $studentIdList)."'";
} else {
$studentListSql = $studentIdList;
$studentIdList = array_map('intval', $studentIdList);
$studentListSql = "'".implode("','", $studentIdList)."'";
}
if (!empty($studentListSql)) {
$studentListSql = array_map('intval', $studentListSql);
$statusConditions = " AND u.user_id IN (".$studentListSql.") ";
}
break;
case 'drh_all':
// Show all by DRH
if (empty($sessionIdList)) {
$sessionsListSql = SessionManager::get_sessions_followed_by_drh($userId, null, null, false, true, true);
$sessionsListSql = array_keys($sessionsListSql);
$sessionsListSql = SessionManager::get_sessions_followed_by_drh(
$userId,
null,
null,
false,
true,
true
);
} else {
$sessionsListSql = $sessionIdList;
$sessionIdList = array_map('intval', $sessionIdList);
$sessionsListSql = "'".implode("','", $sessionIdList)."'";
}
if (!empty($sessionsListSql)) {
$sessionsListSql = array_map('intval', $sessionsListSql);
$statusConditions = " AND s.id IN (".$sessionsListSql.") ";
}
break;
@ -3552,6 +3563,10 @@ class SessionManager
$activeCondition
";
if (!empty($filterByStatus)) {
$where .= " AND u.status = ".$filterByStatus;
}
if (!empty($lastConnectionDate)) {
$lastConnectionDate = Database::escape_string($lastConnectionDate);
$where .= " AND l.login_date <= '$lastConnectionDate' ";
@ -3562,12 +3577,12 @@ class SessionManager
if (!empty($keyword)) {
$keyword = Database::escape_string($keyword);
$sql .= " AND (
u.username LIKE '%$keyword%' OR
u.firstname LIKE '%$keyword%' OR
u.lastname LIKE '%$keyword%' OR
u.official_code LIKE '%$keyword%' OR
u.email LIKE '%$keyword%'
)";
u.username LIKE '%$keyword%' OR
u.firstname LIKE '%$keyword%' OR
u.lastname LIKE '%$keyword%' OR
u.official_code LIKE '%$keyword%' OR
u.email LIKE '%$keyword%'
)";
}
if ($getCount) {
@ -3580,11 +3595,15 @@ class SessionManager
return $count;
}
$sql .= "ORDER BY $column $direction
$limitCondition";
if (!empty($column) && !empty($direction)) {
$sql .= " ORDER BY $column $direction ";
}
$sql .= $limitCondition;
$result = Database::query($sql);
$result = Database::store_result($result);
return $result ;
}
@ -3745,21 +3764,17 @@ class SessionManager
$active = null,
$lastConnectionDate = null,
$sessionIdList = array(),
$studentIdList = array()
$studentIdList = array(),
$userStatus = null
) {
if (!isset($keyword)) {
$keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : null;
}
if (!isset($active)) {
$active = isset($_GET['active']) ? $_GET['active'] : null;
}
$userId = api_get_user_id();
if (api_is_drh()) {
if (api_drh_can_access_all_session_content()) {
$count = self::getAllUsersFromCoursesFromAllSessionFromStatus(
'drh_all',
api_get_user_id(),
$userId,
true,
null,
null,
@ -3769,56 +3784,43 @@ class SessionManager
$active,
$lastConnectionDate,
$sessionIdList,
$studentIdList
$studentIdList,
$userStatus
);
} else {
$count = self::getAllUsersFromCoursesFromAllSessionFromStatus(
'drh',
api_get_user_id(),
true,
null,
null,
null,
null,
$keyword,
$active,
$lastConnectionDate,
$sessionIdList,
$studentIdList
);
}
} else {
if (api_is_platform_admin()) {
$count = self::getAllUsersFromCoursesFromAllSessionFromStatus(
'admin',
api_get_user_id(),
true,
null,
null,
null,
$count = UserManager::get_users_followed_by_drh(
$userId,
null,
$keyword,
$active,
$lastConnectionDate,
$sessionIdList,
$studentIdList
);
} else {
$count = self::getAllUsersFromCoursesFromAllSessionFromStatus(
'teacher',
api_get_user_id(),
false,
false,
true,
null,
null,
null,
null,
$keyword,
$active,
$lastConnectionDate,
$sessionIdList,
$studentIdList
array(),
array(),
$userStatus
);
}
} else {
$count = UserManager::get_users_followed_by_drh(
$userId,
$userStatus,
false,
false,
true,
null,
null,
null,
null,
$active,
$lastConnectionDate
);
}
return $count;
}
@ -3858,7 +3860,7 @@ class SessionManager
$sessionCourse = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$courseUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);
// select the courses
// Select the teachers.
$sql = "SELECT cu.user_id FROM $course c
INNER JOIN $sessionCourse src ON c.code = src.course_code
INNER JOIN $courseUser cu ON (cu.course_code = c.code)
@ -3876,6 +3878,7 @@ class SessionManager
}
}
}
if (!empty($teacherResult)) {
$tableUser = Database::get_main_table(TABLE_MAIN_USER);

@ -22,6 +22,80 @@ require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
*/
class Tracking
{
/**
* @param int $userId
*
* @return array
*/
public static function getStats($userId)
{
if (api_is_drh() && api_drh_can_access_all_session_content()) {
$studentList = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus(
'drh_all',
$userId,
false,
null,
null,
null,
null,
null,
null,
null,
array(),
array(),
STUDENT
);
$students = array();
foreach ($studentList as $studentData) {
$students[] = $studentData['user_id'];
}
$teacherList = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus(
'drh_all',
$userId,
false,
null,
null,
null,
null,
null,
null,
null,
array(),
array(),
COURSEMANAGER
);
$teachers = array();
foreach ($teacherList as $teacherData) {
$teachers[] = $teacherData['user_id'];
}
$platformCourses = SessionManager::getAllCoursesFromAllSessionFromDrh($userId);
$courses = array();
foreach ($platformCourses as $course) {
$courses[$course] = $course;
}
$sessions = SessionManager::get_sessions_followed_by_drh($userId);
} else {
$students = array_keys(UserManager::get_users_followed_by_drh($userId, STUDENT));
$teachers = array_keys(UserManager::get_users_followed_by_drh($userId, COURSEMANAGER));
$platformCourses = CourseManager::get_courses_followed_by_drh($userId);
foreach ($platformCourses as $course) {
$courses[$course['code']] = $course['code'];
}
$sessions = SessionManager::get_sessions_followed_by_drh($userId);
}
return array(
'teachers' => $teachers,
'students' => $students,
'courses' => $courses,
'sessions' => $sessions
);
}
/**
* Calculates the time spent on the platform by a user
* @param int|array User id

@ -3136,15 +3136,14 @@ class UserManager
$table_user_tag = Database::get_main_table(TABLE_MAIN_TAG);
$table_user_tag_values = Database::get_main_table(TABLE_MAIN_USER_REL_TAG);
$tags = UserManager::get_user_tags($user_id, $field_id);
//echo '<pre>';var_dump($tags);
if (is_array($tags) && count($tags) > 0) {
foreach ($tags as $key => $tag) {
if ($tag['count'] > '0') {
$sql = "UPDATE $table_user_tag SET count = count - 1 WHERE id = $key ";
$result = Database::query($sql);
Database::query($sql);
}
$sql = "DELETE FROM $table_user_tag_values WHERE user_id = $user_id AND tag_id = $key";
$result = Database::query($sql);
Database::query($sql);
}
}
}
@ -3462,14 +3461,25 @@ class UserManager
/**
* get users followed by human resource manager
* @param int hr_dept id
* @param int user status (optional)
* @param int hr_dept id
* @param int user status (optional)
* @param bool $getOnlyUserId
* @param bool $getSql
* @return array users
*/
public static function get_users_followed_by_drh($hr_dept_id, $user_status = 0, $getOnlyUserId = false, $getSql = false)
{
public static function get_users_followed_by_drh(
$hr_dept_id,
$user_status = 0,
$getOnlyUserId = false,
$getSql = false,
$getCount = false,
$from = null,
$numberItems = null,
$column = null,
$direction = null,
$active = null,
$lastConnectionDate = null
) {
// Database Table Definitions
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_user_rel_user = Database::get_main_table(TABLE_MAIN_USER_REL_USER);
@ -3477,6 +3487,16 @@ class UserManager
$hr_dept_id = intval($hr_dept_id);
$limitCondition = null;
if (isset($from) && isset($numberItems)) {
$from = intval($from);
$numberItems = intval($numberItems);
$limitCondition = "LIMIT $from, $numberItems";
}
$column = Database::escape_string($column);
$direction = in_array(strtolower($direction), array('asc', 'desc')) ? $direction : null;
$condition_status = '';
if (!empty($user_status)) {
$condition_status = ' AND u.status = '.$user_status;
@ -3485,9 +3505,20 @@ class UserManager
if ($getOnlyUserId) {
$select = " SELECT u.user_id";
}
if ($getCount) {
$select = " SELECT COUNT(DISTINCT(u.user_id)) as count ";
}
$join = null;
if (!empty($lastConnectionDate)) {
$loginTable = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
$join .= " INNER JOIN $loginTable l ON (l.login_user_id = u.user_id) ";
}
$sql = " $select FROM $tbl_user u
INNER JOIN $tbl_user_rel_user uru ON (uru.user_id = u.user_id)
LEFT JOIN $tbl_user_rel_access_url a ON (a.user_id = u.user_id)
$join
WHERE
friend_user_id = '$hr_dept_id' AND
relation_type = '".USER_RELATION_TYPE_RRHH."'
@ -3495,24 +3526,46 @@ class UserManager
access_url_id = ".api_get_current_access_url_id()."
";
if (!is_null($active)) {
$active = intval($active);
$sql.= " AND active = $active";
}
if (!empty($lastConnectionDate)) {
$lastConnectionDate = Database::escape_string($lastConnectionDate);
$sql .= " AND l.login_date <= '$lastConnectionDate' ";
}
if ($getSql) {
return $sql;
}
if ($getCount) {
$result = Database::query($sql);
$row = Database::fetch_array($result);
return $row['count'];
}
$orderBy = null;
if (api_is_western_name_order()) {
$sql .= " ORDER BY u.firstname, u.lastname ";
$orderBy .= " ORDER BY u.firstname, u.lastname ";
} else {
$sql .= " ORDER BY u.lastname, u.firstname ";
$orderBy .= " ORDER BY u.lastname, u.firstname ";
}
$rs_assigned_users = Database::query($sql);
$assigned_users_to_hrm = array();
if (Database::num_rows($rs_assigned_users) > 0) {
while ($row_assigned_users = Database::fetch_array($rs_assigned_users)) {
$assigned_users_to_hrm[$row_assigned_users['user_id']] = $row_assigned_users;
if (!empty($column) && !empty($direction)) {
$orderBy = " ORDER BY $column $direction ";
}
$sql .= $orderBy;
$sql .= $limitCondition;
$result = Database::query($sql);
$users = array();
if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_array($result)) {
$users[$row['user_id']] = $row;
}
}
return $assigned_users_to_hrm;
return $users;
}
/**

@ -32,8 +32,7 @@ $csv_content = array();
$nameTools = get_lang('MySpace');
$user_id = api_get_user_id();
$is_coach = api_is_coach($_GET['session_id']); // This is used?
$is_coach = api_is_coach($_GET['session_id']);
$session_id = isset($_GET['session_id']) ? intval($_GET['session_id']) : 0;
$is_platform_admin = api_is_platform_admin();
@ -65,58 +64,9 @@ if (!$export_csv) {
}
// Database table definitions
$tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
$tbl_sessions = Database :: get_main_table(TABLE_MAIN_SESSION);
$tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
/* FUNCTIONS */
function count_coaches()
{
global $total_no_coaches;
return $total_no_coaches;
}
function sort_users($a, $b)
{
return api_strcmp(
trim(api_strtolower($a[$_SESSION['tracking_column']])),
trim(api_strtolower($b[$_SESSION['tracking_column']]))
);
}
function rsort_users($a, $b)
{
return api_strcmp(
trim(api_strtolower($b[$_SESSION['tracking_column']])),
trim(api_strtolower($a[$_SESSION['tracking_column']]))
);
}
function count_sessions_coached()
{
global $count_sessions;
return $count_sessions;
}
function sort_sessions($a, $b)
{
global $tracking_column;
if ($a[$tracking_column] > $b[$tracking_column]) {
return 1;
} else {
return -1;
}
}
function rsort_sessions($a, $b)
{
global $tracking_column;
if ($b[$tracking_column] > $a[$tracking_column]) {
return 1;
} else {
return -1;
}
}
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_sessions = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
/* MAIN CODE */
@ -133,7 +83,6 @@ if (isset($_GET['view']) && in_array($_GET['view'], $views)) {
}
$menu_items = array();
global $_configuration;
if ($is_platform_admin) {
if ($view == 'admin') {
@ -205,46 +154,13 @@ if (empty($session_id) || in_array($display, array('accessoverview','lpprogresso
echo '</div>';
$userId = api_get_user_id();
$stats = Tracking::getStats($userId);
// Getting courses followed by a coach (No session courses).
$courses = CourseManager::get_course_list_as_coach($user_id, false);
// Courses with no session:
if (isset($courses[0])) {
$courses = $courses[0];
}
// If is drh
if ($is_drh) {
if (api_drh_can_access_all_session_content()) {
$studentList = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus('drh_all', api_get_user_id());
$students = array();
foreach ($studentList as $studentData) {
$students[] = $studentData['user_id'];
}
$courses_of_the_platform = SessionManager::getAllCoursesFromAllSessionFromDrh(api_get_user_id());
foreach ($courses_of_the_platform as $course) {
$courses[$course] = $course;
}
$sessions = SessionManager::get_sessions_followed_by_drh(api_get_user_id());
} else {
$students = array_keys(UserManager::get_users_followed_by_drh($user_id, STUDENT));
$courses_of_the_platform = CourseManager::get_courses_followed_by_drh($user_id);
foreach ($courses_of_the_platform as $course) {
$courses[$course['code']] = $course['code'];
}
$sessions = SessionManager::get_sessions_followed_by_drh($user_id);
}
} else {
// Getting students from courses and courses in sessions (To show the total students that the user follows)
$students = CourseManager::get_user_list_from_courses_as_coach($user_id);
// Sessions for the coach
$sessions = Tracking::get_sessions_coached_by_user($user_id);
}
$students = $stats['teachers'];
$teachers = $stats['students'];
$courses = $stats['courses'];
$sessions = $stats['sessions'];
$sessionIdList = array();
if (!empty($sessions)) {
@ -259,144 +175,191 @@ $count_courses = count($courses);
// Sessions for the user
$count_sessions = count($sessions);
// Students
$nb_students = count($students);
$total_time_spent = 0;
$total_courses = 0;
$avg_total_progress = 0;
$avg_results_to_exercises = 0;
$nb_inactive_students = 0;
$nb_posts = $nb_assignments = 0;
$inactiveTime = time() - (3600 * 24 * 7);
$nb_students = 0;
$numberTeachers = 0;
$daysAgo = 7;
if (!empty($students)) {
// Students
$nb_students = count($students);
$studentIds = array_values($students);
$nb_students = count($studentIds);
// Inactive students
$inactiveUsers = Tracking::getInactiveUsers($studentIds, $daysAgo);
$totalTimeSpent = Tracking::get_time_spent_on_the_platform($studentIds);
$posts = Tracking::count_student_messages($studentIds);
$countAssignments = Tracking::count_student_assignments($studentIds);
$progress = Tracking::get_avg_student_progress($studentIds);
$averageScore = Tracking::getAverageStudentScore($studentIds);
// average progress
$avg_total_progress = $progress / $nb_students;
// average results to the tests
$avg_results_to_exercises = $averageScore;
// average assignments
$nb_assignments = $countAssignments / $nb_students;
// average posts
$nb_posts = $posts ;
$avg_time_spent = $totalTimeSpent;
$avg_courses_per_student = $count_courses / $nb_students;
}
if (!empty($teachers)) {
$numberTeachers = count($teachers);
}
// Inactive students
//$countInactiveUsers = Tracking::getInactiveUsers($studentIds, $daysAgo);
$totalTimeSpent = Tracking::get_time_spent_on_the_platform($studentIds);
$posts = Tracking::count_student_messages($studentIds);
$countAssignments = Tracking::count_student_assignments($studentIds);
$progress = Tracking::get_avg_student_progress($studentIds);
$averageScore = Tracking::getAverageStudentScore($studentIds);
$avg_results_to_exercises = $averageScore;
// average posts
$nb_posts = $posts;
$avg_time_spent = $totalTimeSpent;
$linkAddUser = null;
$linkAddCourse = null;
$linkAddSession = null;
if (api_is_platform_admin()) {
$linkAddUser = ' '.Display::url(
Display::return_icon('add.png', get_lang('Add')),
api_get_path(WEB_CODE_PATH).'admin/dashboard_add_users_to_user.php?user='.api_get_user_id(),
array('class' => '')
);
$linkAddCourse = ' '.Display::url(
Display::return_icon('add.png', get_lang('Add')),
api_get_path(WEB_CODE_PATH).'admin/dashboard_add_courses_to_user.php?user='.api_get_user_id(),
array('class' => '')
);
$linkAddSession = ' '.Display::url(
Display::return_icon('add.png', get_lang('Add')),
api_get_path(WEB_CODE_PATH).'admin/dashboard_add_sessions_to_user.php?user='.api_get_user_id(),
array('class' => '')
);
}
echo Display::page_subheader(get_lang('Overview'));
echo '<div class="report_section">
<table class="table table-bordered">
<tr>
<td>'.get_lang('FollowedStudents').'</td>
<td align="right">'.$nb_students.'</td>
</tr>
<tr>
<td>'.get_lang('FollowedTeachers').'</td>
<td align="right">'.$numberTeachers.'</td>
</tr>
<tr>
<td>'.get_lang('FollowedUsers').'</td>
<td align="right">'.($nb_students+$numberTeachers).$linkAddUser.'</td>
</tr>
<tr>
<td>'.get_lang('FollowedCourses').'</td>
<td align="right">'.$count_courses.$linkAddCourse.'</td>
</tr>
<tr>
<td>'.get_lang('FollowedSessions').'</td>
<td align="right">'.$count_sessions.$linkAddSession.'</td>
</tr>
</table>';
echo '</div>';
echo Display::page_subheader(get_lang('Students').' ('.$nb_students.')');
if ($export_csv) {
//csv part
$csv_content[] = array(get_lang('Students'));
$csv_content[] = array(get_lang('InactivesStudents'), $nb_inactive_students);
$csv_content[] = array(get_lang('AverageTimeSpentOnThePlatform'), $avg_time_spent);
$csv_content[] = array(get_lang('AverageCoursePerStudent'), $avg_courses_per_student);
$csv_content[] = array(get_lang('AverageProgressInLearnpath'), is_null($avg_total_progress) ? null : round($avg_total_progress, 2).'%');
$csv_content[] = array(get_lang('AverageResultsToTheExercices'), is_null($avg_results_to_exercises) ? null : round($avg_results_to_exercises, 2).'%');
$csv_content[] = array(get_lang('AveragePostsInForum'), $nb_posts);
$csv_content[] = array(get_lang('AverageAssignments'), $nb_assignments);
$csv_content[] = array();
} else {
$lastConnectionDate = api_get_utc_datetime(strtotime('15 days ago'));
$countActiveUsers = SessionManager::getCountUserTracking(null, 1, null, array(), array());
$countInactiveUsers = SessionManager::getCountUserTracking(null, 0, null, $sessionIdList, $studentIds);
$countSleepingTeachers = SessionManager::getTeacherTracking(
api_get_user_id(),
1,
$lastConnectionDate,
true,
$sessionIdList
);
$countSleepingStudents = SessionManager::getCountUserTracking(
null,
1,
$lastConnectionDate,
$sessionIdList,
$studentIds
);
echo Display::page_subheader(get_lang('Overview'));
$form = new FormValidator('search_user', 'get', api_get_path(WEB_CODE_PATH).'mySpace/student.php');
$form->addElement('text', 'keyword', get_lang('User'));
$form->addElement('button', 'submit', get_lang('Search'));
$form->display();
// html part
echo '<div class="report_section">
<table class="table table-bordered">
<tr>
<td>'.get_lang('FollowedUsers').'</td>
<td align="right">'.$nb_students.'</td>
<td>'.Display::url(
get_lang('ActiveUsers'),
api_get_path(WEB_CODE_PATH).'mySpace/users.php?active=1').'</td>
<td align="right">'.intval($countActiveUsers).'</td>
</tr>
<tr>
<td>'.get_lang('FollowedCourses').'</td>
<td align="right">'.$count_courses.'</td>
<td>'.Display::url(get_lang('InactiveUsers'), api_get_path(WEB_CODE_PATH).'mySpace/users.php?active=0').'</td>
<td align="right">'.$countInactiveUsers.'</td>
</tr>
<tr>
<td>'.get_lang('FollowedSessions').'</td>
<td align="right">'.$count_sessions.'</td>
<td>'.Display::url(get_lang('SleepingTeachers'), api_get_path(WEB_CODE_PATH).'mySpace/teachers.php?sleeping_days=15').'</td>
<td align="right">'.$countSleepingTeachers.'</td>
</tr>
</table>';
echo '</div>';
echo Display::page_subheader(get_lang('Students').' ('.$nb_students.')');
if ($export_csv) {
//csv part
$csv_content[] = array(get_lang('Students'));
$csv_content[] = array(get_lang('InactivesStudents'), $nb_inactive_students);
$csv_content[] = array(get_lang('AverageTimeSpentOnThePlatform'), $avg_time_spent);
$csv_content[] = array(get_lang('AverageCoursePerStudent'), $avg_courses_per_student);
$csv_content[] = array(get_lang('AverageProgressInLearnpath'), is_null($avg_total_progress) ? null : round($avg_total_progress, 2).'%');
$csv_content[] = array(get_lang('AverageResultsToTheExercices'), is_null($avg_results_to_exercises) ? null : round($avg_results_to_exercises, 2).'%');
$csv_content[] = array(get_lang('AveragePostsInForum'), $nb_posts);
$csv_content[] = array(get_lang('AverageAssignments'), $nb_assignments);
$csv_content[] = array();
} else {
$lastConnectionDate = api_get_utc_datetime(strtotime('15 days ago'));
$countActiveUsers = $nb_students; //SessionManager::getCountUserTracking(null, 1);
$countInactiveUsers = SessionManager::getCountUserTracking(null, 0, null, $sessionIdList, $studentIds);
$countSleepingTeachers = SessionManager::getTeacherTracking(api_get_user_id(), 1, $lastConnectionDate, true, $sessionIdList);
$countSleepingStudents = SessionManager::getCountUserTracking(null, 1, $lastConnectionDate, $sessionIdList, $studentIds);
$form = new FormValidator('search_user', 'get', api_get_path(WEB_CODE_PATH).'mySpace/student.php');
$form->addElement('text', 'keyword', get_lang('User'));
$form->addElement('button', 'submit', get_lang('Search'));
$form->display();
// html part
echo '<div class="report_section">
<table class="table table-bordered">
<tr>
<td>'.Display::url(get_lang('ActiveUsers'), api_get_path(WEB_CODE_PATH).'mySpace/student.php?active=1').'</td>
<td align="right">'.$countActiveUsers.'</td>
</tr>
<tr>
<td>'.Display::url(get_lang('InactiveUsers'), api_get_path(WEB_CODE_PATH).'mySpace/student.php?active=0').'</td>
<td align="right">'.$countInactiveUsers.'</td>
</tr>
<tr>
<td>'.Display::url(get_lang('SleepingTeachers'), api_get_path(WEB_CODE_PATH).'mySpace/teachers.php?sleeping_days=15').'</td>
<td align="right">'.$countSleepingTeachers.'</td>
</tr>
<tr>
<td>'.Display::url(get_lang('SleepingStudents'), api_get_path(WEB_CODE_PATH).'mySpace/student.php?sleeping_days=15').'</td>
<td align="right">'.$countSleepingStudents.'</td>
</tr>
<tr>
<td>'.get_lang('AverageCoursePerStudent').'</td>
<td align="right">'.(is_null($avg_courses_per_student) ? '' : round($avg_courses_per_student, 2)).'</td>
</tr>
<tr>
<td>'.get_lang('InactivesStudents').'</td>
<td align="right">'.$nb_inactive_students.'</td>
</tr>
<tr>
<td>'.get_lang('AverageTimeSpentOnThePlatform').'</td>
<td align="right">'.(is_null($avg_time_spent) ? '' : api_time_to_hms($avg_time_spent)).'</td>
</tr>
<tr>
<td>'.get_lang('AverageProgressInLearnpath').'</td>
<td align="right">'.(is_null($avg_total_progress) ? '' : round($avg_total_progress, 2).'%').'</td>
</tr>
<tr>
<td>'.get_lang('AvgCourseScore').'</td>
<td align="right">'.(is_null($avg_results_to_exercises) ? '' : round($avg_results_to_exercises, 2).'%').'</td>
</tr>
<tr>
<td>'.get_lang('AveragePostsInForum').'</td>
<td align="right">'.(is_null($nb_posts) ? '' : round($nb_posts, 2)).'</td>
</tr>
<tr>
<td>'.get_lang('AverageAssignments').'</td>
<td align="right">'.(is_null($nb_assignments) ? '' : round($nb_assignments, 2)).'</td>
</tr>
</table>
<a class="btn" href="'.api_get_path(WEB_CODE_PATH).'mySpace/student.php">
'.get_lang('SeeStudentList').'
</a>
</div><br />';
}
<tr>
<td>'.Display::url(get_lang('SleepingStudents'), api_get_path(WEB_CODE_PATH).'mySpace/student.php?sleeping_days=15').'</td>
<td align="right">'.$countSleepingStudents.'</td>
</tr>
<tr>
<td>'.get_lang('AverageCoursePerStudent').'</td>
<td align="right">'.(is_null($avg_courses_per_student) ? '' : round($avg_courses_per_student, 2)).'</td>
</tr>
<tr>
<td>'.get_lang('InactivesStudents').'</td>
<td align="right">'.$nb_inactive_students.'</td>
</tr>
<tr>
<td>'.get_lang('AverageTimeSpentOnThePlatform').'</td>
<td align="right">'.(is_null($avg_time_spent) ? '' : api_time_to_hms($avg_time_spent)).'</td>
</tr>
<tr>
<td>'.get_lang('AverageProgressInLearnpath').'</td>
<td align="right">'.(is_null($avg_total_progress) ? '' : round($avg_total_progress, 2).'%').'</td>
</tr>
<tr>
<td>'.get_lang('AvgCourseScore').'</td>
<td align="right">'.(is_null($avg_results_to_exercises) ? '' : round($avg_results_to_exercises, 2).'%').'</td>
</tr>
<tr>
<td>'.get_lang('AveragePostsInForum').'</td>
<td align="right">'.(is_null($nb_posts) ? '' : round($nb_posts, 2)).'</td>
</tr>
<tr>
<td>'.get_lang('AverageAssignments').'</td>
<td align="right">'.(is_null($nb_assignments) ? '' : round($nb_assignments, 2)).'</td>
</tr>
</table>
<a class="btn" href="'.api_get_path(WEB_CODE_PATH).'mySpace/student.php">
'.get_lang('SeeStudentList').'
</a>
</div><br />';
}
// Send the csv file if asked
if ($export_csv) {
ob_end_clean();

@ -46,7 +46,7 @@ function get_count_users($keyword = null, $active = null)
function get_users($from, $number_of_items, $column, $direction)
{
$active = isset($_GET['active']) ? $_GET['active'] : null;
$active = isset($_GET['active']) ? $_GET['active'] : 1;
$keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : null;
$sleepingDays = isset($_GET['sleeping_days']) ? intval($_GET['sleeping_days']) : null;
@ -74,15 +74,16 @@ function get_users($from, $number_of_items, $column, $direction)
$lastConnectionDate
);
} else {
$students = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus(
'drh',
$students = UserManager::get_users_followed_by_drh(
api_get_user_id(),
null,
false,
false,
false,
$from,
$number_of_items,
$column,
$direction,
$keyword,
$active,
$lastConnectionDate
);
@ -102,15 +103,16 @@ function get_users($from, $number_of_items, $column, $direction)
$lastConnectionDate
);
} else {
$students = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus(
'teacher',
$students = UserManager::get_users_followed_by_drh(
api_get_user_id(),
null,
false,
false,
false,
$from,
$number_of_items,
$column,
$direction,
$keyword,
$active,
$lastConnectionDate
);

@ -9,28 +9,30 @@
*/
ob_start();
// names of the language file that needs to be included
$language_file = array ('registration', 'index', 'trad4all', 'tracking', 'admin');
// names of the language file that needs to be included.
$language_file = array('registration', 'index', 'trad4all', 'tracking', 'admin');
$cidReset = true;
require_once '../inc/global.inc.php';
require_once 'myspace.lib.php';
$userId = api_get_user_id();
$this_section = SECTION_TRACKING;
$nameTools = get_lang('Teachers');
api_block_anonymous_users();
$interbreadcrumb[] = array ("url" => "index.php", "name" => get_lang('MySpace'));
Display :: display_header($nameTools);
$sleepingDays = isset($_GET['sleeping_days']) ? intval($_GET['sleeping_days']) : null;
$active = isset($_GET['active']) ? intval($_GET['active']) : 1;
$formateurs = array();
if (api_is_drh() || api_is_platform_admin()) {
// Followed teachers by drh
if (api_drh_can_access_all_session_content()) {
/*if (api_drh_can_access_all_session_content()) {
$sessions = SessionManager::get_sessions_followed_by_drh($userId);
if (!empty($sessions)) {
$formateurs = array();
@ -49,15 +51,13 @@ if (api_is_drh() || api_is_platform_admin()) {
}
} else {
$formateurs = UserManager::get_users_followed_by_drh($userId, COURSEMANAGER);
}
}*/
$lastConnectionDate = null;
if (!empty($sleepingDays)) {
$lastConnectionDate = api_get_utc_datetime(strtotime($sleepingDays.' days ago'));
}
$formateurs = SessionManager::getTeacherTracking($userId, 1, $lastConnectionDate);
$formateurs = SessionManager::getTeacherTracking($userId, $active, $lastConnectionDate);
$menu_items = array(
Display::url(Display::return_icon('stats.png', get_lang('MyStats'), '', ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH)."auth/my_progress.php" ),
@ -138,8 +138,8 @@ $start_date = $end_date = null;
if ($form->validate()) {
$values = $form->exportValues();
$start_date = $defaults['start_date'] = $values['start_date'];
$end_date = $defaults['end_date'] = $values['end_date'];
$start_date = $defaults['start_date'] = $values['start_date'];
$end_date = $defaults['end_date'] = $values['end_date'];
$time_filter = 'custom';
$time_label = sprintf(get_lang('TimeSpentBetweenXAndY'), $start_date, $end_date);
}

@ -0,0 +1,295 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Student report
* @package chamilo.reporting
*/
/**
* Code
*/
// name of the language file that needs to be included
$language_file = array ('registration', 'index', 'tracking', 'admin');
$cidReset = true;
require_once '../inc/global.inc.php';
require_once api_get_path(LIBRARY_PATH).'export.lib.inc.php';
$export_csv = isset($_GET['export']) && $_GET['export'] == 'csv' ? true : false;
$keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : null;
$active = isset($_GET['active']) ? intval($_GET['active']) : null;
api_block_anonymous_users();
$this_section = SECTION_TRACKING;
$interbreadcrumb[] = array ("url" => "index.php", "name" => get_lang('MySpace'));
if (isset($_GET["user_id"]) && $_GET["user_id"] != "" && !isset($_GET["type"])) {
$interbreadcrumb[] = array ("url" => "teachers.php", "name" => get_lang('Teachers'));
}
if (isset($_GET["user_id"]) && $_GET["user_id"]!="" && isset($_GET["type"]) && $_GET["type"] == "coach") {
$interbreadcrumb[] = array ("url" => "coaches.php", "name" => get_lang('Tutors'));
}
function get_count_users($keyword = null, $active = null)
{
$sleepingDays = isset($_GET['sleeping_days']) ? intval($_GET['sleeping_days']) : null;
$lastConnectionDate = null;
if (!empty($sleepingDays)) {
$lastConnectionDate = api_get_utc_datetime(strtotime($sleepingDays.' days ago'));
}
return SessionManager::getCountUserTracking($keyword, $active, $lastConnectionDate);
}
function get_users($from, $number_of_items, $column, $direction)
{
$active = isset($_GET['active']) ? $_GET['active'] : 1;
$keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : null;
$sleepingDays = isset($_GET['sleeping_days']) ? intval($_GET['sleeping_days']) : null;
$lastConnectionDate = null;
if (!empty($sleepingDays)) {
$lastConnectionDate = api_get_utc_datetime(strtotime($sleepingDays.' days ago'));
}
$is_western_name_order = api_is_western_name_order();
$coach_id = api_get_user_id();
$column = 'u.user_id';
if (api_is_drh()) {
if (api_drh_can_access_all_session_content()) {
$students = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus(
'drh_all',
api_get_user_id(),
false,
$from,
$number_of_items,
$column,
$direction,
$keyword,
$active,
$lastConnectionDate
);
} else {
$students = UserManager::get_users_followed_by_drh(
api_get_user_id(),
null,
false,
false,
false,
$from,
$number_of_items,
$column,
$direction,
$active,
$lastConnectionDate
);
}
} else {
if (api_is_platform_admin()) {
$students = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus(
'admin',
api_get_user_id(),
false,
$from,
$number_of_items,
$column,
$direction,
$keyword,
$active,
$lastConnectionDate
);
} else {
$students = UserManager::get_users_followed_by_drh(
api_get_user_id(),
null,
false,
false,
false,
$from,
$number_of_items,
$column,
$direction,
$active,
$lastConnectionDate
);
}
}
$all_datas = array();
foreach ($students as $student_data) {
$student_id = $student_data['user_id'];
if (isset($_GET['id_session'])) {
$courses = Tracking :: get_course_list_in_session_from_student($student_id, $_GET['id_session']);
}
$avg_time_spent = $avg_student_score = $avg_student_progress = $total_assignments = $total_messages = 0;
$nb_courses_student = 0;
if (!empty($courses)) {
foreach ($courses as $course_code) {
if (CourseManager :: is_user_subscribed_in_course($student_id, $course_code, true)) {
$avg_time_spent += Tracking :: get_time_spent_on_the_course($student_id, $course_code, $_GET['id_session']);
$my_average = Tracking :: get_avg_student_score($student_id, $course_code);
if (is_numeric($my_average)) {
$avg_student_score += $my_average;
}
$avg_student_progress += Tracking :: get_avg_student_progress($student_id, $course_code);
$total_assignments += Tracking :: count_student_assignments($student_id, $course_code);
$total_messages += Tracking :: count_student_messages($student_id, $course_code);
$nb_courses_student++;
}
}
}
if ($nb_courses_student > 0) {
$avg_time_spent = $avg_time_spent / $nb_courses_student;
$avg_student_score = $avg_student_score / $nb_courses_student;
$avg_student_progress = $avg_student_progress / $nb_courses_student;
} else {
$avg_time_spent = null;
$avg_student_score = null;
$avg_student_progress = null;
}
$row = array();
if ($is_western_name_order) {
$row[] = $student_data['firstname'];
$row[] = $student_data['lastname'];
} else {
$row[] = $student_data['lastname'];
$row[] = $student_data['firstname'];
}
$string_date = Tracking :: get_last_connection_date($student_id, true);
$first_date = Tracking :: get_first_connection_date($student_id);
$row[] = $first_date;
$row[] = $string_date;
if (isset($_GET['id_coach']) && intval($_GET['id_coach']) != 0) {
$detailsLink = '<a href="myStudents.php?student='.$student_id.'&id_coach='.$coach_id.'&id_session='.$_GET['id_session'].'">
<img src="'.api_get_path(WEB_IMG_PATH).'2rightarrow.gif" border="0" /></a>';
} else {
$detailsLink = '<a href="myStudents.php?student='.$student_id.'">
<img src="'.api_get_path(WEB_IMG_PATH).'2rightarrow.gif" border="0" /></a>';
}
$row[] = $detailsLink;
$all_datas[] = $row;
}
return $all_datas;
}
if ($export_csv) {
$is_western_name_order = api_is_western_name_order(PERSON_NAME_DATA_EXPORT);
} else {
$is_western_name_order = api_is_western_name_order();
}
$sort_by_first_name = api_sort_by_first_name();
$actions .= '<div class="actions">';
if (api_is_drh()) {
$menu_items = array(
Display::url(Display::return_icon('stats.png', get_lang('MyStats'), '', ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH)."auth/my_progress.php" ),
Display::url(Display::return_icon('user_na.png', get_lang('Students'), array(), ICON_SIZE_MEDIUM), '#'),
Display::url(Display::return_icon('teacher.png', get_lang('Trainers'), array(), ICON_SIZE_MEDIUM), 'teachers.php'),
Display::url(Display::return_icon('course.png', get_lang('Courses'), array(), ICON_SIZE_MEDIUM), 'course.php'),
Display::url(Display::return_icon('session.png', get_lang('Sessions'), array(), ICON_SIZE_MEDIUM), 'session.php')
);
$nb_menu_items = count($menu_items);
if ($nb_menu_items > 1) {
foreach ($menu_items as $key => $item) {
$actions .= $item;
}
}
}
$actions .= '<span style="float:right">';
$actions .= Display::url(Display::return_icon('printer.png', get_lang('Print'), array(), ICON_SIZE_MEDIUM), 'javascript: void(0);', array('onclick'=>'javascript: window.print();'));
$actions .= Display::url(Display::return_icon('export_csv.png', get_lang('ExportAsCSV'), array(), ICON_SIZE_MEDIUM), api_get_self().'?export=csv&keyword='.$keyword);
$actions .= '</span>';
$actions .= '</div>';
$table = new SortableTable(
'tracking_student',
'get_count_users',
'get_users',
($is_western_name_order xor $sort_by_first_name) ? 1 : 0,
10
);
$params = array(
'keyword' => $keyword,
'active' => $active
);
$table->set_additional_parameters($params);
if ($is_western_name_order) {
$table->set_header(0, get_lang('FirstName'), false);
$table->set_header(1, get_lang('LastName'), false);
} else {
$table->set_header(0, get_lang('LastName'), false);
$table->set_header(1, get_lang('FirstName'), false);
}
$table->set_header(2, get_lang('FirstLogin'), false);
$table->set_header(3, get_lang('LastConnexion'), false);
$table->set_header(4, get_lang('Details'), false);
if ($export_csv) {
if ($is_western_name_order) {
$csv_header[] = array (
get_lang('FirstName', ''),
get_lang('LastName', ''),
get_lang('FirstLogin', ''),
get_lang('LastConnexion', '')
);
} else {
$csv_header[] = array (
get_lang('LastName', ''),
get_lang('FirstName', ''),
get_lang('FirstLogin', ''),
get_lang('LastConnexion', '')
);
}
}
$form = new FormValidator('search_user', 'get', api_get_path(WEB_CODE_PATH).'mySpace/student.php');
$form->addElement('text', 'keyword', get_lang('User'));
$form->addElement('button', 'submit', get_lang('Search'));
$form->setDefaults($params);
// send the csv file if asked
$content = $table->get_table_data();
if ($export_csv) {
foreach ($content as &$row) {
unset($row[4]);
}
$csv_content = array_merge($csv_header, $content);
ob_end_clean();
Export :: export_table_csv($csv_content, 'reporting_student_list');
exit;
} else {
Display::display_header($nameTools);
echo $actions;
$page_title = get_lang('Users');
echo Display::page_subheader($page_title);
if (isset($active)) {
if ($active) {
$activeLabel = get_lang('ActiveUsers');
} else {
$activeLabel = get_lang('InactiveUsers');
}
echo Display::page_subheader2($activeLabel);
}
$form->display();
$table->display();
}
Display :: display_footer();
Loading…
Cancel
Save