|
|
|
@ -5,7 +5,7 @@ |
|
|
|
|
Dokeos - elearning and course management software |
|
|
|
|
|
|
|
|
|
Copyright (c) 2009 Dokeos SPRL |
|
|
|
|
Copyright (c) 2008 Furio Petrossi |
|
|
|
|
Copyright (c) 2008 Furio Petrossi |
|
|
|
|
|
|
|
|
|
For a full list of contributors, see "credits.txt". |
|
|
|
|
The full license can be read in "license.txt". |
|
|
|
@ -38,12 +38,12 @@ |
|
|
|
|
$language_file = array ('registration', 'index', 'tracking'); |
|
|
|
|
|
|
|
|
|
// including the global Dokeos file |
|
|
|
|
require_once '../inc/global.inc.php'; |
|
|
|
|
require '../inc/global.inc.php'; |
|
|
|
|
|
|
|
|
|
// including additional libraries |
|
|
|
|
include_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php'; |
|
|
|
|
include_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php'; |
|
|
|
|
include_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.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'; |
|
|
|
|
|
|
|
|
|
// the section (for the tabs) |
|
|
|
|
$this_section = "session_my_space"; |
|
|
|
@ -59,116 +59,112 @@ if (api_is_xml_http_request()) { |
|
|
|
|
$main_year = $main_month_year = $main_day = array(); |
|
|
|
|
// get last 8 days/months |
|
|
|
|
$last_days = 8; |
|
|
|
|
$last_months = 5; |
|
|
|
|
$last_months = 5; |
|
|
|
|
for ($i = $last_days; $i >= 0; $i--) { |
|
|
|
|
$main_day[date ('d-m-Y', mktime () - $i * 3600 * 24)] = 0; |
|
|
|
|
} |
|
|
|
|
$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; |
|
|
|
|
} |
|
|
|
|
$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_year[date('Y', $data['login'])] += calculHours($data['logout'] - $data['login']) * 60; |
|
|
|
|
//$main_month_year[date('m-Y', $data['login'])] += calculHours($data['logout'] - $data['login']) * 60; |
|
|
|
|
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'])] += calculHours($data['logout'] - $data['login']) * 60; |
|
|
|
|
$main_day[date('d-m-Y', $data['login'])] += float_format(($data['logout'] - $data['login']) / 60, 0); |
|
|
|
|
if ($i > 500) { |
|
|
|
|
break; |
|
|
|
|
if ($i > 500) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
$i++; |
|
|
|
|
} |
|
|
|
|
$i++; |
|
|
|
|
} |
|
|
|
|
//var_dump($main_month_year); |
|
|
|
|
switch ($type) { |
|
|
|
|
case 'day': |
|
|
|
|
$main_date = $main_day; |
|
|
|
|
break; |
|
|
|
|
case 'month': |
|
|
|
|
$main_date = $main_month_year ; |
|
|
|
|
break; |
|
|
|
|
case 'year': |
|
|
|
|
$main_date = $main_year; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
//echo '<pre>'; print_r($main_date); |
|
|
|
|
|
|
|
|
|
// the nice graphics :D |
|
|
|
|
$labels = array_keys($main_date); |
|
|
|
|
if (count($main_date) == 1) { |
|
|
|
|
$labels = $labels[0]; |
|
|
|
|
$main_date = $main_date[$labels]; |
|
|
|
|
} |
|
|
|
|
switch ($type) { |
|
|
|
|
case 'day': |
|
|
|
|
$main_date = $main_day; |
|
|
|
|
break; |
|
|
|
|
case 'month': |
|
|
|
|
$main_date = $main_month_year; |
|
|
|
|
break; |
|
|
|
|
case 'year': |
|
|
|
|
$main_date = $main_year; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$DataSet = new pData; |
|
|
|
|
$DataSet->AddPoint($main_date, 'Q'); |
|
|
|
|
if (count($main_date)!= 1) { |
|
|
|
|
$DataSet->AddPoint($labels, 'Date'); |
|
|
|
|
} |
|
|
|
|
$DataSet->AddAllSeries(); |
|
|
|
|
$DataSet->RemoveSerie('Date'); |
|
|
|
|
$DataSet->SetAbsciseLabelSerie('Date'); |
|
|
|
|
$DataSet->SetYAxisName(get_lang('Minutes')); |
|
|
|
|
$graph_id = api_get_user_id().'AccessDetails'.api_get_course_id(); |
|
|
|
|
$DataSet->AddAllSeries(); |
|
|
|
|
|
|
|
|
|
$Cache = new pCache(); |
|
|
|
|
// the graph id |
|
|
|
|
$data = $DataSet->GetData(); |
|
|
|
|
|
|
|
|
|
if ($Cache->IsInCache($graph_id, $DataSet->GetData())) { |
|
|
|
|
//if (0) { |
|
|
|
|
//if we already created the img |
|
|
|
|
// echo 'in cache'; |
|
|
|
|
$img_file = $Cache->GetHash($graph_id, $DataSet->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($DataSet->GetData(), $DataSet->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($DataSet->GetData(), $DataSet->GetDataDescription(), TRUE); |
|
|
|
|
} else { |
|
|
|
|
//Draw the line graph |
|
|
|
|
$Test->drawLineGraph($DataSet->GetData(), $DataSet->GetDataDescription()); |
|
|
|
|
$Test->drawPlotGraph($DataSet->GetData(), $DataSet->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,$DataSet->GetData(),$Test); |
|
|
|
|
ob_start(); |
|
|
|
|
$Test->Stroke(); |
|
|
|
|
ob_end_clean(); |
|
|
|
|
$img_file = $Cache->GetHash($graph_id,$DataSet->GetData()); |
|
|
|
|
} |
|
|
|
|
// the nice graphics :D |
|
|
|
|
$labels = array_keys($main_date); |
|
|
|
|
if (count($main_date) == 1) { |
|
|
|
|
$labels = $labels[0]; |
|
|
|
|
$main_date = $main_date[$labels]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$DataSet = new pData; |
|
|
|
|
$DataSet->AddPoint($main_date, 'Q'); |
|
|
|
|
if (count($main_date)!= 1) { |
|
|
|
|
$DataSet->AddPoint($labels, 'Date'); |
|
|
|
|
} |
|
|
|
|
$DataSet->AddAllSeries(); |
|
|
|
|
$DataSet->RemoveSerie('Date'); |
|
|
|
|
$DataSet->SetAbsciseLabelSerie('Date'); |
|
|
|
|
$DataSet->SetYAxisName(get_lang('Minutes')); |
|
|
|
|
$graph_id = api_get_user_id().'AccessDetails'.api_get_course_id(); |
|
|
|
|
$DataSet->AddAllSeries(); |
|
|
|
|
|
|
|
|
|
$Cache = new pCache(); |
|
|
|
|
// the graph id |
|
|
|
|
$data = $DataSet->GetData(); |
|
|
|
|
|
|
|
|
|
if ($Cache->IsInCache($graph_id, $DataSet->GetData())) { |
|
|
|
|
//if (0) { |
|
|
|
|
//if we already created the img |
|
|
|
|
// echo 'in cache'; |
|
|
|
|
$img_file = $Cache->GetHash($graph_id, $DataSet->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($DataSet->GetData(), $DataSet->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($DataSet->GetData(), $DataSet->GetDataDescription(), TRUE); |
|
|
|
|
} else { |
|
|
|
|
//Draw the line graph |
|
|
|
|
$Test->drawLineGraph($DataSet->GetData(), $DataSet->GetDataDescription()); |
|
|
|
|
$Test->drawPlotGraph($DataSet->GetData(), $DataSet->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, $DataSet->GetData(), $Test); |
|
|
|
|
ob_start(); |
|
|
|
|
$Test->Stroke(); |
|
|
|
|
ob_end_clean(); |
|
|
|
|
$img_file = $Cache->GetHash($graph_id,$DataSet->GetData()); |
|
|
|
|
} |
|
|
|
|
echo '<img src="'.api_get_path(WEB_ARCHIVE_PATH).$img_file.'">'; |
|
|
|
|
} else { |
|
|
|
|
Display::display_warning_message (get_lang('GraphicNotAvailable')); |
|
|
|
@ -176,7 +172,7 @@ if (api_is_xml_http_request()) { |
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$nameTools= get_lang('AccessDetails'); |
|
|
|
|
$nameTools = get_lang('AccessDetails'); |
|
|
|
|
|
|
|
|
|
//StudentDetails |
|
|
|
|
if (isset($_GET['origin']) && strcmp($_GET['origin'], 'tracking_course') === 0) { |
|
|
|
@ -197,10 +193,10 @@ $htmlHeadXtra[] = '<link rel="stylesheet" href="../inc/lib/javascript/jquery.tab |
|
|
|
|
|
|
|
|
|
$htmlHeadXtra[] = '<script type="text/javascript"> |
|
|
|
|
$(function() { |
|
|
|
|
$("#container-9").tabs({ remote: true}); |
|
|
|
|
$("#container-9").tabs({ remote: true}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
</script>' ; |
|
|
|
|
|
|
|
|
|
</script>'; |
|
|
|
|
|
|
|
|
|
Display :: display_header(''); |
|
|
|
|
$TBL_USERINFO_DEF = Database :: get_course_table(TABLE_USER_INFO); |
|
|
|
@ -209,8 +205,8 @@ $mainUserInfo = 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']).' - '.calculHours($data['logout'] - $data['login']).'<br />'."\n"; |
|
|
|
|
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">'; |
|
|
|
@ -218,11 +214,11 @@ echo '<strong>'.get_lang('User').': '.api_get_person_name($mainUserInfo['firstNa |
|
|
|
|
|
|
|
|
|
?> |
|
|
|
|
<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 get_lang('Day'); ?></span></a></li>
|
|
|
|
|
<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>';?> |
|
|
|
|
<?php echo '<div id="show"></div>'; ?> |
|
|
|
|
</div> |
|
|
|
|
<?php |
|
|
|
|
|
|
|
|
@ -232,15 +228,16 @@ 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>"); |
|
|
|
|
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>".calculHours($data['logout']-$data['login'])."</td></tr>"); |
|
|
|
|
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(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -264,10 +261,10 @@ function get_connections_to_course($user_id, $course_code) { |
|
|
|
|
|
|
|
|
|
$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'); |
|
|
|
|
$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 . ' |
|
|
|
|
$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'; |
|
|
|
|
|
|
|
|
@ -307,44 +304,19 @@ function get_connections_to_course_by_time($user_id, $course_code, $year = '', $ |
|
|
|
|
$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 . ' |
|
|
|
|
$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) . '" |
|
|
|
|
AND course_code="' . Database::escape_string($course_true) . '" |
|
|
|
|
ORDER BY login_course_date DESC'; |
|
|
|
|
|
|
|
|
|
$rs = Database::query($sql, __FILE__, __LINE__); |
|
|
|
|
$connections = array(); |
|
|
|
|
while ($a_connections = Database::fetch_array($rs)) { |
|
|
|
|
$connections = array(); |
|
|
|
|
while ($a_connections = Database::fetch_array($rs)) { |
|
|
|
|
$s_login_date = $a_connections['login_course_date']; |
|
|
|
|
$s_logout_date = $a_connections['logout_course_date']; |
|
|
|
|
$s_logout_date = $a_connections['logout_course_date']; |
|
|
|
|
$i_timestamp_login_date = strtotime($s_login_date); |
|
|
|
|
$i_timestamp_logout_date = strtotime($s_logout_date); |
|
|
|
|
$connections[] = array('login' => $i_timestamp_login_date, 'logout' => $i_timestamp_logout_date); |
|
|
|
|
} |
|
|
|
|
$i_timestamp_logout_date = strtotime($s_logout_date); |
|
|
|
|
$connections[] = array('login' => $i_timestamp_login_date, 'logout' => $i_timestamp_logout_date); |
|
|
|
|
} |
|
|
|
|
return $connections; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Transforms seconds into a time format |
|
|
|
|
* |
|
|
|
|
* @param unknown_type $seconds |
|
|
|
|
* @return unknown |
|
|
|
|
*/ |
|
|
|
|
function calculHours($seconds) { |
|
|
|
|
//How many hours ? |
|
|
|
|
$hours = floor($seconds / 3600); |
|
|
|
|
|
|
|
|
|
//How many minutes ? |
|
|
|
|
$min = floor(($seconds - ($hours * 3600)) / 60); |
|
|
|
|
if ($min < 10) { |
|
|
|
|
$min = '0'.$min; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//How many seconds |
|
|
|
|
$sec = $seconds - ($hours * 3600) - ($min * 60); |
|
|
|
|
if ($sec < 10) { |
|
|
|
|
$sec = '0'.$sec; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $hours.get_lang('HourShort').' '.$min.':'.$sec; |
|
|
|
|
} |
|
|
|
|