1: | <?php
2: | namespace Opencart\Catalog\Controller\Account;
3: | /**
4: | * Class Returns
5: | *
6: | * @package Opencart\Catalog\Controller\Account
7: | */
8: | class Returns extends \Opencart\System\Engine\Controller {
9: | /**
10: | * @return void
11: | */
12: | public function index(): void {
13: | $this->load->language('account/returns');
14: |
15: | if (isset($this->request->get['page'])) {
16: | $page = (int)$this->request->get['page'];
17: | } else {
18: | $page = 1;
19: | }
20: |
21: | if (!$this->customer->isLogged() || (!isset($this->request->get['customer_token']) || !isset($this->session->data['customer_token']) || ($this->request->get['customer_token'] != $this->session->data['customer_token']))) {
22: | $this->session->data['redirect'] = $this->url->link('account/returns', 'language=' . $this->config->get('config_language'));
23: |
24: | $this->response->redirect($this->url->link('account/login', 'language=' . $this->config->get('config_language'), true));
25: | }
26: |
27: | $limit = 10;
28: |
29: | $this->document->setTitle($this->language->get('heading_title'));
30: |
31: | $data['breadcrumbs'] = [];
32: |
33: | $data['breadcrumbs'][] = [
34: | 'text' => $this->language->get('text_home'),
35: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
36: | ];
37: |
38: | $data['breadcrumbs'][] = [
39: | 'text' => $this->language->get('text_account'),
40: | 'href' => $this->url->link('account/account', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'])
41: | ];
42: |
43: | $url = '';
44: |
45: | if (isset($this->request->get['page'])) {
46: | $url .= '&page=' . $this->request->get['page'];
47: | }
48: |
49: | $data['breadcrumbs'][] = [
50: | 'text' => $this->language->get('heading_title'),
51: | 'href' => $this->url->link('account/returns', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . $url)
52: | ];
53: |
54: | $data['returns'] = [];
55: |
56: | $this->load->model('account/returns');
57: |
58: | $results = $this->model_account_returns->getReturns(($page - 1) * $limit, $limit);
59: |
60: | foreach ($results as $result) {
61: | $data['returns'][] = [
62: | 'return_id' => $result['return_id'],
63: | 'order_id' => $result['order_id'],
64: | 'name' => $result['firstname'] . ' ' . $result['lastname'],
65: | 'status' => $result['status'],
66: | 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
67: | 'href' => $this->url->link('account/returns.info', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&return_id=' . $result['return_id'] . $url)
68: | ];
69: | }
70: |
71: | $return_total = $this->model_account_returns->getTotalReturns();
72: |
73: | $data['pagination'] = $this->load->controller('common/pagination', [
74: | 'total' => $return_total,
75: | 'page' => $page,
76: | 'limit' => $limit,
77: | 'url' => $this->url->link('account/returns', 'language=' . $this->config->get('config_language') . '&page={page}')
78: | ]);
79: |
80: | $data['results'] = sprintf($this->language->get('text_pagination'), ($return_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($return_total - $limit)) ? $return_total : ((($page - 1) * $limit) + $limit), $return_total, ceil($return_total / $limit));
81: |
82: | $data['continue'] = $this->url->link('account/account', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']);
83: |
84: | $data['column_left'] = $this->load->controller('common/column_left');
85: | $data['column_right'] = $this->load->controller('common/column_right');
86: | $data['content_top'] = $this->load->controller('common/content_top');
87: | $data['content_bottom'] = $this->load->controller('common/content_bottom');
88: | $data['footer'] = $this->load->controller('common/footer');
89: | $data['header'] = $this->load->controller('common/header');
90: |
91: | $this->response->setOutput($this->load->view('account/returns_list', $data));
92: | }
93: |
94: | /**
95: | * Info
96: | *
97: | * @return \Opencart\System\Engine\Action|null
98: | */
99: | public function info(): ?\Opencart\System\Engine\Action {
100: | $this->load->language('account/returns');
101: |
102: | if (isset($this->request->get['return_id'])) {
103: | $return_id = (int)$this->request->get['return_id'];
104: | } else {
105: | $return_id = 0;
106: | }
107: |
108: | if (!$this->customer->isLogged() || (!isset($this->request->get['customer_token']) || !isset($this->session->data['customer_token']) || ($this->request->get['customer_token'] != $this->session->data['customer_token']))) {
109: | $this->session->data['redirect'] = $this->url->link('account/returns.info', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']);
110: |
111: | $this->response->redirect($this->url->link('account/login', 'language=' . $this->config->get('config_language'), true));
112: | }
113: |
114: | $this->load->model('account/returns');
115: |
116: | $return_info = $this->model_account_returns->getReturn($return_id);
117: |
118: | if ($return_info) {
119: | $this->document->setTitle($this->language->get('text_return'));
120: |
121: | $data['breadcrumbs'] = [];
122: |
123: | $data['breadcrumbs'][] = [
124: | 'text' => $this->language->get('text_home'),
125: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
126: | ];
127: |
128: | $data['breadcrumbs'][] = [
129: | 'text' => $this->language->get('text_account'),
130: | 'href' => $this->url->link('account/account', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'])
131: | ];
132: |
133: | $url = '';
134: |
135: | if (isset($this->request->get['page'])) {
136: | $url .= '&page=' . $this->request->get['page'];
137: | }
138: |
139: | $data['breadcrumbs'][] = [
140: | 'text' => $this->language->get('heading_title'),
141: | 'href' => $this->url->link('account/returns', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . $url)
142: | ];
143: |
144: | $data['breadcrumbs'][] = [
145: | 'text' => $this->language->get('text_return'),
146: | 'href' => $this->url->link('account/returns.info', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&return_id=' . $this->request->get['return_id'] . $url)
147: | ];
148: |
149: | $data['return_id'] = $return_info['return_id'];
150: | $data['order_id'] = $return_info['order_id'];
151: | $data['date_ordered'] = date($this->language->get('date_format_short'), strtotime($return_info['date_ordered']));
152: | $data['date_added'] = date($this->language->get('date_format_short'), strtotime($return_info['date_added']));
153: | $data['firstname'] = $return_info['firstname'];
154: | $data['lastname'] = $return_info['lastname'];
155: | $data['email'] = $return_info['email'];
156: | $data['telephone'] = $return_info['telephone'];
157: | $data['product'] = $return_info['product'];
158: | $data['model'] = $return_info['model'];
159: | $data['quantity'] = $return_info['quantity'];
160: | $data['reason'] = $return_info['reason'];
161: | $data['opened'] = $return_info['opened'] ? $this->language->get('text_yes') : $this->language->get('text_no');
162: | $data['comment'] = nl2br($return_info['comment']);
163: | $data['action'] = $return_info['action'];
164: |
165: | $data['histories'] = [];
166: |
167: | $results = $this->model_account_returns->getHistories($this->request->get['return_id']);
168: |
169: | foreach ($results as $result) {
170: | $data['histories'][] = [
171: | 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
172: | 'status' => $result['status'],
173: | 'comment' => nl2br($result['comment'])
174: | ];
175: | }
176: |
177: | $data['continue'] = $this->url->link('account/returns', 'language=' . $this->config->get('config_language') . $url . '&customer_token=' . $this->session->data['customer_token']);
178: | $data['column_left'] = $this->load->controller('common/column_left');
179: | $data['column_right'] = $this->load->controller('common/column_right');
180: | $data['content_top'] = $this->load->controller('common/content_top');
181: | $data['content_bottom'] = $this->load->controller('common/content_bottom');
182: | $data['footer'] = $this->load->controller('common/footer');
183: | $data['header'] = $this->load->controller('common/header');
184: |
185: | $this->response->setOutput($this->load->view('account/returns_info', $data));
186: | } else {
187: | return new \Opencart\System\Engine\Action('error/not_found');
188: | }
189: |
190: | return null;
191: | }
192: |
193: | /**
194: | * Add
195: | *
196: | * @return void
197: | */
198: | public function add(): void {
199: | $this->load->language('account/returns');
200: |
201: | $this->document->setTitle($this->language->get('heading_title'));
202: |
203: | $data['breadcrumbs'] = [];
204: |
205: | $data['breadcrumbs'][] = [
206: | 'text' => $this->language->get('text_home'),
207: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
208: | ];
209: |
210: | $data['breadcrumbs'][] = [
211: | 'text' => $this->language->get('text_account'),
212: | 'href' => $this->url->link('account/account', 'language=' . $this->config->get('config_language'))
213: | ];
214: |
215: | $data['breadcrumbs'][] = [
216: | 'text' => $this->language->get('heading_title'),
217: | 'href' => $this->url->link('account/returns.add', 'language=' . $this->config->get('config_language'))
218: | ];
219: |
220: | $this->session->data['return_token'] = oc_token(26);
221: |
222: | $data['save'] = $this->url->link('account/returns.save', 'language=' . $this->config->get('config_language') . '&return_token=' . $this->session->data['return_token']);
223: |
224: | $this->load->model('account/order');
225: |
226: | if (isset($this->request->get['order_id'])) {
227: | $order_info = $this->model_account_order->getOrder($this->request->get['order_id']);
228: | }
229: |
230: | $this->load->model('catalog/product');
231: |
232: | if (isset($this->request->get['product_id'])) {
233: | $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
234: | }
235: |
236: | if (!empty($order_info)) {
237: | $data['order_id'] = $order_info['order_id'];
238: | } else {
239: | $data['order_id'] = '';
240: | }
241: |
242: | if (!empty($product_info)) {
243: | $data['product_id'] = $product_info['product_id'];
244: | } else {
245: | $data['product_id'] = '';
246: | }
247: |
248: | if (!empty($order_info)) {
249: | $data['date_ordered'] = date('Y-m-d', strtotime($order_info['date_added']));
250: | } else {
251: | $data['date_ordered'] = '';
252: | }
253: |
254: | if (!empty($order_info)) {
255: | $data['firstname'] = $order_info['firstname'];
256: | } else {
257: | $data['firstname'] = $this->customer->getFirstName();
258: | }
259: |
260: | if (!empty($order_info)) {
261: | $data['lastname'] = $order_info['lastname'];
262: | } else {
263: | $data['lastname'] = $this->customer->getLastName();
264: | }
265: |
266: | if (!empty($order_info)) {
267: | $data['email'] = $order_info['email'];
268: | } else {
269: | $data['email'] = $this->customer->getEmail();
270: | }
271: |
272: | if (!empty($order_info)) {
273: | $data['telephone'] = $order_info['telephone'];
274: | } else {
275: | $data['telephone'] = $this->customer->getTelephone();
276: | }
277: |
278: | if (!empty($product_info)) {
279: | $data['product'] = $product_info['name'];
280: | } else {
281: | $data['product'] = '';
282: | }
283: |
284: | if (!empty($product_info)) {
285: | $data['model'] = $product_info['model'];
286: | } else {
287: | $data['model'] = '';
288: | }
289: |
290: | $this->load->model('localisation/return_reason');
291: |
292: | $data['return_reasons'] = $this->model_localisation_return_reason->getReturnReasons();
293: |
294: | // Captcha
295: | $this->load->model('setting/extension');
296: |
297: | $extension_info = $this->model_setting_extension->getExtensionByCode('captcha', $this->config->get('config_captcha'));
298: |
299: | if ($extension_info && $this->config->get('captcha_' . $this->config->get('config_captcha') . '_status') && in_array('returns', (array)$this->config->get('config_captcha_page'))) {
300: | $data['captcha'] = $this->load->controller('extension/' . $extension_info['extension'] . '/captcha/' . $extension_info['code']);
301: | } else {
302: | $data['captcha'] = '';
303: | }
304: |
305: | $this->load->model('catalog/information');
306: |
307: | $information_info = $this->model_catalog_information->getInformation($this->config->get('config_return_id'));
308: |
309: | if ($information_info) {
310: | $data['text_agree'] = sprintf($this->language->get('text_agree'), $this->url->link('information/information.info', 'language=' . $this->config->get('config_language') . '&information_id=' . $this->config->get('config_return_id')), $information_info['title']);
311: | } else {
312: | $data['text_agree'] = '';
313: | }
314: |
315: | $data['back'] = $this->url->link('account/account', 'language=' . $this->config->get('config_language'));
316: |
317: | $data['column_left'] = $this->load->controller('common/column_left');
318: | $data['column_right'] = $this->load->controller('common/column_right');
319: | $data['content_top'] = $this->load->controller('common/content_top');
320: | $data['content_bottom'] = $this->load->controller('common/content_bottom');
321: | $data['footer'] = $this->load->controller('common/footer');
322: | $data['header'] = $this->load->controller('common/header');
323: |
324: | $this->response->setOutput($this->load->view('account/returns_form', $data));
325: | }
326: |
327: | /**
328: | * Save
329: | *
330: | * @return void
331: | */
332: | public function save(): void {
333: | $this->load->language('account/returns');
334: |
335: | $json = [];
336: |
337: | if (!isset($this->request->get['return_token']) || !isset($this->session->data['return_token']) || ($this->request->get['return_token'] != $this->session->data['return_token'])) {
338: | $json['redirect'] = $this->url->link('account/returns.add', 'language=' . $this->config->get('config_language'), true);
339: | }
340: |
341: | if (!$json) {
342: | $keys = [
343: | 'order_id',
344: | 'firstname',
345: | 'lastname',
346: | 'email',
347: | 'telephone',
348: | 'product',
349: | 'model',
350: | 'reason',
351: | 'agree'
352: | ];
353: |
354: | foreach ($keys as $key) {
355: | if (!isset($this->request->post[$key])) {
356: | $this->request->post[$key] = '';
357: | }
358: | }
359: |
360: | if (!$this->request->post['order_id']) {
361: | $json['error']['order_id'] = $this->language->get('error_order_id');
362: | }
363: |
364: | if ((oc_strlen($this->request->post['firstname']) < 1) || (oc_strlen($this->request->post['firstname']) > 32)) {
365: | $json['error']['firstname'] = $this->language->get('error_firstname');
366: | }
367: |
368: | if ((oc_strlen($this->request->post['lastname']) < 1) || (oc_strlen($this->request->post['lastname']) > 32)) {
369: | $json['error']['lastname'] = $this->language->get('error_lastname');
370: | }
371: |
372: | if ((oc_strlen($this->request->post['email']) > 96) || !filter_var($this->request->post['email'], FILTER_VALIDATE_EMAIL)) {
373: | $json['error']['email'] = $this->language->get('error_email');
374: | }
375: |
376: | if ((oc_strlen($this->request->post['telephone']) < 3) || (oc_strlen($this->request->post['telephone']) > 32)) {
377: | $json['error']['telephone'] = $this->language->get('error_telephone');
378: | }
379: |
380: | if ((oc_strlen($this->request->post['product']) < 1) || (oc_strlen($this->request->post['product']) > 255)) {
381: | $json['error']['product'] = $this->language->get('error_product');
382: | }
383: |
384: | if ((oc_strlen($this->request->post['model']) < 1) || (oc_strlen($this->request->post['model']) > 64)) {
385: | $json['error']['model'] = $this->language->get('error_model');
386: | }
387: |
388: | if (empty($this->request->post['return_reason_id'])) {
389: | $json['error']['reason'] = $this->language->get('error_reason');
390: | }
391: |
392: | // Captcha
393: | $this->load->model('setting/extension');
394: |
395: | $extension_info = $this->model_setting_extension->getExtensionByCode('captcha', $this->config->get('config_captcha'));
396: |
397: | if ($extension_info && $this->config->get('captcha_' . $this->config->get('config_captcha') . '_status') && in_array('returns', (array)$this->config->get('config_captcha_page'))) {
398: | $captcha = $this->load->controller('extension/' . $extension_info['extension'] . '/captcha/' . $extension_info['code'] . '.validate');
399: |
400: | if ($captcha) {
401: | $json['error']['captcha'] = $captcha;
402: | }
403: | }
404: |
405: | if ($this->config->get('config_return_id')) {
406: | $this->load->model('catalog/information');
407: |
408: | $information_info = $this->model_catalog_information->getInformation($this->config->get('config_return_id'));
409: |
410: | if ($information_info && !isset($this->request->post['agree'])) {
411: | $json['error']['warning'] = sprintf($this->language->get('error_agree'), $information_info['title']);
412: | }
413: | }
414: | }
415: |
416: | if (!$json) {
417: | $this->load->model('account/returns');
418: |
419: | $this->model_account_returns->addReturn($this->request->post);
420: |
421: | $json['redirect'] = $this->url->link('account/returns.success', 'language=' . $this->config->get('config_language'), true);
422: | }
423: |
424: | $this->response->addHeader('Content-Type: application/json');
425: | $this->response->setOutput(json_encode($json));
426: | }
427: |
428: | /**
429: | * Success
430: | *
431: | * @return void
432: | */
433: | public function success(): void {
434: | $this->load->language('account/returns');
435: |
436: | $this->document->setTitle($this->language->get('heading_title'));
437: |
438: | $data['breadcrumbs'] = [];
439: |
440: | $data['breadcrumbs'][] = [
441: | 'text' => $this->language->get('text_home'),
442: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
443: | ];
444: |
445: | $data['breadcrumbs'][] = [
446: | 'text' => $this->language->get('heading_title'),
447: | 'href' => $this->url->link('account/returns.add', 'language=' . $this->config->get('config_language'))
448: | ];
449: |
450: | $data['continue'] = $this->url->link('common/home', 'language=' . $this->config->get('config_language'));
451: |
452: | $data['column_left'] = $this->load->controller('common/column_left');
453: | $data['column_right'] = $this->load->controller('common/column_right');
454: | $data['content_top'] = $this->load->controller('common/content_top');
455: | $data['content_bottom'] = $this->load->controller('common/content_bottom');
456: | $data['footer'] = $this->load->controller('common/footer');
457: | $data['header'] = $this->load->controller('common/header');
458: |
459: | $this->response->setOutput($this->load->view('common/success', $data));
460: | }
461: | }
462: |

OpenCart API API documentation generated by ApiGen dev-master