diff --git a/main/inc/ajax/myspace.ajax.php b/main/inc/ajax/myspace.ajax.php new file mode 100644 index 0000000000..c7ea4e4565 --- /dev/null +++ b/main/inc/ajax/myspace.ajax.php @@ -0,0 +1,60 @@ +true); + $start_date = isset($_REQUEST['startDate'])?$_REQUEST['startDate']:""; + $end_date = isset($_REQUEST['endDate'])?$_REQUEST['endDate']:""; + $user_id = isset($_REQUEST['student'])?$_REQUEST['student']:""; + $course_code = isset($_REQUEST['course'])?$_REQUEST['course']:""; + + $sql_result = get_connections_to_course_by_date($user_id, $course_code, $start_date, $end_date); + + if (is_array($sql_result) && count($sql_result) > 0) { + $db['is_empty'] = false; + $db['result'] = convert_to_string($sql_result); + $rst = get_stats($user_id, $course_code, $start_date, $end_date); + $foo_stats = ''.get_lang('Total').': '.$rst['total'].'
'; + $foo_stats .= ''.get_lang('Average').': '.$rst['avg'].'
'; + $foo_stats .= ''.get_lang('Quantity').' : '.$rst['times'].'
'; + $db['stats'] = $foo_stats; + $db['graph_result'] = grapher($sql_result, $start_date, $end_date); + } else { + $db['result'] = '
No se encontro información habilitada del usuario
'; + $db['graph_result'] = '
No se encontro información habilitada del usuario
'; + $db['stats'] = '
No se encontro información registrada para este rango
'; + } + header('Cache-Control: no-cache'); + echo json_encode($db); // requires: PHP >= 5.2.0, PECL json >= 1.2.0 + + break; +} +exit; \ No newline at end of file diff --git a/main/mySpace/access_details.php b/main/mySpace/access_details.php index 356ff24c55..28a2be4164 100755 --- a/main/mySpace/access_details.php +++ b/main/mySpace/access_details.php @@ -8,7 +8,6 @@ * Calculates the time spent on the course * @param integer $user_id the user id * @param string $course_code the course code -* @author Mario per testare cose * @author Julio Montoya * */ @@ -16,7 +15,6 @@ // name of the language file that needs to be included $language_file = array ('registration', 'index', 'tracking'); -// including the global Dokeos file require_once '../inc/global.inc.php'; // including additional libraries @@ -29,199 +27,210 @@ require_once 'myspace.lib.php'; // the section (for the tabs) $this_section = SECTION_TRACKING; - /* MAIN */ $user_id = intval($_REQUEST['student']); $session_id = intval($_GET['id_session']); $course_code = Security::remove_XSS($_REQUEST['course']); $connections = MySpace::get_connections_to_course($user_id, $course_code, $session_id); +$quote_simple = "'"; + +$htmlHeadXtra[] = api_get_jquery_ui_js(); + +$htmlHeadXtra[] = ''; +$htmlHeadXtra[] = ''; + +$htmlHeadXtra[] = ''; + -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 ''.$labels.'
'; - $test->drawBarGraph($data_set->GetData(), $data_set->GetDataDescription(), TRUE); - } else { - //Draw the line graph - //$test->drawLineGraph($data_set->GetData(), $data_set->GetDataDescription()); - //$test->drawCubicCurve($data_set->GetData(), $data_set->GetDataDescription()); - //$test->drawFilledLineGraph($data_set->GetData(), $data_set->GetDataDescription()); - $test->drawFilledCubicCurve($data_set->GetData(), $data_set->GetDataDescription(),.2,50); - $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 ''; - } else { - Display::display_warning_message(api_convert_encoding(get_lang('GraphicNotAvailable'),'UTF-8')); - } - exit; +$htmlHeadXtra[] = ''; + +$htmlHeadXtra[] = ''; +//Changes END + 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(); -$session_name = api_get_session_name(api_get_session_id()); -if (!empty($session_name)) { - $session_name = get_lang('Session').' '.$session_name.' | '; -} -echo '

'.get_lang('Course').': '.$course_code.' | '.(empty($session_name)?'':$session_name).' '.get_lang('User').': '.api_get_person_name($main_user_info['firstName'], $main_user_info['lastName']).'     

'; -api_display_tool_title(get_lang('DetailsStudentInCourse')); - -if (!empty($connections)) { - 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']).'
'."\n"; - } +$sql_result = MySpace::get_connections_to_course($user_id, $course_code); +$result_to_print = convert_to_string($sql_result); - echo '
'; - echo ''; - echo '
'; - - echo '
'; - - - echo '

