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