Passed
Push — master ( bfeba0...b198de )
by Aimeos
06:28 queued 03:22
created

Laravel5   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 105
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 36
dl 0
loc 105
rs 10
c 0
b 0
f 0
wmc 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getClientAddress() 0 3 1
A __construct() 0 5 1
A createRequest() 0 19 2
A getFiles() 0 24 4
A getTarget() 0 7 2
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2015-2022
6
 * @package MW
7
 * @subpackage View
8
 */
9
10
11
namespace Aimeos\Base\View\Helper\Request;
12
13
14
/**
15
 * View helper class for retrieving request data.
16
 *
17
 * @package MW
18
 * @subpackage View
19
 */
20
class Laravel5
21
	extends \Aimeos\Base\View\Helper\Request\Standard
22
	implements \Aimeos\Base\View\Helper\Request\Iface
23
{
24
	private $request;
25
26
27
	/**
28
	 * Initializes the request view helper.
29
	 *
30
	 * @param \\Aimeos\Base\View\Iface $view View instance with registered view helpers
0 ignored issues
show
Bug introduced by
The type \Aimeos\Base\View\Iface was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
31
	 * @param \Illuminate\Http\Request $request Laravel request object
32
	 */
33
	public function __construct( \Aimeos\Base\View\Iface $view, \Illuminate\Http\Request $request )
34
	{
35
		$this->request = $request;
36
37
		parent::__construct( $view, $this->createRequest( $request ) );
38
	}
39
40
41
	/**
42
	 * Returns the client IP address.
43
	 *
44
	 * @return string Client IP address
45
	 */
46
	public function getClientAddress() : string
47
	{
48
		return $this->request->ip();
49
	}
50
51
52
	/**
53
	 * Returns the current page or route name
54
	 *
55
	 * @return string|null Current page or route name
56
	 */
57
	public function getTarget() : ?string
58
	{
59
		if( ( $route = $this->request->route() ) !== null ) {
60
			return $route->getName();
61
		}
62
63
		return null;
64
	}
65
66
67
	/**
68
	 * Transforms a Symfony request into a PSR-7 request object
69
	 *
70
	 * @param \Illuminate\Http\Request $nativeRequest Laravel request object
71
	 * @return \Psr\Http\Message\ServerRequestInterface PSR-7 request object
72
	 */
73
	protected function createRequest( \Illuminate\Http\Request $nativeRequest ) : \Psr\Http\Message\ServerRequestInterface
74
	{
75
		$files = $this->getFiles( $nativeRequest->files->all() );
76
		$headers = $nativeRequest->headers->all();
77
		$server = $nativeRequest->server->all();
78
		$method = $nativeRequest->getMethod();
79
		$uri = $nativeRequest->getUri();
80
81
		$request = new \Nyholm\Psr7\ServerRequest( $method, $uri, $headers, $nativeRequest->getContent(), '1.1', $server );
82
		$request = $request->withCookieParams( $nativeRequest->cookies->all() )
83
			->withParsedBody( $nativeRequest->request->all() )
84
			->withQueryParams( $nativeRequest->query->all() )
85
			->withUploadedFiles( $files );
86
87
		foreach( $nativeRequest->attributes->all() as $key => $value ) {
88
			$request = $request->withAttribute( $key, $value );
89
		}
90
91
		return $request;
92
	}
93
94
95
	/**
96
	 * Converts Symfony uploaded files array to the PSR-7 one.
97
	 *
98
	 * @param array $files Multi-dimensional list of uploaded files from Symfony request
99
	 * @return array Multi-dimensional list of uploaded files as PSR-7 objects
100
	 */
101
	protected function getFiles( array $files ) : array
102
	{
103
		$list = [];
104
		$psr17Factory = new \Nyholm\Psr7\Factory\Psr17Factory();
105
106
		foreach( $files as $key => $value )
107
		{
108
			if( $value instanceof \Symfony\Component\HttpFoundation\File\UploadedFile )
109
			{
110
				$list[$key] = $psr17Factory->createUploadedFile(
111
					$psr17Factory->createStreamFromFile( $value->getRealPath() ),
112
					$value->getSize(),
113
					$value->getError(),
114
					$value->getClientOriginalName(),
115
					$value->getClientMimeType()
116
				);
117
			}
118
			elseif( is_array( $value ) )
119
			{
120
				$list[$key] = $this->getFiles( $value );
121
			}
122
		}
123
124
		return $list;
125
	}
126
}
127