Fix session view see BT#9746

1.9.x
Julio Montoya 11 years ago
parent 84bba539d6
commit 2016fd1eed
  1. 123
      main/inc/lib/tracking.lib.php
  2. 47
      main/session/index.php

@ -3885,11 +3885,17 @@ class Tracking
* @param int $session_id * @param int $session_id
* @param string $extra_params * @param string $extra_params
* @param bool $show_courses * @param bool $show_courses
* @param bool $showAllSessions
* *
* @return string * @return string
*/ */
public static function show_user_progress($user_id, $session_id = 0, $extra_params = '', $show_courses = true, $showAllSessions = true) public static function show_user_progress(
{ $user_id,
$session_id = 0,
$extra_params = '',
$show_courses = true,
$showAllSessions = true
) {
$tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE); $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
$tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
$tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
@ -3898,6 +3904,8 @@ class Tracking
$tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$user_id = intval($user_id); $user_id = intval($user_id);
$session_id = intval($session_id);
if (api_is_multiple_url_enabled()) { if (api_is_multiple_url_enabled()) {
$sql = "SELECT cu.course_code as code, title $sql = "SELECT cu.course_code as code, title
FROM $tbl_course_user cu INNER JOIN $tbl_access_rel_course a FROM $tbl_course_user cu INNER JOIN $tbl_access_rel_course a
@ -3930,7 +3938,13 @@ class Tracking
if (SessionManager::orderCourseIsEnabled() && !empty($session_id)) { if (SessionManager::orderCourseIsEnabled() && !empty($session_id)) {
$orderBy = " ORDER BY s.id, position "; $orderBy = " ORDER BY s.id, position ";
$tableSessionRelCourse = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $tableSessionRelCourse = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$extraInnerJoin = " INNER JOIN $tableSessionRelCourse src ON (cu.course_code = src.course_code AND src.id_session = $session_id) "; $extraInnerJoin = " INNER JOIN $tableSessionRelCourse src
ON (cu.course_code = src.course_code AND src.id_session = $session_id) ";
}
$sessionCondition = '';
if (!empty($session_id)) {
$sessionCondition = " AND s.id = $session_id";
} }
// Get the list of sessions where the user is subscribed as student // Get the list of sessions where the user is subscribed as student
@ -3944,6 +3958,7 @@ class Tracking
WHERE WHERE
id_user = $user_id AND id_user = $user_id AND
access_url_id = ".api_get_current_access_url_id()." access_url_id = ".api_get_current_access_url_id()."
$sessionCondition
$orderBy "; $orderBy ";
} else { } else {
$sql = "SELECT DISTINCT cu.course_code, s.id as session_id, name $sql = "SELECT DISTINCT cu.course_code, s.id as session_id, name
@ -3951,6 +3966,7 @@ class Tracking
INNER JOIN $tbl_session s ON (s.id = cu.id_session) INNER JOIN $tbl_session s ON (s.id = cu.id_session)
$extraInnerJoin $extraInnerJoin
WHERE id_user = $user_id WHERE id_user = $user_id
$sessionCondition
$orderBy "; $orderBy ";
} }
@ -3990,7 +4006,12 @@ class Tracking
if ($show_courses) { if ($show_courses) {
if (!empty($courses)) { if (!empty($courses)) {
$html .= Display::page_subheader( $html .= Display::page_subheader(
Display::return_icon('course.png', get_lang('MyCourses'), array(), ICON_SIZE_SMALL).' '.get_lang('MyCourses') Display::return_icon(
'course.png',
get_lang('MyCourses'),
array(),
ICON_SIZE_SMALL
).' '.get_lang('MyCourses')
); );
$html .= '<table class="data_table" width="100%">'; $html .= '<table class="data_table" width="100%">';
$html .= '<tr> $html .= '<tr>
@ -4095,13 +4116,16 @@ class Tracking
false, false,
1 1
); );
foreach ($exercise_list as $exercise_data) { foreach ($exercise_list as $exercise_data) {
$exercise_obj = new Exercise($course_data['id']); $exercise_obj = new Exercise($course_data['id']);
$exercise_obj->read($exercise_data['id']); $exercise_obj->read($exercise_data['id']);
//Exercise is not necessary to be visible to show results check the result_disable configuration instead //Exercise is not necessary to be visible to show results check the result_disable configuration instead
//$visible_return = $exercise_obj->is_visible(); //$visible_return = $exercise_obj->is_visible();
if ($exercise_data['results_disabled'] == 0 || $exercise_data['results_disabled'] == 2) { if ($exercise_data['results_disabled'] == 0 ||
$exercise_data['results_disabled'] == 2
) {
$best_average = intval( $best_average = intval(
get_best_average_score_by_exercise( get_best_average_score_by_exercise(
@ -4111,8 +4135,9 @@ class Tracking
$user_count $user_count
) )
); );
$exercise_graph_list[] = $best_average;
$all_exercise_graph_list[] = $best_average; $exercise_graph_list[] = $best_average;
$all_exercise_graph_list[] = $best_average;
$user_result_data = get_best_attempt_by_user( $user_result_data = get_best_attempt_by_user(
api_get_user_id(), api_get_user_id(),
@ -4122,7 +4147,9 @@ class Tracking
); );
$score = 0; $score = 0;
if (!empty($user_result_data['exe_weighting']) && intval($user_result_data['exe_weighting']) != 0) { if (!empty($user_result_data['exe_weighting']) &&
intval($user_result_data['exe_weighting']) != 0
) {
$score = intval($user_result_data['exe_result']/$user_result_data['exe_weighting'] * 100); $score = intval($user_result_data['exe_result']/$user_result_data['exe_weighting'] * 100);
} }
$time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time'], 'UTC') : 0; $time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time'], 'UTC') : 0;
@ -4133,7 +4160,8 @@ class Tracking
$exercise_graph_name_list[]= $title; $exercise_graph_name_list[]= $title;
$all_exercise_graph_name_list[] = $title; $all_exercise_graph_name_list[] = $title;
} else { } else {
// if there are more than 10 results, space becomes difficult to find, so only show the title of the exercise, not the tool // if there are more than 10 results, space becomes
// difficult to find, so only show the title of the exercise, not the tool
$title = cut($exercise_data['title'], 30); $title = cut($exercise_data['title'], 30);
$exercise_graph_name_list[]= $title; $exercise_graph_name_list[]= $title;
$all_exercise_graph_name_list[]= $title; $all_exercise_graph_name_list[]= $title;
@ -4168,7 +4196,14 @@ class Tracking
); );
} }
$html .= Display::page_subheader(Display::return_icon('session.png', get_lang('Sessions'), array(), ICON_SIZE_SMALL).' '.get_lang('Sessions')); $html .= Display::page_subheader(
Display::return_icon(
'session.png',
get_lang('Sessions'),
array(),
ICON_SIZE_SMALL
).' '.get_lang('Sessions')
);
$html .= '<table class="data_table" width="100%">'; $html .= '<table class="data_table" width="100%">';
$html .= '<tr> $html .= '<tr>
@ -4197,12 +4232,12 @@ class Tracking
$stats_array = array(); $stats_array = array();
foreach($course_list as $course_data) { foreach ($course_list as $course_data) {
//All exercises in the course @todo change for a real count //All exercises in the course @todo change for a real count
$exercises = get_all_exercises($course_data, $my_session_id); $exercises = get_all_exercises($course_data, $my_session_id);
$count_exercises = 0; $count_exercises = 0;
if (is_array($exercises) && !empty($exercises)) { if (is_array($exercises) && !empty($exercises)) {
$count_exercises = count($exercises); $count_exercises = count($exercises);
} }
//Count of user results //Count of user results
@ -4212,7 +4247,12 @@ class Tracking
$answered_exercises = 0; $answered_exercises = 0;
if (!empty($exercises)) { if (!empty($exercises)) {
foreach($exercises as $exercise_item) { foreach($exercises as $exercise_item) {
$attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_data['code'], $my_session_id); $attempts = count_exercise_attempts_by_user(
api_get_user_id(),
$exercise_item['id'],
$course_data['code'],
$my_session_id
);
if ($attempts > 1) { if ($attempts > 1) {
$answered_exercises++; $answered_exercises++;
} }
@ -4221,16 +4261,13 @@ class Tracking
// Average // Average
$average = get_average_score_by_course($course_data['code'], $my_session_id); $average = get_average_score_by_course($course_data['code'], $my_session_id);
$all_exercises += $count_exercises; $all_exercises += $count_exercises;
$all_unanswered_exercises_by_user += $count_exercises - $answered_exercises; $all_unanswered_exercises_by_user += $count_exercises - $answered_exercises;
//$all_done_exercise += $done_exercises; //$all_done_exercise += $done_exercises;
$all_average += $average; $all_average += $average;
//$stats_array[$course_data['code']] = array('exercises'=>$count_exercises, 'unanswered_exercises_by_user'=>$answered_exercises,'done_exercises'=>$done_exercises, 'average'=>$average);
} }
$all_average = $all_average / count($course_list); $all_average = $all_average / count($course_list);
if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) { if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) {
$html .= '<tr style="background-color:#FBF09D">'; $html .= '<tr style="background-color:#FBF09D">';
@ -4255,18 +4292,23 @@ class Tracking
$html .= '</tr>'; $html .= '</tr>';
} }
$html .= '</table><br />'; $html .= '</table><br />';
$html .= Display::div($main_session_graph, array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') ); $html .= Display::div(
$main_session_graph,
array(
'id' => 'session_graph',
'class' => 'chart-session',
'style' => 'position:relative; text-align: center;',
)
);
// Checking selected session. // Checking selected session.
if (isset($_GET['session_id'])) { if (isset($_GET['session_id'])) {
$session_id_from_get = intval($_GET['session_id']); $session_id_from_get = intval($_GET['session_id']);
$session_data = $course_in_session[$session_id_from_get]; $session_data = $course_in_session[$session_id_from_get];
$course_list = $session_data['course_list']; $course_list = $session_data['course_list'];
$html .= Display::tag('h3',$session_data['name'].' - '.get_lang('CourseList')); $html .= Display::tag('h3',$session_data['name'].' - '.get_lang('CourseList'));
$html .= '<table class="data_table" width="100%">'; $html .= '<table class="data_table" width="100%">';
//'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).' //'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).'
$html .= ' $html .= '
@ -4288,7 +4330,7 @@ class Tracking
$course_title = $course_data['title']; $course_title = $course_data['title'];
//All exercises in the course @todo change for a real count //All exercises in the course @todo change for a real count
$exercises = get_all_exercises($course_data, $session_id_from_get); $exercises = get_all_exercises($course_data, $session_id_from_get);
$count_exercises = 0; $count_exercises = 0;
if (!empty($exercises)) { if (!empty($exercises)) {
$count_exercises = count($exercises); $count_exercises = count($exercises);
@ -4299,8 +4341,13 @@ class Tracking
//From course exercises NOT from LP exercises!!! //From course exercises NOT from LP exercises!!!
//$done_exercises = get_count_exercises_attempted_by_course($course_code, $session_id_from_get); //$done_exercises = get_count_exercises_attempted_by_course($course_code, $session_id_from_get);
$answered_exercises = 0; $answered_exercises = 0;
foreach($exercises as $exercise_item) { foreach ($exercises as $exercise_item) {
$attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_code, $session_id_from_get); $attempts = count_exercise_attempts_by_user(
api_get_user_id(),
$exercise_item['id'],
$course_code,
$session_id_from_get
);
if ($attempts > 1) { if ($attempts > 1) {
$answered_exercises++; $answered_exercises++;
} }
@ -4309,15 +4356,23 @@ class Tracking
$unanswered_exercises = $count_exercises - $answered_exercises; $unanswered_exercises = $count_exercises - $answered_exercises;
// Average // Average
$average = get_average_score_by_course($course_code, $session_id_from_get); $average = get_average_score_by_course(
$my_average = get_average_score_by_course_by_user(api_get_user_id(), $course_code, $session_id_from_get); $course_code,
$session_id_from_get
);
$my_average = get_average_score_by_course_by_user(
api_get_user_id(),
$course_code,
$session_id_from_get
);
$stats_array[$course_code] = array( $stats_array[$course_code] = array(
'exercises' => $count_exercises, 'exercises' => $count_exercises,
'unanswered_exercises_by_user' => $unanswered_exercises, 'unanswered_exercises_by_user' => $unanswered_exercises,
'done_exercises' => $done_exercises, 'done_exercises' => $done_exercises,
'average' => $average, 'average' => $average,
'my_average' => $my_average 'my_average' => $my_average,
); );
$weighting = 0; $weighting = 0;
@ -4374,10 +4429,6 @@ class Tracking
$html .= '</tr>'; $html .= '</tr>';
} }
$html .= '</table>'; $html .= '</table>';
if (!empty($session_graph[$session_id_from_get])) {
//$html .= Display::div($session_graph[$session_id_from_get], array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') );
}
} }
} }
return $html; return $html;

@ -5,9 +5,6 @@
* @package chamilo.session * @package chamilo.session
* @author Julio Montoya <gugli100@gmail.com> Beeznest * @author Julio Montoya <gugli100@gmail.com> Beeznest
*/ */
/**
* Code
*/
use \ChamiloSession as Session; use \ChamiloSession as Session;
@ -517,7 +514,7 @@ $(function() {
window.location.href=ui.tab; window.location.href=ui.tab;
}); });
<?php <?php
//Displays js code to use a jqgrid // Displays js code to use a jqgrid
echo Display::grid_js('courses', '', $columns_courses, $column_model_courses, $extra_params_courses, $new_course_list); echo Display::grid_js('courses', '', $columns_courses, $column_model_courses, $extra_params_courses, $new_course_list);
echo Display::grid_js('list_default', $url, $columns, $column_model,$extra_params,array(), ''); echo Display::grid_js('list_default', $url, $columns, $column_model,$extra_params,array(), '');
echo Display::grid_js('list_course', $url_by_course, $columns, $column_model,$extra_params_course,array(),''); echo Display::grid_js('list_course', $url_by_course, $columns, $column_model,$extra_params_course,array(),'');
@ -526,23 +523,35 @@ $(function() {
?> ?>
// Generate tabs with jquery-ui // Generate tabs with jquery-ui
$('#tabs').tabs(); $('#tabs').tabs();
$( "#sub_tab" ).tabs(); $('#sub_tab').tabs();
}); });
</script> </script>
<?php <?php
$courseCode = isset($_GET['course']) ? $_GET['course'] : null; $courseCode = isset($_GET['course']) ? $_GET['course'] : null;
$my_reporting = Tracking::show_user_progress(api_get_user_id(), $session_id, '#tabs-4', false, false); $reportingTab = Tracking::show_user_progress(
if (!empty($my_reporting)) { api_get_user_id(),
$my_reporting .= '<br />'.Tracking::show_course_detail(api_get_user_id(), $courseCode, $session_id); $session_id,
'#tabs-4',
false,
false
);
if (!empty($reportingTab)) {
$reportingTab .= '<br />'.Tracking::show_course_detail(
api_get_user_id(),
$courseCode,
$session_id
);
} }
if (empty($my_reporting)) { if (empty($reportingTab)) {
$my_reporting = Display::return_message(get_lang('NoDataAvailable'), 'warning'); $reportingTab = Display::return_message(get_lang('NoDataAvailable'), 'warning');
} }
// Main headers // Main headers
$headers = array( $headers = array(
Display::return_icon('moderator_star.png'),
get_lang('Courses'), get_lang('Courses'),
get_lang('LearningPaths'), get_lang('LearningPaths'),
get_lang('MyQCM'), get_lang('MyQCM'),
@ -557,24 +566,28 @@ $sub_header = array(
); );
// Sub headers data // Sub headers data
$lp_tabs = Display::tabs( $lpTab = Display::tabs(
$sub_header, $sub_header,
array( array(
Display::grid_html('list_default'), //Display::grid_html('list_default'),
Display::grid_html('list_week'), Display::grid_html('list_week'),
Display::grid_html('list_course') //Display::grid_html('list_course')
), ),
'sub_tab' 'sub_tab'
); );
$courses_tab = Display::grid_html('courses'); $coursesTab = Display::grid_html('courses');
$starTab = Display::grid_html('list_default');
// Main headers data // Main headers data
echo Display::tabs( echo Display::tabs(
$headers, $headers,
array( array(
$courses_tab, $starTab,
$lp_tabs, $coursesTab,
Display::grid_html('list_course'),
Display::grid_html('exercises'), Display::grid_html('exercises'),
$my_reporting $reportingTab
) )
); );

Loading…
Cancel
Save