Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions local/telconfig/classes/course_data_builder.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,15 @@ 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 = [
'_id' => 'M' . $course->id,
'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
Expand Down
59 changes: 40 additions & 19 deletions local/telconfig/classes/observer.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
}
6 changes: 6 additions & 0 deletions local/telconfig/db/events.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,10 @@
'priority' => 9999,
'internal' => false,
],
[
'eventname' => '\core\event\course_updated',
'callback' => '\local_telconfig\observer::local_course_updated',
'priority' => 9999,
'internal' => false,
],
];
2 changes: 1 addition & 1 deletion local/telconfig/tests/course_data_builder_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -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']);
Expand Down
Loading