Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.
   1  <?php
   2  
   3  require_once($CFG->libdir.'/formslib.php');
   4  
   5  
   6  class webservice_test_client_form extends moodleform {
   7      public function definition() {
   8          global $CFG;
   9  
  10          $mform = $this->_form;
  11          list($functions, $protocols) = $this->_customdata;
  12  
  13          $mform->addElement('header', 'wstestclienthdr', get_string('testclient', 'webservice'));
  14  
  15          $authmethod = array('simple' => 'simple', 'token' => 'token');
  16          $mform->addElement('select', 'authmethod', get_string('authmethod', 'webservice'), $authmethod);
  17          $mform->setType('simple', PARAM_ALPHA);
  18  
  19          $mform->addElement('select', 'protocol', get_string('protocol', 'webservice'), $protocols);
  20          $mform->setType('protocol', PARAM_ALPHA);
  21  
  22          $mform->addElement('select', 'function', get_string('function', 'webservice'), $functions);
  23          $mform->setType('function', PARAM_PLUGIN);
  24  
  25          $this->add_action_buttons(false, get_string('select'));
  26      }
  27  }
  28  
  29  // === Test client forms ===
  30  
  31  /**
  32   * Base class for implementations of WS test client forms.
  33   *
  34   * @package   core_webservice
  35   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  36   * @copyright 2017 Marina Glancy
  37   */
  38  abstract class webservice_test_client_base_form extends moodleform {
  39  
  40      /**
  41       * Definition of the parameters used by this WS function
  42       */
  43      protected abstract function test_client_definition();
  44  
  45      /**
  46       * The form definition.
  47       */
  48      public function definition() {
  49          $mform = $this->_form;
  50  
  51          $mform->addElement('header', 'wstestclienthdr', get_string('testclient', 'webservice'));
  52  
  53          // Note: these values are intentionally PARAM_RAW - we want users to test any rubbish as parameters.
  54          $data = $this->_customdata;
  55          if ($data['authmethod'] == 'simple') {
  56              $mform->addElement('text', 'wsusername', 'wsusername');
  57              $mform->setType('wsusername', core_user::get_property_type('username'));
  58              $mform->addElement('text', 'wspassword', 'wspassword');
  59              $mform->setType('wspassword', core_user::get_property_type('password'));
  60          } else if ($data['authmethod'] == 'token') {
  61              $mform->addElement('text', 'token', 'token');
  62              $mform->setType('token', PARAM_RAW_TRIMMED);
  63          }
  64  
  65          $mform->addElement('hidden', 'authmethod', $data['authmethod']);
  66          $mform->setType('authmethod', PARAM_ALPHA);
  67  
  68          $mform->addElement('hidden', 'function');
  69          $mform->setType('function', PARAM_PLUGIN);
  70  
  71          $mform->addElement('hidden', 'protocol');
  72          $mform->setType('protocol', PARAM_ALPHA);
  73  
  74          $this->test_client_definition();
  75  
  76          $this->add_action_buttons(true, get_string('execute', 'webservice'));
  77      }
  78  
  79      /**
  80       * Get the parameters that the user submitted using the form.
  81       * @return array|null
  82       */
  83      public function get_params() {
  84          if (!$data = $this->get_data()) {
  85              return null;
  86          }
  87          return array_diff_key((array)$data, ['submitbutton' => 1, 'protocol' => 1, 'function' => 1,
  88              'wsusername' => 1, 'wspassword' => 1, 'token' => 1, 'authmethod' => 1]);
  89      }
  90  }
  91  
  92  /**
  93   * Form class for create_categories() web service function test.
  94   *
  95   * @package   core_webservice
  96   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  97   * @copyright 2012 Fabio Souto
  98   */
  99  class core_course_create_categories_testclient_form extends webservice_test_client_base_form {
 100      /**
 101       * The form definition.
 102       */
 103      protected function test_client_definition() {
 104          $mform = $this->_form;
 105          $mform->addElement('text', 'name[0]', 'name[0]');
 106          $mform->addElement('text', 'parent[0]', 'parent[0]');
 107          $mform->addElement('text', 'idnumber[0]', 'idnumber[0]');
 108          $mform->addElement('text', 'description[0]', 'description[0]');
 109          $mform->addElement('text', 'name[1]', 'name[1]');
 110          $mform->addElement('text', 'parent[1]', 'parent[1]');
 111          $mform->addElement('text', 'idnumber[1]', 'idnumber[1]');
 112          $mform->addElement('text', 'description[1]', 'description[1]');
 113          $mform->setType('name', PARAM_TEXT);
 114          $mform->setType('parent', PARAM_INT);
 115          $mform->setType('idnumber', PARAM_RAW);
 116          $mform->setType('description', PARAM_RAW);
 117      }
 118  
 119      /**
 120       * Get the parameters that the user submitted using the form.
 121       * @return array|null
 122       */
 123      public function get_params() {
 124          if (!$data = $this->get_data()) {
 125              return null;
 126          }
 127  
 128          $params = array();
 129          $params['categories'] = array();
 130          for ($i=0; $i<10; $i++) {
 131              if (empty($data->name[$i])) {
 132                  continue;
 133              }
 134              $params['categories'][] = array('name'=>$data->name[$i], 'parent'=>$data->parent[$i],
 135                                              'idnumber'=>$data->idnumber[$i], 'description'=>$data->description[$i]);
 136          }
 137          return $params;
 138      }
 139  }
 140  
 141  /**
 142   * Form class for delete_categories() web service function test.
 143   *
 144   * @package   core_webservice
 145   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 146   * @copyright 2012 Fabio Souto
 147   */
 148  class core_course_delete_categories_testclient_form extends webservice_test_client_base_form {
 149      /**
 150       * The form definition.
 151       */
 152      protected function test_client_definition() {
 153          $mform = $this->_form;
 154          $mform->addElement('text', 'id[0]', 'id[0]');
 155          $mform->addElement('text', 'newparent[0]', 'newparent[0]');
 156          $mform->addElement('text', 'recursive[0]', 'recursive[0]');
 157          $mform->addElement('text', 'id[1]', 'id[1]');
 158          $mform->addElement('text', 'newparent[1]', 'newparent[1]');
 159          $mform->addElement('text', 'recursive[1]', 'recursive[1]');
 160          $mform->setType('id', PARAM_INT);
 161          $mform->setType('newparent', PARAM_INT);
 162          $mform->setType('recursive', PARAM_BOOL);
 163      }
 164  
 165      /**
 166       * Get the parameters that the user submitted using the form.
 167       * @return array|null
 168       */
 169      public function get_params() {
 170          if (!$data = $this->get_data()) {
 171              return null;
 172          }
 173          $params = array();
 174          $params['categories'] = array();
 175          for ($i=0; $i<10; $i++) {
 176              if (empty($data->id[$i])) {
 177                  continue;
 178              }
 179              $attrs = array();
 180              $attrs['id'] = $data->id[$i];
 181              if (!empty($data->newparent[$i])) {
 182                  $attrs['newparent'] = $data->newparent[$i];
 183              }
 184              if (!empty($data->recursive[$i])) {
 185                  $attrs['recursive'] = $data->recursive[$i];
 186              }
 187              $params['categories'][] = $attrs;
 188          }
 189          return $params;
 190      }
 191  }
 192  
 193  /**
 194   * Form class for create_categories() web service function test.
 195   *
 196   * @package   core_webservice
 197   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 198   * @copyright 2012 Fabio Souto
 199   */
 200  class core_course_update_categories_testclient_form extends webservice_test_client_base_form {
 201      /**
 202       * The form definition.
 203       */
 204      protected function test_client_definition() {
 205          $mform = $this->_form;
 206          $mform->addElement('text', 'id[0]', 'id[0]');
 207          $mform->addElement('text', 'name[0]', 'name[0]');
 208          $mform->addElement('text', 'parent[0]', 'parent[0]');
 209          $mform->addElement('text', 'idnumber[0]', 'idnumber[0]');
 210          $mform->addElement('text', 'description[0]', 'description[0]');
 211          $mform->addElement('text', 'id[1]', 'id[1]');
 212          $mform->addElement('text', 'name[1]', 'name[1]');
 213          $mform->addElement('text', 'parent[1]', 'parent[1]');
 214          $mform->addElement('text', 'idnumber[1]', 'idnumber[1]');
 215          $mform->addElement('text', 'description[1]', 'description[1]');
 216          $mform->setType('id', PARAM_INT);
 217          $mform->setType('name', PARAM_TEXT);
 218          $mform->setType('parent', PARAM_INT);
 219          $mform->setType('idnumber', PARAM_RAW);
 220          $mform->setType('description', PARAM_RAW);
 221      }
 222  
 223      /**
 224       * Get the parameters that the user submitted using the form.
 225       * @return array|null
 226       */
 227      public function get_params() {
 228          if (!$data = $this->get_data()) {
 229              return null;
 230          }
 231          $params = array();
 232          $params['categories'] = array();
 233          for ($i=0; $i<10; $i++) {
 234  
 235              if (empty($data->id[$i])) {
 236                  continue;
 237              }
 238              $attrs = array();
 239              $attrs['id'] = $data->id[$i];
 240              if (!empty($data->name[$i])) {
 241                  $attrs['name'] = $data->name[$i];
 242              }
 243              if (!empty($data->parent[$i])) {
 244                  $attrs['parent'] = $data->parent[$i];
 245              }
 246              if (!empty($data->idnumber[$i])) {
 247                  $attrs['idnumber'] = $data->idnumber[$i];
 248              }
 249              if (!empty($data->description[$i])) {
 250                  $attrs['description'] = $data->description[$i];
 251              }
 252              $params['categories'][] = $attrs;
 253          }
 254          return $params;
 255      }
 256  }
 257  
 258  /**
 259   * Test class for WS function core_fetch_notifications
 260   *
 261   * @package   core_webservice
 262   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 263   * @copyright 2017 Marina Glancy
 264   */
 265  class core_fetch_notifications_testclient_form extends webservice_test_client_base_form {
 266      /**
 267       * The form definition.
 268       */
 269      protected function test_client_definition() {
 270          $mform = $this->_form;
 271          $mform->addElement('text', 'contextid', 'contextid');
 272          $mform->setType('contextid', PARAM_INT);
 273          $mform->setDefault('contextid', context_system::instance()->id);
 274      }
 275  }
 276  
 277  /**
 278   * Test class for WS function get_site_info
 279   *
 280   * @package   core_webservice
 281   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 282   * @copyright 2017 Marina Glancy
 283   */
 284  class core_webservice_get_site_info_testclient_form extends webservice_test_client_base_form {
 285      /**
 286       * The form definition.
 287       */
 288      protected function test_client_definition() {
 289      }
 290  }
 291  
 292  /**
 293   * Test class for WS function core_get_string
 294   *
 295   * @package   core_webservice
 296   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 297   * @copyright 2017 Marina Glancy
 298   */
 299  class core_get_string_testclient_form extends webservice_test_client_base_form {
 300      /**
 301       * The form definition.
 302       */
 303      protected function test_client_definition() {
 304          $mform = $this->_form;
 305          $mform->addElement('text', 'stringid', 'stringid');
 306          $mform->setType('stringid', PARAM_STRINGID);
 307          $mform->addElement('text', 'component', 'component');
 308          $mform->setType('component', PARAM_COMPONENT);
 309          $mform->addElement('text', 'lang', 'lang');
 310          $mform->setType('lang', PARAM_LANG);
 311          $mform->addElement('text', 'stringparams_name[1]', 'Parameter 1 name');
 312          $mform->setType('stringparams_name[1]', PARAM_ALPHANUMEXT);
 313          $mform->addElement('text', 'stringparams_value[1]', 'Parameter 1 value');
 314          $mform->setType('stringparams_value[1]', PARAM_RAW);
 315          $mform->addElement('text', 'stringparams_name[2]', 'Parameter 2 name');
 316          $mform->setType('stringparams_name[2]', PARAM_ALPHANUMEXT);
 317          $mform->addElement('text', 'stringparams_value[2]', 'Parameter 2 value');
 318          $mform->setType('stringparams_value[2]', PARAM_RAW);
 319          $mform->addElement('text', 'stringparams_name[3]', 'Parameter 3 name');
 320          $mform->setType('stringparams_name[3]', PARAM_ALPHANUMEXT);
 321          $mform->addElement('text', 'stringparams_value[3]', 'Parameter 3 value');
 322          $mform->setType('stringparams_value[3]', PARAM_RAW);
 323          $mform->addElement('static', 'paramnote', '', 'If a parameter is not an object, only specify "Parameter 1 value"');
 324      }
 325  
 326      /**
 327       * Get the parameters that the user submitted using the form.
 328       * @return array|null
 329       */
 330      public function get_params() {
 331          $params = parent::get_params();
 332          if ($params === null) {
 333              return null;
 334          }
 335  
 336          $params['stringparams'] = [];
 337          for ($idx = 1; $idx <= 3; $idx++) {
 338              $name = isset($params['stringparams_name'][$idx]) ? strval($params['stringparams_name'][$idx]) : '';
 339              $value = isset($params['stringparams_value'][$idx]) ? strval($params['stringparams_value'][$idx]) : '';
 340              if ($name !== '' || $value !== '') {
 341                  if ($name === '') {
 342                      $params['stringparams'][] = ['value' => $value];
 343                  } else {
 344                      $params['stringparams'][] = ['name' => $name, 'value' => $value];
 345                  }
 346              }
 347          }
 348          unset($params['stringparams_name']);
 349          unset($params['stringparams_value']);
 350          return $params;
 351      }
 352  }