diff options
Diffstat (limited to 'public/catalog/controller/checkout/shipping_method.php')
-rw-r--r-- | public/catalog/controller/checkout/shipping_method.php | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/public/catalog/controller/checkout/shipping_method.php b/public/catalog/controller/checkout/shipping_method.php new file mode 100644 index 0000000..d121fc8 --- /dev/null +++ b/public/catalog/controller/checkout/shipping_method.php @@ -0,0 +1,127 @@ +<?php +class ControllerCheckoutShippingMethod extends Controller { + public function index() { + $this->load->language('checkout/checkout'); + + if (isset($this->session->data['shipping_address'])) { + // Shipping Methods + $method_data = array(); + + $this->load->model('setting/extension'); + + $results = $this->model_setting_extension->getExtensions('shipping'); + + foreach ($results as $result) { + if ($this->config->get('shipping_' . $result['code'] . '_status')) { + $this->load->model('extension/shipping/' . $result['code']); + + $quote = $this->{'model_extension_shipping_' . $result['code']}->getQuote($this->session->data['shipping_address']); + + if ($quote) { + $method_data[$result['code']] = array( + 'title' => $quote['title'], + 'quote' => $quote['quote'], + 'sort_order' => $quote['sort_order'], + 'error' => $quote['error'] + ); + } + } + } + + $sort_order = array(); + + foreach ($method_data as $key => $value) { + $sort_order[$key] = $value['sort_order']; + } + + array_multisort($sort_order, SORT_ASC, $method_data); + + $this->session->data['shipping_methods'] = $method_data; + } + + if (empty($this->session->data['shipping_methods'])) { + $data['error_warning'] = sprintf($this->language->get('error_no_shipping'), $this->url->link('information/contact')); + } else { + $data['error_warning'] = ''; + } + + if (isset($this->session->data['shipping_methods'])) { + $data['shipping_methods'] = $this->session->data['shipping_methods']; + } else { + $data['shipping_methods'] = array(); + } + + if (isset($this->session->data['shipping_method']['code'])) { + $data['code'] = $this->session->data['shipping_method']['code']; + } else { + $data['code'] = ''; + } + + if (isset($this->session->data['comment'])) { + $data['comment'] = $this->session->data['comment']; + } else { + $data['comment'] = ''; + } + + $this->response->setOutput($this->load->view('checkout/shipping_method', $data)); + } + + public function save() { + $this->load->language('checkout/checkout'); + + $json = array(); + + // Validate if shipping is required. If not the customer should not have reached this page. + if (!$this->cart->hasShipping()) { + $json['redirect'] = $this->url->link('checkout/checkout', '', true); + } + + // Validate if shipping address has been set. + if (!isset($this->session->data['shipping_address'])) { + $json['redirect'] = $this->url->link('checkout/checkout', '', true); + } + + // Validate cart has products and has stock. + if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) { + $json['redirect'] = $this->url->link('checkout/cart'); + } + + // Validate minimum quantity requirements. + $products = $this->cart->getProducts(); + + foreach ($products as $product) { + $product_total = 0; + + foreach ($products as $product_2) { + if ($product_2['product_id'] == $product['product_id']) { + $product_total += $product_2['quantity']; + } + } + + if ($product['minimum'] > $product_total) { + $json['redirect'] = $this->url->link('checkout/cart'); + + break; + } + } + + if (!isset($this->request->post['shipping_method'])) { + $json['error']['warning'] = $this->language->get('error_shipping'); + } else { + $shipping = explode('.', $this->request->post['shipping_method']); + + if (!isset($shipping[0]) || !isset($shipping[1]) || !isset($this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]])) { + $json['error']['warning'] = $this->language->get('error_shipping'); + } + } + + if (!$json) { + $this->session->data['shipping_method'] = $this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]]; + + $this->session->data['comment'] = strip_tags($this->request->post['comment']); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } +}
\ No newline at end of file |