From 8d46e50aa6b17bbb098ce92af3c421ffea0cbd74 Mon Sep 17 00:00:00 2001
From: Myriam Delaruelle <myriam.delaruelle@univ-lorraine.fr>
Date: Mon, 16 May 2022 15:01:10 +0200
Subject: [PATCH] added linked activities to evaluation modal
---
competency_iena_competencies_2.php | 231 ++++++++++++----------
js/dropdown.js | 20 +-
renderer.php | 4 +
styles.css | 10 +-
templates/dashboard_competencies.mustache | 11 +-
templates/dashboard_students.mustache | 10 +-
templates/linked_activities.mustache | 6 +
7 files changed, 184 insertions(+), 108 deletions(-)
create mode 100644 templates/linked_activities.mustache
diff --git a/competency_iena_competencies_2.php b/competency_iena_competencies_2.php
index 1695256..0462696 100644
--- a/competency_iena_competencies_2.php
+++ b/competency_iena_competencies_2.php
@@ -15,58 +15,87 @@ $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
require_login($course, false, NULL);
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
+
$is_student = false;
if (!has_capability('moodle/course:update', $context = context_course::instance($course->id), $USER->id)) {
- $is_student = true;
- if ( $studentid != $USER->id ) {
- //Si on est un étudiant on ne peux consulter que son propre dashboard ?
- $link = $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competencies_2.php?courseid=' . $courseid . '&studentid=' . $USER->id;
- header("Location: {$link}");
- exit;
- }
+ $is_student = true;
+ if ( $studentid != $USER->id ) {
+ //Si on est un étudiant on ne peux consulter que son propre dashboard ?
+ $link = $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competencies_2.php?courseid=' . $courseid . '&studentid=' . $USER->id;
+ header("Location: {$link}");
+ exit;
+ }
}
-
+if(isset($_GET["action"]) && $_GET['action']=="get_links"){
+ $competencyid=$_GET["competencyid"];
+ $courseid=$_GET["courseid"];
+ $cm_ids = \core_competency\api::list_course_modules_using_competency($competencyid, $courseid);
+ $data=array();
+ if ( count($cm_ids) !== 0 ) {
+ $modules=array();
+ $modinfo = get_fast_modinfo($courseid);
+
+ foreach ($cm_ids as $cm_id) {
+ $module=new StdClass();
+ $module->url = $modinfo->cms[$cm_id]->url->out();
+
+ $module->link_icon=$CFG->wwwroot."/theme/image.php/boost/".$modinfo->cms[$cm_id]->modname."/1/icon";
+ $module->name=$modinfo->cms[$cm_id]->name;
+ array_push($modules, $module);
+ }
+ $data["modules"]=$modules;
+ $renderer = $PAGE->get_renderer('block_competency_iena');
+
+ echo $renderer->get_linked_activities($data);
+
+ //echo json_encode($html);
+ return;
+
+ }
+ echo "false";
+ return;
+}
//Si on a fait une évaluation
if(isset($_POST) && !empty($_POST)){
- $courseid = required_param('courseid', PARAM_INT);
- $studentid = required_param('studentid', PARAM_INT);
- $competencyid = required_param('competencyid', PARAM_INT);
+ $courseid = required_param('courseid', PARAM_INT);
+ $studentid = required_param('studentid', PARAM_INT);
+ $competencyid = required_param('competencyid', PARAM_INT);
- $sql_rev = "SELECT * FROM {competency_usercomp} WHERE userid = ? AND competencyid = ? AND status = ?";
- $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]);
- $review_asked = count($reviews_data) > 0 ? true : false;
+ $sql_rev = "SELECT * FROM {competency_usercomp} WHERE userid = ? AND competencyid = ? AND status = ?";
+ $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]);
+ $review_asked = count($reviews_data) > 0 ? true : false;
- /* <<< POST >>> */
+ /* <<< POST >>> */
- /* POST EVALUATION */
+ /* POST EVALUATION */
- if ( isset($_POST['grade']) ) {
- $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);
- \core_competency\api::user_competency_stop_review($studentid, $competencyid);
- /* Refresh review data */
- $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]);
- $review_asked = count($reviews_data) > 0 ? true : false;
- }
- }
+ if ( isset($_POST['grade']) ) {
+ $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);
+ \core_competency\api::user_competency_stop_review($studentid, $competencyid);
+ /* Refresh review data */
+ $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]);
+ $review_asked = count($reviews_data) > 0 ? true : false;
+ }
+ }
- /* POST REVIEW */
+ /* POST REVIEW */
- if ( isset($_POST['review']) ) {
- if ( $_POST['review'] == 'request' ) {
- \core_competency\api::user_competency_request_review($studentid, $competencyid);
- } elseif ( $_POST['review'] == 'cancel' ) {
- \core_competency\api::user_competency_cancel_review_request($studentid, $competencyid);
- }
- /* Refresh review data */
- $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]);
- $review_asked = count($reviews_data) > 0 ? true : false;
- }
+ if ( isset($_POST['review']) ) {
+ if ( $_POST['review'] == 'request' ) {
+ \core_competency\api::user_competency_request_review($studentid, $competencyid);
+ } elseif ( $_POST['review'] == 'cancel' ) {
+ \core_competency\api::user_competency_cancel_review_request($studentid, $competencyid);
+ }
+ /* Refresh review data */
+ $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]);
+ $review_asked = count($reviews_data) > 0 ? true : false;
+ }
}
@@ -101,21 +130,21 @@ $PAGE->requires->css("/blocks/competency_iena/styles.css");
echo $OUTPUT->header();
$sql = "SELECT * FROM {competency_usercomp}
- WHERE userid = ? AND status = ?";
- $params_rev = array();
- $params_rev[] = $student->studentid;
- $params_rev[] = 1;
- $reviews_data = $DB->get_records_sql($sql, $params_rev);
- $reviews_count = count($reviews_data);
-
- /* <<< DASHBORD >>> */
-
- $count_proficients = 0;
- foreach ($user_course_competencies as $u_c_cpt) {
- if ( $u_c_cpt->get('proficiency') == 1 ) {
- $count_proficients++;
- }
- }
+ WHERE userid = ? AND status = ?";
+ $params_rev = array();
+ $params_rev[] = $student->studentid;
+ $params_rev[] = 1;
+ $reviews_data = $DB->get_records_sql($sql, $params_rev);
+ $reviews_count = count($reviews_data);
+
+ /* <<< DASHBORD >>> */
+
+ $count_proficients = 0;
+ foreach ($user_course_competencies as $u_c_cpt) {
+ if ( $u_c_cpt->get('proficiency') == 1 ) {
+ $count_proficients++;
+ }
+ }
$chart = new \core\chart_pie();
$proficiency_serie = new core\chart_series(get_string('competencies', 'core_competency'), [$count_proficients, $count_course_cpts - $count_proficients]);
@@ -131,52 +160,52 @@ $array_frameworks=array();
foreach ($user_course_competencies as $user_course_competency) {
-
- // Crée un obj cpt à partir de l'ID. Attention, id de compétence et course_competency sont différents.
- $cpt = new \core_competency\competency($user_course_competency->get('competencyid'));
- /* Visuel indentation to reflect levels in cpt framework */
- $cpt_level_in_framework = substr_count($cpt->get('path'), '/') - 1; /* start at 1 */
-
- $user_course_competency->level_indentation = $cpt_level_in_framework * 1.5;
- $user_course_competency->cpt_level_in_framework=$cpt_level_in_framework;
- $framework_id=$cpt->get('competencyframeworkid');
- if(!in_array($framework_id,array_keys($array_frameworks))){
- $framework = new \core_competency\competency_framework($cpt->get('competencyframeworkid'));
- $array_frameworks[$framework_id]=array();
- $array_frameworks[$framework_id]['taxonomy']=$framework->get('taxonomies');
- }
- $user_course_competency->taxonomy=get_string("taxonomy_".$array_frameworks[$framework_id]["taxonomy"][$cpt_level_in_framework], 'core_competency');
-
- // Récupère les chaines de caractère de l'échelle d'évaluation
- $cpt_scale = $cpt->get_scale()->scale_items;
- $user_course_competency->eval = "-";
- if ( $user_course_competency->get('grade') != null ) {
- $user_course_competency->eval = $cpt_scale[$user_course_competency->get('grade') - 1];
- }
- $user_course_competency->id=$user_course_competency->get('competencyid');
-
- $user_course_competency->scale=array();
- for($i=0; $i<count($cpt_scale); $i++){
- $user_course_competency->scale[$i]=array('title'=>$cpt_scale[$i], 'value'=>$i+1);
- if($cpt_scale[$i]==$user_course_competency->eval){
- $user_course_competency->scale[$i]['selected']='selected';
- }
-
- }
-
- $user_course_competency->proficient_class = $user_course_competency->get('proficiency') == 1 ? " list-group-item-success" : "";
- $user_course_competency->proficient_str = $user_course_competency->get('proficiency') == 1 ? "Oui" : "Non";
- $user_course_competency->shortname=$cpt->get('shortname');
- $user_course_competency->link=$CFG->wwwroot."/blocks/competency_iena/course_competency.php?courseid=".$COURSE->id."&studentid=".$student->studentid."&competencyid=".$cpt->get('id')."&from=students";
- foreach ($reviews_data as $review) {
- if ( $review->competencyid == $cpt->get('id') ) {
- $user_course_competency->review_asked=true;
- break;
- }
- }
-
- //$user_course_competency->reviews_data=array_values($reviews_data);
-
+
+ // Crée un obj cpt à partir de l'ID. Attention, id de compétence et course_competency sont différents.
+ $cpt = new \core_competency\competency($user_course_competency->get('competencyid'));
+ /* Visuel indentation to reflect levels in cpt framework */
+ $cpt_level_in_framework = substr_count($cpt->get('path'), '/') - 1; /* start at 1 */
+
+ $user_course_competency->level_indentation = $cpt_level_in_framework * 1.5;
+ $user_course_competency->cpt_level_in_framework=$cpt_level_in_framework;
+ $framework_id=$cpt->get('competencyframeworkid');
+ if(!in_array($framework_id,array_keys($array_frameworks))){
+ $framework = new \core_competency\competency_framework($cpt->get('competencyframeworkid'));
+ $array_frameworks[$framework_id]=array();
+ $array_frameworks[$framework_id]['taxonomy']=$framework->get('taxonomies');
+ }
+ $user_course_competency->taxonomy=get_string("taxonomy_".$array_frameworks[$framework_id]["taxonomy"][$cpt_level_in_framework], 'core_competency');
+
+ // Récupère les chaines de caractère de l'échelle d'évaluation
+ $cpt_scale = $cpt->get_scale()->scale_items;
+ $user_course_competency->eval = "-";
+ if ( $user_course_competency->get('grade') != null ) {
+ $user_course_competency->eval = $cpt_scale[$user_course_competency->get('grade') - 1];
+ }
+ $user_course_competency->id=$user_course_competency->get('competencyid');
+
+ $user_course_competency->scale=array();
+ for($i=0; $i<count($cpt_scale); $i++){
+ $user_course_competency->scale[$i]=array('title'=>$cpt_scale[$i], 'value'=>$i+1);
+ if($cpt_scale[$i]==$user_course_competency->eval){
+ $user_course_competency->scale[$i]['selected']='selected';
+ }
+
+ }
+
+ $user_course_competency->proficient_class = $user_course_competency->get('proficiency') == 1 ? " list-group-item-success" : "";
+ $user_course_competency->proficient_str = $user_course_competency->get('proficiency') == 1 ? "Oui" : "Non";
+ $user_course_competency->shortname=$cpt->get('shortname');
+ $user_course_competency->link=$CFG->wwwroot."/blocks/competency_iena/course_competency.php?courseid=".$COURSE->id."&studentid=".$student->studentid."&competencyid=".$cpt->get('id')."&from=students";
+ foreach ($reviews_data as $review) {
+ if ( $review->competencyid == $cpt->get('id') ) {
+ $user_course_competency->review_asked=true;
+ break;
+ }
+ }
+
+ //$user_course_competency->reviews_data=array_values($reviews_data);
+
}
$data=array();
@@ -197,8 +226,8 @@ $data['link_dashboard']=$CFG->wwwroot."/blocks/competency_iena/competency_iena_c
$renderer = $PAGE->get_renderer('block_competency_iena');
$renderer->get_dashboard_students($data);
-
-
+
+
echo $OUTPUT->footer();
?>
\ No newline at end of file
diff --git a/js/dropdown.js b/js/dropdown.js
index 2d6675a..bb719d7 100644
--- a/js/dropdown.js
+++ b/js/dropdown.js
@@ -1,4 +1,4 @@
-(function() {
+
function filter (e) {
let filter = e.target.value.toUpperCase();
let a = e.target.parentNode.querySelectorAll('a');
@@ -175,6 +175,22 @@
+
});
-})()
\ No newline at end of file
+ function loadLinkedActivities(courseid, competencyid){
+ $.ajax({
+ url: window.location.href,
+ type: 'GET',
+ data: {competencyid:competencyid, courseid:courseid, action:"get_links"},
+ success: function(html) {
+ if(html=='false'){
+ html="<p><i>Il n'y a aucune activité liée</i></p>"
+ }
+ $("#modal-assess-"+competencyid+" #linked-activities").html(html);
+
+ }
+ });
+ }
+
+
diff --git a/renderer.php b/renderer.php
index d0c65cc..19a8c54 100644
--- a/renderer.php
+++ b/renderer.php
@@ -87,4 +87,8 @@ class block_competency_iena_renderer extends plugin_renderer_base {
function get_dashboard_competency_student($data){
echo $this->render_from_template('block_competency_iena/dashboard_competency_student', $data);
}
+
+ function get_linked_activities($data){
+ echo $this->render_from_template('block_competency_iena/linked_activities', $data);
+ }
}
diff --git a/styles.css b/styles.css
index c02c381..3998a5b 100644
--- a/styles.css
+++ b/styles.css
@@ -416,4 +416,12 @@ table.dataTable{
/*.chart-table-data{
display: block !important;
-}*/
\ No newline at end of file
+}*/
+
+.linked{
+ margin-bottom: 10px;
+}
+
+.linked .list-group-item{
+ padding: 0.5rem 0.5rem;
+}
\ No newline at end of file
diff --git a/templates/dashboard_competencies.mustache b/templates/dashboard_competencies.mustache
index 794034e..9b6a5b6 100644
--- a/templates/dashboard_competencies.mustache
+++ b/templates/dashboard_competencies.mustache
@@ -81,7 +81,7 @@
<div><small class='review-badge'>Évaluation demandée</small></div>
{{/review_asked}}
<div class="user-competency-actions">
- <a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a>
+ <a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation" onclick="loadLinkedActivities({{courseid}},{{id}})"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a>
<a href="{{link_cpt}}" class="action-icon" title="Détails" aria-label="{{#str}} eval, block_competency_iena {{/str}}"><i class="icon fa fa-search-plus fa-fw " aria-hidden="true"></i></a>
</div>
@@ -102,7 +102,7 @@
<div class='modal-body'>
<form method='post' action='{{link_assess}}'>
<div class='form-group'><div class='form-group'>
- <label>Évaluation</label>
+
<select name='grade' class='form-control'>
{{#scale}}
<option value='{{value}}'{{selected}}>{{title}}</option>
@@ -112,6 +112,12 @@
<div class='form-group'>
<textarea name='note' class='form-control' placeholder="Commentaire d'évaluation"></textarea>
</div>
+ <div class="linked">
+ <h5>Activités liées</h5>
+ <div id="linked-activities">
+
+ </div>
+ </div>
<button type='submit' class='btn btn-primary'>Évaluer</button>
</form>
@@ -128,6 +134,7 @@
</div>
</div>
</div>
+
{{/count_course_cpts}}
{{^count_course_cpts}}
<p class='alert alert-warning'>Pour le moment, aucune compétence n'a été liée à ce cours. Pour lier des compétences au cours et les associer à des activités, rendez-vous dans la page <a href='{$CFG->wwwroot}/blocks/competency_iena/competency_iena_competencies_mgmt.php?courseid={$courseid}'>Gestion des compétences</a>. </p>
diff --git a/templates/dashboard_students.mustache b/templates/dashboard_students.mustache
index 7191db1..62775d4 100644
--- a/templates/dashboard_students.mustache
+++ b/templates/dashboard_students.mustache
@@ -52,7 +52,7 @@
<div><small class='review-badge'>Évaluation demandée</small></div>
{{/review_asked}}
<div class="user-competency-actions">
- {{#is_not_student}}<a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a>
+ {{#is_not_student}}<a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation" onclick="loadLinkedActivities({{courseid}},{{id}})"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a>
{{/is_not_student}}
<a href="{{link}}" class="action-icon" title="Détails" aria-label="{{#str}} eval, block_competency_iena {{/str}}"><i class="icon fa fa-search-plus fa-fw " aria-hidden="true"></i></a>
</div>
@@ -74,7 +74,7 @@
<div class='modal-body'>
<form method='post' action='{{link_dashboard}}?courseid={{courseid}}&studentid={{student.studentid}}&competencyid={{id}}'>
<div class='form-group'><div class='form-group'>
- <label>Évaluation</label>
+
<select name='grade' class='form-control'>
{{#scale}}
<option value='{{value}}'{{selected}}>{{title}}</option>
@@ -84,6 +84,12 @@
<div class='form-group'>
<textarea name='note' class='form-control' placeholder="Commentaire d'évaluation"></textarea>
</div>
+ <div class="linked">
+ <h5>Activités liées</h5>
+ <div id="linked-activities">
+
+ </div>
+ </div>
<button type='submit' class='btn btn-primary'>Évaluer</button>
</form>
diff --git a/templates/linked_activities.mustache b/templates/linked_activities.mustache
new file mode 100644
index 0000000..c6b1d2d
--- /dev/null
+++ b/templates/linked_activities.mustache
@@ -0,0 +1,6 @@
+<div>
+ {{#modules}}
+ <a href='{{url}}' target='_blank' class='list-group-item list-group-item-action'><img src='{{link_icon}}' style='height: 1.3rem;'><span class='align-middle'> {{name}}</span></a>
+ {{/modules}}
+</div>
+
--
GitLab