Completed
Push — master ( d1c5d4...5d4ad8 )
by Sinnarasa
05:27
created
src/Routing/Dispatcher/DispatcherInterface.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@
 block discarded – undo
15 15
     /**
16 16
      * @param Route $route
17 17
      */
18
-    public function __construct(Route $route,ResponseInterface $response);
18
+    public function __construct(Route $route, ResponseInterface $response);
19 19
 
20 20
     /**
21 21
      * @return mixed
Please login to merge, or discard this patch.
src/Routing/Route.php 1 patch
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
      */
128 128
     public function setDetail($detail)
129 129
     {
130
-        $this->detail = array_merge($detail,$this->detail);
130
+        $this->detail = array_merge($detail, $this->detail);
131 131
     }
132 132
 
133 133
     /**
@@ -173,8 +173,8 @@  discard block
 block discarded – undo
173 173
     /**
174 174
      * @return array
175 175
      */
176
-    public function getData(){
177
-        return (isset($this->getDetail()['data']) && is_array($this->getDetail()['data']))?$this->getDetail()['data']:[];
176
+    public function getData() {
177
+        return (isset($this->getDetail()['data']) && is_array($this->getDetail()['data'])) ? $this->getDetail()['data'] : [];
178 178
     }
179 179
 
180 180
     /**
Please login to merge, or discard this patch.
src/Routing/Matcher/MatcherInterface.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -41,5 +41,5 @@
 block discarded – undo
41 41
      * @param $class
42 42
      * @return mixed
43 43
      */
44
-    public function addDispatcher($method,$class);
44
+    public function addDispatcher($method, $class);
45 45
 }
Please login to merge, or discard this patch.
src/Routing/Middleware.php 1 patch
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -76,8 +76,8 @@  discard block
 block discarded – undo
76 76
      * @param $class
77 77
      * @return mixed
78 78
      */
