Request   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 142
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
wmc 19
lcom 1
cbo 0
dl 0
loc 142
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
C __construct() 0 59 11
A url() 0 4 1
A package() 0 4 1
A route() 0 9 3
A method() 0 4 1
A language() 0 4 1
A defaultLanguage() 0 4 1
1
<?php
2
/**
3
 * @license MIT
4
 */
5
namespace Pivasic\Core;
6
7
/**
8
 * Represents a HTTP request.
9
 *
10
 * Class Request
11
 * @package Pivasic\Core
12
 */
13
class Request
14
{
15
    /**
16
     * Request constructor.
17
     *
18
     * @param array $languageList
19
     * @param array $packageList
20
     * @param string $url
21
     */
22
    public function __construct(array &$languageList = [], array &$packageList = [], &$url = '')
23
    {
24
        if ('' == $url) {
25
            $url = filter_input_array(INPUT_SERVER)['REQUEST_URI'] ?? '';
26
        }
27
        $this->method = 'GET';
28
        $this->defaultLanguage = $languageList[0] ?? '';
29
        $this->language = $this->defaultLanguage;
30
        $this->package = 'Original';
31
        $this->route = 'index';
32
33
        $url = explode('?', $url);
34
        $url = trim(trim($url[0]), '/');
35
        if ('' != $url) {
36
            $partList = explode('/', $url);
37
38
            /**
39
             * Check language.
40
             */
41
            if (false !== ($key = array_search($partList[0], $languageList))) {
42
                unset($partList[0]);
43
                $partList = array_values($partList);
44
                $this->language = $languageList[$key];
45
            }
46
47
            /**
48
             * Check package.
49
             */
50
            if (isset($partList[0]) && false !== ($key = array_search(ucfirst($partList[0]), $packageList))) {
51
                unset($partList[0]);
52
                $partList = array_values($partList);
53
                $this->package = $packageList[$key];
54
            }
55
56
            /**
57
             * Get route.
58
             */
59
            if (isset($partList[0])) {
60
                $this->route = implode('/', $partList);
61
                $this->route = trim(str_replace('.', '_', $this->route), '/');
62
            }
63
        }
64
65
        /**
66
         * Request URL.
67
         */
68
        $this->url = '/' . $url;
69
70
        /**
71
         * Get method.
72
         */
73
        if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 'xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])) {
74
            $this->method = 'AJAX';
75
        } else {
76
            if (isset($_SERVER['REQUEST_METHOD']) && in_array($_SERVER['REQUEST_METHOD'], ['GET', 'POST', 'HEAD', 'PUT', 'DELETE'])) {
77
                $this->method = $_SERVER['REQUEST_METHOD'];
78
            }
79
        }
80
    }
81
82
    /**
83
     * Path without an optional query.
84
     *
85
     * @return string
86
     */
87
    public function url(): string
88
    {
89
        return $this->url;
90
    }
91
92
    /**
93
     * Name of an app package.
94
     *
95
     * @return string
96
     */
97
    public function package(): string
98
    {
99
        return $this->package;
100
    }
101
102
    /**
103
     * URL path without language code, package name and an optional query parameters.
104
     *
105
     * @param bool $dropIndex
106
     * @return string
107
     */
108
    public function route(bool $dropIndex = false): string
109
    {
110
        if ($dropIndex) {
111
            if ('index' == $this->route) {
112
                return '';
113
            }
114
        }
115
        return $this->route;
116
    }
117
118
    /**
119
     * Request method.
120
     *
121
     * @return string
122
     */
123
    public function method(): string
124
    {
125
        return $this->method;
126
    }
127
128
    /**
129
     * Current language code.
130
     *
131
     * @return string
132
     */
133
    public function language(): string
134
    {
135
        return $this->language;
136
    }
137
138
    /**
139
     * Default language code.
140
     *
141
     * @return string
142
     */
143
    public function defaultLanguage(): string
144
    {
145
        return $this->defaultLanguage;
146
    }
147
148
    private $url;
149
    private $package;
150
    private $route;
151
    private $method;
152
    private $language;
153
    private $defaultLanguage;
154
}