shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

guest.php (15521B)


      1 <?php
      2 class ControllerCheckoutGuest extends Controller {
      3 	public function index() {
      4 		$this->load->language('checkout/checkout');
      5 
      6 		$data['customer_groups'] = array();
      7 
      8 		if (is_array($this->config->get('config_customer_group_display'))) {
      9 			$this->load->model('account/customer_group');
     10 
     11 			$customer_groups = $this->model_account_customer_group->getCustomerGroups();
     12 
     13 			foreach ($customer_groups as $customer_group) {
     14 				if (in_array($customer_group['customer_group_id'], $this->config->get('config_customer_group_display'))) {
     15 					$data['customer_groups'][] = $customer_group;
     16 				}
     17 			}
     18 		}
     19 
     20 		if (isset($this->session->data['guest']['customer_group_id'])) {
     21 			$data['customer_group_id'] = $this->session->data['guest']['customer_group_id'];
     22 		} else {
     23 			$data['customer_group_id'] = $this->config->get('config_customer_group_id');
     24 		}
     25 
     26 		if (isset($this->session->data['guest']['firstname'])) {
     27 			$data['firstname'] = $this->session->data['guest']['firstname'];
     28 		} else {
     29 			$data['firstname'] = '';
     30 		}
     31 
     32 		if (isset($this->session->data['guest']['lastname'])) {
     33 			$data['lastname'] = $this->session->data['guest']['lastname'];
     34 		} else {
     35 			$data['lastname'] = '';
     36 		}
     37 
     38 		if (isset($this->session->data['guest']['email'])) {
     39 			$data['email'] = $this->session->data['guest']['email'];
     40 		} else {
     41 			$data['email'] = '';
     42 		}
     43 
     44 		if (isset($this->session->data['guest']['telephone'])) {
     45 			$data['telephone'] = $this->session->data['guest']['telephone'];
     46 		} else {
     47 			$data['telephone'] = '';
     48 		}
     49 
     50 		if (isset($this->session->data['payment_address']['company'])) {
     51 			$data['company'] = $this->session->data['payment_address']['company'];
     52 		} else {
     53 			$data['company'] = '';
     54 		}
     55 
     56 		if (isset($this->session->data['payment_address']['address_1'])) {
     57 			$data['address_1'] = $this->session->data['payment_address']['address_1'];
     58 		} else {
     59 			$data['address_1'] = '';
     60 		}
     61 
     62 		if (isset($this->session->data['payment_address']['address_2'])) {
     63 			$data['address_2'] = $this->session->data['payment_address']['address_2'];
     64 		} else {
     65 			$data['address_2'] = '';
     66 		}
     67 
     68 		if (isset($this->session->data['payment_address']['postcode'])) {
     69 			$data['postcode'] = $this->session->data['payment_address']['postcode'];
     70 		} elseif (isset($this->session->data['shipping_address']['postcode'])) {
     71 			$data['postcode'] = $this->session->data['shipping_address']['postcode'];
     72 		} else {
     73 			$data['postcode'] = '';
     74 		}
     75 
     76 		if (isset($this->session->data['payment_address']['city'])) {
     77 			$data['city'] = $this->session->data['payment_address']['city'];
     78 		} else {
     79 			$data['city'] = '';
     80 		}
     81 
     82 		if (isset($this->session->data['payment_address']['country_id'])) {
     83 			$data['country_id'] = $this->session->data['payment_address']['country_id'];
     84 		} elseif (isset($this->session->data['shipping_address']['country_id'])) {
     85 			$data['country_id'] = $this->session->data['shipping_address']['country_id'];
     86 		} else {
     87 			$data['country_id'] = $this->config->get('config_country_id');
     88 		}
     89 
     90 		if (isset($this->session->data['payment_address']['zone_id'])) {
     91 			$data['zone_id'] = $this->session->data['payment_address']['zone_id'];
     92 		} elseif (isset($this->session->data['shipping_address']['zone_id'])) {
     93 			$data['zone_id'] = $this->session->data['shipping_address']['zone_id'];
     94 		} else {
     95 			$data['zone_id'] = '';
     96 		}
     97 
     98 		$this->load->model('localisation/country');
     99 
    100 		$data['countries'] = $this->model_localisation_country->getCountries();
    101 
    102 		// Custom Fields
    103 		$this->load->model('account/custom_field');
    104 
    105 		$data['custom_fields'] = $this->model_account_custom_field->getCustomFields();
    106 
    107 		if (isset($this->session->data['guest']['custom_field'])) {
    108 			if (isset($this->session->data['guest']['custom_field'])) {
    109 				$guest_custom_field = $this->session->data['guest']['custom_field'];
    110 			} else {
    111 				$guest_custom_field = array();
    112 			}
    113 
    114 			if (isset($this->session->data['payment_address']['custom_field'])) {
    115 				$address_custom_field = $this->session->data['payment_address']['custom_field'];
    116 			} else {
    117 				$address_custom_field = array();
    118 			}
    119 
    120 			$data['guest_custom_field'] = $guest_custom_field + $address_custom_field;
    121 		} else {
    122 			$data['guest_custom_field'] = array();
    123 		}
    124 
    125 		$data['shipping_required'] = $this->cart->hasShipping();
    126 
    127 		if (isset($this->session->data['guest']['shipping_address'])) {
    128 			$data['shipping_address'] = $this->session->data['guest']['shipping_address'];
    129 		} else {
    130 			$data['shipping_address'] = true;
    131 		}
    132 
    133 		// Captcha
    134 		if ($this->config->get('captcha_' . $this->config->get('config_captcha') . '_status') && in_array('guest', (array)$this->config->get('config_captcha_page'))) {
    135 			$data['captcha'] = $this->load->controller('extension/captcha/' . $this->config->get('config_captcha'));
    136 		} else {
    137 			$data['captcha'] = '';
    138 		}
    139 		
    140 		$this->response->setOutput($this->load->view('checkout/guest', $data));
    141 	}
    142 
    143 	public function save() {
    144 		$this->load->language('checkout/checkout');
    145 
    146 		$json = array();
    147 
    148 		// Validate if customer is logged in.
    149 		if ($this->customer->isLogged()) {
    150 			$json['redirect'] = $this->url->link('checkout/checkout', '', true);
    151 		}
    152 
    153 		// Validate cart has products and has stock.
    154 		if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) {
    155 			$json['redirect'] = $this->url->link('checkout/cart');
    156 		}
    157 
    158 		// Check if guest checkout is available.
    159 		if (!$this->config->get('config_checkout_guest') || $this->config->get('config_customer_price') || $this->cart->hasDownload()) {
    160 			$json['redirect'] = $this->url->link('checkout/checkout', '', true);
    161 		}
    162 
    163 		if (!$json) {
    164 			if ((utf8_strlen(trim($this->request->post['firstname'])) < 1) || (utf8_strlen(trim($this->request->post['firstname'])) > 32)) {
    165 				$json['error']['firstname'] = $this->language->get('error_firstname');
    166 			}
    167 
    168 			if ((utf8_strlen(trim($this->request->post['lastname'])) < 1) || (utf8_strlen(trim($this->request->post['lastname'])) > 32)) {
    169 				$json['error']['lastname'] = $this->language->get('error_lastname');
    170 			}
    171 
    172 			if ((utf8_strlen($this->request->post['email']) > 96) || !filter_var($this->request->post['email'], FILTER_VALIDATE_EMAIL)) {
    173 				$json['error']['email'] = $this->language->get('error_email');
    174 			}
    175 
    176 			if ((utf8_strlen($this->request->post['telephone']) < 3) || (utf8_strlen($this->request->post['telephone']) > 32)) {
    177 
    178 				$json['error']['telephone'] = $this->language->get('error_telephone');
    179 			}
    180 
    181 			if ((utf8_strlen(trim($this->request->post['address_1'])) < 3) || (utf8_strlen(trim($this->request->post['address_1'])) > 128)) {
    182 				$json['error']['address_1'] = $this->language->get('error_address_1');
    183 			}
    184 
    185 			if ((utf8_strlen(trim($this->request->post['city'])) < 2) || (utf8_strlen(trim($this->request->post['city'])) > 128)) {
    186 				$json['error']['city'] = $this->language->get('error_city');
    187 			}
    188 
    189 			$this->load->model('localisation/country');
    190 
    191 			$country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
    192 
    193 			if ($country_info && $country_info['postcode_required'] && (utf8_strlen(trim($this->request->post['postcode'])) < 2 || utf8_strlen(trim($this->request->post['postcode'])) > 10)) {
    194 				$json['error']['postcode'] = $this->language->get('error_postcode');
    195 			}
    196 
    197 			if ($this->request->post['country_id'] == '') {
    198 				$json['error']['country'] = $this->language->get('error_country');
    199 			}
    200 
    201 			if (!isset($this->request->post['zone_id']) || $this->request->post['zone_id'] == '' || !is_numeric($this->request->post['zone_id'])) {
    202 				$json['error']['zone'] = $this->language->get('error_zone');
    203 			}
    204 
    205 			// Customer Group
    206 			if (isset($this->request->post['customer_group_id']) && is_array($this->config->get('config_customer_group_display')) && in_array($this->request->post['customer_group_id'], $this->config->get('config_customer_group_display'))) {
    207 				$customer_group_id = $this->request->post['customer_group_id'];
    208 			} else {
    209 				$customer_group_id = $this->config->get('config_customer_group_id');
    210 			}
    211 
    212 			// Custom field validation
    213 			$this->load->model('account/custom_field');
    214 
    215 			$custom_fields = $this->model_account_custom_field->getCustomFields($customer_group_id);
    216 
    217 			foreach ($custom_fields as $custom_field) {
    218 				if ($custom_field['required'] && empty($this->request->post['custom_field'][$custom_field['location']][$custom_field['custom_field_id']])) {
    219 					$json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
    220 				} elseif (($custom_field['type'] == 'text') && !empty($custom_field['validation']) && !filter_var($this->request->post['custom_field'][$custom_field['location']][$custom_field['custom_field_id']], FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => $custom_field['validation'])))) {
    221                     $json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
    222                 }
    223 			}
    224 
    225 			// Captcha
    226 			if ($this->config->get('captcha_' . $this->config->get('config_captcha') . '_status') && in_array('guest', (array)$this->config->get('config_captcha_page'))) {
    227 				$captcha = $this->load->controller('extension/captcha/' . $this->config->get('config_captcha') . '/validate');
    228 
    229 				if ($captcha) {
    230 					$json['error']['captcha'] = $captcha;
    231 				}
    232 			}
    233 		}
    234 
    235 		if (!$json) {
    236 			$this->session->data['account'] = 'guest';
    237 
    238 			$this->session->data['guest']['customer_group_id'] = $customer_group_id;
    239 			$this->session->data['guest']['firstname'] = $this->request->post['firstname'];
    240 			$this->session->data['guest']['lastname'] = $this->request->post['lastname'];
    241 			$this->session->data['guest']['email'] = $this->request->post['email'];
    242 			$this->session->data['guest']['telephone'] = $this->request->post['telephone'];
    243 
    244 			if (isset($this->request->post['custom_field']['account'])) {
    245 				$this->session->data['guest']['custom_field'] = $this->request->post['custom_field']['account'];
    246 			} else {
    247 				$this->session->data['guest']['custom_field'] = array();
    248 			}
    249 
    250 			$this->session->data['payment_address']['firstname'] = $this->request->post['firstname'];
    251 			$this->session->data['payment_address']['lastname'] = $this->request->post['lastname'];
    252 			$this->session->data['payment_address']['company'] = $this->request->post['company'];
    253 			$this->session->data['payment_address']['address_1'] = $this->request->post['address_1'];
    254 			$this->session->data['payment_address']['address_2'] = $this->request->post['address_2'];
    255 			$this->session->data['payment_address']['postcode'] = $this->request->post['postcode'];
    256 			$this->session->data['payment_address']['city'] = $this->request->post['city'];
    257 			$this->session->data['payment_address']['country_id'] = $this->request->post['country_id'];
    258 			$this->session->data['payment_address']['zone_id'] = $this->request->post['zone_id'];
    259 
    260 			$this->load->model('localisation/country');
    261 
    262 			$country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
    263 
    264 			if ($country_info) {
    265 				$this->session->data['payment_address']['country'] = $country_info['name'];
    266 				$this->session->data['payment_address']['iso_code_2'] = $country_info['iso_code_2'];
    267 				$this->session->data['payment_address']['iso_code_3'] = $country_info['iso_code_3'];
    268 				$this->session->data['payment_address']['address_format'] = $country_info['address_format'];
    269 			} else {
    270 				$this->session->data['payment_address']['country'] = '';
    271 				$this->session->data['payment_address']['iso_code_2'] = '';
    272 				$this->session->data['payment_address']['iso_code_3'] = '';
    273 				$this->session->data['payment_address']['address_format'] = '';
    274 			}
    275 
    276 			if (isset($this->request->post['custom_field']['address'])) {
    277 				$this->session->data['payment_address']['custom_field'] = $this->request->post['custom_field']['address'];
    278 			} else {
    279 				$this->session->data['payment_address']['custom_field'] = array();
    280 			}
    281 
    282 			$this->load->model('localisation/zone');
    283 
    284 			$zone_info = $this->model_localisation_zone->getZone($this->request->post['zone_id']);
    285 
    286 			if ($zone_info) {
    287 				$this->session->data['payment_address']['zone'] = $zone_info['name'];
    288 				$this->session->data['payment_address']['zone_code'] = $zone_info['code'];
    289 			} else {
    290 				$this->session->data['payment_address']['zone'] = '';
    291 				$this->session->data['payment_address']['zone_code'] = '';
    292 			}
    293 
    294 			if (!empty($this->request->post['shipping_address'])) {
    295 				$this->session->data['guest']['shipping_address'] = $this->request->post['shipping_address'];
    296 			} else {
    297 				$this->session->data['guest']['shipping_address'] = false;
    298 			}
    299 
    300 			if ($this->session->data['guest']['shipping_address']) {
    301 				$this->session->data['shipping_address']['firstname'] = $this->request->post['firstname'];
    302 				$this->session->data['shipping_address']['lastname'] = $this->request->post['lastname'];
    303 				$this->session->data['shipping_address']['company'] = $this->request->post['company'];
    304 				$this->session->data['shipping_address']['address_1'] = $this->request->post['address_1'];
    305 				$this->session->data['shipping_address']['address_2'] = $this->request->post['address_2'];
    306 				$this->session->data['shipping_address']['postcode'] = $this->request->post['postcode'];
    307 				$this->session->data['shipping_address']['city'] = $this->request->post['city'];
    308 				$this->session->data['shipping_address']['country_id'] = $this->request->post['country_id'];
    309 				$this->session->data['shipping_address']['zone_id'] = $this->request->post['zone_id'];
    310 
    311 				if ($country_info) {
    312 					$this->session->data['shipping_address']['country'] = $country_info['name'];
    313 					$this->session->data['shipping_address']['iso_code_2'] = $country_info['iso_code_2'];
    314 					$this->session->data['shipping_address']['iso_code_3'] = $country_info['iso_code_3'];
    315 					$this->session->data['shipping_address']['address_format'] = $country_info['address_format'];
    316 				} else {
    317 					$this->session->data['shipping_address']['country'] = '';
    318 					$this->session->data['shipping_address']['iso_code_2'] = '';
    319 					$this->session->data['shipping_address']['iso_code_3'] = '';
    320 					$this->session->data['shipping_address']['address_format'] = '';
    321 				}
    322 
    323 				if ($zone_info) {
    324 					$this->session->data['shipping_address']['zone'] = $zone_info['name'];
    325 					$this->session->data['shipping_address']['zone_code'] = $zone_info['code'];
    326 				} else {
    327 					$this->session->data['shipping_address']['zone'] = '';
    328 					$this->session->data['shipping_address']['zone_code'] = '';
    329 				}
    330 
    331 				if (isset($this->request->post['custom_field']['address'])) {
    332 					$this->session->data['shipping_address']['custom_field'] = $this->request->post['custom_field']['address'];
    333 				} else {
    334 					$this->session->data['shipping_address']['custom_field'] = array();
    335 				}
    336 			}
    337 
    338 			unset($this->session->data['shipping_method']);
    339 			unset($this->session->data['shipping_methods']);
    340 			unset($this->session->data['payment_method']);
    341 			unset($this->session->data['payment_methods']);
    342 		}
    343 
    344 		$this->response->addHeader('Content-Type: application/json');
    345 		$this->response->setOutput(json_encode($json));
    346 	}
    347 }