From 92e5b37a547331f7c40673e4c42eb7edcfe91dc9 Mon Sep 17 00:00:00 2001 From: Riedler Date: Tue, 28 Jan 2025 15:25:23 +0100 Subject: [PATCH 1/6] feat: get_all_courses now gets ALL courses, get_my_courses gets user's courses --- lbplanner/classes/helpers/course_helper.php | 8 ++- .../services/courses/get_all_courses.php | 17 +++-- lbplanner/services/courses/get_my_courses.php | 63 +++++++++++++++++++ 3 files changed, 81 insertions(+), 7 deletions(-) create mode 100644 lbplanner/services/courses/get_my_courses.php diff --git a/lbplanner/classes/helpers/course_helper.php b/lbplanner/classes/helpers/course_helper.php index eff74118..22ba5b8e 100644 --- a/lbplanner/classes/helpers/course_helper.php +++ b/lbplanner/classes/helpers/course_helper.php @@ -76,11 +76,15 @@ public static function get_lbplanner_course(int $courseid, int $userid): course * Get all current courses. * @return course[] all courses of the current year */ - public static function get_all_lbplanner_courses(): array { + public static function get_all_lbplanner_courses(bool $only_enrolled=true): array { global $DB, $USER; $userid = $USER->id; - $mdlcourses = enrol_get_my_courses(); + if ($only_enrolled) { + $mdlcourses = enrol_get_my_courses(); + } else { + $mdlcourses = get_courses(); + } // Remove Duplicates. $mdlcourses = array_unique($mdlcourses, SORT_REGULAR); $results = []; diff --git a/lbplanner/services/courses/get_all_courses.php b/lbplanner/services/courses/get_all_courses.php index a217c103..a899b6c9 100644 --- a/lbplanner/services/courses/get_all_courses.php +++ b/lbplanner/services/courses/get_all_courses.php @@ -17,16 +17,17 @@ namespace local_lbplanner_services; use core_external\{external_function_parameters, external_multiple_structure}; - +use local_lbplanner\enums\CAPABILITY_FLAG; use local_lbplanner\helpers\course_helper; use local_lbplanner\model\course; +use local_lbplanner\model\user; /** - * Get all the courses of the current year. + * Get ALL courses. Slotmaster only. * * @package local_lbplanner * @subpackage services_courses - * @copyright 2024 necodeIT + * @copyright 2025 necodeIT * @license https://creativecommons.org/licenses/by-nc-sa/4.0/ CC-BY-NC-SA 4.0 International or later */ class courses_get_all_courses extends \core_external\external_api { @@ -40,10 +41,16 @@ public static function get_all_courses_parameters(): external_function_parameter } /** - * Get all the courses of the current year. + * Get ALL courses. */ public static function get_all_courses(): array { - $courses = course_helper::get_all_lbplanner_courses(); + global $USER; + $user = user::from_mdlobj($USER); + if (!($user->get_capabilitybitmask() & CAPABILITY_FLAG::SLOTMASTER)) { + throw new \moodle_exception('access denied: must be slotmaster'); + } + + $courses = course_helper::get_all_lbplanner_courses(false); $results = []; foreach ($courses as $course) { array_push($results, $course->prepare_for_api()); diff --git a/lbplanner/services/courses/get_my_courses.php b/lbplanner/services/courses/get_my_courses.php new file mode 100644 index 00000000..8ed3721a --- /dev/null +++ b/lbplanner/services/courses/get_my_courses.php @@ -0,0 +1,63 @@ +. + +namespace local_lbplanner_services; + +use core_external\{external_function_parameters, external_multiple_structure}; + +use local_lbplanner\helpers\course_helper; +use local_lbplanner\model\course; + +/** + * Get all the courses of the current year. + * + * @package local_lbplanner + * @subpackage services_courses + * @copyright 2025 necodeIT + * @license https://creativecommons.org/licenses/by-nc-sa/4.0/ CC-BY-NC-SA 4.0 International or later + */ +class courses_get_all_courses extends \core_external\external_api { + + /** + * Has no Parameters + * @return external_function_parameters + */ + public static function get_all_courses_parameters(): external_function_parameters { + return new external_function_parameters([]); + } + + /** + * Get all the courses of the current year. + */ + public static function get_all_courses(): array { + $courses = course_helper::get_all_lbplanner_courses(true); + $results = []; + foreach ($courses as $course) { + array_push($results, $course->prepare_for_api()); + } + return $results; + } + + /** + * Returns description of method result value + * @return external_multiple_structure description of method result value + */ + public static function get_all_courses_returns(): external_multiple_structure { + return new external_multiple_structure( + course::api_structure() + ); + } +} From e75ecba85302f07c22e5d19cc6be3503d44e4ace Mon Sep 17 00:00:00 2001 From: Riedler Date: Tue, 28 Jan 2025 16:48:59 +0100 Subject: [PATCH 2/6] fix: add new services to service table --- lbplanner/db/services.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lbplanner/db/services.php b/lbplanner/db/services.php index 331195a6..4021f5d5 100644 --- a/lbplanner/db/services.php +++ b/lbplanner/db/services.php @@ -57,7 +57,16 @@ 'classname' => 'local_lbplanner_services\courses_get_all_courses', 'methodname' => 'get_all_courses', 'classpath' => 'local/lbplanner/services/courses/get_all_courses.php', - 'description' => 'Get all the courses of the current year', + 'description' => 'Get all courses', + 'type' => 'read', + 'capabilities' => 'local/lb_planner:slotmaster', + 'ajax' => true, + ], + 'local_lbplanner_courses_get_my_courses' => [ + 'classname' => 'local_lbplanner_services\courses_get_my_courses', + 'methodname' => 'get_my_courses', + 'classpath' => 'local/lbplanner/services/courses/get_my_courses.php', + 'description' => 'Get courses that belong to the user', 'type' => 'read', 'capabilities' => 'local/lb_planner:student', 'ajax' => true, @@ -395,6 +404,7 @@ 'local_lbplanner_user_get_all_users', 'local_lbplanner_user_update_user', 'local_lbplanner_courses_get_all_courses', + 'local_lbplanner_courses_get_my_courses', 'local_lbplanner_courses_update_course', 'local_lbplanner_modules_get_all_course_modules', 'local_lbplanner_modules_get_all_modules', From f808a15a44ece2151ca9eb3ec9482b87985177c7 Mon Sep 17 00:00:00 2001 From: Riedler Date: Tue, 28 Jan 2025 16:49:51 +0100 Subject: [PATCH 3/6] fix: bump version --- lbplanner/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lbplanner/version.php b/lbplanner/version.php index 32190c06..5061d7ed 100644 --- a/lbplanner/version.php +++ b/lbplanner/version.php @@ -28,7 +28,7 @@ $plugin->component = 'local_lbplanner'; $plugin->release = 'Alpha v.'.$release; -$plugin->version = 2025012400; +$plugin->version = 2025012800; $plugin->dependencies = [ // Depend upon version 2023110600 of local_modcustomfields. 'local_modcustomfields' => 2023110600, From a15683018c2b14f93828f0db9c68b9637e989497 Mon Sep 17 00:00:00 2001 From: Riedler Date: Tue, 28 Jan 2025 16:55:58 +0100 Subject: [PATCH 4/6] fix: actually rename class & function names in get_my_courses --- lbplanner/services/courses/get_my_courses.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lbplanner/services/courses/get_my_courses.php b/lbplanner/services/courses/get_my_courses.php index 8ed3721a..a053db25 100644 --- a/lbplanner/services/courses/get_my_courses.php +++ b/lbplanner/services/courses/get_my_courses.php @@ -29,20 +29,20 @@ * @copyright 2025 necodeIT * @license https://creativecommons.org/licenses/by-nc-sa/4.0/ CC-BY-NC-SA 4.0 International or later */ -class courses_get_all_courses extends \core_external\external_api { +class courses_get_my_courses extends \core_external\external_api { /** * Has no Parameters * @return external_function_parameters */ - public static function get_all_courses_parameters(): external_function_parameters { + public static function get_my_courses_parameters(): external_function_parameters { return new external_function_parameters([]); } /** * Get all the courses of the current year. */ - public static function get_all_courses(): array { + public static function get_my_courses(): array { $courses = course_helper::get_all_lbplanner_courses(true); $results = []; foreach ($courses as $course) { @@ -55,7 +55,7 @@ public static function get_all_courses(): array { * Returns description of method result value * @return external_multiple_structure description of method result value */ - public static function get_all_courses_returns(): external_multiple_structure { + public static function get_my_courses_returns(): external_multiple_structure { return new external_multiple_structure( course::api_structure() ); From d55084742cd1fd5ba7d3c82b8045840b186dcca9 Mon Sep 17 00:00:00 2001 From: Riedler Date: Tue, 28 Jan 2025 17:05:54 +0100 Subject: [PATCH 5/6] fix: appease code checker --- lbplanner/classes/helpers/course_helper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lbplanner/classes/helpers/course_helper.php b/lbplanner/classes/helpers/course_helper.php index 22ba5b8e..33ee9c70 100644 --- a/lbplanner/classes/helpers/course_helper.php +++ b/lbplanner/classes/helpers/course_helper.php @@ -76,11 +76,11 @@ public static function get_lbplanner_course(int $courseid, int $userid): course * Get all current courses. * @return course[] all courses of the current year */ - public static function get_all_lbplanner_courses(bool $only_enrolled=true): array { + public static function get_all_lbplanner_courses(bool $onlyenrolled=true): array { global $DB, $USER; $userid = $USER->id; - if ($only_enrolled) { + if ($onlyenrolled) { $mdlcourses = enrol_get_my_courses(); } else { $mdlcourses = get_courses(); From e9efa1cec8b4c8ec6e9765bd6810266e15f207cf Mon Sep 17 00:00:00 2001 From: Riedler Date: Tue, 28 Jan 2025 17:06:57 +0100 Subject: [PATCH 6/6] fix: appease PHPDoc checker --- lbplanner/classes/helpers/course_helper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lbplanner/classes/helpers/course_helper.php b/lbplanner/classes/helpers/course_helper.php index 33ee9c70..30d358c4 100644 --- a/lbplanner/classes/helpers/course_helper.php +++ b/lbplanner/classes/helpers/course_helper.php @@ -74,6 +74,7 @@ public static function get_lbplanner_course(int $courseid, int $userid): course /** * Get all current courses. + * @param bool $onlyenrolled whether to include only courses in which the current user is enrolled in * @return course[] all courses of the current year */ public static function get_all_lbplanner_courses(bool $onlyenrolled=true): array {