diff --git a/amd/build/suivi.js b/amd/build/suivi.js index 6190a5644683595fbcfd00b12f4869e8a2237a58..023f08f6d40f7872cdd30dff858956cfb5de3bcc 100644 --- a/amd/build/suivi.js +++ b/amd/build/suivi.js @@ -50,8 +50,11 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], $("#symbol-select").on('change', function(){ changeCompletion(); }); + $('.dropdown-menu-form').on('click', function (e) { + e.stopPropagation(); + }); - + registerActivityFilter(); changeSection(); /*calcPercentage(data); changeCompletion();*/ @@ -79,6 +82,14 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], groupid=$("#group-select").val(); sectionid=$("#section-select").val(); filter=$("#symbol-select").val() + $("#filter-select").val(); + /*checkedActivities=$('input[name="options[]"]:checked'); + activities=[]; + for(var i=0; i< checkedActivities.length; i++){ + if(checkedActivities[i].value >0){ + activities.push(checkedActivities[i].value); + } + + }*/ completeUrl='suivi_unit.php?courseid='+courseid; if(sectionid){ completeUrl+='§ionid='+sectionid; @@ -99,9 +110,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], data: {action: 'test'}, type: 'post', success: function(request) { - console.log("wat"); - console.log(JSON.parse(request)); - data=calcPercentage(JSON.parse(request)); //changeCompletion(); changeSection(); @@ -135,7 +143,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], } } else if(symbol=="≤"){ - console.log("on passe ici"); if(data.students[i].percentage <= filter){ data.count_results++; data.students[i].visible=true; @@ -198,12 +205,57 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], changeCompletion(); //reloadTable(data); } + changeActivitiesDropdown(data.modules); //reloadTable(data); } + function changeActivitiesDropdown(modules){ + //html='<li><label class="checkbox"><input type="checkbox" class="selectall" value="all" checked>Toutes les activités</label></li><li class="divider"></li>'; + html=""; + for (var i = 0; i<modules.length;i++){ + if(modules[i].visible){ + html+='<li><label class="checkbox"><input type="checkbox" name="options[]" checked value='+modules[i].id+' class="option justone">'+modules[i].displayname+'</label></li>'; + + } + } + $(".iena-dynamic-options").html(html); + registerActivityFilter(); + } + + function displayActivities(){ + var arrayActivitiesID=[]; + var activitiesToStore=[]; + var activities = $('input[name="options[]"]'); + + for(var i=0; i<activities.length;i++){ + + prog=data.modules.find(element => element.id === activities[i].value); + if(activities[i].checked){ + prog.visible=true; + for(var j = 0; j<data.students.length; j++){ + data.students[j].progress.find(progress => progress.idmodule === activities[i].value).visible=true; + } + activitiesToStore.push(activities[i].value); + } + else{ + prog.visible=false; + for(var j = 0; j<data.students.length; j++){ + data.students[j].progress.find(progress => progress.idmodule === activities[i].value).visible=false; + } + } + + + } + localStorage.setItem("activities",JSON.stringify(activitiesToStore)); + //changeCompletion(); + reloadTable(data); + } + + + function loadMessage(type){ if(type=="loading"){ var message = str.get_string('loadingResults', 'format_iena'); @@ -406,7 +458,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], //Pour chaque module non caché, on va regarder pour chaque étudiant function calcPercentage(data){ - console.log(data); for (var i = 0; i < data.students.length; i++) { data.students[i].percentage=0; var done=0; @@ -425,7 +476,77 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], //reloadTable(data); } + function registerActivityFilter(){ + /* $('body').on("click", ".dropdown-menu", function (e) { + $(this).parent().is(".open") && e.stopPropagation(); + });*/ + + $('.selectall').click(function() { + if ($(this).is(':checked')) { + $('.option').prop('checked', true); + var total = $('input[name="options[]"]:checked').length; + var message=str.get_string('selectedActivities', 'format_iena'); + $.when(message).done(function(localizedEditString) { + $(".dropdown-text").html(total + ' '+localizedEditString); + }); + $(".select-text").html(' Deselect'); + } else { + $('.option').prop('checked', false); + var message=str.get_string('selectedActivities', 'format_iena'); + $.when(message).done(function(localizedEditString) { + $(".dropdown-text").html('0 '+localizedEditString); + }); + $(".select-text").html(' Select'); + } + }); + + $("input[type='checkbox'].justone").change(function(){ + var a = $("input[type='checkbox'].justone"); + if(a.length == a.filter(":checked").length){ + $('.selectall').prop('checked', true); + $(".select-text").html(' Deselect'); + } + else { + $('.selectall').prop('checked', false); + $(".select-text").html(' Select'); + } + var total = $('input[name="options[]"]:checked').length; + var message=str.get_string('selectedActivities', 'format_iena'); + $.when(message).done(function(localizedEditString) { + $(".dropdown-text").html(total + ' '+localizedEditString); + }); + }); + + $('#iena-activities-dropdown').on('change', function(e){ + displayActivities(); + }); + + initActivityFilter(); + } + //Stocke le filtre des activités en localStorage pour ne pas avoir 50 id dans l'url + //On fait bien attention à rétablir cocher le selectall si toutes les activités sont bien cochées + function initActivityFilter(){ + if(localStorage.activities){ + var checkedActivities=JSON.parse(localStorage.activities); + var activities=$("input[type='checkbox'].justone"); + if(activities.length===checkedActivities.length){ + $(".selectall").prop("checked", true); + $("input[type='checkbox'].justone").prop("checked", true); + } + else{ + $(".selectall").prop("checked", false); + for(var i=0; i<activities.length; i++){ + if(checkedActivities.includes(activities[i].value)){ + activities[i].checked=true; + } + else{ + activities[i].checked=false; + } + } + } + } + } diff --git a/lang/en/format_iena.php b/lang/en/format_iena.php index 4bb81c609387adce93039f9eb52e41c18691d92b..f50af72507ac34715700dbc96aa96b692d56c43d 100644 --- a/lang/en/format_iena.php +++ b/lang/en/format_iena.php @@ -99,3 +99,4 @@ $string['message_dist'] = "distance learning mail"; $string['message_dist_desc'] = "Configure default blended course message"; $string['message_default_dist'] = "Default message distance learning"; $string['formatenabled']="Course completion is disabled. You can enable it in the \"Course completion\" section here: "; +$string['selectedActivities']="selected"; \ No newline at end of file diff --git a/lang/fr/format_iena.php b/lang/fr/format_iena.php index 6fc21a4f8f066b447de7b43f2f858bcd7e75d113..00614fe8e19f0a43049b77f50b197d4d233ab9d9 100644 --- a/lang/fr/format_iena.php +++ b/lang/fr/format_iena.php @@ -98,4 +98,5 @@ $string['message_pres_desc'] = "Paramétrez le message qui sera envoyé par déf $string['message_dist'] = "Message distanciel"; $string['message_dist_desc'] = "Paramétrez le message qui sera envoyé par défaut pour un cours à distance"; $string['message_default_dist'] = "message par défaut distance"; -$string['formatenabled']="L'achèvement de cours n'est pas activé. Vous pouvez l'activer dans la section \"Achèvement de cours\" des paramètres du cours : "; \ No newline at end of file +$string['formatenabled']="L'achèvement de cours n'est pas activé. Vous pouvez l'activer dans la section \"Achèvement de cours\" des paramètres du cours : "; +$string['selectedActivities']="sélectionnée(s)"; \ No newline at end of file diff --git a/styles.css b/styles.css index 1dc13c03d59df6929e11bbb3142a0ccc489e7bbe..68bd43056b4769f04b1d99a7760af0e55c66504c 100644 --- a/styles.css +++ b/styles.css @@ -994,4 +994,45 @@ th.first-column-iena, th.second-column-iena, th.actions-column-iena, th.third-co #count-selected-students{ margin-top: 10px; +} + +.iena-custom-dropdown{ + border-radius: 0 5px 5px 0; + border: 1px solid #e9ecef; + min-width: 11rem; +} + +.iena-custom-dropdown button{ + border-radius: 0 5px 5px 0; + width: 100%; +} + +.iena-custom-dropdown .dropdown-menu{ + border-radius: 0 0 0.5rem 0.5rem; + width:100%; +} + +.iena-custom-dropdown .dropdown-menu label{ + justify-content: left!important; + +} + +.iena-custom-dropdown .dropdown-menu label input[type="checkbox"]{ + margin: 0 5px 0 7px; +} + +.iena-custom-dropdown .dropdown-text{ + text-align: left; +} +.iena-dynamic-options{ + list-style: none; + padding: 0; + margin-left: 0; +} + +.dropdown-menu .divider{ + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; } \ No newline at end of file diff --git a/suivi_unit.php b/suivi_unit.php index 5c69804c9995ea12005e736eaf572847e947f115..08f25e786c9c7db718ccac5dfdebe82d0086dc1c 100644 --- a/suivi_unit.php +++ b/suivi_unit.php @@ -365,7 +365,7 @@ if (isset($_POST['action']) && !empty($_POST['action'])) { $data["msg_success"] = $msg; } - } +} $renderer = $PAGE->get_renderer('format_iena'); $renderer->display_completion($data); diff --git a/templates/suivi.mustache b/templates/suivi.mustache index 7c54138aeb7acd9b6337addbeac39b4e98db5c7f..19ea55ae04203d6740740f50a95bffc09b20d97c 100644 --- a/templates/suivi.mustache +++ b/templates/suivi.mustache @@ -43,6 +43,29 @@ </select> </div> + <label class="sr-only" for="activity-select">Activités</label> + <div class="input-group"> + <div class="input-group-prepend"> + <div class="input-group-text">Activités</div> + </div> + <div class="dropdown mr-sm-2 iena-custom-dropdown"> + <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown"><span class="dropdown-text">Toutes</span> + <span class="caret"></span></button> + <ul class="dropdown-menu dropdown-menu-form" id="iena-activities-dropdown"> + <li><label class="checkbox"><input type="checkbox" class="selectall" checked value='all'>Toutes les activités</label></li> + <li class="divider"></li> + <ul class="iena-dynamic-options"> + {{#modules}} + {{#visible}} + <li><label class="checkbox"><input type="checkbox" name="options[]" value={{id}} class="option justone">{{displayname}}</label></li> + {{/visible}} + {{/modules}} + </ul> + </ul> + </div> + + </div> + <label class="sr-only" for="group-select">Groupes</label> <div class="input-group"> <div class="input-group-prepend">