From acd82fe55a4937d9f18dff8ada85a6059bbaf97a Mon Sep 17 00:00:00 2001
From: Myriam Delaruelle <myriam.delaruelle@univ-lorraine.fr>
Date: Thu, 9 Mar 2023 09:44:21 +0100
Subject: [PATCH] =?UTF-8?q?ajout=20d'un=20champ=20active=20dans=20la=20bdd?=
 =?UTF-8?q?,=20pr=C3=A9paration=20des=20templates=20pour=20l'interface=20d?=
 =?UTF-8?q?e=20gestion?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 db/install.xml                            |  39 +++---
 db/upgrade.php                            |  25 ++++
 entity/block_mahara_iena_connexion.php    |  21 +++
 mahara_iena_manage.php                    | 157 +++++++++++++++-------
 renderer.php                              |  10 ++
 templates/header_manage_groups.mustache   |  20 +++
 templates/manage_archived_groups.mustache |   4 +
 templates/manage_course_group.mustache    |   4 +
 templates/manage_groups.mustache          |  19 +--
 version.php                               |   2 +-
 10 files changed, 217 insertions(+), 84 deletions(-)
 create mode 100644 db/upgrade.php
 create mode 100644 templates/header_manage_groups.mustache
 create mode 100644 templates/manage_archived_groups.mustache
 create mode 100644 templates/manage_course_group.mustache

diff --git a/db/install.xml b/db/install.xml
index e86976c..94c0699 100644
--- a/db/install.xml
+++ b/db/install.xml
@@ -1,19 +1,20 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="blocks/mahara_iena/db" VERSION="20180710" COMMENT="XMLDB file for Moodle blocks/mahara_iena"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
->
-  <TABLES>
-    <TABLE NAME="block_mahara_iena" COMMENT="Table du block mahara_iena">
-      <FIELDS>
-        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
-        <FIELD NAME="course" TYPE="int" LENGTH="8" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
-        <FIELD NAME="mahara_group_id" TYPE="int" LENGTH="8" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
-        <FIELD NAME="moodle_group_id" TYPE="int" LENGTH="8" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
-      </FIELDS>
-      <KEYS>
-        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
-      </KEYS>
-    </TABLE>
-  </TABLES>
-</XMLDB>
+<?xml version="1.0" encoding="UTF-8" ?>
+<XMLDB PATH="blocks/mahara_iena/db" VERSION="20230306" COMMENT="XMLDB file for Moodle blocks/mahara_iena"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
+>
+  <TABLES>
+    <TABLE NAME="block_mahara_iena" COMMENT="Table du block mahara_iena">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="course" TYPE="int" LENGTH="8" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
+        <FIELD NAME="mahara_group_id" TYPE="int" LENGTH="8" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
+        <FIELD NAME="moodle_group_id" TYPE="int" LENGTH="8" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
+        <FIELD NAME="active" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="1" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+  </TABLES>
+</XMLDB>
\ No newline at end of file
diff --git a/db/upgrade.php b/db/upgrade.php
new file mode 100644
index 0000000..6aa6873
--- /dev/null
+++ b/db/upgrade.php
@@ -0,0 +1,25 @@
+<?php
+
+    
+
+function xmldb_block_mahara_iena_upgrade($oldversion) {
+    global $CFG, $DB;
+    $dbman = $DB->get_manager();
+    $result = TRUE;
+ 
+    if ($oldversion < 2023030201) {
+        // Define field active to be added to block_mahara_iena.
+        $table = new xmldb_table('block_mahara_iena');
+        $field = new xmldb_field('active', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '1');
+
+        // Conditionally launch add field enrollment.
+        if (!$dbman->field_exists($table, $field)) {
+            $dbman->add_field($table, $field);
+        }
+        upgrade_block_savepoint(true, 2023030201, 'mahara_iena');
+    }
+    
+    return $result;
+}
+
+?>
\ No newline at end of file
diff --git a/entity/block_mahara_iena_connexion.php b/entity/block_mahara_iena_connexion.php
index cc6c749..38f6e9e 100644
--- a/entity/block_mahara_iena_connexion.php
+++ b/entity/block_mahara_iena_connexion.php
@@ -324,6 +324,7 @@ class block_mahara_iena_connexion
 	* @param $mo_group_id : le groupe moodle à créer dans mahara avec au moins les clefs id et le name qui sera utilisé pour savoir sur quel cours moodle se baser pour créer le groupe mahara
 	* @return bool: erreurs ou pas
 	*/
+
 	public function ensure_user_is_mahara_group_member_new($mo_user, $ma_group_id, $mo_group_id) {
 
 		global $COURSE, $CFG, $DB;
@@ -394,6 +395,26 @@ class block_mahara_iena_connexion
 		}
 	}
 
