block_mahara_iena.php 13.1 KB
Newer Older
Thomas Fradet's avatar
Thomas Fradet committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
<?php

class block_mahara_iena extends block_base
{
	public function init()
	{
		global $CFG;
		$this->title = get_string('title_plugin', 'block_mahara_iena', $CFG->mahara_alias);
	}

	function instance_allow_multiple() {
		return false;
	}

	/**
	 * Set the applicable formats for this block to all
	 * @return array
	 */
	function applicable_formats() {
		return array('course' => true);
	}

	/**
	 * Allow the user to configure a block instance
	 * @return bool Returns true
	 */
	function instance_allow_config() {
		return true;
	}

	function has_config() {
		return true;
	}

	public function get_content() {

		global $CFG;
		global $COURSE;
		global $USER;
		global $DB;

		if ($this->content !== null) {
			return $this->content;
		}
		if (empty($this->config)) {
			$this->config = new stdClass();
		}

		$this->content = new stdClass();

		// check if user is a mahara user and can be or become a member of a mahara group
		require_once ('entity/block_mahara_iena_connexion.php');
		$connexion = new block_mahara_iena_connexion($CFG->wstoken,$CFG->base_mahara);
		$is_mahara_user = $connexion->ensure_user_exists_in_mahara($USER);

		$result = $DB->get_records_sql('SELECT * FROM {block_mahara_iena} WHERE course = ?', array($COURSE->id));

		// var_dump($result);

		// for teachers
		if (has_capability('moodle/course:update', $context = context_course::instance($COURSE->id), $USER->id)) {

Thomas Fradet's avatar
Thomas Fradet committed
63
			// if block is not instanciated, propose du create mahara group(s) for this course
Thomas Fradet's avatar
Thomas Fradet committed
64 65
			if (count($result) == 0 && $is_mahara_user) {

Thomas Fradet's avatar
Thomas Fradet committed
66
				// create one mahara group for the course
Thomas Fradet's avatar
Thomas Fradet committed
67 68 69
				$this->content->text .= '<a href="' . $CFG->wwwroot . '/blocks/mahara_iena/mahara_iena.php?courseid='
				. $COURSE->id . '" class="btn btn-block btn-primary iena-btn-big">' . get_string('create_group', 'block_mahara_iena', $CFG->mahara_alias) . '</a><p class="text-muted">Créer un groupe dans '.$CFG->mahara_alias.'.</p>';

Thomas Fradet's avatar
Thomas Fradet committed
70
				// create one mahara group for each moodle group (need groups)
Thomas Fradet's avatar
Thomas Fradet committed
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
				$groups = groups_get_all_groups($COURSE->id);
				if ( $groups == null) {
					$this->content->text .= '<button type="button" class="btn btn-block btn-primary iena-btn-big" disabled >' . get_string('create_groups_groups', 'block_mahara_iena', $CFG->mahara_alias) . '</button><p class="text-muted text-warning">Créer un groupe dans '.$CFG->mahara_alias.' pour chaque groupe du cours. <strong>Les groupes doivent exister dans le cours.</strong></p>';
				} else {
					$this->content->text .= '<a href="' . $CFG->wwwroot . '/blocks/mahara_iena/mahara_iena_groups.php?courseid='
					. $COURSE->id . '" class="btn btn-block btn-primary iena-btn-big">' . get_string('create_groups_groups', 'block_mahara_iena', $CFG->mahara_alias) . '</a><p class="text-muted">Créer un groupe dans '.$CFG->mahara_alias.' pour chaque groupe du cours. Les groupes doivent exister dans le cours et ne pas tous être vides.</p>';
				}

			} elseif ( count($result) == 0 && ! $is_mahara_user ) {
				// connect and create account in mahara for teacher before he can create groupes
				$this->content->text .= '<a target="_blank" href="'.$CFG->wwwroot . '/blocks/mahara_iena/mahara_iena_link.php?courseid=' . $COURSE->id.'&connect_mahara=true" class="btn btn-block btn-success iena-btn-big">Connexion à '.$CFG->base_mahara.'</a><p class="text-muted">Vous devez vous connecter à '.$CFG->base_mahara.' pour y initialiser votre compte avant d\'utiliser ce block.</p>';
					// $this->content->text .= "<div class=\"alert alert-warning\">Vous devez avoir un compte sur <a href=\"$CFG->base_mahara\" target=\"_blank\">$CFG->base_mahara</a> avant de pouvoir créer des groupes sur cette plateforme.</div>";
			}

		}

		// for teachers and students
		if (count($result) == 0) {
			$this->content->text .= '<button type="button" class="btn btn-block btn-primary iena-btn-big" disabled >'.get_string('acces_group', 'block_mahara_iena', $CFG->mahara_alias).'</button><p class="text-muted">Aucun groupe '.$CFG->mahara_alias.' n\'a encore été créé par l\'enseignant.</p>';
		} 
		elseif ($is_mahara_user) {
			// check if they are one mahara group per moodle group of juste one group and set link
			// user will be placed or will access the first group he has (no multiple group access)
			
			$user_groups = groups_get_user_groups($COURSE->id, $USER->id);

			$has_groups = false;
			foreach ($result as $group) {
				if ( $group->moodle_group_id != 0 ) {
					$has_groups = true;
					break;
				}
			}
			// if moodle group is not 0, their is multiple mahara groupes ($has_groups)
			// if ($has_groups) {
			// 	$result_for_group = $DB->get_records_sql('SELECT * FROM {block_mahara_iena} WHERE course = ? AND moodle_group_id = ?', array($COURSE->id, $user_groups[0][0]));
			// }

			// if their is one mahara group per moodle group and student have no group, display decline message
			if ( $has_groups && count($user_groups[0]) == 0 ) {
				$this->content->text .= '<button type="button" class="btn btn-block btn-primary iena-btn-big" disabled >Accéder au groupe sur '.$CFG->mahara_alias."</button><p class=\"text-muted\">Vous n'avez pas accès à un groupe sur <a href=\"$CFG->base_mahara\" target=\"_blank\">$CFG->base_mahara</a> car vous n'avez été placé dans aucun groupe de ce cours.</p>";
			} elseif ( $has_groups ) {
				// $mahara_group_id = reset($result_for_group)->mahara_group_id;
				// if it's null, group will be created
				// during connexion in mahara_iena_link.php, script ensure user is member of it's mahara group
				// $this->content->text .= '<a target="_blank" href="'.$CFG->wwwroot . '/blocks/mahara_iena/mahara_iena_link.php?courseid=' . $COURSE->id.'&mahara_group='.$mahara_group_id.'" class="btn btn-block btn-primary iena-btn-big">Accéder au groupe sur '.$CFG->mahara_alias.'</a>';

				/* accumule les liens vers le linker */
				$ma_links = [];

				/* pour chaque groupe moodle de l'utilisateur */
				foreach ($user_groups[0] as $user_group) {
					$mo_ma_exists = false;
					/* pour chaque association existante */
					foreach ($result as $mo_ma) {
						/* si le groupe moodle est associé à un groupe mahara */
						if ( $mo_ma->moodle_group_id == $user_group ) {
							/* stocker le nom du groupe moodle et l'id du groupe mahara */
							$ma_links[] = ["mo_gr_name" => groups_get_group_name($user_group), "mo_gr_id" => $user_group, "ma_group_id" => $mo_ma->mahara_group_id];
							$mo_ma_exists = true;
						}
					}
					/* si aucune association n'existe déjà */
					if ( $mo_ma_exists == false ) {
						/* stocker le nom du groupe moodle et un id vide du groupe mahara : le linker créera le groupe */
						$ma_links[] = ["mo_gr_name" => groups_get_group_name($user_group), "mo_gr_id" => $user_group, "ma_group_id" => ""];
					}
				}

				/* afficher la liste des groupes s'il y en a (on est déjà dans une condition où il y en a toujours en théorie) */
				if ( count($ma_links) != 0 ) {
					if ( count($ma_links) == 1 ) {
						/* si il n'y a qu'un groupe, on affiche un bouton */
						$this->content->text .= "<a target='_blank' class='btn btn-block btn-primary iena-btn-big' href='$CFG->wwwroot/blocks/mahara_iena/mahara_iena_link.php?courseid=$COURSE->id&mahara_group=" . $ma_links[0]['ma_group_id'] . "&moodle_group=" . $ma_links[0]['mo_gr_id'] . "'>Aller à mon groupe sur ".$CFG->mahara_alias."</a><p class='alert alert-secondary'>Mon groupe : ".$ma_links[0]['mo_gr_name'].".</p>";
					} elseif ( count($ma_links) > 1 && count($ma_links) <= 5 ) {
						/* si il y a entre 2 et 5 groupes inclus, on affiche une liste */
						$this->content->text .= "<p style='border-left: 2px solid #1177d1;padding-left: 0.5rem;font-weight: 600;margin-bottom: 0.5rem;'>Accéder à mon groupe sur $CFG->mahara_alias&nbsp;: </p>
						<ul class='iena-dashed p-l-0'>";
						foreach ($ma_links as $ma_link) {
							$this->content->text .= "<li>Groupe : <a target='_blank' href='$CFG->wwwroot/blocks/mahara_iena/mahara_iena_link.php?courseid=$COURSE->id&mahara_group=" . $ma_link['ma_group_id'] . "&moodle_group=" . $ma_link['mo_gr_id'] . "'>" . $ma_link['mo_gr_name'] . "</a></li>";
						}
						$this->content->text .= "</ul>";
					} elseif ( count($ma_links) > 5 ) {
						/* si il y a plus de 5 groupes, on affiche une liste pour 3 d'entre-eux puis un lien pour déplier le reste de la liste en JS */
						$this->content->text .= "<p style='border-left: 2px solid #1177d1;padding-left: 0.5rem;font-weight: 600;margin-bottom: 0.5rem;'>Accéder à mon groupe sur $CFG->mahara_alias&nbsp;: </p>
						<ul class='iena-dashed p-l-0' style='margin-bottom: 0.3rem;'>";
						$i = 0;
						foreach ($ma_links as $ma_link) {
							if ( $i <= 2 ) {
								$this->content->text .= "<li>Groupe : <a target='_blank' href='$CFG->wwwroot/blocks/mahara_iena/mahara_iena_link.php?courseid=$COURSE->id&mahara_group=" . $ma_link['ma_group_id'] . "&moodle_group=" . $ma_link['mo_gr_id'] . "'>" . $ma_link['mo_gr_name'] . "</a></li>";
							} else {
								$this->content->text .= "<li class='d-none iena-ma_group'>Groupe : <a target='_blank' href='$CFG->wwwroot/blocks/mahara_iena/mahara_iena_link.php?courseid=$COURSE->id&mahara_group=" . $ma_link['ma_group_id'] . "&moodle_group=" . $ma_link['mo_gr_id'] . "'>" . $ma_link['mo_gr_name'] . "</a></li>";
							}
							$i++;
						}
						$this->content->text .= "</ul>";
						$this->content->text .= "<a href='#' style='margin-bottom: 1rem;display: inline-block;' onclick='iena_ma_group(event)'>Voir toute la liste</a><script type='text/javascript'>function iena_ma_group(e){e.preventDefault();var lis=document.querySelectorAll('.iena-ma_group');for(var i=0;i<lis.length;i++){if(lis[i].getAttribute('class')=='d-none iena-ma_group'){lis[i].setAttribute('class', 'd-inherit iena-ma_group')}else{lis[i].setAttribute('class', 'd-none iena-ma_group')}}}</script>";
					}
				}

			} else {
				/* quand un seul groupe mahara pour tout le cours ($hasgroup à false) */
				$this->content->text .= "<a target='_blank' class='btn btn-block btn-primary iena-btn-big' href='$CFG->wwwroot/blocks/mahara_iena/mahara_iena_link.php?courseid=$COURSE->id&mahara_group=" . reset($result)->mahara_group_id . "&moodle_group=nogroups'>Aller au groupe sur ".$CFG->mahara_alias."</a>";
			}
			/* permet à l'enseignant de créer tous les groupes mahara en fonction des groupes moodle existant à un temps t. Ca n'inscrit pas les utilisateurs à part lui. */
			if ( $has_groups && has_capability('moodle/course:update', $context = context_course::instance($COURSE->id), $USER->id) ) {
Thomas Fradet's avatar
Thomas Fradet committed
177 178
				$this->content->text .= '<a id="create_all_groups" href="'.$CFG->wwwroot . '/blocks/mahara_iena/mahara_iena_groups_all.php?courseid=' . $COURSE->id . '&create_all_groups=1" class="btn btn-block btn-warning iena-btn-big">Créer tous les groupes</a><p class="text-muted">Créer manuellement tous les groupes sur '.$CFG->mahara_alias.' liés à ce cours et s\'y inscrire en tant qu\'enseignant.</p>';
				$this->content->text .= "<script>document.getElementById('create_all_groups').onclick = function (e) {e.preventDefault(); var confirm_cr_gr = confirm('ATTENTION ! Voulez-vous vraiment créer manuellement tous les groupes liés à ce cours ET VOUS Y INSCRIRE ? Attention, vous serez inscrit dans tous les groupes. Si vous ne créez pas les groupes, ils seront créé automatiquement la première fois que un des membres de chaque groupe y accèdera. '); if (confirm_cr_gr) { window.location.href = e.target.href; } };</script>";
Thomas Fradet's avatar
Thomas Fradet committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
				// $this->content->text .= '<a href="'.$CFG->wwwroot . '/blocks/mahara_iena/mahara_iena_groups_all.php?courseid=' . $COURSE->id . '" class="btn btn-block btn-warning iena-btn-big">S\'inscrire dans tous les groupes</a><p class="text-muted">S\'inscrire en tant qu\'enseignant dans tous les groupes '.$CFG->mahara_alias.' liés à ce cours.</p>';

				/* POUR PLUS TARD : liste les groupes moodle liés à mahara qui n'existent plus dans moodle */
				// foreach ($result as $record) {
				// 	var_dump($record->moodle_group_id);
				// 	var_dump(groups_group_exists($record->moodle_group_id)); /* @return bool */
				// }

			}

		}
		else {
			/* si n'est pas membre de mahara (car sinon quand on essaie d'inscrire dans un groupe par l'api un user qui n'existe pas ça bug). Si le groupe existe déjà, l'utilisateur y est inscrit. */
			$this->content->text .= '<a onclick="ma_register_click()" target="_blank" href="'.$CFG->wwwroot . '/blocks/mahara_iena/mahara_iena_link.php?courseid=' . $COURSE->id.'&connect_mahara=true" class="btn btn-block btn-success iena-btn-big">Créer son compte sur '.$CFG->mahara_alias . '</a><p class="alert alert-warning mt-2">Pour accéder au groupe '.$CFG->mahara_alias.' lié à ce cours, vous devez d\'abord vous inscrire sur '.$CFG->mahara_alias.' en cliquant sur le bouton ci-dessus, puis revenir sur cette page.</p>';
			/* recharge la page quand on y revient après avoir cliqué sur le bouton pour aller sur mahara se créer un compte */
			$this->content->text .= '<script type="text/javascript">var ma_register_clicked = false;function ma_register_click(){ma_register_clicked = true;}window.addEventListener("focus",function(){if(ma_register_clicked===true){location.reload();}});</script>';
		}

		return $this->content;

	}
}
?>