Completed
Push — master ( b59a64...6cda03 )
by Alex
03:36
created

HttpStatus::getStatusDescription()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 9.2
c 0
b 0
f 0
cc 4
eloc 8
nc 5
nop 1
1
<?php
2
3
namespace POData\Common;
4
5
/**
6
 * Class HttpStatus.
7
 */
8
class HttpStatus
9
{
10
    const CODE_CONTINUE = 100;
11
    const CODE_SWITCHING_PROTOCOLS = 101;
12
    const CODE_OK = 200;
13
    const CODE_CREATED = 201;
14
    const CODE_ACCEPTED = 202;
15
    const CODE_NON_AUTHRATIVE_INFORMATION = 203;
16
    const CODE_NOCONTENT = 204;
17
    const CODE_RESET_CONTENT = 205;
18
    const CODE_PARTIAL_CONTENT = 206;
19
    const CODE_MULTIPLE_CHOICE = 300;
20
    const CODE_MOVED_PERMANENTLY = 301;
21
    const CODE_FOUND = 302;
22
    const CODE_SEE_OTHER = 303;
23
    const CODE_NOT_MODIFIED = 304;
24
    const CODE_USE_PROXY = 305;
25
    const CODE_UNUSED = 306;
26
    const CODE_TEMP_REDIRECT = 307;
27
    const CODE_BAD_REQUEST = 400;
28
    const CODE_UNAUTHORIZED = 401;
29
    const CODE_PAYMENT_REQ = 402;
30
    const CODE_FORBIDDEN = 403;
31
    const CODE_NOT_FOUND = 404;
32
    const CODE_METHOD_NOT_ALLOWED = 405;
33
    const CODE_NOT_ACCEPTABLE = 406;
34
    const CODE_PROXY_AUTHENTICATION_REQUIRED = 407;
35
    const CODE_REQUEST_TIMEOUT = 408;
36
    const CODE_CONFLICT = 409;
37
    const CODE_GONE = 410;
38
    const CODE_LENGTH_REQUIRED = 411;
39
    const CODE_PRECONDITION_FAILED = 412;
40
    const CODE_REQUEST_ENTITY_TOOLONG = 413;
41
    const CODE_REQUEST_URI_TOOLONG = 414;
42
    const CODE_UNSUPPORTED_MEDIATYPE = 415;
43
    const CODE_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
44
    const CODE_EXPECTATION_FAILED = 417;
45
    const CODE_INTERNAL_SERVER_ERROR = 500;
46
    const CODE_NOT_IMPLEMENTED = 501;
47
    const CODE_BAD_GATEWAY = 502;
48
    const CODE_SERVICE_UNAVAILABLE = 503;
49
    const CODE_GATEWAY_TIMEOUT = 504;
50
    const CODE_HTTP_VERSION_NOT_SUPPORTED = 505;
51
52
    private static $reverse = [
53
        100 => self::CODE_CONTINUE,
54
        101 => self::CODE_SWITCHING_PROTOCOLS,
55
        200 => self::CODE_OK,
56
        201 => self::CODE_CREATED,
57
        202 => self::CODE_ACCEPTED,
58
        203 => self::CODE_NON_AUTHRATIVE_INFORMATION,
59
        204 => self::CODE_NOCONTENT,
60
        205 => self::CODE_RESET_CONTENT,
61
        206 => self::CODE_PARTIAL_CONTENT,
62
        300 => self::CODE_MULTIPLE_CHOICE,
63
        301 => self::CODE_MOVED_PERMANENTLY,
64
        302 => self::CODE_FOUND,
65
        303 => self::CODE_SEE_OTHER,
66
        304 => self::CODE_NOT_MODIFIED,
67
        305 => self::CODE_USE_PROXY,
68
        306 => self::CODE_UNUSED,
69
        307 => self::CODE_TEMP_REDIRECT,
70
        400 => self::CODE_BAD_REQUEST,
71
        401 => self::CODE_UNAUTHORIZED,
72
        402 => self::CODE_PAYMENT_REQ,
73
        403 => self::CODE_FORBIDDEN,
74
        404 => self::CODE_NOT_FOUND,
75
        405 => self::CODE_METHOD_NOT_ALLOWED,
76
        406 => self::CODE_NOT_ACCEPTABLE,
77
        407 => self::CODE_PROXY_AUTHENTICATION_REQUIRED,
78
        408 => self::CODE_REQUEST_TIMEOUT,
79
        409 => self::CODE_CONFLICT,
80
        410 => self::CODE_GONE,
81
        411 => self::CODE_LENGTH_REQUIRED,
82
        412 => self::CODE_PRECONDITION_FAILED,
83
        413 => self::CODE_REQUEST_ENTITY_TOOLONG,
84
        414 => self::CODE_REQUEST_URI_TOOLONG,
85
        415 => self::CODE_UNSUPPORTED_MEDIATYPE,
86
        416 => self::CODE_REQUESTED_RANGE_NOT_SATISFIABLE,
87
        417 => self::CODE_EXPECTATION_FAILED,
88
        500 => self::CODE_INTERNAL_SERVER_ERROR,
89
        501 => self::CODE_NOT_IMPLEMENTED,
90
        502 => self::CODE_BAD_GATEWAY,
91
        503 => self::CODE_SERVICE_UNAVAILABLE,
92
        504 => self::CODE_GATEWAY_TIMEOUT,
93
        505 => self::CODE_HTTP_VERSION_NOT_SUPPORTED
94
    ];
95
96
    private static $mapping = [
97
        self::CODE_CONTINUE => 'Continue',
98
        self::CODE_SWITCHING_PROTOCOLS => 'Switching Protocols',
99
        self::CODE_OK => 'OK',
100
        self::CODE_CREATED => 'Created',
101
        self::CODE_ACCEPTED => 'Accepted',
102
        self::CODE_NON_AUTHRATIVE_INFORMATION => 'Non-Authoritative Information',
103
        self::CODE_NOCONTENT => 'No Content',
104
        self::CODE_RESET_CONTENT => 'ResetContent',
105
        self::CODE_PARTIAL_CONTENT => 'Partial Content',
106
        self::CODE_MULTIPLE_CHOICE => 'Multiple Choices',
107
        self::CODE_MOVED_PERMANENTLY => 'Moved Permanently',
108
        self::CODE_FOUND => 'Found',
109
        self::CODE_SEE_OTHER => 'See Other',
110
        self::CODE_NOT_MODIFIED => 'Not Modified',
111
        self::CODE_USE_PROXY => 'Use Proxy',
112
        self::CODE_UNUSED => 'Unused',
113
        self::CODE_TEMP_REDIRECT => 'Temporary Redirect',
114
        self::CODE_BAD_REQUEST => 'Bad Request',
115
        self::CODE_UNAUTHORIZED => 'Unauthorized',
116
        self::CODE_PAYMENT_REQ => 'Payment Required',
117
        self::CODE_FORBIDDEN => 'Forbidden',
118
        self::CODE_NOT_FOUND => 'Not Found',
119
        self::CODE_METHOD_NOT_ALLOWED => 'Method Not Allowed',
120
        self::CODE_NOT_ACCEPTABLE => 'Not Acceptable',
121
        self::CODE_PROXY_AUTHENTICATION_REQUIRED => 'Proxy Authentication Required',
122
        self::CODE_REQUEST_TIMEOUT => 'Request Timeout',
123
        self::CODE_CONFLICT => 'Conflict',
124
        self::CODE_GONE => 'Gone',
125
        self::CODE_LENGTH_REQUIRED => 'Length Required',
126
        self::CODE_PRECONDITION_FAILED => 'Precondition Failed',
127
        self::CODE_REQUEST_ENTITY_TOOLONG => 'Request Entity Too Large',
128
        self::CODE_REQUEST_URI_TOOLONG => 'Request URI Too Large',
129
        self::CODE_UNSUPPORTED_MEDIATYPE => 'Unsupported Media Type',
130
        self::CODE_REQUESTED_RANGE_NOT_SATISFIABLE => 'Requested Range Not Satisfiable',
131
        self::CODE_EXPECTATION_FAILED => 'Expectation Failed',
132
        self::CODE_INTERNAL_SERVER_ERROR => 'Internal Server Error',
133
        self::CODE_NOT_IMPLEMENTED => 'Not Implemented',
134
        self::CODE_BAD_GATEWAY => 'Bad Gateway',
135
        self::CODE_SERVICE_UNAVAILABLE => 'Service Unavailable',
136
        self::CODE_GATEWAY_TIMEOUT => 'Gateway Timeout',
137
        self::CODE_HTTP_VERSION_NOT_SUPPORTED => 'HTTP Version Not Supported'
138
    ];
139
140
    /**
141
     * Get status description from status code.
142
     *
143
     * @param int $statusCode status code
144
     *
145
     * @return string|null
146
     */
147
    public static function getStatusDescription($statusCode)
148
    {
149
        // if int, look up corresponding constant value - if not exists, bail out
150
        if (is_int($statusCode)) {
151
            if (!array_key_exists($statusCode, self::$reverse)) {
152
                return null;
153
            }
154
            $statusCode = self::$reverse[$statusCode];
155
        }
156
157
        // here mainly to catch non-integral inputs that can't be mapped to a defined class constant
158
        if (!array_key_exists($statusCode, self::$mapping)) {
159
            return null;
160
        }
161
162
        return self::$mapping[$statusCode];
163
    }
164
}
165