Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   1  <?php
   2  
   3  declare(strict_types=1);
   4  
   5  namespace GuzzleHttp\Psr7;
   6  
   7  use Psr\Http\Message\RequestFactoryInterface;
   8  use Psr\Http\Message\RequestInterface;
   9  use Psr\Http\Message\ResponseFactoryInterface;
  10  use Psr\Http\Message\ResponseInterface;
  11  use Psr\Http\Message\ServerRequestFactoryInterface;
  12  use Psr\Http\Message\ServerRequestInterface;
  13  use Psr\Http\Message\StreamFactoryInterface;
  14  use Psr\Http\Message\StreamInterface;
  15  use Psr\Http\Message\UploadedFileFactoryInterface;
  16  use Psr\Http\Message\UploadedFileInterface;
  17  use Psr\Http\Message\UriFactoryInterface;
  18  use Psr\Http\Message\UriInterface;
  19  
  20  /**
  21   * Implements all of the PSR-17 interfaces.
  22   *
  23   * Note: in consuming code it is recommended to require the implemented interfaces
  24   * and inject the instance of this class multiple times.
  25   */
  26  final class HttpFactory implements
  27      RequestFactoryInterface,
  28      ResponseFactoryInterface,
  29      ServerRequestFactoryInterface,
  30      StreamFactoryInterface,
  31      UploadedFileFactoryInterface,
  32      UriFactoryInterface
  33  {
  34      public function createUploadedFile(
  35          StreamInterface $stream,
  36          int $size = null,
  37          int $error = \UPLOAD_ERR_OK,
  38          string $clientFilename = null,
  39          string $clientMediaType = null
  40      ): UploadedFileInterface {
  41          if ($size === null) {
  42              $size = $stream->getSize();
  43          }
  44  
  45          return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType);
  46      }
  47  
  48      public function createStream(string $content = ''): StreamInterface
  49      {
  50          return Utils::streamFor($content);
  51      }
  52  
  53      public function createStreamFromFile(string $file, string $mode = 'r'): StreamInterface
  54      {
  55          try {
  56              $resource = Utils::tryFopen($file, $mode);
  57          } catch (\RuntimeException $e) {
  58              if ('' === $mode || false === \in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], true)) {
  59                  throw new \InvalidArgumentException(sprintf('Invalid file opening mode "%s"', $mode), 0, $e);
  60              }
  61  
  62              throw $e;
  63          }
  64  
  65          return Utils::streamFor($resource);
  66      }
  67  
  68      public function createStreamFromResource($resource): StreamInterface
  69      {
  70          return Utils::streamFor($resource);
  71      }
  72  
  73      public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface
  74      {
  75          if (empty($method)) {
  76              if (!empty($serverParams['REQUEST_METHOD'])) {
  77                  $method = $serverParams['REQUEST_METHOD'];
  78              } else {
  79                  throw new \InvalidArgumentException('Cannot determine HTTP method');
  80              }
  81          }
  82  
  83          return new ServerRequest($method, $uri, [], null, '1.1', $serverParams);
  84      }
  85  
  86      public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface
  87      {
  88          return new Response($code, [], null, '1.1', $reasonPhrase);
  89      }
  90  
  91      public function createRequest(string $method, $uri): RequestInterface
  92      {
  93          return new Request($method, $uri);
  94      }
  95  
  96      public function createUri(string $uri = ''): UriInterface
  97      {
  98          return new Uri($uri);
  99      }
 100  }