2 // This file is part of Moodle - http://moodle.org/
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.
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.
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/>.
18 * This is the external API for this tool.
21 * @copyright 2015 Damyon Wiese
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25 defined('MOODLE_INTERNAL') || die();
27 require_once("$CFG->libdir/externallib.php");
28 require_once("$CFG->libdir/grade/grade_scale.php");
37 use external_function_parameters;
39 use external_format_value;
40 use external_single_structure;
41 use external_multiple_structure;
42 use invalid_parameter_exception;
43 use required_capability_exception;
45 use tool_lp\external\cohort_summary_exporter;
46 use tool_lp\external\competency_path_exporter;
47 use tool_lp\external\competency_summary_exporter;
48 use tool_lp\external\course_competency_statistics_exporter;
49 use tool_lp\external\course_module_summary_exporter;
50 use tool_lp\external\course_summary_exporter;
51 use tool_lp\external\template_statistics_exporter;
52 use tool_lp\external\user_competency_summary_exporter;
53 use tool_lp\external\user_competency_summary_in_course_exporter;
54 use tool_lp\external\user_competency_summary_in_plan_exporter;
55 use tool_lp\external\user_evidence_summary_exporter;
56 use tool_lp\output\user_competency_summary_in_plan;
57 use tool_lp\output\user_competency_summary_in_course;
59 use core_competency\api;
60 use core_competency\external\competency_exporter;
61 use core_competency\external\competency_framework_exporter;
62 use core_competency\external\course_competency_exporter;
63 use core_competency\external\course_competency_settings_exporter;
64 use core_competency\external\plan_exporter;
65 use core_competency\external\template_exporter;
66 use core_competency\external\user_competency_course_exporter;
67 use core_competency\external\user_competency_exporter;
68 use core_competency\external\user_competency_plan_exporter;
69 use core_competency\external\user_summary_exporter;
72 * This is the external API for this tool.
74 * @copyright 2015 Damyon Wiese
75 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
77 class external extends external_api {
80 * Returns a prepared structure to use a context parameters.
81 * @return external_single_structure
83 protected static function get_context_parameters() {
84 $id = new external_value(
86 'Context ID. Either use this value, or level and instanceid.',
90 $level = new external_value(
92 'Context level. To be used with instanceid.',
96 $instanceid = new external_value(
98 'Context instance ID. To be used with level',
102 return new external_single_structure(array(
104 'contextlevel' => $level,
105 'instanceid' => $instanceid,
110 * Returns description of data_for_competency_frameworks_manage_page() parameters.
112 * @return \external_function_parameters
114 public static function data_for_competency_frameworks_manage_page_parameters() {
115 $params = array('pagecontext' => self::get_context_parameters());
116 return new external_function_parameters($params);
120 * Loads the data required to render the competency_frameworks_manage_page template.
122 * @param context $pagecontext The page context
125 public static function data_for_competency_frameworks_manage_page($pagecontext) {
128 $params = self::validate_parameters(
129 self::data_for_competency_frameworks_manage_page_parameters(),
131 'pagecontext' => $pagecontext
134 $context = self::get_context_from_params($params['pagecontext']);
135 self::validate_context($context);
137 $renderable = new output\manage_competency_frameworks_page($context);
138 $renderer = $PAGE->get_renderer('tool_lp');
140 $data = $renderable->export_for_template($renderer);
146 * Returns description of data_for_competency_frameworks_manage_page() result value.
148 * @return \external_description
150 public static function data_for_competency_frameworks_manage_page_returns() {
151 return new external_single_structure(array (
152 'competencyframeworks' => new external_multiple_structure(
153 competency_framework_exporter::get_read_structure()
155 'pluginbaseurl' => new external_value(PARAM_LOCALURL, 'Url to the tool_lp plugin folder on this Moodle site'),
156 'navigation' => new external_multiple_structure(
157 new external_value(PARAM_RAW, 'HTML for a navigation item that should be on this page')
159 'pagecontextid' => new external_value(PARAM_INT, 'The page context id')
165 * Returns description of data_for_competencies_manage_page() parameters.
167 * @return \external_function_parameters
169 public static function data_for_competencies_manage_page_parameters() {
170 $competencyframeworkid = new external_value(
172 'The competency framework id',
175 $search = new external_value(
182 'competencyframeworkid' => $competencyframeworkid,
185 return new external_function_parameters($params);
189 * Loads the data required to render the competencies_manage_page template.
191 * @param int $competencyframeworkid Framework id.
192 * @param string $search Text to search.
196 public static function data_for_competencies_manage_page($competencyframeworkid, $search) {
199 $params = self::validate_parameters(self::data_for_competencies_manage_page_parameters(), array(
200 'competencyframeworkid' => $competencyframeworkid,
204 $framework = api::read_framework($params['competencyframeworkid']);
205 self::validate_context($framework->get_context());
206 $output = $PAGE->get_renderer('tool_lp');
208 $renderable = new output\manage_competencies_page($framework, $params['search'], $framework->get_context());
210 $data = $renderable->export_for_template($output);
216 * Returns description of data_for_competencies_manage_page() result value.
218 * @return \external_description
220 public static function data_for_competencies_manage_page_returns() {
221 return new external_single_structure(array (
222 'framework' => competency_framework_exporter::get_read_structure(),
223 'canmanage' => new external_value(PARAM_BOOL, 'True if this user has permission to manage competency frameworks'),
224 'pagecontextid' => new external_value(PARAM_INT, 'Context id for the framework'),
225 'search' => new external_value(PARAM_RAW, 'Current search string'),
226 'rulesmodules' => new external_value(PARAM_RAW, 'JSON encoded data for rules'),
227 'pluginbaseurl' => new external_value(PARAM_RAW, 'Plugin base url')
233 * Returns description of data_for_competency_summary() parameters.
235 * @return \external_function_parameters
237 public static function data_for_competency_summary_parameters() {
238 $competencyid = new external_value(
243 $includerelated = new external_value(
245 'Include or not related competencies',
249 $includecourses = new external_value(
251 'Include or not competency courses',
256 'competencyid' => $competencyid,
257 'includerelated' => $includerelated,
258 'includecourses' => $includecourses
260 return new external_function_parameters($params);
264 * Loads the data required to render the competency_page template.
266 * @param int $competencyid Competency id.
267 * @param boolean $includerelated Include or not related competencies.
268 * @param boolean $includecourses Include or not competency courses.
272 public static function data_for_competency_summary($competencyid, $includerelated = false, $includecourses = false) {
274 $params = self::validate_parameters(self::data_for_competency_summary_parameters(), array(
275 'competencyid' => $competencyid,
276 'includerelated' => $includerelated,
277 'includecourses' => $includecourses
280 $competency = api::read_competency($params['competencyid']);
281 $framework = api::read_framework($competency->get_competencyframeworkid());
282 self::validate_context($framework->get_context());
283 $renderable = new output\competency_summary($competency, $framework, $params['includerelated'], $params['includecourses']);
284 $renderer = $PAGE->get_renderer('tool_lp');
286 $data = $renderable->export_for_template($renderer);
292 * Returns description of data_for_competency_summary_() result value.
294 * @return \external_description
296 public static function data_for_competency_summary_returns() {
297 return competency_summary_exporter::get_read_structure();
301 * Returns description of list_courses_using_competency() parameters.
303 * @return \external_function_parameters
305 public static function list_courses_using_competency_parameters() {
306 $competencyid = new external_value(
312 'id' => $competencyid,
314 return new external_function_parameters($params);
318 * Count the courses (visible to this user) that use this competency.
320 * @param int $competencyid Competency id.
323 public static function list_courses_using_competency($competencyid) {
326 $params = self::validate_parameters(self::list_courses_using_competency_parameters(), array(
327 'id' => $competencyid,
330 $competency = api::read_competency($params['id']);
331 self::validate_context($competency->get_context());
332 $output = $PAGE->get_renderer('tool_lp');
335 $courses = api::list_courses_using_competency($params['id']);
336 foreach ($courses as $course) {
337 $context = context_course::instance($course->id);
338 $exporter = new course_summary_exporter($course, array('context' => $context));
339 $result = $exporter->export($output);
340 array_push($results, $result);
346 * Returns description of list_courses_using_competency() result value.
348 * @return \external_description
350 public static function list_courses_using_competency_returns() {
351 return new external_multiple_structure(course_summary_exporter::get_read_structure());
356 * Returns description of data_for_course_competenies_page() parameters.
358 * @return \external_function_parameters
360 public static function data_for_course_competencies_page_parameters() {
361 $courseid = new external_value(
366 $params = array('courseid' => $courseid);
367 return new external_function_parameters($params);
371 * Loads the data required to render the course_competencies_page template.
373 * @param int $courseid The course id to check.
376 public static function data_for_course_competencies_page($courseid) {
378 $params = self::validate_parameters(self::data_for_course_competencies_page_parameters(), array(
379 'courseid' => $courseid,
381 self::validate_context(context_course::instance($params['courseid']));
383 $renderable = new output\course_competencies_page($params['courseid']);
384 $renderer = $PAGE->get_renderer('tool_lp');
386 $data = $renderable->export_for_template($renderer);
392 * Returns description of data_for_course_competencies_page() result value.
394 * @return \external_description
396 public static function data_for_course_competencies_page_returns() {
397 $ucc = user_competency_course_exporter::get_read_structure();
398 $ucc->required = VALUE_OPTIONAL;
400 return new external_single_structure(array (
401 'courseid' => new external_value(PARAM_INT, 'The current course id'),
402 'pagecontextid' => new external_value(PARAM_INT, 'The current page context ID.'),
403 'gradableuserid' => new external_value(PARAM_INT, 'Current user id, if the user is a gradable user.', VALUE_OPTIONAL),
404 'canmanagecompetencyframeworks' => new external_value(PARAM_BOOL, 'User can manage competency frameworks'),
405 'canmanagecoursecompetencies' => new external_value(PARAM_BOOL, 'User can manage linked course competencies'),
406 'canconfigurecoursecompetencies' => new external_value(PARAM_BOOL, 'User can configure course competency settings'),
407 'settings' => course_competency_settings_exporter::get_read_structure(),
408 'statistics' => course_competency_statistics_exporter::get_read_structure(),
409 'competencies' => new external_multiple_structure(new external_single_structure(array(
410 'competency' => competency_exporter::get_read_structure(),
411 'coursecompetency' => course_competency_exporter::get_read_structure(),
412 'coursemodules' => new external_multiple_structure(course_module_summary_exporter::get_read_structure()),
413 'usercompetencycourse' => $ucc,
414 'ruleoutcomeoptions' => new external_multiple_structure(
415 new external_single_structure(array(
416 'value' => new external_value(PARAM_INT, 'The option value'),
417 'text' => new external_value(PARAM_NOTAGS, 'The name of the option'),
418 'selected' => new external_value(PARAM_BOOL, 'If this is the currently selected option'),
421 'comppath' => competency_path_exporter::get_read_structure(),
423 'manageurl' => new external_value(PARAM_LOCALURL, 'Url to the manage competencies page.'),
429 * Returns description of data_for_templates_manage_page() parameters.
431 * @return \external_function_parameters
433 public static function data_for_templates_manage_page_parameters() {
434 $params = array('pagecontext' => self::get_context_parameters());
435 return new external_function_parameters($params);
439 * Loads the data required to render the templates_manage_page template.
441 * @param array $pagecontext The page context info.
444 public static function data_for_templates_manage_page($pagecontext) {
447 $params = self::validate_parameters(self::data_for_templates_manage_page_parameters(), array(
448 'pagecontext' => $pagecontext
450 $context = self::get_context_from_params($params['pagecontext']);
451 self::validate_context($context);
453 $renderable = new output\manage_templates_page($context);
454 $renderer = $PAGE->get_renderer('tool_lp');
456 $data = $renderable->export_for_template($renderer);
462 * Returns description of data_for_templates_manage_page() result value.
464 * @return \external_description
466 public static function data_for_templates_manage_page_returns() {
467 return new external_single_structure(array (
468 'templates' => new external_multiple_structure(
469 template_exporter::get_read_structure()
471 'pluginbaseurl' => new external_value(PARAM_LOCALURL, 'Url to the tool_lp plugin folder on this Moodle site'),
472 'navigation' => new external_multiple_structure(
473 new external_value(PARAM_RAW, 'HTML for a navigation item that should be on this page')
475 'pagecontextid' => new external_value(PARAM_INT, 'The page context id'),
476 'canmanage' => new external_value(PARAM_BOOL, 'Whether the user manage the templates')
482 * Returns description of data_for_template_competenies_page() parameters.
484 * @return \external_function_parameters
486 public static function data_for_template_competencies_page_parameters() {
487 $templateid = new external_value(
492 $params = array('templateid' => $templateid, 'pagecontext' => self::get_context_parameters());
493 return new external_function_parameters($params);
497 * Loads the data required to render the template_competencies_page template.
499 * @param int $templateid Template id.
500 * @param array $pagecontext The page context info.
503 public static function data_for_template_competencies_page($templateid, $pagecontext) {
505 $params = self::validate_parameters(self::data_for_template_competencies_page_parameters(), array(
506 'templateid' => $templateid,
507 'pagecontext' => $pagecontext
510 $context = self::get_context_from_params($params['pagecontext']);
511 self::validate_context($context);
513 $template = api::read_template($params['templateid']);
514 $renderable = new output\template_competencies_page($template, $context);
515 $renderer = $PAGE->get_renderer('tool_lp');
517 $data = $renderable->export_for_template($renderer);
523 * Returns description of data_for_template_competencies_page() result value.
525 * @return \external_description
527 public static function data_for_template_competencies_page_returns() {
528 return new external_single_structure(array (
529 'template' => template_exporter::get_read_structure(),
530 'pagecontextid' => new external_value(PARAM_INT, 'Context ID'),
531 'canmanagecompetencyframeworks' => new external_value(PARAM_BOOL, 'User can manage competency frameworks'),
532 'canmanagetemplatecompetencies' => new external_value(PARAM_BOOL, 'User can manage learning plan templates'),
533 'competencies' => new external_multiple_structure(
534 competency_summary_exporter::get_read_structure()
536 'manageurl' => new external_value(PARAM_LOCALURL, 'Url to the manage competencies page.'),
537 'pluginbaseurl' => new external_value(PARAM_LOCALURL, 'Base URL of the plugin.'),
538 'statistics' => template_statistics_exporter::get_read_structure()
544 * Returns description of data_for_plan_competenies_page() parameters.
546 * @return \external_function_parameters
548 public static function data_for_plan_page_parameters() {
549 $planid = new external_value(
554 $params = array('planid' => $planid);
555 return new external_function_parameters($params);
559 * Loads the data required to render the plan_page template.
561 * @param int $planid Learning Plan id.
564 public static function data_for_plan_page($planid) {
566 $params = self::validate_parameters(self::data_for_plan_page_parameters(), array(
569 $plan = api::read_plan($params['planid']);
570 self::validate_context($plan->get_context());
572 $renderable = new output\plan_page($plan);
573 $renderer = $PAGE->get_renderer('tool_lp');
575 $data = $renderable->export_for_template($renderer);
581 * Returns description of data_for_plan_page() result value.
583 * @return \external_description
585 public static function data_for_plan_page_returns() {
586 $uc = user_competency_exporter::get_read_structure();
587 $ucp = user_competency_plan_exporter::get_read_structure();
589 $uc->required = VALUE_OPTIONAL;
590 $ucp->required = VALUE_OPTIONAL;
592 return new external_single_structure(array (
593 'plan' => plan_exporter::get_read_structure(),
594 'contextid' => new external_value(PARAM_INT, 'Context ID.'),
595 'pluginbaseurl' => new external_value(PARAM_URL, 'Plugin base URL.'),
596 'competencies' => new external_multiple_structure(
597 new external_single_structure(array(
598 'competency' => competency_exporter::get_read_structure(),
599 'comppath' => competency_path_exporter::get_read_structure(),
600 'usercompetency' => $uc,
601 'usercompetencyplan' => $ucp
604 'competencycount' => new external_value(PARAM_INT, 'Count of competencies'),
605 'proficientcompetencycount' => new external_value(PARAM_INT, 'Count of proficientcompetencies'),
606 'proficientcompetencypercentage' => new external_value(PARAM_FLOAT, 'Percentage of competencies proficient'),
607 'proficientcompetencypercentageformatted' => new external_value(PARAM_RAW, 'Displayable percentage'),
612 * Returns description of data_for_plans_page() parameters.
614 * @return \external_function_parameters
616 public static function data_for_plans_page_parameters() {
617 $userid = new external_value(
622 $params = array('userid' => $userid);
623 return new external_function_parameters($params);
627 * Loads the data required to render the plans_page template.
629 * @param int $userid User id.
632 public static function data_for_plans_page($userid) {
635 $params = self::validate_parameters(self::data_for_plans_page_parameters(), array(
639 $context = context_user::instance($params['userid']);
640 self::validate_context($context);
641 $output = $PAGE->get_renderer('tool_lp');
643 $renderable = new \tool_lp\output\plans_page($params['userid']);
645 return $renderable->export_for_template($output);
649 * Returns description of data_for_plans_page() result value.
651 * @return \external_description
653 public static function data_for_plans_page_returns() {
654 return new external_single_structure(array (
655 'userid' => new external_value(PARAM_INT, 'The learning plan user id'),
656 'plans' => new external_multiple_structure(
657 plan_exporter::get_read_structure()
659 'pluginbaseurl' => new external_value(PARAM_LOCALURL, 'Url to the tool_lp plugin folder on this Moodle site'),
660 'navigation' => new external_multiple_structure(
661 new external_value(PARAM_RAW, 'HTML for a navigation item that should be on this page')
663 'canreaduserevidence' => new external_value(PARAM_BOOL, 'Can the current user view the user\'s evidence'),
664 'canmanageuserplans' => new external_value(PARAM_BOOL, 'Can the current user manage the user\'s plans'),
669 * Returns description of external function parameters.
671 * @return \external_function_parameters
673 public static function data_for_user_evidence_list_page_parameters() {
674 return new external_function_parameters(array(
675 'userid' => new external_value(PARAM_INT, 'The user ID')
680 * Loads the data required to render the user_evidence_list_page template.
682 * @param int $userid User id.
685 public static function data_for_user_evidence_list_page($userid) {
687 $params = self::validate_parameters(self::data_for_user_evidence_list_page_parameters(),
688 array('userid' => $userid));
690 $context = context_user::instance($params['userid']);
691 self::validate_context($context);
692 $output = $PAGE->get_renderer('tool_lp');
694 $renderable = new \tool_lp\output\user_evidence_list_page($params['userid']);
695 return $renderable->export_for_template($output);
699 * Returns description of external function result value.
701 * @return \external_description
703 public static function data_for_user_evidence_list_page_returns() {
704 return new external_single_structure(array (
705 'canmanage' => new external_value(PARAM_BOOL, 'Can the current user manage the user\'s evidence'),
706 'userid' => new external_value(PARAM_INT, 'The user ID'),
707 'pluginbaseurl' => new external_value(PARAM_LOCALURL, 'Url to the tool_lp plugin folder on this Moodle site'),
708 'evidence' => new external_multiple_structure(user_evidence_summary_exporter::get_read_structure()),
709 'navigation' => new external_multiple_structure(
710 new external_value(PARAM_RAW, 'HTML for a navigation item that should be on this page')
716 * Returns description of external function parameters.
718 * @return \external_function_parameters
720 public static function data_for_user_evidence_page_parameters() {
721 return new external_function_parameters(array(
722 'id' => new external_value(PARAM_INT, 'The user evidence ID')
727 * Loads the data required to render the user_evidence_page template.
729 * @param int $id User id.
732 public static function data_for_user_evidence_page($id) {
734 $params = self::validate_parameters(self::data_for_user_evidence_page_parameters(),
737 $userevidence = api::read_user_evidence($id);
738 self::validate_context($userevidence->get_context());
739 $output = $PAGE->get_renderer('tool_lp');
741 $renderable = new \tool_lp\output\user_evidence_page($userevidence);
742 return $renderable->export_for_template($output);
746 * Returns description of external function result value.
748 * @return \external_description
750 public static function data_for_user_evidence_page_returns() {
751 return new external_single_structure(array(
752 'userevidence' => user_evidence_summary_exporter::get_read_structure(),
753 'pluginbaseurl' => new external_value(PARAM_LOCALURL, 'Url to the tool_lp plugin folder on this Moodle site')
758 * Returns the description of the data_for_related_competencies_section_parameters() parameters.
760 * @return external_function_parameters.
762 public static function data_for_related_competencies_section_parameters() {
763 $competencyid = new external_value(
768 return new external_function_parameters(array('competencyid' => $competencyid));
772 * Data to render in the related competencies section.
774 * @param int $competencyid
775 * @return array Related competencies and whether to show delete action button or not.
777 public static function data_for_related_competencies_section($competencyid) {
780 $params = self::validate_parameters(self::data_for_related_competencies_section_parameters(), array(
781 'competencyid' => $competencyid,
783 $competency = api::read_competency($params['competencyid']);
784 self::validate_context($competency->get_context());
786 $renderable = new \tool_lp\output\related_competencies($params['competencyid']);
787 $renderer = $PAGE->get_renderer('tool_lp');
789 return $renderable->export_for_template($renderer);
793 * Returns description of data_for_related_competencies_section_returns() result value.
795 * @return external_description
797 public static function data_for_related_competencies_section_returns() {
798 return new external_single_structure(array(
799 'relatedcompetencies' => new external_multiple_structure(competency_exporter::get_read_structure()),
800 'showdeleterelatedaction' => new external_value(PARAM_BOOL, 'Whether to show the delete relation link or not')
805 * Returns the description of external function parameters.
807 * @return external_function_parameters.
809 public static function search_users_parameters() {
810 $query = new external_value(
814 $capability = new external_value(
816 'Required capability'
818 $limitfrom = new external_value(
820 'Number of records to skip',
824 $limitnum = new external_value(
826 'Number of records to fetch',
830 return new external_function_parameters(array(
832 'capability' => $capability,
833 'limitfrom' => $limitfrom,
834 'limitnum' => $limitnum
841 * @param string $query
842 * @param string $capability
843 * @param int $limitfrom
844 * @param int $limitnum
847 public static function search_users($query, $capability = '', $limitfrom = 0, $limitnum = 100) {
848 global $DB, $CFG, $PAGE, $USER;
850 $params = self::validate_parameters(self::search_users_parameters(), array(
852 'capability' => $capability,
853 'limitfrom' => $limitfrom,
854 'limitnum' => $limitnum,
856 $query = $params['query'];
857 $cap = $params['capability'];
858 $limitfrom = $params['limitfrom'];
859 $limitnum = $params['limitnum'];
861 $context = context_system::instance();
862 self::validate_context($context);
863 $output = $PAGE->get_renderer('tool_lp');
865 list($filtercapsql, $filtercapparams) = api::filter_users_with_capability_on_user_context_sql($cap,
866 $USER->id, SQL_PARAMS_NAMED);
868 $extrasearchfields = array();
869 if (!empty($CFG->showuseridentity) && has_capability('moodle/site:viewuseridentity', $context)) {
870 $extrasearchfields = explode(',', $CFG->showuseridentity);
872 $fields = \user_picture::fields('u', $extrasearchfields);
874 list($wheresql, $whereparams) = users_search_sql($query, 'u', true, $extrasearchfields);
875 list($sortsql, $sortparams) = users_order_by_sql('u', $query, $context);
877 $countsql = "SELECT COUNT('x') FROM {user} u WHERE $wheresql AND u.id $filtercapsql";
878 $countparams = $whereparams + $filtercapparams;
879 $sql = "SELECT $fields FROM {user} u WHERE $wheresql AND u.id $filtercapsql ORDER BY $sortsql";
880 $params = $whereparams + $filtercapparams + $sortparams;
882 $count = $DB->count_records_sql($countsql, $countparams);
883 $result = $DB->get_recordset_sql($sql, $params, $limitfrom, $limitnum);
886 foreach ($result as $key => $user) {
887 // Make sure all required fields are set.
888 foreach (user_summary_exporter::define_properties() as $propertykey => $definition) {
889 if (empty($user->$propertykey) || !in_array($propertykey, $extrasearchfields)) {
890 if ($propertykey != 'id') {
891 $user->$propertykey = '';
895 $exporter = new user_summary_exporter($user);
896 $newuser = $exporter->export($output);
898 $users[$key] = $newuser;
909 * Returns description of external function result value.
911 * @return external_description
913 public static function search_users_returns() {
915 require_once($CFG->dirroot . '/user/externallib.php');
916 return new external_single_structure(array(
917 'users' => new external_multiple_structure(user_summary_exporter::get_read_structure()),
918 'count' => new external_value(PARAM_INT, 'Total number of results.')
923 * Returns the description of external function parameters.
925 * @return external_function_parameters
927 public static function search_cohorts_parameters() {
928 $query = new external_value(
932 $includes = new external_value(
934 'What other contexts to fetch the frameworks from. (all, parents, self)',
938 $limitfrom = new external_value(
940 'limitfrom we are fetching the records from',
944 $limitnum = new external_value(
946 'Number of records to fetch',
950 return new external_function_parameters(array(
952 'context' => self::get_context_parameters(),
953 'includes' => $includes,
954 'limitfrom' => $limitfrom,
955 'limitnum' => $limitnum
961 * TODO: MDL-52243 Move this function to cohorts/externallib.php
963 * @param string $query
964 * @param array $context
965 * @param string $includes
966 * @param int $limitfrom
967 * @param int $limitnum
970 public static function search_cohorts($query, $context, $includes = 'parents', $limitfrom = 0, $limitnum = 25) {
971 global $DB, $CFG, $PAGE;
972 require_once($CFG->dirroot . '/cohort/lib.php');
974 $params = self::validate_parameters(self::search_cohorts_parameters(), array(
976 'context' => $context,
977 'includes' => $includes,
978 'limitfrom' => $limitfrom,
979 'limitnum' => $limitnum,
981 $query = $params['query'];
982 $includes = $params['includes'];
983 $context = self::get_context_from_params($params['context']);
984 $limitfrom = $params['limitfrom'];
985 $limitnum = $params['limitnum'];
987 self::validate_context($context);
988 $output = $PAGE->get_renderer('tool_lp');
990 $manager = has_capability('moodle/cohort:manage', $context);
992 require_capability('moodle/cohort:view', $context);
995 // TODO Make this more efficient.
996 if ($includes == 'self') {
997 $results = cohort_get_cohorts($context->id, $limitfrom, $limitnum, $query);
998 $results = $results['cohorts'];
999 } else if ($includes == 'parents') {
1000 $results = cohort_get_cohorts($context->id, $limitfrom, $limitnum, $query);
1001 $results = $results['cohorts'];
1002 if (!$context instanceof context_system) {
1003 $results = array_merge($results, cohort_get_available_cohorts($context, COHORT_ALL, $limitfrom, $limitnum, $query));
1005 } else if ($includes == 'all') {
1006 $results = cohort_get_all_cohorts($limitfrom, $limitnum, $query);
1007 $results = $results['cohorts'];
1009 throw new coding_exception('Invalid parameter value for \'includes\'.');
1013 foreach ($results as $key => $cohort) {
1014 $cohortcontext = context::instance_by_id($cohort->contextid);
1015 $exporter = new cohort_summary_exporter($cohort, array('context' => $cohortcontext));
1016 $newcohort = $exporter->export($output);
1018 $cohorts[$key] = $newcohort;
1021 return array('cohorts' => $cohorts);
1025 * Returns description of external function result value.
1027 * @return external_description
1029 public static function search_cohorts_returns() {
1030 return new external_single_structure(array(
1031 'cohorts' => new external_multiple_structure(cohort_summary_exporter::get_read_structure())
1036 * Returns description of external function.
1038 * @return \external_function_parameters
1040 public static function data_for_user_competency_summary_parameters() {
1041 $userid = new external_value(
1043 'Data base record id for the user',
1046 $competencyid = new external_value(
1048 'Data base record id for the competency',
1052 'userid' => $userid,
1053 'competencyid' => $competencyid,
1055 return new external_function_parameters($params);
1059 * Data for user competency summary.
1061 * @param int $userid The user ID
1062 * @param int $competencyid The competency ID
1065 public static function data_for_user_competency_summary($userid, $competencyid) {
1067 $params = self::validate_parameters(self::data_for_user_competency_summary_parameters(), array(
1068 'userid' => $userid,
1069 'competencyid' => $competencyid,
1072 $uc = api::get_user_competency($params['userid'], $params['competencyid']);
1073 self::validate_context($uc->get_context());
1074 $output = $PAGE->get_renderer('tool_lp');
1076 $renderable = new \tool_lp\output\user_competency_summary($uc);
1077 return $renderable->export_for_template($output);
1081 * Returns description of external function.
1083 * @return \external_description
1085 public static function data_for_user_competency_summary_returns() {
1086 return user_competency_summary_exporter::get_read_structure();
1090 * Returns description of data_for_user_competency_summary_in_plan() parameters.
1092 * @return \external_function_parameters
1094 public static function data_for_user_competency_summary_in_plan_parameters() {
1095 $competencyid = new external_value(
1097 'Data base record id for the competency',
1100 $planid = new external_value(
1102 'Data base record id for the plan',
1107 'competencyid' => $competencyid,
1108 'planid' => $planid,
1110 return new external_function_parameters($params);
1114 * Read a user competency summary.
1116 * @param int $competencyid The competency id
1117 * @param int $planid The plan id
1120 public static function data_for_user_competency_summary_in_plan($competencyid, $planid) {
1122 $params = self::validate_parameters(self::data_for_user_competency_summary_in_plan_parameters(), array(
1123 'competencyid' => $competencyid,
1127 $plan = api::read_plan($params['planid']);
1128 $context = $plan->get_context();
1129 self::validate_context($context);
1130 $output = $PAGE->get_renderer('tool_lp');
1132 $renderable = new user_competency_summary_in_plan($params['competencyid'], $params['planid']);
1133 return $renderable->export_for_template($output);
1137 * Returns description of data_for_user_competency_summary_in_plan() result value.
1139 * @return \external_description
1141 public static function data_for_user_competency_summary_in_plan_returns() {
1142 return user_competency_summary_in_plan_exporter::get_read_structure();
1146 * Returns description of data_for_user_competency_summary_in_course() parameters.
1148 * @return \external_function_parameters
1150 public static function data_for_user_competency_summary_in_course_parameters() {
1151 $userid = new external_value(
1153 'Data base record id for the user',
1156 $competencyid = new external_value(
1158 'Data base record id for the competency',
1161 $courseid = new external_value(
1163 'Data base record id for the course',
1168 'userid' => $userid,
1169 'competencyid' => $competencyid,
1170 'courseid' => $courseid,
1172 return new external_function_parameters($params);
1176 * Read a user competency summary.
1178 * @param int $userid The user id
1179 * @param int $competencyid The competency id
1180 * @param int $courseid The course id
1183 public static function data_for_user_competency_summary_in_course($userid, $competencyid, $courseid) {
1185 $params = self::validate_parameters(self::data_for_user_competency_summary_in_course_parameters(), array(
1186 'userid' => $userid,
1187 'competencyid' => $competencyid,
1188 'courseid' => $courseid
1190 $context = context_user::instance($params['userid']);
1191 self::validate_context($context);
1192 $output = $PAGE->get_renderer('tool_lp');
1194 $renderable = new user_competency_summary_in_course($params['userid'], $params['competencyid'], $params['courseid']);
1195 return $renderable->export_for_template($output);
1199 * Returns description of data_for_user_competency_summary_in_course() result value.
1201 * @return \external_description
1203 public static function data_for_user_competency_summary_in_course_returns() {
1204 return user_competency_summary_in_course_exporter::get_read_structure();