Browse Source

Fix "Accesses by user overview" report page see BT#14450

Julio Montoya 6 years ago
parent
commit
f4f92c9d8a

+ 25 - 11
main/inc/ajax/course.ajax.php

@@ -231,27 +231,41 @@ switch ($action) {
         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)",
                 ];
             }

+ 1 - 1
main/inc/ajax/session.ajax.php

@@ -14,7 +14,7 @@ $action = $_REQUEST['a'];
 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) {

+ 20 - 8
main/inc/lib/course.lib.php

@@ -1235,6 +1235,7 @@ class CourseManager
      * @param array     $userIdList
      * @param string    $filterByActive
      * @param array     $sessionIdList
+     * @param string    $searchByKeyword
      *
      * @return array|int
      */
@@ -1251,12 +1252,13 @@ class CourseManager
         $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;
@@ -1353,12 +1355,13 @@ class CourseManager
                 }
             }
 
-            $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.'"';
@@ -1366,7 +1369,7 @@ class CourseManager
             $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 ";
             }
         }
@@ -1419,10 +1422,19 @@ class CourseManager
         }
 
         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);

+ 52 - 20
main/inc/lib/myspace.lib.php

@@ -2745,22 +2745,22 @@ class MySpace
         $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)) {
@@ -2780,9 +2780,11 @@ class MySpace
                 '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',
@@ -2793,7 +2795,7 @@ class MySpace
                     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;
@@ -2801,6 +2803,7 @@ class MySpace
                 ",
             ]
         );
+
         $form->addSelect(
             'profile',
             get_lang('Profile'),
@@ -2812,6 +2815,7 @@ class MySpace
             ],
             ['id' => 'profile']
         );
+
         $form->addElement(
             'select_ajax',
             'student_id',
@@ -2820,11 +2824,11 @@ class MySpace
             [
                 '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;
@@ -2857,7 +2861,8 @@ class MySpace
                 ['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);
@@ -2923,11 +2928,9 @@ class MySpace
         $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
@@ -2949,15 +2952,44 @@ class MySpace
                 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 = [];
@@ -3023,7 +3055,7 @@ class MySpace
         $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']);

+ 2 - 2
main/template/default/my_space/accessoverview.tpl

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