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
-
-
-
-
-
-
-
-
-
-
- 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
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
+ 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 = '';
+ $('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