|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00027 require_once("$CFG->libdir/externallib.php"); 00028 00032 class core_group_external extends external_api { 00033 00038 public static function create_groups_parameters() { 00039 return new external_function_parameters( 00040 array( 00041 'groups' => new external_multiple_structure( 00042 new external_single_structure( 00043 array( 00044 'courseid' => new external_value(PARAM_INT, 'id of course'), 00045 'name' => new external_value(PARAM_TEXT, 'multilang compatible name, course unique'), 00046 'description' => new external_value(PARAM_RAW, 'group description text'), 00047 'enrolmentkey' => new external_value(PARAM_RAW, 'group enrol secret phrase'), 00048 ) 00049 ), 'List of group object. A group has a courseid, a name, a description and an enrolment key.' 00050 ) 00051 ) 00052 ); 00053 } 00054 00060 public static function create_groups($groups) { 00061 global $CFG, $DB; 00062 require_once("$CFG->dirroot/group/lib.php"); 00063 00064 $params = self::validate_parameters(self::create_groups_parameters(), array('groups'=>$groups)); 00065 00066 $transaction = $DB->start_delegated_transaction(); 00067 00068 $groups = array(); 00069 00070 foreach ($params['groups'] as $group) { 00071 $group = (object)$group; 00072 00073 if (trim($group->name) == '') { 00074 throw new invalid_parameter_exception('Invalid group name'); 00075 } 00076 if ($DB->get_record('groups', array('courseid'=>$group->courseid, 'name'=>$group->name))) { 00077 throw new invalid_parameter_exception('Group with the same name already exists in the course'); 00078 } 00079 00080 // now security checks 00081 $context = get_context_instance(CONTEXT_COURSE, $group->courseid); 00082 try { 00083 self::validate_context($context); 00084 } catch (Exception $e) { 00085 $exceptionparam = new stdClass(); 00086 $exceptionparam->message = $e->getMessage(); 00087 $exceptionparam->courseid = $group->courseid; 00088 throw new moodle_exception( 00089 get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); 00090 } 00091 require_capability('moodle/course:managegroups', $context); 00092 00093 // finally create the group 00094 $group->id = groups_create_group($group, false); 00095 $groups[] = (array)$group; 00096 } 00097 00098 $transaction->allow_commit(); 00099 00100 return $groups; 00101 } 00102 00107 public static function create_groups_returns() { 00108 return new external_multiple_structure( 00109 new external_single_structure( 00110 array( 00111 'id' => new external_value(PARAM_INT, 'group record id'), 00112 'courseid' => new external_value(PARAM_INT, 'id of course'), 00113 'name' => new external_value(PARAM_TEXT, 'multilang compatible name, course unique'), 00114 'description' => new external_value(PARAM_RAW, 'group description text'), 00115 'enrolmentkey' => new external_value(PARAM_RAW, 'group enrol secret phrase'), 00116 ) 00117 ), 'List of group object. A group has an id, a courseid, a name, a description and an enrolment key.' 00118 ); 00119 } 00120 00125 public static function get_groups_parameters() { 00126 return new external_function_parameters( 00127 array( 00128 'groupids' => new external_multiple_structure(new external_value(PARAM_INT, 'Group ID') 00129 ,'List of group id. A group id is an integer.'), 00130 ) 00131 ); 00132 } 00133 00139 public static function get_groups($groupids) { 00140 $params = self::validate_parameters(self::get_groups_parameters(), array('groupids'=>$groupids)); 00141 00142 $groups = array(); 00143 foreach ($params['groupids'] as $groupid) { 00144 // validate params 00145 $group = groups_get_group($groupid, 'id, courseid, name, description, enrolmentkey', MUST_EXIST); 00146 00147 // now security checks 00148 $context = get_context_instance(CONTEXT_COURSE, $group->courseid); 00149 try { 00150 self::validate_context($context); 00151 } catch (Exception $e) { 00152 $exceptionparam = new stdClass(); 00153 $exceptionparam->message = $e->getMessage(); 00154 $exceptionparam->courseid = $group->courseid; 00155 throw new moodle_exception( 00156 get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); 00157 } 00158 require_capability('moodle/course:managegroups', $context); 00159 00160 $groups[] = (array)$group; 00161 } 00162 00163 return $groups; 00164 } 00165 00170 public static function get_groups_returns() { 00171 return new external_multiple_structure( 00172 new external_single_structure( 00173 array( 00174 'id' => new external_value(PARAM_INT, 'group record id'), 00175 'courseid' => new external_value(PARAM_INT, 'id of course'), 00176 'name' => new external_value(PARAM_TEXT, 'multilang compatible name, course unique'), 00177 'description' => new external_value(PARAM_RAW, 'group description text'), 00178 'enrolmentkey' => new external_value(PARAM_RAW, 'group enrol secret phrase'), 00179 ) 00180 ) 00181 ); 00182 } 00183 00188 public static function get_course_groups_parameters() { 00189 return new external_function_parameters( 00190 array( 00191 'courseid' => new external_value(PARAM_INT, 'id of course'), 00192 ) 00193 ); 00194 } 00195 00201 public static function get_course_groups($courseid) { 00202 $params = self::validate_parameters(self::get_course_groups_parameters(), array('courseid'=>$courseid)); 00203 00204 // now security checks 00205 $context = get_context_instance(CONTEXT_COURSE, $params['courseid']); 00206 try { 00207 self::validate_context($context); 00208 } catch (Exception $e) { 00209 $exceptionparam = new stdClass(); 00210 $exceptionparam->message = $e->getMessage(); 00211 $exceptionparam->courseid = $params['courseid']; 00212 throw new moodle_exception( 00213 get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); 00214 } 00215 require_capability('moodle/course:managegroups', $context); 00216 00217 $gs = groups_get_all_groups($params['courseid'], 0, 0, 'g.id, g.courseid, g.name, g.description, g.enrolmentkey'); 00218 00219 $groups = array(); 00220 foreach ($gs as $group) { 00221 $groups[] = (array)$group; 00222 } 00223 00224 return $groups; 00225 } 00226 00231 public static function get_course_groups_returns() { 00232 return new external_multiple_structure( 00233 new external_single_structure( 00234 array( 00235 'id' => new external_value(PARAM_INT, 'group record id'), 00236 'courseid' => new external_value(PARAM_INT, 'id of course'), 00237 'name' => new external_value(PARAM_TEXT, 'multilang compatible name, course unique'), 00238 'description' => new external_value(PARAM_RAW, 'group description text'), 00239 'enrolmentkey' => new external_value(PARAM_RAW, 'group enrol secret phrase'), 00240 ) 00241 ) 00242 ); 00243 } 00244 00249 public static function delete_groups_parameters() { 00250 return new external_function_parameters( 00251 array( 00252 'groupids' => new external_multiple_structure(new external_value(PARAM_INT, 'Group ID')), 00253 ) 00254 ); 00255 } 00256 00262 public static function delete_groups($groupids) { 00263 global $CFG, $DB; 00264 require_once("$CFG->dirroot/group/lib.php"); 00265 00266 $params = self::validate_parameters(self::delete_groups_parameters(), array('groupids'=>$groupids)); 00267 00268 $transaction = $DB->start_delegated_transaction(); 00269 00270 foreach ($params['groupids'] as $groupid) { 00271 // validate params 00272 $groupid = validate_param($groupid, PARAM_INTEGER); 00273 if (!$group = groups_get_group($groupid, 'id, courseid', IGNORE_MISSING)) { 00274 // silently ignore attempts to delete nonexisting groups 00275 continue; 00276 } 00277 00278 // now security checks 00279 $context = get_context_instance(CONTEXT_COURSE, $group->courseid); 00280 try { 00281 self::validate_context($context); 00282 } catch (Exception $e) { 00283 $exceptionparam = new stdClass(); 00284 $exceptionparam->message = $e->getMessage(); 00285 $exceptionparam->courseid = $group->courseid; 00286 throw new moodle_exception( 00287 get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); 00288 } 00289 require_capability('moodle/course:managegroups', $context); 00290 00291 groups_delete_group($group); 00292 } 00293 00294 $transaction->allow_commit(); 00295 } 00296 00301 public static function delete_groups_returns() { 00302 return null; 00303 } 00304 00305 00310 public static function get_group_members_parameters() { 00311 return new external_function_parameters( 00312 array( 00313 'groupids' => new external_multiple_structure(new external_value(PARAM_INT, 'Group ID')), 00314 ) 00315 ); 00316 } 00317 00323 public static function get_group_members($groupids) { 00324 $members = array(); 00325 00326 $params = self::validate_parameters(self::get_group_members_parameters(), array('groupids'=>$groupids)); 00327 00328 foreach ($params['groupids'] as $groupid) { 00329 // validate params 00330 $group = groups_get_group($groupid, 'id, courseid, name, enrolmentkey', MUST_EXIST); 00331 // now security checks 00332 $context = get_context_instance(CONTEXT_COURSE, $group->courseid); 00333 try { 00334 self::validate_context($context); 00335 } catch (Exception $e) { 00336 $exceptionparam = new stdClass(); 00337 $exceptionparam->message = $e->getMessage(); 00338 $exceptionparam->courseid = $group->courseid; 00339 throw new moodle_exception( 00340 get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); 00341 } 00342 require_capability('moodle/course:managegroups', $context); 00343 00344 $groupmembers = groups_get_members($group->id, 'u.id', 'lastname ASC, firstname ASC'); 00345 00346 $members[] = array('groupid'=>$groupid, 'userids'=>array_keys($groupmembers)); 00347 } 00348 00349 return $members; 00350 } 00351 00356 public static function get_group_members_returns() { 00357 return new external_multiple_structure( 00358 new external_single_structure( 00359 array( 00360 'groupid' => new external_value(PARAM_INT, 'group record id'), 00361 'userids' => new external_multiple_structure(new external_value(PARAM_INT, 'user id')), 00362 ) 00363 ) 00364 ); 00365 } 00366 00367 00372 public static function add_group_members_parameters() { 00373 return new external_function_parameters( 00374 array( 00375 'members'=> new external_multiple_structure( 00376 new external_single_structure( 00377 array( 00378 'groupid' => new external_value(PARAM_INT, 'group record id'), 00379 'userid' => new external_value(PARAM_INT, 'user id'), 00380 ) 00381 ) 00382 ) 00383 ) 00384 ); 00385 } 00386 00392 public static function add_group_members($members) { 00393 global $CFG, $DB; 00394 require_once("$CFG->dirroot/group/lib.php"); 00395 00396 $params = self::validate_parameters(self::add_group_members_parameters(), array('members'=>$members)); 00397 00398 $transaction = $DB->start_delegated_transaction(); 00399 foreach ($params['members'] as $member) { 00400 // validate params 00401 $groupid = $member['groupid']; 00402 $userid = $member['userid']; 00403 00404 $group = groups_get_group($groupid, 'id, courseid', MUST_EXIST); 00405 $user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0, 'mnethostid'=>$CFG->mnet_localhost_id), '*', MUST_EXIST); 00406 00407 // now security checks 00408 $context = get_context_instance(CONTEXT_COURSE, $group->courseid); 00409 try { 00410 self::validate_context($context); 00411 } catch (Exception $e) { 00412 $exceptionparam = new stdClass(); 00413 $exceptionparam->message = $e->getMessage(); 00414 $exceptionparam->courseid = $group->courseid; 00415 throw new moodle_exception( 00416 get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); 00417 } 00418 require_capability('moodle/course:managegroups', $context); 00419 00420 // now make sure user is enrolled in course - this is mandatory requirement, 00421 // unfortunately this is slow 00422 if (!is_enrolled($context, $userid)) { 00423 throw new invalid_parameter_exception('Only enrolled users may be members of groups'); 00424 } 00425 00426 groups_add_member($group, $user); 00427 } 00428 00429 $transaction->allow_commit(); 00430 } 00431 00436 public static function add_group_members_returns() { 00437 return null; 00438 } 00439 00440 00445 public static function delete_group_members_parameters() { 00446 return new external_function_parameters( 00447 array( 00448 'members'=> new external_multiple_structure( 00449 new external_single_structure( 00450 array( 00451 'groupid' => new external_value(PARAM_INT, 'group record id'), 00452 'userid' => new external_value(PARAM_INT, 'user id'), 00453 ) 00454 ) 00455 ) 00456 ) 00457 ); 00458 } 00459 00465 public static function delete_group_members($members) { 00466 global $CFG, $DB; 00467 require_once("$CFG->dirroot/group/lib.php"); 00468 00469 $params = self::validate_parameters(self::delete_group_members_parameters(), array('members'=>$members)); 00470 00471 $transaction = $DB->start_delegated_transaction(); 00472 00473 foreach ($params['members'] as $member) { 00474 // validate params 00475 $groupid = $member['groupid']; 00476 $userid = $member['userid']; 00477 00478 $group = groups_get_group($groupid, 'id, courseid', MUST_EXIST); 00479 $user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0, 'mnethostid'=>$CFG->mnet_localhost_id), '*', MUST_EXIST); 00480 00481 // now security checks 00482 $context = get_context_instance(CONTEXT_COURSE, $group->courseid); 00483 try { 00484 self::validate_context($context); 00485 } catch (Exception $e) { 00486 $exceptionparam = new stdClass(); 00487 $exceptionparam->message = $e->getMessage(); 00488 $exceptionparam->courseid = $group->courseid; 00489 throw new moodle_exception( 00490 get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); 00491 } 00492 require_capability('moodle/course:managegroups', $context); 00493 00494 groups_remove_member($group, $user); 00495 } 00496 00497 $transaction->allow_commit(); 00498 } 00499 00504 public static function delete_group_members_returns() { 00505 return null; 00506 } 00507 00508 } 00509 00514 class moodle_group_external extends external_api { 00515 00521 public static function create_groups_parameters() { 00522 return core_group_external::create_groups_parameters(); 00523 } 00524 00531 public static function create_groups($groups) { 00532 return core_group_external::create_groups($groups); 00533 } 00534 00540 public static function create_groups_returns() { 00541 return core_group_external::create_groups_returns(); 00542 } 00543 00549 public static function get_groups_parameters() { 00550 return core_group_external::get_groups_parameters(); 00551 } 00552 00559 public static function get_groups($groupids) { 00560 return core_group_external::get_groups($groupids); 00561 } 00562 00568 public static function get_groups_returns() { 00569 return core_group_external::get_groups_returns(); 00570 } 00571 00577 public static function get_course_groups_parameters() { 00578 return core_group_external::get_course_groups_parameters(); 00579 } 00580 00587 public static function get_course_groups($courseid) { 00588 return core_group_external::get_course_groups($courseid); 00589 } 00590 00596 public static function get_course_groups_returns() { 00597 return core_group_external::get_course_groups_returns(); 00598 } 00599 00605 public static function delete_groups_parameters() { 00606 return core_group_external::delete_group_members_parameters(); 00607 } 00608 00615 public static function delete_groups($groupids) { 00616 return core_group_external::delete_groups($groupids); 00617 } 00618 00624 public static function delete_groups_returns() { 00625 return core_group_external::delete_group_members_returns(); 00626 } 00627 00628 00634 public static function get_groupmembers_parameters() { 00635 return core_group_external::get_group_members_parameters(); 00636 } 00637 00644 public static function get_groupmembers($groupids) { 00645 return core_group_external::get_group_members($groupids); 00646 } 00647 00653 public static function get_groupmembers_returns() { 00654 return core_group_external::get_group_members_returns(); 00655 } 00656 00657 00663 public static function add_groupmembers_parameters() { 00664 return core_group_external::add_group_members_parameters(); 00665 } 00666 00673 public static function add_groupmembers($members) { 00674 return core_group_external::add_group_members($members); 00675 } 00676 00682 public static function add_groupmembers_returns() { 00683 return core_group_external::add_group_members_returns(); 00684 } 00685 00686 00692 public static function delete_groupmembers_parameters() { 00693 return core_group_external::delete_group_members_parameters(); 00694 } 00695 00702 public static function delete_groupmembers($members) { 00703 return core_group_external::delete_group_members($members); 00704 } 00705 00711 public static function delete_groupmembers_returns() { 00712 return core_group_external::delete_group_members_returns(); 00713 } 00714 00715 }