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