79
-    private function callHandler($class){
80
-        $instance = call_user_func($this->router->getConfig()['di'],$class);
79
+    private function callHandler($class) {
80
+        $instance = call_user_func($this->router->getConfig()['di'], $class);
81 81
         if (method_exists($instance, 'handle')) {
82 82
             $reflectionMethod = new ReflectionMethod($instance, 'handle');
83 83
             $dependencies = [];
@@ -93,8 +93,8 @@  discard block
 block discarded – undo
93 93
      * @param $class
94 94
      * @return Route|RouteCollection|Router|mixed
95 95
      */
96
-    private function getClass($class){
97
-        switch($class){
96
+    private function getClass($class) {
97
+        switch ($class) {
98 98
             case 'JetFire\Routing\Route':
99 99
                 return $this->router->route;
100 100
                 break;
@@ -105,7 +105,7 @@  discard block
 block discarded – undo
105 105
                 return $this->router->collection;
106 106
                 break;
107 107
             default:
108
-                return call_user_func_array($this->router->getConfig()['di'],[$class]);
108
+                return call_user_func_array($this->router->getConfig()['di'], [$class]);
109 109
                 break;
110 110
         }
111 111
     }
Please login to merge, or discard this patch.
src/Routing/Dispatcher/ClosureDispatcher.php 1 patch
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -25,7 +25,7 @@  discard block
 block discarded – undo
25 25
     /**
26 26
      * @param Route $route
27 27
      */
28
-    public function __construct(Route $route,ResponseInterface $response)
28
+    public function __construct(Route $route, ResponseInterface $response)
29 29
     {
30 30
         $this->route = $route;
31 31
         $this->response = $response;
@@ -42,8 +42,8 @@  discard block
 block discarded – undo
42 42
             $this->response->setHeaders(['Content-Type' => 'text/html']);
43 43
         }
44 44
         $params = ($this->route->getParameters() == '') ? [] : $this->route->getParameters();
45
-        if(is_array($content = call_user_func_array($this->route->getTarget('closure'), $params))) $this->route->addTarget('data',$content);
46
-        elseif(!is_null($content)) $this->response->setContent($content);
45
+        if (is_array($content = call_user_func_array($this->route->getTarget('closure'), $params))) $this->route->addTarget('data', $content);
46
+        elseif (!is_null($content)) $this->response->setContent($content);
47 47
     }
48 48
 
49 49
 }
Please login to merge, or discard this patch.
src/Routing/Dispatcher/TemplateDispatcher.php 1 patch
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -36,7 +36,7 @@  discard block
 block discarded – undo
36 36
     /**
37 37
      * @param Route $route
38 38
      */
39
-    public function __construct(Route $route,ResponseInterface $response)
39
+    public function __construct(Route $route, ResponseInterface $response)
40 40
     {
41 41
         $this->route = $route;
42 42
         $this->response = $response;
@@ -53,8 +53,8 @@  discard block
 block discarded – undo
53 53
             $this->response->setContent(call_user_func_array($this->route->getTarget('callback')[$this->route->getTarget('extension')], [$this->route]));
54 54
         else {
55 55
             ob_start();
56
-            if(isset($this->route->getTarget()['data']))extract($this->route->getTarget('data'));
57
-            if(isset($this->route->getParams()['data']))extract($this->route->getParams()['data']);
56
+            if (isset($this->route->getTarget()['data']))extract($this->route->getTarget('data'));
57
+            if (isset($this->route->getParams()['data']))extract($this->route->getParams()['data']);
58 58
             require($this->route->getTarget('template'));
59 59
             $this->response->setContent(ob_get_clean());
60 60
         }
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
     /**
64 64
      * @param $extension
65 65
      */
66
-    public function setContentType($extension){
66
+    public function setContentType($extension) {
67 67
         $this->response->setStatusCode(200);
68 68
         isset($this->types[$extension])
69 69
             ? $this->response->setHeaders(['Content-Type' => $this->types[$extension]])
Please login to merge, or discard this patch.
src/Routing/Response.php 1 patch
Spacing   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@  discard block
 block discarded – undo
7 7
  * Class Response
8 8
  * @package JetFire\Routing
9 9
  */
10
-class Response implements ResponseInterface{
10
+class Response implements ResponseInterface {
11 11
 
12 12
     /**
13 13
      * @var array
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
     public static $statusTexts = array(
54 54
         100 => 'Continue',
55 55
         101 => 'Switching Protocols',
56
-        102 => 'Processing',            // RFC2518
56
+        102 => 'Processing', // RFC2518
57 57
         200 => 'OK',
58 58
         201 => 'Created',
59 59
         202 => 'Accepted',
@@ -61,9 +61,9 @@  discard block
 block discarded – undo
61 61
         204 => 'No Content',
62 62
         205 => 'Reset Content',
63 63
         206 => 'Partial Content',
64
-        207 => 'Multi-Status',          // RFC4918
65
-        208 => 'Already Reported',      // RFC5842
66
-        226 => 'IM Used',               // RFC3229
64
+        207 => 'Multi-Status', // RFC4918
65
+        208 => 'Already Reported', // RFC5842
66
+        226 => 'IM Used', // RFC3229
67 67
         300 => 'Multiple Choices',
68 68
         301 => 'Moved Permanently',
69 69
         302 => 'Found',
@@ -71,7 +71,7 @@  discard block
 block discarded – undo
71 71
         304 => 'Not Modified',
72 72
         305 => 'Use Proxy',
73 73
         307 => 'Temporary Redirect',
74
-        308 => 'Permanent Redirect',    // RFC7238
74
+        308 => 'Permanent Redirect', // RFC7238
75 75
         400 => 'Bad Request',
76 76
         401 => 'Unauthorized',
77 77
         402 => 'Payment Required',
@@ -90,26 +90,26 @@  discard block
 block discarded – undo
90 90
         415 => 'Unsupported Media Type',
91 91
         416 => 'Range Not Satisfiable',
92 92
         417 => 'Expectation Failed',
93
-        418 => 'I\'m a teapot',                                               // RFC2324
94
-        422 => 'Unprocessable Entity',                                        // RFC4918
95
-        423 => 'Locked',                                                      // RFC4918
96
-        424 => 'Failed Dependency',                                           // RFC4918
97
-        425 => 'Reserved for WebDAV advanced collections expired proposal',   // RFC2817
98
-        426 => 'Upgrade Required',                                            // RFC2817
99
-        428 => 'Precondition Required',                                       // RFC6585
100
-        429 => 'Too Many Requests',                                           // RFC6585
101
-        431 => 'Request Header Fields Too Large',                             // RFC6585
93
+        418 => 'I\'m a teapot', // RFC2324
94
+        422 => 'Unprocessable Entity', // RFC4918
95
+        423 => 'Locked', // RFC4918
96
+        424 => 'Failed Dependency', // RFC4918
97
+        425 => 'Reserved for WebDAV advanced collections expired proposal', // RFC2817
98
+        426 => 'Upgrade Required', // RFC2817
99
+        428 => 'Precondition Required', // RFC6585
100
+        429 => 'Too Many Requests', // RFC6585
101
+        431 => 'Request Header Fields Too Large', // RFC6585
102 102
         500 => 'Internal Server Error',
103 103
         501 => 'Not Implemented',
104 104
         502 => 'Bad Gateway',
105 105
         503 => 'Service Unavailable',
106 106
         504 => 'Gateway Timeout',
107 107
         505 => 'HTTP Version Not Supported',
108
-        506 => 'Variant Also Negotiates (Experimental)',                      // RFC2295
109
-        507 => 'Insufficient Storage',                                        // RFC4918
110
-        508 => 'Loop Detected',                                               // RFC5842
111
-        510 => 'Not Extended',                                                // RFC2774
112
-        511 => 'Network Authentication Required',                             // RFC6585
108
+        506 => 'Variant Also Negotiates (Experimental)', // RFC2295
109
+        507 => 'Insufficient Storage', // RFC4918
110
+        508 => 'Loop Detected', // RFC5842
111
+        510 => 'Not Extended', // RFC2774
112
+        511 => 'Network Authentication Required', // RFC6585
113 113
     );
114 114
 
115 115
     /**
@@ -166,7 +166,7 @@  discard block
 block discarded – undo
166 166
      */
167 167
     public function sendHeaders()
168 168
     {
169
-        foreach($this->headers as $key => $content)
169
+        foreach ($this->headers as $key => $content)
170 170
             header($key.' : '.$content);
171 171
         http_response_code($this->getStatusCode());
172 172
         return $this;
Please login to merge, or discard this patch.
src/Routing/RouteCollection.php 1 patch
Spacing   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -43,12 +43,12 @@  discard block
 block discarded – undo
43 43
     public function addRoutes($routes = null, $options = [])
44 44
     {
45 45
         if (!is_null($routes) && !is_array($routes)) {
46
-            if (strpos($routes, '.php') === false) $routes = trim($routes, '/') . '/';
47
-            if (is_file($routes . '/routes.php') && is_array($routesFile = include $routes . '/routes.php')) $routes = $routesFile;
46
+            if (strpos($routes, '.php') === false) $routes = trim($routes, '/').'/';
47
+            if (is_file($routes.'/routes.php') && is_array($routesFile = include $routes.'/routes.php')) $routes = $routesFile;
48 48
             elseif (is_file($routes) && is_array($routesFile = include $routes)) $routes = $routesFile;
49
-            else throw new \InvalidArgumentException('Argument for "' . get_called_class() . '" constructor is not recognized. Expected argument array or file containing array but "' . $routes . '" given');
49
+            else throw new \InvalidArgumentException('Argument for "'.get_called_class().'" constructor is not recognized. Expected argument array or file containing array but "'.$routes.'" given');
50 50
         }
51
-        $this->routes['routes_' . $this->countRoutes] = is_array($routes) ? $routes : [];
51
+        $this->routes['routes_'.$this->countRoutes] = is_array($routes) ? $routes : [];
52 52
         $this->setRoutes($options, $this->countRoutes);
53 53
         $this->countRoutes++;
54 54
     }
@@ -72,10 +72,10 @@  discard block
 block discarded – undo
72 72
         if (is_array($args)) {
73 73
             $nbrArgs = count($args);
74 74
             for ($i = 0; $i < $nbrArgs; ++$i)
75
-                $this->routes['prefix_' . $i] = '/' . trim($args[$i], '/');
75
+                $this->routes['prefix_'.$i] = '/'.trim($args[$i], '/');
76 76
         } elseif (is_string($args))
77 77
             for ($i = 0; $i < $this->countRoutes; ++$i)
78
-                $this->routes['prefix_' . $i] = '/' . trim($args, '/');
78
+                $this->routes['prefix_'.$i] = '/'.trim($args, '/');
79 79
         if ($this->countRoutes == 0) $this->countRoutes++;
80 80
     }
81 81
 
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
         for ($i = 0; $i < $nbrArgs; ++$i) {
89 89
             if (is_array($args[$i])) {
90 90
                 $this->setRoutes($args[$i], $i);
91
-                if (!isset($this->routes['routes_' . $i])) $this->routes['routes_' . $i] = [];
91
+                if (!isset($this->routes['routes_'.$i])) $this->routes['routes_'.$i] = [];
92 92
             }
93 93
         }
94 94
         if ($this->countRoutes == 0) $this->countRoutes++;
@@ -100,11 +100,11 @@  discard block
 block discarded – undo
100 100
      */
101 101
     private function setRoutes($args = [], $i)
102 102
     {
103
-        $this->routes['block_' . $i] = (isset($args['block']) && !empty($args['block'])) ? rtrim($args['block'], '/') . '/' : '';
104
-        $this->routes['view_dir_' . $i] = (isset($args['view_dir']) && !empty($args['view_dir'])) ? rtrim($args['view_dir'], '/') . '/' : '';
105
-        $this->routes['ctrl_namespace_' . $i] = (isset($args['ctrl_namespace']) && !empty($args['ctrl_namespace'])) ? trim($args['ctrl_namespace'], '\\') . '\\' : '';
106
-        $this->routes['prefix_' . $i] = (isset($args['prefix']) && !empty($args['prefix'])) ? '/' . trim($args['prefix'], '/') : '';
107
-        $this->routes['subdomain_' . $i] = (isset($args['subdomain'])) ? $args['subdomain'] : '';
103
+        $this->routes['block_'.$i] = (isset($args['block']) && !empty($args['block'])) ? rtrim($args['block'], '/').'/' : '';
104
+        $this->routes['view_dir_'.$i] = (isset($args['view_dir']) && !empty($args['view_dir'])) ? rtrim($args['view_dir'], '/').'/' : '';
105
+        $this->routes['ctrl_namespace_'.$i] = (isset($args['ctrl_namespace']) && !empty($args['ctrl_namespace'])) ? trim($args['ctrl_namespace'], '\\').'\\' : '';
106
+        $this->routes['prefix_'.$i] = (isset($args['prefix']) && !empty($args['prefix'])) ? '/'.trim($args['prefix'], '/') : '';
107
+        $this->routes['subdomain_'.$i] = (isset($args['subdomain'])) ? $args['subdomain'] : '';
108 108
     }
109 109
 
110 110
     /**
@@ -126,30 +126,30 @@  discard block
 block discarded – undo
126 126
      */
127 127
     public function generateRoutesPath()
128 128
     {
129
-        $root = ($protocol = (isset($_SERVER['REQUEST_SCHEME'])?$_SERVER['REQUEST_SCHEME']:'http')) . '://' . ($domain = (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'])) . str_replace('/index.php', '', $_SERVER['SCRIPT_NAME']);
129
+        $root = ($protocol = (isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME'] : 'http')).'://'.($domain = (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'])).str_replace('/index.php', '', $_SERVER['SCRIPT_NAME']);
130 130
         if (strpos($domain, ($new_domain = $this->getDomain($root))) !== false)
131 131
             $root = str_replace($domain, $new_domain, $root);
132 132
         $count = 0;
133 133
         for ($i = 0; $i < $this->countRoutes; ++$i) {
134
-            $prefix = (isset($this->routes['prefix_' . $i])) ? $this->routes['prefix_' . $i] : '';
135
-            $subdomain = (isset($this->routes['subdomain_' . $i])) ? $this->routes['subdomain_' . $i] : '';
136
-            $url = (!empty($subdomain)) ? str_replace($protocol.'://',$protocol.'://'.$subdomain.'.' ,$root) : $root;
137
-            if (isset($this->routes['routes_' . $i]))
138
-                foreach ($this->routes['routes_' . $i] as $route => $dependencies) {
134
+            $prefix = (isset($this->routes['prefix_'.$i])) ? $this->routes['prefix_'.$i] : '';
135
+            $subdomain = (isset($this->routes['subdomain_'.$i])) ? $this->routes['subdomain_'.$i] : '';
136
+            $url = (!empty($subdomain)) ? str_replace($protocol.'://', $protocol.'://'.$subdomain.'.', $root) : $root;
137
+            if (isset($this->routes['routes_'.$i]))
138
+                foreach ($this->routes['routes_'.$i] as $route => $dependencies) {
139 139
                     if (is_array($dependencies) && isset($dependencies['use']))
140
-                        $use = (is_callable($dependencies['use'])) ? 'closure-' . $count : trim($dependencies['use'], '/');
140
+                        $use = (is_callable($dependencies['use'])) ? 'closure-'.$count : trim($dependencies['use'], '/');
141 141
                     elseif (!is_array($dependencies))
142
-                        $use = (is_callable($dependencies)) ? 'closure-' . $count : trim($dependencies, '/');
142
+                        $use = (is_callable($dependencies)) ? 'closure-'.$count : trim($dependencies, '/');
143 143
                     else
144 144
                         $use = $route;
145 145
                     if (isset($route[0]) && $route[0] == '/') {
146 146
                         (!is_callable($dependencies) && isset($dependencies['name']))
147
-                            ? $this->routesByName[$use . '#' . $dependencies['name']] = $url . $prefix . $route
148
-                            : $this->routesByName[$use] = $url . $prefix . $route;
147
+                            ? $this->routesByName[$use.'#'.$dependencies['name']] = $url.$prefix.$route
148
+                            : $this->routesByName[$use] = $url.$prefix.$route;
149 149
                     } else {
150 150
                         (!is_callable($dependencies) && isset($dependencies['name']))
151
-                            ? $this->routesByName[$use . '#' . $dependencies['name']] = $protocol . '://' . str_replace('{host}', $new_domain, $route) . $prefix
152
-                            : $this->routesByName[$use] = $protocol . '://' . str_replace('{host}', $new_domain, $route) . $prefix;
151
+                            ? $this->routesByName[$use.'#'.$dependencies['name']] = $protocol.'://'.str_replace('{host}', $new_domain, $route).$prefix
152
+                            : $this->routesByName[$use] = $protocol.'://'.str_replace('{host}', $new_domain, $route).$prefix;
153 153
                     }
154 154
                     $count++;
155 155
                 }
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
         foreach ($this->routesByName as $key => $route) {
183 183
             $param = explode('#', $key);
184 184
             $route = str_replace('{subdomain}', $subdomain, $route);
185
-            foreach ($params as $key2 => $value) $route = str_replace(':' . $key2, $value, $route);
185
+            foreach ($params as $key2 => $value) $route = str_replace(':'.$key2, $value, $route);
186 186
             if ($param[0] == trim($name, '/')) return $route;
187 187
             else if (isset($param[1]) && $param[1] == $name) return $route;
188 188
         }
Please login to merge, or discard this patch.
src/Routing/Router.php 1 patch
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -49,14 +49,14 @@  discard block
 block discarded – undo
49 49
      * @param ResponseInterface $response
50 50
      * @param Route $route
51 51
      */
52
-    public function __construct(RouteCollection $collection,ResponseInterface $response = null,Route $route = null)
52
+    public function __construct(RouteCollection $collection, ResponseInterface $response = null, Route $route = null)
53 53
     {
54 54
         $this->collection = $collection;
55
-        $this->response = is_null($response)? new Response() : $response;
55
+        $this->response = is_null($response) ? new Response() : $response;
56 56
         $this->response->setStatusCode(404);
57
-        $this->route = is_null($route)? new Route() : $route;
57
+        $this->route = is_null($route) ? new Route() : $route;
58 58
         $this->middleware = new Middleware($this);
59
-        $this->config['di'] = function($class){
59
+        $this->config['di'] = function($class) {
60 60
             return new $class;
61 61
         };
62 62
     }
@@ -80,8 +80,8 @@  discard block
 block discarded – undo
80 80
     /**
81 81
      * @param object|array $matcher
82 82
      */
83
-    public function setMatcher($matcher){
84
-        if(is_object($matcher))
83
+    public function setMatcher($matcher) {
84
+        if (is_object($matcher))
85 85
             $matcher = [$matcher];
86 86
         $this->matcher = $matcher;
87 87
     }
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
     /**
90 90
      * @param string $matcher
91 91
      */
92
-    public function addMatcher($matcher){
92
+    public function addMatcher($matcher) {
93 93
         $this->matcher[] = $matcher;
94 94
     }
95 95
 
@@ -113,7 +113,7 @@  discard block
 block discarded – undo
113 113
     {
114 114
         if (is_null($url))
115 115
             $url = (isset($_GET['url'])) ? $_GET['url'] : substr(str_replace(str_replace('/index.php', '', $_SERVER['SCRIPT_NAME']), '', $_SERVER['REQUEST_URI']), 1);
116
-        $this->route->setUrl('/' . trim(explode('?', $url)[0], '/'));
116
+        $this->route->setUrl('/'.trim(explode('?', $url)[0], '/'));
117 117
     }
118 118
 
119 119
     /**
@@ -133,9 +133,9 @@  discard block
 block discarded – undo
133 133
      */
134 134
     public function callTarget()
135 135
     {
136
-        $target = is_array($this->route->getTarget('dispatcher'))?$this->route->getTarget('dispatcher'):[$this->route->getTarget('dispatcher')];
137
-        if(!empty($target)) {
138
-            foreach($target as $call) {
136
+        $target = is_array($this->route->getTarget('dispatcher')) ? $this->route->getTarget('dispatcher') : [$this->route->getTarget('dispatcher')];
137
+        if (!empty($target)) {
138
+            foreach ($target as $call) {
139 139
                 $this->dispatcher = new $call($this->route, $this->response);
140 140
                 call_user_func([$this->dispatcher, 'call']);
141 141
             }
@@ -158,11 +158,11 @@  discard block
 block discarded – undo
158 158
         if (isset($this->route->getDetail()['response_templates']) && isset($this->route->getDetail()['response_templates'][$code = $this->response->getStatusCode()])) {
159 159
             $this->route->setCallback($this->route->getDetail()['response_templates'][$code]);
160 160
             $matcher = null;
161
-            foreach($this->matcher as $instance) if($instance instanceof ArrayMatcher) $matcher = $instance;
162
-            if(is_null($matcher))$matcher = new ArrayMatcher($this);
161
+            foreach ($this->matcher as $instance) if ($instance instanceof ArrayMatcher) $matcher = $instance;
162
+            if (is_null($matcher))$matcher = new ArrayMatcher($this);
163 163
             foreach (call_user_func([$matcher, 'getResolver']) as $match)
164
-                if (is_array($target = call_user_func_array([$matcher, $match], [$this->route->getCallback()]))){
165
-                    call_user_func_array([$matcher, 'setTarget'],[$target]);
164
+                if (is_array($target = call_user_func_array([$matcher, $match], [$this->route->getCallback()]))) {
165
+                    call_user_func_array([$matcher, 'setTarget'], [$target]);
166 166
                     $this->callTarget();
167 167
                     break;
168 168
                 }
Please login to merge, or discard this patch.