]> git.mxchange.org Git - friendica.git/blob - src/Module/Response.php
Merge pull request #11005 from nupplaphil/feat/module_di
[friendica.git] / src / Module / Response.php
1 <?php
2
3 namespace Friendica\Module;
4
5 use Friendica\Capabilities\ICanCreateResponses;
6 use Friendica\Network\HTTPException\InternalServerErrorException;
7 use Psr\Http\Message\ResponseInterface;
8
9 class Response implements ICanCreateResponses
10 {
11         /**
12          * @var string[]
13          */
14         protected $headers = [];
15         /**
16          * @var string
17          */
18         protected $content = '';
19         /**
20          * @var string
21          */
22         protected $type = self::TYPE_HTML;
23
24         /**
25          * {@inheritDoc}
26          */
27         public function setHeader(?string $header = null, ?string $key = null): void
28         {
29                 if (!isset($header) && !empty($key)) {
30                         unset($this->headers[$key]);
31                 }
32
33                 if (isset($header)) {
34                         if (empty($key)) {
35                                 $this->headers[] = $header;
36                         } else {
37                                 $this->headers[$key] = $header;
38                         }
39                 }
40         }
41
42         /**
43          * {@inheritDoc}
44          */
45         public function addContent($content): void
46         {
47                 $this->content .= $content;
48         }
49
50         /**
51          * {@inheritDoc}
52          */
53         public function getHeaders(): array
54         {
55                 return $this->headers;
56         }
57
58         /**
59          * {@inheritDoc}
60          */
61         public function getContent()
62         {
63                 return $this->content;
64         }
65
66         /**
67          * {@inheritDoc}
68          */
69         public function setType(string $type, ?string $content_type = null): void
70         {
71                 if (!in_array($type, static::ALLOWED_TYPES)) {
72                         throw new InternalServerErrorException('wrong type');
73                 }
74
75                 switch ($type) {
76                         case static::TYPE_JSON:
77                                 $content_type = $content_type ?? 'application/json';
78                                 break;
79                         case static::TYPE_XML:
80                                 $content_type = $content_type ?? 'text/xml';
81                                 break;
82                         case static::TYPE_RSS:
83                                 $content_type = $content_type ?? 'application/rss+xml';
84                                 break;
85                         case static::TYPE_ATOM:
86                                 $content_type = $content_type ?? 'application/atom+xml';
87                                 break;
88                 }
89
90                 $this->setHeader($content_type, 'Content-type');
91
92                 $this->type = $type;
93         }
94
95         /**
96          * {@inheritDoc}
97          */
98         public function getType(): string
99         {
100                 return $this->type;
101         }
102
103         /**
104          * {@inheritDoc}
105          */
106         public function generate(): ResponseInterface
107         {
108                 // Setting the response type as an X-header for direct usage
109                 $this->headers[static::X_HEADER] = $this->type;
110
111                 return new \GuzzleHttp\Psr7\Response(200, $this->headers, $this->content);
112         }
113 }