diff --git a/classes/studyplanservice.php b/classes/studyplanservice.php index c2244f6..9d16380 100644 --- a/classes/studyplanservice.php +++ b/classes/studyplanservice.php @@ -23,6 +23,7 @@ namespace local_treestudyplan; defined('MOODLE_INTERNAL') || die(); +use external_single_structure; use local_treestudyplan\local\helpers\webservicehelper; require_once($CFG->libdir.'/externallib.php'); @@ -1950,6 +1951,30 @@ class studyplanservice extends \external_api { * * ***************************/ + /** + * Enrol status structure including user info + */ + public static function student_enrol_status_structure($required = VALUE_REQUIRED) { + return new \external_single_structure([ + 'user' => associationservice::user_structure(), + 'enrol' => studyline::enrol_info_structure(), + ],'',$required); + } + + /** + * Create student enrol status model + * @param int $userid Id of user + * @param studyline $line Studyline to retrieve enrol status for + */ + public static function student_enrol_status_model($userid,$line) { + global $DB; + $r = $DB->get_record('user',["id" => $userid]); + return [ + 'user' => associationservice::make_user_model($r), + 'enrol' => $line->enrol_info_model($userid), + ]; + } + /** * Parameter description for webservice function get_teaching_page */ @@ -1964,7 +1989,7 @@ class studyplanservice extends \external_api { * Return value description for webservice function get_teaching_page */ public static function line_enrol_students_returns() : \external_description { - return success::structure(); + return new \external_multiple_structure(self::student_enrol_status_structure()); } /** @@ -1984,13 +2009,15 @@ class studyplanservice extends \external_api { $context = $o->context(); webservicehelper::require_capabilities(self::CAP_VIEW, $context); + $list = []; foreach ($users as $userid) { if ($o->can_enrol($userid)) { $o->enrol($userid); + $list[] = self::student_enrol_status_model($userid,$o); } } - return success::success()->model(); + return $list; } /*************************** @@ -2013,7 +2040,7 @@ class studyplanservice extends \external_api { * Return value description for webservice function get_teaching_page */ public static function line_unenrol_students_returns() : \external_description { - return success::structure(); + return new \external_multiple_structure(self::student_enrol_status_structure()); } /** @@ -2033,11 +2060,13 @@ class studyplanservice extends \external_api { $context = $o->context(); webservicehelper::require_capabilities('local/treestudyplan:lineunenrol', $context); + $list = []; foreach ($users as $userid) { $o->unenrol($userid); + $list[] = self::student_enrol_status_model($userid,$o); } - return success::success()->model(); + return $list; } /*************************** @@ -2060,7 +2089,7 @@ class studyplanservice extends \external_api { */ public static function list_line_enrolled_students_returns() : \external_description { return new \external_single_structure([ - "userinfo" => new \external_multiple_structure(studyline::enrol_info_structure()), + "userinfo" => new \external_multiple_structure(self::student_enrol_status_structure()), "can_unenrol" => new \external_value(PARAM_BOOL,"True if the requesting user can unenrol students"), ]); } @@ -2078,7 +2107,7 @@ class studyplanservice extends \external_api { $list = []; $p = $o->studyplan(); foreach( $p->find_linked_userids() as $userid) { - $list[] = $o->enrol_info_model($userid); + $list[] = self::student_enrol_status_model($userid,$o); } return [