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
12 changes: 11 additions & 1 deletion local/mylearningservice/db/services.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,22 @@
'ajax' => true,
'capabilities' => 'moodle/course:view',
),
'mylearningservice_get_user_certificates' => array(
'classname' => 'mylearningservice_external',
'methodname' => 'get_user_certificates',
'classpath' => 'local/mylearningservice/externallib.php',
'description' => 'Get certificates awarded to a user',
'type' => 'read',
'ajax' => true,
'capabilities' => 'moodle/course:view',
),
);
$services = array(
'Get Recent Courses' => array(
'functions' => array(

'mylearningservice_get_recent_courses'
'mylearningservice_get_recent_courses',
'mylearningservice_get_user_certificates'
),
'restrictedusers' => 0,
'enabled' => 1,
Expand Down
93 changes: 92 additions & 1 deletion local/mylearningservice/externallib.php
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ function($favourite) {
if (!$courseimage) {
$courseimage = $OUTPUT->get_generated_url_for_course($context);
}
$hascertificate = $DB->record_exists('customcert', ['course' => $course->id]);
$hascertificate =self:: course_has_certificate_enabled($course->id);
$courseresult = [
'id' => $course->id,
'shortname' => $course->shortname,
Expand Down Expand Up @@ -210,6 +210,21 @@ function($favourite) {

return $result;
}
public static function course_has_certificate_enabled($courseid) {
global $DB;

$sql = "SELECT cm.id
FROM {course_modules} cm
JOIN {modules} m ON m.id = cm.module
WHERE m.name = :modname
AND cm.course = :courseid
AND cm.visible = 1"; // only visible activities

return $DB->record_exists_sql($sql, [
'modname' => 'coursecertificate',
'courseid' => $courseid
]);
}

public static function get_recent_courses_returns() {
return new external_multiple_structure(
Expand Down Expand Up @@ -254,4 +269,80 @@ public static function get_recent_courses_returns() {
)
);
}

public static function get_user_certificates_parameters() {
return new external_function_parameters(
[
'userid' => new external_value(PARAM_INT, 'User ID')
]
);
}
public static function get_user_certificates($userid) {
global $DB, $CFG;

require_once($CFG->libdir . '/filelib.php');

// Validate params
$params = self::validate_parameters(self::get_user_certificates_parameters(), array('userid' => $userid));

// SQL to fetch certificates linked to a course
$sql = "SELECT ci.id AS issueid,
ci.timecreated,
ct.name AS certificatename,
c.id AS courseid,
c.fullname AS coursename,
cm.id AS cmid
FROM {tool_certificate_issues} ci
JOIN {tool_certificate_templates} ct
ON ci.templateid = ct.id
JOIN {course} c
ON ci.courseid = c.id
JOIN {course_modules} cm
ON cm.course = c.id
JOIN {modules} m
ON m.id = cm.module AND m.name = 'coursecertificate'
WHERE ci.userid = :userid";


$records = $DB->get_records_sql($sql, ['userid' => $userid]);

$results = [];
foreach ($records as $rec) {
// Build download link
$downloadurl = new moodle_url('/mod/coursecertificate/view.php', [
'id' => $rec->cmid,
'download' => 1
]);

// Build preview link
$previewurl = new moodle_url('/mod/coursecertificate/view.php', [
'id' => $rec->cmid
]);

$results[] = [
'resourcetype' => 'Course',
'resourcetitle' => $rec->certificatename,
'resourcename' => $rec->coursename,
'awardeddate' => $rec->timecreated,
'downloadlink' => $downloadurl->out(false),
'previewlink' => $previewurl->out(false)
];
}

return $results;
}
public static function get_user_certificates_returns() {
return new external_multiple_structure(
new external_single_structure(
[
'resourcetype' => new external_value(PARAM_TEXT, 'Type of resource'),
'resourcetitle' => new external_value(PARAM_TEXT, 'Certificate title'),
'resourcename' => new external_value(PARAM_TEXT, 'Course name'),
'awardeddate' => new external_value(PARAM_TEXT, 'Award date'),
'downloadlink' => new external_value(PARAM_URL, 'Download link'),
'previewlink' => new external_value(PARAM_URL, 'Preview link')
]
)
);
}
}
2 changes: 1 addition & 1 deletion local/mylearningservice/version.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
defined('MOODLE_INTERNAL') || die();

$plugin->component = 'local_mylearningservice';
$plugin->version = 2025073100;
$plugin->version = 2025073102;
$plugin->requires = 2024100290;
$plugin->maturity = MATURITY_STABLE;
$plugin->release = '1.0';