From 39bc2da5101a2d5c9b926918364a8c79531ccd55 Mon Sep 17 00:00:00 2001 From: Myriam Delaruelle <myriam.delaruelle@univ-lorraine.fr> Date: Tue, 10 Dec 2024 10:02:15 +0100 Subject: [PATCH] helper class for tracking table --- classes/output/courseformat/content.php | 1 - entity/course_format_iena_helper.php | 200 ++++++++++++++++++++++++ 2 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 entity/course_format_iena_helper.php diff --git a/classes/output/courseformat/content.php b/classes/output/courseformat/content.php index b3fa6ac..10f3633 100644 --- a/classes/output/courseformat/content.php +++ b/classes/output/courseformat/content.php @@ -107,7 +107,6 @@ class content extends content_base { $course_data['student']=true; } $summary = file_rewrite_pluginfile_urls($COURSE->summary, 'pluginfile.php', $context->id, 'course', 'summary', NULL); - $course_data['summary']=$summary; //$course_data['summary']=$COURSE->summary; $course_data['enableclickicons']=$formatoptions['enableclickicons']; diff --git a/entity/course_format_iena_helper.php b/entity/course_format_iena_helper.php new file mode 100644 index 0000000..f45f720 --- /dev/null +++ b/entity/course_format_iena_helper.php @@ -0,0 +1,200 @@ +<?php +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * + * course_format_iena_sections + * + * @package format_iena + * @copyright 2018 Softia/Université lorraine + * @author Thomas Fradet + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_format_iena_helper { + + /** + * @param $idcourse + * @return array + * @throws dml_exception + */ + public function get_activities($completion, $activesectionid) { + $activities = $completion->get_activities(); + $modules = []; + foreach ($activities as $activity) { + $module = new StdClass(); + $module->id = $activity->id; + $module->name = $activity->name; + $displayname = format_string($activity->name, true, array('context' => $activity->context)); + $module->displayname = strlen($displayname) > 50 ? mb_substr($displayname, 0, 49, 'UTF-8').'…' : $displayname; + $module->section = $activity->section; + if($activity->get_url()){ + $module->link=$activity->get_url()->out(); + } + + $modules[] = $module; + if ($activity->section == $activesectionid || $activesectionid == 0 ) { + $module->visible = true; + } else { + $module->visible = false; + } + + } + return $modules; + } + + public function get_groups($groups) { + global $USER, $COURSE; + // Groupe du GET provenant du sélecteur de la page du cours + // ou premier groupe de l'utilisateur, ou groupe 0 (tous les groupes). + $groupsall = new StdClass(); + // TODO à supprimer si pas utilisé dans le JS (mettre dans la clause IF pour éviter un appel inutile si le GET existe). + $currentusergroupsids = groups_get_user_groups($COURSE->id, $USER->id)[0]; + $currentusergroups = []; + $othergroups = []; + // Si pas de groupe dans le get ou groupe 0 (tous) mais pas le droit => premier groupe existant du user ou groupe 0 (tous). + + + // Groupes du cours avec id, nom et liste des id utilisateur de tous les + // membres (3 clefs d'un tableau de groupes : id, name, member). + + $activegroupname = ""; + + foreach ($groups as $group) { + + if (in_array($group->id, $currentusergroupsids)) { + $currentusergroups[] = $group; + } else { + $othergroups[] = $group; + } + } + + + $groupsall->othergroups = $othergroups; + $groupsall->current_user_groups = $currentusergroups; + return $groupsall; + + } + + public function get_sections($activesectionid){ + global $COURSE; + // Liste des sections du cours. + $modinfo = get_fast_modinfo($COURSE->id); + $sectionsinfoall = $modinfo->get_section_info_all(); + $sections = []; + + foreach ($sectionsinfoall as $key => $sectioninfo) { + $section = new StdClass(); + $section->id = $sectioninfo->id; + $section->name = $sectioninfo->name === null || $sectioninfo->name === '' ? 'Section ' . $key : $sectioninfo->name; + if ($section->id == $activesectionid) { + $section->selected = "selected"; + } + + $sections[] = $section; + } + return $sections; + } + + public function set_data($data, $modules, $progress, $groups, $activegroupsids, $activesectionid, $listoptions) { + global $COURSE, $USER, $CFG; + + $data["modules"] = $modules;; + $countmodules = count($data["modules"]); + $data["students"] = $this->format_progress($progress, $modules, $groups, $activegroupsids, $activesectionid); + $countstudents = count($data["students"]); + + if ($countstudents > 0 && $countmodules > 0) { + $data['count_results'] = count($data["students"]); + } + + if (has_capability('course/iena:suivi_edit', $context = context_course::instance($COURSE->id), $USER->id)) { + $data['link_bulkcompletion'] = $CFG->wwwroot . "/course/bulkcompletion.php?id=" . $COURSE->id; + } + + $data['link_classicview'] = $CFG->wwwroot . "/report/progress/index.php?course=" . $COURSE->id; + $data['link_editview']=$CFG->wwwroot . "/course/format/iena/suivi_edit.php?courseid=" . $COURSE->id; + if($listoptions->listoptions['display_groups']["value"]){ + $data["display_groups"]=1; + } + if($listoptions->listoptions['display_details']["value"]){ + $data["display_details"]=1; + } + + // Pour le téléchargement du tableau ? + /*if (!isset($data['data'])) { + $data['data'] = array(); + } + + $data['data'] = json_encode($data);*/ + return $data; + } + + public function format_progress($progress, $modules, $groups, $activegroupids, $activesectionid) { + global $CFG, $COURSE; + $students = array(); + foreach ($progress as $proginfo) { + $progressstudent = new StdClass(); + $progressstudent->firstname = $proginfo->firstname; + $progressstudent->lastname = $proginfo->lastname; + $progressstudent->id = $proginfo->id; + $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->message_link = $CFG->wwwroot . "/message/index.php?id=" . $progressstudent->id; +//var_dump($progressstudent); + //if ($activegroupid == 0) { + $progressstudent->groups = ""; + $progressstudent->groupsid=array(); + foreach ($groups as $group) { + + if (in_array($progressstudent->id, $group->members)) { + if(empty( $progressstudent->groups)){ + $progressstudent->groups .= $group->name . ""; + } + else{ + $progressstudent->groups .= ", " .$group->name . " "; + } + array_push( $progressstudent->groupsid, $group->id); + } + + } + //} + + foreach ($modules as $key => $module) { + $moduleprogress = new StdClass(); + + if (!isset($proginfo->progress[$module->id])) { + $moduleprogress->completionstate = '0'; + } else { + $moduleprogress->completionstate = $proginfo->progress[$module->id]->completionstate; + } + $moduleprogress->namemodule = $module->name; + $moduleprogress->idmodule = $module->id; + + $progressstudent->progress[$key] = $moduleprogress; + } + //On a les données de tous les étudiants, c'est ici qu'on filtre selon le groupe actif - DEPRECATED + /*if ($activegroupid == 0 || ($activegroupid>0 && in_array($activegroupid, $progressstudent->groupsid))) { + $students[] = $progressstudent; + }*/ + $students[] = $progressstudent; + + } + return $students; + } + + +} -- GitLab