Skip to content

Commit

Permalink
Fix "Accesses by user overview" report page see BT#14450
Browse files Browse the repository at this point in the history
  • Loading branch information
jmontoyaa committed Jul 16, 2018
1 parent 4fe4e0c commit f4f92c9
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 42 deletions.
36 changes: 25 additions & 11 deletions main/inc/ajax/course.ajax.php
Original file line number Diff line number Diff line change
Expand Up @@ -231,27 +231,41 @@
if (api_is_platform_admin()) {
$user = Database::get_main_table(TABLE_MAIN_USER);
$session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sessionId = $_GET['session_id'];
$course = api_get_course_info_by_id($_GET['course_id']);

$json = [
'items' => [],
];

$sql = "SELECT u.user_id as id, u.username, u.lastname, u.firstname
FROM $user u
INNER JOIN $session_course_user r
ON u.user_id = r.user_id
WHERE session_id = %d AND c_id = '%s'
AND (u.firstname LIKE '%s' OR u.username LIKE '%s' OR u.lastname LIKE '%s')";
$needle = '%'.$_GET['q'].'%';
$sql_query = sprintf($sql, $_GET['session_id'], $course['real_id'], $needle, $needle, $needle);
$keyword = Database::escape_string($_GET['q']);
$status = 0;
if (empty($sessionId)) {
$status = STUDENT;
}

$result = Database::query($sql_query);
while ($user = Database::fetch_assoc($result)) {
$userList = CourseManager::get_user_list_from_course_code(
$course['code'],
$sessionId,
null,
null,
$status,
false,
false,
false,
[],
[],
[],
true,
[],
$_GET['q']
);

foreach ($userList as $user) {
$userCompleteName = api_get_person_name($user['firstname'], $user['lastname']);

$json['items'][] = [
'id' => $user['id'],
'id' => $user['user_id'],
'text' => "{$user['username']} ($userCompleteName)",
];
}
Expand Down
2 changes: 1 addition & 1 deletion main/inc/ajax/session.ajax.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
switch ($action) {
case 'get_user_sessions':
if (api_is_platform_admin() || api_is_session_admin()) {
$user_id = intval($_POST['user_id']);
$user_id = (int) $_POST['user_id'];
$list_sessions = SessionManager::get_sessions_by_user($user_id, true);
if (!empty($list_sessions)) {
foreach ($list_sessions as $session_item) {
Expand Down
28 changes: 20 additions & 8 deletions main/inc/lib/course.lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -1235,6 +1235,7 @@ public static function is_user_subscribed_in_real_or_linked_course($user_id, $co
* @param array $userIdList
* @param string $filterByActive
* @param array $sessionIdList
* @param string $searchByKeyword
*
* @return array|int
*/
Expand All @@ -1251,12 +1252,13 @@ public static function get_user_list_from_course_code(
$courseCodeList = [],
$userIdList = [],
$filterByActive = null,
$sessionIdList = []
$sessionIdList = [],
$searchByKeyword = ''
) {
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$sessionTable = Database::get_main_table(TABLE_MAIN_SESSION);

$session_id = intval($session_id);
$session_id = (int) $session_id;
$course_code = Database::escape_string($course_code);
$courseInfo = api_get_course_info($course_code);
$courseId = 0;
Expand Down Expand Up @@ -1353,20 +1355,21 @@ public static function get_user_list_from_course_code(
}
}

$sql .= ' FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user '
.' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_COURSE_USER).' as course_rel_user
$sql .= " FROM ".Database::get_main_table(TABLE_MAIN_USER)." as user
LEFT JOIN ".Database::get_main_table(TABLE_MAIN_COURSE_USER)." as course_rel_user
ON
user.id = course_rel_user.user_id AND
course_rel_user.relation_type <> '.COURSE_RELATION_TYPE_RRHH.' '
." INNER JOIN $course_table course ON course_rel_user.c_id = course.id ";
course_rel_user.relation_type <> ".COURSE_RELATION_TYPE_RRHH."
INNER JOIN $course_table course
ON course_rel_user.c_id = course.id ";

if (!empty($course_code)) {
$sql .= ' AND course_rel_user.c_id = "'.$courseId.'"';
}
$where[] = ' course_rel_user.c_id IS NOT NULL ';

if (isset($filter_by_status) && is_numeric($filter_by_status)) {
$filter_by_status = intval($filter_by_status);
$filter_by_status = (int) $filter_by_status;
$filter_by_status_condition = " course_rel_user.status = $filter_by_status AND ";
}
}
Expand Down Expand Up @@ -1419,10 +1422,19 @@ public static function get_user_list_from_course_code(
}

if (isset($filterByActive)) {
$filterByActive = intval($filterByActive);
$filterByActive = (int) $filterByActive;
$sql .= ' AND user.active = '.$filterByActive;
}

if (!empty($searchByKeyword)) {
$searchByKeyword = Database::escape_string($searchByKeyword);
$sql .= " AND (
user.firstname LIKE '$searchByKeyword' OR
user.username LIKE '$searchByKeyword' OR
user.lastname LIKE '$searchByKeyword'
) ";
}

$sql .= ' '.$order_by.' '.$limit;

$rs = Database::query($sql);
Expand Down
72 changes: 52 additions & 20 deletions main/inc/lib/myspace.lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -2745,22 +2745,22 @@ public static function displayTrackingAccessOverView($courseId, $sessionId, $stu
$sessionId = (int) $sessionId;
$studentId = (int) $studentId;

$em = Database::getManager();

$courseList = [];
$sessionList = [];
$studentList = [];

if (!empty($courseId)) {
$course = $em->find('ChamiloCoreBundle:Course', $courseId);

$courseList[$course->getId()] = $course->getTitle();
$course = api_get_course_entity($courseId);
if ($course) {
$courseList[$course->getId()] = $course->getTitle();
}
}

if (!empty($sessionId)) {
$session = $em->find('ChamiloCoreBundle:Session', $sessionId);

$sessionList[$session->getId()] = $session->getName();
$session = api_get_session_entity($sessionId);
if ($session) {
$sessionList[$session->getId()] = $session->getName();
}
}

if (!empty($studentId)) {
Expand All @@ -2780,9 +2780,11 @@ public static function displayTrackingAccessOverView($courseId, $sessionId, $stu
'url' => api_get_path(WEB_AJAX_PATH).'course.ajax.php?'.http_build_query([
'a' => 'search_course_by_session_all',
'session_id' => $sessionId,
'course_id' => $courseId,
]),
]
);

$form->addElement(
'select_ajax',
'session_id',
Expand All @@ -2793,14 +2795,15 @@ public static function displayTrackingAccessOverView($courseId, $sessionId, $stu
function () {
var params = $.param({
a: 'search_session_by_course',
course_id: $('#course_id').val() || 0
course_id: $('#access_overview_course_id').val() || 0
});
return '".api_get_path(WEB_AJAX_PATH)."session.ajax.php?' + params;
}
",
]
);

$form->addSelect(
'profile',
get_lang('Profile'),
Expand All @@ -2812,6 +2815,7 @@ function () {
],
['id' => 'profile']
);

$form->addElement(
'select_ajax',
'student_id',
Expand All @@ -2820,11 +2824,11 @@ function () {
[
'placeholder' => get_lang('All'),
'url_function' => "
function () {
function () {
var params = $.param({
a: 'search_user_by_course',
session_id: $('#session_id').val(),
course_id: $('#course_id').val()
session_id: $('#access_overview_session_id').val(),
course_id: $('#access_overview_course_id').val()
});
return '".api_get_path(WEB_AJAX_PATH)."course.ajax.php?' + params;
Expand Down Expand Up @@ -2857,7 +2861,8 @@ function () {
['MySpace', 'getUserDataAccessTrackingOverview'],
0
);
$table->additional_parameters = $form->exportValues();

//$table->additional_parameters = $form->exportValues();

$table->set_header(0, get_lang('LoginDate'), true);
$table->set_header(1, get_lang('Username'), true);
Expand Down Expand Up @@ -2923,11 +2928,9 @@ public static function getUserDataAccessTrackingOverview(
$track_e_course_access = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);

global $export_csv;

$is_western_name_order = api_is_western_name_order();
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();
}

//TODO add course name
Expand All @@ -2949,15 +2952,44 @@ public static function getUserDataAccessTrackingOverview(
u.user_id
FROM $track_e_course_access a
INNER JOIN $user u ON a.user_id = u.user_id
INNER JOIN $course c ON a.c_id = c.id";
INNER JOIN $course c ON a.c_id = c.id
WHERE 1=1 ";

if (isset($_GET['course_id']) && !empty($_GET['course_id'])) {
$courseId = (int) $_GET['course_id'];
$sql .= " AND c.id = ".$courseId;
}

if (isset($_GET['session_id']) && !empty($_GET['session_id'])) {
$sessionId = intval($_GET['session_id']);
$sql .= " WHERE a.session_id = ".$sessionId;
$sessionId = (int) $_GET['session_id'];
$sql .= " AND a.session_id = ".$sessionId;
}

if (isset($_GET['student_id']) && !empty($_GET['student_id'])) {
$userId = (int) $_GET['student_id'];
$sql .= " AND u.user_id = ".$userId;
}

if (isset($_GET['student_id']) && !empty($_GET['student_id'])) {
$userId = (int) $_GET['student_id'];
$sql .= " AND u.user_id = ".$userId;
}

if (isset($_GET['date']) && !empty($_GET['date'])) {
$dates = DateRangePicker::parseDateRange($_GET['date']);
if (isset($dates['start']) && !empty($dates['start'])) {
$dates['start'] = Database::escape_string($dates['start']);
$sql .= " AND login_course_date >= '".$dates['start']."'";
}
if (isset($dates['end']) && !empty($dates['end'])) {
$dates['end'] = Database::escape_string($dates['end']);
$sql .= " AND logout_course_date <= '".$dates['end']."'";
}
}

$sql .= " ORDER BY col$column $orderDirection ";
$sql .= " LIMIT $from,$numberItems";

$result = Database::query($sql);

$data = [];
Expand Down Expand Up @@ -3023,7 +3055,7 @@ public static function get_connections_to_course_by_date(
$end_date
) {
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
$user_id = intval($user_id);
$user_id = (int) $user_id;
$connections = [];
if (!empty($course_info)) {
$courseId = intval($course_info['real_id']);
Expand Down
4 changes: 2 additions & 2 deletions main/template/default/my_space/accessoverview.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

<script>
$(document).on('ready', function () {
var courseIdEl = $('#course_id'),
sessionIdEl = $('#session_id');
var courseIdEl = $('#access_overview_course_id'),
sessionIdEl = $('#access_overview_session_id');
if (!courseIdEl.val()) {
sessionIdEl
Expand Down

0 comments on commit f4f92c9

Please sign in to comment.