Skip to content

Commit

Permalink
Merge pull request #65 from gmanaud/main
Browse files Browse the repository at this point in the history
Count other teacher roles in user dashboard and teacher visit reports
  • Loading branch information
oliviervalentin authored Jun 10, 2024
2 parents 27eb238 + 65ccba9 commit b1fb31f
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 12 deletions.
5 changes: 3 additions & 2 deletions classes/task/mailing_task.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,11 @@ public function execute() {

$finalcontent .= $mailingintroduction;
$finalcontent .= $mailcontent;
$finalcontent .= get_string('mailingoutro', 'report_coursemanager');
$finalcontent .= '<br />';
$finalcontent .= get_config('report_coursemanager', 'mailing_outro');

$send = email_to_user($teacheruserinfo, $from,
get_string('mailingtitle', 'report_coursemanager'), $finalcontent);
get_config('report_coursemanager', 'mailing_title'), $finalcontent);

mtrace('Mail sent to user '.$teacher->idteacher);
}
Expand Down
30 changes: 28 additions & 2 deletions classes/task/run_teacher_visit_report_task.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,13 @@ public function execute() {

// Let's count teachers and students enrolled in course.
$allteachers = get_role_users(get_config('report_coursemanager', 'teacher_role_dashboard'), $coursecontext);
$otherteachersconfig = explode(',', get_config('report_coursemanager', 'other_teacher_role_dashboard'));
$otherteachers = [];
if (!empty(get_config('report_coursemanager', 'other_teacher_role_dashboard'))) {
foreach ($otherteachersconfig as $teacher) {
$otherteachers = $otherteachers + get_role_users($teacher, $coursecontext);
}
}

// If course is in trash category, delete all reports.
if ($course->category == get_config('report_coursemanager', 'category_bin')) {
Expand All @@ -77,7 +84,7 @@ public function execute() {
['course' => $course->id, 'report' => 'no_visit_teacher']);

// CASE 1 : if teachers are enrolled in course, test for visit.
if (count($allteachers) > 0) {
if (count($allteachers + $otherteachers) > 0) {
// As there are teachers in course, first delete "no teacher in course" report if exists.
if ($existsnoteacherincourse) {
$res = $DB->delete_records($table, ['id' => $existsnoteacherincourse->id]);
Expand All @@ -101,8 +108,27 @@ public function execute() {
}
$rescountteachervisit = array_count_values($countteachervisit);

// Now check for other teachers visits.
$countotherteachervisit = [];
// For each other enrolled teacher, check last visit in course.
foreach ($otherteachers as $teacher) {
$lastaccess = $DB->get_field('user_lastaccess', 'timeaccess',
['courseid' => $course->id, 'userid' => $teacher->id]);
// Difference between now and last access.
$diff = $now - $lastaccess;
// Calculate number of days without connection in course (86 400 equals number of seconds per day).
$timeteacher = floor($diff / 86400);
// If limit is under last_access_teacher, teacher has visited course.
if ($timeteacher <= get_config('report_coursemanager', 'last_access_teacher')) {
// Let's count a visit.
array_push($countotherteachervisit, 'visited_teacher');
}
}
$rescountotherteachervisit = array_count_values($countotherteachervisit);

// If result is empty, no teacher has visited course.
if (!isset($rescountteachervisit['visited_teacher'])) {
if (!isset($rescountteachervisit['visited_teacher'])
&& !isset($rescountotherteachervisit['visited_teacher'])) {
$data = new \stdClass();
$data->course = $course->id;
$data->report = 'no_visit_teacher';
Expand Down
6 changes: 6 additions & 0 deletions lang/en/report_coursemanager.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
$string['category_bin'] = 'Category for bin';
$string['teacherroledashboard'] = 'Teacher role in courses';
$string['teacherroledashboard_desc'] = 'Defines teacher role that can display course list in Course Manager dashabord. Default role is Moodle teacher.';
$string['otherteacherroledashboard'] = 'Other teaching roles';
$string['otherteacherroledashboard_desc'] = 'Defines other teacher roles to be considered in the dashboard teacher account and teacher visits to a course, such as non-editing teachers.';
$string['studentrolereport'] = 'Student role in courses';
$string['studentrolereport_desc'] = 'Defines student role for reports calculation. Default role is Moodle student.';
$string['category_bin_desc'] = 'If teacher deletes a course through dashboard, it is moved in this category before real deletion by admin.';
Expand Down Expand Up @@ -63,12 +65,16 @@
$string['enablestudentstask_desc'] = 'If checked, activates automated task to detect courses without students or without recent students visits.';
$string['enableorphanstask'] = 'Activate orphaned submissions report';
$string['enableorphanstask_desc'] = 'If checked, activates automated task to detect assigns with orphaned files.';
$string['mailingtitle_setting'] = 'Subject of the email';
$string['mailingtitle_setting_desc'] = 'Subject line for the mailing sent to teachers.';
$string['mailingintro_setting'] = 'Email content';
$string['mailingintro_setting_desc'] = 'Introduction of the report mailing.<br>
You can use the following variables :<br>
%userfirstname% : User\'s first name<br>
%userlastname% : User\'s last name<br>
%coursemanagerlink% : Course Manager\'s link';
$string['mailingoutro_setting'] = 'Email outro';
$string['mailingoutro_setting_desc'] = 'End of content of the report mailing.';

// Headings for settings page.
$string['reportssettingsheading'] = 'Settings for reports calculation';
Expand Down
17 changes: 11 additions & 6 deletions lang/fr/report_coursemanager.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@
$string['category_bin'] = 'Catégorie corbeille';
$string['teacherroledashboard'] = 'Rôle enseignant dans les cours';
$string['teacherroledashboard_desc'] = 'Définit le rôle permettant d\'afficher la liste des cours dans le tableau de bord. Par défaut, il s\'agit du rôle Enseignant de Moodle.';
$string['otherteacherroledashboard'] = 'Autres rôles enseignant';
$string['otherteacherroledashboard_desc'] = 'Définit les autres rôles enseignant à prendre en considération dans le compte des enseignants du tableau de bord et des visites des enseignants dans un cours, comme par exemple les Enseignants non éditeur.';
$string['studentrolereport'] = 'Rôle étudiant dans les cours';
$string['studentrolereport_desc'] = 'Définit le rôle étudiant dans les cours pour le calcul des rapports. Par défaut, il s\'agit du rôle Etudiant de Moodle.';
$string['studentrolereport_desc'] = 'Définit le rôle étudiant dans les cours pour le calcul des rapports. Par défaut, il s\'agit du rôle Étudiant de Moodle.';
$string['category_bin_desc'] = 'Si un enseignant demande la suppression de son cours, le cours sera déplacé dans cette catégorie avant suppression définitive par les gestionnaires de la plateforme.';
$string['total_filesize_threshold'] = 'Poids maximum d\'un cours';
$string['total_filesize_threshold_desc'] = 'Poids en Mo à partir duquel on souhaite afficher une alerte à l\'enseignant si le <b>total des fichiers du cours</b> dépasse ce seuil.';
Expand Down Expand Up @@ -63,12 +65,16 @@
$string['enablestudentstask_desc'] = 'Si coché, active la tâche permettant de détecter les cours sans étudiants ou sans visites d\'étudiants récents.';
$string['enableorphanstask'] = 'Activer le rapport des devoirs orphelins';
$string['enableorphanstask_desc'] = 'Si coché, active la tâche permettant de détecter les fichiers orphelins dans les devoirs.';
$string['mailingtitle_setting'] = 'Objet du mail';
$string['mailingtitle_setting_desc'] = 'Objet pour le mailing envoyé aux enseignants.';
$string['mailingintro_setting'] = 'Introduction du mail';
$string['mailingintro_setting_desc'] = 'Message d\'introduction pour le mailing envoyé aux enseignants.<br>
Vous pouvez utiliser les variables suivantes :<br>
%userfirstname% : prénom de l\'utilisateur<br>
%userlastname% : nom de l\'utilisateur<br>
%coursemanagerlink% : lien vers le gestionnaire de cours';
$string['mailingoutro_setting'] = 'Conclusion du mail';
$string['mailingoutro_setting_desc'] = 'Message de conclusion pour le mailing envoyé aux enseignants.';

// Headings for settings page.
$string['reportssettingsheading'] = 'Paramètres pour le calcul des rapports';
Expand All @@ -81,10 +87,10 @@

// Dashboard.
$string['table_course_name'] = 'Nom du cours';
$string['table_course_state'] = 'Etat';
$string['table_course_state'] = 'État';
$string['table_files_weight'] = 'Poids des fichiers';
$string['table_enrolled_cohorts'] = 'Cohortes';
$string['table_enrolled_students'] = 'Etudiants';
$string['table_enrolled_students'] = 'Étudiants';
$string['table_enrolled_teachers'] = 'Enseignants';
$string['table_recommendation'] = 'Recommandations';
$string['table_actions'] = 'Actions';
Expand Down Expand Up @@ -141,8 +147,7 @@
$string['mail_message_delete_main_teacher'] = 'Bonjour,<br />
Le cours {$a->course} a été déplacé dans la catégorie Corbeille, en attente de sa suppression définitive qui interviendra {$a->delete_period}. Dans l\'intervalle, ce cours reste accessible, notamment si vous souhaitez y récupérer des ressources.<br />
Si vous souhaitez le conserver, vous pouvez le restaurer hors de la corbeille depuis l\'interface de gestion de vos cours.<br />
NOTE : ce cours contenait {$a->count_teacher} autres utilisateurs inscrits comme Enseignants. Un message leur a également été adressé pour leur indiquer que vous
êtes à l\'origine de cette suppression. Etant également enseignants, ces personnes pourront également restaurer ce cours ou y récupérer des ressources.';
NOTE : ce cours contenait {$a->count_teacher} autres utilisateurs inscrits comme Enseignants. Un message leur a également été adressé pour leur indiquer que vous êtes à l\'origine de cette suppression. Étant également enseignants, ces personnes pourront également restaurer ce cours ou y récupérer des ressources.';
$string['mail_message_delete_other_teacher'] = 'Bonjour,<br />
Le cours {$a->course}, dans lequel vous êtes inscrit⋅e comme enseignant⋅e, a été déplacé dans la catégorie Corbeille par {$a->deleter}, en attente de sa suppression définitive qui interviendra {$a->delete_period}. Dans l\'intervalle, ce cours reste accessible, notamment si vous souhaitez y récupérer des ressources.<br />
Si vous souhaitez le conserver, vous pouvez le restaurer hors de la corbeille depuis l\'interface de gestion de vos cours, sous réserve de prévenir les autres enseignants.<br />';
Expand Down Expand Up @@ -258,7 +263,7 @@
mais proviennent des rapports automatiques.</li><li>Les informations concernant le dernier log enseignant sont déduites à partir du champ edulevel de la table des
logs et sont à titre indicatif. Les permissions modifiées dans un cours peuvent fausser ce résultat.</li></ul>';
$string['adminnoteachercoursesweight'] = '<ul class="alert alert-warning">La tâche calculant le poids des cours est activée. Les cours pour lesquels le poids n\'a pas encore été calculé n\'apparaitront pas dans cette liste. Si besoin, lancez la tâche manuellement ou attendez le prochain passage du cron.';
$string['tablecountenrolledstudents'] = 'Etudiants';
$string['tablecountenrolledstudents'] = 'Étudiants';
$string['tablelastaccess'] = 'Dernier accès au cours';
$string['tablehascontents'] = 'Nombre de contenus du cours';
$string['tablecourseweight'] = 'Poids du cours';
Expand Down
33 changes: 33 additions & 0 deletions settings.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@
)
);

// Defines other teacher roles to consider when counting the number of teachers in a course.
$rolesoptions = role_fix_names(get_all_roles(), null, ROLENAME_ORIGINALANDSHORT, true);
$teachers = get_archetype_roles('teacher');
$settings->add(
new admin_setting_configmultiselect('report_coursemanager/other_teacher_role_dashboard',
get_string('otherteacherroledashboard', 'report_coursemanager'),
get_string('otherteacherroledashboard_desc', 'report_coursemanager'),
[''],
$rolesoptions
)
);

// Define which role is defined as student in courses to calculate reports.
$rolesoptions = role_fix_names(get_all_roles(), null, ROLENAME_ORIGINALANDSHORT, true);
$students = get_archetype_roles('student');
Expand Down Expand Up @@ -150,6 +162,13 @@
$description = get_string('enablemailing_desc', 'report_coursemanager');
$settings->add(new admin_setting_configcheckbox($name, $title, $description, 0));

// Subject of the email for report mailing.
$name = 'report_coursemanager/mailing_title';
$title = get_string('mailingtitle_setting', 'report_coursemanager');
$description = get_string('mailingtitle_setting_desc', 'report_coursemanager');
$default = get_string('mailingtitle', 'report_coursemanager');
$settings->add(new admin_setting_configtext($name, $title, $description, $default, PARAM_TEXT, '50'));

// Introduction for report mailing.
$name = 'report_coursemanager/mailing_introduction';
$title = get_string('mailingintro_setting', 'report_coursemanager');
Expand All @@ -163,6 +182,20 @@
PARAM_RAW
)
);

// Outro for report mailing.
$name = 'report_coursemanager/mailing_outro';
$title = get_string('mailingoutro_setting', 'report_coursemanager');
$description = get_string('mailingoutro_setting_desc', 'report_coursemanager');
$settings->add(
new admin_setting_configtextarea(
$name,
$title,
$description,
get_string('mailingoutro', 'report_coursemanager'),
PARAM_RAW
)
);
}

$ADMIN->add('reports', new admin_externalpage('report_coursemanager',
Expand Down
11 changes: 9 additions & 2 deletions view.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,13 @@

// Let's count teachers and students enrolled in course.
$allteachers = get_role_users(get_config('report_coursemanager', 'teacher_role_dashboard'), $coursecontext);
$otherteachersconfig = explode(',', get_config('report_coursemanager', 'other_teacher_role_dashboard'));
$otherteachers = [];
if (!empty(get_config('report_coursemanager', 'other_teacher_role_dashboard'))) {
foreach ($otherteachersconfig as $teacher) {
$otherteachers = $otherteachers + get_role_users($teacher, $coursecontext);
}
}
$allstudents = get_role_users(get_config('report_coursemanager', 'student_role_report'), $coursecontext);

// Create a new line for table.
Expand Down Expand Up @@ -252,7 +259,7 @@
// Table line for number of students.
$row[] = html_writer::label(count($allstudents), null);
// Table line for number of teachers.
$row[] = html_writer::label(count($allteachers), null);
$row[] = html_writer::label(count($allteachers + $otherteachers), null);

// Get all reports for table coursemanager_reports for recommandations.
$reports = $DB->get_records('report_coursemanager_reports', ['course' => $course->id]);
Expand All @@ -270,7 +277,7 @@
case 'no_visit_teacher':
$info->limit_visit = floor(get_config('report_coursemanager', 'last_access_teacher') / 30);
// If there are more than one teach in course, add special message.
if (count($allteachers) > 1) {
if (count($allteachers + $otherteachers) > 1) {
$sumup .= "<li>".get_string('last_access_multiple_teacher_alert', 'report_coursemanager', $info)
."</li><br />";
} else {
Expand Down

0 comments on commit b1fb31f

Please sign in to comment.