1 | <?php |
||||||
2 | |||||||
3 | /** |
||||||
4 | * @license MIT, http://opensource.org/licenses/MIT |
||||||
5 | * @copyright Aimeos (aimeos.org), 2015-2023 |
||||||
6 | */ |
||||||
7 | |||||||
8 | namespace Aimeos\Shop\Base; |
||||||
9 | |||||||
10 | |||||||
11 | use Illuminate\Support\Facades\Route; |
||||||
12 | use Illuminate\Support\Facades\Request; |
||||||
13 | use Illuminate\Support\Facades\Response; |
||||||
14 | |||||||
15 | |||||||
16 | /** |
||||||
17 | * Service providing the view objects |
||||||
18 | */ |
||||||
19 | class View |
||||||
20 | { |
||||||
21 | /** |
||||||
22 | * @var \Illuminate\Contracts\Config\Repository |
||||||
23 | */ |
||||||
24 | private $config; |
||||||
25 | |||||||
26 | /** |
||||||
27 | * @var \Aimeos\Shop\Base\I18n |
||||||
28 | */ |
||||||
29 | private $i18n; |
||||||
30 | |||||||
31 | /** |
||||||
32 | * @var \Aimeos\Shop\Base\Support |
||||||
33 | */ |
||||||
34 | private $support; |
||||||
35 | |||||||
36 | |||||||
37 | /** |
||||||
38 | * Initializes the object |
||||||
39 | * |
||||||
40 | * @param \Illuminate\Contracts\Config\Repository $config Configuration object |
||||||
41 | * @param \Aimeos\Shop\Base\I18n $i18n I18n object |
||||||
42 | * @param \Aimeos\Shop\Base\Support $support Support object |
||||||
43 | */ |
||||||
44 | public function __construct( \Illuminate\Contracts\Config\Repository $config, |
||||||
45 | \Aimeos\Shop\Base\I18n $i18n, \Aimeos\Shop\Base\Support $support ) |
||||||
46 | { |
||||||
47 | $this->i18n = $i18n; |
||||||
48 | $this->config = $config; |
||||||
49 | $this->support = $support; |
||||||
50 | } |
||||||
51 | |||||||
52 | |||||||
53 | /** |
||||||
54 | * Creates the view object for the HTML client. |
||||||
55 | * |
||||||
56 | * @param \Aimeos\MShop\ContextIface $context Context object |
||||||
57 | * @param array $templatePaths List of base path names with relative template paths as key/value pairs |
||||||
58 | * @param string|null $locale Code of the current language or null for no translation |
||||||
59 | * @return \Aimeos\Base\View\Iface View object |
||||||
60 | */ |
||||||
61 | public function create( \Aimeos\MShop\ContextIface $context, array $templatePaths, |
||||||
62 | string $locale = null ) : \Aimeos\Base\View\Iface |
||||||
63 | { |
||||||
64 | $engine = new \Aimeos\Base\View\Engine\Blade( app( 'Illuminate\Contracts\View\Factory' ) ); |
||||||
65 | $view = new \Aimeos\Base\View\Standard( $templatePaths, array( '.blade.php' => $engine ) ); |
||||||
66 | |||||||
67 | $config = $context->config(); |
||||||
68 | $session = $context->session(); |
||||||
69 | |||||||
70 | $this->addCsrf( $view ); |
||||||
71 | $this->addAccess( $view, $context ); |
||||||
72 | $this->addConfig( $view, $config ); |
||||||
73 | $this->addNumber( $view, $config, $locale ); |
||||||
74 | $this->addParam( $view ); |
||||||
75 | $this->addRequest( $view ); |
||||||
76 | $this->addResponse( $view ); |
||||||
77 | $this->addSession( $view, $session ); |
||||||
78 | $this->addTranslate( $view, $locale ); |
||||||
79 | $this->addUrl( $view ); |
||||||
80 | |||||||
81 | return $view; |
||||||
82 | } |
||||||
83 | |||||||
84 | |||||||
85 | /** |
||||||
86 | * Adds the "access" helper to the view object |
||||||
87 | * |
||||||
88 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
89 | * @param \Aimeos\MShop\ContextIface $context Context object |
||||||
90 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
91 | */ |
||||||
92 | protected function addAccess( \Aimeos\Base\View\Iface $view, \Aimeos\MShop\ContextIface $context ) : \Aimeos\Base\View\Iface |
||||||
93 | { |
||||||
94 | if( $this->config->get( 'shop.accessControl', true ) === false |
||||||
95 | || ( ( $user = \Illuminate\Support\Facades\Auth::user() ) !== null && $user->superuser ) |
||||||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||||
96 | ) { |
||||||
97 | $helper = new \Aimeos\Base\View\Helper\Access\All( $view ); |
||||||
98 | } |
||||||
99 | else |
||||||
100 | { |
||||||
101 | $helper = new \Aimeos\Base\View\Helper\Access\Standard( $view, function() use ( $context ) { |
||||||
102 | return $context->groups(); |
||||||
103 | } ); |
||||||
104 | } |
||||||
105 | |||||||
106 | $view->addHelper( 'access', $helper ); |
||||||
107 | |||||||
108 | return $view; |
||||||
109 | } |
||||||
110 | |||||||
111 | |||||||
112 | /** |
||||||
113 | * Adds the "config" helper to the view object |
||||||
114 | * |
||||||
115 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
116 | * @param \Aimeos\Base\Config\Iface $config Configuration object |
||||||
117 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
118 | */ |
||||||
119 | protected function addConfig( \Aimeos\Base\View\Iface $view, \Aimeos\Base\Config\Iface $config ) : \Aimeos\Base\View\Iface |
||||||
120 | { |
||||||
121 | $config = new \Aimeos\Base\Config\Decorator\Protect( clone $config, ['resource/*/baseurl'], ['resource'] ); |
||||||
122 | $helper = new \Aimeos\Base\View\Helper\Config\Standard( $view, $config ); |
||||||
123 | $view->addHelper( 'config', $helper ); |
||||||
124 | |||||||
125 | return $view; |
||||||
126 | } |
||||||
127 | |||||||
128 | |||||||
129 | /** |
||||||
130 | * Adds the "access" helper to the view object |
||||||
131 | * |
||||||
132 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
133 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
134 | */ |
||||||
135 | protected function addCsrf( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface |
||||||
136 | { |
||||||
137 | $helper = new \Aimeos\Base\View\Helper\Csrf\Standard( $view, '_token', csrf_token() ); |
||||||
138 | $view->addHelper( 'csrf', $helper ); |
||||||
139 | |||||||
140 | return $view; |
||||||
141 | } |
||||||
142 | |||||||
143 | |||||||
144 | /** |
||||||
145 | * Adds the "number" helper to the view object |
||||||
146 | * |
||||||
147 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
148 | * @param \Aimeos\Base\Config\Iface $config Configuration object |
||||||
149 | * @param string|null $locale Code of the current language or null for no translation |
||||||
150 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
151 | */ |
||||||
152 | protected function addNumber( \Aimeos\Base\View\Iface $view, \Aimeos\Base\Config\Iface $config, |
||||||
153 | string $locale = null ) : \Aimeos\Base\View\Iface |
||||||
154 | { |
||||||
155 | if( config( 'shop.num_formatter', 'Locale' ) === 'Locale' ) |
||||||
0 ignored issues
–
show
The call to
config() has too many arguments starting with 'Locale' .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.
Loading history...
'shop.num_formatter' of type string is incompatible with the type array expected by parameter $options of config() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
156 | { |
||||||
157 | $pattern = $config->get( 'client/html/common/format/pattern' ); |
||||||
158 | $helper = new \Aimeos\Base\View\Helper\Number\Locale( $view, $locale, $pattern ); |
||||||
159 | } |
||||||
160 | else |
||||||
161 | { |
||||||
162 | $sep1000 = $config->get( 'client/html/common/format/separator1000', '' ); |
||||||
163 | $decsep = $config->get( 'client/html/common/format/separatorDecimal', '.' ); |
||||||
164 | $helper = new \Aimeos\Base\View\Helper\Number\Standard( $view, $decsep, $sep1000 ); |
||||||
165 | } |
||||||
166 | |||||||
167 | return $view->addHelper( 'number', $helper ); |
||||||
168 | } |
||||||
169 | |||||||
170 | |||||||
171 | /** |
||||||
172 | * Adds the "param" helper to the view object |
||||||
173 | * |
||||||
174 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
175 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
176 | */ |
||||||
177 | protected function addParam( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface |
||||||
178 | { |
||||||
179 | $params = ( Route::current() ? Route::current()->parameters() : array() ) + Request::all(); |
||||||
180 | $helper = new \Aimeos\Base\View\Helper\Param\Standard( $view, $params ); |
||||||
181 | $view->addHelper( 'param', $helper ); |
||||||
182 | |||||||
183 | return $view; |
||||||
184 | } |
||||||
185 | |||||||
186 | |||||||
187 | /** |
||||||
188 | * Adds the "request" helper to the view object |
||||||
189 | * |
||||||
190 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
191 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
192 | */ |
||||||
193 | protected function addRequest( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface |
||||||
194 | { |
||||||
195 | $helper = new \Aimeos\Base\View\Helper\Request\Laravel( $view, Request::instance() ); |
||||||
196 | $view->addHelper( 'request', $helper ); |
||||||
197 | |||||||
198 | return $view; |
||||||
199 | } |
||||||
200 | |||||||
201 | |||||||
202 | /** |
||||||
203 | * Adds the "response" helper to the view object |
||||||
204 | * |
||||||
205 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
206 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
207 | */ |
||||||
208 | protected function addResponse( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface |
||||||
209 | { |
||||||
210 | $helper = new \Aimeos\Base\View\Helper\Response\Laravel( $view ); |
||||||
211 | $view->addHelper( 'response', $helper ); |
||||||
212 | |||||||
213 | return $view; |
||||||
214 | } |
||||||
215 | |||||||
216 | |||||||
217 | /** |
||||||
218 | * Adds the "session" helper to the view object |
||||||
219 | * |
||||||
220 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
221 | * @param \Aimeos\Base\Session\Iface $session Session object |
||||||
222 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
223 | */ |
||||||
224 | protected function addSession( \Aimeos\Base\View\Iface $view, \Aimeos\Base\Session\Iface $session ) : \Aimeos\Base\View\Iface |
||||||
225 | { |
||||||
226 | $helper = new \Aimeos\Base\View\Helper\Session\Standard( $view, $session ); |
||||||
227 | $view->addHelper( 'session', $helper ); |
||||||
228 | |||||||
229 | return $view; |
||||||
230 | } |
||||||
231 | |||||||
232 | |||||||
233 | /** |
||||||
234 | * Adds the "translate" helper to the view object |
||||||
235 | * |
||||||
236 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
237 | * @param string|null $locale ISO language code, e.g. "de" or "de_CH" |
||||||
238 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
239 | */ |
||||||
240 | protected function addTranslate( \Aimeos\Base\View\Iface $view, string $locale = null ) : \Aimeos\Base\View\Iface |
||||||
241 | { |
||||||
242 | if( $locale !== null ) |
||||||
243 | { |
||||||
244 | $i18n = $this->i18n->get( array( $locale ) ); |
||||||
245 | $translation = $i18n[$locale]; |
||||||
246 | } |
||||||
247 | else |
||||||
248 | { |
||||||
249 | $translation = new \Aimeos\Base\Translation\None( 'en' ); |
||||||
250 | } |
||||||
251 | |||||||
252 | $helper = new \Aimeos\Base\View\Helper\Translate\Standard( $view, $translation ); |
||||||
253 | $view->addHelper( 'translate', $helper ); |
||||||
254 | |||||||
255 | return $view; |
||||||
256 | } |
||||||
257 | |||||||
258 | |||||||
259 | /** |
||||||
260 | * Adds the "url" helper to the view object |
||||||
261 | * |
||||||
262 | * @param \Aimeos\Base\View\Iface $view View object |
||||||
263 | * @return \Aimeos\Base\View\Iface Modified view object |
||||||
264 | */ |
||||||
265 | protected function addUrl( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface |
||||||
266 | { |
||||||
267 | $fixed = [ |
||||||
268 | 'site' => env( 'SHOP_MULTISHOP' ) ? config( 'shop.mshop.locale.site', 'default' ) : '', |
||||||
0 ignored issues
–
show
'shop.mshop.locale.site' of type string is incompatible with the type array expected by parameter $options of config() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
The call to
config() has too many arguments starting with 'default' .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.
Loading history...
|
|||||||
269 | 'locale' => env( 'SHOP_MULTILOCALE' ) ? app()->getLocale() : '', |
||||||
270 | 'currency' => '' |
||||||
271 | ]; |
||||||
272 | |||||||
273 | if( Route::current() ) |
||||||
274 | { |
||||||
275 | $fixed['site'] = Request::route( 'site', $fixed['site'] ); |
||||||
276 | $fixed['locale'] = Request::route( 'locale', $fixed['locale'] ); |
||||||
277 | $fixed['currency'] = Request::route( 'currency', $fixed['currency'] ); |
||||||
278 | } |
||||||
279 | |||||||
280 | $fixed['site'] = Request::input( 'site', $fixed['site'] ); |
||||||
281 | $fixed['locale'] = Request::input( 'locale', $fixed['locale'] ); |
||||||
282 | $fixed['currency'] = Request::input( 'currency', $fixed['currency'] ); |
||||||
283 | |||||||
284 | $helper = new \Aimeos\Base\View\Helper\Url\Laravel( $view, app( 'url' ), array_filter( $fixed ) ); |
||||||
285 | $view->addHelper( 'url', $helper ); |
||||||
286 | |||||||
287 | return $view; |
||||||
288 | } |
||||||
289 | } |