Browse Source

Simplifying reportings see BT#7297

Julio Montoya 11 years ago
parent
commit
0d621c382a

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

@@ -590,7 +590,7 @@ switch ($action) {
                 } else {
                     $session_date_string = implode(' ', $session_date);
                 }
-                $sessionUrl = api_get_path(WEB_CODE_PATH).'mySpace/index.php?session_id='.$session['id'];
+                $sessionUrl = api_get_path(WEB_CODE_PATH).'mySpace/course.php?session_id='.$session['id'];
                 $result[] = array(
                     'name' => $session['name'],
                     'date' => $session_date_string,

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

@@ -733,15 +733,15 @@ class CourseManager
      * @return array Course list
      *
      **/
-    public static function get_course_list_as_coach($user_id, $include_courses_in_sessions = false) {
-
-        //1. Getting courses as teacher (No session)
+    public static function get_course_list_as_coach($user_id, $include_courses_in_sessions = false)
+    {
+        // 1. Getting courses as teacher (No session)
         $courses_temp = CourseManager::get_course_list_of_user_as_course_admin($user_id);
-        $courses_as_admin = array();
+        $courseList = array();
 
         if (!empty($courses_temp)) {
-            foreach($courses_temp as $course_item) {
-                $courses_as_admin[0][$course_item['course_code']] = $course_item['course_code'];
+            foreach ($courses_temp as $course_item) {
+                $courseList[0][$course_item['course_code']] = $course_item['course_code'];
             }
         }
 
@@ -754,13 +754,13 @@ class CourseManager
                     $courses  = Tracking :: get_courses_followed_by_coach($user_id, $session_item['id']);
                     if (is_array($courses)) {
                         foreach($courses as $course_item) {
-                            $courses_as_admin[$session_item['id']][$course_item] = $course_item;
+                            $courseList[$session_item['id']][$course_item] = $course_item;
                         }
                     }
                 }
             }
         }
-        return $courses_as_admin;
+        return $courseList;
     }
 
     /**

+ 35 - 26
main/inc/lib/tracking.lib.php

@@ -1233,48 +1233,57 @@ class Tracking
      * @param    int        Session id (optional)
      * @return    array    Courses list
      */
