* @author Jordi Piguillem
* @author David Castro
* @author Ferran Recio
+ * @author Jerome Mouneyrac
*/
require_once(dirname(dirname(__FILE__)) . '/group/lib.php');
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
$group = new stdClass;
- $group->courseid = $params['courseid'];
- $group->name = $params['groupname'];
+ $group->courseid = $params['courseid'];
+ $group->name = $params['groupname'];
- // @TODO: groups_create_group() does not check courseid
- return groups_create_group($group, false);
+ // @TODO: groups_create_group() does not check courseid
+ return groups_create_group($group, false);
}
else {
throw new moodle_exception('wscouldnotcreategroup');
}
/**
- * Get a group member
+ * Create some groups
+ * @param array|struct $params
+ * @subparam string $params:group->groupname
+ * @subparam integer $params:group->courseid
+ * @return array $return
+ * @subparam integer $return:groupid
+ */
+ static function tmp_create_groups($params) {
+ global $USER;
+ $groupids = array();
+
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+
+ foreach ($params as $groupparam) {
+ $group = new stdClass;
+ $group->courseid = clean_param($groupparam['courseid'], PARAM_INTEGER);
+ $group->name = clean_param($groupparam['groupname'], PARAM_ALPHANUMEXT);
+ $groupids[] = groups_create_group($group, false);
+ }
+
+ return $groupids;
+ }
+ else {
+ throw new moodle_exception('wscouldnotcreategroupnopermission');
+ }
+ }
+
+ /**
+ * Get some groups
+ * @param array|struct $params
+ * @subparam integer $params:groupid
+ * @return object $return
+ * @subreturn integer $return:group->id
+ * @subreturn integer $return:group->courseid
+ * @subreturn string $return:group->name
+ * @subreturn string $return:group->enrolmentkey
+ */
+ static function tmp_get_groups($params){
+
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+
+ foreach ($params as $groupid) {
+ $group = groups_get_group(clean_param($groupid, PARAM_INTEGER));
+
+ $ret = new StdClass();
+ $ret->id = $group->id;
+ $ret->courseid = $group->courseid;
+ $ret->name = $group->name;
+ $ret->enrolmentkey = $group->enrolmentkey;
+
+ $groups[] = $ret;
+ }
+ return $groups;
+ }
+ else {
+ throw new moodle_exception('wscouldnotgetgroupnopermission');
+ }
+
+ }
+
+ /**
+ * Get a group
* @param array|struct $params
* @subparam integer $params->groupid
* @return object $return
* @subreturn string $return->group->name
* @subreturn string $return->group->enrolmentkey
*/
- static function tmp_get_group($params){
+ static function tmp_get_group($params){
- // @TODO: any capability to check?
- $group = groups_get_group($params['groupid']);
+ // @TODO: any capability to check?
+ $group = groups_get_group($params['groupid']);
- $ret = new StdClass();
- $ret->id = $group->id;
- $ret->courseid = $group->courseid;
- $ret->name = $group->name;
- $ret->enrolmentkey = $group->enrolmentkey;
+ $ret = new StdClass();
+ $ret->id = $group->id;
+ $ret->courseid = $group->courseid;
+ $ret->name = $group->name;
+ $ret->enrolmentkey = $group->enrolmentkey;
- return $ret;
+ return $ret;
- }
+ }
/**
* @subparam integer $params->groupid
* @return boolean result
*/
- static function tmp_delete_group($params){
+ static function tmp_delete_group($params){
- if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
- // @TODO groups_add_member() does not check userid
- return groups_delete_group($params['groupid']);
- }
- else {
+ // @TODO groups_add_member() does not check userid
+ return groups_delete_group($params['groupid']);
+ }
+ else {
throw new moodle_exception('wscouldnotdeletegroup');
}
- }
+ }
+
+ /**
+ * Delete some groups
+ * @param array|struct $params
+ * @subparam integer $params:groupid
+ * @return boolean result
+ */
+ static function tmp_delete_groups($params){
+
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+ $deletionsuccessfull = true;
+ foreach ($params as $groupid) {
+ if (!groups_delete_group(clean_param($groupid, PARAM_INTEGER))) {
+ $deletionsuccessfull = false;
+ }
+ }
+ return $deletionsuccessfull;
+ }
+ else {
+ throw new moodle_exception('wscouldnotdeletegroupnopermission');
+ }
+ }
/**
*
* @subparam integer $params->userid
* @return boolean result
*/
- static function tmp_get_groupmember($params){
- }
+ static function tmp_get_groupmember($params){
+ }
/**
* Add a member to a group
* @subparam integer $params->userid
* @return boolean result
*/
- static function tmp_add_groupmember($params){
+ static function tmp_add_groupmember($params){
- if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
- // @TODO groups_add_member() does not check userid
- return groups_add_member($params['groupid'], $params['userid']);
- }
- else {
+ // @TODO groups_add_member() does not check userid
+ return groups_add_member($params['groupid'], $params['userid']);
+ }
+ else {
throw new moodle_exception('wscouldnotaddgroupmember');
}
- }
+ }
+
+ /**
+ * Add some members to some groups
+ * @param array|struct $params
+ * @subparam integer $params:member->groupid
+ * @subparam integer $params:member->userid
+ * @return boolean result
+ */
+ static function tmp_add_groupmembers($params){
+
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+ $addmembersuccessfull = true;
+ foreach($params as $member) {
+ $groupid = clean_param($member['groupid'], PARAM_INTEGER);
+ $userid = clean_param($member['userid'], PARAM_INTEGER);
+ if (!groups_add_member($groupid, $userid)) {
+ $addmembersuccessfull = false;
+ }
+ }
+ return $addmembersuccessfull;
+ }
+ else {
+ throw new moodle_exception('wscouldnotaddgroupmembernopermission');
+ }
+ }
/**
*
* @subparam integer $params->userid
* @return boolean result
*/
- static function tmp_delete_groupmember($params){
- if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+ static function tmp_delete_groupmember($params){
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
- return groups_remove_member($params['groupid'], $params['userid']);
- } else {
+ return groups_remove_member($params['groupid'], $params['userid']);
+ } else {
throw new moodle_exception('wscouldnotremovegroupmember');
}
- }
+ }
+
+ /**
+ * Delete some members from some groups
+ * @param array|struct $params
+ * @subparam integer $params:member->groupid
+ * @subparam integer $params:member->userid
+ * @return boolean result
+ */
+ static function tmp_delete_groupmembers($params){
+ if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
+ $addmembersuccessfull = true;
+ foreach($params as $member) {
+ $groupid = clean_param($member['groupid'], PARAM_INTEGER);
+ $userid = clean_param($member['userid'], PARAM_INTEGER);
+ if (!groups_remove_member($groupid, $userid)) {
+ $addmembersuccessfull = false;
+ }
+ }
+ return $addmembersuccessfull;
+ } else {
+ throw new moodle_exception('wscouldnotremovegroupmembernopermission');
+ }
+ }
}
--- /dev/null
+<?php
+/**
+ * Moodle - Modular Object-Oriented Dynamic Learning Environment
+ * http://moodle.com
+ *
+ * LICENSE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details:
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @category Moodle
+ * @package group
+ * @copyright Copyright (c) 1999 onwards Martin Dougiamas http://dougiamas.com
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL License
+ */
+
+/**
+ * Unit tests for (some of) user/external.php.
+ * WARNING: DO NOT RUN THIS TEST ON A PRODUCTION SITE
+ * => DO NOT UNCOMMENT THESE TEST FUNCTIONS EXCEPT IF YOU ARE DEVELOPER
+ * => NONE OF THESE TEST FUNCTIONS SHOULD BE UNCOMMENT BY DEFAULT
+ * => THESE TEST FUNCTIONS ARE DEPENDENT BETWEEEN EACH OTHER
+ * => THE FUNCTION ORDER MUST NOT BE CHANGED
+ *
+ *
+ * THIS TEST NEEDS TO BE RUN AS ADMIN!!!
+ * @author Jerome Mouneyrac
+ */
+
+require_once($CFG->dirroot . '/group/external.php');
+require_once(dirname(dirname(dirname(__FILE__))) . '/user/lib.php');
+
+class group_external_test extends UnitTestCase {
+ /*
+ var $realDB;
+ var $group;
+ var $group2;
+ var $userid1;
+ var $userid2;
+ var $userid3;
+ var $userid4;
+ var $course;
+ var $categoryid;
+
+ function setUp() {
+ global $DB;
+
+ /// create a category
+ $tempcat = new object();
+ $tempcat->name = 'categoryForTestGroup';
+ $this->categoryid = $DB->insert_record('course_categories', $tempcat);
+
+ /// create a course
+ $course->category = $this->categoryid;
+ $course->summary = 'Test course for Group';
+ $course->format = 'weeks';
+ $course->numsections = '10';
+ $course->startdate = mktime();
+ $course->name = "Test course for Group";
+ $course->fullname = "Test course for Group";
+ $course->shortname = "TestCourseForGroup";
+ $course = create_course($course);
+ $this->course = $course;
+
+
+ /// create two students
+ $user = new stdClass();
+ $user->username = 'mockuserfortestingXX';
+ $user->firstname = 'mockuserfortestingX_firstname';
+ $user->lastname = 'mockuserfortestingX_lastname';
+ $user->email = 'mockuserfortestingX@moodle.com';
+ $user->password = 'mockuserfortestingX_password';
+ $this->userid1 = tmp_create_user($user);
+ $user->username = 'mockuserfortestingXY';
+ $user->firstname = 'mockuserfortestingY_firstname';
+ $user->lastname = 'mockuserfortestingY_lastname';
+ $user->email = 'mockuserfortestingY@moodle.com';
+ $user->password = 'mockuserfortestingY_password';
+ $this->userid2 = tmp_create_user($user);
+
+ //create some more test users (not add yet to any group)
+ $user = new stdClass();
+ $user->username = 'mockuserfortestingZ';
+ $user->firstname = 'mockuserfortestingZ_firstname';
+ $user->lastname = 'mockuserfortestingZ_lastname';
+ $user->email = 'mockuserfortestingZ@moodle.com';
+ $user->password = 'mockuserfortestingZ_password';
+ $this->userid3 = tmp_create_user($user);
+ $user = new stdClass();
+ $user->username = 'mockuserfortestingZ2';
+ $user->firstname = 'mockuserfortestingZ2_firstname';
+ $user->lastname = 'mockuserfortestingZ2_lastname';
+ $user->email = 'mockuserfortestingZ2@moodle.com';
+ $user->password = 'mockuserfortestingZ2_password';
+ $this->userid4 = tmp_create_user($user);
+
+ /// create a group with these two students
+ $this->group = new stdClass();
+ $this->group->courseid = $this->course->id;
+ $this->group->name = "Unit Test group";
+ $this->group->id = groups_create_group( $this->group, false);
+
+ /// create a group with one of these students
+ $this->group2 = new stdClass();
+ $this->group2->courseid = $this->course->id;
+ $this->group2->name = "Unit Test group 2";
+ $this->group2->id = groups_create_group( $this->group2, false);
+
+
+ //add the two students as member of the group
+ groups_add_member($this->group->id, $this->userid1);
+ groups_add_member($this->group->id, $this->userid2);
+ groups_add_member($this->group2->id, $this->userid1);
+
+ }
+
+ function tearDown() {
+ global $DB;
+
+ /// delete the course
+ delete_course($this->course, false);
+
+ /// delete the category
+ $DB->delete_records('course_categories',array('id' => $this->categoryid));
+
+ /// delete the two students
+ $user = $DB->get_record('user', array('username'=>'mockuserfortestingXX', 'mnethostid'=>1));
+ delete_user($user);
+ $user = $DB->get_record('user', array('username'=>'mockuserfortestingXY', 'mnethostid'=>1));
+ delete_user($user);
+
+ /// delete other test users
+ $user = $DB->get_record('user', array('username'=>'mockuserfortestingZ', 'mnethostid'=>1));
+ delete_user($user);
+ $user = $DB->get_record('user', array('username'=>'mockuserfortestingZ2', 'mnethostid'=>1));
+ delete_user($user);
+ }
+
+ function testTmp_create_groups() {
+ /// create two different groups
+ $params = array();
+ $group = array('groupname' => 'Create Unit Test Group 1', 'courseid' => $this->course->id);
+ $params[] = $group;
+ $group = array('groupname' => 'Create Unit Test Group 2', 'courseid' => $this->course->id);
+ $params[] = $group;
+ $groupids = group_external::tmp_create_groups($params);
+ $this->assertEqual(sizeof($groupids), 2);
+ $this->assertIsA($groupids[key($groupids)], "integer");
+ $this->assertNotNull($groupids[key($groupids)]);
+
+ /// create a course with a not existing course id
+ $params = array();
+ $group = array('groupname' => 'Create Unit Test Group 3', 'courseid' => 6544656);
+ $params[] = $group;
+ $this->expectException(new moodle_exception('coursedoesntexistcannotcreategroup'));
+ $groupids = group_external::tmp_create_groups($params);
+ }
+
+ function testTmp_get_groups() {
+ /// retrieve the two groups
+ $params = array($this->group->id, $this->group2->id);
+ $groups = group_external::tmp_get_groups($params);
+ $this->assertEqual(sizeof($groups), 2);
+ $group = $groups[key($groups)];
+ next($groups);
+ $group2 = $groups[key($groups)];
+ $this->assertEqual($group->id, $this->group->id);
+ $this->assertEqual($group->courseid, $this->group->courseid);
+ $this->assertEqual($group->name, $this->group->name);
+ $this->assertEqual($group2->id, $this->group2->id);
+ $this->assertEqual($group2->courseid, $this->group2->courseid);
+ $this->assertEqual($group2->name, $this->group2->name);
+ }
+
+ function testTmp_add_group_members() {
+ //add the two members without group
+ $params = array(array("groupid" => $this->group->id, "userid" => $this->userid3), array("groupid" => $this->group->id, "userid" => $this->userid4));
+ $result = group_external::tmp_add_groupmembers($params);
+ $this->assertEqual($result, true);
+
+ //add them a new time
+ $params = array(array("groupid" => $this->group->id, "userid" => $this->userid3), array("groupid" => $this->group->id, "userid" => $this->userid4));
+ $result = group_external::tmp_add_groupmembers($params);
+ $this->assertEqual($result, true);
+
+ //One of the userid doesn't exist
+ $params = array(array("groupid" => $this->group->id, "userid" => 654685), array("groupid" => $this->group->id, "userid" => $this->userid4));
+ $this->expectException(new moodle_exception('useriddoesntexist'));
+ $result = group_external::tmp_add_groupmembers($params);
+ }
+
+ function testTmp_add_group_members2() {
+ //the group id doesn't exist
+ $params = array(array("groupid" => 6465465, "userid" => $this->userid3), array("groupid" => $this->group->id, "userid" => $this->userid4));
+ $result = group_external::tmp_add_groupmembers($params);
+ $this->assertEqual($result, false);
+ }
+
+ function testTmp_delete_group_members() {
+ //One of the userid doesn't exist
+ $params = array(array("groupid" => $this->group->id, "userid" => 654685), array("groupid" => $this->group->id, "userid" => $this->userid2));
+ $this->expectException(new moodle_exception('useriddoesntexist'));
+ $result = group_external::tmp_delete_groupmembers($params);
+ }
+
+ function testTmp_delete_group_members2() {
+ //the group id doesn't exist
+ $params = array(array("groupid" => 6465465, "userid" => $this->userid1), array("groupid" => $this->group->id, "userid" => $this->userid2));
+ $result = group_external::tmp_delete_groupmembers($params);
+ $this->assertEqual($result, false);
+ }
+
+ function testTmp_delete_group_members3() {
+ //delete members from group
+ $params = array(array("groupid" => $this->group->id, "userid" => $this->userid1), array("groupid" => $this->group->id, "userid" => $this->userid2));
+ $result = group_external::tmp_delete_groupmembers($params);
+ $this->assertEqual($result, true);
+ }
+
+ function testTmp_delete_groups() {
+ $params = array($this->group->id, $this->group2->id);
+ $result = group_external::tmp_delete_groups($params);
+ $this->assertEqual($result, true);
+
+ //Exception: delete same groups
+ $params = array($this->group->id, $this->group2->id);
+ $this->expectException(new moodle_exception('groupiddoesntexistcannotdelete'));
+ $result = group_external::tmp_delete_groups($params);
+ }
+*/
+}
+?>
\ No newline at end of file