Completed
Push — master ( 8d113e...3b82af )
by Aimeos
02:39
created

JqadmController::fileAction()   C

Complexity

Conditions 7
Paths 27

Size

Total Lines 33
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 33
rs 6.7272
cc 7
eloc 18
nc 27
nop 1
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\Bundle\FrameworkBundle\Controller\Controller;
16
17
18
/**
19
 * Aimeos controller for the JQAdm admin interface
20
 *
21
 * @package symfony
22
 * @subpackage Controller
23
 */
24
class JqadmController extends Controller
25
{
26
	/**
27
	 * Returns the JS file content
28
	 *
29
	 * @param $type File type, i.e. "css" or "js"
30
	 * @return Response Response object
31
	 */
32
	public function fileAction( $type )
33
	{
34
		$contents = '';
35
		$files = array();
36
		$aimeos = $this->get( 'aimeos' )->get();
37
38
		foreach( $aimeos->getCustomPaths( 'admin/jqadm' ) as $base => $paths )
39
		{
40
			foreach( $paths as $path )
41
			{
42
				$jsbAbsPath = $base . '/' . $path;
43
				$jsb2 = new \Aimeos\MW\Jsb2\Standard( $jsbAbsPath, dirname( $jsbAbsPath ) );
44
				$files = array_merge( $files, $jsb2->getFiles( $type ) );
45
			}
46
		}
47
48
		foreach( $files as $file )
49
		{
50
			if( ( $content = file_get_contents( $file ) ) !== false ) {
51
				$contents .= $content;
52
			}
53
		}
54
55
		$response = new Response( $contents );
56
57
		if( $type === 'js' ) {
58
			$response->headers->set( 'Content-Type', 'application/javascript' );
59
		} elseif( $type === 'css' ) {
60
			$response->headers->set( 'Content-Type', 'text/css' );
61
		}
62
63
		return $response;
64
	}
65
66
67
	/**
68
	 * Returns the HTML code for a copy of a resource object
69
	 *
70
	 * @param Request $request Symfony request object
71
	 * @param string $resource Resource location, e.g. "product"
72
	 * @param string $site Unique site code
73
	 * @return Response Generated output
74
	 */
75
	public function copyAction( Request $request, $resource, $site = 'default' )
76
	{
77
		$cntl = $this->createClient( $request, $site, $resource );
78
		return $this->getHtml( $cntl->copy() );
79
	}
80
81
82
	/**
83
	 * Returns the HTML code for a new resource object
84
	 *
85
	 * @param Request $request Symfony request object
86
	 * @param string $resource Resource location, e.g. "product"
87
	 * @param string $site Unique site code
88
	 * @return Response Generated output
89
	 */
90
	public function createAction( Request $request, $resource, $site = 'default' )
91
	{
92
		$cntl = $this->createClient( $request, $site, $resource );
93
		return $this->getHtml( $cntl->create() );
94
	}
95
96
97
	/**
98
	 * Deletes the resource object or a list of resource objects
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 deleteAction( Request $request, $resource, $site = 'default' )
106
	{
107
		$cntl = $this->createClient( $request, $site, $resource );
108
		return $this->getHtml( $cntl->delete() . $cntl->search() );
109
	}
110
111
112
	/**
113
	 * Returns the HTML code for the requested resource object
114
	 *
115
	 * @param Request $request Symfony request object
116
	 * @param string $resource Resource location, e.g. "product"
117
	 * @param string $site Unique site code
118
	 * @return Response Generated output
119
	 */
120
	public function getAction( Request $request, $resource, $site = 'default' )
121
	{
122
		$cntl = $this->createClient( $request, $site, $resource );
123
		return $this->getHtml( $cntl->get() );
124
	}
125
126
127
	/**
128
	 * Saves a new resource object
129
	 *
130
	 * @param Request $request Symfony request object
131
	 * @param string $resource Resource location, e.g. "product"
132
	 * @param string $site Unique site code
133
	 * @return Response Generated output
134
	 */
135
	public function saveAction( Request $request, $resource, $site = 'default' )
136
	{
137
		$cntl = $this->createClient( $request, $site, $resource );
138
		return $this->getHtml( ( $cntl->save() ? : $cntl->search() ) );
139
	}
140
141
142
	/**
143
	 * Returns the HTML code for a list of resource objects
144
	 *
145
	 * @param Request $request Symfony request object
146
	 * @param string $resource Resource location, e.g. "product"
147
	 * @param string $site Unique site code
148
	 * @return Response Generated output
149
	 */
150
	public function searchAction( Request $request, $resource, $site = 'default' )
151
	{
152
		$cntl = $this->createClient( $request, $site, $resource );
153
		return $this->getHtml( $cntl->search() );
154
	}
155
156
157
	/**
158
	 * Returns the resource controller
159
	 *
160
	 * @param Request $request Symfony request object
161
	 * @param string $site Unique site code
162
	 * @param string $resource Resource location, e.g. "product"
163
	 * @return \Aimeos\Admin\JQAdm\Iface Context item
164
	 */
165
	protected function createClient( Request $request, $site, $resource )
166
	{
167
		$lang = $request->get( 'lang', 'en' );
168
169
		$aimeos = $this->get( 'aimeos' )->get();
170
		$templatePaths = $aimeos->getCustomPaths( 'admin/jqadm/templates' );
171
172
		$context = $this->get( 'aimeos_context' )->get( false );
173
		$context = $this->setLocale( $context, $site, $lang );
174
175
		$view = $this->get( 'aimeos_view' )->create( $context->getConfig(), $templatePaths, $lang );
176
		$context->setView( $view );
177
178
		return \Aimeos\Admin\JQAdm\Factory::createClient( $context, $templatePaths, $resource );
179
	}
180
181
182
	/**
183
	 * Returns the generated HTML code
184
	 *
185
	 * @param string $content Content from admin client
186
	 * @return Response View for rendering the output
187
	 */
188
	protected function getHtml( $content )
189
	{
190
		$version = $this->get( 'aimeos' )->getVersion();
191
		$content = str_replace( array( '{type}', '{version}' ), array( 'Symfony', $version ), $content );
192
193
		return $this->render( 'AimeosShopBundle:Jqadm:index.html.twig', array( 'content' => $content ) );
194
	}
195
196
197
	/**
198
	 * Sets the locale item in the given context
199
	 *
200
	 * @param \Aimeos\MShop\Context\Item\Iface $context Context object
201
	 * @param string $site Unique site code
202
	 * @param string $lang ISO language code, e.g. "en" or "en_GB"
203
	 * @return \Aimeos\MShop\Context\Item\Iface Modified context object
204
	 */
205
	protected function setLocale( \Aimeos\MShop\Context\Item\Iface $context, $site, $lang )
206
	{
207
		$localeManager = \Aimeos\MShop\Factory::createManager( $context, 'locale' );
208
209
		try
210
		{
211
			$localeItem = $localeManager->bootstrap( $site, '', '', false );
212
			$localeItem->setLanguageId( null );
213
			$localeItem->setCurrencyId( null );
214
		}
215
		catch( \Aimeos\MShop\Locale\Exception $e )
216
		{
217
			$localeItem = $localeManager->createItem();
218
		}
219
220
		$context->setLocale( $localeItem );
221
		$context->setI18n( $this->get( 'aimeos_i18n' )->get( array( $lang, 'en' ) ) );
222
223
		return $context;
224
	}
225
}
226