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

623 lines
20 KiB

<?php
// name of the language file that needs to be included
//$language_file = array('registration', 'tracking');
$language_file = array('registration','tracking','exercice', 'admin');
$cidReset = true;
require_once '../inc/global.inc.php';
require_once api_get_path(LIBRARY_PATH).'tracking.lib.php';
require_once api_get_path(LIBRARY_PATH).'course.lib.php';
require_once api_get_path(LIBRARY_PATH).'usermanager.lib.php';
require_once api_get_path(SYS_CODE_PATH).'lp/learnpath.class.php';
require_once api_get_path(LIBRARY_PATH).'exercise.lib.php';
require_once api_get_path(SYS_CODE_PATH).'mySpace/myspace.lib.php';
$nameTools=get_lang('MyProgress');
$this_section = 'session_my_progress_ind';
api_block_anonymous_users();
Display::display_header($nameTools);
// Database table definitions
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_stats_lastaccess = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
$tbl_stats_exercices = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
$tbl_personal_agenda = Database::get_main_table(TABLE_PERSONAL_AGENDA);
$tbl_stats_exam = Database::get_main_table('track_exam');
$tbl_course_lp_view = Database::get_course_table('lp_view');
$tbl_course_lp_view_item = Database::get_course_table('lp_item_view');
$tbl_course_lp = Database::get_course_table('lp');
$tbl_course_lp_item = Database::get_course_table('lp_item');
$tbl_course_quiz = Database::get_course_table('quiz');
$tbl_stats_access = Database :: get_main_table(TABLE_STATISTIC_TRACK_E_ACCESS);
$result = api_sql_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", __file__, __line__);
$Sessions = Database::store_result($result);
$Courses = array();
foreach ($Sessions as $enreg)
{
$id_session_temp = $enreg['id'];
$sql8 = "SELECT *
FROM course
WHERE code = '$courses_code'
";
$result8 = api_sql_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 = api_sql_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 = api_sql_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 = api_sql_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
?><p></p>
<?php
$Req1 = "SELECT *
FROM c_lp_view
WHERE user_id = '$user_c_id'
AND c_id = '$c_id'
";
$res = api_sql_query($Req1);// or die(mysql_error());
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 = api_sql_query($Req2);// or die(mysql_error());
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 = api_sql_query($Req3);// or die(mysql_error());
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 = api_sql_query($Req4);// or die(mysql_error());
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');
//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 = api_sql_query($sqljtot);
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
unset($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 = api_sql_query($sql4,__FILE__,__LINE__);
$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);
?>
<html>
<table class="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 = api_sql_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></p>
</tr></th>
<tr><th align="left">
<?php echo get_lang('Cumulatif'); ?> <b><font color=#CC0000> <?php echo $Total ?></font></b></p>
</tr></th>
<tr><th align="left">
<?php echo get_lang('jours_selon_horaire'); ?>: <b><font color=#CC0000> <?php echo $jour_agenda?> <?php echo $Days ?></font></b></p>
</tr></th>
<tr><th align="left">
<?php echo get_lang('diff2'); ?>: <b><font color=#CC0000> <?php echo $diff?> <?php echo $Days,$sing ?></font></b></p>
</tr>
</table>
<hr>
<center><table class='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
$tbl_stats_exercices = Database :: get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
$sqlinter = "SELECT *
FROM $tbl_stats_exercices
WHERE exe_user_id = ".$_user['user_id']."
And level != 0
Order by LEVEL ASC
";
$resultinter = api_sql_query($sqlinter);
while($a_inter = Database::fetch_array($resultinter))
{
$level =$a_inter['level'];
$mod_no =$a_inter['mod_no'];
$inter_coment = stripslashes ($a_inter['inter_coment']);
$inter_date = substr($a_inter['exe_date'], 0, 11) ;
echo"
<tr><center>
<td> ".$a_inter['level']."
</td>
<td><center>
$inter_date
</td>
<td>$inter_coment
</td>
";
$exe_id = $a_inter['exe_id'];
$student_id = $_GET['student'] ;
}
if ($level == 3) {
echo ' <span style="color: red; font-weight: bold;"><img src="../img/anim/pointeranim.gif"align="middle" > ', $limit, '</span>';
}
?>
<p>
</table><br>
<?php
//début de fin des cours prevu
$user_info = api_get_user_info($student_id);
$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 = api_sql_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="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 = api_sql_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 = api_sql_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];
} else {
}
// $first_connection_date_to_module = mysql_result($rs2, 0,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 = api_sql_query($sql);// or die(mysql_error());
$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 = api_sql_query($sql) or die(mysql_error());
$resulta = Database::fetch_array($res);
$nombre_minutes=$resulta['num_minute'];
//on calcule le nombre de jour par module
$nombre_jours_module = $nombre_heure * '60'/ $nombre_minutes;
//on arrondi
$nombre_jours_module = number_format($nombre_jours_module, 0 );
//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 = api_sql_query($sql);// or die(mysql_error());
//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, array($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, array($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/>
<center><table class='data_table'>
<tr>
<th colspan="6">
<?php echo get_lang('result_exam');
echo $a_infosUser['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 = api_sql_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();
?>