diff --git a/amd/build/suivi.js b/amd/build/suivi.js index 7878e86d39a63129e4fb53f72887fe88814de84c..a98f7f95b6edc397f7e857e5980b503f87f4d877 100644 --- a/amd/build/suivi.js +++ b/amd/build/suivi.js @@ -77,11 +77,26 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], }); //initActivityFilter(); }, + registerSelectAllGroupsFilter:function(){ + $('.selectallgroups').click(function() { + if ($(".selectallgroups").is(':checked')) { + checkAllGroupsFilter(); + } else { + $('.group-option').prop('checked', false); + var message=str.get_string('selectedActivities', 'format_iena'); + $.when(message).done(function(localizedEditString) { + $(".group-dropdown-text").html('0 '+localizedEditString); + }); + changeGroup(); + } + }); + }, initTable:function(){ initActivityFilter(false); displayTotalActivitiesFilter(false); displayActivities(false); - initGroupFilter(false) + initGroupFilter(false); + registerGroupFilter(); changeSection(false); reloadTable(data); @@ -131,16 +146,21 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], } function changeGroup(){ - completeUrl=getCompleteUrl(); + var completeUrl=getCompleteUrl(); + var groupscheckboxes= $('input[name="groupoptions[]"]:checked'); + var groupsid=[]; + for (var i = 0; i < groupscheckboxes.length; i++) { + groupsid.push(groupscheckboxes[i].value); + } loadMessage("loading"); $.ajax({ url: completeUrl, - data: {action: 'test'}, + data: {action: 'fetchgroups', groupsid:groupsid}, type: 'post', success: function(request) { - console.log(request); + data=calcPercentage(JSON.parse(request)); - initGroupFilter(); + //initGroupFilter(); changeSection(); } }); @@ -511,25 +531,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], return data; } - //Evenement pour le selectall : créé une seule fois au chargement de la page - /*function registerSelectAllActivitiesFilter(){ - $('.selectall').click(function() { - if ($(".selectall").is(':checked')) { - checkAllActivitiesFilter(); - displayActivities(); - } 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'); - displayActivities(); - } - }); - initActivityFilter(); - }*/ - //On va recharger dynamiquement les options donc on doit recréer les événements à chaque fois qu'on change de section function registerActivityFilter(){ @@ -614,12 +615,9 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], var a = $("input[type='checkbox'].justone-group"); if(a.length == a.filter(":checked").length){ $('.selectallgroups').prop('checked', true); - $(".select-text").html(' Deselect'); } else { - $('.selectallgroups').prop('checked', false); - $(".select-text").html(' Select'); } //displayTotalActivitiesFilter(); //displayActivities(); @@ -649,12 +647,20 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'], } } } - } //displayTotalActivitiesFilter(); //displayActivities(); } + //Coche toutes les activités quand on change de section + function checkAllGroupsFilter(){ + $('.selectallgroups').prop('checked', true); + $('.group-option').prop('checked', true); + changeGroup(); + $(".select-text").html(' Deselect'); + + } + }); diff --git a/styles.css b/styles.css index 59c3846d40343ba790da0c334b5587db58454e39..e74d2fb1c1db6327442c1f8cf9ce552be50279be 100644 --- a/styles.css +++ b/styles.css @@ -1094,13 +1094,13 @@ th.first-column-iena, th.second-column-iena, th.actions-column-iena, th.third-co top: 13px; } -.iena-dynamic-options{ +.iena-dynamic-options, .iena-dynamic-activities{ list-style: none; padding: 0; margin-left: 0; } -.iena-dynamic-options label{ +.iena-dynamic-options label, .iena-dynamic-activities label{ white-space: nowrap; text-overflow: ellipsis; width: 94%; diff --git a/suivi_unit.php b/suivi_unit.php index 2d229dd6a49798805ab1900e29168784e46d8ead..b6cd3f16d43ddce91a66a3307d515ff7742e3134 100644 --- a/suivi_unit.php +++ b/suivi_unit.php @@ -114,7 +114,7 @@ function format_progress($progress, $modules, $groups, $activegroupids, $actives $progressstudent->email = $proginfo->email; $progressstudent->progress = array(); $progressstudent->report_link = $CFG->wwwroot . "/report/outline/user.php?id=" . - $progressstudent->id . "&course=" . $COURSE->id . "&mode=outline"; + $progressstudent->id . "&course=" . $COURSE->id . "&mode=outline"; $progressstudent->message_link = $CFG->wwwroot . "/message/index.php?id=" . $progressstudent->id; //if ($activegroupid == 0) { @@ -228,13 +228,13 @@ function set_filters($data, $filters, $symbols, $sections, $groups, $currentuser return $data; } -function set_data($data, $modules, $progress, $groups, $activegroupid, $activesectionid, $listoptions) { +function set_data($data, $modules, $progress, $groups, $activegroupsids, $activesectionid, $listoptions) { global $COURSE, $USER, $CFG; $data["modules"] = $modules; $countmodules = count($data["modules"]); - $data["students"] = format_progress($progress, $modules, $groups, $activegroupid, $activesectionid); + $data["students"] = format_progress($progress, $modules, $groups, $activegroupsids, $activesectionid); $countstudents = count($data["students"]); if ($countstudents > 0 && $countmodules > 0) { @@ -335,47 +335,43 @@ if (!has_capability('course/iena:suivi', $context = context_course::instance($co exit; } -if (isset($_POST['groupids'])) { - $activegroupids = $_POST['groupids']; + + +if (isset($_POST['groupsid'])) { + $activegroupsids = $_POST['groupsid']; } else { - $activegroupids = [0]; + $activegroupsids = array(0); } -/*$progressrequest = $completion->get_progress_all( - '', - array(), - $activegroupid, - 'u.lastname ASC, u.firstname ASC', - '', - '', - $context - ); - - */ - + $cache = cache::make('format_iena', 'students'); -if($cache->get($activegroupids) !== false){ - $progress=$cache->get($activegroupids); -} -else{ - $arrayprogressgroups=array(); - //for($i=0; $i<count($activegroupids); $i++){ - $progressrequest = $completion->get_progress_all( + +//Si le progrès de chacun des groupes existe déjà en cache on va les charger, sinon on les récupère dans la BDD et on les stocke +$arrayprogress=array(); +for($i=0; $i<count($activegroupsids); $i++){ + if($cache->get($activegroupsids[$i]) !== false){ + $progress=$cache->get($activegroupsids[$i]); + + + } + else{ + $progressrequest = $completion->get_progress_all( '', array(), - 0, + $activegroupsids[$i], 'u.lastname ASC, u.firstname ASC', '', '', $context ); - //array_push($arrayprogressgroups, $progressrequest); - //} - - $progress=$cache->set($activegroupids, $progressrequest); - - + $cache->set($activegroupsids[$i], $progressrequest); + $progress=$progressrequest; + } + $arrayprogress=(object) array_unique(array_merge((array) $arrayprogress, (array) $progress), SORT_REGULAR); } + + + $activesectionid = 0; // Section du get acquise depuis le clic sur l'indicateur dans la page du cours, // section depuis laquelle on a cliqué sur le bouton pour voir le suivi. @@ -387,20 +383,14 @@ if (isset($_GET['sectionid'])) { $groups = groups_get_all_groups($COURSE->id, 0, 0, 'g.*', true); $renderer = $PAGE->get_renderer('format_iena'); +//Si on cherche les détails d'une activité if (isset($_POST['action']) && $_POST['action'] == "details") { require_once($CFG->libdir . '/gradelib.php'); - // Si on cherche les détails d'une activité $data = []; $idetu=$_POST['idetudiant']; $idmodule=$_POST['idmodule']; $modinfo = get_fast_modinfo($COURSE->id, $idetu); - - $cm = $modinfo->get_cm($idmodule); - - - - //Utile ? $completioninfo = new \completion_info($COURSE); $completiondetails = new cm_completion_details($completioninfo, $cm, $idetu); @@ -446,7 +436,7 @@ if (isset($_POST['action']) && $_POST['action'] == "details") { $data =array(); $data['url']=strval($cm->url); $data['completion']=strval($cm->completion); - $data["grades"]=$lastgrade; + $data["grades"]=$lastgrade; $data["customcompletion"]=$cm->customdata; $data["completioninfos"]=$activityhtml; $data["completionstate"]=$completiondetails->get_overall_completion(); @@ -455,23 +445,22 @@ if (isset($_POST['action']) && $_POST['action'] == "details") { echo json_encode($data); } -// If a post is sent trought the page --> Si on change les filtres, le template est appelé en JS +// If a post is sent trought the page --> Si on change les filtres (de groupes), le template est appelé en JS else if (isset($_POST['action']) && !empty($_POST['action'])) { // Si on change les filtres. $data = []; - $progress=$cache->get($activegroupids); - $modules = get_activities($completion, $activesectionid); - $data = set_data($data, $modules, $progress, $groups, $activegroupids, $activesectionid, $listoptions); + $data = set_data($data, $modules, $arrayprogress, $groups, $activegroupsids, $activesectionid, $listoptions); echo json_encode($data); } else { - //Si on cherche les détails d'une activité + init_page($course, $PAGE); echo $OUTPUT->header(); - $progress=$cache->get($activegroupids); + //$progress=$cache->get($activegroupids); + $progress=$arrayprogress; $data = []; //Si la complétion du cours n'est pas activée on redirige l'enseignant vers l'interface pour l'activer if(!$COURSE->enablecompletion){ @@ -486,7 +475,7 @@ else if (isset($_POST['action']) && !empty($_POST['action'])) { $modules = get_activities($completion, $activesectionid); //Répartit les groupes en "mes groupes" et "les groupes dont je ne fais pas partie" - $groupsall = get_groups($context, $activegroupids, $groups); + $groupsall = get_groups($context, $activegroupsids, $groups); if (isset($groupsall->current_user_groups) && !empty($groupsall->current_user_groups)) { $currentusergroups = $groupsall->current_user_groups; @@ -495,7 +484,7 @@ else if (isset($_POST['action']) && !empty($_POST['action'])) { $sections = get_sections($activesectionid); $data = set_filters($data, $filters, $symbols, $sections, array_values($groups), $groupsall->current_user_groups, $groupsall->othergroups, $activesectionid); - $data = set_data($data, $modules, $progress, $groups, $activegroupids, $activesectionid, $listoptions); + $data = set_data($data, $modules, $arrayprogress, $groups, $activegroupsids, $activesectionid, $listoptions); if (isset($_GET["msg_success"])) { $msg = $_GET["msg_success"]; diff --git a/templates/suivi.mustache b/templates/suivi.mustache index 118f89ab24e513d5850c02dc6b45f62d076a091c..2a866bb2ff931f340e1c20e6e4d683f8ea5c8173 100644 --- a/templates/suivi.mustache +++ b/templates/suivi.mustache @@ -77,7 +77,7 @@ </div> <div class="dropdown mr-sm-2 iena-custom-dropdown" id="group-select" name="groupid"> <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown"> - <span class="dropdown-text">Tous les groupes</span> + <span class="group-dropdown-text">Tous les groupes</span> <span class="caret"></span></button> <ul class="dropdown-menu dropdown-menu-form" id="iena-group-dropdown"> <li> @@ -90,7 +90,7 @@ </optgroup> <ul class="iena-dynamic-options"> {{#current_user_groups}} - <li><label class="checkbox"><input type="checkbox" name="groupoptions[]" value={{id}} class="groupe-option justone-group">{{name}}</label></li> + <li><label class="checkbox"><input type="checkbox" name="groupoptions[]" value={{id}} class="group-option justone-group">{{name}}</label></li> {{/current_user_groups}} </ul> @@ -100,7 +100,7 @@ </optgroup> {{#othergroups}} - <li><label class="checkbox"><input type="checkbox" name="groupoptions[]" value={{id}} class="groupe-option justone-group">{{name}}</label></li> + <li><label class="checkbox"><input type="checkbox" name="groupoptions[]" value={{id}} class="group-option justone-group">{{name}}</label></li> {{/othergroups}} </ul> @@ -173,6 +173,7 @@ require(['format_iena/suivi', 'core/templates'], function(module) { module.registerFilters(); module.registerSubmit({{{ data }}}); module.registerSelectAllActivitiesFilter(); + module.registerSelectAllGroupsFilter(); module.initTable(); }); {{/js}}