1: | <?php
2: | namespace Opencart\Catalog\Controller\Extension\Opencart\Total;
3: | /**
4: | * Class Shipping
5: | *
6: | * @package Opencart\Catalog\Controller\Extension\Opencart\Total
7: | */
8: | class Shipping extends \Opencart\System\Engine\Controller {
9: | /**
10: | * Index
11: | *
12: | * @return string
13: | */
14: | public function index(): string {
15: | if ($this->config->get('total_shipping_status') && $this->config->get('total_shipping_estimator') && $this->cart->hasShipping()) {
16: | $this->load->language('extension/opencart/total/shipping');
17: |
18: | if (isset($this->session->data['shipping_address'])) {
19: | $data['postcode'] = $this->session->data['shipping_address']['postcode'];
20: | $data['country_id'] = $this->session->data['shipping_address']['country_id'];
21: | $data['zone_id'] = $this->session->data['shipping_address']['zone_id'];
22: | } else {
23: | $data['postcode'] = '';
24: | $data['country_id'] = (int)$this->config->get('config_country_id');
25: | $data['zone_id'] = '';
26: | }
27: |
28: | if (isset($this->session->data['shipping_method'])) {
29: | $data['code'] = $this->session->data['shipping_method']['code'];
30: | } else {
31: | $data['code'] = '';
32: | }
33: |
34: | $this->load->model('localisation/country');
35: |
36: | $data['countries'] = $this->model_localisation_country->getCountries();
37: |
38: | $data['language'] = $this->config->get('config_language');
39: |
40: | return $this->load->view('extension/opencart/total/shipping', $data);
41: | }
42: |
43: | return '';
44: | }
45: |
46: | /**
47: | * Quote
48: | *
49: | * @return void
50: | */
51: | public function quote(): void {
52: | $this->load->language('extension/opencart/total/shipping');
53: |
54: | $json = [];
55: |
56: | $keys = [
57: | 'postcode',
58: | 'country_id',
59: | 'zone_id'
60: | ];
61: |
62: | foreach ($keys as $key) {
63: | if (!isset($this->request->post[$key])) {
64: | $this->request->post[$key] = '';
65: | }
66: | }
67: |
68: | if (!$this->cart->hasProducts()) {
69: | $json['error']['warning'] = $this->language->get('error_product');
70: | }
71: |
72: | if (!$this->cart->hasShipping()) {
73: | $json['error']['warning'] = sprintf($this->language->get('error_no_shipping'), $this->url->link('information/contact', 'language=' . $this->config->get('config_language')));
74: | }
75: |
76: | $this->load->model('localisation/country');
77: |
78: | $country_info = $this->model_localisation_country->getCountry((int)$this->request->post['country_id']);
79: |
80: | if ($country_info && $country_info['postcode_required'] && (oc_strlen($this->request->post['postcode']) < 2 || oc_strlen($this->request->post['postcode']) > 10)) {
81: | $json['error']['postcode'] = $this->language->get('error_postcode');
82: | }
83: |
84: | if (!$country_info || $this->request->post['country_id'] == '') {
85: | $json['error']['country'] = $this->language->get('error_country');
86: | }
87: |
88: | if ($this->request->post['zone_id'] == '') {
89: | $json['error']['zone'] = $this->language->get('error_zone');
90: | }
91: |
92: | if (!$json) {
93: | if ($country_info) {
94: | $country = $country_info['name'];
95: | $iso_code_2 = $country_info['iso_code_2'];
96: | $iso_code_3 = $country_info['iso_code_3'];
97: | $address_format = $country_info['address_format'];
98: | } else {
99: | $country = '';
100: | $iso_code_2 = '';
101: | $iso_code_3 = '';
102: | $address_format = '';
103: | }
104: |
105: | $this->load->model('localisation/zone');
106: |
107: | $zone_info = $this->model_localisation_zone->getZone($this->request->post['zone_id']);
108: |
109: | if ($zone_info) {
110: | $zone = $zone_info['name'];
111: | $zone_code = $zone_info['code'];
112: | } else {
113: | $zone = '';
114: | $zone_code = '';
115: | }
116: |
117: | $this->session->data['shipping_address'] = [
118: | 'postcode' => $this->request->post['postcode'],
119: | 'zone_id' => $this->request->post['zone_id'],
120: | 'zone' => $zone,
121: | 'zone_code' => $zone_code,
122: | 'country_id' => $this->request->post['country_id'],
123: | 'country' => $country,
124: | 'iso_code_2' => $iso_code_2,
125: | 'iso_code_3' => $iso_code_3
126: | ];
127: |
128: | $this->tax->setShippingAddress($this->request->post['country_id'], $this->request->post['zone_id']);
129: |
130: | // Shipping Methods
131: | $this->load->model('checkout/shipping_method');
132: |
133: | $shipping_methods = $this->model_checkout_shipping_method->getMethods($this->session->data['shipping_address']);
134: |
135: | if ($shipping_methods) {
136: | $json['shipping_methods'] = $this->session->data['shipping_methods'] = $shipping_methods;
137: | } else {
138: | $json['error']['warning'] = sprintf($this->language->get('error_no_shipping'), $this->url->link('information/contact', 'language=' . $this->config->get('config_language')));
139: | }
140: | }
141: |
142: | $this->response->addHeader('Content-Type: application/json');
143: | $this->response->setOutput(json_encode($json));
144: | }
145: |
146: | /**
147: | * Save
148: | *
149: | * @return void
150: | */
151: | public function save(): void {
152: | $this->load->language('extension/opencart/total/shipping');
153: |
154: | $json = [];
155: |
156: | if (!empty($this->request->post['shipping_method'])) {
157: | $shipping = explode('.', $this->request->post['shipping_method']);
158: |
159: | if (!isset($shipping[0]) || !isset($shipping[1]) || !isset($this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]])) {
160: | $json['error'] = $this->language->get('error_shipping');
161: | }
162: | } else {
163: | $json['error'] = $this->language->get('error_shipping');
164: | }
165: |
166: | if (!$json) {
167: | $this->session->data['shipping_method'] = $this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]];
168: |
169: | $json['success'] = $this->language->get('text_success');
170: |
171: | unset($this->session->data['payment_method']);
172: | unset($this->session->data['payment_methods']);
173: | }
174: |
175: | $this->response->addHeader('Content-Type: application/json');
176: | $this->response->setOutput(json_encode($json));
177: | }
178: | }
179: |

OpenCart API API documentation generated by ApiGen dev-master