'; - echo '
', get_lang('DateAndTimeOfAccess'), ' - ', get_lang('Duration'), '

'; - echo $result_to_print; -} else { - Display::display_warning_message(get_lang('GraphicNotAvailable')); -} +api_display_tool_title(get_lang('DetailsStudentInCourse')); +?> +
+
+
'.get_lang('Course').': '.$course_code)?>
+
+
+
+

Seleccione una rango de fechas para su consulta

+ + + + +


+
+ +

+ +
+
Información Basica

+
+ '.get_lang('Total').': '.$rst['total'].'
'; + $foo_stats .= ''.get_lang('Average').': '.$rst['avg'].'
'; + $foo_stats .= ''.get_lang('Quantity').' : '.$rst['times'].'
'; + echo $foo_stats; + } + else{ + echo ('
No se encontro información habilitada del usuario
'); + }?> +

+

+ +
+ +
+ + +
+

+
+
+ No se encontro información habilitada del usuario
'); + }?> +
+
'); + }?> +
+
+ $foo_avg, 'total' => $foo_total, 'times' => $foo_times); + $tbl_main = Database :: get_main_table(TABLE_MAIN_COURSE); + + $course_info = api_get_course_info($course_code); + if (!empty($course_info)) { + $strg_sd = ""; + $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 + FROM ' . $tbl_track_course . ' + 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)) { + $foo_avg = $row['avrg']; + $foo_total = $row['total']; + $foo_times = $row['times']; + $result = array('avg' => $foo_avg, 'total' => $foo_total, 'times' => $foo_times); + } } return $result; } -function cev_add_day_to( $end_date ){ +function add_day_to($end_date) { $foo_date = strtotime( $end_date ); $foo_date = strtotime(" +1 day", $foo_date); $foo_date = date("Y-m-d", $foo_date); @@ -1881,56 +1867,51 @@ function cev_add_day_to( $end_date ){ /** * Gets the connections to a course as an array of login and logout time * - * @param unknown_type $user_id - * @param unknown_type $course_code - * @author Jorge Frisancho Jibaja - * @version CEV OCT-22- 2010 - * @return unknown + * @param int $user_id + * @param string $course_code + * @author Jorge Frisancho Jibaja + * @author Julio Montoya fixing the function + * @version OCT-22- 2010 + * @return array */ 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); - - $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; - $COMILLA_SIMPLE = "'"; - - $end_date = cev_add_day_to( $end_date ); - $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 login_course_date BETWEEN ' . $COMILLA_SIMPLE . $start_date . $COMILLA_SIMPLE . ' AND ' . $COMILLA_SIMPLE . $end_date . $COMILLA_SIMPLE . ' - AND logout_course_date BETWEEN ' . $COMILLA_SIMPLE . $start_date . $COMILLA_SIMPLE . ' AND ' . $COMILLA_SIMPLE . $end_date . $COMILLA_SIMPLE . ' - 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); + $tbl_main = Database :: get_main_table(TABLE_MAIN_COURSE); + + $course_info = api_get_course_info($course_code); + $user_id = intval($user_id); + 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"; + $rs = Database::query($sql); + $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; } /** - * conver an sql result to an array + * * - * @param unknown_type $sql_result + * @param array * @author Jorge Frisancho Jibaja - * @version CEV OCT-22- 2010 + * @version OCT-22- 2010 * @return array */ -function cev_convert_to_array($sql_result){ +function convert_to_array($sql_result){ $result_to_print = ''; foreach ($sql_result as $key => $data) { $result_to_print .= ''."\n"; @@ -1940,15 +1921,16 @@ function cev_convert_to_array($sql_result){ return $result_to_print; } + /** - * converter an array to a table in html + * Converte an array to a table in html * * @param array $sql_result * @author Jorge Frisancho Jibaja - * @version CEV OCT-22- 2010 + * @version OCT-22- 2010 * @return string */ -function cev_convert_to_string($sql_result){ +function convert_to_string($sql_result){ $result_to_print = '
'.date('d-m-Y (H:i:s)', $data['login']).''.api_time_to_hms($data['logout'] - $data['login']).'
'; if (!empty($sql_result)) { foreach ($sql_result as $key => $data) { @@ -1968,10 +1950,10 @@ function cev_convert_to_string($sql_result){ * @param string $end_date * @param string $type * @author Jorge Frisancho Jibaja - * @version CEV OCT-22- 2010 + * @version OCT-22- 2010 * @return string */ -function cev_grapher($sql_result, $start_date, $end_date, $type = "") { +function grapher($sql_result, $start_date, $end_date, $type = "") { 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'; diff --git a/main/mySpace/slider.css b/main/mySpace/slider.css new file mode 100644 index 0000000000..82d04f7136 --- /dev/null +++ b/main/mySpace/slider.css @@ -0,0 +1,57 @@ +div#cev_cont_results +{ + margin: 0; + padding-left:18px; + padding-right:18px; +} +div#cev_cont_header +{ + margin: 0; + padding-left:18px; + padding-right:18px; +} +div#cev_cont_stats +{ + margin: 0; + padding-left:18px; + padding-right:18px; +} +div.slider +{ + overflow: hidden; + display: none; + line-height: 20px; +} + +div#cev_cont .ui-tabs-nav .ui-helper-reset .ui-helper-clearfix .ui-widget-header .ui-corner-all +{ + margin: 0; + padding-left:18px; + padding-right:18px; +} + +div.slider_menu a +{ + color: #3757F7; + font-size: 13px; +} + +/** + * Not required, for styling only + */ + +div#slider_wrapper +{ + width: 500px; +} + +div.title +{ + font-weight: bold; +} + +div.slider p +{ + padding: 0 0 1em 0; + margin: 0; +} diff --git a/main/mySpace/slider.js b/main/mySpace/slider.js new file mode 100644 index 0000000000..2bec3e0f58 --- /dev/null +++ b/main/mySpace/slider.js @@ -0,0 +1,84 @@ +// Set the initial height +var sliderHeight = "80px"; + +$(document).ready(function(){ + // Show the slider content + $('.slider').show(); + + $('.slider').each(function () { + var current = $(this); + current.attr("box_h", current.height()); + }); + + $(".slider").css("height", sliderHeight); +}); + +function sliderGetHeight(foo_var) +{ + var current = $(foo_var); + if (current.height() <= 80){ + return current.height()+30; + } + else { + return current.height(); + } +} + +function sliderSetHeight(foo_var, foo_height) +{ + $(foo_var).each(function () { + var current = $(this); + current.attr("box_h", foo_height); + }); +} + +function controlSliderMenu(foo_height_a) +{ + if (foo_height_a <= 80){ + sliderOpen(); + slider_state = "open" + $(".slider_menu").empty(); + + } +} +// Set the initial slider state +var slider_state = "close"; + +function getSliderState() +{ + return slider_state; +} + +function setSliderState(foo_slider_state) +{ + slider_state = foo_slider_state; +} +function sliderAction() +{ + if (slider_state == "close") + { + sliderOpen(); + slider_state = "open" + $(".slider_menu").html('Cerrar'); + } + else if (slider_state == "open") + { + sliderClose(); + slider_state = "close"; + $(".slider_menu").html('Más...'); + } + + return false; +} + +function sliderOpen() +{ + var open_height = $(".slider").attr("box_h") + "px"; + $(".slider").animate({"height": open_height}, {duration: "slow" }); +} + +function sliderClose() +{ + $(".slider").animate({"height": "0px"}, {duration: "fast" }); + $(".slider").animate({"height": sliderHeight}, {duration: "fast" }); +} \ No newline at end of file