Commit 271bf55e authored by Thomas Fradet's avatar Thomas Fradet

Merge branch 'dev'

parents 8d957c50 7d786514
......@@ -23,7 +23,7 @@ Les ronds de couleur qui indiquent l'état d'achèvement des activité est modif
Toute la barre de progression ne base ses informations que sur les activités qui ont un suivi d'achèvement. L'ancien système de suivi à paramétrer en parallèle du suivi d'achèvement n'est plus utilisé.
La largeur des labels contenant le nom des sections est fixée à 300px afin que les ronds à droite soient toujours alignés (but esthétique). La largeur correspond à un nom de section de 5 mots environ.
La largeur des labels contenant le nom des sections est fixée à 300px afin que les ronds à droite soient toujours alignés. La largeur correspond à un nom de section de 5 mots environ.
## Pourcentage de progression dans les entêtes de section
......@@ -33,7 +33,7 @@ Le pourcentage de progression dans les entêtes de section est juste et ne peut
### Tableau de suivi (enseignant)
A présent, toutes les activités sous suivi d'achèvement apparaissent dans le tableau et seulement celles-ci. La sélection des activités à suivre n'existe plus car elle était un doublon du suivi d'achèvement et avait une faible plus-value. Pour qu'une activité apparaisse il faut activer le suivi d'achèvement.
A présent, toutes les activités sous suivi d'achèvement apparaissent dans le tableau et seulement celles-ci. La sélection des activités à suivre n'existe plus car elle était un doublon du suivi d'achèvement natif de Moodle et avait une faible plus-value. Pour qu'une activité apparaisse il faut activer le suivi d'achèvement.
Les activités cachées mais disponibles s'affichent forcément dans la barre de progression tant qu'elles sont sous suivi d'achèvement. Sur le principe, toute activité pour laquelle on a jugé bon d'activer le suivi d'achèvement est bien censée apparaître dans les tableau de suivi de l'étudiant et de l'enseignant.
......@@ -54,7 +54,7 @@ Les cases sont colorées selon l'état d'achèvement selon les mêmes règles qu
La performance est améliorée, notamment lors de l'affichage d'un seul groupe (au lieu de tous les étudiants).
La sélection d'étudiants en vue d'envoyer un message est préservée en utilisant le filtre de section et le filtre de pourcentage d'achèvement, mais pas le filtre de groupe, ce qui n'aurait pas d'intérêt en principe de toutes façon. On peut donc appliquez différents filtres de section et de % d'achèvement en sélectionnant au fur et à mesure plusieurs étudiants puis leur envoyer un message.
La sélection d'étudiants en vue d'envoyer un message est préservée en utilisant le filtre de section et le filtre de pourcentage d'achèvement, mais pas le filtre de groupe. On peut donc appliquez différents filtres de section et de % d'achèvement en sélectionnant au fur et à mesure plusieurs étudiants puis leur envoyer un message.
Le filtre sur le degré d'achèvement est plus précis. Il permet de sélectionner tous, = 100%, = 0%, < 25%, < 50%, < 100% et >= 50%, >= 25%, >= 0%.
......@@ -79,6 +79,8 @@ Le score détaillé de l'étudiant (barre de progression) et le score présent d
Le score présent dans l'entête de chaque section s'affiche dès que la section comporte des activités sous suivi d'achèvement, même si aucune n'est effectuée (score de 0%).
---
# 12/02/19
## Entête du cours
......@@ -103,3 +105,44 @@ Lors de l'envoi d'un message à certains étudiants sélectionnés, si aucun des
Correction du fait que le filtre affichait >=0 au lieu de >0.
# 23/05/2019
__MAJ en 3.7__
## Suivi des étudiants
### Tableau de suivi
Le téléchargement du tableau de suivi inclus les groupes même quand tout le tableau est téléchargé. Cette opération peut être longue (+ de 10 secondes), mais des mécanismes existent pour éviter que des responsables de groupes chargent la vue pour tous les groupes dans des cours volumineux (plusieurs centaines d'étudiants).
Le texte explicatif du tableau à téléchargé est amélioré pour expliquer la notation (0, 1, 0.5 et 2).
L'envoi de message à tous les étudiants sélectionné prend bien en compte le filtre et le groupe.
### Message quand pas d'activité à suivre
Lorsqu'une section ne contient pas d'activité suivies, afficher un message au lieu de la liste des étudiants avec aucune activité en colonne et 0% pour chaque. Il indique qu'aucune activité n'est suivie pour cette section. Le message indiquant qu'aucun étudiant n'est retourné par les filtres ne peut apparaître que s'il y a des activités suivies.
## Cron
### Paramètres
[x] Changement des jours de `"*/1" à "*"` pour envoyer tous les jours.
### Notifications
Les messages ayant évolués en chat ou notifications, le cron est modifié pour envoyer des notifications.
Cliquer sur le notification envoie directement vers la section du cours considérée.
## Page du cours
### Description du cours
Le lien pour afficher l'entête ne s'affiche plus s'il n'y a pas de description du cours. Les descriptions vides type `<p><br></p>` que les WYSIWYG de MOODLE aiment bien faire ne s'affichent pas non plus.
## Divers
Nettoyage du code.
Suppression de paramètres de cours inutiles.
......@@ -12,7 +12,7 @@ This plugin is a new course format for MOODLE. It change the course page interfa
## Compatibility
MOODLE 3.5
MOODLE 3.7
## Contribution
......@@ -26,6 +26,10 @@ Pour tout autre question : <iena-contact@univ-lorraine.fr>.
Other : <iena-contact@univ-lorraine.fr>.
## Installation
Ce plugin _doit_ être installé au chemin suivant : `/course/format/iena`.
## Activation et paramétrage
Rendez-vous dans les paramètres (généraux) du cours et sélectionnez ce format de cours provisoirement nommé "Format de cours hybride". Une fois sélectionné, vous pourrez ajuster les paramètres propres à ce format de cours.
......@@ -34,17 +38,19 @@ Rendez-vous dans les paramètres (généraux) du cours et sélectionnez ce forma
### Présentation du cours
Le cours est présenté d'une manière plus structurée et claire permetant une meilleure lecture par l'étudiant.
Le cours est présenté d'une manière plus fortement structurée permetant une meilleure lecture par l'étudiant.
La description du cours est visible sur la page de cours. La description des sections est pliable / dépliable pour permettre d'y placer une description longue et informative d'une séance de cours sans pour autant gêner l'affichage de la page.
La description du cours est visible sur la page de cours. La description des sections est pliable / dépliable pour permettre d'y placer une description longue et informative d'une séance de cours sans pour autant gêner, allonger, l'affichage de la page.
### Suivi de progression
Requis : avoir activé le "suivi d'achèvement d'activité" de MOODLE dans les paramètres généraux du cours (et éventuellement dans l'administration).
Requis : avoir activé le "suivi d'achèvement d'activité" de MOODLE dans les paramètres généraux du cours (et éventuellement dans l'administration du site).
Les ressources ou activités dont l'achèvement est paramétré (dans les paramètres de l'activité) apparaissent dans une barre de progression en haut de page pour l'étudiant. Des pourcentages de progression sont disponibles pour chaque section, et des éléments colorés suivant l'état d'achèvement permettent de connaître son avancement dans le cours.
Les ressources ou activité dont l'achèvement est paramétré (dans les paramètres de l'activité) apparaissent dans une barre de progression en haut de page pour l'étudiant. Des pourcentages de progression sont disponibles pour chaque section et des éléments colorés suivant l'état d'achèvement permettent de connaître son avancement dans le cours.
L'enseignant peut accéder à un tableau de suivi par section, par groupe. Le tableau est filtrable par pourcentage d'achèvement et téléchargeable.
L'enseignant peut accéder à un tableau de suivi par section, par groupe. Le tableau est filtrable par pourcentage d'achèvement et téléchargeable. Codes couleurs dans l'interface et notation dans le tableau téléchargé :
Codes couleurs dans l'interface et notation dans le tableau téléchargé :
- Non fait : vert clair (0)
- Fait (si activité non notée) : vert foncé (1)
......@@ -55,8 +61,15 @@ Le tableau de suivi permet de sélectionner des étudiants et de leur envoyer un
### Modalités d'enseignement
Un label présence / distance et une date peut être placé dans l'entête d'une section / séance de cours afin d'indiquer des changements de modalité d'enseignement dans des dispositifs hybride. Cette fonction est liée à un rappel automatique par mail.
Un label présence / distance et une date peut être placé dans l'entête d'une section / séance de cours afin d'indiquer des changements de modalité d'enseignement dans des dispositifs hybride. Cette fonction est liée à un rappel automatique par mail. La date et l'heure peuvent être spécifiées.
### Contact enseignant
Un bouton "Enseignant" en haut à droite permet à l'étudiant d'avoir la liste des enseignants du cours et de les contacter facilement par messagerie interne. Par défaut, les messages interne de MOODLE reçus hors connexion sont transmis par mail.
## Roadmap
- Refactorisation du code.
- Mode édition intégré pour l'ajout de ressources et activités et modification de leurs paramètres.
- Evolution du design de la page pour la rapprocher de l'apparence du plugin _Parcours_ plus esthétique.
- Ne pas afficher les filtres par groupe quand il n'y en a pas.
......@@ -53,9 +53,9 @@
global $CFG;
require_once($CFG->dirroot . '/course/format/iena/entity/course_format_iena_cron_action.php');
$cron_test = new \course_format_iena_cron_action();
echo 'send message start';
// echo 'send message start';
$cron_test->cron_message();
echo 'send message stop';
// echo 'send message stop';
}
}
\ No newline at end of file
......@@ -21,17 +21,5 @@
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
<TABLE NAME="format_iena_settings" COMMENT="Default comment for the table, please edit me">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="courseid" TYPE="int" LENGTH="5" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="cmid" TYPE="int" LENGTH="5" NOTNULL="false" SEQUENCE="false" COMMENT="Course module id"/>
<FIELD NAME="hide" TYPE="int" LENGTH="1" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="sectionid" TYPE="int" LENGTH="5" NOTNULL="false" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
</TABLES>
</XMLDB>
\ No newline at end of file
......@@ -51,7 +51,7 @@
'blocking' => 0,
'minute' => '0',
'hour' => '22',
'day' => '*/1',
'day' => '*',
'month' => '*',
'dayofweek' => '*'
)
......
......@@ -34,8 +34,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
include('../../lib.php');
include('../../../../config.php');
// include('../../lib.php');
// include('../../../../config.php');
class course_format_iena_cron_action
......@@ -183,19 +183,6 @@
$course = $DB->get_record('course', array('id' => $requete->course), '*', MUST_EXIST);
$messageContent = false;
//Here we can change value
/*
<h1>Rappel</h1>
<h2>$course->fullname</h2>
<p>La séance de cours <strong>$requete->name</strong> aura lieu le 00/00 à 00:00.</p>
<p>Le travail de la séance de cours à distance <strong>$requete->name</strong> est à finir pour le 00/00 à 00:00.</p>
<p>Lien vers le cours : <a href='" . $CFG->wwwroot . "/course/view.php?id=" . $course->id . "'>" . $course->fullname . "</a></p>
*/
$messageContent .= "<h1>Rappel</h1>";
$messageContent .= "<h2>$course->fullname</h2>";
......@@ -213,12 +200,6 @@
}
$messageContent .= "<p>Lien vers le cours : <a href='" . $CFG->wwwroot . "/course/view.php?id=" . $course->id . "'>" . $course->fullname . "</a></p>";
// $messageContent .= "<h1>Rappel</h1>";
// $messageContent .= "<br> Cours : " . $course->fullname;
// $messageContent .= "<br> Séance : " . $requete->name;
// $messageContent .= "<br> Date de la séance : " . $section->date_rendu;
// $messageContent .= "<br> Lien : <a href='" . $CFG->wwwroot . "/course/view.php?id=" . $course->id . "'>" . $course->fullname . "</a>";
//Create message
$message = new \core\message\message();
......@@ -226,11 +207,16 @@
$message->name = 'instantmessage';
$message->userfrom = $USER;
$message->courseid = $course->id;
$message->notification = '0';
$message->notification = '1';
$message->contexturl = $CFG->wwwroot . "/course/view.php?id=" . $course->id . "#section-" . $requete->section;
$message->contexturlname = $course->fullname;
$message->fullmessageformat = FORMAT_HTML;
$log = "Messages sent for section $requete->name of course $course->fullname (id $course->id) to ";
$studs_counter = 0;
foreach ($students as $student) {
echo get_string('snd_msg_to', 'format_iena') . $student->firstname . ' ' . $student->lastname;
$studs_counter++;
$message->userto = $student;
$studs[] =
$message->smallmessage = $messageContent;
$message->fullmessage = $messageContent;
$message->fullmessagehtml = $messageContent;
......@@ -238,6 +224,8 @@
// $message->subject = $messageContent;
message_send($message);
}
$log .= $studs_counter . " students.";
echo $log;
}
......
......@@ -110,40 +110,19 @@
// search only modules by general course format parameters
// count only if it is follewed by teacher
$if_followed = $course->restrictedbreadcrum == 1;
// $if_followed = $course->restrictedbreadcrum == 1;
// count even if it is "hidden on course page but available"
$even_if_hidden_but_available = $course->allmodulesbreadcrum == 1;
if ( $if_followed ) {
if ( $even_if_hidden_but_available ) {
$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 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 cm.visibleoncoursepage = 1
AND iena.hide = 1
AND cm.deletioninprogress = 0
AND cm.completion != 0', array($id_section));
}
if ( $even_if_hidden_but_available ) {
$requete = $DB->get_records_sql('SELECT id FROM {course_modules} WHERE section = ? AND deletioninprogress = 0
AND visible = 1
AND completion != 0', array($id_section));
} else {
if ( $even_if_hidden_but_available ) {
$requete = $DB->get_records_sql('SELECT id FROM {course_modules} WHERE section = ? AND deletioninprogress = 0
AND visible = 1
AND 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 visibleoncoursepage = 1
AND completion != 0', array($id_section));
}
$requete = $DB->get_records_sql('SELECT id FROM {course_modules} WHERE section = ? AND deletioninprogress = 0
AND visible = 1
AND visibleoncoursepage = 1
AND completion != 0', array($id_section));
}
// if ($course->restrictedbreadcrum == 1) {
......
......@@ -57,7 +57,8 @@
course_set_marker($course->id, $marker);
}
$course = course_get_format($course)->get_course();
course_create_sections_if_missing($course, range(0, $course->numsections));
// course_create_sections_if_missing($course, range(0, $course->numsections));
course_create_sections_if_missing($course, 0);
$renderer = $PAGE->get_renderer('format_iena');
if (!empty($displaysection)) {
$renderer->print_single_section_page($course, null, null, null, null, $displaysection);
......
......@@ -80,4 +80,4 @@ By definition an unnamed section is displayed as <strong>section [N]</strong>.';
$string['section'] = 'Section';
$string['hide_section'] = 'HIDE section ';
$string['show_section'] = 'SHOW section ';
$string['sdn_msg_to'] = 'Send a message to';
......@@ -80,4 +80,4 @@ By definition an unnamed section is displayed as <strong>section [N]</strong>.';
$string['section'] = 'Section';
$string['hide_section'] = 'CACHER la section ';
$string['show_section'] = 'MONTRER la section ';
$string['sdn_msg_to'] = 'Envoyer un message à ';
......@@ -41,26 +41,10 @@
static $courseformatoptions = false;
if ($courseformatoptions === false) {
// $courseconfig = get_config('moodlecourse');
// $courseformatoptions['numsections'] = array(
// 'default' => $courseconfig->numsections,
// 'type' => PARAM_INT,
// );
$courseformatoptions['viewbreadcrum'] = array(
'default' => 1,
'type' => PARAM_INT,
);
$courseformatoptions['restrictedbreadcrum'] = array(
'default' => 0,
'type' => PARAM_INT,
);
$courseformatoptions['allmodulesbreadcrum'] = array(
'default' => 0,
'type' => PARAM_INT,
);
$courseformatoptions['autoattendance'] = array(
'default' => 0,
'type' => PARAM_INT,
);
$courseformatoptions['viewiconmessage'] = array(
'default' => 1,
'type' => PARAM_INT,
......@@ -84,26 +68,11 @@
$choiceTab = array();
$choiceTab['1'] = get_string('yes', 'format_iena');
$choiceTab['0'] = get_string('no', 'format_iena');
$courseformatoptionsedit['viewbreadcrum'] = array(
'label' => get_string('hide_bread_crum', 'format_iena'),
'element_type' => 'select',
'element_attributes' => array($choiceTab),
);
$courseformatoptionsedit['restrictedbreadcrum'] = array(
'label' => "N'afficher les activités dans la progression que si elles sont suivies dans une section.",
'element_type' => 'select',
'element_attributes' => array($choiceTab),
);
$courseformatoptionsedit['allmodulesbreadcrum'] = array(
'label' => "Afficher les activités cachées mais disponibles dans la barre de progression.",
'element_type' => 'select',
'element_attributes' => array($choiceTab),
);
$courseformatoptionsedit['autoattendance'] = array(
'label' => "Le bouton d'appel envoie automatiquement vers l'appel si une séance à lieu maintenant (sinon vers la liste des sessions d'appel).",
'element_type' => 'select',
'element_attributes' => array($choiceTab),
);
$courseformatoptionsedit['viewiconmessage'] = array(
'label' => get_string('hide_icon_message', 'format_iena'),
'element_type' => 'select',
......
......@@ -53,31 +53,32 @@
$_POST["date_iena"]["hour"] . ":" . $_POST["date_iena"]["minute"] . ":00";
$dateUp = date_create($dateChaine);
$data_iena = new stdClass();
if ($_POST['date_render']) {
if (isset($_POST['date_render'])) {
$dateChaine = "";
}
$data_iena->date_rendu = $dateChaine;
$data_iena->presence = $_POST['presence'];
$data_iena->id_section = $sectionId;
if ($_POST['day_same']) {
if (isset($_POST['day_same'])) {
$data_iena->day_same = $_POST['day_same'];
} else {
$data_iena->day_same = 0;
}
if ($_POST['day_before']) {
if (isset($_POST['day_before'])) {
$data_iena->day_before = $_POST['day_before'];
} else {
$data_iena->day_before = 0;
}
if ($_POST['day_after']) {
if (isset($_POST['day_after'])) {
$data_iena->day_after = $_POST['day_after'];
} else {
$data_iena->day_after = 0;
}
$data_iena->nb_days_before = $_POST['nb_days_before'];
$data_iena->nb_days_after = $_POST['nb_days_after'];
$data_iena->hide = $_POST['hide'];
// $data_iena->hide = $_POST['hide'];
$data_iena->hide = false;
$testIfsection = $DB->get_record('format_iena', array('id_section' => $sectionId), '*');
if ($testIfsection == false) {
......@@ -91,7 +92,7 @@
$data['name'] = $_POST['name'];
$data['summary'] = $_POST['summary']['text'];
$DB->update_record('course_sections', $data);
rebuild_course_cache($courseid, true);
rebuild_course_cache($COURSE->id, true);
$link = $CFG->wwwroot . '/course/view.php?id=' . $courseID;
header("Location: {$link}");
exit;
......
......@@ -99,9 +99,9 @@
if ($PAGE->user_is_editing()) {
$o .= $this->output->heading($sectionname, 3, 'sectionname' . $classes);
}
if ($course->showdefaultsectionname) {
$o .= $this->output->heading($sectionname, 3, 'sectionname' . $classes);
}
// if ($course->showdefaultsectionname) {
// $o .= $this->output->heading($sectionname, 3, 'sectionname' . $classes);
// }
// if (!$iena) { $o .= $sectionname; }
$context = context_course::instance($course->id);
......@@ -405,7 +405,10 @@
// nouvelle génération du header
$view = "";
require_once($CFG->dirroot . '/course/format/iena/entity/course_format_iena_completion.php');
// return false if completion disabled (site or course)
$cpl = course_format_iena_completion::get_completion_by_section($nameSection, $idSection);
/* Passer le calcul de complétion de la classe course_format_iena_completion à part à la vue qui fait le header permet de ne pas récupérer deux fois les mêmes informations. */
......@@ -506,20 +509,25 @@ foreach ($htmlsection as $section) {
continue;
}
$param_section = $section_entity->get_section_settings_by_id_section($idSection[$i]);
if ($param_section->presence && $i != 0) {
if ($param_section->presence == 1) {
$presence = "En présence";
} else if ($param_section->presence == 2) {
$presence = "A distance";
// dates, modality and notification section parameters : false if not set.
if ($param_section !== false) {
if ($param_section->presence && $i != 0) {
if ($param_section->presence == 1) {
$presence = "En présence";
} else if ($param_section->presence == 2) {
$presence = "A distance";
}
}
}
if ($param_section->date_rendu) {
$dateUp = date_create($param_section->date_rendu);
$date = $dateUp->format("j/m H:i");
$date_jour = $dateUp->format("j/m");
$date_heure = $dateUp->format("H:i");
$dateUp = $dateUp->getTimestamp();
if ($param_section->date_rendu) {
$dateUp = date_create($param_section->date_rendu);
$date = $dateUp->format("j/m H:i");
$date_jour = $dateUp->format("j/m");
$date_heure = $dateUp->format("H:i");
$dateUp = $dateUp->getTimestamp();
} else {
$date = "";
}
} else {
$date = "";
}
......@@ -535,7 +543,7 @@ foreach ($htmlsection as $section) {
<div class=\"card card_block\">
<div class=\"heading-iena set_height\">";
if ( count($cpl->sections[$i]->modules) > 0 ) {
if ( $cpl != false && count($cpl->sections[$i]->modules) > 0 ) {
$view .= "<div class='iena-percent set_height'>" . $cpl->sections[$i]->completion . "%</div>";
}
......@@ -744,7 +752,7 @@ public function print_iena_section_pages($course)
$sectionvisible = 1;
}
$htmlsection = false;
$nameSection = false;
$nameSection = [];
$idSection = false;
$introSection = false;
//var_dump($modinfo->get_section_info_all());die;
......@@ -763,10 +771,10 @@ public function print_iena_section_pages($course)
$numsections = course_get_format($course)->get_last_section_number();
// var_dump($numsections);
if ($section > numsections) {
// if ($section > $course->numsections) {
// continue;
}
// if ($section > $numsections) {
// // if ($section > $course->numsections) {
// // continue;
// }
/* if is not editing verify the rules to display the sections */
if (!$PAGE->user_is_editing() && (!has_capability('moodle/course:viewhiddensections', $context = context_course::instance($course->id), $USER->id))) {
if ($course->hiddensections && !(int)$thissection->visible) {
......@@ -785,13 +793,14 @@ public function print_iena_section_pages($course)
//Affiche le nom de la section en mode propre sans lien
$idSection[$section] = $thissection->id;
$nameSection[$section] .= $this->section_title_without_link($thissection, $course);
// $nameSection[$section] .= $this->section_title_without_link($thissection, $course);
$nameSection[$section] = $this->section_title_without_link($thissection, $course);
if ($PAGE->user_is_editing()) {
$htmlsection[$section] .= $this->section_header($thissection, $course, false, 0);
}
//$htmlsection[$section] .= $this->section_title($thissection,$course);
//$introSection[$section] .= $this->section_header($thissection, $course, false, 0);
$introSection[$section] .= $this->section_header($thissection, $course, false, 0, true);
$introSection[$section] = $this->section_header($thissection, $course, false, 0, true);
if ($thissection->uservisible) {
/* Ne pas enlever sinon le activity chooser ne fonctionne pas en JS */
$htmlsection[$section] .= "<div class='content'>";
......@@ -830,11 +839,11 @@ public function print_iena_section_pages($course)
echo $this->start_section_list();
}
if ($course->sectionposition == 0 and isset($htmlsection0)) {
if ($PAGE->user_is_editing()){
echo html_writer::tag('span', $htmlsection0, ['class' => 'above']);
}
}
// if ($course->sectionposition == 0 and isset($htmlsection0)) {
// if ($PAGE->user_is_editing()){
// echo html_writer::tag('span', $htmlsection0, ['class' => 'above']);
// }
// }
//echo $this->get_button_section($course, $sectionvisible);
//here all activities are displayed
//If we are in etition mode then we display the "BASE" page Otherwise our model
......@@ -846,10 +855,10 @@ public function print_iena_section_pages($course)
}
}
//At this stage nothing is yet displayed except the icon: Your progress
if ($course->sectionposition == 1 and isset($htmlsection0)) {
if ($PAGE->user_is_editing())
echo html_writer::tag('span', $htmlsection0, ['class' => 'below']);
}
// if ($course->sectionposition == 1 and isset($htmlsection0)) {
// if ($PAGE->user_is_editing())
// echo html_writer::tag('span', $htmlsection0, ['class' => 'below']);
// }
//Add the + and - at the end of the page to see which part of the code to really keep
if ($PAGE->user_is_editing() and has_capability('moodle/course:update', $context)) {
......
......@@ -59,23 +59,23 @@
$brutMessageContent = $course->fullname . " " . $_POST['summary']['text'];
$course_ctx = context_course::instance($courseID);
$students = get_enrolled_users($course_ctx);
$message = new \core\message\message();
$message->courseid = $course->id;
$message->component = 'moodle';
$message->name = 'instantmessage';
$message->userfrom = $USER;
$message->notification = '0';
$message->fullmessageformat = FORMAT_HTML;
// sending a notification to each students
foreach ($usersid as $userID) {
foreach ($students as $student) {
//var_dump($student);
if ($student->id == $userID) {
$message->userto = $student;
$message = new \core\message\message();
$message->courseid = $course->id;
$message->component = 'moodle';
$message->name = 'instantmessage';
$message->userfrom = $USER;
$message->notification = '0';
$message->fullmessageformat = FORMAT_HTML;
$message->subject = "Rappel : " . $course->fullname;
$message->smallmessage = $messageContent;
$message->fullmessage = $brutMessageContent;
$message->fullmessagehtml = $messageContent;
$message->userto = $student;
$messageid = message_send($message);
break;
}
......
......@@ -28,7 +28,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2019010802;
$plugin->version = 2019062101;
$plugin->requires = 2014111000;
$plugin->component = 'format_iena';
$plugin->release = "1.0";
......
......@@ -4,13 +4,13 @@ class view_course_header {
private $_content = "";
public function __construct($section_names, $idSection, $course, $progress = null) {
public function __construct($section_names, $idSection, $course, $progress = false) {
global $CFG;
$this->section_names = $section_names;
$this->idSection = $idSection;
$this->completion_total = $completion_total;
// $this->completion_total = $completion_total;
$this->course = $course;
$this->create_view($progress);
}
......@@ -19,7 +19,7 @@ class view_course_header {
// $this->get_progress_bis($this->section_names, $this->idSection, $this->course);
$prog = $progress != null ? $progress : $this->get_progress_bis($this->section_names, $this->idSection, $this->course);
$prog = $progress != false ? $progress : $this->get_progress_bis($this->section_names, $this->idSection, $this->course);
$infos = [
'progress' => $prog,
......@@ -301,44 +301,9 @@ class view_course_header {
return $array;
}
private function get_attendance_link() {
global $COURSE, $CFG, $DB, $USER;
if ( ! $this->is_teacher($USER) ) { return false; }
// 23 is the id of an attendance mod
$param['module'] = 23;
$param['course'] = $COURSE->id;
$param['deletioninprogress'] = 0;
$att_module = $DB->get_record('course_modules', $param);
if ( ! $att_module->id ) { return false; }
$attendance = new course_format_iena_attendance();
$course_sessions = $attendance->get_attendance_sessions($COURSE->id);
$attendance_session = false;
$attendance_session_group = false;
foreach ( $course_sessions as $session ) {
$begin = $session->sessdate;
$end = $session->sessdate + $session->duration;
if ( time() > $begin && time() < $end ) {
$attendance_session = $session->id;
$attendance_session_group = $session->groupid;
}
}
$course_params = course_get_format($COURSE->id)->get_course();
$attendance_session_auto = $course_params->autoattendance == 1 ? true : false;
if ( $attendance_session ) {
if ( $attendance_session_auto ) {
$attendance_link = "$CFG->wwwroot/mod/attendance/take.php?id=$att_module->id&sessionid=$attendance_session&grouptype=$attendance_session_group";
} else {
$attendance_link = "$CFG->wwwroot/mod/attendance/manage.php?id=$att_module->id&group=0";
}
} else {
$attendance_link = "$CFG->wwwroot/mod/attendance/sessions.php?id=$att_module->id&action=1";
}
return $attendance_link;
}
private function set_html($infos) {
global $CFG, $COURSE;
global $CFG, $COURSE, $USER;
// $css = file_get_contents( $CFG->wwwroot.'/course/format/iena/course-header.css' );
// $this->_content .= '<style>'.$css.'</style>';
......@@ -466,19 +431,22 @@ class view_course_header {
}
// course summary
if ( ! empty($COURSE->summary) ) {
$summary_copy = $COURSE->summary;