From 2c9cb0389062a7b6c4c7a52e946d27fd6445baa7 Mon Sep 17 00:00:00 2001
From: Myriam Delaruelle
 <Myriam Delaruelle@bdn-un-mdelarue.ad.univ-lorraine.fr>
Date: Wed, 27 Oct 2021 09:54:56 +0200
Subject: [PATCH] Optimisation - display button won't fetch completion from db
 anymore

---
 entity/course_format_iena_completion.php      |  5 +--
 .../course_format_iena_section_ressources.php | 15 ---------
 renderer.php                                  | 33 +++++++++++--------
 3 files changed, 23 insertions(+), 30 deletions(-)

diff --git a/entity/course_format_iena_completion.php b/entity/course_format_iena_completion.php
index b3880a3..25f5944 100644
--- a/entity/course_format_iena_completion.php
+++ b/entity/course_format_iena_completion.php
@@ -29,8 +29,8 @@ class course_format_iena_completion {
 
 	/**
 	 * Get completion by sections
-	 * @param type $section_names 
-	 * @param type $idSection 
+	 * @param array $section_names 
+	 * @param array $idSection 
 	 * @return type
 	 */
 	public static function get_completion_by_section($section_names, $idSection) {
@@ -49,6 +49,7 @@ class course_format_iena_completion {
 		$modinfos_cms = $fast_modinfo->get_cms();
 
 		$modules = [];
+		//Il récupère les modules qui ne sont pas en cours de suppression, qui ont l'achèvement d'activité, et qui sont visibles pour l'user
 		foreach ($modinfos_cms as $cm) {
 			$module = $completion->get_data($cm, true, $USER->id, $fast_modinfo);
 			$module->url = "$CFG->wwwroot/mod/$cm->modname/view.php?id=$cm->id";
diff --git a/entity/course_format_iena_section_ressources.php b/entity/course_format_iena_section_ressources.php
index 0bb06ec..30e4fcd 100644
--- a/entity/course_format_iena_section_ressources.php
+++ b/entity/course_format_iena_section_ressources.php
@@ -124,21 +124,6 @@
 					AND visibleoncoursepage = 1
 					AND completion != 0', array($id_section));
 			}
-
-			// if ($course->restrictedbreadcrum == 1) {
-			// 	// ne requête que les sections qui possèdent des activités suivies dans le suivi de progression pour la barre de progression
-			// 	$requete = $DB->get_records_sql('SELECT cm.id FROM {course_modules} as cm
-			// 		INNER JOIN {format_iena_settings} as iena on cm.id = iena.cmid
-			// 		WHERE cm.section = ? 
-			// 		AND cm.visible = 1
-			// 		AND iena.hide = 1
-			// 		AND cm.deletioninprogress = 0
-			// 		AND cm.completion != 0', array($id_section));
-			// } else {
-			// 	$requete = $DB->get_records_sql('SELECT id FROM {course_modules} WHERE section = ? AND deletioninprogress = 0
-			// 		AND visible = 1
-			// 		AND completion != 0', array($id_section));
-			// }
 			
 			$ressources = array();
 			$i = 0;
diff --git a/renderer.php b/renderer.php
index bc665d1..6e3b78c 100644
--- a/renderer.php
+++ b/renderer.php
@@ -131,16 +131,16 @@ class format_iena_renderer extends format_topics_renderer{
 
 	/**
 	 * Add style attributes, classes (useless?), format section summary and add the hidden/restricted message 
-	 * @param type $section 
-	 * @param type $course 
-	 * @param type $onsectionpage 
+	 * @param StdClass $section 
+	 * @param StdClass $course 
+	 * @param bool $onsectionpage 
 	 * @param type|null $sectionreturn 
 	 * @param type|bool $iena 
 	 * @param type $groups
 	 * @return type
 	 */
-	protected function get_section_header($section, $course, $onsectionpage, $sectionreturn = null, $iena = false, $groups=false){
-	
+	protected function get_section_header($section, $course, $onsectionpage, $mods, $sectionreturn = null, $iena = false, $groups=false){
+		
 		global $PAGE, $CFG, $COURSE, $USER;
 		$section_entity = new course_format_iena_sections();
 		$o = '';
@@ -218,13 +218,20 @@ class format_iena_renderer extends format_topics_renderer{
 		} else {
 			$section->date = "";
 		}
-
+		
 		//Bouton de suivi dans chaque section : si pas d'activités suivies on n'affiche pas le bouton
 		if (has_capability('course/iena:suivi', $context = context_course::instance($COURSE->id), $USER->id)) {
 			$ressources_entity = new course_format_iena_section_ressources();
-			$modules = $ressources_entity->get_ressources_completion_on_by_id_section($section->id);
-			$nb_modules = count($modules);
-			if($nb_modules>0){
+			//$modules = $ressources_entity->get_ressources_completion_on_by_id_section($section->id);
+			$display_button=false;
+			foreach ($mods->get_cms() as $cm) {
+				if($cm->completion>0 && $cm->section==$section->id){
+					$display_button=true;
+					break;
+				}
+			}
+			//$nb_modules = count($modules);
+			if($display_button){
 				//si trop d'étudiants on va afficher le premier groupe dans le suivi
 				if($this->count_students($context)>299 && count($groups)>0){
 					$section->link_suivi = $CFG->wwwroot . "/course/format/iena/suivi_unit.php?courseid=" . $COURSE->id . "&sectionid=" . $section->id . "&groupid=".reset($groups)->id;
@@ -238,8 +245,7 @@ class format_iena_renderer extends format_topics_renderer{
 			
 		}
 		
-
-
+	
 		return $section;
 	}
 
@@ -746,7 +752,7 @@ class format_iena_renderer extends format_topics_renderer{
 					continue;
 				}
 				if (!$thissection->available && !empty($thissection->availableinfo)) {
-					$thissection= $this->get_section_header($thissection, $course, false, 0, $groups);
+					$thissection= $this->get_section_header($thissection, $course, false,$modinfo, 0, $groups);
 					
 					continue;
 				}
@@ -756,7 +762,7 @@ class format_iena_renderer extends format_topics_renderer{
 					continue;
 				}
 			}
-			$thissection=$this->get_section_header($thissection, $course, false, 0, true, $groups);
+			$thissection=$this->get_section_header($thissection, $course, false, $modinfo,0, true, $groups);
 
 			if ($thissection->uservisible) {
 				$thissection->resources= $this->courserenderer->course_section_cm_list($course, $thissection, 0);
@@ -778,6 +784,7 @@ class format_iena_renderer extends format_topics_renderer{
 		if($editing){
 			$sections['link_add_sections']=new moodle_url('/course/changenumsections.php', ['courseid' => $course->id, 'insertsection' => 0, 'increase' => false, 'sesskey' => sesskey(), 'sectionreturn' => 0]);
 		}
+
 		echo $this->get_view_iena_new($course, $nameSections, $idSections);
 		echo $this->render_from_template('format_iena/sections', $sections);
 		
-- 
GitLab