* @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 7551 $ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (Configuration::get('VATNUMBER_MANAGEMENT') AND file_exists(_PS_MODULE_DIR_.'vatnumber/vatnumber.php')) include_once(_PS_MODULE_DIR_.'vatnumber/vatnumber.php'); class AddressControllerCore extends FrontController { public $auth = true; public $guestAllowed = true; public $php_self = 'address.php'; public $authRedirection = 'addresses.php'; public $ssl = true; protected $_address; public function preProcess() { parent::preProcess(); if ($back = Tools::getValue('back')) self::$smarty->assign('back', Tools::safeOutput($back)); if ($mod = Tools::getValue('mod')) self::$smarty->assign('mod', Tools::safeOutput($mod)); if (Tools::isSubmit('ajax') AND Tools::isSubmit('type')) { if (Tools::getValue('type') == 'delivery') $id_address = isset(self::$cart->id_address_delivery) ? (int)self::$cart->id_address_delivery : 0; elseif (Tools::getValue('type') == 'invoice') $id_address = (isset(self::$cart->id_address_invoice) AND self::$cart->id_address_invoice != self::$cart->id_address_delivery) ? (int)self::$cart->id_address_invoice : 0; else exit; } else $id_address = (int)Tools::getValue('id_address', 0); if ($id_address) { $this->_address = new Address((int)$id_address); if (Validate::isLoadedObject($this->_address) AND Customer::customerHasAddress((int)(self::$cookie->id_customer), (int)($id_address))) { if (Tools::isSubmit('delete')) { if (self::$cart->id_address_invoice == $this->_address->id) unset(self::$cart->id_address_invoice); if (self::$cart->id_address_delivery == $this->_address->id) unset(self::$cart->id_address_delivery); if ($this->_address->delete()) Tools::redirect('addresses.php'); $this->errors[] = Tools::displayError('This address cannot be deleted.'); } self::$smarty->assign(array('address' => $this->_address, 'id_address' => (int)$id_address)); } elseif (Tools::isSubmit('ajax')) exit; else Tools::redirect('addresses.php'); } if (Tools::isSubmit('submitAddress')) { $address = new Address(); $this->errors = $address->validateControler(); $address->id_customer = (int)(self::$cookie->id_customer); if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) $this->errors[] = Tools::displayError('You must register at least one phone number'); if (!$country = new Country((int)$address->id_country) OR !Validate::isLoadedObject($country)) die(Tools::displayError()); /* US customer: normalize the address */ if ($address->id_country == Country::getByIso('US')) { include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php'); $normalize = new AddressStandardizationSolution; $address->address1 = $normalize->AddressLineStandardization($address->address1); $address->address2 = $normalize->AddressLineStandardization($address->address2); } $zip_code_format = $country->zip_code_format; if ($country->need_zip_code) { if (($postcode = Tools::getValue('postcode')) AND $zip_code_format) { $zip_regexp = '/^'.$zip_code_format.'$/ui'; $zip_regexp = str_replace(' ', '( |)', $zip_regexp); $zip_regexp = str_replace('-', '(-|)', $zip_regexp); $zip_regexp = str_replace('N', '[0-9]', $zip_regexp); $zip_regexp = str_replace('L', '[a-zA-Z]', $zip_regexp); $zip_regexp = str_replace('C', $country->iso_code, $zip_regexp); if (!preg_match($zip_regexp, $postcode)) $this->errors[] = ''.Tools::displayError('Zip/ Postal code').' '.Tools::displayError('is invalid.').'
'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $zip_code_format))); } elseif ($zip_code_format) $this->errors[] = ''.Tools::displayError('Zip/ Postal code').' '.Tools::displayError('is required.'); elseif ($postcode AND !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode)) $this->errors[] = ''.Tools::displayError('Zip/ Postal code').' '.Tools::displayError('is invalid.').'
'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $zip_code_format))); } if ($country->isNeedDni() AND (!Tools::getValue('dni') OR !Validate::isDniLite(Tools::getValue('dni')))) $this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.'); elseif (!$country->isNeedDni()) $address->dni = NULL; if (Configuration::get('PS_TOKEN_ENABLE') == 1 AND strcmp(Tools::getToken(false), Tools::getValue('token')) AND self::$cookie->isLogged(true) === true) $this->errors[] = Tools::displayError('Invalid token'); if ((int)($country->contains_states) AND !(int)($address->id_state)) $this->errors[] = Tools::displayError('This country requires a state selection.'); if (!sizeof($this->errors)) { if (isset($id_address)) { $country = new Country((int)($address->id_country)); if (Validate::isLoadedObject($country) AND !$country->contains_states) $address->id_state = 0; $address_old = new Address((int)$id_address); if (Validate::isLoadedObject($address_old) AND Customer::customerHasAddress((int)self::$cookie->id_customer, (int)$address_old->id)) { if ($address_old->isUsed()) { $address_old->delete(); if (!Tools::isSubmit('ajax')) { $to_update = false; if (self::$cart->id_address_invoice == $address_old->id) { $to_update = true; self::$cart->id_address_invoice = 0; } if (self::$cart->id_address_delivery == $address_old->id) { $to_update = true; self::$cart->id_address_delivery = 0; } if ($to_update) self::$cart->update(); } } else { $address->id = (int)($address_old->id); $address->date_add = $address_old->date_add; } } } elseif (self::$cookie->is_guest) Tools::redirect('addresses.php'); if ($result = $address->save()) { /* In order to select this new address : order-address.tpl */ if ((bool)(Tools::getValue('select_address', false)) == true OR (Tools::isSubmit('ajax') AND Tools::getValue('type') == 'invoice')) { /* This new adress is for invoice_adress, select it */ self::$cart->id_address_invoice = (int)($address->id); self::$cart->update(); } if (Tools::isSubmit('ajax')) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'id_address_delivery' => self::$cart->id_address_delivery, 'id_address_invoice' => self::$cart->id_address_invoice ); die(Tools::jsonEncode($return)); } Tools::redirect($back ? ($mod ? $back.'&back='.$mod : $back) : 'addresses.php'); } $this->errors[] = Tools::displayError('An error occurred while updating your address.'); } } elseif (!$id_address) { $customer = new Customer((int)(self::$cookie->id_customer)); if (Validate::isLoadedObject($customer)) { $_POST['firstname'] = $customer->firstname; $_POST['lastname'] = $customer->lastname; } } if (Tools::isSubmit('ajax') AND sizeof($this->errors)) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors ); die(Tools::jsonEncode($return)); } } public function setMedia() { parent::setMedia(); Tools::addJS(_THEME_JS_DIR_.'tools/statesManagement.js'); } public function process() { parent::process(); /* Secure restriction for guest */ if (self::$cookie->is_guest) Tools::redirect('addresses.php'); if (Tools::isSubmit('id_country') AND Tools::getValue('id_country') != NULL AND is_numeric(Tools::getValue('id_country'))) $selectedCountry = (int)Tools::getValue('id_country'); elseif (isset($this->_address) AND isset($this->_address->id_country) AND !empty($this->_address->id_country) AND is_numeric($this->_address->id_country)) $selectedCountry = (int)$this->_address->id_country; elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $array = preg_split('/,|-/', $_SERVER['HTTP_ACCEPT_LANGUAGE']); if (!Validate::isLanguageIsoCode($array[0]) OR !($selectedCountry = Country::getByIso($array[0]))) $selectedCountry = (int)Configuration::get('PS_COUNTRY_DEFAULT'); } else $selectedCountry = (int)Configuration::get('PS_COUNTRY_DEFAULT'); $countries = Country::getCountries((int)self::$cookie->id_lang, true); $countriesList = ''; foreach ($countries AS $country) $countriesList .= ''; if ((Configuration::get('VATNUMBER_MANAGEMENT') AND file_exists(_PS_MODULE_DIR_.'vatnumber/vatnumber.php')) && VatNumber::isApplicable(Configuration::get('PS_COUNTRY_DEFAULT'))) self::$smarty->assign('vat_display', 2); elseif (Configuration::get('VATNUMBER_MANAGEMENT')) self::$smarty->assign('vat_display', 1); else self::$smarty->assign('vat_display', 0); self::$smarty->assign('ajaxurl', _MODULE_DIR_); self::$smarty->assign('vatnumber_ajax_call', (int)file_exists(_PS_MODULE_DIR_.'vatnumber/ajax.php')); self::$smarty->assign(array( 'countries_list' => $countriesList, 'countries' => $countries, 'errors' => $this->errors, 'token' => Tools::getToken(false), 'select_address' => (int)(Tools::getValue('select_address')) )); } protected function _processAddressFormat() { $id_country = is_null($this->_address)? 0 : (int)$this->_address->id_country; $dlv_adr_fields = AddressFormat::getOrderedAddressFields($id_country, true, true); self::$smarty->assign('ordered_adr_fields', $dlv_adr_fields); } public function displayHeader() { if (Tools::getValue('ajax') != 'true') parent::displayHeader(); } public function displayContent() { parent::displayContent(); $this->_processAddressFormat(); self::$smarty->display(_PS_THEME_DIR_.'address.tpl'); } public function displayFooter() { if (Tools::getValue('ajax') != 'true') parent::displayFooter(); } }