From 2fa140617357c17b7388d350c1ced68f786457b6 Mon Sep 17 00:00:00 2001
From: Thomas Fradet <t.fradet8@gmail.com>
Date: Thu, 14 Feb 2019 17:09:10 +0100
Subject: [PATCH] maj

---
 CHANGELOG.md               | 11 +++++
 renderer.php               |  2 +-
 view/view_send_message.php | 62 ++++++++++++++++------------
 view/view_suivi_unit3.php  | 84 ++++++++++++++++++++++++++------------
 4 files changed, 104 insertions(+), 55 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d6f8e8..481030c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -89,4 +89,15 @@ Le style n'est plus inclus directement dans le PHP, mais placé dans le fichier
 
 La taille des éléments de l'entête est modifiée pour qu'elle soit moins massive. 
 
+Modification du label d'accès au suivi des étudiants lorsqu'un groupe a été sélectionné pour harmonier avec aucune sélection (suivi et suivi étudiants au profit de suivi étudiants). 
+
+## Tableau de suivi
+
+Si aucune donnée n'est disponible dans le tableau, alors un message l'indique au lieu de présenter un tableau vide. 
+
+Sélectionner toute la liste ne sélectionne plus que les étudiants en effet affichés, au lieu de sélectionner également les étudiants qui n'y figurent pas à cause de l'application d'un filtre. Après avoir sélectionné tout, on ne peut pas changer de filtre et sélectionner tout pour le nouveau résultat du filtre appliqué, mais seulement désélectionner tout. Par exemple, il n'est pas possible de sélectionner tous < 25% puis tout > 75%. 
+
+Lors de l'envoi d'un message à certains étudiants sélectionnés, le nombre d'étudiants concernés est affiché dans le titre. 
+
+Lors de l'envoi d'un message à certains étudiants sélectionnés, si aucun destinataire n'a été sélectionné, un message l'indique et l'envoi est indisponible. Un bouton permet de revenir à la page précédente. 
 
