diff --git a/local/telconfig/classes/course_data_builder.php b/local/telconfig/classes/course_data_builder.php index a07b09d659f..f37e27a4bb4 100644 --- a/local/telconfig/classes/course_data_builder.php +++ b/local/telconfig/classes/course_data_builder.php @@ -41,7 +41,7 @@ public static function build_course_metadata($course): array { require_once($CFG->dirroot . '/tag/lib.php'); $tags = \core_tag_tag::get_item_tags('core', 'course', $course->id); $keywords = array_reduce($tags, function ($carry, $tag) { - return array_merge($carry, self::tokenize_keywords($tag->rawname)); + return array_merge($carry, self::tokenise_keywords($tag->rawname)); }, []); @@ -85,9 +85,13 @@ private static function get_section_keywords($course): array { $sections = $modinfo->get_section_info_all(); foreach ($sections as $section) { - if (!empty($section->name)) { - $keywords = array_merge($keywords, self::tokenize_keywords($section->name)); + // Skip hidden sections + if (!$section->uservisible || !$section->visible || empty($section->name)) { + continue; } + + // Tokenise and merge keywords + $keywords = array_merge($keywords, self::tokenise_keywords($section->name)); } return $keywords; @@ -95,12 +99,14 @@ private static function get_section_keywords($course): array { private static function get_resource_keywords($course): array { global $DB; - $keywords = []; + $keywords = []; + + // Now fetch all course modules from DB $coursemodules = $DB->get_records('course_modules', ['course' => $course->id]); foreach ($coursemodules as $cm) { - // Skip if module is marked for deletion - if (!empty($cm->deletioninprogress)) { + // Skip deleted or hidden modules + if (!empty($cm->deletioninprogress) || empty($cm->visible)) { continue; } @@ -114,14 +120,15 @@ private static function get_resource_keywords($course): array { $instancetable = $module->name; $instance = $DB->get_record($instancetable, ['id' => $cm->instance], '*', IGNORE_MISSING); if ($instance && !empty($instance->name)) { - $keywords = array_merge($keywords, self::tokenize_keywords($instance->name)); + $keywords = array_merge($keywords, self::tokenise_keywords($instance->name)); } } return $keywords; } - private static function tokenize_keywords(string $input): array { + + private static function tokenise_keywords(string $input): array { $input = strtolower(trim($input)); if (empty($input)) { return []; diff --git a/local/telconfig/classes/observer.php b/local/telconfig/classes/observer.php index 83ca54caf77..98f13d006ba 100644 --- a/local/telconfig/classes/observer.php +++ b/local/telconfig/classes/observer.php @@ -79,13 +79,12 @@ public static function local_course_updated(\core\event\base $event): void { * @param \core\event\base $event * @return void */ - public static function local_section_updated(\core\event\base $event): void { + public static function local_section_changed(\core\event\base $event): void { global $DB; - try { - $section = $DB->get_record('course_sections', ['id' => $event->objectid], '*', MUST_EXIST); + try { $course = $DB->get_record('course', ['id' => $event->courseid], '*', MUST_EXIST); - + // Only proceed if the course has self enrolment enabled if (!self::is_course_self_enrollable($course->id)) { return; @@ -96,7 +95,7 @@ public static function local_section_updated(\core\event\base $event): void { helper::send_findwise_api($data); } catch (\Throwable $e) { - debugging('Failed in local section_updated: ' . $e->getMessage(), DEBUG_DEVELOPER); + debugging('Error handling local section change: ' . $e->getMessage(), DEBUG_DEVELOPER); } } @@ -106,12 +105,12 @@ public static function local_section_updated(\core\event\base $event): void { * @param \core\event\base $event * @return void */ - public static function local_module_updated(\core\event\base $event): void { + public static function local_module_changed(\core\event\base $event): void { global $DB; try { - $cm = get_coursemodule_from_id(null, $event->objectid, 0, false, MUST_EXIST); - $course = $DB->get_record('course', ['id' => $cm->course], '*', MUST_EXIST); + $courseid = $event->courseid; + $course = $DB->get_record('course', ['id' => $courseid], '*', MUST_EXIST); // Only proceed if the course has self enrolment enabled if (!self::is_course_self_enrollable($course->id)) { @@ -123,7 +122,7 @@ public static function local_module_updated(\core\event\base $event): void { helper::send_findwise_api($data); } catch (\Throwable $e) { - debugging('Failed in local module_updated: ' . $e->getMessage(), DEBUG_DEVELOPER); + debugging('Error handling local module change: ' . $e->getMessage(), DEBUG_DEVELOPER); } } private static function is_course_self_enrollable(int $courseid): bool { diff --git a/local/telconfig/db/events.php b/local/telconfig/db/events.php index 4e6d53fe206..29da2fc800d 100644 --- a/local/telconfig/db/events.php +++ b/local/telconfig/db/events.php @@ -13,15 +13,39 @@ 'priority' => 9999, 'internal' => false, ], + [ + 'eventname' => '\core\event\course_section_created', + 'callback' => '\local_telconfig\observer::local_section_changed', + 'priority' => 9999, + 'internal' => false, + ], [ 'eventname' => '\core\event\course_section_updated', - 'callback' => '\local_telconfig\observer::local_section_updated', + 'callback' => '\local_telconfig\observer::local_section_changed', + 'priority' => 9999, + 'internal' => false, + ], + [ + 'eventname' => '\core\event\course_section_deleted', + 'callback' => '\local_telconfig\observer::local_section_changed', + 'priority' => 9999, + 'internal' => false, + ], + [ + 'eventname' => '\core\event\course_module_created', + 'callback' => '\local_telconfig\observer::local_module_changed', 'priority' => 9999, 'internal' => false, ], [ 'eventname' => '\core\event\course_module_updated', - 'callback' => '\local_telconfig\observer::local_module_updated', + 'callback' => '\local_telconfig\observer::local_module_changed', + 'priority' => 9999, + 'internal' => false, + ], + [ + 'eventname' => '\core\event\course_module_deleted', + 'callback' => '\local_telconfig\observer::local_module_changed', 'priority' => 9999, 'internal' => false, ],