Completed
Push — master ( 2d7bce...8d113e )
by Aimeos
08:30
created

JsonadmController::createClient()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 13
rs 9.4285
cc 1
eloc 8
nc 1
nop 3
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 JSON REST API
20
 *
21
 * @package symfony
22
 * @subpackage Controller
23
 */
24
class JsonadmController extends Controller
25
{
26
	/**
27
	 * Deletes the resource object or a list of resource objects
28
	 *
29
	 * @param \Symfony\Component\HttpFoundation\Request $request Request object
30
	 * @param string Resource location, e.g. "product/stock/wareshouse"
31
	 * @param string $site Unique site code
32
	 * @return \Symfony\Component\HttpFoundation\Response Response object containing the generated output
33
	 */
34
	public function deleteAction( Request $request, $resource, $site = 'default' )
35
	{
36
		$status = 500;
37
		$header = $request->headers->all();
38
39
		$client = $this->createClient( $site, $resource, $request->get( 'lang', 'en' ) );
40
		$result = $client->delete( $request->getContent(), $header, $status );
41
42
		return $this->createResponse( $result, $status, $header );
43
	}
44
45
46
	/**
47
	 * Returns the requested resource object or list of resource objects
48
	 *
49
	 * @param \Symfony\Component\HttpFoundation\Request $request Request object
50
	 * @param string Resource location, e.g. "product/stock/wareshouse"
51
	 * @param string $site Unique site code
52
	 * @return \Symfony\Component\HttpFoundation\Response Response object containing the generated output
53
	 */
54
	public function getAction( Request $request, $resource, $site = 'default' )
55
	{
56
		$status = 500;
57
		$header = $request->headers->all();
58
59
		$client = $this->createClient( $site, $resource, $request->get( 'lang', 'en' ) );
60
		$result = $client->get( $request->getContent(), $header, $status );
61
62
		return $this->createResponse( $result, $status, $header );
63
	}
64
65
66
	/**
67
	 * Updates a resource object or a list of resource objects
68
	 *
69
	 * @param \Symfony\Component\HttpFoundation\Request $request Request object
70
	 * @param string Resource location, e.g. "product/stock/wareshouse"
71
	 * @param string $site Unique site code
72
	 * @return \Symfony\Component\HttpFoundation\Response Response object containing the generated output
73
	 */
74
	public function patchAction( Request $request, $resource, $site = 'default' )
75
	{
76
		$status = 500;
77
		$header = $request->headers->all();
78
79
		$client = $this->createClient( $site, $resource, $request->get( 'lang', 'en' ) );
80
		$result = $client->patch( $request->getContent(), $header, $status );
81
82
		return $this->createResponse( $result, $status, $header );
83
	}
84
85
86
	/**
87
	 * Creates a new resource object or a list of resource objects
88
	 *
89
	 * @param \Symfony\Component\HttpFoundation\Request $request Request object
90
	 * @param string Resource location, e.g. "product/stock/wareshouse"
91
	 * @param string $site Unique site code
92
	 * @return \Symfony\Component\HttpFoundation\Response Response object containing the generated output
93
	 */
94
	public function postAction( Request $request, $resource, $site = 'default' )
95
	{
96
		$status = 500;
97
		$header = $request->headers->all();
98
99
		$client = $this->createClient( $site, $resource, $request->get( 'lang', 'en' ) );
100
		$result = $client->post( $request->getContent(), $header, $status );
101
102
		return $this->createResponse( $result, $status, $header );
103
	}
104
105
106
	/**
107
	 * Creates or updates a single resource object
108
	 *
109
	 * @param \Symfony\Component\HttpFoundation\Request $request Request object
110
	 * @param string Resource location, e.g. "product/stock/wareshouse"
111
	 * @param string $site Unique site code
112
	 * @return \Symfony\Component\HttpFoundation\Response Response object containing the generated output
113
	 */
114
	public function putAction( Request $request, $resource, $site = 'default' )
115
	{
116
		$status = 500;
117
		$header = $request->headers->all();
118
119
		$client = $this->createClient( $site, $resource, $request->get( 'lang', 'en' ) );
120
		$result = $client->put( $request->getContent(), $header, $status );
121
122
		return $this->createResponse( $result, $status, $header );
123
	}
124
125
126
	/**
127
	 * Returns the available HTTP verbs and the resource URLs
128
	 *
129
	 * @param \Symfony\Component\HttpFoundation\Request $request Request object
130
	 * @param string Resource location, e.g. "product/stock/wareshouse"
131
	 * @param string $site Unique site code
132
	 * @return \Symfony\Component\HttpFoundation\Response Response object containing the generated output
133
	 */
134
	public function optionsAction( Request $request, $resource = '', $site = 'default' )
135
	{
136
		$status = 500;
137
		$header = $request->headers->all();
138
139
		$client = $this->createClient( $site, $resource, $request->get( 'lang', 'en' ) );
140
		$result = $client->options( $request->getContent(), $header, $status );
141
142
		return $this->createResponse( $result, $status, $header );
143
	}
144
145
146
	/**
147
	 * Returns the resource controller
148
	 *
149
	 * @param string $site Unique site code
150
	 * @param string Resource location, e.g. "product/stock/wareshouse"
151
	 * @param string $lang Language code
152
	 * @return \Aimeos\MShop\Context\Item\Iface Context item
153
	 */
154
	protected function createClient( $site, $resource, $lang )
155
	{
156
		$aimeos = $this->get( 'aimeos' )->get();
157
		$templatePaths = $aimeos->getCustomPaths( 'admin/jsonadm/templates' );
158
159
		$context = $this->get( 'aimeos_context' )->get( false );
160
		$context = $this->setLocale( $context, $site, $lang );
161
162
		$view = $this->get('aimeos_view')->create( $context->getConfig(), $templatePaths, $lang );
163
		$context->setView( $view );
164
165
		return \Aimeos\Admin\JsonAdm\Factory::createClient( $context, $templatePaths, $resource );
166
	}
167
168
169
	/**
170
	 * Creates a new response object
171
	 *
172
	 * @param string $content Body of the HTTP response
173
	 * @param integer $status HTTP status
174
	 * @param array $header List of HTTP headers
175
	 * @return Response HTTP response object
176
	 */
177
	protected function createResponse( $content, $status, array $header )
178
	{
179
		$response = new Response();
180
		$response->setContent( $content );
181
		$response->setStatusCode( $status );
182
183
		foreach( $header as $key => $value ) {
184
			$response->headers->set( $key, $value );
185
		}
186
187
		return $response;
188
	}
189
190
191
	/**
192
	 * Sets the locale item in the given context
193
	 *
194
	 * @param \Aimeos\MShop\Context\Item\Iface $context Context object
195
	 * @param string $site Unique site code
196
	 * @param string $lang ISO language code, e.g. "en" or "en_GB"
197
	 * @return \Aimeos\MShop\Context\Item\Iface Modified context object
198
	 */
199
	protected function setLocale( \Aimeos\MShop\Context\Item\Iface $context, $site, $lang )
200
	{
201
		$localeManager = \Aimeos\MShop\Factory::createManager( $context, 'locale' );
202
203
		try
204
		{
205
			$localeItem = $localeManager->bootstrap( $site, '', '', false );
206
			$localeItem->setLanguageId( null );
207
			$localeItem->setCurrencyId( null );
208
		}
209
		catch( \Aimeos\MShop\Locale\Exception $e )
210
		{
211
			$localeItem = $localeManager->createItem();
212
		}
213
214
		$context->setLocale( $localeItem );
215
		$context->setI18n( $this->get('aimeos_i18n')->get( array( $lang ) ) );
216
217
		return $context;
218
	}
219
}
220