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 }