Differences Between: [Versions 310 and 402] [Versions 310 and 403]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * This is the external API for this component. 19 * 20 * @package tool_moodlenet 21 * @copyright 2020 Mathew May {@link https://mathew.solutions} 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace tool_moodlenet; 26 27 defined('MOODLE_INTERNAL') || die(); 28 29 require_once($CFG->libdir .'/externallib.php'); 30 require_once($CFG->libdir . '/filelib.php'); 31 require_once (__DIR__ . '/../lib.php'); 32 33 use core_course\external\course_summary_exporter; 34 use external_api; 35 use external_function_parameters; 36 use external_value; 37 use external_single_structure; 38 39 /** 40 * This is the external API for this component. 41 * 42 * @copyright 2020 Mathew May {@link https://mathew.solutions} 43 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 44 */ 45 class external extends external_api { 46 47 /** 48 * verify_webfinger parameters 49 * 50 * @return external_function_parameters 51 */ 52 public static function verify_webfinger_parameters() { 53 return new external_function_parameters( 54 array( 55 'profileurl' => new external_value(PARAM_NOTAGS, 'The profile url that the user has given us', VALUE_REQUIRED), 56 'course' => new external_value(PARAM_INT, 'The course we are adding to', VALUE_REQUIRED), 57 'section' => new external_value(PARAM_INT, 'The section within the course we are adding to', VALUE_REQUIRED), 58 ) 59 ); 60 } 61 62 /** 63 * Figure out if the passed content resolves with a WebFinger account. 64 * 65 * @param string $profileurl The profile url that the user states exists 66 * @param int $course The course we are adding to 67 * @param int $section The section within the course we are adding to 68 * @return array Contains the result and domain if any 69 * @throws \invalid_parameter_exception 70 */ 71 public static function verify_webfinger(string $profileurl, int $course, int $section) { 72 global $USER; 73 74 $params = self::validate_parameters(self::verify_webfinger_parameters(), [ 75 'profileurl' => $profileurl, 76 'section' => $section, 77 'course' => $course 78 ] 79 ); 80 try { 81 $mnetprofile = new moodlenet_user_profile($params['profileurl'], $USER->id); 82 } catch (\Exception $e) { 83 return [ 84 'result' => false, 85 'message' => get_string('profilevalidationfail', 'tool_moodlenet'), 86 ]; 87 } 88 89 $userlink = profile_manager::get_moodlenet_profile_link($mnetprofile); 90 91 // There were no problems verifying the account so lets store it. 92 if ($userlink['result'] === true) { 93 profile_manager::save_moodlenet_user_profile($mnetprofile); 94 $userlink['domain'] = generate_mnet_endpoint($mnetprofile->get_profile_name(), $course, $section); 95 } 96 97 return $userlink; 98 } 99 100 /** 101 * verify_webfinger return. 102 * 103 * @return \external_description 104 */ 105 public static function verify_webfinger_returns() { 106 return new external_single_structure([ 107 'result' => new external_value(PARAM_BOOL, 'Was the passed content a valid WebFinger?'), 108 'message' => new external_value(PARAM_TEXT, 'Our message for the user'), 109 'domain' => new external_value(PARAM_RAW, 'Domain to redirect the user to', VALUE_OPTIONAL), 110 ]); 111 } 112 113 /** 114 * search_courses_parameters 115 * 116 * @return external_function_parameters 117 */ 118 public static function search_courses_parameters() { 119 return new external_function_parameters( 120 array( 121 'searchvalue' => new external_value(PARAM_RAW, 'search value'), 122 ) 123 ); 124 } 125 126 /** 127 * For some given input find and return any course that matches it. 128 * 129 * @param string $searchvalue The profile url that the user states exists 130 * @return array Contains the result set of courses for the value 131 */ 132 public static function search_courses(string $searchvalue) { 133 global $OUTPUT; 134 135 $params = self::validate_parameters( 136 self::search_courses_parameters(), 137 ['searchvalue' => $searchvalue] 138 ); 139 self::validate_context(\context_system::instance()); 140 141 $courses = array(); 142 143 if ($arrcourses = \core_course_category::search_courses(array('search' => $params['searchvalue']))) { 144 foreach ($arrcourses as $course) { 145 if (has_capability('moodle/course:manageactivities', \context_course::instance($course->id))) { 146 $data = new \stdClass(); 147 $data->id = $course->id; 148 $data->fullname = $course->fullname; 149 $data->hidden = $course->visible; 150 $options = [ 151 'course' => $course->id, 152 ]; 153 $viewurl = new \moodle_url('/admin/tool/moodlenet/options.php', $options); 154 $data->viewurl = $viewurl->out(false); 155 $category = \core_course_category::get($course->category); 156 $data->coursecategory = $category->name; 157 $courseimage = course_summary_exporter::get_course_image($data); 158 if (!$courseimage) { 159 $courseimage = $OUTPUT->get_generated_image_for_id($data->id); 160 } 161 $data->courseimage = $courseimage; 162 $courses[] = $data; 163 } 164 } 165 } 166 return array( 167 'courses' => $courses 168 ); 169 } 170 171 /** 172 * search_courses_returns. 173 * 174 * @return \external_description 175 */ 176 public static function search_courses_returns() { 177 return new external_single_structure([ 178 'courses' => new \external_multiple_structure( 179 new external_single_structure([ 180 'id' => new external_value(PARAM_INT, 'course id'), 181 'fullname' => new external_value(PARAM_TEXT, 'course full name'), 182 'hidden' => new external_value(PARAM_INT, 'is the course visible'), 183 'viewurl' => new external_value(PARAM_URL, 'Next step of import'), 184 'coursecategory' => new external_value(PARAM_TEXT, 'Category name'), 185 'courseimage' => new external_value(PARAM_RAW, 'course image'), 186 ])) 187 ]); 188 } 189 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body