Completed
Push — master ( def7d9...4bce11 )
by Aimeos
01:54
created

Jqadm::createAdmin()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 9.536
c 0
b 0
f 0
cc 4
nc 8
nop 4
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2016
6
 * @package Slim
7
 * @subpackage Controller
8
 */
9
10
11
namespace Aimeos\Slim\Controller;
12
13
use Interop\Container\ContainerInterface;
14
use Psr\Http\Message\ServerRequestInterface;
15
use Psr\Http\Message\ResponseInterface;
16
17
18
/**
19
 * Aimeos controller for the JQuery admin interface
20
 *
21
 * @package Slim
22
 * @subpackage Controller
23
 */
24
class Jqadm
25
{
26
	/**
27
	 * Returns the JS file content
28
	 *
29
	 * @param ContainerInterface $container Dependency injection container
30
	 * @param ServerRequestInterface $request Request object
31
	 * @param ResponseInterface $response Response object
32
	 * @param array $args Associative list of route parameters
33
	 * @return ResponseInterface Modified response object with generated output
34
	 */
35
	public static function fileAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
36
	{
37
		$contents = '';
38
		$files = array();
39
		$aimeos = $container->get( 'aimeos' );
40
		$type = ( isset( $args['type'] ) ? $args['type'] : 'js' );
41
42
		foreach( $aimeos->getCustomPaths( 'admin/jqadm' ) as $base => $paths )
43
		{
44
			foreach( $paths as $path )
45
			{
46
				$jsbAbsPath = $base . '/' . $path;
47
				$jsb2 = new \Aimeos\MW\Jsb2\Standard( $jsbAbsPath, dirname( $jsbAbsPath ) );
48
				$files = array_merge( $files, $jsb2->getFiles( $type ) );
49
			}
50
		}
51
52
		foreach( $files as $file )
53
		{
54
			if( ( $content = file_get_contents( $file ) ) !== false ) {
55
				$contents .= $content;
56
			}
57
		}
58
59
		$response->getBody()->write( $contents );
60
61
		if( $type === 'js' ) {
62
			$response = $response->withHeader( 'Content-Type', 'application/javascript' );
63
		} elseif( $type === 'css' ) {
64
			$response = $response->withHeader( 'Content-Type', 'text/css' );
65
		}
66
67
		return $response;
68
	}
69
70
71
	/**
72
	 * Returns the HTML code for a copy of a resource object
73
	 *
74
	 * @param ContainerInterface $container Dependency injection container
75
	 * @param ServerRequestInterface $request Request object
76
	 * @param ResponseInterface $response Response object
77
	 * @param array $args Associative list of route parameters
78
	 * @return ResponseInterface Modified response object with generated output
79
	 */
80 View Code Duplication
	public static function copyAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
81
	{
82
		$cntl = self::createAdmin( $container, $request, $response, $args );
83
84
		if( ( $html = $cntl->copy() ) == '' ) {
85
			return $cntl->getView()->response();
86
		}
87
88
		return self::getHtml( $container, $response, $html );
89
	}
90
91
92
	/**
93
	 * Returns the HTML code for a new resource object
94
	 *
95
	 * @param ContainerInterface $container Dependency injection container
96
	 * @param ServerRequestInterface $request Request object
97
	 * @param ResponseInterface $response Response object
98
	 * @param array $args Associative list of route parameters
99
	 * @return ResponseInterface Modified response object with generated output
100
	 */
101 View Code Duplication
	public static function createAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
102
	{
103
		$cntl = self::createAdmin( $container, $request, $response, $args );
104
105
		if( ( $html = $cntl->create() ) == '' ) {
106
			return $cntl->getView()->response();
107
		}
108
109
		return self::getHtml( $container, $response, $html );
110
	}
111
112
113
	/**
114
	 * Deletes the resource object or a list of resource objects
115
	 *
116
	 * @param ContainerInterface $container Dependency injection container
117
	 * @param ServerRequestInterface $request Request object
118
	 * @param ResponseInterface $response Response object
119
	 * @param array $args Associative list of route parameters
120
	 * @return ResponseInterface Modified response object with generated output
121
	 */
122 View Code Duplication
	public static function deleteAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
123
	{
124
		$cntl = self::createAdmin( $container, $request, $response, $args );
125
126
		if( ( $html = $cntl->delete() ) == '' ) {
127
			return $cntl->getView()->response();
128
		}
129
130
		return self::getHtml( $container, $response, $html );
131
	}
132
133
134
	/**
135
	 * Exports the requested resource object
136
	 *
137
	 * @param ContainerInterface $container Dependency injection container
138
	 * @param ServerRequestInterface $request Request object
139
	 * @param ResponseInterface $response Response object
140
	 * @param array $args Associative list of route parameters
141
	 * @return ResponseInterface Modified response object with generated output
142
	 */
143 View Code Duplication
	public static function exportAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
144
	{
145
		$cntl = self::createAdmin( $container, $request, $response, $args );
146
147
		if( ( $html = $cntl->export() ) == '' ) {
148
			return $cntl->getView()->response();
149
		}
150
151
		return self::getHtml( $container, $response, $html );
152
	}
153
154
155
	/**
156
	 * Returns the HTML code for the requested resource object
157
	 *
158
	 * @param ContainerInterface $container Dependency injection container
159
	 * @param ServerRequestInterface $request Request object
160
	 * @param ResponseInterface $response Response object
161
	 * @param array $args Associative list of route parameters
162
	 * @return ResponseInterface Modified response object with generated output
163
	 */
164 View Code Duplication
	public static function getAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
165
	{
166
		$cntl = self::createAdmin( $container, $request, $response, $args );
167
168
		if( ( $html = $cntl->get() ) == '' ) {
169
			return $cntl->getView()->response();
170
		}
171
172
		return self::getHtml( $container, $response, $html );
173
	}
174
175
176
	/**
177
	 * Saves a new resource object
178
	 *
179
	 * @param ContainerInterface $container Dependency injection container
180
	 * @param ServerRequestInterface $request Request object
181
	 * @param ResponseInterface $response Response object
182
	 * @param array $args Associative list of route parameters
183
	 * @return ResponseInterface Modified response object with generated output
184
	 */
185 View Code Duplication
	public static function saveAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
186
	{
187
		$cntl = self::createAdmin( $container, $request, $response, $args );
188
189
		if( ( $html = $cntl->save() ) == '' ) {
190
			return $cntl->getView()->response();
191
		}
192
193
		return self::getHtml( $container, $response, $html );
194
	}
195
196
197
	/**
198
	 * Returns the HTML code for a list of resource objects
199
	 *
200
	 * @param ContainerInterface $container Dependency injection container
201
	 * @param ServerRequestInterface $request Request object
202
	 * @param ResponseInterface $response Response object
203
	 * @param array $args Associative list of route parameters
204
	 * @return ResponseInterface Modified response object with generated output
205
	 */
206 View Code Duplication
	public static function searchAction( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
207
	{
208
		$cntl = self::createAdmin( $container, $request, $response, $args );
209
210
		if( ( $html = $cntl->search() ) == '' ) {
211
			return $cntl->getView()->response();
212
		}
213
214
		return self::getHtml( $container, $response, $html );
215
	}
216
217
218
	/**
219
	 * Returns the resource controller
220
	 *
221
	 * @param ContainerInterface $container Dependency injection container
222
	 * @param ServerRequestInterface $request Request object
223
	 * @param ResponseInterface $response Response object
224
	 * @param array $args Associative list of route parameters
225
	 * @return \Aimeos\Admin\JQAdm\Iface JQAdm client
226
	 */
227
	protected static function createAdmin( ContainerInterface $container, ServerRequestInterface $request, ResponseInterface $response, array $args )
228
	{
229
		$aimeos = $container->get( 'aimeos' );
230
		$templatePaths = $aimeos->getCustomPaths( 'admin/jqadm/templates' );
231
		$params = $args + (array) $request->getParsedBody() + (array) $request->getQueryParams();
232
233
		$resource = ( isset( $params['resource'] ) ? $params['resource'] : null );
234
		$site = ( isset( $params['site'] ) ? $params['site'] : 'default' );
235
		$lang = ( isset( $params['lang'] ) ? $params['lang'] : 'en' );
236
237
		$context = $container->get( 'aimeos.context' )->get( false, $args, 'backend' );
238
		$context->setI18n( $container->get( 'aimeos.i18n' )->get( array( $lang, 'en' ) ) );
239
		$context->setLocale( $container->get( 'aimeos.locale' )->getBackend( $context, $site ) );
240
241
		$view = $container->get( 'aimeos.view' )->create( $context, $request, $response, $args, $templatePaths, $lang );
242
243
		$view->aimeosType = 'Slim';
244
		$view->aimeosVersion = \Aimeos\Slim\Bootstrap::getVersion();
245
		$view->aimeosExtensions = implode( ',', $aimeos->getExtensions() );
246
247
		$context->setView( $view );
248
249
		return \Aimeos\Admin\JQAdm::create( $context, $aimeos, $resource );
250
	}
251
252
253
	/**
254
	 * Returns the generated HTML code
255
	 *
256
	 * @param ContainerInterface $container Dependency injection container
257
	 * @param ResponseInterface $response Response object
258
	 * @param string $content Content from admin client
259
	 * @return ResponseInterface Modified response object with generated output
260
	 */
261
	protected static function getHtml( ContainerInterface $container, ResponseInterface $response, $content )
262
	{
263
		return $container->get( 'view' )->render( $response, 'Jqadm/index.html.twig', array( 'content' => $content ) );
264
	}
265
}
266