Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/extra/my_progress_ind.php

514 lines
18 KiB

<?php
/* For licensing terms, see /license.txt */
require_once '../inc/global.inc.php';
$allow = api_get_configuration_value('extra');
if (empty($allow)) {
exit;
}
api_block_anonymous_users();
$nameTools = get_lang('MyProgress');
$this_section = 'session_my_progress_ind';
$_user = api_get_user_info();
$tbl_stats_exercices = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
$tbl_stats_access = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ACCESS);
Display::display_header($nameTools);
$result = Database::query(
"SELECT DISTINCT session.id as id, name, access_start_date date_start, access_end_date date_end
FROM session_rel_course_rel_user,session
WHERE session_id=session.id AND user_id=".$_user['user_id']."
ORDER BY date_start, date_end, name");
$Sessions = Database::store_result($result);
$Courses = [];
foreach ($Sessions as $enreg) {
$id_session_temp = $enreg['id'];
$sql8 = "SELECT *
FROM course
WHERE code = '$courses_code'
";
$result8 = Database::query($sql8);
$course_code_id = Database::fetch_array($result8);
$c_id = $course_code_id['id'];
$sql = "SELECT DISTINCT c_id,title, CONCAT(lastname, ' ',firstname) coach, username, date_start, date_end, db_name
FROM $tbl_course , $tbl_session_course
LEFT JOIN $tbl_user
ON $tbl_session_course.id_coach = $tbl_user.user_id
INNER JOIN $tbl_session_course_user
ON $tbl_session_course_user.id_session = $tbl_session_course.id_session
AND $tbl_session_course_user.id_user = '".$_user['user_id']."'
INNER JOIN $tbl_session ON $tbl_session.id = $tbl_session_course.id_session
WHERE $tbl_session_course.c_id=$c_id
AND $tbl_session_course.id_session='$id_session_temp'
ORDER BY title";
$result = Database::query($sql);
while ($a_session_courses = Database::fetch_array($result)) {
$a_session_courses['id_session'] = $id_session_temp;
$Courses[$a_session_courses['code']] = $a_session_courses;
}
}
// affichage des jours complétés dans les parcours l'élève
//on recherche les cours où sont inscrit les user
$user_c_id = $_user['user_id'];
$sql2 = "SELECT c_id, user_id
FROM course_rel_user
WHERE user_id = '$user_c_id'
";
$result2 = Database::query($sql2);
$Total = 0;
while ($a_courses = Database::fetch_array($result2)) {
$courses_code = $a_courses['c_id'];
//on sort le c_id avec le code du cours
//$sql8 = "SELECT *
// FROM course
// WHERE code = '$courses_code'
// ";
// $result8 = Database::query($sql8);
// $course_code_id = Database::fetch_array($result8) ;
$c_id = $courses_code;
//pours chaque cours dans lequel il est inscrit, on cherche les jours complétés
$Req1 = "SELECT *
FROM c_lp_view
WHERE user_id = '$user_c_id' AND c_id = '$c_id'
";
$res = Database::query($Req1);
while ($result = Database::fetch_array($res)) {
$lp_id = $result['lp_id'];
$lp_id_view = $result['id'];
$c_id_view = $result['c_id'];
$Req2 = "SELECT id, lp_id ,title ,item_type
FROM c_lp_item
WHERE lp_id = '$lp_id'
AND title LIKE '(+)%'
AND c_id = '$c_id_view'
AND item_type = 'document'
";
$res2 = Database::query($Req2);
while ($resulta = Database::fetch_array($res2)) {
$lp_item_id = $resulta['id'];
$Req3 = " SELECT Max(id)
FROM c_lp_item_view
WHERE
lp_item_id = '$lp_item_id' AND
lp_view_id = '$lp_id_view' AND
c_id = '$c_id_view' AND
status = 'completed'
";
$res3 = Database::query($Req3);
while ($resul = Database::fetch_array($res3)) {
$max = $resul['0'];
$Req4 = "SELECT COUNT( id )
FROM c_lp_item_view
WHERE
id = '$max' AND
c_id = '$c_id_view'
";
$res4 = Database::query($Req4);
while ($resultat = Database::fetch_array($res4)) {
if ($resultat[0] == null) {
$resultat[0] = 0;
}
$Total = $Total + $resultat[0];
}
}
}
}
}
api_display_tool_title($nameTools);
$now = date('Y-m-d');
$tbl_personal_agenda = Database::get_main_table(TABLE_PERSONAL_AGENDA);
//on compte le nombre de m% dans l'agenda pour chaque module
$sqljtot = "SELECT COUNT( * ) AS TOT
FROM $tbl_personal_agenda
WHERE user = '".$_user['user_id']."'
And title like 'm%'
";
$resultjt = Database::query($sqljtot);
$jour_realise = 0;
while ($jtot = Database::fetch_array($resultjt)) {
$jour_realise_tot = ($jour_realise + $jtot['TOT']) / 2;
}
//fin des jour de l'agenda
//on trouve le nombre dans l'agenda selon la date d'aujourdhui
//si rien n'est inscrit cette journée dans l'agenda, recule de -1
$jour_agenda = '';
$tour = -1;
while ($jour_agenda == '') {
$tour++;
$date = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $tour, date("Y")));
$sql4 = "SELECT title FROM $tbl_personal_agenda
WHERE user = '".$_user['user_id']."' AND
text='Pour le calendrier, ne pas effacer' AND
date like '".$date." %:%' ";
$result4 = Database::query($sql4);
$res4 = Database::fetch_array($result4);
$jour_agenda = $res4['title'];
if ($tour > 300) {
break;
}
}
$diff = $jour_agenda - $Total;
if ($diff > 0) {
$sing = get_lang('retard');
} else {
$sing = get_lang('avance');
}
$diff = abs($diff);
?>
<table class="table table-hover table-striped data_table">
<th rowspan="5">
<?php
//on récupere les points de controle de l'élève
$pt[] = '0';
$pt[] = '0';
$sqlcontrole = "SELECT diff
FROM $tbl_stats_exercices
WHERE exe_user_id = ".$_user['user_id']."
AND diff != ''
ORDER BY exe_date ASC
";
$result = Database::query($sqlcontrole);
while ($ptctl = Database::fetch_array($result)) {
$pt[] = $ptctl['diff'];
}
//graphique de suivi
/*include "../inc/teechartphp/sources/TChart.php";
$chart = new TChart(500, 300);
$chart->getAspect()->setView3D(false);
$chart->getHeader()->setText("Graphique de suivi");
$chart->getAxes()->getLeft()->setMinimumOffset(10);
$chart->getAxes()->getLeft()->setMaximumOffset(10);
$chart->getAxes()->getBottom()->setMinimumOffset(10);
$chart->getAxes()->getBottom()->setMaximumOffset(10);
$line1 = new Line($chart->getChart());
$data = $pt;
$line1->addArray($data);
foreach ($chart->getSeries() as $serie) {
$pointer = $serie->getPointer();
$pointer->setVisible(true);
$pointer->getPen()->setVisible(false);
$pointer->setHorizSize(2);
$pointer->setVertSize(2);
$marks = $serie->getMarks();
$marks->setVisible(true);
$marks->setArrowLength(5);
$marks->getArrow()->setVisible(false);
$marks->setTransparent(true);
}
$x = $_user['user_id'];
$line1->getPointer()->setStyle(PointerStyle::$CIRCLE);
$chart->getLegend()->setVisible(false);
$chart->render("../garbage/$x-image.png");
$rand = rand();
print '<img src="../garbage/'.$x.'-image.png?rand='.$rand.'">';
*/
?>
<tr>
<th align="left" width="412">
<?php echo get_lang('Cumulatif_agenda'); ?>:
<b><font color=#CC0000> <?php echo $jour_realise_tot; ?></font></b>
</th>
</tr>
<tr>
<th align="left">
<?php echo get_lang('Cumulatif'); ?> <b><font color=#CC0000> <?php echo $Total; ?></font></b>
</th>
</tr>
<tr>
<th align="left">
<?php echo get_lang('jours_selon_horaire'); ?>:
<b><font color=#CC0000> <?php echo $jour_agenda; ?><?php echo $Days; ?></font></b>
</th>
</tr>
<tr>
<th align="left">
<?php echo get_lang('diff2'); ?>:
<b><font color=#CC0000> <?php echo $diff; ?><?php echo $Days, $sing; ?></font></b>
</th>
</tr>
</table>
<hr>
<table class='table table-hover table-striped data_table'>
<tr>
<th><?php echo get_lang('level'); ?> </th>
<th>
<?php echo get_lang('lang_date'); ?>
</th>
<th>
<?php echo get_lang('interventions_commentaires'); ?>
</th>
</tr>
<?php
$sqlinter = "SELECT *
FROM $tbl_stats_exercices
WHERE exe_user_id = ".$_user['user_id']."
And level != 0
Order by LEVEL ASC";
$resultinter = Database::query($sqlinter);
$level = '';
while ($a_inter = Database::fetch_array($resultinter)) {
$level = $a_inter['level'];
$mod_no = $a_inter['mod_no'];
$inter_coment = Security::remove_XSS($a_inter['inter_coment']);
$inter_date = substr($a_inter['exe_date'], 0, 11);
echo "
<tr>
<td> ".$a_inter['level']."</td>
<td> $inter_date </td>
<td>$inter_coment</td>";
$exe_id = $a_inter['exe_id'];
}
if ($level == 3) {
echo '<span style="color: red; font-weight: bold;"><img src="../img/anim/pointeranim.gif"align="middle" > ';
echo $limit;
echo '</span>';
}
?>
<p>
</table><br>
<?php
//début de fin des cours prevu
$user_info = api_get_user_info();
$user_id = api_get_user_id();
//On cherche le calendrier pour ce user et le c_id de ce calendrier
$sql = "SELECT *
FROM user
WHERE user_id = '$user_id'
";
$result = Database::query($sql);
$horaire_id = Database::fetch_array($result);
$nom_hor = $horaire_id['official_code'];
$c_id_horaire = strstr($nom_hor, '.');
$c_id_horaire = str_replace(".", "", "$c_id_horaire");
// Courses
echo '<h3>'.get_lang('Course').'</h3>';
echo '<table class="table table-hover table-striped data_table">';
echo '<tr>
<th>'.get_lang('Course').'</th>
<th>'.get_lang('Time').'</th>
<th>'.get_lang('FirstConnexion').'</th>
<th>'.get_lang('Progress').'</th>
<th>'.get_lang('fin_mod_prevue').'</th>
</tr>';
//on recherche les cours où sont inscrit les user
$user_c_id = $_user['user_id'];
$sql2 = "SELECT c_id, user_id
FROM course_rel_user
WHERE user_id = '$user_id'";
$result2 = Database::query($sql2);
while ($a_courses = Database::fetch_array($result2)) {
$courses_code = $a_courses['c_id'];
//on sort le c_id avec le code du cours
$sql8 = "SELECT title, code
FROM course
WHERE id = '$courses_code'";
$result8 = Database::query($sql8);
$course_code_id = Database::fetch_array($result8);
$c_id = $courses_code;
$c_title = $course_code_id['title'];
// Francois Belisle Kezber
// The Tracking Class still uses the course code rather then the course id.
$tracking_c_code = $course_code_id['code'];
// time spent on the course
$time_spent_on_course = api_time_to_hms(Tracking::get_time_spent_on_the_course($user_id, $c_id, $session_id));
// firts connection date
$sql2 = "SELECT STR_TO_DATE(access_date,'%Y-%m-%d')
FROM $tbl_stats_access
WHERE
access_user_id = '$user_id' AND
c_id = '$c_id'
ORDER BY access_id ASC
LIMIT 0,1";
//Francois Belisle Kezber
// mysql fonctions rather then Database::
// conversion to Database::
$rs2 = Database::query($sql2);
$num_rows = Database::num_rows($rs2);
if ($num_rows > 0) {
$rw2 = Database::fetch_array($rs2);
$first_connection_date_to_module = $rw2[0];
}
//pour trouver la date de fin prévue du module
$end_date_module = get_lang('hors_cal');
//on trouve le nombre de jour pour ce module
$sql = "SELECT * FROM c_cal_set_module
where c_id = '$c_id'";
$res = Database::query($sql);
$resulta = Database::fetch_array($res);
$nombre_heure = $resulta['minutes'];
// on trouve le nombre de minute par jour
$sql = "SELECT * FROM c_cal_horaire
where c_id = '$c_id_horaire'
AND name = '$nom_hor'
";
$res = Database::query($sql);
$resulta = Database::fetch_array($res);
$nombre_minutes = (int) $resulta['num_minute'];
//on calcule le nombre de jour par module
$nombre_jours_module = 0;
if (!empty($nombre_minutes)) {
$nombre_jours_module = $nombre_heure * '60' / $nombre_minutes;
}
//on arrondi
$nombre_jours_module = (int) $nombre_jours_module;
//on trouve la date de fin de chaque module AND date = date_format('$first_connection_date_to_module','%Y-%m-%d')
$sql = "SELECT * FROM c_cal_dates
WHERE
horaire_name = '$nom_hor' AND
c_id = '$c_id_horaire' AND
STR_TO_DATE(date,'%Y-%m-%d') >= STR_TO_DATE('$first_connection_date_to_module','%Y-%m-%d')
ORDER BY STR_TO_DATE(date, '%Y-%m-%d') asc
LIMIT $nombre_jours_module, 18446744073709551615
";
$res = Database::query($sql);
//Database::data_seek($res,$nombre_jours_module);
$row = Database::fetch_row($res);
$end_date_module = $row[1];
//fin de trouver la date de fin prévue du module
//progression en %
$t_lp = Database::get_course_table(TABLE_LP_MAIN);
$sql_lp = " SELECT lp.name, lp.id FROM $t_lp lp WHERE c_id = '$c_id' ORDER BY lp.display_order";
$rs_lp = Database::query($sql_lp);
$i = 0;
while ($learnpath = Database::fetch_array($rs_lp)) {
$lp_id = intval($learnpath['id']);
$lp_name = $learnpath['name'];
$any_result = false;
// Get progress in lp
// Francois Belisle Kezber
// Course Code passed rather then course_id
$progress = Tracking::get_avg_student_progress(
$user_c_id, /*$c_id*/
$tracking_c_code,
[$lp_id],
$session_id
);
if ($progress === null) {
$progress = '0%';
} else {
$any_result = true;
}
// Get time in lp
// Francois Belisle Kezber
// Course Code passed rather then course_id
$total_time = Tracking::get_time_spent_in_lp(
$user_c_id, /*$c_id*/
$tracking_c_code,
[$lp_id],
$session_id
);
if (!empty($total_time)) {
$any_result = true;
}
if ($i % 2 == 0) {
$css_class = "row_even";
} else {
$css_class = "row_odd";
}
$i++;
if (is_numeric($progress)) {
$progress = $progress.'%';
} else {
$progress = '-';
}
$data_learnpath[/*$i*/
$lp_id][] = $progress.'%';
}
$warming = '';
$today = date('Y-m-d');
if (isset($end_date_module) && $end_date_module <= $today and $progress != '100%') {
$warming = '<b><font color=#CC0000> '.get_lang('limite_atteinte').'</font></b>';
}
$end_date_module = $end_date_module.$warming;
echo '<tr>
<td >'.$c_title.'</td>
<td >'.$time_spent_on_course.'</td>
<td >'.$first_connection_date_to_module.'</td>
<td >'.$progress.'</td>
<td >'.$end_date_module.'</td>';
echo '</tr>';
}
echo '</table>';
?> </table>
<br/><br/>
<table class='table table-hover table-striped data_table'>
<tr>
<th colspan="6">
<?php
echo get_lang('result_exam');
//echo $_user['name'];
?>
</th>
<tr>
<th><?php echo get_lang('module'); ?></th>
<th><?php echo get_lang('result_exam'); ?></th>
<th><?php echo get_lang('result_rep_1'); ?></th>
<th><?php echo get_lang('result_rep_2'); ?></th>
<th><?php echo get_lang('comment'); ?></th>
</tr>
<?php
$sqlexam = "SELECT *
FROM $tbl_stats_exercices
WHERE exe_user_id = '".$_user['user_id']."'
AND c_id = '0' AND mod_no != '0'
ORDER BY mod_no ASC";
$resultexam = Database::query($sqlexam);
while ($a_exam = Database::fetch_array($resultexam)) {
$ex_id = $a_exam['ex_id'];
$mod_no = $a_exam['mod_no'];
$score_ex = $a_exam['score_ex'];
$score_rep1 = $a_exam['score_rep1'];
$score_rep2 = $a_exam['score_rep2'];
$coment = stripslashes($a_exam['coment']);
echo "
<tr>
<td><center> ".$a_exam['mod_no']."
</td>
<td><center>
".$a_exam['score_ex']."
</td>
<td><center>
".$a_exam['score_rep1']."
</td><center>
<td><center>
".$a_exam['score_rep2']."
</td>
<td>$coment
";
$exe_idd = $a_exam['exe_id']; ?>
</tr>
<?php
}
?>
</table>
<?php
Display::display_footer();