Passed
Push — master ( cdbf03...0df18a )
by Aimeos
04:18
created

JqadmController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @license MIT, http://opensource.org/licenses/MIT
5
 * @copyright Aimeos (aimeos.org), 2015-2016
6
 * @package symfony
7
 * @subpackage Controller
8
 */
9
10
11
namespace Aimeos\ShopBundle\Controller;
12
13
use Symfony\Component\HttpFoundation\Request;
14
use Symfony\Component\HttpFoundation\Response;
15
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
16
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
17
18
19
/**
20
 * Aimeos controller for the JQAdm admin interface
21
 *
22
 * @package symfony
23
 * @subpackage Controller
24
 */
25
class JqadmController extends AbstractController
26
{
27
	private $twig;
28
29
30
	public function __construct( \Twig\Environment $twig )
31
	{
32
		$this->twig = $twig;
33
	}
34
35
36
	/**
37
	 * Returns the JS file content
38
	 *
39
	 * @param $type File type, i.e. "css" or "js"
0 ignored issues
show
Bug introduced by
The type Aimeos\ShopBundle\Controller\File 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...
40
	 * @return Response Response object
41
	 */
42
	public function fileAction( $type ) : Response
43
	{
44
		$contents = '';
45
		$files = array();
46
		$aimeos = $this->container->get( 'aimeos' )->get();
47
48
		foreach( $aimeos->getCustomPaths( 'admin/jqadm' ) as $base => $paths )
49
		{
50
			foreach( $paths as $path )
51
			{
52
				$jsbAbsPath = $base . '/' . $path;
53
				$jsb2 = new \Aimeos\MW\Jsb2\Standard( $jsbAbsPath, dirname( $jsbAbsPath ) );
54
				$files = array_merge( $files, $jsb2->getFiles( $type ) );
55
			}
56
		}
57
58
		foreach( $files as $file )
59
		{
60
			if( ( $content = file_get_contents( $file ) ) !== false ) {
61
				$contents .= $content;
62
			}
63
		}
64
65
		$response = new Response( $contents );
66
67
		if( $type === 'js' ) {
68
			$response->headers->set( 'Content-Type', 'application/javascript' );
69
		} elseif( $type === 'css' ) {
70
			$response->headers->set( 'Content-Type', 'text/css' );
71
		}
72
73
		return $response;
74
	}
75
76
77
	/**
78
	 * Returns the HTML code for a batch of a resource object
79
	 *
80
	 * @param Request $request Symfony request object
81
	 * @param string $resource Resource location, e.g. "product"
82
	 * @param string $site Unique site code
83
	 * @return Response Generated output
84
	 */
85
	public function batchAction( Request $request, $resource, $site = 'default' ) : Response
86
	{
87
		$cntl = $this->createAdmin( $request, $site, $resource );
88
89
		if( ( $html = $cntl->batch() ) == '' ) {
90
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
0 ignored issues
show
Bug introduced by
The method getView() does not exist on Aimeos\Admin\JQAdm\Iface. It seems like you code against a sub-type of said class. However, the method does not exist in Aimeos\Admin\JQAdm\Common\Admin\Factory\Iface or Aimeos\Admin\JQAdm\Common\Decorator\Iface. Are you sure you never get one of those? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

90
			return ( new HttpFoundationFactory() )->createResponse( $cntl->/** @scrutinizer ignore-call */ getView()->response() );
Loading history...
91
		}
92
93
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
94
	}
95
96
97
	/**
98
	 * Returns the HTML code for a copy of a resource object
99
	 *
100
	 * @param Request $request Symfony request object
101
	 * @param string $resource Resource location, e.g. "product"
102
	 * @param string $site Unique site code
103
	 * @return Response Generated output
104
	 */
105
	public function copyAction( Request $request, $resource, $site = 'default' ) : Response
106
	{
107
		$cntl = $this->createAdmin( $request, $site, $resource );
108
109
		if( ( $html = $cntl->copy() ) == '' ) {
110
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
111
		}
112
113
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
114
	}
115
116
117
	/**
118
	 * Returns the HTML code for a new resource object
119
	 *
120
	 * @param Request $request Symfony request object
121
	 * @param string $resource Resource location, e.g. "product"
122
	 * @param string $site Unique site code
123
	 * @return Response Generated output
124
	 */
125
	public function createAction( Request $request, $resource, $site = 'default' ) : Response
126
	{
127
		$cntl = $this->createAdmin( $request, $site, $resource );
128
129
		if( ( $html = $cntl->create() ) == '' ) {
130
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
131
		}
132
133
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
134
	}
135
136
137
	/**
138
	 * Deletes the resource object or a list of resource objects
139
	 *
140
	 * @param Request $request Symfony request object
141
	 * @param string $resource Resource location, e.g. "product"
142
	 * @param string $site Unique site code
143
	 * @return Response Generated output
144
	 */
145
	public function deleteAction( Request $request, $resource, $site = 'default' ) : Response
146
	{
147
		$cntl = $this->createAdmin( $request, $site, $resource );
148
149
		if( ( $html = $cntl->delete() ) == '' ) {
150
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
151
		}
152
153
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
154
	}
155
156
157
	/**
158
	 * Exports the requested resource object
159
	 *
160
	 * @param Request $request Symfony request object
161
	 * @param string $resource Resource location, e.g. "product"
162
	 * @param string $site Unique site code
163
	 * @return Response Generated output
164
	 */
165
	public function exportAction( Request $request, $resource, $site = 'default' ) : Response
166
	{
167
		$cntl = $this->createAdmin( $request, $site, $resource );
168
169
		if( ( $html = $cntl->export() ) == '' ) {
170
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
171
		}
172
173
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
174
	}
175
176
177
	/**
178
	 * Returns the HTML code for the requested resource object
179
	 *
180
	 * @param Request $request Symfony request object
181
	 * @param string $resource Resource location, e.g. "product"
182
	 * @param string $site Unique site code
183
	 * @return Response Generated output
184
	 */
185
	public function getAction( Request $request, $resource, $site = 'default' ) : Response
186
	{
187
		$cntl = $this->createAdmin( $request, $site, $resource );
188
189
		if( ( $html = $cntl->get() ) == '' ) {
190
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
191
		}
192
193
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
194
	}
195
196
197
	/**
198
	 * Saves a new resource object
199
	 *
200
	 * @param Request $request Symfony request object
201
	 * @param string $resource Resource location, e.g. "product"
202
	 * @param string $site Unique site code
203
	 * @return Response Generated output
204
	 */
205
	public function saveAction( Request $request, $resource, $site = 'default' ) : Response
206
	{
207
		$cntl = $this->createAdmin( $request, $site, $resource );
208
209
		if( ( $html = $cntl->save() ) == '' ) {
210
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
211
		}
212
213
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
214
	}
215
216
217
	/**
218
	 * Returns the HTML code for a list of resource objects
219
	 *
220
	 * @param Request $request Symfony request object
221
	 * @param string $resource Resource location, e.g. "product"
222
	 * @param string $site Unique site code
223
	 * @return Response Generated output
224
	 */
225
	public function searchAction( Request $request, $resource, $site = 'default' ) : Response
226
	{
227
		$cntl = $this->createAdmin( $request, $site, $resource );
228
229
		if( ( $html = $cntl->search() ) == '' ) {
230
			return ( new HttpFoundationFactory() )->createResponse( $cntl->getView()->response() );
231
		}
232
233
		return $this->getHtml( $html, $request->get( 'locale', 'en' ) );
234
	}
235
236
237
	/**
238
	 * Returns the resource controller
239
	 *
240
	 * @param Request $request Symfony request object
241
	 * @param string $site Unique site code
242
	 * @param string $resource Resource location, e.g. "product"
243
	 * @return \Aimeos\Admin\JQAdm\Iface Context item
244
	 */
245
	protected function createAdmin( Request $request, $site, $resource ) : \Aimeos\Admin\JQAdm\Iface
246
	{
247
		$lang = $request->get( 'locale', 'en' );
248
249
		$aimeos = $this->container->get( 'aimeos' )->get();
250
		$templatePaths = $aimeos->getTemplatePaths( 'admin/jqadm/templates' );
251
252
		$context = $this->container->get( 'aimeos.context' )->get( false, 'backend' );
253
		$context->setI18n( $this->container->get( 'aimeos.i18n' )->get( array( $lang, 'en' ) ) );
254
		$context->setLocale( $this->container->get( 'aimeos.locale' )->getBackend( $context, $site ) );
255
256
		$view = $this->container->get( 'aimeos.view' )->create( $context, $templatePaths, $lang );
257
258
		$view->aimeosType = 'Symfony';
259
		$view->aimeosVersion = $this->container->get( 'aimeos' )->getVersion();
260
		$view->aimeosExtensions = implode( ',', $aimeos->getExtensions() );
261
262
		$context->setView( $view );
263
264
		return \Aimeos\Admin\JQAdm::create( $context, $aimeos, $resource );
265
	}
266
267
268
	/**
269
	 * Returns the generated HTML code
270
	 *
271
	 * @param string $content Content from admin client
272
	 * @return Response View for rendering the output
273
	 */
274
	protected function getHtml( $content, $lang ) : Response
275
	{
276
		return new Response( $this->twig->render( '@AimeosShop/Jqadm/index.html.twig', [
277
			'content' => $content,
278
			'locale' => $lang,
279
			'localeDir' => in_array( $lang, ['ar', 'az', 'dv', 'fa', 'he', 'ku', 'ur'] ) ? 'rtl' : 'ltr',
280
			'theme' => ( $_COOKIE['aimeos_backend_theme'] ?? '' ) == 'dark' ? 'dark' : 'light'
281
		] ) );
282
	}
283
}
284