123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- <?php
- // $Id:
- /*
- ==============================================================================
- Dokeos - elearning and course management software
- Copyright (c) 2009 Dokeos SPRL
- Copyright (c) 2008 Furio Petrossi
- For a full list of contributors, see "credits.txt".
- The full license can be read in "license.txt".
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- See the GNU General Public License for more details.
- Contact: Dokeos, rue du Corbeau, 108, B-1030 Brussels, Belgium, info@dokeos.com
- ==============================================================================
- */
- /**
- ==============================================================================
- * This is the tracking library for Dokeos.
- * Include/require it in your code to use its functionality.
- *
- * @package dokeos.library
- ==============================================================================
- * Calculates the time spent on the course
- * @param integer $user_id the user id
- * @param string $course_code the course code
- * Funzione scritta da Mario per testare cose
- */
- // name of the language file that needs to be included
- $language_file = array ('registration', 'index', 'tracking');
- // including the global Dokeos file
- require '../inc/global.inc.php';
- // including additional libraries
- 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';
- // the section (for the tabs)
- $this_section = "session_my_space";
- /* MAIN */
- $user_id = Security::remove_XSS($_REQUEST['student']);
- $course_code = Security::remove_XSS($_REQUEST['course']);
- $connections = get_connections_to_course($user_id, $course_code);
- if (api_is_xml_http_request()) {
- $type = Security::remove_XSS($_GET['type']);
- $main_year = $main_month_year = $main_day = array();
- // get last 8 days/months
- $last_days = 8;
- $last_months = 5;
- for ($i = $last_days; $i >= 0; $i--) {
- $main_day[date ('d-m-Y', mktime () - $i * 3600 * 24)] = 0;
- }
- for ($i = $last_months; $i >= 0; $i--) {
- $main_month_year[date ('m-Y', mktime () - $i * 30 * 3600 * 24)] = 0;
- }
- $i = 0;
- if (is_array($connections) && count($connections) > 0) {
- foreach ($connections as $key => $data) {
- //creating the main array
- $main_month_year[date('m-Y', $data['login'])] += float_format(($data['logout'] - $data['login']) / 60, 0);
- $main_day[date('d-m-Y', $data['login'])] += float_format(($data['logout'] - $data['login']) / 60, 0);
- if ($i > 500) {
- break;
- }
- $i++;
- }
- switch ($type) {
- case 'day':
- $main_date = $main_day;
- break;
- case 'month':
- $main_date = $main_month_year;
- break;
- case 'year':
- $main_date = $main_year;
- break;
- }
- // the nice graphics :D
- $labels = array_keys($main_date);
- if (count($main_date) == 1) {
- $labels = $labels[0];
- $main_date = $main_date[$labels];
- }
- $data_set = new pData;
- $data_set->AddPoint($main_date, 'Q');
- if (count($main_date)!= 1) {
- $data_set->AddPoint($labels, 'Date');
- }
- $data_set->AddAllSeries();
- $data_set->RemoveSerie('Date');
- $data_set->SetAbsciseLabelSerie('Date');
- $data_set->SetYAxisName(get_lang('Minutes', ''));
- $graph_id = api_get_user_id().'AccessDetails'.api_get_course_id();
- $data_set->AddAllSeries();
- $cache = new pCache();
- // the graph id
- $data = $data_set->GetData();
- if ($cache->IsInCache($graph_id, $data_set->GetData())) {
- //if (0) {
- //if we already created the img
- // echo 'in cache';
- $img_file = $cache->GetHash($graph_id, $data_set->GetData());
- } else {
- // if the image does not exist in the archive/ folder
- // Initialise the graph
- $test = new pChart(760, 230);
- //which schema of color will be used
- $quant_resources = count($data[0]) - 1;
- // Adding the color schemma
- $test->loadColorPalette(api_get_path(LIBRARY_PATH).'pchart/palette/default.txt');
- $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf', 8);
- $test->setGraphArea(70, 30, 680, 200);
- $test->drawFilledRoundedRectangle(7, 7, 693, 223, 5, 240, 240, 240);
- $test->drawRoundedRectangle(5, 5, 695, 225, 5, 230, 230, 230);
- $test->drawGraphArea(255, 255, 255, TRUE);
- $test->drawScale($data_set->GetData(), $data_set->GetDataDescription(), SCALE_START0, 150, 150, 150, TRUE, 0, 0);
- $test->drawGrid(4, TRUE, 230, 230, 230, 50);
- $test->setLineStyle(2);
- // Draw the 0 line
- $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf', 6);
- $test->drawTreshold(0, 143, 55, 72, TRUE, TRUE);
- if (count($main_date) == 1) {
- //Draw a graph
- echo '<strong>'.$labels.'</strong><br/>';
- $test->drawBarGraph($data_set->GetData(), $data_set->GetDataDescription(), TRUE);
- } else {
- //Draw the line graph
- $test->drawLineGraph($data_set->GetData(), $data_set->GetDataDescription());
- $test->drawPlotGraph($data_set->GetData(), $data_set->GetDataDescription(), 3, 2, 255, 255, 255);
- }
- // 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->drawTitle(60, 22, get_lang('AccessDetails', ''), 50, 50, 50, 585);
- //------------------
- //echo 'not in cache';
- $cache->WriteToCache($graph_id, $data_set->GetData(), $test);
- ob_start();
- $test->Stroke();
- ob_end_clean();
- $img_file = $cache->GetHash($graph_id, $data_set->GetData());
- }
- echo '<img src="'.api_get_path(WEB_ARCHIVE_PATH).$img_file.'">';
- } else {
- Display::display_warning_message (get_lang('GraphicNotAvailable'));
- }
- exit;
- }
- $nameTools = get_lang('AccessDetails');
- //StudentDetails
- if (isset($_GET['origin']) && strcmp($_GET['origin'], 'tracking_course') === 0) {
- $interbreadcrumb[] = array ("url" => "../tracking/courseLog.php?cidReq=".Security::remove_XSS($_GET['course'])."&studentlist=true&id_session=".api_get_session_id(), "name" => get_lang("Tracking"));
- $interbreadcrumb[] = array ("url" => "myStudents.php?student=".Security::remove_XSS($_GET['student'])."&details=true&origin=".Security::remove_XSS($_GET['origin'])."&course=".Security::remove_XSS($_GET['course']).'&cidReq='.Security::remove_XSS($_GET['course']), "name" => get_lang('DetailsStudentInCourse'));
- $interbreadcrumb[] = array ("url" => "javascript: void(0);", "name" => get_lang("Details"));
- } elseif (isset($_GET['origin']) && strcmp($_GET['origin'], 'user_course') === 0) {
- $interbreadcrumb[] = array ("url" => "../user/user.php?cidReq=".Security::remove_XSS($_GET['course']), "name" => get_lang("Users"));
- $interbreadcrumb[] = array ("url" => "myStudents.php?student=".Security::remove_XSS($_GET['student'])."&details=true&origin=".Security::remove_XSS($_GET['origin'])."&course=".Security::remove_XSS($_GET['course']).'&cidReq='.Security::remove_XSS($_GET['course']), "name" => get_lang('DetailsStudentInCourse'));
- $interbreadcrumb[] = array ("url" => "javascript: void(0);", "name" => get_lang("Details"));
- }
- $htmlHeadXtra[] = '<script src="../inc/lib/javascript/jquery.js" type="text/javascript" language="javascript"></script>'; //jQuery
- $htmlHeadXtra[] = '<script src="../inc/lib/javascript/jquery-1.1.3.1.pack.js" type="text/javascript"></script>';
- $htmlHeadXtra[] = '<script src="../inc/lib/javascript/jquery.history_remote.pack.js" type="text/javascript"></script>';
- $htmlHeadXtra[] = '<script src="../inc/lib/javascript/jquery.tabs.pack.js" type="text/javascript"></script>';
- $htmlHeadXtra[] = '<link rel="stylesheet" href="../inc/lib/javascript/jquery.tabs.css" type="text/css" media="print, projection, screen">';
- $htmlHeadXtra[] = '<script type="text/javascript">
- $(function() {
- $("#container-9").tabs({ remote: true});
- });
- </script>';
- Display :: display_header('');
- $tbl_userinfo_def = Database :: get_course_table(TABLE_USER_INFO);
- $main_user_info = api_get_user_info($user_id);
- $result_to_print = '';
- $main_date_array = array();
- foreach ($connections as $key => $data) {
- $result_to_print .= ' '.date('d-m-Y (H:i:s)', $data['login']).' - '.api_time_to_hms($data['logout'] - $data['login']).'<br />'."\n";
- }
- api_display_tool_title(get_lang('DetailsStudentInCourse'));
- echo '<div class="actions">';
- echo '<strong>'.get_lang('User').': '.api_get_person_name($main_user_info['firstName'], $main_user_info['lastName']).'</strong> <strong>'.get_lang('Course').': '.$course_code.'</strong></div>';
- ?>
- <div id="container-9">
- <ul>
- <li><a href="access_details.php?type=day&course=<?php echo $course_code?>&student=<?php echo $user_id?>"><span> <?php echo api_ucfirst(get_lang('Day')); ?></span></a></li>
- <li><a href="access_details.php?type=month&course=<?php echo $course_code?>&student=<?php echo $user_id?>"><span><?php echo api_ucfirst(get_lang('MinMonth')); ?></span></a></li>
- </ul>
- <?php echo '<div id="show"></div>'; ?>
- </div>
- <?php
- echo '<div id="graph"></div><br />';
- echo '<div class="actions"><strong>', get_lang('DateAndTimeOfAccess'), ' - ', get_lang('Duration'), '</strong></div><br />';
- echo $result_to_print;
- /* Login time against logout time
- foreach ($connections as $key => $data) {
- echo ("<tr><td>".date("d-m-Y (H:i:s)", $data['login'])."</td><td>".date("d-m-Y (H:i:s)", $data['logout'])."</td></tr>");
- }
- */
- /*
- foreach ($connections as $key => $data) {
- echo ("<tr><td>".date("d-m-Y (H:i:s)", $data['login'])."</td><td>".api_time_to_hms($data['logout'] - $data['login'])."</td></tr>");
- }
- echo ("</table>");
- */
- Display:: display_footer();
- /*
- -----------------------------------------------------------
- Functions
- -----------------------------------------------------------
- */
- /**
- * Gets the connections to a course as an array of login and logout time
- *
- * @param unknown_type $user_id
- * @param unknown_type $course_code
- * @return unknown
- */
- function get_connections_to_course($user_id, $course_code) {
- // 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);
- $sql_query = 'SELECT visual_code as course_code FROM '.$tbl_main.' c WHERE code="'.Database::escape_string($course_code).'";';
- $result = Database::query($sql_query, __FILE__, __LINE__);
- $row_query = Database::fetch_array($result, 'ASSOC');
- $course_true = isset($row_query['course_code']) ? $row_query['course_code']: $course_code;
- $sql = 'SELECT login_course_date, logout_course_date FROM ' . $tbl_track_course . '
- WHERE user_id = ' . intval($user_id) . '
- AND course_code="' . Database::escape_string($course_true) . '" ORDER BY login_course_date ASC';
- $rs = Database::query($sql, __FILE__, __LINE__);
- $connections = array();
- while ($row = Database::fetch_array($rs)) {
- $login_date = $row['login_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);
- }
- return $connections;
- }
- /**
- * TODO: Not used, to b deleted?
- * Enter description here...
- *
- * @param unknown_type $user_id
- * @param unknown_type $course_code
- * @param unknown_type $year
- * @param unknown_type $month
- * @param unknown_type $day
- * @return unknown
- */
- function get_connections_to_course_by_time($user_id, $course_code, $year = '', $month = '', $day = '') {
- // 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);
- $sql_query = 'SELECT visual_code as course_code FROM '.$tbl_main.' c WHERE code="'.Database :: escape_string($course_code).'";';
- $result = Database::query($sql_query, __FILE__, __LINE__);
- $row_query = Database::fetch_array($result,'ASSOC');
- $course_true = isset($row_query['course_code']) ? $row_query['course_code']: $course_code;
- $sql = 'SELECT login_course_date, logout_course_date FROM ' . $tbl_track_course . '
- WHERE user_id = ' . intval($user_id) . '
- AND course_code="' . Database::escape_string($course_true) . '"
- ORDER BY login_course_date DESC';
- $rs = Database::query($sql, __FILE__, __LINE__);
- $connections = array();
- while ($row = Database::fetch_array($rs)) {
- $login_date = $row['login_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);
- }
- return $connections;
- }
|