diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Block/Adminhtml/System/Config/Form/Validexceptions.php b/app/code/community/ExtensionsStore/Addressvalidator/Block/Adminhtml/System/Config/Form/Validexceptions.php deleted file mode 100755 index eaa9ed5..0000000 --- a/app/code/community/ExtensionsStore/Addressvalidator/Block/Adminhtml/System/Config/Form/Validexceptions.php +++ /dev/null @@ -1,227 +0,0 @@ - - */ -class ExtensionsStore_Addressvalidator_Block_Adminhtml_System_Config_Form_Validexceptions extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract -{ - - public function __construct() - { - $this->addColumn('country_name', array( - 'label' => Mage::helper('addressvalidator')->__('Country Name'), - 'style' => 'width:120px', - )); - $this->addColumn('iso3_code', array( - 'label' => Mage::helper('addressvalidator')->__('Country Code'), - 'style' => 'width:50px', - )); - - $this->addColumn('V4', array( - 'label' => Mage::helper('addressvalidator')->__('V4'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('V3', array( - 'label' => Mage::helper('addressvalidator')->__('V3'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('V2', array( - 'label' => Mage::helper('addressvalidator')->__('V2'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('V1', array( - 'label' => Mage::helper('addressvalidator')->__('V1'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - - $this->addColumn('C4', array( - 'label' => Mage::helper('addressvalidator')->__('C4'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('C3', array( - 'label' => Mage::helper('addressvalidator')->__('C3'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('C2', array( - 'label' => Mage::helper('addressvalidator')->__('C2'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('C1', array( - 'label' => Mage::helper('addressvalidator')->__('C1'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - - $this->addColumn('I4', array( - 'label' => Mage::helper('addressvalidator')->__('I4'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('I3', array( - 'label' => Mage::helper('addressvalidator')->__('I3'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('I2', array( - 'label' => Mage::helper('addressvalidator')->__('I2'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - $this->addColumn('I1', array( - 'label' => Mage::helper('addressvalidator')->__('I1'), - 'style' => 'width:10px', - 'class' => 'checkbox', - )); - - $this->_addAfter = false; - $this->_addButtonLabel = Mage::helper('addressvalidator')->__('Add field'); - parent::__construct(); - } - - /** - * Render array cell for prototypeJS template - * - * @param string $columnName - * @return string - */ - protected function _renderCellTemplate($columnName) - { - if (empty($this->_columns[$columnName])) { - throw new Exception('Wrong column name specified.'); - } - $column = $this->_columns[$columnName]; - $inputName = $this->getElement()->getName() . '[#{_id}][' . $columnName . ']'; - - if ($column['renderer']) { - return $column['renderer']->setInputName($inputName)->setColumnName($columnName)->setColumn($column) - ->toHtml(); - } - - $return = ''; - - if ($columnName == 'country_name' || $columnName == 'iso3_code'){ - $return .= ''; - - - } else { - $return .= '' . - ''; - - } - - return $return; - } - - /** - * Get element html - * - * @return string - */ - public function _getElementHtml(Varien_Data_Form_Element_Abstract $element) - { - $html = parent::_getElementHtml($element); - $html .= $this->_getChecker(); - return $html; - } - - public function _getChecker() - { - $id = $this->getHtmlId(); - $elementName = $this->getElement()->getName(); - $elementName = str_replace(array('[',']'),array('\[','\]'),$elementName); - - $script = -''; - - - return $script; - } - - /** - * Generate the default field array for Jordan, SA and UAE - * - * @param Varien_Data_Form_Element_Abstract $element - * @return string - */ - protected function _getElementHtml2(Varien_Data_Form_Element_Abstract $element) - { - $countriesCollection = Mage::getResourceModel('directory/country_collection'); - $countriesCollection->addFieldToFilter('country_id',array('in'=>array('JO','NZ','SA','AE'))); - - $countries = array(); - - foreach ($countriesCollection as $country) { - $name = Mage::app()->getLocale()->getCountryTranslation($country->getId()); - if (!empty($name)) { - $countries[$name] = $country; - } - } - - Mage::helper('core/string')->ksortMultibyte($countries); - - $rows = array(); - - foreach ($countries as $name=>$country){ - $rows[] = array( - 'country_name'=>$name, - 'iso3_code'=>$country->getIso3Code(), - 'V4' => 1, - 'V3' => 1, - 'V2' => 1, - 'V1' => 0, - 'C4' => 1, - 'C3' => 1, - 'C2' => 1, - 'C1' => 0, - 'I4' => 1, - 'I3' => 1, - 'I2' => 0, - 'I1' => 0, - ); - } - - echo serialize($rows); - - exit(); - - return ''; - } -} diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Block/Checkout/Onepage/Billing.php b/app/code/community/ExtensionsStore/Addressvalidator/Block/Checkout/Onepage/Billing.php old mode 100755 new mode 100644 index 7d0757c..89bafe9 --- a/app/code/community/ExtensionsStore/Addressvalidator/Block/Checkout/Onepage/Billing.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Block/Checkout/Onepage/Billing.php @@ -7,22 +7,19 @@ * @package ExtensionsStore_Addressvalidator * @author Extensions Store */ - -class ExtensionsStore_Addressvalidator_Block_Checkout_Onepage_Billing extends Mage_Checkout_Block_Onepage_Billing -{ - /** - * Insert script tag before billing step, to add nextStep overrides to Billing and Shipping objects - * - * @param string $html - * @return string - */ - protected function _afterToHtml($html) - { - $helper = Mage::helper('addressvalidator'); - if ($helper->enabled()){ - $html = ''.$html; - } - - return $html; - } +class ExtensionsStore_Addressvalidator_Block_Checkout_Onepage_Billing extends Mage_Checkout_Block_Onepage_Billing { + /** + * Insert script tag before billing step, to add nextStep overrides to Billing and Shipping objects + * + * @param string $html + * @return string + */ + protected function _afterToHtml($html) { + $helper = Mage::helper ( 'addressvalidator' ); + if ($helper->enabled ()) { + $html = '' . $html; + } + + return $html; + } } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Helper/Data.php b/app/code/community/ExtensionsStore/Addressvalidator/Helper/Data.php old mode 100755 new mode 100644 index 9f58412..0b4a881 --- a/app/code/community/ExtensionsStore/Addressvalidator/Helper/Data.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Helper/Data.php @@ -8,322 +8,299 @@ * @author Extensions Store */ class ExtensionsStore_Addressvalidator_Helper_Data extends Mage_Core_Helper_Abstract { - - const MIN_ATTEMPTS = 1; - const DEFAULT_ATTEMPTS = 3; - const MAX_ATTEMPTS = 25; - - /** - * - * @var array $_messaging - */ - protected $_messaging; - - /** - * Popup messaging nodes - */ - public function __construct() { - $messagingNodes = Mage::getConfig()->getNode('default/extensions_store_addressvalidator/messaging'); - $this->_messaging = json_decode(json_encode((array) $messagingNodes), true); - } - - /** - * Debug mode for local and stage - * @return boolean - */ - public function isDebug() { - $storeId = Mage::app()->getStore()->getId(); - $debug = (bool) Mage::getStoreConfig('extensions_store_addressvalidator/configuration/debug_mode', $storeId); - return $debug; - } - - /** - * @return boolean - */ - public function enabled(){ - $storeId = Mage::app()->getStore()->getId(); - $enabled = (bool) Mage::getStoreConfig('extensions_store_addressvalidator/configuration/enabled', $storeId); - return $enabled; - } - - /** - * Validate billing/shipping address on checkout - * - * @param Mage_Core_Model_Store $store - * @return boolean - */ - public function tooManyAttempts() { - $numAttempts = (int) Mage::getStoreConfig('extensions_store_addressvalidator/configuration/num_attempts'); - $numAttempts = ($numAttempts >= self::MIN_ATTEMPTS && $numAttempts <= self::MAX_ATTEMPTS) ? $numAttempts : self::DEFAULT_ATTEMPTS; - $numAttempts = ($this->isDebug()) ? 99999 : $numAttempts; - - $checkoutSession = Mage::getSingleton('checkout/session'); - $numAttempted = (int) $checkoutSession->getData('num_attempted'); - $checkoutSession->setData('num_attempted', $numAttempted+1); - - return $numAttempted > $numAttempts; - } - - /** - * - * @param string $messageKey - * @return string|boolean - */ - public function getMessaging($messageKey) { - if (in_array($messageKey, array_keys($this->_messaging))) { - - $message = Mage::getStoreConfig("extensions_store_addressvalidator/messaging/$messageKey"); - return $message; - } - - return false; - } - - /** - * Validate billing/shipping address on checkout - * - * @param Mage_Core_Model_Store $store - * @return boolean - */ - public function validateStore($store) { - $storeId = $store->getId(); - - $validateStore = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/enabled', $storeId); - - return $validateStore; - } - - /** - * Get service from store config - * - * @param int $storeId - * @param bool $international - * @return array - */ - public function getServices($storeId, $international=false) { - - $services = array(); - $service = ($international) ? 'service_international' : 'service'; - $configService = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/'.$service, $storeId); - $configService = ($configService) ? $configService : 'usps'; - $alias = 'extensions_store_addressvalidator/service_' . $configService; - $services['service'] = Mage::getModel($alias); - - if (Mage::getStoreConfig('extensions_store_addressvalidator/configuration/service2', $storeId)){ - $configService2 = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/service2', $storeId); - $alias = 'extensions_store_addressvalidator/service_' . $configService2; - $services['service2'] = Mage::getModel($alias); - } - - return $services; - } - - /** - * - * @param Mage_Customer_Model_Address|Mage_Sales_Model_Quote_Address $customerAddress - * @return array - */ - public function getExtractableAddressArray($customerAddress) { - $firstname = $customerAddress->getFirstname(); - $lastname = $customerAddress->getLastname(); - $name = $firstname . " " . $lastname; - $name = trim($name); - $email = $customerAddress->getEmail(); - $company = $customerAddress->getCompany(); - $street = $customerAddress->getStreet(); - $street1 = $street[0]; - $street2 = (isset($street[1])) ? $street[1] : ''; - $city = $customerAddress->getCity(); - $region = $customerAddress->getRegion(); - $countryId = $customerAddress->getCountryId(); - $postcode = $customerAddress->getPostcode(); - if ($countryId == 'US' && strlen($postcode)<5) { - $postcode = str_pad($postcode, 5, '0'); - } - $telephone = $customerAddress->getTelephone(); - - $extractableArray = array( - 'firstname' => $firstname, - 'lastname' => $lastname, - 'name' => $name, - 'email' => $email, - 'company' => $company, - 'street' => $street, - 'street1' => $street1, - 'street2' => $street2, - 'city' => $city, - 'region' => $region, - 'postcode' => $postcode, - 'country_id' => $countryId, - 'countryId' => $countryId, - 'telephone' => $telephone, - ); - - return $extractableArray; - } - - /** - * Create object from XML - * - * @param string $xmlString - * @param bool $replaceNamespaces - * @return stdClass - */ - public function xmlToObject($xmlString, $replaceNamespaces=true) { - if ($replaceNamespaces){ - //replace namespaces - $xmlString = preg_replace('/xmlns[^=]*="[^"]*"\s*/i', '', $xmlString); - $xmlString = preg_replace("/(<\/?)([^:]+):([^>]*>)/", "$1$3", $xmlString); - } - - $xml = simplexml_load_string($xmlString); - $xmlJsonStr = json_encode($xml); - $xmlObject = json_decode($xmlJsonStr); - - return $xmlObject; - } - - /** - * @param Mage_Customer_Model_Address|Mage_Sales_Model_Quote_Address $address - * @return array - */ - public function validateAddress($address) - { - $storeId = Mage::app()->getStore()->getId(); - - $international = ($address->getCountryId() && Mage::getStoreConfig('general/country/default') != $address->getCountryId()) ? true : false; - $service = $this->getServices($storeId, $international); - - $return = array('error' => true); - - try { - $return = $service->getResults($address); - } catch (Exception $e) { - $return['data'] = $e->getMessage(); - Mage::log($e->getMessage(), Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); - } - - return $return; - } - - /** - * Auto populate data - * - * @param Mage_Customer_Model_Address $address - * @param array $data - * @param bool $saveQuoteAddress - * @return bool - */ - public function setAddressData($address, $data, $saveQuoteAddress=true) - { - try { - - $request = Mage::app()->getRequest(); - - if ($address->getAddressType()=='billing'){ - - $postData = $request->getParam('billing'); - - } else { - - $postData = $request->getParam('shipping'); - } - - $regionId = (int)@$postData['region_id']; - - if ($regionId && $regionId != @$data['region_id']){ - - Mage::log('Posted region is not the same as validated region.', Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); - Mage::log($postData,Zend_log::DEBUG,'extensions_store_addressvalidator.log'); - Mage::log($data,Zend_log::DEBUG,'extensions_store_addressvalidator.log'); - return false; - } - - if (isset($data['street']) && is_array($data['street']) && count($data['street']) > 0){ - $street = (count($data['street']) > 1) ? implode("\n",$data['street']) : $data['street'][0]; - $data['street'] = $street; - } - - $address->addData($data); - if ($saveQuoteAddress){ - $address->save(); - } - - $customerAddressId = (int)$address->getCustomerAddressId(); - - if ($customerAddressId && $customerAddressId > 1){ - - $customerAddress = Mage::getModel('customer/address')->load($customerAddressId); - $customerAddress->addData($data); - $customerAddress->save(); - - if ($customerAddress->getId()){ - - $datetime = date('Y-m-d H:i:s'); - - $validatedAddress = Mage::getModel('extensions_store_addressvalidator/address'); - $validatedAddress->load($customerAddress->getId(), 'address_id'); - $validatedAddress->setAddressId($customerAddress->getId()); - $validatedAddress->setAddressType($customerAddress->getAddressType()); - $validatedAddress->setValidated(1); - if (!$validatedAddress->getId()){ - $validatedAddress->setDateCreated($datetime); - } - $validatedAddress->setDateUpdated($datetime); - $validatedAddress->save(); - } - - } - - if ($address->getAddressType() == 'billing'){ - - if (@$postData['use_for_shipping']){ - - unset($data['address_id']); - $quote = Mage::getSingleton('checkout/session')->getQuote(); - $shippingAddress = $quote->getShippingAddress(); - - $shippingAddress->setSameAsBilling(true); - $shippingAddress->addData($data); - $shippingAddress->save(); - - $customerShippingAddressId = (int)$shippingAddress->getCustomerAddressId(); - - if ($customerShippingAddressId && $customerShippingAddressId > 1){ - - $customerShippingAddress = Mage::getModel('customer/address')->load($customerAddressId); - $customerShippingAddress->addData($data); - $customerShippingAddress->save(); - - if ($customerShippingAddress->getId()){ - - $datetime = date('Y-m-d H:i:s'); - - $validatedShippingAddress = Mage::getModel('extensions_store_addressvalidator/address'); - $validatedShippingAddress->load($customerShippingAddress->getId(), 'address_id'); - $validatedShippingAddress->setAddressId($customerShippingAddress->getId()); - $validatedShippingAddress->setAddressType($customerShippingAddress->getAddressType()); - $validatedShippingAddress->setValidated(1); - if (!$validatedShippingAddress->getId()){ - $validatedShippingAddress->setDateCreated($datetime); - } - $validatedShippingAddress->setDateUpdated($datetime); - $validatedShippingAddress->save(); - } - - } - - } - - } - - } catch(Exception $e){ - Mage::log($e->getMessage(),Zend_Log::DEBUG, 'extensions_store_addressvalidator.log'); - return false; - } - - return true; - - } - + const MIN_ATTEMPTS = 1; + const DEFAULT_ATTEMPTS = 3; + const MAX_ATTEMPTS = 25; + + /** + * + * @var array $_messaging + */ + protected $_messaging; + + /** + * Popup messaging nodes + */ + public function __construct() { + $messagingNodes = Mage::getConfig ()->getNode ( 'default/extensions_store_addressvalidator/messaging' ); + $this->_messaging = json_decode ( json_encode ( ( array ) $messagingNodes ), true ); + } + + /** + * Debug mode for local and stage + * + * @return boolean + */ + public function isDebug() { + $storeId = Mage::app ()->getStore ()->getId (); + $debug = ( bool ) Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/debug_mode', $storeId ); + return $debug; + } + + /** + * + * @return boolean + */ + public function enabled() { + $storeId = Mage::app ()->getStore ()->getId (); + $enabled = ( bool ) Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/enabled', $storeId ); + return $enabled; + } + + /** + * Validate billing/shipping address on checkout + * + * @param Mage_Core_Model_Store $store + * @return boolean + */ + public function tooManyAttempts() { + $numAttempts = ( int ) Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/num_attempts' ); + $numAttempts = ($numAttempts >= self::MIN_ATTEMPTS && $numAttempts <= self::MAX_ATTEMPTS) ? $numAttempts : self::DEFAULT_ATTEMPTS; + $numAttempts = ($this->isDebug ()) ? 99999 : $numAttempts; + + $checkoutSession = Mage::getSingleton ( 'checkout/session' ); + $numAttempted = ( int ) $checkoutSession->getData ( 'num_attempted' ); + $checkoutSession->setData ( 'num_attempted', $numAttempted + 1 ); + + return $numAttempted > $numAttempts; + } + + /** + * + * @param string $messageKey + * @return string|boolean + */ + public function getMessaging($messageKey) { + if (in_array ( $messageKey, array_keys ( $this->_messaging ) )) { + + $message = Mage::getStoreConfig ( "extensions_store_addressvalidator/messaging/$messageKey" ); + return $message; + } + + return false; + } + + /** + * Validate billing/shipping address on checkout + * + * @param Mage_Core_Model_Store $store + * @return boolean + */ + public function validateStore($store) { + $storeId = $store->getId (); + + $validateStore = Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/enabled', $storeId ); + + return $validateStore; + } + + /** + * Get service from store config + * + * @param int $storeId + * @param bool $international + * @return array + */ + public function getServices($storeId, $international = false) { + $services = array (); + $service = ($international) ? 'service_international' : 'service'; + $configService = Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/' . $service, $storeId ); + $configService = ($configService) ? $configService : 'usps'; + $alias = 'extensions_store_addressvalidator/service_' . $configService; + $services ['service'] = Mage::getModel ( $alias ); + + if (Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/service2', $storeId )) { + $configService2 = Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/service2', $storeId ); + $alias = 'extensions_store_addressvalidator/service_' . $configService2; + $services ['service2'] = Mage::getModel ( $alias ); + } + + return $services; + } + + /** + * + * @param Mage_Customer_Model_Address|Mage_Sales_Model_Quote_Address $customerAddress + * @return array + */ + public function getExtractableAddressArray($customerAddress) { + $firstname = $customerAddress->getFirstname (); + $lastname = $customerAddress->getLastname (); + $name = $firstname . " " . $lastname; + $name = trim ( $name ); + $email = $customerAddress->getEmail (); + $company = $customerAddress->getCompany (); + $street = $customerAddress->getStreet (); + $street1 = $street [0]; + $street2 = (isset ( $street [1] )) ? $street [1] : ''; + $city = $customerAddress->getCity (); + $region = $customerAddress->getRegion (); + $countryId = $customerAddress->getCountryId (); + $postcode = $customerAddress->getPostcode (); + if ($countryId == 'US' && strlen ( $postcode ) < 5) { + $postcode = str_pad ( $postcode, 5, '0' ); + } + $telephone = $customerAddress->getTelephone (); + + $extractableArray = array ( + 'firstname' => $firstname, + 'lastname' => $lastname, + 'name' => $name, + 'email' => $email, + 'company' => $company, + 'street' => $street, + 'street1' => $street1, + 'street2' => $street2, + 'city' => $city, + 'region' => $region, + 'postcode' => $postcode, + 'country_id' => $countryId, + 'countryId' => $countryId, + 'telephone' => $telephone + ); + + return $extractableArray; + } + + /** + * Create object from XML + * + * @param string $xmlString + * @param bool $replaceNamespaces + * @return stdClass + */ + public function xmlToObject($xmlString, $replaceNamespaces = true) { + if ($replaceNamespaces) { + // replace namespaces + $xmlString = preg_replace ( '/xmlns[^=]*="[^"]*"\s*/i', '', $xmlString ); + $xmlString = preg_replace ( "/(<\/?)([^:]+):([^>]*>)/", "$1$3", $xmlString ); + } + + $xml = simplexml_load_string ( $xmlString ); + $xmlJsonStr = json_encode ( $xml ); + $xmlObject = json_decode ( $xmlJsonStr ); + + return $xmlObject; + } + + /** + * + * @param Mage_Customer_Model_Address|Mage_Sales_Model_Quote_Address $address + * @return array + */ + public function validateAddress($address) { + $storeId = Mage::app ()->getStore ()->getId (); + + $international = ($address->getCountryId () && Mage::getStoreConfig ( 'general/country/default' ) != $address->getCountryId ()) ? true : false; + $service = $this->getServices ( $storeId, $international ); + + $return = array ( + 'error' => true + ); + + try { + $return = $service->getResults ( $address ); + } catch ( Exception $e ) { + $return ['data'] = $e->getMessage (); + Mage::log ( $e->getMessage (), Zend_log::DEBUG, 'extensions_store_addressvalidator.log' ); + } + + return $return; + } + + /** + * Save quote address data + * + * @param Mage_Sales_Model_Quote_Address $quoteAddress + * @param array $data + * @param bool $saveQuoteAddress + * @return bool + */ + public function setAddressData($quoteAddress, $data, $saveQuoteAddress = true) { + try { + $request = Mage::app ()->getRequest (); + if ($quoteAddress->getAddressType () == 'billing') { + $postData = $request->getParam ( 'billing' ); + } else { + $postData = $request->getParam ( 'shipping' ); + } + $regionId = ( int ) @$postData ['region_id']; + + if ($regionId && $regionId != @$data ['region_id']) { + Mage::log ( 'Posted region is not the same as validated region.', Zend_log::DEBUG, 'extensions_store_addressvalidator.log' ); + Mage::log ( $postData, Zend_log::DEBUG, 'extensions_store_addressvalidator.log' ); + Mage::log ( $data, Zend_log::DEBUG, 'extensions_store_addressvalidator.log' ); + return false; + } + if (isset ( $data ['street'] ) && is_array ( $data ['street'] ) && count ( $data ['street'] ) > 0) { + $street = (count ( $data ['street'] ) > 1) ? implode ( "\n", $data ['street'] ) : $data ['street'] [0]; + $data ['street'] = $street; + } + $quoteAddress->addData ( $data ); + if ($saveQuoteAddress) { + $quoteAddress->save (); + } + $storeId = Mage::app ()->getStore ()->getId (); + $saveCustomerAddress = Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/save_customer_address', $storeId ); + if ($saveCustomerAddress) { + $customerAddressId = ( int ) $quoteAddress->getCustomerAddressId (); + if ($customerAddressId) { + $customerAddress = Mage::getModel ( 'customer/address' )->load ( $customerAddressId ); + $customerAddress->addData ( $data ); + $customerAddress->save (); + if ($customerAddress->getId ()) { + $datetime = Mage::getSingleton('core/date')->gmtDate(); + $validatedAddress = Mage::getModel ( 'extensions_store_addressvalidator/address' ); + $validatedAddress->load ( $customerAddress->getId (), 'address_id' ); + $validatedAddress->setAddressId ( $customerAddress->getId () ); + $validatedAddress->setAddressType ( $quoteAddress->getAddressType () ); + $validatedAddress->setValidated ( 1 ); + if (! $validatedAddress->getId ()) { + $validatedAddress->setDateCreated ( $datetime ); + } + $validatedAddress->setDateUpdated ( $datetime ); + $validatedAddress->save (); + } + } + } + } catch ( Exception $e ) { + Mage::log ( $e->getMessage (), Zend_Log::DEBUG, 'extensions_store_addressvalidator.log' ); + return false; + } + + return true; + } + + /** + * Return formatted adddress according to locale + * + * @param string $countryId Current US only implemented + * @param Mage_Sales_Model_Quote_Address $quoteAddress + * @param array $addressData + * @return string + */ + public function formatAddress($countryId, $quoteAddress, $addressData){ + + $name = trim($quoteAddress->getFirstname(). ' '. ($quoteAddress->getMiddlename() ? $quoteAddress->getMiddlename() : '') . ' '. $quoteAddress->getLastname()); + $company = $quoteAddress->getCompany(); + $street = (isset($addressData['street'][0])) ? $addressData['street'][0] : null; + $street2 = (isset($addressData['street'][1])) ? $addressData['street'][1] : null; + $city = (isset($addressData['city'])) ? $addressData['city'] : null; + $region = (isset($addressData['region'])) ? $addressData['region'] : null; + $postcode = (isset($addressData['postcode'])) ? $addressData['postcode'] : null; + $country = (isset($addressData['country'])) ? $addressData['country'] : null; + + $formattedAddressAr = array(); + $formattedAddressAr[] = $name; + $formattedAddressAr[] = $company; + $formattedAddressAr[] = $street; + $formattedAddressAr[] = $street2; + $formattedAddressAr[] = $city . ' '. $region. ' ' . $postcode; + $formattedAddressAr[] = $country; + $formattedAddressAr = array_filter($formattedAddressAr); + + $formattedAddress = implode("\n", $formattedAddressAr); + + return $formattedAddress; + } } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Adminhtml/System/Config/Source/Addressdoctor/Validcodes.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Adminhtml/System/Config/Source/Addressdoctor/Validcodes.php deleted file mode 100755 index af8323d..0000000 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Adminhtml/System/Config/Source/Addressdoctor/Validcodes.php +++ /dev/null @@ -1,34 +0,0 @@ - - */ -class ExtensionsStore_Addressvalidator_Model_Adminhtml_System_Config_Source_Addressdoctor_Validcodes { - - public function toOptionArray() { - $options = array(); - - $options[] = array('label' => Mage::helper('adminhtml')->__('-- Please Select --'), 'value' => ''); - $options[] = array('value' => 'V4', 'label' => 'V4'); - $options[] = array('value' => 'V3', 'label' => 'V3'); - $options[] = array('value' => 'V2', 'label' => 'V2'); - $options[] = array('value' => 'V1', 'label' => 'V1'); - - $options[] = array('value' => 'C4', 'label' => 'C4'); - $options[] = array('value' => 'C3', 'label' => 'C3'); - $options[] = array('value' => 'C2', 'label' => 'C2'); - $options[] = array('value' => 'C1', 'label' => 'C1'); - - $options[] = array('value' => 'I4', 'label' => 'I4'); - $options[] = array('value' => 'I3', 'label' => 'I3'); - $options[] = array('value' => 'I2', 'label' => 'I2'); - $options[] = array('value' => 'I1', 'label' => 'I1'); - - return $options; - } - -} diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Adminhtml/System/Config/Source/Service.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Adminhtml/System/Config/Source/Service.php old mode 100755 new mode 100644 index 07d3a45..5fd4e54 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Adminhtml/System/Config/Source/Service.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Adminhtml/System/Config/Source/Service.php @@ -8,18 +8,25 @@ * @author Extensions Store */ class ExtensionsStore_Addressvalidator_Model_Adminhtml_System_Config_Source_Service { - - public function toOptionArray() { - $options = array(); - - $options[] = array('label' => Mage::helper('adminhtml')->__('-- Please Select --'), 'value' => ''); - $options[] = array('value' => 'ups', 'label' => 'UPS'); - $options[] = array('value' => 'fedex', 'label' => 'Fedex'); - $options[] = array('value' => 'usps', 'label' => 'USPS'); - $options[] = array('value' => 'addressdoctor', 'label' => 'Address Doctor'); - $options[] = array('value' => 'melissadata', 'label' => 'Melissa Data'); - - return $options; - } - + public function toOptionArray() { + $options = array (); + + $options [] = array ( + 'label' => Mage::helper ( 'adminhtml' )->__ ( '-- Please Select --' ), + 'value' => '' + ); + $options [] = array ( + 'value' => 'ups', + 'label' => 'UPS' + ); + $options [] = array ( + 'value' => 'fedex', + 'label' => 'Fedex' + ); + $options [] = array ( + 'value' => 'usps', + 'label' => 'USPS' + ); + return $options; + } } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Observer.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Observer.php old mode 100755 new mode 100644 index 4759ee4..1d3712a --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Observer.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Observer.php @@ -23,18 +23,35 @@ public function validateAddress($observer) { return $observer; } $request = Mage::app()->getRequest(); + $skipValidation = (int)$request->getParam('skip_validation') || Mage::getSingleton('core/cookie')->get('skip_validation'); + if ($skipValidation){ + //if customer elected to skip validation, never validate again for this session + if ($request->getPost('skip_validation')){ + Mage::getSingleton('core/cookie')->set('skip_validation', 1); + } + return $observer; + } $event = $observer->getEvent(); $controller = $event->getControllerAction(); $response = $controller->getResponse(); $store = Mage::app()->getStore(); $storeId = $store->getId(); + $validateVirtualQuote = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/validate_virtual_quote',$storeId); $quote = Mage::getSingleton('checkout/session')->getQuote(); + if ($quote->isVirtual() && !$validateVirtualQuote){ + return $observer; + } + //needed by paypal + Mage::getSingleton('checkout/session')->setAddressValidated(false); $formId = $request->getParam('form_id'); - $oneStepCheckout = ($formId == 'billing_address' || $formId == 'shipping_address') ? true : false; + $checkoutType = $request->getParam('checkout_type'); + $checkoutType = ($checkoutType) ? $checkoutType : 'onepage'; $eventName = strtolower($event->getName()); - + $billing = $request->getParam('billing'); + $useForShipping = (isset($billing['use_for_shipping'])) ? (bool)$billing['use_for_shipping'] : false; if ($eventName == 'controller_action_postdispatch_checkout_onepage_savebilling' || - ($eventName == 'controller_action_postdispatch_onestepcheckout_ajax_save_billing' && $formId == 'billing_address')) + ($eventName == 'controller_action_postdispatch_onestepcheckout_ajax_save_billing' && $formId == 'billing_address') || + $useForShipping) { $address = $quote->getBillingAddress(); } else { @@ -42,51 +59,62 @@ public function validateAddress($observer) { $address = $quote->getShippingAddress(); } + //already validated address + $customerAddressId = $address->getCustomerAddressId(); + if ($customerAddressId){ + $validatedAddress = Mage::getModel('extensions_store_addressvalidator/address'); + $validatedAddress->load($customerAddressId, 'address_id'); + if ($validatedAddress->getId() && $validatedAddress->getValidated()){ + return $observer; + } + } + //get address data - if ($address->getAddressType()=='billing'){ + if ($address->getAddressType()=='billing' || $useForShipping){ $postData = $request->getParam('billing'); } else { $postData = $request->getParam('shipping'); } + if (!$postData && $request->getParam('av-popup')){ + $postData = $request->getParam('av-popup'); + } + //validate country $countryId = @$postData['country_id']; + $countryId = ($countryId) ? $countryId : $address->getCountryId(); $countries = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/countries',$storeId); $countries = explode(',',$countries); if (!in_array($countryId, $countries)){ return $observer; } + $addressId = $request->getParam('billing_address_id'); + if (!$addressId){ + $addressId = $request->getParam('shipping_address_id'); + } + //already validated - $addressValidated = @$postData['address_validated']; + $addressValidated = $request->getParam('address_validated'); + $addressValidated = ($addressValidated) ? $addressValidated: @$postData['address_validated']; if ($addressValidated) { - $postData['customer_address_id'] = (is_numeric($addressValidated) && $addressValidated>1) ? $addressValidated : NULL; + $postData['customer_address_id'] = (is_numeric($addressValidated) && $addressValidated>1) ? $addressValidated : $address->getCustomerAddressId(); $helper->setAddressData($address, $postData, true); - return $observer; - } - - //customer elected to skip validation - $skipValidation = (int)$request->getParam('skip_validation'); - if ($skipValidation){ + Mage::getSingleton('checkout/session')->setAddressValidated(true);//needed by paypal return $observer; } //skip validation if customer address has already been validated - $addressId = $request->getParam('billing_address_id'); - if (!$addressId){ - $addressId = $request->getParam('shipping_address_id'); - } $validatedAddress = Mage::getModel('extensions_store_addressvalidator/address'); $validatedAddress->load($addressId, 'address_id'); - if ($validatedAddress->getId() && $validatedAddress->getValidated()){ return $observer; } + $allowBypass = (int)Mage::getStoreConfig('extensions_store_addressvalidator/configuration/allow_bypass', $storeId); + if ($helper->tooManyAttempts()) { - $allowBypass = (int)Mage::getStoreConfig('extensions_store_addressvalidator/configuration/allow_bypass', $storeId); - if ($allowBypass){ $result = array(); $result['validate'] = true; @@ -133,6 +161,7 @@ public function validateAddress($observer) { $formId = 'co-'.$address->getAddressType().'-form'; } $result['form_id'] = $formId; + $result['checkout_type'] = $checkoutType; $result['validate'] = true; $result['error'] = $returned['error']; $responseCode = ($helper->isDebug() && isset($returned['response_code']) && $returned['response_code']) ? ' (' . $returned['response_code'] . ')' : ''; @@ -157,6 +186,7 @@ public function validateAddress($observer) { $result['error'] = true; $result['data'] = $returned['data']; + $result['validate'] = ($allowBypass) ? false : true; $result['message'] = (($returned['data']) ? $returned['data'] : $helper->getMessaging('invalid_address')) . $responseCode; } @@ -164,6 +194,12 @@ public function validateAddress($observer) { $responseBody = json_decode($body, true); $responseBody = (is_array($responseBody)) ? $responseBody : array('update_content'=>$body);//paypal $responseBody['goto_section'] = ''; + //light checkout + if ($checkoutType == 'lightcheckout' && isset($responseBody['section']) && $responseBody['section']=='centinel'){ + if (!$result['error'] || !$allowBypass){ + $responseBody['section'] = 'addressvalidator'; + } + } $responseBody['address_validator'] = $result; $response->setBody(Mage::helper('core')->jsonEncode($responseBody)); @@ -197,7 +233,7 @@ public function updateAddressValidated($observer) $validatedAddress = Mage::getModel('extensions_store_addressvalidator/address'); $validatedAddress->load($customerAddress->getId(), 'address_id'); - $datetime = date('Y-m-d H:i:s'); + $datetime = Mage::getSingleton('core/date')->gmtDate(); $validatedAddress->setAddressId($customerAddress->getId()); $validatedAddress->setValidated(0); @@ -220,4 +256,43 @@ public function updateAddressValidated($observer) return $observer; } + /** + * Add address js before billing block html + * + * @see core_block_abstract_to_html_after + * @param Varien_Event_Observer $observer + * @return Varien_Event_Observer $observer + */ + public function prependAddressJs($observer){ + $helper = Mage::helper('addressvalidator'); + $block = $observer->getBlock(); + if ($helper->enabled() && $block->getNameInLayout()=='checkout.onepage.billing'){ + $transport = $observer->getTransport(); + $html = $transport->getHtml(); + $html = ''.$html; + $transport->setHtml($html); + } + + return $observer; + } + + /** + * Scheduled clean up + * @see log_log_clean_after + * @param Varien_Event_Observer $observer + * @return Varien_Event_Observer $observer + */ + public function cleanLogs($observer){ + $cleanLogsDays = (int)Mage::getStoreConfig('extensions_store_addressvalidator/configuration/cleanlog_days'); + $datetime = Mage::getSingleton('core/date')->gmtDate(); + $cleanLogsTime = strtotime($datetime . " - $cleanLogsDays DAY"); + $cleanLogDate = date('Y-m-d H:i:s', $cleanLogsTime); + $resource = Mage::getSingleton('core/resource'); + //$read = $resource->getConnection('core_read'); + $write = $resource->getConnection('core_write'); + $tableName = $resource->getTableName('addressvalidator/response'); + $sql = "DELETE FROM $tableName WHERE date_created < '$cleanLogDate'"; + $write->query($sql); + return $observer; + } } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address.php index 1ca656a..8495b1e 100644 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address.php @@ -7,15 +7,9 @@ * @package ExtensionsStore_Addressvalidator * @author Extensions Store */ - - -class ExtensionsStore_Addressvalidator_Model_Resource_Address extends Mage_Core_Model_Resource_Db_Abstract -{ - - protected function _construct() - { - $this->_init('extensions_store_addressvalidator/address', 'id'); +class ExtensionsStore_Addressvalidator_Model_Resource_Address extends Mage_Core_Model_Resource_Db_Abstract { + protected function _construct() { + $this->_init ( 'extensions_store_addressvalidator/address', 'id' ); } - } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address/Collection.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address/Collection.php index fab16b6..ea1ec89 100644 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address/Collection.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Resource/Address/Collection.php @@ -7,15 +7,9 @@ * @package ExtensionsStore_Addressvalidator * @author Extensions Store */ - - -class ExtensionsStore_Addressvalidator_Model_Resource_Address_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract -{ - - protected function _construct() - { - parent::_construct(); - $this->_init('extensions_store_addressvalidator/address'); +class ExtensionsStore_Addressvalidator_Model_Resource_Address_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract { + protected function _construct() { + parent::_construct (); + $this->_init ( 'extensions_store_addressvalidator/address' ); } - } \ No newline at end of file diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Abstract.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Abstract.php old mode 100755 new mode 100644 index 3e170df..4ab8a13 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Abstract.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Abstract.php @@ -108,8 +108,14 @@ public function getResults($customerAddress) { //process results into array $results = $this->_processResults($resultsData); - if (is_array($results) && count($results) > 0) { + + foreach ($results as $i=>$result){ + if (!isset($result['formatted_address'])){ + $countryId = $result['country_id']; + $results[$i]['formatted_address'] = Mage::helper('addressvalidator')->formatAddress($countryId, $this->_address, $result); + } + } $return['data'] = $results; } else { @@ -223,7 +229,7 @@ protected function _getResponse($message) { $value = ''; } $addressValues = implode(",", $addressValues); - $dateCreated = date('Y-m-d H:i:s'); + $dateCreated = Mage::getSingleton('core/date')->gmtDate(); $quoteId = Mage::getSingleton('checkout/session')->getQuoteId(); $quoteAddressId = ($this->_address && $this->_address->getId()) ? $this->_address->getId() : 0; $storeId = Mage::app()->getStore()->getId(); @@ -256,4 +262,5 @@ abstract protected function _processResponse($response); * @return array */ abstract protected function _processResults(array $responseData); + } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Addressdoctor.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Addressdoctor.php deleted file mode 100755 index 70861d3..0000000 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Addressdoctor.php +++ /dev/null @@ -1,465 +0,0 @@ - - */ -class ExtensionsStore_Addressvalidator_Model_Service_Addressdoctor extends ExtensionsStore_Addressvalidator_Model_Service_Abstract { - - /** - * Service - * @var string $_service - * @var string $_url - */ - protected $_service = 'addressdoctor'; - protected $_url = 'http://validator5.addressdoctor.com/Webservice5/v2/AddressValidation.asmx'; - protected $_validStatuses = array( - "JO" => array('V4', 'V3', 'V2', 'C4', 'C3', 'C2', 'I4', 'I3'), - "NZ" => array('V4', 'V3', 'V2', 'C4', 'C3', 'I4', 'I3'), - "SA" => array('V4', 'V3', 'V2', 'C4', 'C3', 'C2', 'I4', 'I3'), - "AE" => array('V4', 'V3', 'V2', 'C4', 'C3', 'C2', 'I4', 'I3'), - ); - - public function _construct() { - parent::_construct(); - - $cache = Mage::app()->getCache(); - $cacheKey = md5(get_class($this) . "_valid_exceptions"); - $validStatuses = $cache->load($cacheKey); - - $validStatuses = unserialize($validStatuses); - - if (!is_array($validStatuses) || count($validStatuses) == 0) { - - $validExceptions = Mage::getStoreConfig('extensions_store_addressvalidator/addressdoctor/valid_exceptions'); - - if ($validExceptions) { - - $validExceptions = unserialize($validExceptions); - - if (is_array($validExceptions) && count($validExceptions) > 0) { - - $country = Mage::getModel('directory/country'); - - $validStatuses = array(); - - foreach ($validExceptions as $i => $validException) { - - $iso3Code = $validException['iso3_code']; - $filterValids = $validException; - unset($filterValids['country_name']); - unset($filterValids['iso3_code']); - $filteredValids = array_diff($filterValids, array(0)); - - $country->loadByCode($iso3Code); - $valids = array_keys($filteredValids); - $validStatuses[$country->getId()] = $valids; - } - - $this->_validStatuses = $validStatuses; - - $tags = array(); //@todo - $cache->save(serialize($validStatuses), $cacheKey, $tags, 604800); - } - } - } else { - - $this->_validStatuses = $validStatuses; - } - } - - /** - * Get soap request message - * - * @param Mage_Customer_Model_Address $customerAddress - * @return string - */ - protected function _getMessage($customerAddress) { - $customerId = Mage::getStoreConfig('extensions_store_addressvalidator/addressdoctor/customer_id'); - $password = Mage::helper('core')->decrypt(Mage::getStoreConfig('extensions_store_addressvalidator/addressdoctor/password')); - $testMode = (int) Mage::getStoreConfig('extensions_store_addressvalidator/addressdoctor/test_mode'); - $test = ($testMode) ? 'TEST' : ''; - - $extractableArray = $this->_getExtractableAddressArray($customerAddress); - extract($extractableArray); - - $message = ' - - - - - - ' . $customerId . ' - - ' . $password . ' - - - - INTERACTIVE - - - - - - ExtensionsStore Cosmetics - - - - ' . $test . ' - - - - - - - - - - - - - - - - false - false - true - - ASCII_EXTENDED - - ENGLISH - - - - - 0 - - - 0 - - - true - - ONLY_WITH_VALID_ITEMS - false - - - - DeliveryAddressLine - - NOCHANGE - 128 - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'; - - return $message; - } - - /** - * Process response string into json object and extract addresses array - * - * @param string $response - * @return array - */ - protected function _processResponse($response) { - $return = array(); - $return['error'] = true; - - $responseJson = Mage::helper('addressvalidator')->xmlToObject($response); - - $processResult = $responseJson->soapBody->ProcessResponse->ProcessResult; - $statusCode = $processResult->StatusCode; - $statusMessage = $processResult->StatusMessage; - - if ($statusCode == 100) { - - $results = $processResult->Results; - $result = $results->Result; - - $processStatus = $result->ProcessStatus; - $return['response_code'] = $processStatus; - $processResult = $this->_processStatus($processStatus); - - $message = $this->_hash . '-' . $processStatus . '-' . $processResult; - - if ($processResult > 0) { - - $return['error'] = false; - - $countryId = $this->_country->getCountryId(); - $validStatusKeys = array_keys($this->_validStatuses); - $validStatuses = (isset($this->_validStatuses[$countryId])) ? $this->_validStatuses[$countryId] : array(); - $exception = (in_array($countryId, $validStatusKeys) && in_array($processStatus, $validStatuses)) ? true : false; - - if ($processResult == 2 || ($processResult == 1 && $exception)) { - - $resultDataSet = $result->ResultDataSet; - $return['data'] = (is_array($resultDataSet->ResultData)) ? $resultDataSet->ResultData : array($resultDataSet->ResultData); - } else { - - $return['data'] = array(); - } - } else { - //internal error - Mage::log($message, null, 'extensions_store_addressvalidator.log'); - } - } else { - - Mage::log($statusCode . '-' . $statusMessage, null, 'extensions_store_addressvalidator.log'); - } - - return $return; - } - - /** - * Process the result status - * - * @param string $processStatus - * @return int 0, 1, 2 (internal error, incorrect address, verified) - */ - protected function _processStatus($processStatus) { - $return = 0; - $validCodes = Mage::getStoreConfig('extensions_store_addressvalidator/addressdoctor/valid_codes'); - if ($validCodes) { - - $validCodes = explode(',', $validCodes); - - if (is_array($validCodes) && in_array($processStatus, $validCodes)) { - return 2; - } - } - - $status = substr($processStatus, 0, 1); - $grade = (int) substr($processStatus, 1, 1); - - switch ($status) { - - //verified - case 'V' : - - switch ($grade) { - - //V4 - Input data correct - all (postally relevant) elements were checked and input matched perfectly - //V3 - Input data correct on input but some or all elements were standardized or input contains outdated names or exonyms - case 4 : case 3 : - $return = 2; - break; - //V2 - Input data correct but some elements could not be verified because of incomplete reference data - //V1 - Input data correct but the user standardization has deteriorated deliverability (wrong element user standardization ��� for example, postcode length chosen is too short). Not set by validation - case 2 : case 1 : - $return = 1; - break; - default : - break; - } - break; - - //corrected - case 'C' : - - switch ($grade) { - - //C4 - All (postally relevant) elements have been checked - //C3 - 3 Some elements could not be checked - case 4 : case 3 : - $return = 2; - break; - //C2 - Delivery status unclear (lack of reference data) - //C1 - Delivery status unclear because user standardization was wrong. Not set by validation - case 2 : case 1 : - $return = 1; - break; - default : - break; - } - break; - - //fast completion - case 'Q' : - - switch ($grade) { - - //Q3 - Suggestions are available ��� complete address - case 3 : - $return = 2; - break; - //Q2 - Suggested address is complete but combined with elements from the input (added or deleted) - //Q1 - Suggested address is not complete (enter more information) - //Q0 - Insufficient information provided to generate suggestions - case 2 : case 1 : case 0 : - $return = 1; - break; - default : - break; - } - break; - - //incorrect - case 'I' : - - switch ($grade) { - - //I4 - Data could not be corrected completely, but is very likely to be deliverable ��� single match (e.g. HNO is wrong but only 1 HNO is found in reference data) - //I3 - Data could not be corrected completely, but is very likely to be deliverable ��� multiple matches (e.g. HNO is wrong but more than 1 HNO is found in reference data) - case 4 : case 3 : - $return = 2; - break; - //I2 - Data could not be corrected, but there is a slim chance that the address is deliverable - //I1 - Data could not be corrected and is pretty unlikely to be delivered - case 2 : case 1 : - $return = 1; - break; - default : - break; - } - break; - - //not processed, webservice error - case 'N' : case 'W' : default : - - break; - } - - return $return; - } - - /** - * Generate array of addresses - * - * @param array $responseData - * @return array - */ - protected function _processResults(array $responseData) { - $results = array(); - - $regionModel = Mage::getModel('directory/region'); - - foreach ($responseData as $i => $resultAddress) { - - if ($i + 1 > $this->_numResults) { - - break; - } - - try { - - $addressData = $resultAddress->Address; - $country = ucwords(strtolower($addressData->Country->string)); - //result country may be different from request country - $countries = Mage::app()->getLocale()->getCountryTranslationList(); - $countryId = false; - foreach ($countries as $countryCode => $countryName) { - if ($country == $countryName) { - $countryId = $countryCode; - break; - } - } - if (!$countryId) { - $countryId = $this->_country->getId(); - } - - $street = (array) $addressData->DeliveryAddressLines->string; - $city = (array) $addressData->Locality->string; - - $regionId = ''; - $region = array(''); - - if (isset($addressData->Province)) { - $province = (array) $addressData->Province->string; - $regionModel->loadByName($province[0], $countryId); - $regionModel = (!$regionModel->getId()) ? $regionModel->loadByCode($province[0], $countryId) : $regionModel; - $region = ($regionModel->getId()) ? array($regionModel->getName()) : $province; - $regionId = ($regionModel->getId()) ? $regionModel->getId() : null; - } - - $postcode = $addressData->PostalCode->string; - - $results[] = array( - 'country_id' => $countryId, - 'country' => $country, - 'street' => $street, - 'city' => $city, - 'region' => $region[0], - 'region_id' => $regionId, - 'postcode' => $postcode, - ); - } catch (Exception $e) { - Mage::log($e->getMessage(), null, 'extensions_store_addressvalidator.log'); - } - } - - return $results; - } - -} diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Fedex.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Fedex.php index 78e4ea1..f19715b 100644 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Fedex.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Fedex.php @@ -100,56 +100,66 @@ protected function _getMessage($customerAddress) { */ protected function _processResponse($response) { - $return = array(); - $return['error'] = true; - - $responseJson = Mage::helper('addressvalidator')->xmlToObject($response); - - $body = @$responseJson->Body; - $addressValidationReply = @$body->AddressValidationReply; - $highestSeverity = @$addressValidationReply->HighestSeverity; - $notifications = @$addressValidationReply->Notifications; - $statusCode = @$notifications->Code; - $statusMessage = @$notifications->Message; - - if ($highestSeverity == 'SUCCESS') { - - $addressResults = $addressValidationReply->AddressResults; - $proposedAddressDetails = @$addressResults->ProposedAddressDetails; - $deliveryPointValidation = @$proposedAddressDetails->DeliveryPointValidation; - - if ($deliveryPointValidation && $deliveryPointValidation == 'UNCONFIRMED'){ - - $changes = $proposedAddressDetails->Changes; - $apartmentNumberRequired = false; - $apartmentNumberNotFound = false; - if (is_array($changes) && count($changes)>0){ - foreach ($changes as $change){ - if ($change == 'APARTMENT_NUMBER_REQUIRED'){ - $apartmentNumberRequired = true; - break; - } - if ($change == 'APARTMENT_NUMBER_NOT_FOUND'){ - $apartmentNumberNotFound = true; - break; - } - } - } - - $data = ($apartmentNumberRequired) ? Mage::helper('addressvalidator')->getMessaging('apartment_required') : $change; - $data = ($apartmentNumberNotFound) ? Mage::helper('addressvalidator')->getMessaging('apartment_not_found') : $data; - - } else { - $data = (!is_array($addressResults)) ? array($addressResults) : $addressResults; - } - - $return['error'] = false; - $return['data'] = $data; - - } else { - - Mage::log($statusCode . '-' . $statusMessage, Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); - } + try { + $return = array(); + $return['error'] = false; + + $responseJson = Mage::helper('addressvalidator')->xmlToObject($response); + + $body = @$responseJson->Body; + $addressValidationReply = @$body->AddressValidationReply; + $highestSeverity = @$addressValidationReply->HighestSeverity; + $notifications = @$addressValidationReply->Notifications; + $statusCode = @$notifications->Code; + $statusMessage = @$notifications->Message; + + if ($highestSeverity == 'SUCCESS') { + + $addressResults = $addressValidationReply->AddressResults; + $proposedAddressDetails = @$addressResults->ProposedAddressDetails; + $deliveryPointValidation = @$proposedAddressDetails->DeliveryPointValidation; + $storeId = Mage::app()->getStore()->getId(); + $requireApartment = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/require_apartment',$storeId); + + if ($requireApartment && $deliveryPointValidation && $deliveryPointValidation == 'UNCONFIRMED'){ + + $changes = $proposedAddressDetails->Changes; + $apartmentNumberRequired = false; + $apartmentNumberNotFound = false; + if (is_array($changes) && count($changes)>0){ + foreach ($changes as $change){ + if ($change == 'APARTMENT_NUMBER_REQUIRED'){ + $apartmentNumberRequired = true; + break; + } + if ($change == 'APARTMENT_NUMBER_NOT_FOUND'){ + $apartmentNumberNotFound = true; + break; + } + } + } + + $data = ($apartmentNumberRequired) ? Mage::helper('addressvalidator')->getMessaging('apartment_required') : $change; + $data = ($apartmentNumberNotFound) ? Mage::helper('addressvalidator')->getMessaging('apartment_not_found') : $data; + + } else { + $data = (!is_array($addressResults)) ? array($addressResults) : $addressResults; + } + + } else { + + $data = $statusCode . '-' . $statusMessage; + Mage::log($data, Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); + } + + $return['data'] = $data; + + }catch (Exception $e){ + $return['error'] = true; + $message = $e->getMessage(); + Mage::log($message, Zend_log::ERR, 'extensions_store_addressvalidator.log'); + $return['data'] = $message; + } return $return; } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Melissadata.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Melissadata.php deleted file mode 100755 index 4f653bb..0000000 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Melissadata.php +++ /dev/null @@ -1,150 +0,0 @@ - - */ - -class ExtensionsStore_Addressvalidator_Model_Service_Melissadata extends ExtensionsStore_Addressvalidator_Model_Service_Abstract -{ - /** - * Service - * @var string $_service - * @var string $_url - */ - protected $_service = 'melissadata'; - protected $_url = 'http://address.melissadata.net/V3/SOAP/GlobalAddress'; - - public function _construct() - { - parent::_construct(); - - $this->_headers = array( - 'SOAPAction: "urn:mdGlobalAddress/AddressCheckSoap/doGlobalAddress"', - 'User-Agent: PHP-SOAP/'.phpversion(), - 'Connection: Keep-Alive', - ); - } - - /** - * Get soap request message - * - * @param Mage_Customer_Model_Address $customerAddress - * @return string - */ - protected function _getMessage($customerAddress) - { - $customerId = Mage::getStoreConfig('extensions_store_addressvalidator/melissadata/customer_id'); - - $extractableArray = $this->_getExtractableAddressArray($customerAddress); - extract($extractableArray); - - $message = -' - - - - - - '.$customerId.' - LineSeparator:Semicolon,OutputScript:NoChange,CountryOfOrigin:United - States - - - 1 - - - - - - - - - - - - -'; - - return $message; - } - - - /** - * Process response string into json object and extract addresses array - * - * @param string $response - * @return array - */ - protected function _processResponse($response) - { - $return = array(); - $return['error'] = true; - - $responseJson = Mage::helper('addressvalidator')->xmlToObject($response); - - $totalRecords = $responseJson->sBody->doGlobalAddressResponse->doGlobalAddressResult->TotalRecords; - - if ($totalRecords > 0) { - - $return['error'] = false; - $return['data'] = (array)$responseJson->sBody->doGlobalAddressResponse->doGlobalAddressResult->Records; - - } - - return $return; - } - - - /** - * Generate array of addresses - * - * @param array $responseData - * @return array - */ - protected function _processResults(array $responseData) - { - $results = array(); - - $regionModel = Mage::getModel ('directory/region'); - - foreach ($responseData as $i=>$responseRecord) { - - if ($i + 1 > $this->_numResults){ - - break; - } - - $country = $responseRecord->CountryName; - $street = array($responseRecord->AddressLine1, $responseRecord->AddressLine2); - $city = $responseRecord->Locality; - $province = $responseRecord->AdministrativeArea; - $regionModel->loadByName( $province, $this->_country->getId() ); - $region = ($regionModel && $regionModel->getId()) ? $regionModel->getName() : $province; - if ($responseRecord->AddressLine2 == $region){ - unset($street[1]); - } - - $regionId = ($regionModel && $regionModel->getId()) ? $regionModel->getCode() : null; - - $postcode = $responseRecord->PostalCode; - - $results[] = array( - 'country_id' => $this->_country->getId(), - 'country' => $country, - 'street' => $street, - 'city' => $city, - 'region' => $region, - 'region_id' => $regionId, - 'postcode' => $postcode, - ); - } - - return $results; - } - -} \ No newline at end of file diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Ups.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Ups.php index 04fd716..5ce7e85 100644 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Ups.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Ups.php @@ -84,31 +84,37 @@ protected function _getMessage($customerAddress) { */ protected function _processResponse($response) { - $return = array(); - $return['error'] = true; - - $responseJson = Mage::helper('addressvalidator')->xmlToObject($response); - - $responseStatusCode = $responseJson->Response->ResponseStatusCode; - - if ($responseStatusCode == 1) { - - $return['error'] = false; - $return['data'] = (!is_array($responseJson->AddressKeyFormat)) ? array($responseJson->AddressKeyFormat) : $responseJson->AddressKeyFormat; - - } else { - - $error = @$responseJson->Response->Error; - $message = 'An error occurred during service call to UPS.'; - - if ($error && $error->ErrorCode && $error->ErrorDescription){ - $message = $error->ErrorCode.'-'.$error->ErrorDescription; - } - - Mage::log($message, Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); - $return['error'] = false; - $return['data'] = $message; - } + try { + $return = array(); + $return['error'] = false; + + $responseJson = Mage::helper('addressvalidator')->xmlToObject($response); + + $responseStatusCode = $responseJson->Response->ResponseStatusCode; + + if ($responseStatusCode == 1) { + + $return['data'] = (!is_array($responseJson->AddressKeyFormat)) ? array($responseJson->AddressKeyFormat) : $responseJson->AddressKeyFormat; + + } else { + + $error = @$responseJson->Response->Error; + $message = 'An error occurred during service call to UPS.'; + + if ($error && $error->ErrorCode && $error->ErrorDescription){ + $message = $error->ErrorCode.'-'.$error->ErrorDescription; + } + + Mage::log($message, Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); + $return['data'] = $message; + } + + }catch (Exception $e){ + $return['error'] = true; + $message = $e->getMessage(); + Mage::log($message, Zend_log::ERR, 'extensions_store_addressvalidator.log'); + $return['data'] = $message; + } return $return; } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Usps.php b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Usps.php index e91962f..c370384 100644 --- a/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Usps.php +++ b/app/code/community/ExtensionsStore/Addressvalidator/Model/Service/Usps.php @@ -75,39 +75,47 @@ protected function _getMessage($customerAddress) { * @return array */ protected function _processResponse($response) { - $return = array(); - $return['error'] = false; - - $responseJson = Mage::helper('addressvalidator')->xmlToObject($response, false); - - $address = @$responseJson->Address; - $error = (@$address->Error || @$address->ReturnText) ? true : false; - - if (!$error) { - - $return['data'] = (!is_array($address)) ? array($address) : $address; - - } else if (@$address->ReturnText){ - - if (preg_match('/apartment/',$address->ReturnText)){ - - if (isset($this->_requestData['street2']) && strlen($this->_requestData['street2'])>0){ - $data = Mage::helper('addressvalidator')->getMessaging('apartment_not_found'); - } else { - $data = Mage::helper('addressvalidator')->getMessaging('apartment_required'); - } - - $return['data'] = ($data) ? $data : $address->ReturnText; - - }else { - $return['data'] = $address->ReturnText; - } - } else { - - $return['error'] = true; - Mage::log($address->Error->Number . '-' . $address->Error->Description, Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); - $return['data'] = $address->Error->Description; - } + try { + $return = array(); + $return['error'] = false; + + $responseJson = Mage::helper('addressvalidator')->xmlToObject($response, false); + + $address = @$responseJson->Address; + $storeId = Mage::app()->getStore()->getId(); + $requireApartment = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/require_apartment',$storeId); + $error = (@$address->Error || ($requireApartment && @$address->ReturnText)) ? true : false; + + if (!$error) { + + $return['data'] = (!is_array($address)) ? array($address) : $address; + + } else if (@$address->ReturnText){ + + if (preg_match('/apartment/',$address->ReturnText)){ + + if (isset($this->_requestData['street2']) && strlen($this->_requestData['street2'])>0){ + $data = Mage::helper('addressvalidator')->getMessaging('apartment_not_found'); + } else { + $data = Mage::helper('addressvalidator')->getMessaging('apartment_required'); + } + + $return['data'] = ($data) ? $data : $address->ReturnText; + + }else { + $return['data'] = $address->ReturnText; + } + } else { + + Mage::log($address->Error->Number . '-' . $address->Error->Description, Zend_log::DEBUG, 'extensions_store_addressvalidator.log'); + $return['data'] = $address->Error->Description; + } + + }catch (Exception $e){ + $return['error'] = true; + Mage::log($e->getMessage(), Zend_log::ERR, 'extensions_store_addressvalidator.log'); + $return['data'] = $e->getMessage(); + } return $return; } diff --git a/app/code/community/ExtensionsStore/Addressvalidator/controllers/IndexController.php b/app/code/community/ExtensionsStore/Addressvalidator/controllers/IndexController.php new file mode 100644 index 0000000..6ee763e --- /dev/null +++ b/app/code/community/ExtensionsStore/Addressvalidator/controllers/IndexController.php @@ -0,0 +1,21 @@ + + */ +class ExtensionsStore_Addressvalidator_IndexController extends Mage_Core_Controller_Front_Action { + public function indexAction() { + $this->loadLayout ()->renderLayout (); + } + public function validateAction() { + $result = array ( + 'error' => false, + 'data' => null + ); + $this->getResponse ()->setBody ( Mage::helper ( 'core' )->jsonEncode ( $result ) ); + } +} \ No newline at end of file diff --git a/app/code/community/ExtensionsStore/Addressvalidator/etc/adminhtml.xml b/app/code/community/ExtensionsStore/Addressvalidator/etc/adminhtml.xml old mode 100755 new mode 100644 diff --git a/app/code/community/ExtensionsStore/Addressvalidator/etc/config.xml b/app/code/community/ExtensionsStore/Addressvalidator/etc/config.xml old mode 100755 new mode 100644 index 01fae65..4a2f084 --- a/app/code/community/ExtensionsStore/Addressvalidator/etc/config.xml +++ b/app/code/community/ExtensionsStore/Addressvalidator/etc/config.xml @@ -9,147 +9,184 @@ */ --> - - - 1.5.8 - - - - - - - - - - - - -          -              -                 extensions_store_addressvalidator/observer -                 validateAddress -              -          - - -          -              -                 extensions_store_addressvalidator/observer -                 validateAddress -              -          - - -          -              -                 extensions_store_addressvalidator/observer -                 validateAddress -              -          - - -          -              -                 extensions_store_addressvalidator/observer -                 validateAddress -              -          - - - - - - extensions_store/addressvalidator.xml - - - - - - - - - - extensions_store_addressvalidator/observer - updateAddressValidated - - - - - - - ExtensionsStore_Addressvalidator_Block - - - - ExtensionsStore_Addressvalidator_Block_Checkout_Onepage_Billing - - - - - - ExtensionsStore_Addressvalidator_Model - addressvalidator_resource - - - ExtensionsStore_Addressvalidator_Model - addressvalidator_resource - - - ExtensionsStore_Addressvalidator_Model_Resource - -
- extensions_store_addressvalidator_addresses
-
- - extensions_store_addressvalidator_responses
-
-
-
-
- - - ExtensionsStore_Addressvalidator_Helper - - - ExtensionsStore_Addressvalidator_Helper - - - - - - ExtensionsStore_Addressvalidator - - - core_setup - - - -
- - - - US - usps - 5 - 3 - contacts - - - https://onlinetools.ups.com/ups.app/xml/XAV - - - - - - - - - - - - - - - - + + + 1.6.0 + + + + + + + + + + + + + + + extensions_store_addressvalidator/observer + validateAddress + + + + + + + extensions_store_addressvalidator/observer + validateAddress + + + + + + + extensions_store_addressvalidator/observer + validateAddress + + + + + + + extensions_store_addressvalidator/observer + validateAddress + + + + + + + extensions_store_addressvalidator/observer + validateAddress + + + + + + + extensions_store_addressvalidator/observer + prependAddressJs + + + + + + + extensions_store_addressvalidator/observer + validateAddress + + + + + + + standard + + ExtensionsStore_Addressvalidator + addressvalidator + + + + + + + extensions_store/addressvalidator.xml + + + + + + + + + + extensions_store_addressvalidator/observer + updateAddressValidated + + + + + + + extensions_store_addressvalidator/observer + cleanLogs + + + + + + + ExtensionsStore_Addressvalidator_Block + + + + + ExtensionsStore_Addressvalidator_Model + addressvalidator_resource + + + ExtensionsStore_Addressvalidator_Model + addressvalidator_resource + + + ExtensionsStore_Addressvalidator_Model_Resource + +
+ extensions_store_addressvalidator_addresses
+
+ + extensions_store_addressvalidator_responses
+
+
+
+
+ + + ExtensionsStore_Addressvalidator_Helper + + + ExtensionsStore_Addressvalidator_Helper + + + + + + ExtensionsStore_Addressvalidator + + + core_setup + + + +
+ + + + US + 0 + 1 + 1 + usps + 5 + 3 + contacts + 30 + + + https://onlinetools.ups.com/ups.app/xml/XAV + + + + + + + + + + + + +
\ No newline at end of file diff --git a/app/code/community/ExtensionsStore/Addressvalidator/etc/system.xml b/app/code/community/ExtensionsStore/Addressvalidator/etc/system.xml old mode 100755 new mode 100644 index 1ae7e33..08bf58b --- a/app/code/community/ExtensionsStore/Addressvalidator/etc/system.xml +++ b/app/code/community/ExtensionsStore/Addressvalidator/etc/system.xml @@ -56,14 +56,14 @@ 1 1 - + text 30 1 - + text @@ -99,12 +99,42 @@ 1 1 - + + + + select + adminhtml/system_config_source_yesno + 80 + 1 + 1 + 1 + + + + + select + adminhtml/system_config_source_yesno + 90 + 1 + 1 + 1 + + + + + select + adminhtml/system_config_source_yesno + 100 + 1 + 1 + 1 + + select extensions_store_addressvalidator/adminhtml_system_config_source_service - 80 + 110 1 1 1 @@ -114,22 +144,29 @@ select extensions_store_addressvalidator/adminhtml_system_config_source_service - 90 + 120 1 1 1 - + select extensions_store_addressvalidator/adminhtml_system_config_source_service - 100 + 130 1 1 1 - + + + + text + 140 + 1 + + @@ -167,9 +204,9 @@ - + textarea - 40 + 50 1 @@ -195,7 +232,7 @@ 10 1 - + obscure @@ -211,8 +248,8 @@ 20 1 - - + + diff --git a/app/code/community/ExtensionsStore/Addressvalidator/sql/extensions_store_addressvalidator_setup/install-1.0.0.php b/app/code/community/ExtensionsStore/Addressvalidator/sql/extensions_store_addressvalidator_setup/install-1.0.0.php old mode 100755 new mode 100644 diff --git a/app/design/frontend/base/default/layout/extensions_store/addressvalidator.xml b/app/design/frontend/base/default/layout/extensions_store/addressvalidator.xml old mode 100755 new mode 100644 index 83eae46..5965ad9 --- a/app/design/frontend/base/default/layout/extensions_store/addressvalidator.xml +++ b/app/design/frontend/base/default/layout/extensions_store/addressvalidator.xml @@ -46,6 +46,23 @@ + + + + css/extensions_store/addressvalidator.css + + + skin_js + js/extensions_store/addressvalidator.js + + + + + + addressvalidator.popup + + + diff --git a/app/design/frontend/base/default/template/extensions_store/addressvalidator/popup.phtml b/app/design/frontend/base/default/template/extensions_store/addressvalidator/popup.phtml old mode 100755 new mode 100644 index 9ddb2ee..b88661c --- a/app/design/frontend/base/default/template/extensions_store/addressvalidator/popup.phtml +++ b/app/design/frontend/base/default/template/extensions_store/addressvalidator/popup.phtml @@ -1,49 +1,59 @@ - */ - -$helper = $this->helper('addressvalidator'); -if ($helper->enabled()){ - $storeId = Mage::app()->getStore()->getId(); - $tooManyAttemptsUrl = Mage::getStoreConfig('extensions_store_addressvalidator/configuration/too_many_attempts_url',$storeId); - $customerServiceUrl = $this->getUrl($tooManyAttemptsUrl); -?> +* +* @category ExtensionsStore +* @package ExtensionsStore_Addressvalidator +* @author Extensions Store +*/ +$helper = $this->helper ( 'addressvalidator' ); +if ($helper->enabled ()) { + $storeId = Mage::app ()->getStore ()->getId (); + $tooManyAttemptsUrl = Mage::getStoreConfig ( 'extensions_store_addressvalidator/configuration/too_many_attempts_url', $storeId ); + $customerServiceUrl = $this->getUrl ( $tooManyAttemptsUrl ); + ?> - \ No newline at end of file diff --git a/modman b/modman index f072254..37de3d0 100644 --- a/modman +++ b/modman @@ -6,3 +6,4 @@ skin/frontend/base/default/css/extensions_store/addressvalidator.css skin/frontend/base/default/images/extensions_store/addressvalidator skin/frontend/base/default/images/extensions_store/addressvalidator skin/frontend/base/default/js/extensions_store/addressvalidator.js skin/frontend/base/default/js/extensions_store/addressvalidator.js skin/frontend/base/default/js/extensions_store/addressvalidator/address.js skin/frontend/base/default/js/extensions_store/addressvalidator/address.js +skin/frontend/base/default/js/extensions_store/addressvalidator/review.js skin/frontend/base/default/js/extensions_store/addressvalidator/review.js diff --git a/skin/frontend/base/default/js/extensions_store/addressvalidator.js b/skin/frontend/base/default/js/extensions_store/addressvalidator.js old mode 100755 new mode 100644 index 93e96ba..a201c8f --- a/skin/frontend/base/default/js/extensions_store/addressvalidator.js +++ b/skin/frontend/base/default/js/extensions_store/addressvalidator.js @@ -5,187 +5,196 @@ * @package ExtensionsStore_Addressvalidator * @author Extensions Store */ - -function AddressValidator($) -{ - +function AddressValidator($) { var config = {}; var results = []; - + var checkoutType = 'onepage'; /** * Initialize popup * */ - var initialize = function() - { + var initialize = function () { $('#co-billing-form .required-entry, #co-shipping-form .required-entry, #billing_address .required-entry, #shipping_address .required-entry, #billing-address-form .required-entry, #shipping-address-form .required-entry').change(function (e) { - $(this.form).find('.address-validated').val(0); + $(this.form).find('.address-validated').val(0); }); - //close the popup and stay on the current step - $('#av-popup .back').click(function (e) { - - var form = $('#address-form').val(); - e.preventDefault(); - e.stopPropagation(); - //allow validation - $('#' + form).find('.address-validated').val(0); - $('#av-popup').hide(); - - }); - + $('#av-popup .back').click(back); //handle address selection - $('#av-popup .select').click(function (e) { - - e.preventDefault(); - e.stopPropagation(); - - var $checkedRadio = $('#av-popup .radio:checked'); - var checked = ($checkedRadio.length > 0) ? true : false; - - if (checked) { - - var i = $checkedRadio.val(); - - if (!isNaN(i)) { - - var formType = getFormType(); - - i = parseInt(i); - var address = results[i]; - - //populate form - if (address) { - - populate(formType, address); - } - - $('#av-popup').hide(); - - gotoNextStep(); - - } - } - - }); - + $('#av-popup .select').click(select); //skip address validation and continue - $('#av-popup .skip').click(function (e) { - - e.preventDefault(); - e.stopPropagation(); - - var form = $('#address-form').val(); - var $skipValidation = $('#' + form).find('#skip-validation-' + form); - if ($skipValidation.length==0){ - $('#' + form).append(''); - } else { - $skipValidation.val(1); - } - - gotoNextStep(); - - $('#av-popup').hide(); - }); - + $('#av-popup .skip').click(skip); //too many attempts redirect button - $('#av-popup .okay').click(function (e) { - - e.preventDefault(); - e.stopPropagation(); - - var href = $(this).attr('href'); - - if (href.indexOf('http') != -1) { - - window.location.href = href; - } else { - - window.location.href = 'customer-service'; + $('#av-popup .okay').click(okay); + }; + /** + * Popup back button clicked + */ + var back = function (e) { + var form = $('#address-form').val(); + e.preventDefault(); + e.stopPropagation(); + //allow validation + $('#' + form).find('.address-validated').val(0); + $('#av-popup').hide(); + }; + /** + * Popup select button clicked + */ + var select = function (e) { + e.preventDefault(); + e.stopPropagation(); + var $checkedRadio = $('#av-popup .radio:checked'); + var checked = ($checkedRadio.length > 0) ? true : false; + if (checked) { + var i = $checkedRadio.val(); + if (!isNaN(i)) { + var formType = getFormType(); + i = parseInt(i); + var address = results[i]; + //populate form + if (address) { + populate(formType, address); + } + $('#av-popup').hide(); + gotoNextStep(); } - }); + } + }; + /** + * Popup skip button clicked + */ + var skip = function (e) { + e.preventDefault(); + e.stopPropagation(); + var form = $('#address-form').val(); + var $skipValidation = $('#' + form).find('#skip-validation-' + form); + if ($skipValidation.length == 0) { + $('#' + form).append(''); + } else { + $skipValidation.val(1); + } + gotoNextStep(); + $('#av-popup').hide(); + }; + /** + * Popup okay button clicked + */ + var okay = function (e) { + e.preventDefault(); + e.stopPropagation(); + var href = $(this).attr('href'); + if (href.indexOf('http') != -1) { + window.location.href = href; + } else { + window.location.href = 'customer-service'; + } }; - /** * Initialize one step checkout */ - var initOneStepCheckout = function() - { + var initOneStepCheckout = function () { + checkoutType = 'onestepcheckout'; //onestepcheckout form input change $('#billing_address .required-entry').change(function (e) { - $('#billing_address').find('.address-validated').val(0); + $('#billing_address').find('.address-validated').val(0); }); $('#shipping_address .required-entry').change(function (e) { $('#shipping_address').find('.address-validated').val(0); - }); - + }); var savingBilling, savingShipping = false; - Ajax.Responders.register({ - onCreate : function(req, transport, json){ - if (batriggered || satriggered){ - if (batriggered){ - if (savingBilling){ - transport.abort(); - return; - } - batriggered = false; - savingBilling = true; - req.url += '?form_id=billing_address'; - } else if (satriggered) { - if (savingShipping){ - transport.abort(); - return; - } - satriggered = false; - savingShipping = true; - req.url += '?form_id=shipping_address'; - } - - } - }, - onComplete : function(req, res) { - if (res.readyState == 4 && res.responseText.length > 0) { - var response = $.parseJSON(res.responseText); - if (response.hasOwnProperty('address_validator')) { - var av = response.address_validator; - if (!av.error) { - var formId = av.form_id; - if (savingBilling || savingShipping){ - if (!av.validate){ - var formType = (formId == 'billing_address') ? 'billing' : 'shipping'; - results = JSON.parse(av.data); - if (results.length > 0){ - populate(formType,results[0]); - } - } else { - validateAddress(formId, av.message, av.data); - } - if (formId =='billing_address'){ - savingBilling = false; - } else { - savingShipping = false; - } - } - } - } - } - } - }); + onCreate: function (req, transport, json) { + if (batriggered || satriggered) { + if (batriggered) { + if (savingBilling) { + transport.abort(); + return; + } + batriggered = false; + savingBilling = true; + req.url += '?form_id=billing_address'; + } else if (satriggered) { + if (savingShipping) { + transport.abort(); + return; + } + satriggered = false; + savingShipping = true; + req.url += '?form_id=shipping_address'; + } + } + }, + onComplete: function (req, res) { + if (res.readyState == 4 && res.responseText.length > 0) { + var response = $.parseJSON(res.responseText); + if (response.hasOwnProperty('address_validator')) { + var av = response.address_validator; + handleResponse(av); + } + } + } + }); + }; + /** + * Initialize light checkout + */ + var initLightCheckout = function () { + checkoutType = 'lightcheckout'; + var formId = ($('#billing_use_for_shipping_yes').is(':checked')) ? 'billing-new-address-form' : 'shipping-new-address-form'; + Ajax.Responders.register({ + onCreate: function (req, transport, json) { + if (req.parameters && req.parameters.action) { + formId = ($('#billing_use_for_shipping_yes').is(':checked')) ? 'billing-new-address-form' : 'shipping-new-address-form'; + var $skipValidation = $('#' + formId).find('#skip-validation-' + formId); + var skipValidation = (req.parameters.action == 'save_payment_methods' && ($skipValidation.length == 0 || $skipValidation.val() == 0)) ? 0 : 1; + req.url += '?form_id=' + formId + '&checkout_type=lightcheckout&skip_validation=' + skipValidation; + } + }, + onComplete: function (req, res) { + if (res.readyState == 4 && res.responseText.length > 0) { + var response = $.parseJSON(res.responseText); + if (response.hasOwnProperty('address_validator')) { + var av = response.address_validator; + populateCallback = function () { + checkout.LightcheckoutSubmit(); + }; + handleResponse(formId, av); + } + } + } + }); + }; + /** + * Handle response from Address Validator observer + * @param string formId + * @param object av The address validator response object + */ + var handleResponse = function (formId, av) { + if (av.validate === true) { + if (av.error === false) { + validateAddress(av.form_id, av.message, av.data); + } else { + if (av.data.indexOf('http') != -1) { + redirectSupport(av.message, av.data); + } else { + editAddress(av.form_id, av.message); + } + return false; + } + } else if (av.error === false) { + populate('billing', av.form_id, av.data); + } }; - /** - * select match + * Selected match * * @param string form id * @param string message * @param string resultsJson */ - var validateAddress = function (form, message, resultsJson) - { + var validateAddress = function (form, message, resultsJson) { //set the popup scope for any js that needs it $('#address-form').val(form); - try { results = JSON.parse(resultsJson); } catch (e) { @@ -193,10 +202,8 @@ function AddressValidator($) console.log(e.message); } } - //create list of addresses and show popup if (results && results.length > 0) { - //create list of address radio buttons var radios = ''; $popup = getPopup(); @@ -205,54 +212,35 @@ function AddressValidator($) $popup.find('.select').show(); var $radios = $popup.find('ul.radios'); $radios.empty(); - var length = results.length; - for (var i = 0; i < length; i++) { - var address = results[i]; - var street = (typeof address.street !== 'string' && address.street.length > 1) ? address.street.join(', ') : address.street; var city = (typeof address.city !== 'string' && address.city.length > 1) ? address.city.join(', ') : address.city; - var addressAr = [street, city, address.region, address.postcode, address.country]; addressAr = addressAr.filter(function (n) { return n != undefined }); - var label = addressAr.join(', '); - var checked = (i == 0) ? 'checked="checked"' : ''; - - radios += '
  • '; - + radios += '
  • '; } - //stick into list $radios.append(radios); - //show popup - $('#av-popup').show(); - + $('#av-popup').show(); } - - }; - + }; /** * No match, edit address */ - var editAddress = function (form, message) - { + var editAddress = function (form, message) { //set the popup scope for any js that needs it $('#address-form').val(form); - - if (config.allow_bypass === true){ - + if (config.allow_bypass === true) { $('#' + form).append(''); - gotoNextStep(); - - } else { - + gotoNextStep(); + } else { //get the popup $popup = getPopup(); //append message @@ -261,16 +249,14 @@ function AddressValidator($) $popup.find('.select, .okay').hide(); //show popup $('#av-popup').show(); - } + } }; - /** * Too many attempts, redirect to url * @param string message * @param string url */ - var redirectSupport = function (message, url) - { + var redirectSupport = function (message, url) { $popup = getPopup(); $popup.find('.av-message').html(message); //hide all buttons except ok @@ -279,180 +265,167 @@ function AddressValidator($) //show popup $('#av-popup').show(); }; - - /** * Get reset popup */ - var getPopup = function () - { + var getPopup = function () { var $popup = $('#av-popup'); //empty out previous results var $radios = $popup.find('ul.radios'); $radios.empty(); - return $popup; }; - - var getFormType = function() - { + var getFormType = function () { var form = $('#address-form').val(); var formType; - if (form == 'co-billing-form' || form == 'billing_address' || form == 'billing-address-form') { + if (form == 'co-billing-form' || form == 'billing_address' || form == 'billing-address-form' || form == 'billing-new-address-form') { formType = 'billing'; - } else if (form == 'co-shipping-form' || form == 'shipping_address' || form == 'shipping-address-form') { + } else if (form == 'co-shipping-form' || form == 'shipping_address' || form == 'shipping-address-form' || form == 'shipping-new-address-form') { formType = 'shipping'; - } - + } else if (form == 'av-popup-form') { + formType = 'av-popup'; + } return formType; }; - /** * Needed by paypal */ var populateCallback; - /** * * @param string formType * @param object address */ - var populate = function(formType, address) - { + var populate = function (formType, address) { //deselect addressbook entry - $('#' + formType + '-new-address-form').show(); + var formId = $('#address-form').val(); + $('#' + formId).show(); var customerAddressId = $('#' + formType + '-address-select').val(); var addressValidated = (customerAddressId) ? customerAddressId : 1; $('#' + formType + '-address-select').val(null); - - var originalStreet1 = $('#' + formType + '\\:street1').val(); + var fieldPrefix = formType + ((checkoutType == 'lightcheckout') ? '_' : '\\:'); + var originalStreet1 = $('#' + fieldPrefix + 'street1').val(); var street1 = address.street[0]; - $('#' + formType + '\\:street1').val(street1); - + $('#' + fieldPrefix + 'street1').val(street1); if (typeof address.street[1] != 'undefined') { - $('#' + formType + '\\:street2').val(address.street[1]); + $('#' + fieldPrefix + 'street2').val(address.street[1]); } else { - var originalStreet2 = $('#' + formType + '\\:street2').val(); - //remove line 2 if apt number added to line 1 - if (originalStreet2 && originalStreet1.toUpperCase().indexOf(' APT ') < 0 && street1.toUpperCase().indexOf(' APT ') >= 0){ - $('#' + formType + '\\:street2').val(''); - } + var originalStreet2 = $('#' + fieldPrefix + 'street2').val(); + //remove line 2 if apt number added to line 1 + if (originalStreet2 && originalStreet1.toUpperCase().indexOf(' APT ') < 0 && street1.toUpperCase().indexOf(' APT ') >= 0) { + $('#' + fieldPrefix + 'street2').val(''); + } } if (typeof address.street[2] != 'undefined') { - var street2 = $('#' + formType + '\\:street2').val(); - $('#' + formType + '\\:street2').val(street2 + ' ' + address.street[2]); + var street2 = $('#' + fieldPrefix + 'street2').val(); + $('#' + fieldPrefix + 'street2').val(street2 + ' ' + address.street[2]); } - var city = (typeof address.city !== 'string' && address.city.length > 1) ? address.city.join(', ') : address.city; - - $('#' + formType + '\\:city').val(city); - $('#' + formType + '\\:region').val(address.region); - $('#' + formType + '\\:region_id').val(address.region_id); - $('#' + formType + '\\:postcode').val(address.postcode); - var $countryInput = $('#' + formType + '\\:country_id'); + $('#' + fieldPrefix + 'city').val(city); + $('#' + fieldPrefix + 'region').val(address.region); + $('#' + fieldPrefix + 'region_id').val(address.region_id); + $('#' + fieldPrefix + 'postcode').val(address.postcode); + var $countryInput = $('#' + fieldPrefix + 'country_id'); $countryInput.val(address.country_id); - - $('#' + formType + '\\:save_in_address_book').attr('checked',true); - - var addressValidatedInput = ''; - var $form = $('#co-' + formType + '-form'); - if ($form.length>0){ + $('#' + fieldPrefix + 'save_in_address_book').attr('checked', true); + var addressValidatedInput = ''; + var $form = $('#' + formId); + if ($form.length > 0) { var $addressValidated = $form.find('.address-validated'); if ($addressValidated.length > 0) { $addressValidated.val(addressValidated); } else { $form.append(addressValidatedInput); - } - } else { - - var $addressValidated = $countryInput.next(); - if ($addressValidated.length > 0 && $addressValidated.hasClass('address-validated')){ + } else { + var $addressValidated = $countryInput.next(); + if ($addressValidated.length > 0 && $addressValidated.hasClass('address-validated')) { $addressValidated.val(addressValidated); - } else { - $countryInput.after(addressValidatedInput); - } - - } - - if (populateCallback){ - populateCallback(); - populateCallback = null; - } - + } else { + $countryInput.after(addressValidatedInput); + } + } + if (populateCallback) { + populateCallback(address); + populateCallback = null; + } }; /** * Go to next step */ - var gotoNextStep = function () - { + var gotoNextStep = function () { var formId = $('#address-form').val(); - if (formId == 'co-billing-form') { billing.save(); } else if (formId == 'co-shipping-form') { shipping.save(); + } else if (checkoutType == 'lightcheckout') { + checkout.LightcheckoutSubmit(); + } else if (checkoutType == 'paypal_express') { + if (populateCallback) { + populateCallback(null); + populateCallback = null; + } } - }; - - + }; + /** + * Public methods + */ return { - - init : function(configObj) - { + init: function (configObj) { config = configObj; - $(function () { - - initialize(); - if ($('#onestepcheckout-form').length > 0){ - initOneStepCheckout(); - } - }); + + initialize(); + if ($('#onestepcheckout-form').length > 0) { + initOneStepCheckout(); + } else if ($('#gcheckout-onepage-form').length > 0) { + initLightCheckout(); + } else if ($('body').hasClass('paypal-express-review')) { + checkoutType = 'paypal_express'; + } + }); }, - - validateAddress : function(form, message, resultsJson, populateCb) - { + handleResponse: function (formId, av) { + handleResponse(formId, av); + }, + validateAddress: function (form, message, resultsJson, populateCb) { validateAddress(form, message, resultsJson); //needed by paypal - if (populateCb){ - populateCallback = populateCb; + if (populateCb) { + populateCallback = populateCb; } }, - - populate : function(formType, formId, data) - { - if (typeof data == 'string'){ - data = JSON.parse(data); - } - if (data.length > 0){ - var address = data[0]; - $('#address-form').val(formId); - populate(formType, address); + populate: function (formType, formId, data, populateCb) { + if (typeof data == 'string') { + data = JSON.parse(data); + } + if (data.length > 0) { + var address = data[0]; + $('#address-form').val(formId); + if (populateCb) { + populateCallback = populateCb; + } + populate(formType, address); gotoNextStep(); - } + } }, - - editAddress : function(form, message) - { + editAddress: function (form, message, populateCb) { + if (populateCb) { + populateCallback = populateCb; + } editAddress(form, message); }, - - redirectSupport : function (message, url) - { + redirectSupport: function (message, url) { redirectSupport(message, url); } - }; - } -if (!window.jQuery){ - document.write(''); - document.write(''); +if (!window.jQuery) { + document.write(''); + document.write(''); } else { var addressValidator = AddressValidator(jQuery); -} - - +} \ No newline at end of file diff --git a/skin/frontend/base/default/js/extensions_store/addressvalidator/address.js b/skin/frontend/base/default/js/extensions_store/addressvalidator/address.js old mode 100755 new mode 100644 index d005526..8a574f6 --- a/skin/frontend/base/default/js/extensions_store/addressvalidator/address.js +++ b/skin/frontend/base/default/js/extensions_store/addressvalidator/address.js @@ -5,103 +5,44 @@ * @package ExtensionsStore_Addressvalidator * @author Extensions Store */ - -if (Billing){ - - //replace the nextStep method in the Billing prototype - var replaceBillingNextStepObj = { - nextStep: function (transport) { - - if (transport && transport.responseText) { - try { - response = eval('(' + transport.responseText + ')'); - } - catch (e) { - response = {}; - } - } - - var addressValidatorObj = response.address_validator; - - if (addressValidatorObj) { - if (addressValidatorObj.hasOwnProperty('validate')){ - - if (addressValidatorObj.validate === true){ - - if (addressValidatorObj.error === false){ - addressValidator.validateAddress('co-billing-form', addressValidatorObj.message, addressValidatorObj.data); - - } else { - if (addressValidatorObj.data.indexOf('http') != -1) { - addressValidator.redirectSupport(addressValidatorObj.message, addressValidatorObj.data); - } else { - addressValidator.editAddress('co-billing-form', addressValidatorObj.message); - } - return false; - } - - } else if (addressValidatorObj.error === false) { - addressValidator.populate('billing','co-billing-form', addressValidatorObj.data); - } - - } - } - - checkout.setStepResponse(response); - - payment.initWhatIsCvvListeners(); - } - - }; - - Billing.addMethods(replaceBillingNextStepObj); -} - -if (Shipping){ - - //replace the nextStep method in the Shipping prototype - var replaceShippingNextStepObj = { - nextStep: function (transport) { - - if (transport && transport.responseText) { - try { - response = eval('(' + transport.responseText + ')'); - } - catch (e) { - response = {}; - } - } - - var addressValidatorObj = response.address_validator; - - if (addressValidatorObj) { - if (addressValidatorObj.hasOwnProperty('validate')){ - - if (addressValidatorObj.validate === true){ - - if (addressValidatorObj.error === false){ - addressValidator.validateAddress('co-shipping-form', addressValidatorObj.message, addressValidatorObj.data); - - } else { - if (addressValidatorObj.data.indexOf('http') != -1) { - addressValidator.redirectSupport(addressValidatorObj.message, addressValidatorObj.data); - } else { - addressValidator.editAddress('co-shipping-form', addressValidatorObj.message); - } - return false; - } - - } else if (addressValidatorObj.error === false) { - addressValidator.populate('shipping','co-shipping-form', addressValidatorObj.data); - } - - } - } - - checkout.setStepResponse(response); - } - - }; - - Shipping.addMethods(replaceShippingNextStepObj); +if (Billing) { + //replace the nextStep method in the Billing prototype + var replaceBillingNextStepObj = { + nextStep: function(transport) { + if (transport && transport.responseText) { + try { + response = eval('(' + transport.responseText + ')'); + } catch (e) { + response = {}; + } + } + var addressValidatorObj = response.address_validator; + if (addressValidatorObj) { + addressValidator.handleResponse('co-billing-form', addressValidatorObj); + } + checkout.setStepResponse(response); + payment.initWhatIsCvvListeners(); + } + }; + Billing.addMethods(replaceBillingNextStepObj); } +if (Shipping) { + //replace the nextStep method in the Shipping prototype + var replaceShippingNextStepObj = { + nextStep: function(transport) { + if (transport && transport.responseText) { + try { + response = eval('(' + transport.responseText + ')'); + } catch (e) { + response = {}; + } + } + var addressValidatorObj = response.address_validator; + if (addressValidatorObj) { + addressValidator.handleResponse('co-shipping-form', addressValidatorObj); + } + checkout.setStepResponse(response); + } + }; + Shipping.addMethods(replaceShippingNextStepObj); +} \ No newline at end of file diff --git a/skin/frontend/base/default/js/extensions_store/addressvalidator/review.js b/skin/frontend/base/default/js/extensions_store/addressvalidator/review.js index 7030c11..5550c90 100644 --- a/skin/frontend/base/default/js/extensions_store/addressvalidator/review.js +++ b/skin/frontend/base/default/js/extensions_store/addressvalidator/review.js @@ -5,14 +5,15 @@ * @package ExtensionsStore_Addressvalidator * @author Extensions Store */ - /** + * EE 1.13 * Dispatch an ajax request of Update Order submission + * * @param url - url where to submit shipping method * @param resultId - id of element to be updated */ -OrderReviewController.prototype._submitUpdateOrder = function(event, url, resultId) -{ +OrderReviewController.prototype._submitUpdateOrder = function(event, url, + resultId) { this._copyShippingToBilling(); if (url && resultId && this._validateForm()) { if (this._copyElement && this._copyElement.checked) { @@ -23,7 +24,6 @@ OrderReviewController.prototype._submitUpdateOrder = function(event, url, result this._pleaseWait.show(); } this._toggleButton(this._ubpdateOrderButton, true); - arr = $$('[id^="billing:"]').invoke('enable'); var formData = this.form.serialize(true); if (this._copyElement.checked) { @@ -31,64 +31,198 @@ OrderReviewController.prototype._submitUpdateOrder = function(event, url, result this._copyElement.enable(); } formData.isAjax = true; - //add form id + // add form id formData.form_id = 'shipping-address-form'; - //replace Ajax.Updater with Ajax.Request + // replace Ajax.Updater with Ajax.Request var orc = this; - new Ajax.Request(url,{ - method: 'POST', - parameters: formData, - onComplete: function() { - if (this._pleaseWait && !this._updateShippingMethods) { - this._pleaseWait.hide(); - } - this._toggleButton(this._ubpdateOrderButton, false); - }.bind(this), - onSuccess: function(transport){ - try { - var responseText = transport.responseText; - var data = JSON.parse(responseText); - if (data && data.hasOwnProperty('update_content')){ - var updateContent = data.update_content; - $(resultId).update(updateContent); - if (data.hasOwnProperty('address_validator')){ - var addressValidatorObj = data.address_validator; - if (addressValidatorObj.hasOwnProperty('validate')){ - - if (addressValidatorObj.validate === true){ - - if (addressValidatorObj.error === false){ - addressValidator.validateAddress('shipping-address-form', addressValidatorObj.message, addressValidatorObj.data, orc._copyShippingToBilling.bind(orc)); - } else { - if (addressValidatorObj.data.indexOf('http') != -1) { - addressValidator.redirectSupport(addressValidatorObj.message, addressValidatorObj.data); - } else { - addressValidator.editAddress('shipping-address-form', addressValidatorObj.message); - } - return false; - } - - } else if (addressValidatorObj.error === false) { - addressValidator.populate('shipping','shipping-address-form', addressValidatorObj.data); - } - } - } - } else if (data) { - $(resultId).update(data); - } - - }catch(e){ - $(resultId).update(responseText); - } - - orc._updateShippingMethodsElement(); - }, - evalScripts: true - }); + new Ajax.Request( + url, { + method: 'POST', + parameters: formData, + onComplete: function() { + if (this._pleaseWait && !this._updateShippingMethods) { + this._pleaseWait.hide(); + } + this._toggleButton(this._ubpdateOrderButton, false); + }.bind(this), + onSuccess: function(transport) { + try { + var responseText = transport.responseText; + var data = JSON.parse(responseText); + if (data && data.hasOwnProperty('update_content')) { + var updateContent = data.update_content; + $(resultId).update(updateContent); + if (data.hasOwnProperty('address_validator')) { + var addressValidatorObj = data.address_validator; + if (addressValidatorObj.hasOwnProperty('validate')) { + if (addressValidatorObj.validate === true) { + if (addressValidatorObj.error === false) { + addressValidator.validateAddress('shipping-address-form', addressValidatorObj.message, addressValidatorObj.data, orc._copyShippingToBilling.bind(orc)); + } else { + if (addressValidatorObj.data.indexOf('http') != -1) { + addressValidator.redirectSupport(addressValidatorObj.message, addressValidatorObj.data); + } else { + addressValidator.editAddress('shipping-address-form', addressValidatorObj.message); + } + return false; + } + } else if (addressValidatorObj.error === false) { + addressValidator.populate( + 'shipping', + 'shipping-address-form', + addressValidatorObj.data); + } + } + } + } else if (data) { + $(resultId).update(data); + } + } catch (e) { + $(resultId).update(responseText); + } + orc._updateShippingMethodsElement(); + }, + evalScripts: true + }); } else { if (this._copyElement && this._copyElement.checked) { this._clearValidation('billing'); } } +}; + +/** + * EE 1.14 + * User clicked on Place Order button + * Override button click, open Ajax connection to addressvalidator route + * Address Validator has postdispatch event observer on the route + * AV intercepts route response and sends back JSON with addressvalidator object containing av details + * User can select validated address, back or skip + * If user selects back do nothing + * If user selects skip, submit the form + * If user selects address, populate hidden address form with selected address and open up Ajax connection sending user selection to update quote address + * On Ajax completion, either submit form or show select shipping method + */ +OrderReviewController.prototype._submitOrder = function() { + if (this._canSubmitOrder && (this.reloadByShippingSelect || this._validateForm())) { + var addressValidated = $('address-validated').value; + var skipValidation = $('skip-validation').value; + if ((!addressValidated || addressValidated == '0') && (!skipValidation || skipValidation == '0')) { + var review = this; + var form = this.form;//paypal form + var formData = form.serialize(true); + var url = addressValidatorConfig.validate_url; + //post av controller, av has observer on postdispatch + new Ajax.Request(url, { + method: 'POST', + parameters: formData, + onSuccess: function(transport) { + try { + //hide loading + review._pleaseWait.hide(); + review._updateOrderSubmit(false); + if (this._ubpdateOrderButton) { + review._ubpdateOrderButton.removeClassName('no-checkout'); + review._ubpdateOrderButton.setStyle({ + opacity: 1 + }); + } + var responseText = transport.responseText; + var data = JSON.parse(responseText); + if (data.hasOwnProperty('address_validator')) { + var addressValidatorObj = data.address_validator; + if (addressValidatorObj.hasOwnProperty('validate')) { + //callback after address form is populated + var callback = function(address) { + //if user clicked on skip button + var skipValidation = $('skip-validation-av-popup-form'); + if (skipValidation) { + document.cookie = 'skip_validation=1; path=/;'; + form.insert(''); + form.submit(); + } else { + //update shipping address with selected address + if (address && address.formatted_address){ + var sections = $('checkoutSteps').select('.section.info-set'); + var section = sections[0]; + if (section){ + var ps = $(section).select('.info-box p'); + if (ps){ + var p = ps[0]; + if (p){ + p.innerText = address.formatted_address; + } + } + } + } + //call av controller, passing selected address + var params = $('av-popup-form').serialize(true); + new Ajax.Request(url, { + method: 'POST', + parameters: params, + onComplete: function() { + if (review.shippingSelect && review.shippingSelect.value != ''){ + form.submit(); + }else { + //enable place order button + review._toggleButton(review.formSubmit, false) + var message = '
    • Please specify a shipping method.
  • '; + var messages = $('body-main').select('.messages'); + if (messages.length == 0){ + var messagesUl = '
      '+message+'
    '; + $('body-main').insert({top: messagesUl}); + } else { + messages = messages[0]; + messages.insert(message); + } + } + }.bind(this) + }); + } + }; + //show popup + if (addressValidatorObj.validate === true) { + if (addressValidatorObj.error === false) { + //populate address form, passing callback + addressValidator.validateAddress('av-popup-form', addressValidatorObj.message, addressValidatorObj.data, callback); + } else { + //show error on popup or have user handle error + if (addressValidatorObj.data.indexOf('http') != -1) { + addressValidator.redirectSupport(addressValidatorObj.message, addressValidatorObj.data); + } else { + addressValidator.editAddress('av-popup-form', addressValidatorObj.message, callback); + } + } + } else if (addressValidatorObj.error === false) { + //no error and not validate, so must be autopopulate + addressValidator.populate('shipping', 'av-popup-form', addressValidatorObj.data, callback); + } + } + } else { + form.submit(); + } + } catch (e) { + if (typeof console == 'object'){ + console.log(e.message); + } + } + } + }); + } else { + this.form.submit(); + } + this._updateOrderSubmit(true); + if (this._ubpdateOrderButton) { + this._ubpdateOrderButton.addClassName('no-checkout'); + this._ubpdateOrderButton.setStyle({ + opacity: .5 + }); + } + if (this._pleaseWait) { + this._pleaseWait.show(); + } + return; + } + this._updateOrderSubmit(true); }; \ No newline at end of file