* @return void
*/
public static function delete_groups($groupids) {
- global $CFG;
+ global $CFG, $DB;
require_once("$CFG->dirroot/group/lib.php");
$params = self::validate_parameters(self::delete_groups_parameters(), array('groupids'=>$groupids));
* @return void
*/
public static function add_groupmembers($members) {
- global $CFG;
+ global $CFG, $DB;
require_once("$CFG->dirroot/group/lib.php");
$params = self::validate_parameters(self::add_groupmembers_parameters(), array('members'=>$members));
* @return void
*/
public static function delete_groupmembers($members) {
- global $CFG;
+ global $CFG, $DB;
require_once("$CFG->dirroot/group/lib.php");
$params = self::validate_parameters(self::delete_groupmembers_parameters(), array($members=>'members'));
'description' => 'Returns all groups in specified course.',
'type' => 'read',
),
-/*
+
'moodle_group_delete_groups' => array(
'classname' => 'moodle_group_external',
'methodname' => 'delete_groups',
'description' => 'Deletes all specified groups.',
'type' => 'delete',
),
-
+/*
'moodle_group_get_groupmembers' => array(
'classname' => 'moodle_group_external',
'methodname' => 'get_groupmembers',
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
- $version = 2009102600; // YYYYMMDD = date of the last version bump
+ $version = 2009102700; // YYYYMMDD = date of the last version bump
// XX = daily increments
$release = '2.0 dev (Build: 20091027)'; // Human-friendly version name
*
* @package webservice
* @copyright 2009 Moodle Pty Ltd (http://moodle.com)
+ * @author Petr Skoda (skodak)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_login();
require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM)); // TODO: do we need some new capability?
-// 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
-// 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
+// list of all available functions for testing
+$allfunctions = $DB->get_records('external_functions', array(), 'name ASC');
+$functions = array();
+foreach ($allfunctions as $f) {
+ $class = $f->name.'_form';
+ if (class_exists($class)) {
+ $functions[$f->name] = $f->name;
+ continue;
+ }
+}
+
+// whitelisting security
+if (!isset($functions[$function])) {
$function = '';
}
} else if ($data = $mform->get_data()) {
$functioninfo = external_function_info($function);
-
- // remove unused from form data
- unset($data->submitbutton);
- unset($data->protocol);
- unset($data->function);
// first load lib of selected protocol
require_once("$CFG->dirroot/webservice/$protocol/locallib.php");
$serverurl = "$CFG->wwwroot/webservice/$protocol/simpleserver.php";
$serverurl .= '?wsusername='.urlencode($data->wsusername);
- unset($data->wsusername);
$serverurl .= '&wspassword='.urlencode($data->wspassword);
- unset($data->wspassword);
-
- // now get the function parameters - each functions processing must be hardcoded here
- $params = array();
- if ($function === 'moodle_group_create_groups') {
- $params['groups'] = array();
- $params['groups'][] = (array)$data;
-
- } else if ($function === 'moodle_group_get_groups') {
- $params['groupids'] = array();
- for ($i=0; $i<10; $i++) {
- if (empty($data->groupids[$i])) {
- continue;
- }
- $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!');
- }
+
+ // now get the function parameters
+ $params = $mform->get_params();
// now test the parameters, this also fixes PHP data types
$params = external_api::validate_parameters($functioninfo->parameters_desc, $params);
$this->add_action_buttons(true, get_string('execute', 'webservice'));
}
+
+ public function get_params() {
+ if (!$data = $this->get_data()) {
+ return null;
+ }
+ // remove unused from form data
+ unset($data->submitbutton);
+ unset($data->protocol);
+ unset($data->function);
+ unset($data->wsusername);
+ unset($data->wspassword);
+
+ $params = array();
+ $params['groups'] = array();
+ $params['groups'][] = (array)$data;
+
+ return $params;
+ }
}
class moodle_group_get_groups_form extends moodleform {
$this->add_action_buttons(true, get_string('execute', 'webservice'));
}
+
+ public function get_params() {
+ if (!$data = $this->get_data()) {
+ return null;
+ }
+ // remove unused from form data
+ unset($data->submitbutton);
+ unset($data->protocol);
+ unset($data->function);
+ unset($data->wsusername);
+ unset($data->wspassword);
+
+ $params = array();
+ $params['groupids'] = array();
+ for ($i=0; $i<10; $i++) {
+ if (empty($data->groupids[$i])) {
+ continue;
+ }
+ $params['groupids'][] = $data->groupids[$i];
+ }
+
+ return $params;
+ }
}
class moodle_group_get_course_groups_form extends moodleform {
$this->add_action_buttons(true, get_string('execute', 'webservice'));
}
+
+ public function get_params() {
+ if (!$data = $this->get_data()) {
+ return null;
+ }
+ // remove unused from form data
+ unset($data->submitbutton);
+ unset($data->protocol);
+ unset($data->function);
+ unset($data->wsusername);
+ unset($data->wspassword);
+
+ $params = array();
+ $params['courseid'] = $data->courseid;
+
+ return $params;
+ }
}
+class moodle_group_delete_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', 'groupids[0]', 'groupids[0]');
+ $mform->addElement('text', 'groupids[1]', 'groupids[1]');
+ $mform->addElement('text', 'groupids[2]', 'groupids[2]');
+ $mform->addElement('text', 'groupids[3]', 'groupids[3]');
+
+ $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'));
+ }
+
+ public function get_params() {
+ if (!$data = $this->get_data()) {
+ return null;
+ }
+ // remove unused from form data
+ unset($data->submitbutton);
+ unset($data->protocol);
+ unset($data->function);
+ unset($data->wsusername);
+ unset($data->wspassword);
+
+ $params = array();
+ $params['groupids'] = array();
+ for ($i=0; $i<10; $i++) {
+ if (empty($data->groupids[$i])) {
+ continue;
+ }
+ $params['groupids'][] = $data->groupids[$i];
+ }
+
+ return $params;
+ }
+}