1: | <?php
2: | namespace Opencart\Catalog\Controller\Account;
3: | /**
4: | * Class Wish List
5: | *
6: | * @package Opencart\Catalog\Controller\Account
7: | */
8: | class WishList extends \Opencart\System\Engine\Controller {
9: | /**
10: | * @return void
11: | */
12: | public function index(): void {
13: | $this->load->language('account/wishlist');
14: |
15: | 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']))) {
16: | $this->session->data['redirect'] = $this->url->link('account/wishlist', 'language=' . $this->config->get('config_language'));
17: |
18: | $this->response->redirect($this->url->link('account/login', 'language=' . $this->config->get('config_language'), true));
19: | }
20: |
21: | $this->document->setTitle($this->language->get('heading_title'));
22: |
23: | $data['breadcrumbs'] = [];
24: |
25: | $data['breadcrumbs'][] = [
26: | 'text' => $this->language->get('text_home'),
27: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
28: | ];
29: |
30: | $data['breadcrumbs'][] = [
31: | 'text' => $this->language->get('text_account'),
32: | 'href' => $this->url->link('account/account', 'language=' . $this->config->get('config_language') . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : ''))
33: | ];
34: |
35: | $data['breadcrumbs'][] = [
36: | 'text' => $this->language->get('heading_title'),
37: | 'href' => $this->url->link('account/wishlist', 'language=' . $this->config->get('config_language') . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : ''))
38: | ];
39: |
40: | if (isset($this->session->data['success'])) {
41: | $data['success'] = $this->session->data['success'];
42: |
43: | unset($this->session->data['success']);
44: | } else {
45: | $data['success'] = '';
46: | }
47: |
48: | $data['list'] = $this->load->controller('account/wishlist.getList');
49: |
50: | $data['continue'] = $this->url->link('account/account', 'language=' . $this->config->get('config_language') . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : ''));
51: |
52: | $data['column_left'] = $this->load->controller('common/column_left');
53: | $data['column_right'] = $this->load->controller('common/column_right');
54: | $data['content_top'] = $this->load->controller('common/content_top');
55: | $data['content_bottom'] = $this->load->controller('common/content_bottom');
56: | $data['footer'] = $this->load->controller('common/footer');
57: | $data['header'] = $this->load->controller('common/header');
58: |
59: | $this->response->setOutput($this->load->view('account/wishlist', $data));
60: | }
61: |
62: | /**
63: | * List
64: | *
65: | * @return void
66: | */
67: | public function list(): void {
68: | $this->load->language('account/wishlist');
69: |
70: | $this->response->setOutput($this->getList());
71: | }
72: |
73: | /**
74: | * Get List
75: | *
76: | * @return string
77: | */
78: | public function getList(): string {
79: | $data['wishlist'] = $this->url->link('account/wishlist.list', 'language=' . $this->config->get('config_language') . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : ''));
80: | $data['cart_add'] = $this->url->link('checkout/cart.add', 'language=' . $this->config->get('config_language'));
81: | $data['remove'] = $this->url->link('account/wishlist.remove', 'language=' . $this->config->get('config_language') . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : ''));
82: |
83: | $data['products'] = [];
84: |
85: | $this->load->model('account/wishlist');
86: | $this->load->model('catalog/product');
87: | $this->load->model('tool/image');
88: |
89: | $results = $this->model_account_wishlist->getWishlist($this->customer->getId());
90: |
91: | foreach ($results as $result) {
92: | $product_info = $this->model_catalog_product->getProduct($result['product_id']);
93: |
94: | if ($product_info) {
95: | if ($product_info['image'] && is_file(DIR_IMAGE . html_entity_decode($product_info['image'], ENT_QUOTES, 'UTF-8'))) {
96: | $image = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_wishlist_width'), $this->config->get('config_image_wishlist_height'));
97: | } else {
98: | $image = '';
99: | }
100: |
101: | if ($product_info['quantity'] <= 0) {
102: | $this->load->model('localisation/stock_status');
103: |
104: | $stock_status_info = $this->model_localisation_stock_status->getStockStatus($product_info['stock_status_id']);
105: |
106: | if ($stock_status_info) {
107: | $stock = $stock_status_info['name'];
108: | } else {
109: | $stock = '';
110: | }
111: | } elseif ($this->config->get('config_stock_display')) {
112: | $stock = $product_info['quantity'];
113: | } else {
114: | $stock = $this->language->get('text_instock');
115: | }
116: |
117: | if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
118: | $price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
119: | } else {
120: | $price = false;
121: | }
122: |
123: | if ((float)$product_info['special']) {
124: | $special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
125: | } else {
126: | $special = false;
127: | }
128: |
129: | $data['products'][] = [
130: | 'product_id' => $product_info['product_id'],
131: | 'thumb' => $image,
132: | 'name' => $product_info['name'],
133: | 'model' => $product_info['model'],
134: | 'stock' => $stock,
135: | 'price' => $price,
136: | 'special' => $special,
137: | 'minimum' => $product_info['minimum'] > 0 ? $product_info['minimum'] : 1,
138: | 'href' => $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&product_id=' . $product_info['product_id']),
139: | 'remove' => $this->url->link('account/wishlist.remove', 'language=' . $this->config->get('config_language') . '&product_id=' . $product_info['product_id'] . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : ''))
140: | ];
141: | } else {
142: | $this->model_account_wishlist->deleteWishlist($this->customer->getId(), $result['product_id']);
143: | }
144: | }
145: |
146: | return $this->load->view('account/wishlist_list', $data);
147: | }
148: |
149: | /**
150: | * Add
151: | *
152: | * @return void
153: | */
154: | public function add(): void {
155: | $this->load->language('account/wishlist');
156: |
157: | $json = [];
158: |
159: | if (isset($this->request->post['product_id'])) {
160: | $product_id = (int)$this->request->post['product_id'];
161: | } else {
162: | $product_id = 0;
163: | }
164: |
165: | $this->load->model('catalog/product');
166: |
167: | $product_info = $this->model_catalog_product->getProduct($product_id);
168: |
169: | if (!$product_info) {
170: | $json['error'] = $this->language->get('error_product');
171: | }
172: |
173: | if (!$json) {
174: | if (!isset($this->session->data['wishlist'])) {
175: | $this->session->data['wishlist'] = [];
176: | }
177: |
178: | $this->session->data['wishlist'][] = $product_id;
179: |
180: | $this->session->data['wishlist'] = array_unique($this->session->data['wishlist']);
181: |
182: | // Logged in. We store the product ID into the wishlist
183: | if ($this->customer->isLogged()) {
184: | // Edit the customer's cart
185: | $this->load->model('account/wishlist');
186: |
187: | $this->model_account_wishlist->addWishlist($this->customer->getId(), $product_id);
188: |
189: | $json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&product_id=' . $product_id), $product_info['name'], $this->url->link('account/wishlist', 'language=' . $this->config->get('config_language') . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : '')));
190: |
191: | $json['total'] = sprintf($this->language->get('text_wishlist'), $this->model_account_wishlist->getTotalWishlist($this->customer->getId()));
192: | } else {
193: | $json['success'] = sprintf($this->language->get('text_login'), $this->url->link('account/login', 'language=' . $this->config->get('config_language')), $this->url->link('account/register', 'language=' . $this->config->get('config_language')), $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&product_id=' . (int)$product_id), $product_info['name'], $this->url->link('account/wishlist', 'language=' . $this->config->get('config_language') . (isset($this->session->data['customer_token']) ? '&customer_token=' . $this->session->data['customer_token'] : '')));
194: |
195: | $json['total'] = sprintf($this->language->get('text_wishlist'), (isset($this->session->data['wishlist']) ? count($this->session->data['wishlist']) : 0));
196: | }
197: | }
198: |
199: | $this->response->addHeader('Content-Type: application/json');
200: | $this->response->setOutput(json_encode($json));
201: | }
202: |
203: | /**
204: | * Remove
205: | *
206: | * @return void
207: | */
208: | public function remove(): void {
209: | $this->load->language('account/wishlist');
210: |
211: | $json = [];
212: |
213: | if (isset($this->request->get['product_id'])) {
214: | $product_id = (int)$this->request->get['product_id'];
215: | } else {
216: | $product_id = 0;
217: | }
218: |
219: | if (!$this->customer->isLogged()) {
220: | $json['error'] = sprintf($this->language->get('error_login'), $this->url->link('account/login', 'language=' . $this->config->get('config_language')), $this->url->link('account/register', 'language=' . $this->config->get('config_language')), $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&product_id=' . (int)$product_id), $this->url->link('account/wishlist', 'language=' . $this->config->get('config_language')));
221: | }
222: |
223: | if (!$json) {
224: | $this->load->model('account/wishlist');
225: |
226: | $this->model_account_wishlist->deleteWishlist($this->customer->getId(), $product_id);
227: |
228: | $json['success'] = $this->language->get('text_remove');
229: | }
230: |
231: | $this->response->addHeader('Content-Type: application/json');
232: | $this->response->setOutput(json_encode($json));
233: | }
234: | }
235: |

OpenCart API API documentation generated by ApiGen dev-master