+	/**
+	 * Archive un groupe Mahara pour la fin d'année : change les droits des anciens étudiants pour les mettre en lecture seule et permet de recréer des groupes Mahara correspondants aux groupes Arche
+	 * @param  [type] $maharaGroupId [description]
+	 * @param  [type] $courseId      [description]
+	 * @return [type]                [description]
+	 */
+	public function archiveMaharaGroup($maharaGroupId, $courseId){
+		return true;
+	}	
+
+	/**
+	 * Archive des groupes Mahara pour la fin d'année : change les droits des anciens étudiants pour les mettre en lecture seule et permet de recréer des groupes Mahara correspondants aux groupes Arche
+	 * @param  [type] $maharaGroupsId [description]
+	 * @param  [type] $courseId      [description]
+	 * @return [type]                [description]
+	 */
+	public function archiveMaharaGroups($maharaGroupsId, $courseId){
+		return true;
+	}	
+
 
 
 }
diff --git a/mahara_iena_manage.php b/mahara_iena_manage.php
index c970e8a..766882b 100644
--- a/mahara_iena_manage.php
+++ b/mahara_iena_manage.php
@@ -17,8 +17,8 @@ require_login($course, false, NULL);
 $context = context_course::instance($courseid);
 
 if (!has_capability('moodle/course:update', $context, $USER->id)) {
-	header("Location: {$_SERVER['HTTP_REFERER']}");
-	exit;
+    header("Location: {$_SERVER['HTTP_REFERER']}");
+    exit;
 }
 
 $page_title = "Gestion des groupes liés à ce cours sur " . $CFG->mahara_alias;
