From 740ef44fa4d22b693fe90daf2cf0f9dc8f99e246 Mon Sep 17 00:00:00 2001
From: Myriam Delaruelle <myriam.delaruelle@univ-lorraine.fr>
Date: Tue, 25 Feb 2025 11:46:14 +0100
Subject: [PATCH] search system and advanced filters

---
 amd/build/suivi.js       | 240 ++++++++++++++++-----------------------
 styles.css               |  39 ++++++-
 suivi_unit.php           |   3 +-
 templates/suivi.mustache |  35 +++---
 4 files changed, 151 insertions(+), 166 deletions(-)

diff --git a/amd/build/suivi.js b/amd/build/suivi.js
index e185a5a..e39598c 100644
--- a/amd/build/suivi.js
+++ b/amd/build/suivi.js
@@ -435,7 +435,95 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
     
 
 
-	function searchStudent(){
+
+
+	function deleteSearch(old_data){
+		$('#iena-search-tag').html("");
+		data=old_data;
+		$(".iena-filters .custom-select").prop('disabled', false);
+		$(".iena-filters .iena-custom-dropdown > button").prop('disabled', false);
+		showHideStudents();
+		reloadTable(data);
+        		
+	}
+
+	function deleteAdvancedFilter(old_data){
+		$('#iena-filters-tag').html("");
+		data=old_data;
+		$(".iena-filters #symbol-select").prop('disabled', false);
+		$(".iena-filters #completion-select").prop('disabled', false);
+		$("#completion-select").prop("disabled", false);
+		$("#iena-search-form").children().prop("disabled", false);
+		$("#iena-filters-error").hide();
+		showHideStudents();
+		reloadTable(data);
+        		
+	}
+    
+    
+	function applyMoreFilters(){
+	
+    	completionBegin=$("#completion-select-begin").val();
+    	
+    	completionEnd=$("#completion-select-end").val();
+
+		if($("#iena-close-advanced").length == 0){
+			old_data=$.extend(true,{},data);
+		}
+
+    	if(( isNaN(Number(completionBegin)) || (completionBegin < 0 || completionBegin > 100)) || (isNaN(Number(completionEnd)) || (completionEnd <0 || completionBegin > 100)) ){
+    		$("#iena-filters-error").show();
+    		if($('#iena-filters-tag').is(":hidden")){
+    			//$('#iena-filters-tag').hide();
+    			$("#symbol-select").prop("disabled", false);
+				$("#completion-select").prop("disabled", false);
+    		}
+    	
+    		
+
+    	}
+    	else{
+    		$("#iena-search-form").children().prop("disabled", true);
+    		$("#symbol-select").prop("disabled", true);
+			$("#completion-select").prop("disabled", true);
+    		$('#iena-filters-tag').show();
+    		$('#iena-filters-tag').html(`<span role="option" data-value="" aria-selected="true" class="badge badge-secondary clickable text-wrap text-break line-height-4 m-1" id="form_autocomplete_selection-1739873966209-0" data-active-selection="true">
+	        ≥`+completionBegin+`% ≤`+completionEnd+`%<i id="iena-close-advanced" class="icon fa fa-times pl-2 mr-0"></i></span>`);
+	 		
+	    	$('#iena-filters-tag').on('click', 'i', function(e){
+	    		
+	    		deleteAdvancedFilter(old_data);
+	    	});
+    		$("#iena-filters-error").hide();
+    		showHideStudentsAdvancedFilters(completionBegin, completionEnd);
+    		reloadTable(data);
+    	}
+	}
+
+
+
+	function showHideStudentsAdvancedFilters(completionBegin, completionEnd){
+    	
+    	data.count_results=0;
+    	for(var i=0; i<data.students.length; i++){
+    		/*if(data.display_groups==1){
+    			data.students[i].display_groups=true;
+    		}*/
+    		if(data.students[i].percentage >= completionBegin && data.students[i].percentage <= completionEnd){
+				data.count_results++;
+				data.students[i].visible=true;
+			}
+			else{
+				data.students[i].visible=false;
+			}
+
+    		
+    	}
+
+    	
+    }
+
+    function searchStudent(){
 		var searchinput= $('input[name="iena-search-student"]').val();
 		var searchform=document.querySelector("#iena-search-form");
 		 
@@ -443,6 +531,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
 			
 			$('input[name="iena-search-student"]').css("border-color","#dc3545");
 			$("#iena-search-error").show();
+			$('#iena-search-tag').hide();
 
 		}
 		else{
@@ -451,12 +540,16 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
 			$("#iena-search-error").hide();
 
 			$(".iena-filters .custom-select").prop('disabled', true);
+	
 			$(".iena-filters .iena-custom-dropdown > button").prop('disabled', true);
+			$("#iena-more-filters .form-control").prop('disabled', true);
+			$("#check-more-filters").addClass("disabled");
+			
 
 			if($("#iena-close-tag").length == 0){
 				old_data=$.extend(true,{},data);
 			}
-	 		
+	 		$('#iena-search-tag').show();
 			var completeUrl=getCompleteUrl();
 	    	
 	 		$('#iena-search-tag').html(`<span role="option" data-value="`+searchinput+`" aria-selected="true" class="badge badge-secondary clickable text-wrap text-break line-height-4 m-1" id="form_autocomplete_selection-1739873966209-0" data-active-selection="true">
@@ -489,151 +582,12 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
 		data=old_data;
 		$(".iena-filters .custom-select").prop('disabled', false);
 		$(".iena-filters .iena-custom-dropdown > button").prop('disabled', false);
+		$("#iena-more-filters .form-control").prop('disabled', false);
+		$("#check-more-filters").removeClass("disabled");
 		showHideStudents();
 		reloadTable(data);
         		
 	}
-    
-    
-	function applyMoreFilters(){
-		if ($("#check-more-filters").is(":checked")){
-			$("#symbol-select").prop("disabled", true);
-			$("#completion-select").prop("disabled", true);
-		}
-		else{
-			$("#symbol-select").prop("disabled", false);
-			$("#completion-select").prop("disabled", false);
-		}
-		symbolBegin=$("#symbol-select-begin").val();
-    	completionBegin=$("#completion-select-begin").val();
-    	symbolEnd=$("#symbol-select-end").val();
-    	completionEnd=$("#completion-select-end").val();
-    	if((typeof completionBegin != Number && (completionBegin <0 || completionBegin > 100)) || (typeof completionEnd != Number && (completionEnd <0 || completionBegin > 100)) ){
-    		console.log(typeof completionBegin);
-
-    	}
-    	else{
-    		console.log("on montre les étyd");
-    		showHideStudentsAdvancedFilters(symbolBegin, completionBegin, symbolEnd, completionEnd);
-    		reloadTable(data);
-    	}
-	}
-
-
-
-	function showHideStudentsAdvancedFilters(symbolBegin, completionBegin, symbolEnd, completionEnd){
-    	
-    	data.count_results=0;
-    	console.log(data.students);
-    	for(var i=0; i<data.students.length; i++){
-    		/*if(data.display_groups==1){
-    			data.students[i].display_groups=true;
-    		}*/
-    		console.log(symbolBegin);
-    		console.log(symbolEnd);
-    		switch(symbolBegin){
-    			case ">":
-    				switch(symbolEnd){
-    					case "<":
-    						console.log("on devrait arriver ic");
-    						if(data.students[i].percentage > completionBegin && data.students[i].percentage < completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    					case "=":
-    						if(data.students[i].percentage > completionBegin && data.students[i].percentage == completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    					case "≤":
-    						if(data.students[i].percentage > completionBegin && data.students[i].percentage <= completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    				}
-    				break;
-    			case "=":
-    				switch(symbolEnd){
-    					case "<":
-    						if(data.students[i].percentage == completionBegin && data.students[i].percentage < completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    					case "=":
-    						if(data.students[i].percentage == completionBegin && data.students[i].percentage == completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    					case "≤":
-    						if(data.students[i].percentage == completionBegin && data.students[i].percentage <= completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    				}
-    				break;
-				case "≥":
-					switch(symbolEnd){
-    					case "<":
-    						if(data.students[i].percentage >= completionBegin && data.students[i].percentage < completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    					case "=":
-    						if(data.students[i].percentage >= completionBegin && data.students[i].percentage == completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    					case "≤":
-    						if(data.students[i].percentage >= completionBegin && data.students[i].percentage <= completionEnd){
-			    				data.count_results++;
-			    				data.students[i].visible=true;
-			    			}
-			    			else{
-								data.students[i].visible=false;
-			    			}
-    						break;
-    				}
-					break;
-
-    		}
-
-    		
-    	}
-
-    	
-    }
 
      
 
diff --git a/styles.css b/styles.css
index 6ff2685..aa0691d 100644
--- a/styles.css
+++ b/styles.css
@@ -1120,6 +1120,10 @@ th.first-column-iena, th.second-column-iena, th.actions-column-iena, th.third-co
     top: 13px;
 }
 
+.iena-custom-dropdown .dropdown-toggle:disabled{
+	background-color: #e9ecef;
+}
+
 .iena-dynamic-options, .iena-dynamic-activities{
     list-style: none;
     padding: 0;
@@ -1264,8 +1268,8 @@ border-bottom: 1px solid #dee2e6;
 	margin:0!important;
 }
 
-#iena-search-tag{
-	display: block;
+#iena-search-tag, #iena-filters-tag{
+	display: none;
 	vertical-align: middle;
 }
 
@@ -1278,3 +1282,34 @@ border-bottom: 1px solid #dee2e6;
   	display: inline-block;
   	vertical-align: middle;
 }
+
+#iena-more-filters input{
+	flex-basis: 50px;
+  	flex-grow: 0;
+  	flex-shrink: 0;
+	margin: 0 3px 0 10px;
+	border-color: #e9ecef;
+	border-radius: 0.5rem;
+	text-align: right;
+}
+
+#iena-more-filters span{
+	line-height: 35px;
+}
+
+#check-more-filters{
+	line-height: 35px;
+	margin-left: 20px;
+	cursor: pointer;
+	color: #2a657d;
+	pointer-events: auto;
+}
+
+#check-more-filters:hover{
+	color: #204e60;
+}
+
+#check-more-filters.disabled{
+	pointer-events: none;
+	color:grey;
+}
\ No newline at end of file
diff --git a/suivi_unit.php b/suivi_unit.php
index 3967ae3..9eb10ed 100644
--- a/suivi_unit.php
+++ b/suivi_unit.php
@@ -204,8 +204,7 @@ function set_filters($data, $filters, $symbols, $sections, $currentusergroups, $
 
     $data['filters'] = array_values($filters);
     $data['symbols'] = array_values($symbols);
-    $data['symbolsAdvancedBegin']=array($data['symbols'][0],$data['symbols'][2],$data['symbols'][4]);
-    $data['symbolsAdvancedEnd']=array($data['symbols'][0],$data['symbols'][1],$data['symbols'][3]);
+    
 
    
 
diff --git a/templates/suivi.mustache b/templates/suivi.mustache
index d2d0768..6e19475 100644
--- a/templates/suivi.mustache
+++ b/templates/suivi.mustache
@@ -137,32 +137,29 @@
 			
 		</select>
 	</div>
-	<div>
+	<div style="width: 100%;margin-top:15px">
 		<a href="#" id="link-more-filters">Filtres avancés</a>
 		<div id="iena-more-filters" style="display:none">
-			<input type="checkbox" id="check-more-filters"></input>
+		
 			<div class="input-group">
 				<div class="input-group-prepend">
-					<label>Plage d'achèvement</label>
+					<label>Achèvement compris entre</label>
 				</div>
-				<select class="custom-select mr-sm-2" id="symbol-select-begin" name="filter">
-					
-					{{#symbolsAdvancedBegin}}
-						<option {{selected}} value='{{value}}'>{{name}}</option>
-					{{/symbolsAdvancedBegin}}
-					
-				</select>
+				
 				<input type="text" class="form-control" id="completion-select-begin"></input>
-				<span>et</span>
-				<select class="custom-select mr-sm-2" id="symbol-select-end" name="filter">
-					
-					{{#symbolsAdvancedEnd}}
-						<option {{selected}} value='{{value}}'>{{name}}</option>
-					{{/symbolsAdvancedEnd}}
-					
-				</select>
-				<input type="text" class="form-control" id="completion-select-end"></input>
+				<span>% et </span>
+				
+				<input type="text" class="form-control" id="completion-select-end"></input><span>%</span>
+				<i id="check-more-filters" class="icon fas fa-floppy-disk fa-fw " title="Enregistrer les filtres" aria-label="Enregistrer les filtres"></i>
+			</div>
+			<div id="iena-filters-error" class="invalid-feedback">
+				Veuillez entrer des valeurs numériques comprises entre 0 et 100.
+			</div>
+			<div id="iena-filters-tag">
+				<div class="form-autocomplete-selection d-inline-block my-0 form-autocomplete-multiple h5" role="listbox" aria-atomic="true" tabindex="0"></div>
+
 			</div>
+			
 		</div>
 	</div>
 
-- 
GitLab