-    public static function get_courses_followed_by_coach($coach_id, $id_session = '') {
-
+    public static function get_courses_followed_by_coach($coach_id, $id_session = null)
+    {
         $coach_id = intval($coach_id);
-        if (!empty ($id_session))
-        $id_session = intval($id_session);
-
-        $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
-        $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
-        $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
-        $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
+        if (!empty($id_session)) {
+            $id_session = intval($id_session);
+        }
 
-        // At first, courses where $coach_id is coach of the course
+        $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+        $tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
+        $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
+        $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
 
-        $sql = 'SELECT DISTINCT course_code FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id.' AND status=2';
+        // At first, courses where $coach_id is coach of the course.
 
-        global $_configuration;
+        $sql = 'SELECT DISTINCT course_code
+                FROM ' . $tbl_session_course_user . '
+                WHERE id_user = ' . $coach_id.' AND status = 2';
         if (api_is_multiple_url_enabled()) {
             $tbl_course_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
             $access_url_id = api_get_current_access_url_id();
             if ($access_url_id != -1){
-                $sql = 'SELECT DISTINCT scu.course_code FROM ' . $tbl_session_course_user . ' scu INNER JOIN '.$tbl_course_rel_access_url.' cru
-                    ON (scu.course_code = cru.course_code)
-                    WHERE scu.id_user=' . $coach_id.' AND scu.status=2 AND cru.access_url_id = '.$access_url_id;
+                $sql = 'SELECT DISTINCT scu.course_code
+                        FROM ' . $tbl_session_course_user . ' scu
+                        INNER JOIN '.$tbl_course_rel_access_url.' cru
+                        ON (scu.course_code = cru.course_code)
+                        WHERE
+                            scu.id_user=' . $coach_id.' AND
+                            scu.status=2 AND
+                            cru.access_url_id = '.$access_url_id;
             }
         }
 
-        if (!empty ($id_session))
-        $sql .= ' AND id_session=' . $id_session;
+        if (!empty($id_session)) {
+            $sql .= ' AND id_session=' . $id_session;
+        }
+
+        $courseList = array();
         $result = Database::query($sql);
         while ($row = Database::fetch_array($result)) {
-            $a_courses[$row['course_code']] = $row['course_code'];
+            $courseList[$row['course_code']] = $row['course_code'];
         }
 
         // Then, courses where $coach_id is coach of the session
 
         $sql = 'SELECT DISTINCT session_course.course_code
-                    FROM ' . $tbl_session_course . ' as session_course
-                    INNER JOIN ' . $tbl_session . ' as session
-                        ON session.id = session_course.id_session
-                        AND session.id_coach = ' . $coach_id . '
-                    INNER JOIN ' . $tbl_course . ' as course
-                        ON course.code = session_course.course_code';
+                FROM ' . $tbl_session_course . ' as session_course
+                INNER JOIN ' . $tbl_session . ' as session
+                    ON session.id = session_course.id_session
+                    AND session.id_coach = ' . $coach_id . '
+                INNER JOIN ' . $tbl_course . ' as course
+                    ON course.code = session_course.course_code';
 
         if (api_is_multiple_url_enabled()) {
             $tbl_course_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
@@ -1303,10 +1312,10 @@ class Tracking
 
         $result = Database::query($sql);
         while ($row = Database::fetch_array($result)) {
-            $a_courses[$row['course_code']] = $row['course_code'];
+            $courseList[$row['course_code']] = $row['course_code'];
         }
 
-        return $a_courses;
+        return $courseList;
     }
 
     /**

+ 49 - 36
main/mySpace/course.php

@@ -10,7 +10,7 @@
 ob_start();
 $nameTools = 'Cours';
 // name of the language file that needs to be included
-$language_file = array ('admin', 'registration', 'index', 'tracking');
+$language_file = array('admin', 'registration', 'index', 'tracking');
 $cidReset = true;
 
 require_once '../inc/global.inc.php';
@@ -39,7 +39,8 @@ if (isset($_GET["user_id"]) && $_GET["user_id"] != "" && !isset($_GET["type"]))
     $interbreadcrumb[] = array("url" => "teachers.php", "name" => get_lang('Teachers'));
 }
 
-function count_courses() {
+function count_courses()
+{
 	global $nb_courses;
 	return $nb_courses;
 }
@@ -49,7 +50,9 @@ $show_import_icon = false;
 
 if (api_get_setting('add_users_by_coach') == 'true') {
     if (!api_is_platform_admin()) {
-        $sql = 'SELECT id_coach FROM '.Database :: get_main_table(TABLE_MAIN_SESSION).' WHERE id='.$id_session;
+        $sql = 'SELECT id_coach
+                FROM '.Database::get_main_table(TABLE_MAIN_SESSION).'
+                WHERE id='.$id_session;
         $rs = Database::query($sql);
         if (Database::result($rs, 0, 0) != $_user['user_id']) {
             api_not_allowed(true);
@@ -87,7 +90,7 @@ if (api_is_drh() || api_is_session_admin() || api_is_platform_admin()) {
         $courses = Tracking::get_courses_list_from_session($id_session);
     }
 
-	$a_courses = array_keys($courses);
+    $a_courses = array_keys($courses);
 
     if (!api_is_session_admin()) {
         $menu_items[] = Display::url(Display::return_icon('stats.png', get_lang('MyStats'),'',ICON_SIZE_MEDIUM),api_get_path(WEB_CODE_PATH)."auth/my_progress.php" );
@@ -103,26 +106,30 @@ if (api_is_drh() || api_is_session_admin() || api_is_platform_admin()) {
         }
     }
 
-	echo '<div class="actions">';
-	$nb_menu_items = count($menu_items);
-	if ($nb_menu_items > 1) {
-		foreach ($menu_items as $key => $item) {
-			echo $item;
-		}
-	}
-	if (count($a_courses) > 0) {
-		echo '<span style="float:right">';
-		echo Display::url(Display::return_icon('printer.png', get_lang('Print'), array(), 32), 'javascript: void(0);', array('onclick'=>'javascript: window.print();'));
-		echo '</span>';
-	}
+    echo '<div class="actions">';
+    $nb_menu_items = count($menu_items);
+    if ($nb_menu_items > 1) {
+        foreach ($menu_items as $key => $item) {
+            echo $item;
+        }
+    }
+    if (count($a_courses) > 0) {
+        echo '<span style="float:right">';
+        echo Display::url(
+            Display::return_icon('printer.png', get_lang('Print'), array(), 32),
+            'javascript: void(0);',
+            array('onclick'=>'javascript: window.print();')
+        );
+        echo '</span>';
+    }
 
-	echo '</div>';
-	echo Display::page_header($title);
+    echo '</div>';
+    echo Display::page_header($title);
 }
 
 // Database Table Definitions
-$tbl_session_course_user 	= Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
-$tbl_user_course            = Database::get_main_table(TABLE_MAIN_COURSE_USER);
+$tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+$tbl_user_course = Database::get_main_table(TABLE_MAIN_COURSE_USER);
 
 if (isset($_GET['action'])) {
     if ($_GET['action'] == 'show_message') {
@@ -130,19 +137,19 @@ if (isset($_GET['action'])) {
     }
 
     if ($_GET['action'] == 'error_message') {
-		Display :: display_error_message(stripslashes($_GET['message']), false);
-	}
+        Display :: display_error_message(stripslashes($_GET['message']), false);
+    }
 }
 
 if ($show_import_icon) {
-	echo "<div align=\"right\">";
-	echo '<a href="user_import.php?id_session='.$id_session.'&action=export&amp;type=xml">'.
+    echo "<div align=\"right\">";
+    echo '<a href="user_import.php?id_session='.$id_session.'&action=export&amp;type=xml">'.
             Display::return_icon('excel.gif', get_lang('ImportUserListXMLCSV')).'&nbsp;'.get_lang('ImportUserListXMLCSV').'</a>';
-	echo "</div><br />";
+    echo "</div><br />";
 }
 
 if (!api_is_drh() && !api_is_session_admin() && !api_is_platform_admin()) {
-	$courses = Tracking::get_courses_followed_by_coach($_user['user_id'], $id_session);
+    $courses = Tracking::get_courses_followed_by_coach($_user['user_id'], $id_session);
     $a_courses = array_keys($courses);
 }
 
@@ -155,9 +162,7 @@ if (empty($id_session) && api_is_drh() && !api_is_platform_admin()) {
 }
 
 $nb_courses = count($a_courses);
-
 $table = new SortableTable('tracking_list_course', 'count_courses', null, 1, 50);
-
 $table->set_header(0, get_lang('CourseTitle'), false);
 $table->set_header(1, get_lang('NbStudents'), false);
 $table->set_header(2, get_lang('TimeSpentInTheCourse').Display :: return_icon('info3.gif', get_lang('TimeOfActiveByTraining'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
@@ -187,9 +192,18 @@ if (is_array($a_courses)) {
 
 		// students directly subscribed to the course
 		if (empty($id_session)) {
-			$sql = "SELECT user_id FROM $tbl_user_course as course_rel_user WHERE course_rel_user.status='5' AND course_rel_user.course_code='$course_code'";
+			$sql = "SELECT user_id
+			        FROM $tbl_user_course as course_rel_user
+			        WHERE
+			            course_rel_user.status='5' AND
+			            course_rel_user.course_code = '$course_code'";
 		} else {
-			$sql = "SELECT id_user as user_id FROM $tbl_session_course_user srcu WHERE  srcu. course_code='$course_code' AND id_session = '$id_session' AND srcu.status<>2";
+			$sql = "SELECT id_user as user_id
+			        FROM $tbl_session_course_user srcu
+			        WHERE
+			            srcu. course_code='$course_code' AND
+			            id_session = '$id_session' AND
+			            srcu.status<>2";
 		}
 
 		$rs = Database::query($sql);
@@ -201,18 +215,17 @@ if (is_array($a_courses)) {
 		if (count($users) > 0) {
 			$nb_students_in_course = count($users);
 			// tracking data
-			$avg_progress_in_course = Tracking :: get_avg_student_progress ($users, $course_code, array(), $id_session);
-			$avg_score_in_course = Tracking :: get_avg_student_score ($users, $course_code, array(), $id_session);
-			$avg_time_spent_in_course = Tracking :: get_time_spent_on_the_course ($users, $course_code, $id_session);
-			$messages_in_course = Tracking :: count_student_messages ($users, $course_code, $id_session);
-			$assignments_in_course = Tracking :: count_student_assignments ($users, $course_code, $id_session);
+			$avg_progress_in_course = Tracking :: get_avg_student_progress($users, $course_code, array(), $id_session);
+			$avg_score_in_course = Tracking :: get_avg_student_score($users, $course_code, array(), $id_session);
+			$avg_time_spent_in_course = Tracking :: get_time_spent_on_the_course($users, $course_code, $id_session);
+			$messages_in_course = Tracking :: count_student_messages($users, $course_code, $id_session);
+			$assignments_in_course = Tracking :: count_student_assignments($users, $course_code, $id_session);
 			$avg_time_spent_in_course = api_time_to_hms($avg_time_spent_in_course / $nb_students_in_course);
 			$avg_progress_in_course = round($avg_progress_in_course / $nb_students_in_course, 2);
 
 			if (is_numeric($avg_score_in_course)) {
 				$avg_score_in_course = round($avg_score_in_course / $nb_students_in_course, 2).'%';
 			}
-
 		} else {
 			$avg_time_spent_in_course = null;
 			$avg_progress_in_course = null;

+ 10 - 37
main/mySpace/index.php

@@ -210,6 +210,7 @@ if (empty($session_id)) {
     // 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];
     }
@@ -325,7 +326,7 @@ if (empty($session_id)) {
         // average posts
         $nb_posts = $nb_posts / $nb_students;
 
-        echo Display::page_subheader('<img src="'.api_get_path(WEB_IMG_PATH).'teachers.gif">&nbsp;'.get_lang('Overview'));
+        echo Display::page_subheader(get_lang('Overview'));
 
         echo '<div class="report_section">
                     <table class="table table-bordered">
@@ -344,7 +345,7 @@ if (empty($session_id)) {
                         </table>';
         echo '</div>';
 
-        echo Display::page_subheader(Display::return_icon('students.gif').'&nbsp;'.get_lang('Students').' ('.$nb_students.')');
+        echo Display::page_subheader(get_lang('Students').' ('.$nb_students.')');
 
         if ($export_csv) {
             //csv part
@@ -359,11 +360,10 @@ if (empty($session_id)) {
             $csv_content[] = array();
         } else {
 
-            $countActiveUsers = SessionManager::getCountUserTracking(null, 1);
-            $countInactiveUsers = SessionManager::getCountUserTracking(null, 0);
-
             $lastConnectionDate = api_get_utc_datetime(strtotime('15 days ago'));
 
+            $countActiveUsers = SessionManager::getCountUserTracking(null, 1);
+            $countInactiveUsers = SessionManager::getCountUserTracking(null, 0);
             $countSleepingTeachers = SessionManager::getTeacherTracking(api_get_user_id(), 1, $lastConnectionDate, true);
             $countSleepingStudents =SessionManager::getCountUserTracking(null, 1, $lastConnectionDate);
 
@@ -393,7 +393,6 @@ if (empty($session_id)) {
                             <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) ? '' : $avg_courses_per_student).'</td>
@@ -460,13 +459,13 @@ if (empty($session_id)) {
         $courses = Tracking::get_courses_followed_by_coach($user_id, $session_id);
     }
 
-    //Courses for the user
+    // Courses for the user
     $count_courses = count($courses);
 
-    //Sessions for the user
+    // Sessions for the user
     $count_sessions = count($sessions);
 }
-
+/*
 if ($count_courses || $count_sessions) {
     //If we are in course
     if (empty($session_id)) {
@@ -696,7 +695,7 @@ if ($is_platform_admin && in_array($view, array('admin')) && $display != 'yourst
                 STUDENT         => get_lang('Student'),
                 COURSEMANAGER   => get_lang('CourseManager'),
                 DRH             => get_lang('Drh'),
-                );
+            );
             $studentFilter->addElement('select', 'profile', get_lang('Profile'),$options, array('id' => 'profile'));
 
             echo '<div class="">';
@@ -751,32 +750,6 @@ if ($is_platform_admin && in_array($view, array('admin')) && $display != 'yourst
                     return returnValue;
                 }
             </script>';
-
-            /*//profile filter
-            $profileFilter = new FormValidator('answer_filter', 'get', '', '', array('class'=> 'form-horizontal'), false);
-            $options = array(
-                STUDENT         => get_lang('Student'),
-                COURSEMANAGER   => get_lang('CourseManager'),
-                DRH             => get_lang('Drh'),
-                );
-            $profileFilter->addElement('select', 'profile', get_lang('Profile'),$options, array('id' => 'profile'));
-            $courseListUrl = api_get_self();
-
-            echo '<div class="">';
-            echo $profileFilter->return_form();
-            echo '</div>';
-
-            echo '<script>
-            $(function() {
-                $("#profile").on("change", function() {
-                    var sessionId = $("#session_name").val();
-                    var courseId = $("#course_name").val();
-                    var studentId  = $("#student_name").val();
-                    var profileId  = $("#profile").val();
-                    window.location = "'.$courseListUrl.'?view=admin&display='.$display.'&session_id="+sessionId+"&course_id="+courseId+"&student_id="+studentId+"&profile_id="+profileId;
-                    });
-                });
-            </script>';*/
         }
 
         if (in_array($display, array('surveyoverview'))) {
@@ -1116,7 +1089,7 @@ if ($is_platform_admin && in_array($view, array('admin')) && $display != 'yourst
 		}
 		$table->display();
 	}
-}
+}*/
 
 // Send the csv file if asked
 if ($export_csv) {

+ 36 - 73
main/mySpace/session.php

@@ -5,21 +5,19 @@
  * @package chamilo.reporting
  */
 ob_start();
-$nameTools= 'Sessions';
 // name of the language file that needs to be included
-$language_file = array ('registration', 'index', 'trad4all', 'tracking', 'admin');
+$language_file = array('registration', 'index', 'trad4all', 'tracking', 'admin');
 $cidReset = true;
-
 require_once '../inc/global.inc.php';
 require_once api_get_path(LIBRARY_PATH).'export.lib.inc.php';
-
 api_block_anonymous_users();
 
 $this_section = SECTION_TRACKING;
 
 api_block_anonymous_users();
+$htmlHeadXtra[] = api_get_jqgrid_js();
 $interbreadcrumb[] = array ("url" => "index.php", "name" => get_lang('MySpace'));
-Display :: display_header($nameTools);
+Display::display_header(get_lang('Sessions'));
 
 $export_csv = false;
 
@@ -119,73 +117,38 @@ if (api_is_drh() || api_is_session_admin() || api_is_platform_admin()) {
     $a_sessions = Tracking :: get_sessions_coached_by_user($id_coach);
 }
 
-$nb_sessions = count($a_sessions);
-
-if ($export_csv) {
-    $csv_content = array();
-}
-
-if ($nb_sessions > 0) {
-
-    $table = new SortableTable('tracking', 'count_sessions_coached');
-    $table->set_header(0, get_lang('Title'));
-    $table->set_header(1, get_lang('Date'));
-    $table->set_header(2, get_lang('NbCoursesPerSession'));
-    $table->set_header(3, get_lang('Details'), false);
-
-    $all_data = array();
-    foreach ($a_sessions as $session) {
-        $row = array();
-        $row[] = $session['name'];
-
-        if ($session['date_start'] != '0000-00-00' && $session['date_end'] != '0000-00-00') {
-            $row[] = get_lang('From').' '. api_convert_and_format_date($session['date_start'], DATE_FORMAT_SHORT, date_default_timezone_get()).' '.get_lang('To').' '.api_convert_and_format_date($session['date_end'], DATE_FORMAT_SHORT, date_default_timezone_get());
-        } else {
-            $row[] = ' - ';
-        }
-
-        $row[] = count(Tracking::get_courses_list_from_session($session['id']));
-
-        if ($export_csv) {
-            $csv_content[] = $row;
-        }
-
-        if (isset($_GET['id_coach']) && $_GET['id_coach'] != '') {
-            $row[] = '<a href="student.php?id_session='.$session['id'].'&id_coach='.intval($_GET['id_coach']).'">
-                      <img src="'.api_get_path(WEB_IMG_PATH).'2rightarrow.gif" border="0" /></a>';
-        } else {
-            $row[] = '<a href="course.php?id_session='.$session['id'].'">
-                      <img src="'.api_get_path(WEB_IMG_PATH).'2rightarrow.gif" border="0" /></a>';
-        }
-        $all_data[] = $row;
-    }
-
-    if (!isset($tracking_column)) {
-        $tracking_column = 0;
-    }
-
-    if ($_GET['tracking_direction'] == 'DESC') {
-        usort($all_data, 'rsort_sessions');
-    } else {
-        usort($all_data, 'sort_sessions');
-    }
-
-    if ($export_csv) {
-        usort($csv_content, 'sort_sessions');
-    }
-
-    foreach ($all_data as $row) {
-        $table->addRow($row);
-    }
-
-    $table -> display();
+$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions_tracking';
+
+//The order is important you need to check the the $column variable in the model.ajax.php file
+$columns = array(
+    get_lang('Title'),
+    get_lang('Date'),
+    get_lang('NbCoursesPerSession'),
+    get_lang('NbStudentPerSession'),
+    get_lang('Details')
+);
+
+// Column config
+$columnModel   = array(
+    array('name'=>'name',                'index'=>'name',        'width'=>'255',   'align'=>'left'),
+    array('name'=>'date',                'index'=>'date', 'width'=>'150',  'align'=>'left','sortable'=>'false'),
+    array('name'=>'course_per_session',  'index'=>'course_per_session',     'width'=>'150','sortable'=>'false'),
+    array('name'=>'student_per_session', 'index'=>'student_per_session',     'width'=>'100','sortable'=>'false'),
+    array('name'=>'details',             'index'=>'details',     'width'=>'100','sortable'=>'false'),
+);
+
+$extraParams = array(
+    'autowidth' => 'true',
+    'height' => 'auto'
+);
+
+$js = '<script>
+        $(function() {
+            '.Display::grid_js('session_tracking', $url, $columns, $columnModel, $extraParams, array(), null, true).'
+        });
+        </script>';
+
+echo $js;
+echo Display::grid_html('session_tracking');
 
-    if ($export_csv) {
-        ob_end_clean();
-        Export :: export_table_csv($csv_content, 'reporting_student_list');
-        exit;
-    }
-} else {
-    echo get_lang('NoSession');
-}
 Display::display_footer();