AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace communication_matrix\local;use communication_matrix\matrix_client;use GuzzleHttp\Psr7\Request;use OutOfRangeException;/*** A command to be sent to the Matrix server.** This class is a wrapper around the PSR-7 Request Interface implementation provided by Guzzle.** It takes a set of common parameters and configurations and turns them into a Request that can be called against a live server.** @package communication_matrix* @copyright Andrew Nicols <andrew@nicols.co.uk>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class command extends Request {/** @var array $command The raw command data *//** @var array|null $params The parameters passed into the command *//** @var bool $sendasjson Whether to send params as JSON *//** @var bool $requireauthorization Whether authorization is required for this request *//** @var bool $ignorehttperrors Whether to ignore HTTP Errors *//** @var array $query Any query parameters to set on the URL *//** @var array|null Any parameters not used in the URI which are to be passed to the server via body or query params */protected array $remainingparams = [];/*** Create a new Command.** @param matrix_client $client The URL for this method* @param string $method (GET|POST|PUT|DELETE)* @param string $endpoint The URL* @param array $params Any parameters to pass* @param array $query Any query parameters to set on the URL* @param bool $ignorehttperrors Whether to ignore HTTP Errors* @param bool $requireauthorization Whether authorization is required for this request* @param bool $sendasjson Whether to send params as JSON*/public function __construct(protected matrix_client $client,string $method,string $endpoint,protected array $params = [],protected array $query = [],protected bool $ignorehttperrors = false,protected bool $requireauthorization = true,protected bool $sendasjson = true,) {foreach ($params as $name => $value) {if ($name[0] === ':') {if (preg_match("/{$name}\\b/", $endpoint) !== 1) {throw new OutOfRangeException("Parameter not found in URL '{$name}'");}$endpoint = preg_replace("/{$name}\\b/", urlencode($value), $endpoint);unset($params[$name]);}}// Store the modified params.$this->remainingparams = $params;if (str_contains($endpoint, '/:')) {throw new OutOfRangeException("URL contains untranslated parameters '{$endpoint}'");}// Process the required headers.$headers = ['Content-Type' => 'application/json',];if ($this->require_authorization()) {$headers['Authorization'] = 'Bearer ' . $this->client->get_token();}// Construct the final request.parent::__construct($method,$this->get_url($endpoint),$headers,);}/*** Get the URL of the endpoint on the server.** @param string $endpoint* @return string*/protected function get_url(string $endpoint): string {return sprintf("%s/%s",$this->client->get_server_url(),$endpoint,);}/*** Get all parameters, including those set in the URL.** @return array*/public function get_all_params(): array {return $this->params;}/*** Get the parameters provided to the command which are not used in the URL.** These are typically passed to the server as query or body parameters instead.** @return array*/public function get_remaining_params(): array {return $this->remainingparams;}/*** Get the Guzzle options to pass into the request.** @return array*/public function get_options(): array {$options = [];if (count($this->query)) {$options['query'] = $this->query;}if ($this->should_send_params_as_json()) {$options['json'] = $this->get_remaining_params();}if ($this->should_ignore_http_errors()) {$options['http_errors'] = false;}return $options;}/*** Whether authorization is required.** Based on the 'authorization' attribute set in a raw command.** @return bool*/public function require_authorization(): bool {return $this->requireauthorization;}/*** Whether to ignore http errors on the response.** Based on the 'ignore_http_errors' attribute set in a raw command.** @return bool*/public function should_ignore_http_errors(): bool {return $this->ignorehttperrors;}/*** Whether to send remaining parameters as JSON.** @return bool*/public function should_send_params_as_json(): bool {return $this->sendasjson;}}