1 | <?php |
||||
2 | |||||
3 | /* Divine CMS - Open source CMS for widespread use. |
||||
4 | Copyright (c) 2019 Mykola Burakov ([email protected]) |
||||
5 | |||||
6 | See SOURCE.txt for other and additional information. |
||||
7 | |||||
8 | This file is part of Divine CMS. |
||||
9 | |||||
10 | This program is free software: you can redistribute it and/or modify |
||||
11 | it under the terms of the GNU General Public License as published by |
||||
12 | the Free Software Foundation, either version 3 of the License, or |
||||
13 | (at your option) any later version. |
||||
14 | |||||
15 | This program is distributed in the hope that it will be useful, |
||||
16 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
18 | GNU General Public License for more details. |
||||
19 | |||||
20 | You should have received a copy of the GNU General Public License |
||||
21 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
||||
22 | |||||
23 | class ControllerCheckoutConfirm extends \Divine\Engine\Core\Controller |
||||
0 ignored issues
–
show
|
|||||
24 | { |
||||
25 | public function index() |
||||
0 ignored issues
–
show
|
|||||
26 | { |
||||
27 | $redirect = ''; |
||||
28 | |||||
29 | if ($this->cart->hasShipping()) { |
||||
30 | // Validate if shipping address has been set. |
||||
31 | if (!isset($this->session->data['shipping_address'])) { |
||||
32 | $redirect = $this->url->link('checkout/checkout', '', true); |
||||
33 | } |
||||
34 | |||||
35 | // Validate if shipping method has been set. |
||||
36 | if (!isset($this->session->data['shipping_method'])) { |
||||
37 | $redirect = $this->url->link('checkout/checkout', '', true); |
||||
38 | } |
||||
39 | } else { |
||||
40 | unset($this->session->data['shipping_address']); |
||||
41 | unset($this->session->data['shipping_method']); |
||||
42 | unset($this->session->data['shipping_methods']); |
||||
43 | } |
||||
44 | |||||
45 | // Validate if payment address has been set. |
||||
46 | if (!isset($this->session->data['payment_address'])) { |
||||
47 | $redirect = $this->url->link('checkout/checkout', '', true); |
||||
48 | } |
||||
49 | |||||
50 | // Validate if payment method has been set. |
||||
51 | if (!isset($this->session->data['payment_method'])) { |
||||
52 | $redirect = $this->url->link('checkout/checkout', '', true); |
||||
53 | } |
||||
54 | |||||
55 | // Validate cart has products and has stock. |
||||
56 | if ((!$this->cart->hasProducts()) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) { |
||||
57 | $redirect = $this->url->link('checkout/cart'); |
||||
58 | } |
||||
59 | |||||
60 | // Validate minimum quantity requirements. |
||||
61 | $products = $this->cart->getProducts(); |
||||
62 | |||||
63 | foreach ($products as $product) { |
||||
64 | $product_total = 0; |
||||
65 | |||||
66 | foreach ($products as $product_2) { |
||||
67 | if ($product_2['product_id'] == $product['product_id']) { |
||||
68 | $product_total += $product_2['quantity']; |
||||
69 | } |
||||
70 | } |
||||
71 | |||||
72 | if ($product['minimum'] > $product_total) { |
||||
73 | $redirect = $this->url->link('checkout/cart'); |
||||
74 | |||||
75 | break; |
||||
76 | } |
||||
77 | } |
||||
78 | |||||
79 | if (!$redirect) { |
||||
80 | $order_data = array(); |
||||
81 | |||||
82 | $totals = array(); |
||||
83 | $total = 0; |
||||
84 | |||||
85 | // Because __call can not keep var references so we put them into an array. |
||||
86 | $total_data = array( |
||||
87 | 'totals' => &$totals, |
||||
88 | 'total' => &$total |
||||
89 | ); |
||||
90 | |||||
91 | $this->load->model('extension/extension'); |
||||
92 | |||||
93 | $sort_order = array(); |
||||
94 | |||||
95 | $results = $this->model_extension_extension->getExtensions('total'); |
||||
96 | |||||
97 | foreach ($results as $key => $value) { |
||||
98 | $sort_order[$key] = $this->config->get($value['code'] . '_sort_order'); |
||||
99 | } |
||||
100 | |||||
101 | array_multisort($sort_order, SORT_ASC, $results); |
||||
102 | |||||
103 | foreach ($results as $result) { |
||||
104 | if ($this->config->get($result['code'] . '_status')) { |
||||
105 | $this->load->model('extension/total/' . $result['code']); |
||||
106 | |||||
107 | // We have to put the totals in an array so that they pass by reference. |
||||
108 | $this->{'model_extension_total_' . $result['code']}->getTotal($total_data); |
||||
109 | } |
||||
110 | } |
||||
111 | |||||
112 | $sort_order = array(); |
||||
113 | |||||
114 | foreach ($totals as $key => $value) { |
||||
115 | $sort_order[$key] = $value['sort_order']; |
||||
116 | } |
||||
117 | |||||
118 | array_multisort($sort_order, SORT_ASC, $totals); |
||||
119 | |||||
120 | $order_data['totals'] = $totals; |
||||
121 | |||||
122 | $this->load->language('checkout/checkout'); |
||||
123 | |||||
124 | $order_data['invoice_prefix'] = $this->config->get('config_invoice_prefix'); |
||||
125 | $order_data['store_name'] = $this->config->get('config_name'); |
||||
126 | |||||
127 | $order_data['store_url'] = '/'; |
||||
128 | |||||
129 | if ($this->customer->isLogged()) { |
||||
130 | $this->load->model('account/customer'); |
||||
131 | |||||
132 | $customer_info = $this->model_account_customer->getCustomer($this->customer->getId()); |
||||
133 | |||||
134 | $order_data['customer_id'] = $this->customer->getId(); |
||||
135 | $order_data['customer_group_id'] = $customer_info['customer_group_id']; |
||||
136 | $order_data['firstname'] = $customer_info['firstname']; |
||||
137 | $order_data['lastname'] = $customer_info['lastname']; |
||||
138 | $order_data['email'] = $customer_info['email']; |
||||
139 | $order_data['telephone'] = $customer_info['telephone']; |
||||
140 | $order_data['fax'] = $customer_info['fax']; |
||||
141 | $order_data['custom_field'] = json_decode($customer_info['custom_field'], true); |
||||
142 | } elseif (isset($this->session->data['guest'])) { |
||||
143 | $order_data['customer_id'] = 0; |
||||
144 | $order_data['customer_group_id'] = $this->session->data['guest']['customer_group_id']; |
||||
145 | $order_data['firstname'] = $this->session->data['guest']['firstname']; |
||||
146 | $order_data['lastname'] = $this->session->data['guest']['lastname']; |
||||
147 | $order_data['email'] = $this->session->data['guest']['email']; |
||||
148 | $order_data['telephone'] = $this->session->data['guest']['telephone']; |
||||
149 | $order_data['fax'] = $this->session->data['guest']['fax']; |
||||
150 | $order_data['custom_field'] = $this->session->data['guest']['custom_field']; |
||||
151 | } |
||||
152 | |||||
153 | $order_data['payment_firstname'] = $this->session->data['payment_address']['firstname']; |
||||
154 | $order_data['payment_lastname'] = $this->session->data['payment_address']['lastname']; |
||||
155 | $order_data['payment_company'] = $this->session->data['payment_address']['company']; |
||||
156 | $order_data['payment_address_1'] = $this->session->data['payment_address']['address_1']; |
||||
157 | $order_data['payment_address_2'] = $this->session->data['payment_address']['address_2']; |
||||
158 | $order_data['payment_city'] = $this->session->data['payment_address']['city']; |
||||
159 | $order_data['payment_postcode'] = $this->session->data['payment_address']['postcode']; |
||||
160 | $order_data['payment_zone'] = $this->session->data['payment_address']['zone']; |
||||
161 | $order_data['payment_zone_id'] = $this->session->data['payment_address']['zone_id']; |
||||
162 | $order_data['payment_country'] = $this->session->data['payment_address']['country']; |
||||
163 | $order_data['payment_country_id'] = $this->session->data['payment_address']['country_id']; |
||||
164 | $order_data['payment_address_format'] = $this->session->data['payment_address']['address_format']; |
||||
165 | $order_data['payment_custom_field'] = (isset($this->session->data['payment_address']['custom_field']) ? $this->session->data['payment_address']['custom_field'] : array()); |
||||
166 | |||||
167 | if (isset($this->session->data['payment_method']['title'])) { |
||||
168 | $order_data['payment_method'] = $this->session->data['payment_method']['title']; |
||||
169 | } else { |
||||
170 | $order_data['payment_method'] = ''; |
||||
171 | } |
||||
172 | |||||
173 | if (isset($this->session->data['payment_method']['code'])) { |
||||
174 | $order_data['payment_code'] = $this->session->data['payment_method']['code']; |
||||
175 | } else { |
||||
176 | $order_data['payment_code'] = ''; |
||||
177 | } |
||||
178 | |||||
179 | if ($this->cart->hasShipping()) { |
||||
180 | $order_data['shipping_firstname'] = $this->session->data['shipping_address']['firstname']; |
||||
181 | $order_data['shipping_lastname'] = $this->session->data['shipping_address']['lastname']; |
||||
182 | $order_data['shipping_company'] = $this->session->data['shipping_address']['company']; |
||||
183 | $order_data['shipping_address_1'] = $this->session->data['shipping_address']['address_1']; |
||||
184 | $order_data['shipping_address_2'] = $this->session->data['shipping_address']['address_2']; |
||||
185 | $order_data['shipping_city'] = $this->session->data['shipping_address']['city']; |
||||
186 | $order_data['shipping_postcode'] = $this->session->data['shipping_address']['postcode']; |
||||
187 | $order_data['shipping_zone'] = $this->session->data['shipping_address']['zone']; |
||||
188 | $order_data['shipping_zone_id'] = $this->session->data['shipping_address']['zone_id']; |
||||
189 | $order_data['shipping_country'] = $this->session->data['shipping_address']['country']; |
||||
190 | $order_data['shipping_country_id'] = $this->session->data['shipping_address']['country_id']; |
||||
191 | $order_data['shipping_address_format'] = $this->session->data['shipping_address']['address_format']; |
||||
192 | $order_data['shipping_custom_field'] = (isset($this->session->data['shipping_address']['custom_field']) ? $this->session->data['shipping_address']['custom_field'] : array()); |
||||
193 | |||||
194 | if (isset($this->session->data['shipping_method']['title'])) { |
||||
195 | $order_data['shipping_method'] = $this->session->data['shipping_method']['title']; |
||||
196 | } else { |
||||
197 | $order_data['shipping_method'] = ''; |
||||
198 | } |
||||
199 | |||||
200 | if (isset($this->session->data['shipping_method']['code'])) { |
||||
201 | $order_data['shipping_code'] = $this->session->data['shipping_method']['code']; |
||||
202 | } else { |
||||
203 | $order_data['shipping_code'] = ''; |
||||
204 | } |
||||
205 | } else { |
||||
206 | $order_data['shipping_firstname'] = ''; |
||||
207 | $order_data['shipping_lastname'] = ''; |
||||
208 | $order_data['shipping_company'] = ''; |
||||
209 | $order_data['shipping_address_1'] = ''; |
||||
210 | $order_data['shipping_address_2'] = ''; |
||||
211 | $order_data['shipping_city'] = ''; |
||||
212 | $order_data['shipping_postcode'] = ''; |
||||
213 | $order_data['shipping_zone'] = ''; |
||||
214 | $order_data['shipping_zone_id'] = ''; |
||||
215 | $order_data['shipping_country'] = ''; |
||||
216 | $order_data['shipping_country_id'] = ''; |
||||
217 | $order_data['shipping_address_format'] = ''; |
||||
218 | $order_data['shipping_custom_field'] = array(); |
||||
219 | $order_data['shipping_method'] = ''; |
||||
220 | $order_data['shipping_code'] = ''; |
||||
221 | } |
||||
222 | |||||
223 | $order_data['products'] = array(); |
||||
224 | |||||
225 | foreach ($this->cart->getProducts() as $product) { |
||||
226 | $option_data = array(); |
||||
227 | |||||
228 | foreach ($product['option'] as $option) { |
||||
229 | $option_data[] = array( |
||||
230 | 'product_option_id' => $option['product_option_id'], |
||||
231 | 'product_option_value_id' => $option['product_option_value_id'], |
||||
232 | 'option_id' => $option['option_id'], |
||||
233 | 'option_value_id' => $option['option_value_id'], |
||||
234 | 'name' => $option['name'], |
||||
235 | 'value' => $option['value'], |
||||
236 | 'type' => $option['type'] |
||||
237 | ); |
||||
238 | } |
||||
239 | |||||
240 | $order_data['products'][] = array( |
||||
241 | 'product_id' => $product['product_id'], |
||||
242 | 'name' => $product['name'], |
||||
243 | 'model' => $product['model'], |
||||
244 | 'option' => $option_data, |
||||
245 | 'download' => $product['download'], |
||||
246 | 'quantity' => $product['quantity'], |
||||
247 | 'subtract' => $product['subtract'], |
||||
248 | 'price' => $product['price'], |
||||
249 | 'total' => $product['total'], |
||||
250 | 'reward' => $product['reward'] |
||||
251 | ); |
||||
252 | } |
||||
253 | |||||
254 | $order_data['comment'] = $this->session->data['comment']; |
||||
255 | $order_data['total'] = $total_data['total']; |
||||
256 | |||||
257 | if (isset($this->request->cookie['tracking'])) { |
||||
258 | $order_data['tracking'] = $this->request->cookie['tracking']; |
||||
259 | |||||
260 | $subtotal = $this->cart->getSubTotal(); |
||||
0 ignored issues
–
show
|
|||||
261 | |||||
262 | $order_data['commission'] = 0; |
||||
263 | |||||
264 | // Marketing |
||||
265 | $this->load->model('checkout/marketing'); |
||||
266 | |||||
267 | $marketing_info = $this->model_checkout_marketing->getMarketingByCode($this->request->cookie['tracking']); |
||||
268 | |||||
269 | if ($marketing_info) { |
||||
270 | $order_data['marketing_id'] = $marketing_info['marketing_id']; |
||||
271 | } else { |
||||
272 | $order_data['marketing_id'] = 0; |
||||
273 | } |
||||
274 | } else { |
||||
275 | $order_data['commission'] = 0; |
||||
276 | $order_data['marketing_id'] = 0; |
||||
277 | $order_data['tracking'] = ''; |
||||
278 | } |
||||
279 | |||||
280 | $order_data['language_id'] = $this->config->get('config_language_id'); |
||||
281 | $order_data['currency_id'] = $this->currency->getId($this->session->data['currency']); |
||||
282 | $order_data['currency_code'] = $this->session->data['currency']; |
||||
283 | $order_data['currency_value'] = $this->currency->getValue($this->session->data['currency']); |
||||
284 | $order_data['ip'] = $this->request->server['REMOTE_ADDR']; |
||||
285 | |||||
286 | if (!empty($this->request->server['HTTP_X_FORWARDED_FOR'])) { |
||||
287 | $order_data['forwarded_ip'] = $this->request->server['HTTP_X_FORWARDED_FOR']; |
||||
288 | } elseif (!empty($this->request->server['HTTP_CLIENT_IP'])) { |
||||
289 | $order_data['forwarded_ip'] = $this->request->server['HTTP_CLIENT_IP']; |
||||
290 | } else { |
||||
291 | $order_data['forwarded_ip'] = ''; |
||||
292 | } |
||||
293 | |||||
294 | if (isset($this->request->server['HTTP_USER_AGENT'])) { |
||||
295 | $order_data['user_agent'] = $this->request->server['HTTP_USER_AGENT']; |
||||
296 | } else { |
||||
297 | $order_data['user_agent'] = ''; |
||||
298 | } |
||||
299 | |||||
300 | if (isset($this->request->server['HTTP_ACCEPT_LANGUAGE'])) { |
||||
301 | $order_data['accept_language'] = $this->request->server['HTTP_ACCEPT_LANGUAGE']; |
||||
302 | } else { |
||||
303 | $order_data['accept_language'] = ''; |
||||
304 | } |
||||
305 | |||||
306 | $this->load->model('checkout/order'); |
||||
307 | |||||
308 | $this->session->data['order_id'] = $this->model_checkout_order->addOrder($order_data); |
||||
309 | |||||
310 | $data['column_name'] = $this->language->get('column_name'); |
||||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||||
311 | $data['column_model'] = $this->language->get('column_model'); |
||||
312 | $data['column_quantity'] = $this->language->get('column_quantity'); |
||||
313 | $data['column_price'] = $this->language->get('column_price'); |
||||
314 | $data['column_total'] = $this->language->get('column_total'); |
||||
315 | |||||
316 | $this->load->model('tool/upload'); |
||||
317 | |||||
318 | $data['products'] = array(); |
||||
319 | |||||
320 | foreach ($this->cart->getProducts() as $product) { |
||||
321 | $option_data = array(); |
||||
322 | |||||
323 | foreach ($product['option'] as $option) { |
||||
324 | if ($option['type'] != 'file') { |
||||
325 | $value = $option['value']; |
||||
326 | } else { |
||||
327 | $upload_info = $this->model_tool_upload->getUploadByCode($option['value']); |
||||
328 | |||||
329 | if ($upload_info) { |
||||
330 | $value = $upload_info['name']; |
||||
331 | } else { |
||||
332 | $value = ''; |
||||
333 | } |
||||
334 | } |
||||
335 | |||||
336 | $option_data[] = array( |
||||
337 | 'name' => $option['name'], |
||||
338 | 'value' => (\voku\helper\UTF8::strlen($value) > 20 ? \voku\helper\UTF8::substr($value, 0, 20) . '..' : $value) |
||||
0 ignored issues
–
show
Are you sure
voku\helper\UTF8::substr($value, 0, 20) of type false|string can be used in concatenation ?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
339 | ); |
||||
340 | } |
||||
341 | |||||
342 | $data['products'][] = array( |
||||
343 | 'cart_id' => $product['cart_id'], |
||||
344 | 'product_id' => $product['product_id'], |
||||
345 | 'name' => $product['name'], |
||||
346 | 'model' => $product['model'], |
||||
347 | 'option' => $option_data, |
||||
348 | 'quantity' => $product['quantity'], |
||||
349 | 'subtract' => $product['subtract'], |
||||
350 | 'price' => $this->currency->format($product['price'], $this->session->data['currency']), |
||||
351 | 'total' => $this->currency->format($product['price'] * $product['quantity'], $this->session->data['currency']), |
||||
352 | 'href' => $this->url->link('product/product', 'product_id=' . $product['product_id']) |
||||
353 | ); |
||||
354 | } |
||||
355 | |||||
356 | $data['totals'] = array(); |
||||
357 | |||||
358 | foreach ($order_data['totals'] as $total) { |
||||
359 | $data['totals'][] = array( |
||||
360 | 'title' => $total['title'], |
||||
361 | 'text' => $this->currency->format($total['value'], $this->session->data['currency']) |
||||
362 | ); |
||||
363 | } |
||||
364 | |||||
365 | $data['payment'] = $this->load->controller('extension/payment/' . $this->session->data['payment_method']['code']); |
||||
366 | } else { |
||||
367 | $data['redirect'] = $redirect; |
||||
368 | } |
||||
369 | |||||
370 | $this->response->setOutput($this->load->view('checkout/confirm', $data)); |
||||
371 | } |
||||
372 | } |
||||
373 |
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.