Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/group/externallib.php
Go to the documentation of this file.
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 }
 All Data Structures Namespaces Files Functions Variables Enumerations