Improvement of report design - refs #2717

pull/2729/head
Alex Aragón 7 years ago
parent 76789efac6
commit d734f37cf3
  1. 91
      app/Resources/public/css/base.css
  2. 2
      main/inc/lib/sortable_table.class.php
  3. 155
      main/template/default/tracking/tracking_course_log.tpl
  4. 70
      main/tracking/courseLog.php

@ -2905,54 +2905,6 @@ form .formw .freeze {
}
/* header cell in data table in tools */
.data_table {
margin-bottom: 18px;
width: 100%;
border: 1px solid #DDDDDD;
}
.data_table td {
font-size: 12px;
}
.data_table th, .data_table td {
border-top: 1px solid #DDDDDD;
line-height: 18px;
padding: 10px;
}
.data_table th {
padding: 8px 10px;
font-weight: normal;
background-color: #EEEEEE;
border-bottom: 1px solid #DDDDDD;
color: #333;
}
.data_table th a {
color: #333;
}
.data_table_no_border {
border-collapse: collapse;
border-spacing: 0;
font-size: 12px;
margin-bottom: 15px;
margin-top: 8px;
text-align: left;
width: 100%;
}
.data_table_no_border td {
line-height: normal;
padding: 6px;
text-align: left;
vertical-align: middle;
}
.data_table tr.row_odd {
background-color: #F9F9F9;
}
.attendance-users-table .data_table tr.row_odd {
height: 64px;
@ -8215,21 +8167,22 @@ ul#toolnavbox-two li a.btn {
display: block;
float: left;
height: 70px;
width: 70px;
width: 50px;
text-align: center;
line-height: 70px;
font-size: 45px;
font-size: 35px;
}
.tracking-box-title{
font-size: 14px;
margin-bottom: 20px;
}
.tracking .tracking-info{
padding: 5px 10px;
margin-left: 70px;
margin-left: 50px;
}
.tracking .tracking-info .tracking-text{
display: block;
font-size: 14px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tracking .tracking-info .tracking-number{
display: block;
@ -8248,8 +8201,8 @@ ul#toolnavbox-two li a.btn {
.tracking-top-student .list-top .avatar{
display: block;
float: left;
height: 60px;
width: 60px;
height: 55px;
width: 50px;
text-align: center;
line-height: 60px;
}
@ -8258,36 +8211,44 @@ ul#toolnavbox-two li a.btn {
margin-left: 60px;
}
.tracking-top-student .list-top .info .name{
font-size: 16px;
font-size: 14px;
margin: 0;
padding: 0;
font-weight: bold;
}
.tracking-top-student .list-top .info .progress{
height: 18px;
margin-top: 10px;
height: 15px;
margin-top: 5px;
margin-bottom: 5px;
border: 1px solid #1e88e5;
background: #ffffff;
text-shadow: none;
}
.tracking-top-student .list-top .info .progress-bar{
line-height: 16px;
line-height: 14px;
background-color: #1e88e5;
}
.tracking-top-student .list-top .avatar .round {
line-height: 48px;
line-height: 39px;
color: #ffffff;
width: 45px;
height: 45px;
width: 40px;
height: 40px;
display: inline-block;
font-weight: 400;
text-align: center;
border-radius: 100%;
background: #1e88e5;
background: transparent;
font-size: 25px;
}
.tracking-top-student .list-top .avatar .round.trophy{
background: #ffb22b;
}
.tracking-top-student .list-top .avatar .round img{
border-radius: 100%;
}
.tracking-box-legend{
font-size: 10px;
color: #828282;
}
.tracking-student{
background-color: #7460ee;
border-color: #7460ee;

@ -130,7 +130,7 @@ class SortableTable extends HTML_Table
$table_id = $table_name.uniqid();
}
$this->table_id = $table_id;
parent::__construct(['class' => 'data_table table', 'id' => $table_id]);
parent::__construct(['class' => 'table table-bordered data_table', 'id' => $table_id]);
$this->table_name = $table_name;
$this->additional_parameters = [];
$this->param_prefix = $table_name.'_';

@ -1,17 +1,71 @@
<!-- tracking course log -->
<script type="text/javascript">
window.onload = function() {
var ctx = document.getElementById("chart-score").getContext('2d');
var myChart = new Chart(ctx, {
var scoreStudent = document.getElementById("chart-score").getContext('2d');
var lastAccess = document.getElementById("chart-access").getContext('2d');
var jsonfile = {{ json_time_student }};
var labels = [];
var times = [];
Object.keys(jsonfile).forEach(function(key) {
//Names
labels.push(jsonfile[key].fullname);
//Time plataform total
times.push(jsonfile[key].lasttime);
});
var myChartAccess = new Chart(lastAccess,{
type: 'line',
data: {
labels: ["0-9", "10-19", "20-29", "30-39", "40-49", "50-59", "60-69", "70-79", "80-89", "90-100"],
labels: labels,
datasets: [{
data: times,
borderColor: "#3ba557",
backgroundColor: "#3ba557",
borderWidth: 1,
fill: false,
label: '{{ "Minutes"|get_lang}}',
}]
},
options: {
legend:{
display: false
},
scales: {
xAxes:[{
position: "bottom",
scaleLabel: {
display: true,
labelString: '{{ "FollowedStudents"|get_lang}}',
},
ticks: {
display: false
}
}],
yAxes: [{
position: "left",
scaleLabel: {
display: true,
labelString: '{{ "TrainingTime"|get_lang}}',
}
}]
}
}
});
var myChartScore = new Chart(scoreStudent, {
type: 'bar',
data: {
labels: ["0-9%", "10-19%", "20-29%", "30-39%", "40-49%", "50-59%", "60-69%", "70-79%", "80-89%", "90-100%"],
datasets: [{
label: 'Número de alumnos',
data: {{ score_distribution }},
backgroundColor: 'rgba(17, 125, 198, 0.8)',
borderColor: 'rgba(4,90,149,1)',
borderWidth: 1
backgroundColor: {{ chart_colors }},
borderColor: {{ chart_colors }},
borderWidth: 1,
fill: false
}]
},
options: {
@ -23,7 +77,12 @@
position: "left",
scaleLabel: {
display: true,
labelString: "Número Alumnos",
labelString: '{{ "NumberOfUsers"|get_lang }}',
},
ticks: {
display: true,
min: 0,
stepSize: 1
}
}],
xAxes:[{
@ -31,6 +90,12 @@
scaleLabel: {
display: true,
labelString: "Rango de porcentaje %",
},
gridLines: {
display: true
},
ticks: {
display: false,
}
}],
}
@ -38,6 +103,7 @@
});
};
</script>
<div class="tracking-course-summary">
<div class="row">
<div class="col-lg-3 col-sm-3">
@ -47,7 +113,7 @@
<i class="fa fa-graduation-cap" aria-hidden="true"></i>
</span>
<div class="tracking-info">
<div class="tracking-text"> Estudiantes inscritos</div>
<div class="tracking-text"> {{ "NumberOfUsers"|get_lang }}</div>
<div class="tracking-number">
{{ number_students }}
</div>
@ -63,7 +129,7 @@
<i class="fa fa-book" aria-hidden="true"></i>
</span>
<div class="tracking-info">
<div class="tracking-text"> Estudiantes que completaron las lecciones</div>
<div class="tracking-text"> {{ "CourseProgress"|get_lang }}</div>
<div class="tracking-number">
{{ students_completed_lp }}/{{ number_students }}
</div>
@ -80,7 +146,7 @@
<i class="fa fa-heartbeat" aria-hidden="true"></i>
</span>
<div class="tracking-info">
<div class="tracking-text"> Media de ejercicios del total de estudiantess</div>
<div class="tracking-text"> {{ "ExerciseAverage"|get_lang }}</div>
<div class="tracking-number">
{{ students_test_score }}%
</div>
@ -97,9 +163,9 @@
<i class="fa fa-id-card-o" aria-hidden="true"></i>
</span>
<div class="tracking-info">
<div class="tracking-text"> Cantidad de certificados entregados</div>
<div class="tracking-text"> {{ "CountCertificates"|get_lang }}</div>
<div class="tracking-number">
1/3
{{ certificate_count }}/{{ number_students }}
</div>
</div>
@ -112,7 +178,7 @@
<div class="panel panel-default">
<div class="panel-body">
<div class="tracking-chart">
<h4>Distribución porcentual de notas</h4>
<h4 class="tracking-box-title">Distribución porcentual de notas</h4>
<canvas id="chart-score"></canvas>
</div>
</div>
@ -121,57 +187,40 @@
<div class="col-md-4">
<div class="panel panel-default tracking-top-student">
<div class="panel-body">
<h4>Alumnos destacados</h4>
<h4 class="tracking-box-title">Alumnos destacados</h4>
<ul class="list-top">
<li>
<div class="avatar">
<span class="round">
<img src="https://wrappixel.com/demos/admin-templates/material-pro/assets/images/users/2.jpg" width="50px">
</span>
</div>
<div class="info">
<h3 class="name">Andrea Costea</h3>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%;">
80%
</div>
</div>
</div>
</li>
<li>
<div class="avatar">
<span class="round">B</span>
</div>
<div class="info">
<h3 class="name">Beatriz Merino</h3>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
60%
</div>
{% for student in top_students %}
{% set counter = counter + 1 %}
{% if counter <= 3 %}
<li>
<div class="avatar">
<span class="round">
<img title="{{ student.fullname }}" alt="{{ student.fullname }}" src="{{ student.avatar.dir }}{{ student.avatar.file }}" width="40px">
</span>
</div>
</div>
</li>
<li>
<div class="avatar">
<span class="round">B</span>
</div>
<div class="info">
<h3 class="name">Garcia Rupli</h3>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="width: 30%;">
30%
<div class="info">
<h3 class="name">{{ student.fullname }}</h3>
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="{{ student.score }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ student.score }}%;">
{{ student.score }}%
</div>
</div>
</div>
</div>
</li>
</li>
{% endif %}
{% endfor %}
</ul>
<span class="tracking-box-legend">Nota: Se obtiene el % del progreso de lección y media del ejercicios</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
.
<h4 class="tracking-box-title">{{ "TotalTimeSpentInTheCourse"|get_lang}}</h4>
<canvas id="chart-access"></canvas>
</div>
</div>
</div>

@ -2,14 +2,15 @@
/* For licensing terms, see /license.txt */
use ChamiloSession as Session;
use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
/**
* @package chamilo.tracking
*/
require_once __DIR__.'/../inc/global.inc.php';
$current_course_tool = TOOL_TRACKING;
$courseInfo = api_get_course_info(api_get_course_id());
$courseId = api_get_course_id();
$courseInfo = api_get_course_info($courseId);
$course_code = $courseCode = $courseInfo['code'];
$from_myspace = false;
$from = isset($_GET['from']) ? $_GET['from'] : null;
@ -68,7 +69,7 @@ if (api_is_drh()) {
// then check if he has also been given access to the corresponding courses
$coursesFollowedList = CourseManager::get_courses_followed_by_drh(api_get_user_id());
$coursesFollowedList = array_keys($coursesFollowedList);
if (!in_array(api_get_course_id(), $coursesFollowedList)) {
if (!in_array($courseId, $coursesFollowedList)) {
api_not_allowed(true);
exit;
}
@ -168,13 +169,13 @@ $tpl = new Template($nameTools);
if (empty($session_id)) {
// Registered students in a course outside session.
$a_students = CourseManager::get_student_list_from_course_code(
api_get_course_id()
$courseId
);
} else {
// Registered students in session.
$a_students = CourseManager::get_student_list_from_course_code(
api_get_course_id(),
$courseId,
true,
$sessionId
);
@ -347,7 +348,21 @@ $numberStudentsCompletedLP = 0;
$averageStudentsTestScore = 0;
$scoresDistribution = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
$userScoreList = [];
$listStudentIds = [];
$timeStudent = [];
$certificateCount = 0;
$category = Category:: load(
null,
null,
$course_code,
null,
null,
$session_id
);
foreach ($usersTracking as $userTracking) {
$userId = UserManager::get_user_id_from_username($userTracking[3]);
if ($userTracking[5] === '100%') {
$numberStudentsCompletedLP++;
}
@ -357,25 +372,56 @@ foreach ($usersTracking as $userTracking) {
if ($averageStudentTestScore === '100') {
$reducedAverage = 9;
} else {
$reducedAverage = floor($averageStudentTestScore/10);
$reducedAverage = floor($averageStudentTestScore / 10);
}
$scoresDistribution[$reducedAverage]++;
$scoreStudent = substr($userTracking[5], 0, -1) + substr($userTracking[7], 0, -1);
list($hours, $minutes, $seconds) = preg_split('/:/', $userTracking[4]);
$myTime = round((3600 * $hours + 60 * $minutes + $seconds) / 60);
$certificate = false;
if (isset($category[0]) && $category[0]->is_certificate_available($userId)) {
$certificate = true;
$certificateCount++;
}
$listStudent = [
'id' => $userId,
'fullname' => $userTracking[2] . ', ' . $userTracking[1],
'score' => floor($scoreStudent / 2),
'lasttime' => $myTime,
'avatar' => UserManager::get_user_picture_path_by_id($userId),
'certicate' => $certificate
];
$listStudentIds[] = $userId;
$userScoreList[] = $listStudent;
}
function sort_by_orden($a, $b)
{
return $a['score'] <= $b['score'];
}
uasort($userScoreList, 'sort_by_orden');
$averageStudentsTestScore = round(($averageStudentsTestScore / $nbStudents));
$colors = ChamiloApi::getColorPalette(true, true, 10);
$tpl->assign('chart_colors', json_encode($colors));
$tpl->assign('certificate_count', $certificateCount);
$tpl->assign('score_distribution', json_encode($scoresDistribution));
$tpl->assign('json_time_student', json_encode($userScoreList));
$tpl->assign('students_test_score', $averageStudentsTestScore);
$tpl->assign('students_completed_lp', $numberStudentsCompletedLP);
$tpl->assign('number_students', $nbStudents);
$tpl->assign('top_students', $userScoreList);
$tpl->assign('score_distribution',json_encode($scoresDistribution));
$tpl->assign('students_test_score',$averageStudentsTestScore);
$tpl->assign('students_completed_lp',$numberStudentsCompletedLP);
$tpl->assign('number_students',$nbStudents);
$trackingSummaryLayout = $tpl->get_template("tracking/tracking_course_log.tpl");
$content = $tpl->fetch($trackingSummaryLayout);
echo $content;
$html .= Display::page_subheader2(get_lang('StudentList'));
// PERSON_NAME_DATA_EXPORT is buggy

Loading…
Cancel
Save