UPGRADE NOTE:
Do not edit or add to this file if you wish to upgrade AbanteCart to newer
versions in the future. If you wish to customize AbanteCart for your
needs please refer to http://www.AbanteCart.com for more information.
------------------------------------------------------------------------------*/
if (! defined ( 'DIR_CORE' )) {
header ( 'Location: static_pages/' );
}
class ControllerPagesCheckoutCart extends AController {
private $error = array();
public $data = array();
public function main() {
$error_msg = array();
//init controller data
$this->extensions->hk_InitData($this,__FUNCTION__);
if ($this->request->is_GET() && isset($this->request->get['product_id']) ) {
if (isset($this->request->get['option'])) {
$option = $this->request->get['option'];
} else {
$option = array();
}
if (isset($this->request->get['quantity'])) {
$quantity = $this->request->get['quantity'];
} else {
$quantity = 1;
}
unset($this->session->data['shipping_methods']);
unset($this->session->data['shipping_method']);
unset($this->session->data['payment_methods']);
unset($this->session->data['payment_method']);
$this->cart->add($this->request->get['product_id'], $quantity, $option);
$this->redirect($this->html->getSecureURL('checkout/cart'));
} else if ($this->request->is_POST()) {
//if this is coupon, validate and apply
if ( isset($this->request->post['coupon']) && $this->_validateCoupon() ) {
$this->session->data[ 'coupon' ] = $this->request->post[ 'coupon' ];
$this->data['success'] = $this->session->data[ 'success' ] = $this->language->get('text_coupon_success');
//process data
$this->extensions->hk_ProcessData($this);
}
if ($this->error['error_warning']) {
$error_msg[] = $this->error['error_warning'];
}
if (isset($this->request->post['quantity'])) {
//we update cart
if (!is_array($this->request->post['quantity'])) {
$this->loadModel('catalog/product');
$product_id = $this->request->post['product_id'];
if (isset($this->request->post['option'])) {
$options = $this->request->post['option'];
} else {
$options = array();
}
if ( has_value($this->request->files['option']['name']) ) {
$am = new AAttribute('product_option');
$fm = new AFile();
foreach ( $this->request->files['option']['name'] as $id => $name ) {
$attribute_data = $am->getAttributeByProductOptionId($id);
$file_path_info = $fm->getUploadFilePath($attribute_data['settings']['directory'], $name);
$options[$id] = $file_path_info['name'];
if ( $text_errors = $this->model_catalog_product->validateProductOptions($product_id, $options) ) {
$this->session->data['error'] = implode('
',$text_errors);
$this->redirect($_SERVER['HTTP_REFERER']);
} elseif ( !has_value($name) ) {
continue;
}
$file_data = array(
'option_id' => $id,
'name' => $file_path_info['name'],
'path' => $file_path_info['path'],
'type' => $this->request->files['option']['type'][$id],
'tmp_name' => $this->request->files['option']['tmp_name'][$id],
'error' => $this->request->files['option']['error'][$id],
'size' => $this->request->files['option']['size'][$id],
);
$file_errors = $fm->validateFileOption($attribute_data['settings'], $file_data);
if ( has_value($file_errors) ) {
$this->session->data['error'] = implode('
', $file_errors);
$this->redirect($_SERVER['HTTP_REFERER']);
} else {
$result = move_uploaded_file($file_data['tmp_name'], $file_path_info['path']);
if ( !$result || $this->request->files[ 'package_file' ]['error'] ) {
$this->session->data['error'] .= '
Error: ' . getTextUploadError($this->request->files['option']['error'][$id]);
$this->redirect($_SERVER['HTTP_REFERER']);
}
}
$dataset = new ADataset('file_uploads','admin');
$dataset->addRows(
array(
'date_added'=> date("Y-m-d H:i:s",time()),
'name' => $file_path_info['name'],
'type' => $file_data['type'],
'section' => 'product_option',
'section_id' => $attribute_data['attribute_id'],
'path' => $file_path_info['path'],
)
);
}
}
if ($text_errors = $this->model_catalog_product->validateProductOptions($product_id, $options) ) {
$this->session->data['error'] = $text_errors;
//send options values back via _GET
$url = '&'.http_build_query(array('option' => $this->request->post['option']));
$this->redirect($this->html->getSecureURL('product/product','&product_id='.$this->request->post['product_id'].$url));
}
$this->cart->add($this->request->post['product_id'], $this->request->post['quantity'], $options);
} else {
foreach ($this->request->post['quantity'] as $key => $value) {
$this->cart->update($key, $value);
}
}
unset($this->session->data['shipping_methods']);
unset($this->session->data['shipping_method']);
unset($this->session->data['payment_methods']);
unset($this->session->data['payment_method']);
#upate min and max
$this->cart->setMinQty();
$this->cart->setMaxQty();
}
if (isset($this->request->post['remove'])) {
foreach (array_keys($this->request->post['remove']) as $key) {
$this->cart->remove($key);
}
}
//next page is requested after cart update
if (isset($this->request->post['next_step'])) {
$this->redirect($this->html->getSecureURL($this->request->post['next_step']));
}
if (isset($this->request->post['redirect'])) {
$this->session->data['redirect'] = $this->request->post['redirect'];
}
if (isset($this->request->post['quantity']) || isset($this->request->post['remove'])) {
unset($this->session->data['shipping_methods']);
unset($this->session->data['shipping_method']);
unset($this->session->data['payment_methods']);
unset($this->session->data['payment_method']);
$this->redirect($this->html->getSecureURL('checkout/cart'));
}
}
$this->document->setTitle( $this->language->get('heading_title') );
$this->document->resetBreadcrumbs();
$this->document->addBreadcrumb( array (
'href' => $this->html->getURL('index/home'),
'text' => $this->language->get('text_home'),
'separator' => FALSE
));
$this->document->addBreadcrumb( array (
'href' => $this->html->getURL('checkout/cart'),
'text' => $this->language->get('text_basket'),
'separator' => $this->language->get('text_separator')
));
if ($this->cart->hasProducts()) {
if (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout')) {
$error_msg[] = $this->language->get('error_stock');
}
$this->loadModel('tool/seo_url');
$products = array();
$resource = new AResource('image');
$form = new AForm();
$form->setForm(array( 'form_name' => 'cart' ));
$this->data['form'][ 'form_open' ] = $form->getFieldHtml(
array( 'type' => 'form',
'name' => 'cart',
'action' => $this->html->getSecureURL('checkout/cart')));
$cart_products = $this->cart->getProducts();
foreach ($cart_products as $result) {
$option_data = array();
$thumbnail = $resource->getMainThumb('products',
$result['product_id'],
(int)$this->config->get('config_image_cart_width'),
(int)$this->config->get('config_image_cart_height'),true);
foreach ($result['option'] as $option) {
$option_data[] = array(
'name' => $option['name'],
'value' => $option['value']
);
}
$products[] = array(
'remove' => $form->getFieldHtml( array( 'type' => 'checkbox',
'name' => 'remove['.$result['key'].']',
)),
'key' => $result['key'],
'name' => $result['name'],
'model' => $result['model'],
'thumb' => $thumbnail,
'option' => $option_data,
'quantity' => $form->getFieldHtml( array( 'type' => 'input',
'name' => 'quantity['.$result['key'].']',
'value' => $result['quantity'],
'attr' => ' size="3" ',
'style' => 'short'
)),
'stock' => $result['stock'],
'price' => $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))),
'total' => $this->currency->format($this->tax->calculate($result['total'], $result['tax_class_id'], $this->config->get('config_tax'))),
'href' => $this->html->getSEOURL('product/product', '&product_id=' . $result['product_id'],true)
);
}
$this->data['products'] = $products ;
$this->data['form'][ 'update' ] = $form->getFieldHtml( array(
'type' => 'submit',
'name' => $this->language->get('button_update') ));
$this->data['form'][ 'checkout' ] = $form->getFieldHtml( array(
'type' => 'button',
'name' => 'checkout',
'text' => $this->language->get('button_checkout'),
'style' => 'button' ));
if ($this->config->get('config_cart_weight')) {
$this->data['weight'] = $this->weight->format($this->cart->getWeight(), $this->config->get('config_weight_class'));
} else {
$this->data['weight'] = FALSE;
}
$display_totals = $this->cart->buildTotalDisplay();
$this->data['totals'] = $display_totals['total_data'];;
if (isset($this->session->data['redirect'])) {
$this->data['continue'] = str_replace('&','&',$this->session->data['redirect']);
unset($this->session->data['redirect']);
} else {
$this->data['continue'] = $this->html->getURL('index/home');
}
$this->data['form'][ 'continue_shopping' ] = $form->getFieldHtml(
array(
'type' => 'button',
'name' => 'continue_shopping',
'text' => $this->language->get('button_shopping'),
'style' => 'button',
'href' => $this->data['continue']
)
);
$this->data['checkout'] = $this->html->getSecureURL('checkout/shipping');
$this->data['checkout_rt'] = 'checkout/shipping';
#Check if order total max/min is set and met
$cf_total_min = $this->config->get('total_order_minimum');
$cf_total_max = $this->config->get('total_order_maximum');
if ( !$this->cart->hasMinRequirement() ) {
$this->data['form'][ 'checkout' ] = '';
$error_msg[] = sprintf($this->language->get('error_order_minimum'), $this->currency->format($cf_total_min) );
}
if ( !$this->cart->hasMaxRequirement() ) {
$this->data['form'][ 'checkout' ] = '';
$error_msg[] = sprintf($this->language->get('error_order_maximum'), $this->currency->format($cf_total_max) );
}
//prepare coupon display
if($this->config->get('config_coupon_on_cart_page')){
$this->view->assign( 'coupon_status', $this->config->get('coupon_status') );
$action = $this->html->getSecureURL('checkout/cart');
$coupon_form = $this->dispatch('blocks/coupon_codes', array('action' => $action));
$this->view->assign('coupon_form', $coupon_form->dispatchGetOutput() );
}
if($this->config->get('config_shipping_tax_estimate')){
$form = new AForm();
$form->setForm(array( 'form_name' => 'estimate' ));
$this->data['form_estimate']['form_open'] = $form->getFieldHtml(
array( 'type' => 'form',
'name' => 'estimate',
'action' => $this->html->getSecureURL('checkout/cart')));
$this->data['estimates_enabled'] = true;
}
//try to get shipping address details if we have them
$country_id = $this->config->get('config_country_id');
if ($this->session->data[ 'shipping_address_id' ] ) {
$this->loadModel('account/address');
$shipping_address = $this->model_account_address->getAddress($this->session->data[ 'shipping_address_id' ]);
$postcode = $shipping_address['postcode'];
$country_id = $shipping_address['country_id'];
$zone_id = $shipping_address['zone_id'];
}
// use default address of customer for estimate form whe shipping address is unknown
if(!$zone_id && $this->customer->isLogged()){
$this->loadModel('account/address');
$payment_address = $this->model_account_address->getAddress($this->customer->getAddressId());
$postcode = $payment_address['postcode'];
$country_id = $payment_address['country_id'];
$zone_id = $payment_address['zone_id'];
}
if ($this->request->post['postcode']) {
$postcode = $this->request->post['postcode'];
}
if ($this->request->post['country'][0]) {
$country_id = $this->request->post['country'][0];
}
if ($this->request->post['country_zones'][0]) {
$zone_id = $this->request->post['country_zones'][0];
}
if ( $zone_id ) {
$this->loadModel('localisation/zone');
$zone_data = $this->model_localisation_zone->getZone($zone_id);
}
$this->data['form_estimate']['postcode'] = $form->getFieldHtml( array(
'type' => 'input',
'name' => 'postcode',
'value' => $postcode,
'style' => 'short',
));
$this->data['form_estimate']['country_zones'] = $form->getFieldHtml( array(
'type' => 'zones',
'name' => 'country',
'submit_mode' => 'id',
'value' => $country_id,
'zone_name' => $zone_data['name'],
'zone_value' => $zone_id
));
$this->data['form_estimate']['submit'] = $form->getFieldHtml( array(
'type' => 'submit',
'name' => $this->language->get('button_text_estimate')
));
if($this->session->data['error']){
$error_msg[] = $this->session->data['error'];
unset($this->session->data['error']);
}
$this->view->assign('error_warning', $error_msg );
$this->view->setTemplate( 'pages/checkout/cart.tpl' );
} else {
$this->data['heading_title'] = $this->language->get('heading_title');
$this->data['text_error'] = $this->language->get('text_error');
$this->data['button_continue'] = HtmlElementFactory::create( array('name' => 'continue',
'type' => 'button',
'text' => $this->language->get('button_continue'),
'href' => $this->html->getURL('index/home'),
'style' => 'button' ));
$this->view->setTemplate( 'pages/error/not_found.tpl' );
}
$this->view->batchAssign( $this->data);
$this->processTemplate();
//init controller data
$this->extensions->hk_UpdateData($this,__FUNCTION__);
}
private function _validateCoupon() {
$promotion = new APromotion();
$coupon = $promotion->getCouponData($this->request->post['coupon']);
if (!$coupon) {
$this->error[ 'error_warning' ] = $this->language->get('error_coupon');
}
if (!$this->error) {
return TRUE;
} else {
return FALSE;
}
}
}