From a861a46505b2a0123c32408430be2d805562378c Mon Sep 17 00:00:00 2001
From: Myriam Delaruelle
 <Myriam Delaruelle@bdn-un-mdelarue.ad.univ-lorraine.fr>
Date: Mon, 20 Sep 2021 09:56:34 +0200
Subject: [PATCH] template student dashboard

---
 competency_iena_competencies_2.php        | 176 ++++++++--------------
 lang/en/block_competency_iena.php         |   1 +
 lang/fr/block_competency_iena.php         |   1 +
 renderer.php                              |   4 +
 templates/dashboard_competencies.mustache |   1 +
 templates/dashboard_students.mustache     |  55 +++++++
 6 files changed, 129 insertions(+), 109 deletions(-)
 create mode 100644 templates/dashboard_competencies.mustache
 create mode 100644 templates/dashboard_students.mustache

diff --git a/competency_iena_competencies_2.php b/competency_iena_competencies_2.php
index b883f81..6e27e44 100644
--- a/competency_iena_competencies_2.php
+++ b/competency_iena_competencies_2.php
@@ -19,6 +19,7 @@ $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;
@@ -27,30 +28,24 @@ if (!has_capability('moodle/course:update', $context = context_course::instance(
 
 $course_cpts = \core_competency\course_competency::list_competencies($COURSE->id);
 $count_course_cpts = count($course_cpts);
-if ($count_course_cpts === 0) {
-	$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
-	echo $OUTPUT->header();
-	echo "<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>";
-	echo $OUTPUT->footer();
-} else {
-
-	// L'état des compétences du cours pour un utilisateur
-	$user_course_competencies = \core_competency\api::list_user_competencies_in_course($COURSE->id, $studentid);
-
-	// Les étudiants. 
-	$student = new block_competency_iena_student();
-	$students = $student->get_all_students_by_course($COURSE->id);
-
-	// L'étudiant
-	$student->get_student_by_id($studentid);
-
-	$PAGE->set_heading($OUTPUT->heading($student->firstname . " " . $student->lastname, 2, 'headingblock header outline'));
-	$PAGE->requires->js("/blocks/competency_iena/js/dropdown.js");
-	echo $OUTPUT->header();
-
-	/* Les demandes de validation de compétence (review) prises dans le cptuser car n'existent pas dans le contexte restreint à un cours. */
-	/* TODO : préciser sur quelles compétences ? */
-	$sql = "SELECT * FROM {competency_usercomp} 
+$user_course_competencies = \core_competency\api::list_user_competencies_in_course($COURSE->id, $studentid);
+$student = new block_competency_iena_student();
+$students = $student->get_all_students_by_course($COURSE->id);
+
+// L'étudiant
+$student->get_student_by_id($studentid);
+
+//$PAGE->set_heading($OUTPUT->heading($student->firstname . " " . $student->lastname, 2, 'headingblock header outline'));
+$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
+
+$coursenode = $PAGE->navigation->find($course->id, navigation_node::TYPE_COURSE);
+$thingnode = $coursenode->add(get_string('dashboard_students', 'block_competency_iena'));
+$thingnode->make_active();
+
+$PAGE->requires->js("/blocks/competency_iena/js/dropdown.js");
+echo $OUTPUT->header();
+
+$sql = "SELECT * FROM {competency_usercomp} 
 	WHERE userid = ? AND status = ?";
 	$params_rev = array();
 	$params_rev[] = $student->studentid;
@@ -67,97 +62,60 @@ if ($count_course_cpts === 0) {
 		}
 	}
 
-	/* DEBUT CONTAINER */
-	echo "<div class='container-fluid' id='dash-container'>";
-
-	/* <<< DASHBOARD >>> */
-
-	echo "<div class='alert alert-secondary row' style='padding-top: 1.5rem;'>"; /* Début tableau de bord. */
-	
-	/* Left col */
-	echo "<div class='col-12 col-lg-6'>";
-
-	echo "<h2 class='h3'>{$student->firstname} {$student->lastname}</h2>";
-
-	if ( !$is_student ) {
-		echo "<form action='{$CFG->wwwroot}/blocks/competency_iena/competency_iena_competencies_2.php' id='change_stud_form' class='form-inline' autocomplete='off' style='display: block;height: 1.5rem;'>";
-		echo "<input type='text' hidden name='courseid' value='{$courseid}'>";
-		echo "<span hidden id='studentid'>{$studentid}</span>";
-		
-		echo "<div id='student_dropdown' class='iena-dropdown' style='z-index: 10;'>";
-		echo "<input type='text' hidden name='studentid' id='studentid_sel' class='iena-drop-input-value' value=''>";
-		echo "<input type='text' value='' class='form-control iena-drop-input' style='font-size: .7rem; line-height: 1; width: 300px;' placeholder='{$student->firstname} {$student->lastname}'><button class='btn btn-secondary' id='prevStud' style='font-size: .8rem;line-height: 1.09; margin-left: 0.5rem;'>Précédent</button><button class='btn btn-secondary' id='nextStud' style='font-size: .8rem;line-height: 1.09; margin-left: 0.5rem;'>Suivant</button>";
-		echo "<div class='iena-droplist' id='student_list'>";
-		foreach ($students as $stud) {
-			echo "<a href='#' data-value='{$stud->id}' class='iena-drop-item' style='display: none;'>{$stud->firstname} {$stud->lastname}</a>";
-		}
-		echo "</div>";
-		echo "</div>";
-		
-		echo "</form>";
+$chart = new \core\chart_pie();
+$proficiency_serie = new core\chart_series('', [$count_proficients, $count_course_cpts - $count_proficients]);
+$chart->set_doughnut(true); 
+$chart->add_series($proficiency_serie);
+$chart->set_labels(["Validé", "Non validé"]);
+
+
+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;
+	// 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];
 	}
-
-	echo "<h2 class='h4 m-t-2'>Demandes d'évaluations <span class='badge badge-pill badge-primary' style='border-radius: 0.15rem;'>$reviews_count</span></h2>";
-
-	echo "</div>"; /* Left col END */
-
-	/* Right col */
-	echo "<div class='col-12 col-lg-6'>"; 
-	echo "<h2 class='h4'>Compétences validées</h2>";
-	$chart = new \core\chart_pie();
-	$proficiency_serie = new core\chart_series('', [$count_proficients, $count_course_cpts - $count_proficients]);
-	$chart->set_doughnut(true); 
-	$chart->add_series($proficiency_serie);
-	$chart->set_labels(["Validé", "Non validé"]);
-	echo $OUTPUT->render($chart);
-	echo "</div>"; /* Right col END */
-
-	echo "</div>"; /* Fin tableau de bord */
-
-	/* <<< COMPETENCY LIST >>> */
-
-	echo "<div class='row'>";
-
-	echo "<div class='col-12' style='padding: 0;'>";
-
-	echo "<div class='list-group'>";
-	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 */
-		$level_indentation = $cpt_level_in_framework * 1.5;
-		// Récupère les chaines de caractère de l'échelle d'évaluation
-		$cpt_scale = $cpt->get_scale()->scale_items;
-		$eval = "-";
-		if ( $user_course_competency->get('grade') != null ) {
-			$eval = $cpt_scale[$user_course_competency->get('grade') - 1];
+	$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');
+	foreach ($reviews_data as $review) {
+		if ( $review->competencyid == $cpt->get('id') ) {
+			error_log("Oui on a une demande");
+			$user_course_competency->review_asked=true;
+			break;
 		}
-		$proficient_class = $user_course_competency->get('proficiency') == 1 ? " list-group-item-success" : "";
-		$proficient_str = $user_course_competency->get('proficiency') == 1 ? "Oui" : "Non";
-		echo "
-		<a href='{$CFG->wwwroot}/blocks/competency_iena/course_competency.php?courseid={$courseid}&studentid={$studentid}&competencyid={$cpt->get('id')}' class='list-group-item list-group-item-action{$proficient_class}' style='padding-left: {$level_indentation}rem;'>
-		<div class='d-flex w-100 justify-content-between'>
-		<h3 class='mb-1 iena-cpt-action-title h5'>{$cpt->get('shortname')}</h3>";
-		foreach ($reviews_data as $review) {
-			if ( $review->competencyid == $cpt->get('id') ) {
-				echo "<div><small class='review-badge'>Évaluation demandée</small></div>";
-				break;
-			}
-		}
-		echo "</div>
-		<p class='small' style='margin-bottom: 0;'>Évaluation : {$eval} / Acquis : {$proficient_str}</p>
-		</a>";
 	}
-	echo "</div>";
+	//$user_course_competency->reviews_data=array_values($reviews_data);
+	
+}
 
-	echo "</div>";
+$data=array();
+$data['count_course_cpts']=$count_course_cpts;
+$data['is_not_student']=!$is_student;
+$data['courseid']=$COURSE->id;
+$data['chart']=$OUTPUT->render($chart);
+//$data['reviews_data']=array_values($reviews_data);
+$data['user_course_competencies']=array_values($user_course_competencies);
+$data['student']=$student;
+$data['students']=array_values($students);
+$data['reviews_count']=$reviews_count;
+$data['link_dashboard']=$CFG->wwwroot."/blocks/competency_iena/competency_iena_competencies_2.php";
 
-	echo "</div>"; /* Fin de la liste. */
 
 
-	echo "</div>"; /* FIN CONTAINER */
+$renderer = $PAGE->get_renderer('block_competency_iena');
 
-	echo $OUTPUT->footer();
+$renderer->get_dashboard_students($data);
+	
+	
+echo $OUTPUT->footer();
 
-} /* Fin else condition qu'il y ait des cpt liées au cours. */
\ No newline at end of file
+?>
\ No newline at end of file
diff --git a/lang/en/block_competency_iena.php b/lang/en/block_competency_iena.php
index 0dec00c..a61db35 100644
--- a/lang/en/block_competency_iena.php
+++ b/lang/en/block_competency_iena.php
@@ -87,4 +87,5 @@
     $string['manage_matrix_end'] = 'Exit edit mode';
     $string['no_competency_description'] = 'This competency doesn\'t have a description' ;
     $string['error_delete']="The activity/resource couldn't be deleted";
+    $string['dashboard_students']="Students dashboard";
 ?>
\ No newline at end of file
diff --git a/lang/fr/block_competency_iena.php b/lang/fr/block_competency_iena.php
index f3cad31..c4ab932 100644
--- a/lang/fr/block_competency_iena.php
+++ b/lang/fr/block_competency_iena.php
@@ -86,6 +86,7 @@
     $string['manage_matrix_end'] = 'Quitter le mode édition';
     $string['no_competency_description'] = 'Cette compétence n\'a pas de description.';
     $string['error_delete']="L'activité/ressource n'a pas pu être supprimée";
+    $string['dashboard_students']="Tableau de bord étudiants";
 
 
 
diff --git a/renderer.php b/renderer.php
index d56f5af..ffc5574 100644
--- a/renderer.php
+++ b/renderer.php
@@ -75,4 +75,8 @@ class block_competency_iena_renderer extends plugin_renderer_base {
     function get_competency_matrix($data){
         echo $this->render_from_template('block_competency_iena/matrix_competencies', $data);
     }
+
+    function get_dashboard_students($data){
+        echo $this->render_from_template('block_competency_iena/dashboard_students', $data);
+    }
 }
diff --git a/templates/dashboard_competencies.mustache b/templates/dashboard_competencies.mustache
new file mode 100644
index 0000000..0ec5d8d
--- /dev/null
+++ b/templates/dashboard_competencies.mustache
@@ -0,0 +1 @@
+<h1></h1>
\ No newline at end of file
diff --git a/templates/dashboard_students.mustache b/templates/dashboard_students.mustache
new file mode 100644
index 0000000..b8dbfda
--- /dev/null
+++ b/templates/dashboard_students.mustache
@@ -0,0 +1,55 @@
+<h2>{{# str }} dashboard_students, block_competency_iena{{/ str }}</h2>
+{{#count_course_cpts}}
+	<div class='container-fluid' id='dash-container'>
+		<div class='alert alert-secondary row' style='padding-top: 1.5rem;'>
+			<div class='col-12 col-lg-6'>
+				
+				<!--<h2 class='h3'>{{student.firstname}} {{student.lastname}}</h2>-->
+
+				{{#is_not_student}}
+					<form action='{{link_dashboard}}' id='change_stud_form' class='form-inline' autocomplete='off' style='display: block;height: 1.5rem;'>
+						<input type='text' hidden name='courseid' value='{{courseid}}'>
+						<span hidden id='studentid'>{{student.studentid}}</span>
+						<div id='student_dropdown' class='iena-dropdown' style='z-index: 10;'>
+							<input type='text' hidden name='studentid' id='studentid_sel' class='iena-drop-input-value' value=''>
+							<input type='text' value='' class='form-control iena-drop-input' style='font-size: .7rem; line-height: 1; width: 300px;' placeholder='{{student.firstname}} {{student.lastname}}'><button class='btn btn-secondary' id='prevStud' style='font-size: .8rem;line-height: 1.09; margin-left: 0.5rem;'>Précédent</button><button class='btn btn-secondary' id='nextStud' style='font-size: .8rem;line-height: 1.09; margin-left: 0.5rem;'>Suivant</button>
+							<div class='iena-droplist' id='student_list'>
+								{{#students}}
+									<a href='#' data-value='{{id}}' class='iena-drop-item' style='display: none;'>{{firstname}} {{lastname}}</a>
+								{{/students}}
+							</div>
+						</div>
+					</form>
+				{{/is_not_student}}
+				<h2 class='h4 m-t-2'>Demandes d'évaluations <span class='badge badge-pill badge-primary' style='border-radius: 0.15rem;'>{{reviews_count}}</span></h2>
+			</div>
+			<div class='col-12 col-lg-6'>
+				<h2 class='h4'>Compétences validées</h2>
+				{{{chart}}}
+			</div>
+		</div>
+		<div class='row'>
+			<div class='col-12' style='padding: 0;'>
+				<div class='list-group'>
+					{{#user_course_competencies}}
+						<a href='{{link}}' class='list-group-item list-group-item-action{{proficient_class}}' style='padding-left: {{level_indentation}}rem;'>
+							<div class='d-flex w-100 justify-content-between'>
+								<h3 class='mb-1 iena-cpt-action-title h5'>{{shortname}}</h3>
+								
+
+									{{#review_asked}}
+										<div><small class='review-badge'>Évaluation demandée</small></div>
+									{{/review_asked}}
+
+							</div>
+							<p class='small' style='margin-bottom: 0;'>Évaluation : {{eval}} / Acquis : {{proficient_str}}</p>
+						</a>
+					{{/user_course_competencies}}
+				</div>
+			</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='/blocks/competency_iena/competency_iena_competencies_mgmt.php?courseid={{courseid}}'>Gestion des compétences</a>. </p>
+{{/count_course_cpts}}
\ No newline at end of file
-- 
GitLab