From e67d277832ad17a6116153e72e984c8de8c8b61f Mon Sep 17 00:00:00 2001 From: Binon Date: Thu, 19 Jun 2025 12:19:11 +0100 Subject: [PATCH 1/2] When course details updated fire the external API --- .../telconfig/classes/course_data_builder.php | 2 +- local/telconfig/classes/observer.php | 59 +++++++++++++------ local/telconfig/db/events.php | 6 ++ 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/local/telconfig/classes/course_data_builder.php b/local/telconfig/classes/course_data_builder.php index e05afa8852f..3a13a4dff45 100644 --- a/local/telconfig/classes/course_data_builder.php +++ b/local/telconfig/classes/course_data_builder.php @@ -48,7 +48,7 @@ public static function build_course_metadata($course): array { 'course_id' => $course->id, 'authored_date' => date('Y-m-d', $course->startdate), 'authors' => $authors, - 'catalogue_ids' => [$course->category], + 'catalogue_ids' => [],//[$course->category], 'description' => format_text($course->summary, FORMAT_HTML), 'keywords' => array_values($keywords), 'location_paths' => [], // category hierarchy if needed diff --git a/local/telconfig/classes/observer.php b/local/telconfig/classes/observer.php index 0468733a7f1..1eb7a13e75e 100644 --- a/local/telconfig/classes/observer.php +++ b/local/telconfig/classes/observer.php @@ -17,33 +17,54 @@ class observer { * @return void */ public static function enrol_instance_changed(\core\event\base $event): void { - global $DB; + global $DB; - try { + try { - // Get enrol instance - $enrol = $DB->get_record('enrol', ['id' => $event->objectid], '*', MUST_EXIST); + // Get enrol instance + $enrol = $DB->get_record('enrol', ['id' => $event->objectid], '*', MUST_EXIST); - // Only act if it's for 'self' enrolment. - if (!isset($event->other['enrol']) || $event->other['enrol'] !== 'self') { - return; + // Only act if it's for 'self' enrolment. + if (!isset($event->other['enrol']) || $event->other['enrol'] !== 'self') { + return; + } + + // Get course info + $course = $DB->get_record('course', ['id' => $event->courseid], '*', MUST_EXIST); + + if ((int)$enrol->status === ENROL_INSTANCE_ENABLED) { + // Fetch the enrolment instance data. + $data = course_data_builder::build_course_metadata($course); + helper::send_findwise_api($data); + } else { + // Delete from external API when disabled. + $data = ['course_id' => $course->id]; + helper::send_findwise_api($data,'DELETE'); + } + + } catch (\dml_exception $e) { + debugging("Failed to fetch course/enrol data: " . $e->getMessage(), DEBUG_DEVELOPER); } + } - // Get course info - $course = $DB->get_record('course', ['id' => $event->courseid], '*', MUST_EXIST); + /** + * Triggered when a course is updated. + * + * @param \core\event\base $event + * @return void + */ + public static function local_course_updated(\core\event\base $event): void { + global $DB; + + try { + $course = $DB->get_record('course', ['id' => $event->objectid], '*', MUST_EXIST); - if ((int)$enrol->status === ENROL_INSTANCE_ENABLED) { - // Fetch the enrolment instance data. + // Rebuild and send metadata to API (as an update). $data = course_data_builder::build_course_metadata($course); helper::send_findwise_api($data); - } else { - // Delete from external API when disabled. - $data = ['course_id' => $course->id]; - helper::send_findwise_api($data,'DELETE'); - } - } catch (\dml_exception $e) { - debugging("Failed to fetch course/enrol data: " . $e->getMessage(), DEBUG_DEVELOPER); + } catch (\dml_exception $e) { + debugging("Failed to process course update: " . $e->getMessage(), DEBUG_DEVELOPER); + } } } -} diff --git a/local/telconfig/db/events.php b/local/telconfig/db/events.php index 7a3a54595ef..d6b56b72b4c 100644 --- a/local/telconfig/db/events.php +++ b/local/telconfig/db/events.php @@ -7,4 +7,10 @@ 'priority' => 9999, 'internal' => false, ], + [ + 'eventname' => '\core\event\course_updated', + 'callback' => '\local_telconfig\observer::local_course_updated', + 'priority' => 9999, + 'internal' => false, + ], ]; From 5bb1523e4a40d41225dc6f5c3cf5300a5f9bfd7b Mon Sep 17 00:00:00 2001 From: Binon Date: Thu, 19 Jun 2025 15:01:24 +0100 Subject: [PATCH 2/2] Fixing the test and making the keywords all lower before send to findwise --- local/telconfig/classes/course_data_builder.php | 2 +- local/telconfig/tests/course_data_builder_test.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/local/telconfig/classes/course_data_builder.php b/local/telconfig/classes/course_data_builder.php index 3a13a4dff45..f210d8588a3 100644 --- a/local/telconfig/classes/course_data_builder.php +++ b/local/telconfig/classes/course_data_builder.php @@ -40,7 +40,7 @@ public static function build_course_metadata($course): array { // Extract tags require_once($CFG->dirroot . '/tag/lib.php'); $tags = \core_tag_tag::get_item_tags('core', 'course', $course->id); - $keywords = array_map(fn($tag) => $tag->rawname, $tags); + $keywords = array_map(fn($tag) => strtolower($tag->rawname), $tags); // Prepare data $data = [ diff --git a/local/telconfig/tests/course_data_builder_test.php b/local/telconfig/tests/course_data_builder_test.php index 8d6810c2fe2..523166550fa 100644 --- a/local/telconfig/tests/course_data_builder_test.php +++ b/local/telconfig/tests/course_data_builder_test.php @@ -58,7 +58,7 @@ public function test_build_course_metadata_returns_expected_array() { $this->assertSame($course->id, $result['course_id']); $this->assertSame(date('Y-m-d', $course->startdate), $result['authored_date']); $this->assertContains(fullname($teacher), $result['authors']); - $this->assertEquals([$course->category], $result['catalogue_ids']); + $this->assertEquals([], $result['catalogue_ids']); $this->assertSame(format_text($course->summary, FORMAT_HTML), $result['description']); $this->assertEquals(['tag1', 'tag2'], $result['keywords']); $this->assertIsArray($result['location_paths']);