]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-12886 one more external group function, other minor fixes
authorskodak <skodak>
Thu, 22 Oct 2009 23:54:35 +0000 (23:54 +0000)
committerskodak <skodak>
Thu, 22 Oct 2009 23:54:35 +0000 (23:54 +0000)
group/externallib.php
lib/db/services.php
version.php
webservice/rest/locallib.php
webservice/testclient.php
webservice/testclient_forms.php

index 800f12ec4bbec3507a050b83cbd8a4df24d22d87..97e5170d37bd13518f44492a10ce97e8071a666c 100644 (file)
@@ -124,15 +124,14 @@ class moodle_group_external extends external_api {
     }
 
     /**
-     * Get groups definition
+     * Get groups definition specified by ids
      * @param array $groupids arrays of group ids
      * @return array of group objects (id, courseid, name, enrolmentkey)
      */
     public static function get_groups($groupids) {
-        $groups = array();
-
         $params = self::validate_parameters(self::get_groups_parameters(), array('groupids'=>$groupids));
 
+        $groups = array();
         foreach ($params['groupids'] as $groupid) {
             // validate params
             $group = groups_get_group($groupid, 'id, courseid, name, description, enrolmentkey', MUST_EXIST);
@@ -166,6 +165,59 @@ class moodle_group_external extends external_api {
         );
     }
 
+    /**
+     * Returns description of method parameters
+     * @return external_function_parameters
+     */
+    public static function get_course_groups_parameters() {
+        return new external_function_parameters(
+            array(
+                'courseid' => new external_value(PARAM_INT, 'id of course'),
+            )
+        );
+    }
+
+    /**
+     * Get all groups in the specified course
+     * @param int $courseid id of course
+     * @return array of group objects (id, courseid, name, enrolmentkey)
+     */
+    public static function get_course_groups($courseid) {
+        $params = self::validate_parameters(self::get_course_groups_parameters(), array('courseid'=>$courseid));
+
+        // now security checks
+        $context = get_context_instance(CONTEXT_COURSE, $params['courseid']);
+        self::validate_context($context);
+        require_capability('moodle/course:managegroups', $context);
+
+        $gs = groups_get_all_groups($params['courseid'], 0, 0, 'g.id, g.courseid, g.name, g.description, g.enrolmentkey');
+
+        $groups = array();
+        foreach ($gs as $group) {
+            $groups[] = (array)$group;
+        }
+
+        return $groups;
+    }
+
+   /**
+     * Returns description of method result value
+     * @return external_description
+     */
+    public static function get_course_groups_returns() {
+        return new external_multiple_structure(
+            new external_single_structure(
+                array(
+                    'id' => new external_value(PARAM_INT, 'group record id'),
+                    'courseid' => new external_value(PARAM_INT, 'id of course'),
+                    'name' => new external_value(PARAM_TEXT, 'multilang compatible name, course unique'),
+                    'description' => new external_value(PARAM_RAW, 'group description text'),
+                    'enrolmentkey' => new external_value(PARAM_RAW, 'group enrol secret phrase'),
+                )
+            )
+        );
+    }
+
     public static function delete_groups_parameters() {
         //TODO
     }
index 72a30600c38fe83298ddec8119c96ae15052efad..56447df2e10bb439734367220397667c77093be6 100644 (file)
@@ -43,6 +43,15 @@ $functions = array(
         'description' => 'Returns group details.',
         'type'        => 'read',
     ),
+
+    'moodle_group_get_course_groups' => array(
+        'classname'   => 'moodle_group_external',
+        'methodname'  => 'get_course_groups',
+        'classpath'   => 'group/externallib.php',
+        'description' => 'Returns all groups in specified course.',
+        'type'        => 'read',
+    ),
+
 /*
     'moodle_group_delete_groups' => array(
         'classname'   => 'moodle_group_external',
index 8ef71103da9bbef922c4d5e3603cc23c9e36317c..3c7e5db8ac14c492703ea249b711eb86c8c87eaf 100644 (file)
@@ -6,7 +6,7 @@
 // This is compared against the values stored in the database to determine
 // whether upgrades should be performed (see lib/db/*.php)
 
-    $version = 2009102200;  // YYYYMMDD   = date of the last version bump
+    $version = 2009102201;  // YYYYMMDD   = date of the last version bump
                             //         XX = daily increments
 
     $release = '2.0 dev (Build: 20091022)';  // Human-friendly version name
index 03e3a345daa7d628baa59e3a4b69724df6792da6..c6eab0d5a7e32e1d7a673f08d428f0237cf5621d 100644 (file)
@@ -140,8 +140,8 @@ class webservice_rest_server extends webservice_base_server {
             $single = '<SINGLE>'."\n";
             foreach ($desc->keys as $key=>$subdesc) {
                 if (!array_key_exists($key, $returns)) {
-                    if ($subdesc->rewquired) {
-                        $single .= '<ERROR>Missing required key</ERROR>';
+                    if ($subdesc->required) {
+                        $single .= '<ERROR>Missing required key "'.$key.'"</ERROR>';
                         continue;
                     } else {
                         //optional field
index c2e6829fff277f61db9fc3003234415a1446cb36..f6b2de85ea6a247509ebf4bb657b4dd30ef78463 100644 (file)
@@ -36,7 +36,8 @@ require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
 
 // list of all available functions for testing - please note there must be explicit
 // support for testing of each functions, the parameter conversion and form is hardcoded
-$functions = array('moodle_group_create_groups', 'moodle_group_get_groups');
+// TODO: automate this list by fetching all known functiosn from db and looking if client form defined
+$functions = array('moodle_group_create_groups', 'moodle_group_get_groups', 'moodle_group_get_course_groups');
 $functions = array_combine($functions, $functions);
 if (!isset($functions[$function])) { // whitelisting security
     $function = '';
@@ -109,6 +110,9 @@ if ($mform->is_cancelled()) {
             $params['groupids'][] = $data->groupids[$i];
         }
 
+    } else if ($function === 'moodle_group_get_course_groups') {
+        $params['courseid'] = $data->courseid;
+
     } else {
         throw new coding_exception('Testing of function '.$function.' not implemented yet!');
     }
index 0221e9974c432ea91c0849b5e91e4663b00c146e..08ddef3a3a04e81fd822e941cfb584007663e9f3 100644 (file)
@@ -22,6 +22,34 @@ class webservice_test_client_form extends moodleform {
 
 // === Test client forms ===
 
+class moodle_group_create_groups_form extends moodleform {
+    public function definition() {
+        global $CFG;
+
+        $mform = $this->_form;
+
+        $mform->addElement('header', 'wstestclienthdr', get_string('testclient', 'webservice'));
+
+        //note: these values are intentionally PARAM_RAW - we want users to test any rubbish as parameters
+        $mform->addElement('text', 'wsusername', 'wsusername');
+        $mform->addElement('text', 'wspassword', 'wspassword');
+        $mform->addElement('text', 'courseid', 'courseid');
+        $mform->addElement('text', 'name', 'name');
+        $mform->addElement('text', 'description', 'description');
+        $mform->addElement('text', 'enrolmentkey', 'enrolmentkey');
+
+        $mform->addElement('hidden', 'function');
+        $mform->setType('function', PARAM_SAFEDIR);
+
+        $mform->addElement('hidden', 'protocol');
+        $mform->setType('protocol', PARAM_SAFEDIR);
+
+        $mform->addElement('static', 'warning', '', get_string('executewarnign', 'webservice'));
+
+        $this->add_action_buttons(true, get_string('execute', 'webservice'));
+    }
+}
+
 class moodle_group_get_groups_form extends moodleform {
     public function definition() {
         global $CFG;
@@ -48,7 +76,7 @@ class moodle_group_get_groups_form extends moodleform {
     }
 }
 
-class moodle_group_create_groups_form extends moodleform {
+class moodle_group_get_course_groups_form extends moodleform {
     public function definition() {
         global $CFG;
 
@@ -60,9 +88,6 @@ class moodle_group_create_groups_form extends moodleform {
         $mform->addElement('text', 'wsusername', 'wsusername');
         $mform->addElement('text', 'wspassword', 'wspassword');
         $mform->addElement('text', 'courseid', 'courseid');
-        $mform->addElement('text', 'name', 'name');
-        $mform->addElement('text', 'description', 'description');
-        $mform->addElement('text', 'enrolmentkey', 'enrolmentkey');
 
         $mform->addElement('hidden', 'function');
         $mform->setType('function', PARAM_SAFEDIR);
@@ -70,8 +95,7 @@ class moodle_group_create_groups_form extends moodleform {
         $mform->addElement('hidden', 'protocol');
         $mform->setType('protocol', PARAM_SAFEDIR);
 
-        $mform->addElement('static', 'warning', '', get_string('executewarnign', 'webservice'));
-
         $this->add_action_buttons(true, get_string('execute', 'webservice'));
     }
 }
+