@@ -36,58 +36,123 @@ $mo_ma_groups = $DB->get_records_sql('SELECT * FROM {block_mahara_iena} WHERE co
 /* Tous les groupes moodle. */
 $course_groups = groups_get_all_groups($COURSE->id);
 /* Table d'affichage des informations. */
+$archived_groups=[];
+$course_group=[];
+$mahara_groups=[];
+
+
+foreach ($mo_ma_groups as $mo_ma_group) {
+    //Si le moodle_group_id=0 c'est une espace de cours unique
+    if($mo_ma_group->moodle_group_id ==0){
+        //Si le groupe est archivé on l'ajoute au tableau correspondant
+        if($mo_ma_group->active==0){
+            array_push($archived_groups, $mo_ma_group);
+        }
+        else{
+            $course_group=$mo_ma_group;
+        }
+        
+
+    }
+    //Si le moodle_group_id != 0 c'est un groupe associé à un groupe Mahara
+    else if(isset($course_groups[$mo_ma_group->moodle_group_id])) {
+        //Si le groupe est archivé on l'ajoute au tableau correspondant
+        if($mo_ma_group->active==0){
+            array_push($archived_groups, $mo_ma_group);
+        }
+        else{
+            $course_groups[$mo_ma_group->moodle_group_id]->mahara_group_id=$mo_ma_group->mahara_group_id;
+        }
+    }
+}
+//On va répartir les groupes dans leur onglet respectif : groupe unique (moodle_group_id 0), groupes liés (id du groupe moodle) et groupes archivés (active->0)
+/*foreach ($course_groups as $group) {
+    $group->name=groups_get_group_name($group->id);
+    $group->url=$CFG->wwwroot.'/group/group.php?courseid='.$COURSE->id.'&id='.$group->id;
+    $group->url_members=$CFG->wwwroot.'/group/group.php?courseid='.$COURSE->id.'&id='.$group->id;
+    
+    if($group->active==0){
+        array_push($archived_groups, $group);
+    }
+    else{*/
+
+        /* Détermine si le groupe moodle est lié à un groupe mahara. */
+        /*$group->mahara_group_id = false;
+        foreach ($mo_ma_groups as $mo_ma_group) {
+            if($mo_ma_group->moodle_group_id ==0){
+                $course_group=$mo_ma_group->mahara_group_id;
+            }
+            else ( $mo_ma_group->moodle_group_id == $group->id ) {
+                $group->mahara_group_id = $mo_ma_group->mahara_group_id;
+                break;
+            }
+        }
+        /* Si le groupe moodle est lié à un groupe mahara. */
+        /* Récupération sur mahara des infos de groupe. */
+        /*if ( $group->mahara_group_id ) {
+            
+            $params = array (
+                'groups' =>
+                array (
+                    0 =>
+                    array (
+                        'id' => $group->mahara_group_id
+                    )
+                )
+            );
+            $mahara_group = $connexion->getMaharaGroups($params);
+
+            //ON LAISSE CA DE COTE POUR LE MOMENT
+            /* USER membre du groupe mahara ? */
+            /*$group->is_ma_group_member = false;
+            foreach ($mahara_group[0]->members as $ma_group_member) {
+                if ( $ma_group_member->username == $USER->username ) {
+                    $group->is_ma_group_member = true;
+                }
+            }
+
+            /* Inscription ou désinscription du groupe mahara du USER. */
+            /*if ( $group->is_ma_group_member ) {
+                $group->url_link=$CFG->wwwroot."/blocks/mahara_iena/mahara_iena_link.php?courseid=$COURSE->id&connect_direct=true&mahara_group=".$mahara_group[0]->id."'>".$mahara_group[0]->name;
+                $group->mahara_group_name=$mahara_group[0]->name;
+
+            }*/
+/*      }
+    }
+}*/
+
+
+$tab = optional_param('t', 1, PARAM_INT);
+$tabs = [];
+$tab1_title="Espace Compact unique";
+$tab2_title="Espaces Compact par groupes";
+$tab3_title="Groupes archivés";
+$url="http://localhost/moodle/blocks/mahara_iena/mahara_iena_manage.php?courseid=7#tab-content";
+$tabs[] = new tabobject(1, new moodle_url($url, ['t'=>1]), $tab1_title);
+$tabs[] = new tabobject(2, new moodle_url($url, ['t'=>2]), $tab2_title);
+$tabs[] = new tabobject(3, new moodle_url($url, ['t'=>3]), $tab3_title);
 
 
 
-foreach ($course_groups as $group) {
-	$group->name=groups_get_group_name($group->id);
-	$group->url=$CFG->wwwroot.'/group/group.php?courseid='.$COURSE->id.'&id='.$group->id;
-	$group->url_members=$CFG->wwwroot.'/group/group.php?courseid='.$COURSE->id.'&id='.$group->id;
-	
-	/* Détermine si le groupe moodle est lié à un groupe mahara. */
-	$group->mahara_group_id = false;
-	foreach ($mo_ma_groups as $mo_ma_group) {
-		if ( $mo_ma_group->moodle_group_id == $group->id ) {
-			$group->mahara_group_id = $mo_ma_group->mahara_group_id;
-			break;
-		}
-	}
-	/* Si le groupe moodle est lié à un groupe mahara. */
-	if ( $group->mahara_group_id ) {
-		/* Récupération sur mahara des infos de groupe. */
-		$params = array (
-			'groups' =>
-			array (
-				0 =>
-				array (
-					'id' => $group->mahara_group_id
-				)
-			)
-		);
-		$mahara_group = $connexion->getMaharaGroups($params);
-		/* USER membre du groupe mahara ? */
-		$group->is_ma_group_member = false;
-		foreach ($mahara_group[0]->members as $ma_group_member) {
-			if ( $ma_group_member->username == $USER->username ) {
-				$group->is_ma_group_member = true;
-			}
-		}
-		/* Inscription ou désinscription du groupe mahara du USER. */
-		if ( $group->is_ma_group_member ) {
-			$group->url_link=$CFG->wwwroot."/blocks/mahara_iena/mahara_iena_link.php?courseid=$COURSE->id&connect_direct=true&mahara_group=".$mahara_group[0]->id."'>".$mahara_group[0]->name;
-			$group->mahara_group_name=$mahara_group[0]->name;
-
-		}
-	}
-}
-
 
 $data=array();
 $data['mahara_alias']=$CFG->mahara_alias;
 $data['page_title']=$page_title;
-$data['course_groups']=array_values($course_groups);
+
 
 
 $renderer = $PAGE->get_renderer('block_mahara_iena');
-$renderer->get_manage_groups($data);
+$renderer->get_header_manage_groups($data);
+echo $OUTPUT->tabtree($tabs, $tab);
+if ($tab == 1) {
+    $data['course_groups']=array_values($course_groups);
+    $renderer->get_manage_groups($data);
+} else if($tab == 2){
+    // Show data for course group
+    $data['course_group']=$course_group;
+    $renderer->get_manage_group($data);
+} else{
+    $data['archived_groups']=$archived_groups;
+    $renderer->get_archived_groups($data);
+}
 echo $OUTPUT->footer();
diff --git a/renderer.php b/renderer.php
index 5a84e22..e547890 100644
--- a/renderer.php
+++ b/renderer.php
@@ -7,5 +7,15 @@ class block_mahara_iena_renderer extends plugin_renderer_base {
     function get_manage_groups($data){
         echo $this->render_from_template('block_mahara_iena/manage_groups', $data);
     }
+    function get_header_manage_groups($data){
+        echo $this->render_from_template('block_mahara_iena/header_manage_groups', $data);
+    }
+
+    function get_manage_group($data){
+        echo $this->render_from_template('block_mahara_iena/manage_course_group', $data);
+    }
+    function get_archived_groups($data){
+        echo $this->render_from_template('block_mahara_iena/manage_archived_groups', $data);
+    }
 }
 
diff --git a/templates/header_manage_groups.mustache b/templates/header_manage_groups.mustache
new file mode 100644
index 0000000..b1ced3a
--- /dev/null
+++ b/templates/header_manage_groups.mustache
@@ -0,0 +1,20 @@
+<div>
+<h2>{{page_title}}</h2>
+<p>Fonctionnalités (enseignants uniquement) : </p>
+<ul>
+<li>Réserver cette interface à la gestion de cours multigroupes ?</li>
+<li>S'inscrire ou se désinscrire d'un groupe Mahara</li>
+<li class='text-muted'>Eventuellement : idem pour plusieurs à la fois (coches)</li>
+<li>Briser le lien entre un groupe Mahara existant et un groupe Moodle</li>
+<li>Lier un groupe Mahara existant à un groupe de ce cours Moodle</li>
+<li>Supprimer un groupe Mahara lié à ce cours Moodle</li>
+</ul>
+
+
+<div class='alert alert-success'><h3>Information</h3><p>Vous pouvez ici gérer les groupes de ce cours et les groupes qui y sont liés sur <em>{{mahara_alias}}</em>. </p>
+<ul><li>Normalement, les groupes de <em>{{mahara_alias}}</em>.</li>
+<li>Vous pouvez vous inscrire / désinscrire vous-même des groupes de ce cours et des groupes liés sur <em>{{mahara_alias}}</em>. Si vous n'êtes pas inscrit dans un groupe du cours mais inscrit dans le groupe correspondant sur <em>{{mahara_alias}}</em>, nous ne verrez pas apparaître ce groupe dans le bloc de liens du cours. </li></ul></p></div>
+
+
+</div>
+
diff --git a/templates/manage_archived_groups.mustache b/templates/manage_archived_groups.mustache
new file mode 100644
index 0000000..8d82475
--- /dev/null
+++ b/templates/manage_archived_groups.mustache
@@ -0,0 +1,4 @@
+<div id="tab-content">
+Hello c'est pour les groupes archivés
+</div>
+
diff --git a/templates/manage_course_group.mustache b/templates/manage_course_group.mustache
new file mode 100644
index 0000000..f7c475a
--- /dev/null
+++ b/templates/manage_course_group.mustache
@@ -0,0 +1,4 @@
+<div id="tab-content">
+Hello c'est pour le groupe unique du cours
+</div>
+
diff --git a/templates/manage_groups.mustache b/templates/manage_groups.mustache
index fec1761..fd1b0c2 100644
--- a/templates/manage_groups.mustache
+++ b/templates/manage_groups.mustache
@@ -1,21 +1,4 @@
-<div>
-<h2>{{page_title}}</h2>
-<p>Fonctionnalités (enseignants uniquement) : </p>
-<ul>
-<li>Réserver cette interface à la gestion de cours multigroupes ?</li>
-<li>S'inscrire ou se désinscrire d'un groupe Mahara</li>
-<li class='text-muted'>Eventuellement : idem pour plusieurs à la fois (coches)</li>
-<li>Briser le lien entre un groupe Mahara existant et un groupe Moodle</li>
-<li>Lier un groupe Mahara existant à un groupe de ce cours Moodle</li>
-<li>Supprimer un groupe Mahara lié à ce cours Moodle</li>
-</ul>
-
-
-<div class='alert alert-success'><h3>Information</h3><p>Vous pouvez ici gérer les groupes de ce cours et les groupes qui y sont liés sur <em>{{mahara_alias}}</em>. </p>
-<ul><li>Normalement, les groupes de <em>{{mahara_alias}}</em>.</li>
-<li>Vous pouvez vous inscrire / désinscrire vous-même des groupes de ce cours et des groupes liés sur <em>{{mahara_alias}}</em>. Si vous n'êtes pas inscrit dans un groupe du cours mais inscrit dans le groupe correspondant sur <em>{{mahara_alias}}</em>, nous ne verrez pas apparaître ce groupe dans le bloc de liens du cours. </li></ul></p></div>
-
-
+<div id="tab-content">
 
 <table class='table table-iena'>
     <tr><th>Groupe du cours</th><th style='border-right: 2px solid #dee2e6;'>Inscription</th><th>Groupe sur {{mahara_alias}}</th><th>Inscription</th></tr>
diff --git a/version.php b/version.php
index 984d9e0..8cba858 100644
--- a/version.php
+++ b/version.php
@@ -28,7 +28,7 @@
  */
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2022062700;
+$plugin->version = 2023030102;
 $plugin->requires = 2014051200;
 $plugin->component = 'block_mahara_iena';
 $plugin->release = 'v1.0';
-- 
GitLab