Browse Source

Fixing loading of graph see BT#7297

Julio Montoya 11 years ago
parent
commit
d390cf4973

+ 3 - 2
main/inc/ajax/myspace.ajax.php

@@ -45,6 +45,7 @@ switch ($action) {
         $end_date = isset($_REQUEST['endDate']) ? $_REQUEST['endDate'] : "";
         $user_id = isset($_REQUEST['student']) ? $_REQUEST['student'] : "";
         $course_code = isset($_REQUEST['course']) ? $_REQUEST['course'] : "";
+        $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : "";
 
         $sql_result = get_connections_to_course_by_date(
             $user_id,
@@ -61,7 +62,7 @@ switch ($action) {
             $foo_stats .= '<strong>' . get_lang('Average') . ': </strong>' . $rst['avg'] . '<br />';
             $foo_stats .= '<strong>' . get_lang('Quantity') . ' : </strong>' . $rst['times'] . '<br />';
             $db['stats'] = $foo_stats;
-            $db['graph_result'] = grapher($sql_result, $start_date, $end_date);
+            $db['graph_result'] = grapher($sql_result, $start_date, $end_date, $type);
         } else {
             $db['result'] = Display::return_message(
                 get_lang('NoDataAvailable'),
@@ -77,7 +78,7 @@ switch ($action) {
             );
         }
         header('Cache-Control: no-cache');
-        echo json_encode($db); // requires: PHP >= 5.2.0, PECL json >= 1.2.0
+        echo json_encode($db);
         break;
 }
 exit;

+ 82 - 160
main/mySpace/access_details.php

@@ -24,9 +24,10 @@ require_once '../inc/global.inc.php';
 require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php';
 require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php';
 require_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php';
-
 require_once 'myspace.lib.php';
 
+api_block_anonymous_users();
+
 // the section (for the tabs)
 $this_section = SECTION_TRACKING;
 
@@ -36,120 +37,77 @@ $session_id = intval($_GET['id_session']);
 $type = Security::remove_XSS($_REQUEST['type']);
 $course_code = Security::remove_XSS($_REQUEST['course']);
 $connections = MySpace::get_connections_to_course($user_id, $course_code, $session_id);
-
 $quote_simple = "'";
 
+$form = new FormValidator('myform', 'get', api_get_self(), null, array('id' => 'myform'));
+$form->addElement('text', 'from', get_lang('From'), array('id' => 'date_from'));
+$form->addElement('text', 'to', get_lang('Until'), array('id' => 'date_to'));
+$form->addElement('select', 'type', get_lang('Type'), array('day' => get_lang('Day'), 'month' => get_lang('Month')), array('id' => 'type'));
+$form->addElement('hidden', 'student', $user_id);
+$form->addElement('hidden', 'course', $course_code);
+$form->addRule('from', get_lang('ThisFieldIsRequired'), 'required');
+$form->addRule('to', get_lang('ThisFieldIsRequired'), 'required');
+$group = array(
+    $form->createElement(
+        'label',
+        null,
+        Display::url(get_lang('Send'), 'javascript://', array('onclick'=> 'loadGraph();', 'class' => 'btn'))
+    )
+    //$form->createElement('label', null, Display::url(get_lang('Reset'), 'javascript:void()', array('id' => "reset_button", 'class' => 'btn')))
+);
+$form->addGroup($group);
+$from = null;
+$to = null;
+$course = $course_code;
+if ($form->validate()) {
+    $values = $form->getSubmitValues();
+    $from = $values['from'];
+    $to = $values['to'];
+    $type = $values['type'];
+    $course = $values['course'];
+}
+
+$url = api_get_path(WEB_AJAX_PATH).'myspace.ajax.php?a=access_detail_by_date&course='.$course.'&student='.$user_id;
+
 $htmlHeadXtra[] = '<script src="slider.js" type="text/javascript"></script>';
 $htmlHeadXtra[] = '<link rel="stylesheet" href="slider.css" />';
-$htmlHeadXtra[] = '<script>
-$(function() {
-    var dates = $( "#date_from, #date_to" ).datepicker({
-        dateFormat: '.$quote_simple.'yy-mm-dd'.$quote_simple.',
-        changeMonth: true,
-        changeYear: true,
-        onSelect: function(selectedDate) {
-            var foo = areBothFilled();
-            var option = this.id == "date_from" ? "minDate" : "maxDate",
-                instance = $( this ).data( "datepicker" );
-                date = $.datepicker.parseDate(
-                    instance.settings.dateFormat ||
-                    $.datepicker._defaults.dateFormat,
-                    selectedDate, instance.settings
-                );
-            dates.not( this ).datepicker( "option", option, date );
-
-            if (foo) {
-                var start_date  = document.getElementById("date_from").value;
-                var end_date    = document.getElementById("date_to").value;
-                changeHREF(start_date,end_date);
-                var foo_student = '.$user_id.';
-                var foo_course  = "'.$course_code.'";
-                var graph_type  = "'.$type.'";
-                var foo_slider_state = getSliderState();
-                if (foo_slider_state == "open"){
-                    sliderAction();
-                }
-                $.post(
-                "'.api_get_path(WEB_AJAX_PATH).'myspace.ajax.php?a=access_detail_by_date",
-                {startDate: start_date, endDate: end_date, course: foo_course, student: foo_student, type: graph_type},
-                function(db) {
-                    if (!db.is_empty){
-                        // Display confirmation message to the user
-                        $("#messages").html(db.result).stop().css("opacity", 1).fadeIn(30);
-                        $("#cev_cont_stats").html(db.stats);
-                        $( "#ui-tabs-1" ).empty();
-                        $( "#ui-tabs-2" ).empty();
-                        $( "#ui-tabs-1" ).html(db.graph_result);
-                        $( "#ui-tabs-2" ).html(db.graph_result);
-                    } else {
-                        $("#messages").text("'.get_lang('NoDataAvailable').'");
-                        $("#messages").addClass("warning-message");
-                        $("#cev_cont_stats").html(db.stats);
-                        $( "#ui-tabs-1" ).empty();
-                        $( "#ui-tabs-1" ).html(db.graph_result);
-                        controlSliderMenu(foo_height);
-                    }
-                    var foo_height = sliderGetHeight("#messages");
-                    sliderSetHeight(".slider",foo_height);
-                    controlSliderMenu(foo_height);
-                    // Hide confirmation message and enable stars for "Rate this" control, after 2 sec...
-                    /*setTimeout(function(){
-                            $("#messages").fadeOut(1000, function(){ui.enable()})
-                    }, 2000);*/
-                }, "json");
-
-                $( "#cev_slider" ).empty();
-                // Create element to use for confirmation messages
-                $('.$quote_simple .'<div id="messages"/>'.$quote_simple .').appendTo("#cev_slider");
+$htmlHeadXtra[] = "<script>
+function loadGraph() {
+    var startDate = $('#date_from').val();
+    var endDate = $('#date_to').val();
+    var type = $('#type option:selected').val();
+    console.log(type);
+    $.ajax({
+        url: '".$url."&startDate='+startDate+'&endDate='+endDate+'&type='+type,
+        dataType: 'json',
+        success: function(db) {
+            if (!db.is_empty) {
+                // Display confirmation message to the user
+                $('#messages').html(db.result).stop().css('opacity', 1).fadeIn(30);
+                $('#cev_cont_stats').html(db.stats);
+                $( '#graph' ).html(db.graph_result);
+            } else {
+                $('#messages').text('".get_lang('NoDataAvailable')."');
+                $('#messages').addClass('warning-message');
+                $('#cev_cont_stats').html('');
+                $('#graph').empty();
+                $('#messages').empty();
             }
         }
     });
-
-    if (areBothFilled()) {
-        runEffect();
-    }
-});
-</script>';
-
-$htmlHeadXtra[] = '<script type="text/javascript">
-
-function changeHREF(sd,ed) {
-    var i       = 0;
-    var href    = "";
-    var href1   = "";
-    $('.$quote_simple .'#container-9 a'.$quote_simple .').each(function() {
-        href = $.data(this, '.$quote_simple .'href.tabs'.$quote_simple .');
-        href1= href+"&sd="+sd+"&ed="+ed+"&range=1";
-        $("#container-9").tabs("url", i, href1);
-        var href1 = $.data(this, '.$quote_simple .'href.tabs'.$quote_simple .');
-        i++
-    })
 }
 
-function runEffect() {
-    //most effect types need no options passed by default
-    var options = {};
-     //run the effect
-    $("#cev_button").show('.$quote_simple .'slide'.$quote_simple .',options,500,cev_effect());
-}
-
-//callback function to bring a hidden box back
-function cev_effect() {
-    setTimeout(function() {
-        $("#cev_button:visible").removeAttr('.$quote_simple .'style'.$quote_simple .').hide().fadeOut();
-    }, 1000);
-}
+$(function() {
+    var dates = $('#date_from, #date_to').datepicker({
+        dateFormat: ".$quote_simple."yy-mm-dd".$quote_simple.",
+        changeMonth: true,
+        changeYear: true
+    });
+});
 
-function areBothFilled() {
-    var returnValue = false;
-    if ((document.getElementById("date_from").value != "") && (document.getElementById("date_to").value != "")){
-        returnValue = true;
-    }
-    return returnValue;
-}
-</script>';
+</script>";
 
-$htmlHeadXtra[] = '<script type="text/javascript">
+$htmlHeadXtra[] = '<script>
 $(function() {
     $("#cev_button").hide();
     $("#container-9").tabs({remote: true});
@@ -157,81 +115,45 @@ $(function() {
 </script>';
 
 //Changes END
-$interbreadcrumb[] = array ('url' => '#', 'name' => get_lang('AccessDetails'));
+$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('AccessDetails'));
 
 Display :: display_header('');
-$main_user_info = api_get_user_info($user_id);
+$userInfo = api_get_user_info($user_id);
 $result_to_print = '';
 $sql_result = MySpace::get_connections_to_course($user_id, $course_code);
 $result_to_print = convert_to_string($sql_result);
 
 echo Display::page_header(get_lang('DetailsStudentInCourse'));
 echo Display::page_subheader(
-    get_lang('User').': '.api_get_person_name($main_user_info['firstName'], $main_user_info['lastName']).' - '.get_lang('Course').': '.$course_code
+    get_lang('User').': '.$userInfo['complete_name'].' - '.get_lang('Course').': '.$course_code
 );
 
-$form = new FormValidator('myform', 'post', "javascript:get(document.getElementById('myform'));", null, array('id' => 'myform'));
-$form->addElement('text', 'from', get_lang('From'), array('id' => 'date_from'));
-$form->addElement('text', 'to', get_lang('Until'), array('id' => 'date_to'));
-$form->addElement('style_submit_button', 'reset', get_lang('Reset'), array('onclick' => "javascript:window.location='access_details.php?course=".$course_code."&student=".$user_id."&cidReq=".$course_code."';"));
+$form->setDefaults(array('from' => $from, 'to' => $to));
 $form->display();
 ?>
 <div id="cev_results_header" class="ui-tabs ui-widget ui-widget-content ui-corner-all">
-<div id="cev_results" class="ui-tabs ui-widget ui-widget-content ui-corner-all">
-    <div class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><?php echo get_lang('Statistics'); ?></div><br />
-    <div id="cev_cont_stats">
-        <?php
-        if ($result_to_print != "")  {
-            $rst                = get_stats($user_id, $course_code);
-            $foo_stats           = '<strong>'.get_lang('Total').': </strong>'.$rst['total'].'<br />';
-            $foo_stats          .= '<strong>'.get_lang('Average').': </strong>'.$rst['avg'].'<br />';
-            $foo_stats          .= '<strong>'.get_lang('Quantity').' : </strong>'.$rst['times'].'<br />';
-            echo $foo_stats;
-        } else {
-            echo Display::display_warning_message(get_lang('NoDataAvailable'));
-        }
-        ?>
-    </div><br />
-</div><br />
-
-<div id="container-9">
-    <ul>
-        <li>
-            <a href="<?php echo api_get_path(WEB_AJAX_PATH).'myspace.ajax.php?a=access_detail&type=day&course='.$course_code.'&student='.$user_id?>">
-                <span> <?php echo api_ucfirst(get_lang('Day')); ?>
-                </span>
-            </a>
-        </li>
-        <li>
-            <a href="<?php echo api_get_path(WEB_AJAX_PATH).'myspace.ajax.php?a=access_detail&type=month&course='.$course_code.'&student='.$user_id?>">
-                <span> <?php echo api_ucfirst(get_lang('MinMonth')); ?></span>
-            </a>
-        </li>
-    </ul>
-</div>
-
 <div id="cev_results" class="ui-tabs ui-widget ui-widget-content ui-corner-all">
     <div class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
-        <?php echo get_lang('DateAndTimeOfAccess'),' - ', get_lang('Duration') ?>
+        <?php echo get_lang('Statistics'); ?>
     </div><br />
-    <div id="cev_cont_results" >
-    <div id="cev_slider" class="slider">
-        <?php
-        if ($result_to_print != "")  {
-            echo $result_to_print;
-        } else {
-            Display::display_warning_message(get_lang('NoDataAvailable'));
-        }
-        ?>
-    </div>
+    <div id="cev_cont_stats">
     <?php
     if ($result_to_print != "")  {
-        echo '<br />
-        <div class="slider_menu">
-            <a href="#" onclick="return sliderAction();"><img src="../img/icons/22/zoom_in.png"></a>
-        </div>';
-    }?>
+        $rst                = get_stats($user_id, $course_code);
+        $foo_stats           = '<strong>'.get_lang('Total').': </strong>'.$rst['total'].'<br />';
+        $foo_stats          .= '<strong>'.get_lang('Average').': </strong>'.$rst['avg'].'<br />';
+        $foo_stats          .= '<strong>'.get_lang('Quantity').' : </strong>'.$rst['times'].'<br />';
+        echo $foo_stats;
+    } else {
+        echo Display::display_warning_message(get_lang('NoDataAvailable'));
+    }
+    ?>
     </div>
+    <br />
 </div><br />
+
+<div id="messages"></div>
+<div id="graph"></div>
+
 <?php
 Display:: display_footer();

+ 3 - 2
main/mySpace/myStudents.php

@@ -280,14 +280,15 @@ while ($row = Database :: fetch_array($rs)) {
 if (api_is_drh() && !api_is_platform_admin()) {
     if (!empty($student_id)) {
         if (api_drh_can_access_all_session_content()) {
-            $users = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus('drh_all', api_get_user_id());
+            //@todo securize drh with student id
+            /*$users = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus('drh_all', api_get_user_id());
             $userList = array();
             foreach ($users as $user) {
                 $userList[] = $user['user_id'];
             }
             if (!in_array($student_id, $userList)) {
                 api_not_allowed(true);
-            }
+            }*/
         } else {
             if (api_is_drh() && !UserManager::is_user_followed_by_drh($student_id, api_get_user_id())) {
                 api_not_allowed(true);

+ 74 - 69
main/mySpace/myspace.lib.php

@@ -71,9 +71,9 @@ class MySpace {
 		$session_id  = intval($session_id);
 
 	    $sql = 'SELECT login_course_date, logout_course_date FROM ' . $tbl_track_course . '
-                WHERE   user_id = '.$user_id.' AND 
-                        course_code="'.$course_code.'" AND 
-                        session_id = '.$session_id.' 
+                WHERE   user_id = '.$user_id.' AND
+                        course_code="'.$course_code.'" AND
+                        session_id = '.$session_id.'
                 ORDER BY login_course_date ASC';
 	    $rs = Database::query($sql);
 	    $connections = array();
@@ -85,12 +85,12 @@ class MySpace {
 	    }
 	    return $connections;
 	}
-    
+
     static function get_connections_from_course_list($user_id, $course_list, $session_id = 0) {
 		// Database table definitions
 	    $tbl_track_course 	= Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
         if (empty($course_list)) {
-            return false;   
+            return false;
         }
 
 		// protect data
@@ -98,18 +98,18 @@ class MySpace {
 		$course_code = Database::escape_string($course_code);
 		$session_id  = intval($session_id);
         $new_course_list = array();;
-        foreach ($course_list as $course_item) {            
+        foreach ($course_list as $course_item) {
             $new_course_list[] =  '"'.Database::escape_string($course_item['code']).'"';
         }
         $course_list = implode(', ', $new_course_list);
-        
+
         if (empty($course_list)) {
-            return false;   
+            return false;
         }
 	    $sql = 'SELECT login_course_date, logout_course_date, course_code FROM ' . $tbl_track_course . '
-                WHERE   user_id = '.$user_id.' AND 
-                        course_code IN ('.$course_list.') AND 
-                        session_id = '.$session_id.' 
+                WHERE   user_id = '.$user_id.' AND
+                        course_code IN ('.$course_list.') AND
+                        session_id = '.$session_id.'
                 ORDER BY login_course_date ASC';
 	    $rs = Database::query($sql);
 	    $connections = array();
@@ -276,22 +276,22 @@ class MySpace {
      */
     public function display_tracking_lp_progress_overview($sessionId = '', $courseId = '') {
 
-        $course = api_get_course_info_by_id($courseId); 
+        $course = api_get_course_info_by_id($courseId);
         /**
          * Column name
          * The order is important you need to check the $column variable in the model.ajax.php file
          */
         $columns = array(
-            get_lang('Username'), 
-            get_lang('FirstName'), 
-            get_lang('LastName'), 
+            get_lang('Username'),
+            get_lang('FirstName'),
+            get_lang('LastName'),
         );
         //add lessons of course
         require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
         $lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
 
         //create columns array
-        foreach ($lessons as $lesson_id => $lesson) 
+        foreach ($lessons as $lesson_id => $lesson)
         {
             $columns[] = $lesson['name'];
         }
@@ -307,7 +307,7 @@ class MySpace {
             array('name'=>'lastname',   'index'=>'lastname',     'align'=>'left', 'search' => 'true'),
         );
         //get dinamic column names
-        foreach ($lessons as $lesson_id => $lesson) 
+        foreach ($lessons as $lesson_id => $lesson)
         {
             $column_model[] = array('name'=> $lesson['id'],   'index'=>$lesson['id'],    'align'=>'left', 'search' => 'true');
         }
@@ -329,7 +329,7 @@ class MySpace {
 
         $table = Display::grid_js($tableId, $url, $columns, $column_model, $extra_params, array(), $action_links, true);
 
-        $return = '<script>$(function() {'. $table . 
+        $return = '<script>$(function() {'. $table .
             'jQuery("#'.$tableId.'").jqGrid("navGrid","#'.$tableId.'_pager",{view:false, edit:false, add:false, del:false, search:false, excel:true});
                 jQuery("#'.$tableId.'").jqGrid("navButtonAdd","#'.$tableId.'_pager",{
                        caption:"",
@@ -353,16 +353,16 @@ class MySpace {
          * The order is important you need to check the $column variable in the model.ajax.php file
          */
         $columns = array(
-            get_lang('Session'), 
-            get_lang('ExerciseId'), 
-            get_lang('ExerciseName'), 
-            get_lang('Username'), 
-            get_lang('LastName'), 
-            get_lang('FirstName'), 
-            get_lang('Time'), 
-            get_lang('QuestionId'), 
-            get_lang('QuestionTitle'), 
-            get_lang('Answer'), 
+            get_lang('Session'),
+            get_lang('ExerciseId'),
+            get_lang('ExerciseName'),
+            get_lang('Username'),
+            get_lang('LastName'),
+            get_lang('FirstName'),
+            get_lang('Time'),
+            get_lang('QuestionId'),
+            get_lang('QuestionTitle'),
+            get_lang('Answer'),
             get_lang('Correct'),
         );
 
@@ -397,7 +397,7 @@ class MySpace {
         $tableId = 'exerciseProgressOverview';
         $table = Display::grid_js($tableId, $url, $columns, $column_model, $extra_params, array(), $action_links, true);
 
-        $return = '<script>$(function() {'. $table . 
+        $return = '<script>$(function() {'. $table .
             'jQuery("#'.$tableId.'").jqGrid("navGrid","#'.$tableId.'_pager",{view:false, edit:false, add:false, del:false, search:false, excel:true});
                 jQuery("#'.$tableId.'").jqGrid("navButtonAdd","#'.$tableId.'_pager",{
                        caption:"",
@@ -416,15 +416,15 @@ class MySpace {
      */
     function display_survey_overview($sessionId = 0, $courseId = 0, $surveyId = 0, $answer = 2) {
 
-        $course = api_get_course_info_by_id($courseId); 
+        $course = api_get_course_info_by_id($courseId);
         /**
          * Column name
          * The order is important you need to check the $column variable in the model.ajax.php file
          */
         $columns = array(
-            get_lang('Username'), 
-            get_lang('FirstName'), 
-            get_lang('LastName'), 
+            get_lang('Username'),
+            get_lang('FirstName'),
+            get_lang('LastName'),
         );
         //add lessons of course
         $questions = survey_manager::get_questions($surveyId, $courseId);
@@ -455,7 +455,7 @@ class MySpace {
 
         //Table Id
         $tableId = 'lpProgress';
-        
+
         //Autowidth
         $extra_params['autowidth'] = 'true';
 
@@ -464,7 +464,7 @@ class MySpace {
 
         $table = Display::grid_js($tableId, $url, $columns, $column_model, $extra_params, array(), $action_links, true);
 
-        $return = '<script>$(function() {'. $table . 
+        $return = '<script>$(function() {'. $table .
             'jQuery("#'.$tableId.'").jqGrid("navGrid","#'.$tableId.'_pager",{view:false, edit:false, add:false, del:false, search:false, excel:true});
                 jQuery("#'.$tableId.'").jqGrid("navButtonAdd","#'.$tableId.'_pager",{
                        caption:"",
@@ -596,7 +596,7 @@ class MySpace {
 
         $table = Display::grid_js($tableId, $url, $columns, $column_model, $extra_params, array(), $action_links, true);
 
-        $return = '<script>$(function() {'. $table . 
+        $return = '<script>$(function() {'. $table .
             'jQuery("#'.$tableId.'").jqGrid("navGrid","#'.$tableId.'_pager",{view:false, edit:false, add:false, del:false, search:false, excel:true});
                 jQuery("#'.$tableId.'").jqGrid("navButtonAdd","#'.$tableId.'_pager",{
                        caption:"",
@@ -651,7 +651,7 @@ class MySpace {
 
         $table = Display::grid_js($tableId, $url, $columns, $column_model, $extra_params, array(), $action_links, true);
 
-        $return = '<script>$(function() {'. $table . 
+        $return = '<script>$(function() {'. $table .
             'jQuery("#'.$tableId.'").jqGrid("navGrid","#'.$tableId.'_pager",{view:false, edit:false, add:false, del:false, search:false, excel:true});
                 jQuery("#'.$tableId.'").jqGrid("navButtonAdd","#'.$tableId.'_pager",{
                        caption:"",
@@ -813,11 +813,11 @@ class MySpace {
 	 * @param string Order direction
 	 * @return array Results
 	 */
-	public function get_course_data_tracking_overview($from, $number_of_items, $column, $direction) {		
+	public function get_course_data_tracking_overview($from, $number_of_items, $column, $direction) {
 		$main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE);
         $from = intval($from);
         $number_of_items = intval($number_of_items);
-        
+
 		$sql = "SELECT code AS col0, title AS col1 FROM $main_course_table";
 		$sql .= " ORDER BY col$column $direction ";
 		$sql .= " LIMIT $from,$number_of_items";
@@ -1640,7 +1640,7 @@ class MySpace {
 		$sql = "SELECT course.code as col1, course.title as col2
 				FROM $tbl_course course
 				WHERE course.code IN (".implode(',',$courses_code).")";
-		
+
 		if (!in_array($direction, array('ASC','DESC'))) $direction = 'ASC';
 
 	    $column = intval($column);
@@ -1651,7 +1651,7 @@ class MySpace {
 
 		$res = Database::query($sql);
 		while ($row_course = Database::fetch_row($res)) {
-            
+
 			$course_code = $row_course[0];
 			$course_info = api_get_course_info($course_code);
 			$avg_assignments_in_course = $avg_messages_in_course = $nb_students_in_course = $avg_progress_in_course = $avg_score_in_course = $avg_time_spent_in_course = $avg_score_in_exercise = 0;
@@ -1670,9 +1670,9 @@ class MySpace {
 				$nb_students_in_course = count($users);
 				$avg_assignments_in_course  = Tracking::count_student_assignments($users, $course_code, $session_id);
 				$avg_messages_in_course     = Tracking::count_student_messages($users, $course_code, $session_id);
-				$avg_progress_in_course     = Tracking::get_avg_student_progress($users, $course_code, array(), $session_id);                
+				$avg_progress_in_course     = Tracking::get_avg_student_progress($users, $course_code, array(), $session_id);
 				$avg_score_in_course        = Tracking::get_avg_student_score($users, $course_code, array(), $session_id);
-				$avg_score_in_exercise      = Tracking::get_avg_student_exercise_score($users, $course_code, 0, $session_id);				                
+				$avg_score_in_exercise      = Tracking::get_avg_student_exercise_score($users, $course_code, 0, $session_id);
 				$avg_time_spent_in_course   = Tracking::get_time_spent_on_the_course($users, $course_code, $session_id);
 
 				$avg_progress_in_course = round($avg_progress_in_course / $nb_students_in_course, 2);
@@ -2214,24 +2214,24 @@ class MySpace {
 		xml_parse($parser, api_utf8_encode_xml(file_get_contents($file)));
 		xml_parser_free($parser);
 		return $users;
-	}	
+	}
 }
 
-    
+
 function get_stats($user_id, $course_code, $start_date = null, $end_date = null) {
     // Database table definitions
     $tbl_track_course   = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
     $tbl_main           = Database :: get_main_table(TABLE_MAIN_COURSE);
 
     $course_info = api_get_course_info($course_code);
-    if (!empty($course_info)) {        
+    if (!empty($course_info)) {
         $strg_sd    = "";
-        $strg_ed    = "";        
+        $strg_ed    = "";
         if ($start_date != null && $end_date != null){
             $end_date = add_day_to( $end_date );
             $strg_sd = "AND login_course_date BETWEEN '$start_date' AND '$end_date'";
             $strg_ed = "AND logout_course_date BETWEEN '$start_date' AND '$end_date'";
-        }    
+        }
         $sql = 'SELECT SEC_TO_TIME(avg(time_to_sec(timediff(logout_course_date,login_course_date)))) as avrg,
             SEC_TO_TIME(sum(time_to_sec(timediff(logout_course_date,login_course_date)))) as total,
             count(user_id) as times
@@ -2239,11 +2239,11 @@ function get_stats($user_id, $course_code, $start_date = null, $end_date = null)
             WHERE user_id = ' . intval($user_id) . '
             AND course_code = "' . Database::escape_string($course_code) . '" '.$strg_sd.' '.$strg_ed.' '.'
             ORDER BY login_course_date ASC';
-    
+
         $rs = Database::query($sql);
         $result = array();
-    
-        if ($row = Database::fetch_array($rs)) {    
+
+        if ($row = Database::fetch_array($rs)) {
             $foo_avg    = $row['avrg'];
             $foo_total  = $row['total'];
             $foo_times  = $row['times'];
@@ -2271,39 +2271,44 @@ function add_day_to($end_date) {
  * @version OCT-22- 2010
  * @return  array
  */
-function get_connections_to_course_by_date($user_id, $course_code, $start_date, $end_date) {
+function get_connections_to_course_by_date($user_id, $course_code, $start_date, $end_date)
+{
     // Database table definitions
     $tbl_track_course   = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
-    $tbl_main           = Database :: get_main_table(TABLE_MAIN_COURSE);
-    
     $course_info = api_get_course_info($course_code);
     $user_id = intval($user_id);
+    $connections = array();
+
     if (!empty($course_info)) {
         $end_date = add_day_to($end_date);
-        $sql = "SELECT login_course_date, logout_course_date FROM $tbl_track_course 
-            WHERE user_id = $user_id
-            AND course_code = '$course_code' 
-            AND login_course_date BETWEEN '$start_date' AND '$end_date'
-            AND logout_course_date BETWEEN '$start_date' AND '$end_date'
-            ORDER BY login_course_date ASC";    
+        $sql = "SELECT login_course_date, logout_course_date
+                FROM $tbl_track_course
+                WHERE
+                  user_id = $user_id AND
+                  course_code = '$course_code' AND
+                  login_course_date BETWEEN '$start_date' AND '$end_date' AND
+                  logout_course_date BETWEEN '$start_date' AND '$end_date'
+                ORDER BY login_course_date ASC";
         $rs = Database::query($sql);
-        $connections = array();
-    
-        while ($row = Database::fetch_array($rs)) {    
+
+        while ($row = Database::fetch_array($rs)) {
             $login_date = $row['login_course_date'];
-            $logout_date = $row['logout_course_date'];    
+            $logout_date = $row['logout_course_date'];
             $timestamp_login_date = strtotime($login_date);
-            $timestamp_logout_date = strtotime($logout_date);    
-            $connections[] = array('login' => $timestamp_login_date, 'logout' => $timestamp_logout_date);
+            $timestamp_logout_date = strtotime($logout_date);
+            $connections[] = array(
+                'login' => $timestamp_login_date,
+                'logout' => $timestamp_logout_date
+            );
         }
     }
     return $connections;
 }
 
 /**
- * 
  *
- * @param array     
+ *
+ * @param array
  * @author Jorge Frisancho Jibaja
  * @version OCT-22- 2010
  * @return array
@@ -2455,7 +2460,7 @@ function grapher($sql_result, $start_date, $end_date, $type = "") {
 
             // Finish the graph
             $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf', 8);
-            $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf', 10);            
+            $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf', 10);
             $test->drawTitle(60, 22, get_lang('AccessDetails'), 50, 50, 50, 585);
 
             //------------------