From 382b9ceab3e15d3027e1a28fa458668c783d6471 Mon Sep 17 00:00:00 2001 From: jerome mouneyrac Date: Fri, 5 Feb 2010 02:58:24 +0000 Subject: [PATCH] webservice MDL-21510 added three defines for the description of ws optional value: VALUE_REQUIRED - if the parameter is not supplied, there is an error VALUE_OPTIONAL - if the parameter is not supplied, then the param has no value VALUE_DEFAULT - if the parameter is not supplied, then the default value is used --- lang/en_utf8/webservice.php | 1 + lib/externallib.php | 16 +++++++++------- lib/moodlelib.php | 15 +++++++++++++++ webservice/renderer.php | 36 ++++++++++++++++++++++++++++++++++-- 4 files changed, 59 insertions(+), 9 deletions(-) diff --git a/lang/en_utf8/webservice.php b/lang/en_utf8/webservice.php index 265f4773878..9948c719e40 100644 --- a/lang/en_utf8/webservice.php +++ b/lang/en_utf8/webservice.php @@ -28,6 +28,7 @@ $string['createtokenforuser'] = 'Create a token for a user'; $string['createtokenforuserdescription'] = 'On the Manage token page, click on \'Add\'. Then select the created user and service.'; $string['createuser'] = 'Create a specific user'; $string['createuserdescription'] = 'You need to create a specific user for the system controlling Moodle.'; +$string['default'] = 'Default to \"$a\"'; $string['deleteservice'] = 'Delete the service: $a->name (id: $a->id)'; $string['deleteaservice'] = 'Delete service'; $string['deleteserviceconfirm'] = 'Do you really want to delete external service \"$a\"?'; diff --git a/lib/externallib.php b/lib/externallib.php index 2ea1ff76935..65d72325fae 100644 --- a/lib/externallib.php +++ b/lib/externallib.php @@ -155,7 +155,7 @@ class external_api { } } return validate_param($params, $description->type, $description->allownull, 'Invalid external api parameter'); - + } else if ($description instanceof external_single_structure) { if (!is_array($params)) { throw new invalid_parameter_exception('Only arrays accepted.'); @@ -163,12 +163,14 @@ class external_api { $result = array(); foreach ($description->keys as $key=>$subdesc) { if (!array_key_exists($key, $params)) { - if ($subdesc->required) { + if ($subdesc->required == VALUE_REQUIRED) { throw new invalid_parameter_exception('Missing required key in single structure.'); } if ($subdesc instanceof external_value) { - $result[$key] = self::validate_parameters($subdesc, $subdesc->default); - } + if ($subdesc->required == VALUE_DEFAULT) { + $result[$key] = self::validate_parameters($subdesc, $subdesc->default); + } + } } else { $result[$key] = self::validate_parameters($subdesc, $params[$key]); } @@ -275,7 +277,7 @@ class external_value extends external_description { * @param mixed $default * @param bool $allownull */ - public function __construct($type, $desc='', $required=true, $default=null, $allownull=true) { + public function __construct($type, $desc='', $required=VALUE_REQUIRED, $default=null, $allownull=true) { parent::__construct($desc, $required); $this->type = $type; $this->default = $default; @@ -296,7 +298,7 @@ class external_single_structure extends external_description { * @param string $desc * @param bool $required */ - public function __construct(array $keys, $desc='', $required=true) { + public function __construct(array $keys, $desc='', $required=VALUE_REQUIRED) { parent::__construct($desc, $required); $this->keys = $keys; } @@ -315,7 +317,7 @@ class external_multiple_structure extends external_description { * @param string $desc * @param bool $required */ - public function __construct(external_description $content, $desc='', $required=true) { + public function __construct(external_description $content, $desc='', $required=VALUE_REQUIRED) { parent::__construct($desc, $required); $this->content = $content; } diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 5103b19029f..a033d0c0c86 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -264,7 +264,22 @@ define('PARAM_MULTILANG', 'text'); */ define('PARAM_CLEANFILE', 'file'); +/// Web Services /// +/** + * VALUE_REQUIRED - if the parameter is not supplied, there is an error + */ +define('VALUE_REQUIRED', 1); + +/** + * VALUE_OPTIONAL - if the parameter is not supplied, then the param has no value + */ +define('VALUE_OPTIONAL', 2); + +/** + * VALUE_DEFAULT - if the parameter is not supplied, then the default value is used + */ +define('VALUE_DEFAULT', 0); /// Page types /// diff --git a/webservice/renderer.php b/webservice/renderer.php index d9db55c311d..f607d19e215 100644 --- a/webservice/renderer.php +++ b/webservice/renderer.php @@ -48,9 +48,26 @@ class core_webservice_renderer extends plugin_renderer_base { $paramdesc = ""; if (!empty($params->desc)) { $paramdesc .= html_writer::start_tag('span', array('style' => "color:#2A33A6")); + if ($params->required == VALUE_REQUIRED) { + $required = ''; + } + if ($params->required == VALUE_DEFAULT) { + if (empty($params->default)) { + $params->default = "null"; + } + $required = html_writer::start_tag('b', array()).get_string('default', 'webservice', $params->default).html_writer::end_tag('b'); + } + if ($params->required == VALUE_OPTIONAL) { + $required = html_writer::start_tag('b', array()).get_string('optional', 'webservice').html_writer::end_tag('b'); + } + $paramdesc .= " ".$required." "; $paramdesc .= html_writer::start_tag('i', array()); - $paramdesc .= "//".$params->desc; + $paramdesc .= "//"; + + $paramdesc .= $params->desc; + $paramdesc .= html_writer::end_tag('i'); + $paramdesc .= html_writer::end_tag('span'); $paramdesc .= html_writer::empty_tag('br', array()); } @@ -313,7 +330,22 @@ EOF; foreach ($description->parameters_desc->keys as $paramname => $paramdesc) { /// a argument documentation $documentationhtml .= html_writer::start_tag('span', array('style' => 'font-size:80%')); - $required = $paramdesc->required?get_string('required', 'webservice'):get_string('optional', 'webservice'); + + if ($paramdesc->required == VALUE_REQUIRED) { + $required = get_string('required', 'webservice'); + } + if ($paramdesc->required == VALUE_DEFAULT) { + if (empty($paramdesc->default)) { + $default = "null"; + } else { + $default = $paramdesc->default; + } + $required = get_string('default', 'webservice', $default); + } + if ($paramdesc->required == VALUE_OPTIONAL) { + $required = get_string('optional', 'webservice'); + } + $documentationhtml .= html_writer::start_tag('b', array()); $documentationhtml .= $paramname; $documentationhtml .= html_writer::end_tag('b');