original_string: public function call($functionname, $functionargs, $rawpost = false, $contenttype = false) {
          $functions = $this->get_api_functions();
          $supportedmethods = [ 'get', 'put', 'post', 'patch', 'head', 'delete' ];
          if (empty($functions[$functionname])) {
              throw new coding_exception('unsupported api functionname: ' . $functionname);
          }
  
          $method = $functions[$functionname]['method'];
          $endpoint = $functions[$functionname]['endpoint'];
  
          $responsetype = $functions[$functionname]['response'];
          if (!in_array($method, $supportedmethods)) {
              throw new coding_exception('unsupported api method: ' . $method);
          }
  
          $args = $functions[$functionname]['args'];
          $callargs = [];
          foreach ($args as $argname => $argtype) {
              if (isset($functionargs[$argname])) {
                  $callargs[$argname] = clean_param($functionargs[$argname], $argtype);
              }
          }
  
          // Allow params in the URL path like /me/{parent}/children.
          foreach ($callargs as $argname => $value) {
              $newendpoint = str_replace('{' . $argname . '}', $value, $endpoint);
              if ($newendpoint != $endpoint) {
                  $endpoint = $newendpoint;
                  unset($callargs[$argname]);
              }
          }
  
          if ($rawpost !== false) {
              $queryparams = $this->curl->build_post_data($callargs);
              if (!empty($queryparams)) {
                  $endpoint .= '?' . $queryparams;
              }
              $callargs = $rawpost;
          }
  
          if (empty($contenttype)) {
              $this->curl->setHeader('Content-type: application/json');
          } else {
              $this->curl->setHeader('Content-type: ' . $contenttype);
          }
          $response = $this->curl->$method($endpoint, $callargs);
  
          if ($this->curl->errno == 0) {
              if ($responsetype == 'json') {
                  $json = json_decode($response);
  
                  if (!empty($json->error)) {
                      throw new rest_exception($json->error->code . ': ' . $json->error->message);
                  }
                  return $json;
              } else if ($responsetype == 'headers') {
                  $response = $this->curl->get_raw_response();
              }
              return $response;
          } else {
              throw new rest_exception($this->curl->error, $this->curl->errno);
          }
      }
code: public function call($functionname, $functionargs, $rawpost = false, $contenttype = false) {
          $functions = $this->get_api_functions();
          $supportedmethods = [ 'get', 'put', 'post', 'patch', 'head', 'delete' ];
          if (empty($functions[$functionname])) {
              throw new coding_exception('unsupported api functionname: ' . $functionname);
          }
  
          $method = $functions[$functionname]['method'];
          $endpoint = $functions[$functionname]['endpoint'];
  
          $responsetype = $functions[$functionname]['response'];
          if (!in_array($method, $supportedmethods)) {
              throw new coding_exception('unsupported api method: ' . $method);
          }
  
          $args = $functions[$functionname]['args'];
          $callargs = [];
          foreach ($args as $argname => $argtype) {
              if (isset($functionargs[$argname])) {
                  $callargs[$argname] = clean_param($functionargs[$argname], $argtype);
              }
          }
  
          // Allow params in the URL path like /me/{parent}/children.
          foreach ($callargs as $argname => $value) {
              $newendpoint = str_replace('{' . $argname . '}', $value, $endpoint);
              if ($newendpoint != $endpoint) {
                  $endpoint = $newendpoint;
                  unset($callargs[$argname]);
              }
          }
  
          if ($rawpost !== false) {
              $queryparams = $this->curl->build_post_data($callargs);
              if (!empty($queryparams)) {
                  $endpoint .= '?' . $queryparams;
              }
              $callargs = $rawpost;
          }
  
          if (empty($contenttype)) {
              $this->curl->setHeader('Content-type: application/json');
          } else {
              $this->curl->setHeader('Content-type: ' . $contenttype);
          }
          $response = $this->curl->$method($endpoint, $callargs);
  
          if ($this->curl->errno == 0) {
              if ($responsetype == 'json') {
                  $json = json_decode($response);
  
                  if (!empty($json->error)) {
                      throw new rest_exception($json->error->code . ': ' . $json->error->message);
                  }
                  return $json;
              } else if ($responsetype == 'headers') {
                  $response = $this->curl->get_raw_response();
              }
              return $response;
          } else {
              throw new rest_exception($this->curl->error, $this->curl->errno);
          }
      }
code_tokens: public function call ( $ functionname , $ functionargs , $ rawpost = false , $ contenttype = false ) { $ functions = $ this -> get_api_functions ( ) ; $ supportedmethods = [ 'get' , 'put' , 'post' , 'patch' , 'head' , 'delete' ] ; if ( empty ( $ functions [ $ functionname ] ) ) { throw new coding_exception ( 'unsupported api functionname: ' . $ functionname ) ; } $ method = $ functions [ $ functionname ] [ 'method' ] ; $ endpoint = $ functions [ $ functionname ] [ 'endpoint' ] ; $ responsetype = $ functions [ $ functionname ] [ 'response' ] ; if ( ! in_array ( $ method , $ supportedmethods ) ) { throw new coding_exception ( 'unsupported api method: ' . $ method ) ; } $ args = $ functions [ $ functionname ] [ 'args' ] ; $ callargs = [ ] ; foreach ( $ args as $ argname => $ argtype ) { if ( isset ( $ functionargs [ $ argname ] ) ) { $ callargs [ $ argname ] = clean_param ( $ functionargs [ $ argname ] , $ argtype ) ; } } // Allow params in the URL path like /me/{parent}/children. foreach ( $ callargs as $ argname => $ value ) { $ newendpoint = str_replace ( '{' . $ argname . '}' , $ value , $ endpoint ) ; if ( $ newendpoint != $ endpoint ) { $ endpoint = $ newendpoint ; unset ( $ callargs [ $ argname ] ) ; } } if ( $ rawpost !== false ) { $ queryparams = $ this -> curl -> build_post_data ( $ callargs ) ; if ( ! empty ( $ queryparams ) ) { $ endpoint .= '?' . $ queryparams ; } $ callargs = $ rawpost ; } if ( empty ( $ contenttype ) ) { $ this -> curl -> setHeader ( 'Content-type: application/json' ) ; } else { $ this -> curl -> setHeader ( 'Content-type: ' . $ contenttype ) ; } $ response = $ this -> curl -> $ method ( $ endpoint , $ callargs ) ; if ( $ this -> curl -> errno == 0 ) { if ( $ responsetype == 'json' ) { $ json = json_decode ( $ response ) ; if ( ! empty ( $ json -> error ) ) { throw new rest_exception ( $ json -> error -> code . ': ' . $ json -> error -> message ) ; } return $ json ; } else if ( $ responsetype == 'headers' ) { $ response = $ this -> curl -> get_raw_response ( ) ; } return $ response ; } else { throw new rest_exception ( $ this -> curl -> error , $ this -> curl -> errno ) ; } }
docstring: Call a function from the Api with a set of arguments and optional data.
  
  @param string $functionname
  @param array $functionargs
  @param string $rawpost Optional param to include in the body of a post.
  @param string $contenttype The MIME type for the request's Content-Type header.
  @return string|stdClass
docstring_tokens: Call a function from the Api with a set of arguments and optional data .