diff --git a/course_competency.php b/course_competency.php index 59f3f79303553f670412e3962399c32063cfcdad..4f527d996c53e30b7eeb95b9c021a87a9e763226 100644 --- a/course_competency.php +++ b/course_competency.php @@ -57,7 +57,7 @@ $review_asked = count($reviews_data) > 0 ? true : false; /* POST EVALUATION */ if ( isset($_POST['grade']) ) { - $note = "Évaluation donnée pour le cours {$COURSE->fullname} par {$USER->firstname} {$USER->lastname}. " . $_POST['note']; + $note = $_POST['note']; \core_competency\api::grade_competency_in_course($courseid, $studentid, $competencyid, $_POST['grade'], $note); if ( $review_asked ) { \core_competency\api::user_competency_start_review($studentid, $competencyid); @@ -261,7 +261,7 @@ echo "</div>"; /* END review and grade ASK and ACTION - col */ echo "</div>"; /* END review and grade ASK and ACTION - alert */ echo "</div>"; /* END evaluation info and actions row */ -/* GRADES HISTORY CHART */ +/* GRADES AND EVIDENCES HISTORY CHART AND LIST */ // quelle différence // read_user_evidence($id) @@ -283,30 +283,176 @@ echo "</div>"; /* END evaluation info and actions row */ // OKOK + + +/* Utilisation des renderer du /admin/tool/lp/class/output pour obtenir toutes les données d'historique construites et organisées */ +/* Dabord dans le cours, puis dans l'absolu pour les différencier / filtrer */ + +$tool_lp_renderer = $PAGE->get_renderer('tool_lp'); + +$user_cpt_course_data = new \tool_lp\output\user_competency_summary_in_course($studentid, $competencyid, $courseid); +$user_cpt_course_data = $user_cpt_course_data->export_for_template($tool_lp_renderer); +$course_evidences = $user_cpt_course_data->usercompetencysummary->evidence; +$course_evidences_ids = array(); +foreach ($course_evidences as $course_evidence) { + $course_evidences_ids[] = $course_evidence->id; +} + +$user_competency = \core_competency\api::get_user_competency($studentid, $competencyid); +$user_cpt_all_data = new \tool_lp\output\user_competency_summary($user_competency); +$user_cpt_all_data = $user_cpt_all_data->export_for_template($tool_lp_renderer); +$all_evidences = $user_cpt_all_data->evidence; + +echo "<div class='row'>"; +echo "<div class='col-12 col-lg-6'>"; +echo "<h2 class='h3'>Historique</h2><ul class='nav nav-tabs' id='hist-tabs'> +<li class='nav-item'> +<a class='nav-link active' href='#' id='all_history_tab'>Complet</a> +</li> +<li class='nav-item'> +<a class='nav-link' href='#' id='course_history_tab'>Dans ce cours</a> +</li> +<li class='nav-item'> +<a class='nav-link' href='#' id='other_history_tab'>Hors de ce cours</a> +</li> +</ul>"; +echo "<ul class='list-group' style='height: 50vh; min-height: 300px; overflow: scroll;'>"; +/* proficient or not depending of rating in scale (set in framework by creator) */ +foreach ($all_evidences as $key => $ev) { + /* mark difference between this course evidences in html for JS filter with tabs */ + if ( in_array($ev->id, $course_evidences_ids) ) { + $is_course_evidence = " data-evidenceorigin='course'"; + } else { + $is_course_evidence = " data-evidenceorigin='other'"; + } + if ( $ev->action === "0" ) { + $grade_make_proficient = ' list-group-item-light'; + } else { + $scale_rules = json_decode($user_cpt_all_data->competency->scaleconfiguration); + foreach ($scale_rules as $scale_rule) { + if ( isset($scale_rule->proficient) && $scale_rule->id == $ev->grade && $scale_rule->proficient == 1 ) { + $grade_make_proficient = ' list-group-item-success'; + } else { + $grade_make_proficient = ''; + } + } + } + $date = date("d/m/y – H:i", $ev->timemodified); + echo "<li class='list-group-item{$grade_make_proficient}'{$is_course_evidence}> + <div class='d-flex w-100 justify-content-between'>"; + if ( isset($ev->gradename) ) { + echo "<h5 class='mb-1' style='font-weight: 600;'>$ev->gradename</h5>"; + } + echo "<small>{$date}</small> + </div> + <p class='mb-1 font-weight-light'><em>{$ev->description}</em></p>"; + if ( isset($ev->note) && $ev->note != "" ) { + echo "<p class='mb-1' style='font-weight: 500;'>{$ev->note}</p>"; + } + if ( isset($ev->actionuser) ) { + echo "<small>Évalué par : <a target='_blank' href='{$ev->actionuser->profileurl}'>{$ev->actionuser->fullname}</a></small>"; + } + echo "</li>"; +} +echo "</ul>"; +echo "</div>"; +echo "<script> +(function() { + function active_tabs(active_tab) { + var tabs = document.querySelectorAll('#hist-tabs .nav-link'); + for ( var i=0; i < tabs.length; i++ ) { + tabs[i].setAttribute('class', 'nav-link'); + } + active_tab.setAttribute('class', 'nav-link active'); + } + function filter(type) { + var list_items = document.querySelectorAll('[data-evidenceorigin]'); + for ( var j = 0; j < list_items.length; j++ ) { + if ( list_items[j].dataset.evidenceorigin != type ) { + list_items[j].style.display = 'none'; + } else { + list_items[j].style.display = ''; + } + } + } + document.getElementById('all_history_tab').addEventListener('click', function (e) { e.preventDefault(); active_tabs(e.target); filter('course'); }); + document.getElementById('course_history_tab').addEventListener('click', function (e) { e.preventDefault(); active_tabs(e.target); filter('course'); }); + document.getElementById('other_history_tab').addEventListener('click', function (e) { e.preventDefault(); active_tabs(e.target); filter('other'); }); +})(); +</script>;"; +echo "</div>"; + +echo "<pre>"; +var_dump($course_evidences_ids); +print_r($all_evidences); +echo "</pre>"; + +/* + +TODO : + +Remonter ces données en haut et commenter les données préalablement récupérées d'une autre manière devenues superflues avec celles-ci. Ca réduira l'impact du chargement de la page. Et ça sera plus propre et plus concis. Quand-même garder les éléments en commentaire au cas où les exporteurs sautent dans les prochaines versions de MOODLE. + +*/ + + +// echo $output_lp->render($cpt_base_page); + + + + + + +/* Data */ $course_evidencies = \core_competency\api::list_evidence_in_course($studentid, $courseid, $competencyid, $sort = 'timecreated', $order = 'DESC', $skip = 0, $limit = 0); $all_evidencies = \core_competency\api::list_evidence($studentid, $competencyid, $planid = 0, $sort = 'timecreated', $order = 'DESC', $skip = 0, $limit = 0); +$evidences = array(); +foreach ($course_evidencies as $course_ev) { + $ev = new stdClass(); + // echo "<pre>"; + // var_dump($course_ev); + // echo "</pre>"; + $ev->id = $course_ev->get('id'); + $ev->usercompetencyid = $course_ev->get('usercompetencyid'); + $ev->contextid = $course_ev->get('contextid'); + $ev->actionuserid = $course_ev->get('actionuserid'); + $ev->descidentifier = $course_ev->get('descidentifier'); /* nature de l'événement */ + // $course_ev->get('actionuserid') + $ev->out = $course_ev->get_description()->out(); + $evidences[] = $ev; +} + +foreach ($evidences as $ev) { + // echo "<p>{$ev->out}</p>"; +} + +// $user_competency_summary_in_course = new \tool_lp\output\user_competency_summary_in_course($studentid, $competencyid, $courseid); +// $dataSumCourse = $user_competency_summary_in_course->export_for_template(new renderer_base(new moodle_page(), 'autre')); +// var_dump($dataSumCourse); + + $labels = array(); $series_data = array(); $series_data_all = array(); foreach ($all_evidencies as $evidence) { - echo "<ul>"; + // echo "<ul>"; - echo "<li>{$evidence->get('id')}</li>"; + // echo "<li>{$evidence->get('id')}</li>"; - echo "<li>Action : {$evidence->get('action')} (0 : log, 2 ou 3 : rating)</li>"; + // echo "<li>Action : {$evidence->get('action')} (0 : log, 2 ou 3 : rating)</li>"; $grade = $evidence->get('grade'); if ( $grade != NULL ) { /* liéer à descidentifier == evidence_manualoverrideincourse ??? */ $grade_label = $cpt_scale[$grade - 1]; - echo "<li>{$grade_label}</li>"; + // echo "<li>{$grade_label}</li>"; if ( $evidence->get('contextid') == $context->__get('id') ) { $series_data[] = $grade; - $series_data_all[] = 0; + $series_data_all[] = end($series_data_all); } else { - $series_data[] = 0; + $series_data[] = end($series_data); $series_data_all[] = $grade; } $labels[] = userdate($evidence->get('timecreated'), "%d/%m/%y"); @@ -319,24 +465,24 @@ foreach ($all_evidencies as $evidence) { $evidence_type = $evidence->get('descidentifier'); if ( $evidence_type == 'evidence_manualoverrideincourse' ) { $emitter = user_get_users_by_id([$evidence->get('actionuserid')])[$evidence->get('actionuserid')]; - echo "<li>{$emitter->firstname} {$emitter->lastname}</li>"; + // echo "<li>{$emitter->firstname} {$emitter->lastname}</li>"; } elseif ( $evidence_type == 'evidence_coursemodulecompleted' ) { - echo "<li>{$evidence->get('desca')}</li>"; + // echo "<li>{$evidence->get('desca')}</li>"; } - var_dump($evidence->get_description()->out()); + // var_dump($evidence->get_description()->out()); - echo "</ul>"; + // echo "</ul>"; } -echo "<pre>"; +// echo "<pre>"; // var_dump($context->__get('id')); // var_dump($all_evidencies); // var_dump($series_data); // var_dump($series_data_all); // var_dump($labels); -echo "</pre>"; +// echo "</pre>"; // OK OK END @@ -345,15 +491,24 @@ echo "</pre>"; echo "<div class='alert alert-secondary'>"; _html('h2', "Historique d'évaluation", "h3"); -$chart = new core\chart_bar(); -// $chart->get_yaxis(0, true)->set_label("I'm the label for Y"); -$chart->get_yaxis(0, true)->set_labels(["Non évaluant", "Non compétent", "Compétent"]); -$series = new core\chart_series('Donnée dans ce cours', array_reverse($series_data)); -$series_all = new core\chart_series("Donnée dans d'autres cours", array_reverse($series_data_all)); -$chart->add_series($series); -$chart->add_series($series_all); -$chart->set_labels(array_reverse($labels)); -echo $OUTPUT->render($chart); +// $chart = new core\chart_line(); +// $chart->get_yaxis(0, true)->set_labels(["Non évaluant", "Non compétent", "Compétent"]); +// $series = new core\chart_series('Donnée dans ce cours', array_reverse($series_data)); +// $series_all = new core\chart_series("Donnée dans d'autres cours", array_reverse($series_data_all)); +// $chart->add_series($series); +// $chart->add_series($series_all); +// $chart->set_labels(array_reverse($labels)); +// echo $OUTPUT->render($chart); +// echo "<hr>"; + +// $chart = new core\chart_bar(); +// $chart->get_yaxis(0, true)->set_labels(["Non évaluant", "Non compétent", "Compétent"]); +// $series = new core\chart_series('Donnée dans ce cours', array_reverse($series_data)); +// $series_all = new core\chart_series("Donnée dans d'autres cours", array_reverse($series_data_all)); +// $chart->add_series($series); +// $chart->add_series($series_all); +// $chart->set_labels(array_reverse($labels)); +// echo $OUTPUT->render($chart); echo "</div>"; /* LINKED MODULES */