$string['errorinvalidresponseapi'] = 'Invalid external api response';
$string['errorinvalidresponsedesc'] = 'Invalid external api response description';
$string['errormissingkey'] = 'Missing required key in single structure: {$a}';
+$string['errornotemptydefaultparamarray'] = 'The web service description parameter named \'{$a}\' is an single or multiple structure. The default can only be empty array. Check web service description.';
$string['erroronlyarray'] = 'Only arrays accepted.';
+$string['erroroptionalparamarray'] = 'The web service description parameter named \'{$a}\' is an single or multiple structure. It can not be set as VALUE_OPTIONAL. Check web service description.';
$string['errorscalartype'] = 'Scalar type expected, array or object received.';
$string['errorunexpectedkey'] = 'Unexpected keys detected in parameter array.';
$string['execute'] = 'Execute';
if ($subdesc->required == VALUE_REQUIRED) {
throw new invalid_parameter_exception(get_string('errormissingkey', 'webservice', $key));
}
- if ($subdesc instanceof external_value) {
- if ($subdesc->required == VALUE_DEFAULT) {
- try {
- $result[$key] = self::validate_parameters($subdesc, $subdesc->default);
- } catch (invalid_parameter_exception $e) {
- throw new webservice_parameter_exception('invalidextparam',$key);
- }
- }
+ if ($subdesc->required == VALUE_DEFAULT) {
+ try {
+ $result[$key] = self::validate_parameters($subdesc, $subdesc->default);
+ } catch (invalid_parameter_exception $e) {
+ throw new webservice_parameter_exception('invalidextparam',$key);
}
+ }
} else {
try {
$result[$key] = self::validate_parameters($subdesc, $params[$key]);
public $desc;
/** @property bool $required element value required, null not allowed */
public $required;
+ /** @property mixed $default default value */
+ public $default;
/**
* Contructor
* @param string $desc
* @param bool $required
+ * @param mixed $default
*/
- public function __construct($desc, $required) {
+ public function __construct($desc, $required, $default) {
$this->desc = $desc;
$this->required = $required;
+ $this->default = $default;
}
}
class external_value extends external_description {
/** @property mixed $type value type PARAM_XX */
public $type;
- /** @property mixed $default default value */
- public $default;
/** @property bool $allownull allow null values */
public $allownull;
* @param mixed $default
* @param bool $allownull
*/
- public function __construct($type, $desc='', $required=VALUE_REQUIRED, $default=null, $allownull=NULL_ALLOWED) {
- parent::__construct($desc, $required);
- $this->type = $type;
- $this->default = $default;
+ public function __construct($type, $desc='', $required=VALUE_REQUIRED,
+ $default=null, $allownull=NULL_ALLOWED) {
+ parent::__construct($desc, $required, $default);
+ $this->type = $type;
$this->allownull = $allownull;
}
}
* @param array $keys
* @param string $desc
* @param bool $required
+ * @param array $default
*/
- public function __construct(array $keys, $desc='', $required=VALUE_REQUIRED) {
- parent::__construct($desc, $required);
+ public function __construct(array $keys, $desc='',
+ $required=VALUE_REQUIRED, $default=null) {
+ parent::__construct($desc, $required, $default);
$this->keys = $keys;
}
}
* @param external_description $content
* @param string $desc
* @param bool $required
+ * @param array $default
*/
- public function __construct(external_description $content, $desc='', $required=VALUE_REQUIRED) {
- parent::__construct($desc, $required);
+ public function __construct(external_description $content, $desc='',
+ $required=VALUE_REQUIRED, $default=null) {
+ parent::__construct($desc, $required, $default);
$this->content = $content;
}
}
throw new moodle_exception('parametercannotbevalueoptional');
}
} else { //for the moment we do not support default for other structure types
- if ($keydesc->required == VALUE_OPTIONAL or $keydesc->required == VALUE_DEFAULT) {
- throw new moodle_exception('paramdefaultarraynotsupported');
+ if ($keydesc->required == VALUE_DEFAULT) {
+ //accept empty array as default
+ if (isset($keydesc->default) and is_array($keydesc->default)
+ and empty($keydesc->default)) {
+ $param .= '=array()';
+ } else {
+ throw new moodle_exception('errornotemptydefaultparamarray', 'webservice', '', $name);
+ }
+ }
+ if ($keydesc->required == VALUE_OPTIONAL) {
+ throw new moodle_exception('erroroptionalparamarray', 'webservice', '', $name);
}
}
$params[] = $param;