diff --git a/renderer.php b/renderer.php
index 8820a16..5306fa3 100644
--- a/renderer.php
+++ b/renderer.php
@@ -574,7 +574,7 @@ foreach ($htmlsection as $section) {
 		$view .= "</div>";
 		foreach ($course_groups as $group) {
 			$view .="<div onclick='change_grouplink(this)' style=\"display:none;\" class=\"nb_pers set_height id_groupe".$group->id."\">";
-			$view .= "Suivi";
+			$view .= "Suivi étudiants";
 			$view .= "</div>";
 		}
 		$view .="</a>";
diff --git a/view/view_send_message.php b/view/view_send_message.php
index eac4c06..4945c9c 100644
--- a/view/view_send_message.php
+++ b/view/view_send_message.php
@@ -44,35 +44,43 @@
 		{
 
 			global $DB, $CFG, $COURSE;
-			
-			$content = "<h2>Envoi d'un message</h2>
-			<p>Envoi d'un message à tous les étudiants précédemment sélectionnés. Les informations suivantes seront automatiquement ajoutées au message&nbsp;: nom du cours, lien vers le cours, nom du l'enseignant émetteur du message (vous). </p>
-			<p>L'étudiant recevra le message dans le chat et sera notifié par mail s'il n'est pas connecté au moment où le message est envoyé.</p>";
 
-			$mform = $this->_form;
-			$description = "";
-			$courseID = required_param('courseid', PARAM_INT);
-			$mform->addElement('editor', 'summary', get_string('summary', 'format_iena'));
-			$mform->setType('summary', PARAM_RAW);
-			$mform->addRule('summary', get_string('error'), 'required', null, null, false, false);
-			$mform->setDefault('summary', array('text' => $description));
-			
-			$content .= "<form class=\"m-t-1\" action=\"send_message_post.php?courseid=" . $COURSE->id . "\" method=\"post\">
-			<fieldset>
-			<div class=\"form-group\">";
-			$temp = $mform->toHtml();
-			//Del <form>
-			$temp = substr($temp, (strpos($temp, '>') + 1));
-			$temp = substr($temp, 0, -7);
+			$nb = $usersID != "" ? count( explode(",", $usersID) ) : 0;
+
+			if ( $nb == 0 ) {
+				$content = "<div class='alert alert-warning'><h2>Attention</h2><p>Vous n'avez sélectionné aucun destinataire pour votre message.</p><a class='btn btn-secondary' href='". $_SERVER['HTTP_REFERER'] ."'>Retour</a></div>";
+			} else {
+
+				$content = "<h2>Envoi d'un message à ". $nb ." personnes</h2>
+				<p>Envoi d'un message à tous les étudiants précédemment sélectionnés. Les informations suivantes seront automatiquement ajoutées au message&nbsp;: nom du cours, lien vers le cours, nom du l'enseignant émetteur du message (vous). </p>
+				<p>L'étudiant recevra le message dans le chat et sera notifié par mail s'il n'est pas connecté au moment où le message est envoyé.</p>";
+
+				$mform = $this->_form;
+				$description = "";
+				$courseID = required_param('courseid', PARAM_INT);
+				$mform->addElement('editor', 'summary', get_string('summary', 'format_iena'));
+				$mform->setType('summary', PARAM_RAW);
+				$mform->addRule('summary', get_string('error'), 'required', null, null, false, false);
+				$mform->setDefault('summary', array('text' => $description));
+
+				$content .= "<form class=\"m-t-1\" action=\"send_message_post.php?courseid=" . $COURSE->id . "\" method=\"post\">
+				<fieldset>
+				<div class=\"form-group\">";
+				$temp = $mform->toHtml();
 			
-			$content .= $temp;
-			$content .= "<input type='hidden' name='usersid' value='" . $usersID . "'>";
-			$link_annuler = $CFG->wwwroot . "/course/view.php?id=" . $courseID;
-			$content .= '<section class="section m-t-1">
-			  <button type="submit" class="btn btn-primary">Envoyer à tous</button>
-			  <a href=\' ' . $link_annuler . ' \' class=\'btn btn-secondary\'>Annuler </a>
-			</section>';
-			$content .= "</form>";
+				$temp = substr($temp, (strpos($temp, '>') + 1));
+				$temp = substr($temp, 0, -7);
+
+				$content .= $temp;
+				$content .= "<input type='hidden' name='usersid' value='" . $usersID . "'>";
+				$link_annuler = $CFG->wwwroot . "/course/view.php?id=" . $courseID;
+				$content .= '<section class="section m-t-1">
+				<button type="submit" class="btn btn-primary">Envoyer à tous</button>
+				<a href=\' ' . $link_annuler . ' \' class=\'btn btn-secondary\'>Annuler </a>
+				</section>';
+				$content .= "</form>";
+
+			}
 			
 			return $content;
 			
diff --git a/view/view_suivi_unit3.php b/view/view_suivi_unit3.php
index 4fb8dd8..8529dbb 100644
--- a/view/view_suivi_unit3.php
+++ b/view/view_suivi_unit3.php
@@ -37,13 +37,15 @@ $groups = groups_get_all_groups($COURSE->id, 0, 0, 'g.*', false);
 $active_group_id = $_GET['groupid'];
 // @TODO à supprimer si pas utilisé dans le JS (mettre dans la clause IF pour éviter un appel inutile si le GET existe)
 $current_user_groups_ids = groups_get_user_groups($COURSE->id, $USER->id)[0];
-if ($active_group_id == NULL) {
+/* Si pas de groupe dans le get ou groupe 0 (tous) mais pas le droit => premier groupe existant du user ou groupe 0 (tous) */
+if ($active_group_id == NULL || ($active_group_id == 0 && !has_capability('course/iena:suivi_edit', $context, $USER->id)) ) {
 	if ( count($current_user_groups_ids) == 0 ) {
 		$active_group_id = 0;
 	} else {
 		$active_group_id = $current_user_groups_ids[0];
 	}
 }
+
 $current_user_groups = [];
 $active_group_name = "";
 foreach ($groups as $group) {
@@ -302,7 +304,7 @@ th.th-rotate > div > span {
 				"<25" => "&lt;25%",
 				">50" => "&gt;=50%",
 				">25" => "&gt;=25%",
-				">0" => "&gt;=0%",
+				">0" => "&gt;0%",
 			];
 			foreach ($filters as $value => $name) {
 				if ( $value == $filter ) {
@@ -318,24 +320,24 @@ th.th-rotate > div > span {
 	<!-- <label class="my-1 mr-2" for="filter-select">Filtre %</label>
 	<select class="custom-select my-1 mr-sm-2" id="filter-select" name="filter">
 		<?php 
-		$filters = [
-			"all" => "Tous",
-			"=100" => "100%",
-			"=0" => "0%",
-			"<100" => "&lt;100%",
-			"<50" => "&lt;50%",
-			"<25" => "&lt;25%",
-			">50" => "&gt;50%",
-			">25" => "&gt;25%",
-			">0" => "&gt;0%",
-		];
-		foreach ($filters as $value => $name) {
-			if ( $value == $filter ) {
-				echo "<option selected='selected' value='$value'>$name</option>";
-			} else {
-				echo "<option value='$value'>$name</option>";
-			}
-		}
+		// $filters = [
+		// 	"all" => "Tous",
+		// 	"=100" => "100%",
+		// 	"=0" => "0%",
+		// 	"<100" => "&lt;100%",
+		// 	"<50" => "&lt;50%",
+		// 	"<25" => "&lt;25%",
+		// 	">50" => "&gt;50%",
+		// 	">25" => "&gt;25%",
+		// 	">0" => "&gt;0%",
+		// ];
+		// foreach ($filters as $value => $name) {
+		// 	if ( $value == $filter ) {
+		// 		echo "<option selected='selected' value='$value'>$name</option>";
+		// 	} else {
+		// 		echo "<option value='$value'>$name</option>";
+		// 	}
+		// }
 		?>
 	</select> -->
 
@@ -354,6 +356,8 @@ th.th-rotate > div > span {
 	<a href="#" class="select_all_studs">Sélectionner tout</a> || <a href="#" class="send_msg_sel">Message aux étudiants sélectionnés</a>
 </div>
 
+<div id="no_result" class="alert alert-warning">Aucun étudiants trouvé. Vérifiez la section, le groupe et le filtre choisi.</div>
+
 <table id="suivi">
 	<thead>
 		<tr id="modules" style="">
@@ -393,6 +397,24 @@ var data = {
 	set_table_body();
 	set_reactivity();
 
+	function count_lines () {
+		var rows = document.querySelectorAll("#table-body > tr"); 
+		var counter = 0;
+		for (var i = 0; i < rows.length; i++) {
+			if (rows[i].style.display != "none") {
+				counter++;
+			}
+		}
+		console.log(counter);
+		if (counter == 0) {
+			document.getElementById('suivi').style.display = "none";
+			document.getElementById('no_result').style.display = "";
+		} else {
+			document.getElementById('suivi').style.display = "";
+			document.getElementById('no_result').style.display = "none";
+		}
+	}
+
 	function set_table_head() {
 		/* Insert la liste d'activité en entête */
 		var table_heads = document.getElementById('modules');
@@ -557,6 +579,7 @@ var data = {
 				}
 			}
 		})
+		count_lines();
 	}
 
 	function filter_students(filter) {
@@ -587,7 +610,7 @@ var data = {
 				}
 			}
 		}
-
+		count_lines();
 	}
 
 	function display_percentage() {
@@ -621,15 +644,22 @@ var data = {
 
 	function select_all_studs(e) {
 		e.preventDefault();
-		var checks = document.querySelectorAll("#table-body input[type='checkbox']");
+		var counter = 0;
+		var checks = document.querySelectorAll("#table-body tr");
 		for (var i = 0; i < checks.length; i++) {
-			checks[i].checked = !data.all_selected;
+			if ( checks[i].style.display != "none" || data.all_selected ) {
+				var box = checks[i].querySelector("input[type='checkbox']");
+				box.checked = !data.all_selected;
+				counter++;
+			}
 		}
-		var select_all_studs_boxes = document.querySelectorAll('.select_all_studs');
-		for (var i = 0; i < select_all_studs_boxes.length; i++) {
-			select_all_studs_boxes[i].innerHTML = data.all_selected ? "Sélectionner tout" : "Désélectionner tout"
+		if ( counter > 0 ) {
+			var select_all_studs_boxes = document.querySelectorAll('.select_all_studs');
+			for (var i = 0; i < select_all_studs_boxes.length; i++) {
+				select_all_studs_boxes[i].innerHTML = data.all_selected ? "Sélectionner tout" : "Désélectionner tout"
+			}
+			data.all_selected = !data.all_selected;
 		}
-		data.all_selected = !data.all_selected;
 	}
 
 	function send_msg_sel(e) {
-- 
GitLab