Passed
Push — 9.0-dev ( bf3f06...4f14a6 )
by Radu
01:13
created

HttpResponse::send()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
namespace WebServCo\Framework\Libraries;
3
4
use \WebServCo\Framework\Http;
5
use \WebServCo\Framework\Libraries\Request;
6
7
final class HttpResponse extends \WebServCo\Framework\AbstractResponse implements
8
    \WebServCo\Framework\Interfaces\ResponseInterface
9
{
10
    protected $statusText;
11
    protected $headers;
12
    protected $charset;
13
    
14
    public function __construct($content = null, $statusCode = 200, $headers = [])
15
    {
16
        $this->setStatus($statusCode);
17
        
18
        $this->charset = 'utf-8';
19
        
20
        foreach ($headers as $name => $value) {
21
            $this->setHeader($name, $value);
22
        }
23
        
24
        $this->setContent($content);
25
    }
26
    
27
    public function setStatus($statusCode)
28
    {
29
        if (!isset(Http::$statusCodes[$statusCode])) {
30
                throw new \ErrorException(
31
                    sprintf('Invalid HTTP status code: %s', $statusCode)
32
                );
33
        }
34
        $this->statusCode = $statusCode;
35
        $this->statusText = Http::$statusCodes[$statusCode];
36
    }
37
    
38
    public function setHeader($name, $value)
39
    {
40
        if ('Content-Type' == $name) {
41
            $this->headers[$name] = $value . '; charset=' . $this->charset;
42
        }
43
        
44
        switch ($name) {
45
            case 'Content-Type':
46
                $this->headers[$name] = $value . '; charset=' . $this->charset;
47
                break;
48
            default:
49
                $this->headers[$name] = $value;
50
        }
51
    }
52
    
53
    public function send(Request $request)
54
    {
55
        $this->sendHeaders($request);
56
        $this->sendContent();
57
        return $this->statusCode;
58
    }
59
    
60
    protected function sendHeaders(Request $request)
61
    {
62
        foreach ($this->headers as $name => $value) {
63
            header($name . ': ' . $value, true, $this->statusCode);
64
        }
65
        $serverProtocol = $request->getServerProtocol();
66
        if (!empty($serverProtocol)) {
67
            header(
68
                sprintf(
69
                    '%s %s %s',
70
                    $serverProtocol,
71
                    $this->statusCode,
72
                    $this->statusText
73
                ),
74
                true,
75
                $this->statusCode
76
            );
77
        }
78
    }
79
    
80
    protected function sendContent()
81
    {
82
        echo $this->content;
83
    }
84
}
85