Version Notes
Features:
- Add support for IP address checking and Dutch address checking with the Postcode.nl Signal API
- Added 'validation-passed' and 'validation-failed' css classes to checkout input fields, support for 'validate-immediate'
- Added provisional support for the Lotusbreath One Step Checkout extension
Fixes:
- Fix for language files installation via modman/composer
Download this release
Release Info
| Developer | Postcode.nl Technical Support |
| Extension | PostcodeNl_Api |
| Version | 1.2.1.0 |
| Comparing to | |
| See all releases | |
Code changes from version 1.2.0.1 to 1.2.1.0
- app/code/community/PostcodeNl/Api/Helper/Data.php +49 -6
- app/code/community/PostcodeNl/Api/data/postcodenl_api_setup/data-upgrade-1.0.8.0-1.1.0.0.php +1 -1
- app/code/community/PostcodeNl/Api/etc/config.xml +1 -1
- app/design/frontend/base/default/layout/postcodenl/api/lookup.xml +10 -0
- js/postcodenl/api/lookup.js +78 -4
- package.xml +10 -7
app/code/community/PostcodeNl/Api/Helper/Data.php
CHANGED
|
@@ -105,7 +105,7 @@ class PostcodeNl_Api_Helper_Data extends Mage_Core_Helper_Abstract
|
|
| 105 |
}
|
| 106 |
|
| 107 |
/**
|
| 108 |
-
*
|
| 109 |
*
|
| 110 |
* @param string $postcode
|
| 111 |
* @param string $houseNumber
|
|
@@ -268,11 +268,11 @@ class PostcodeNl_Api_Helper_Data extends Mage_Core_Helper_Abstract
|
|
| 268 |
}
|
| 269 |
|
| 270 |
/**
|
| 271 |
-
* Split a
|
| 272 |
* Examples: "123 2", "123 rood", "123a", "123a4", "123-a", "123 II"
|
| 273 |
-
* (the official notation is to separate the
|
| 274 |
*
|
| 275 |
-
* @param string $houseNumber
|
| 276 |
*
|
| 277 |
* @return array Split 'houseNumber' and 'houseNumberAddition'
|
| 278 |
*/
|
|
@@ -289,9 +289,9 @@ class PostcodeNl_Api_Helper_Data extends Mage_Core_Helper_Abstract
|
|
| 289 |
}
|
| 290 |
|
| 291 |
/**
|
| 292 |
-
* Split a
|
| 293 |
*
|
| 294 |
-
* @param array $streetData Lines of
|
| 295 |
*
|
| 296 |
* @return array Array containing 'street', 'houseNumber' and 'houseNumberAddition'
|
| 297 |
*/
|
|
@@ -357,6 +357,9 @@ class PostcodeNl_Api_Helper_Data extends Mage_Core_Helper_Abstract
|
|
| 357 |
// No customer might be available if this is an order status change
|
| 358 |
$hasCustomer = ($order->getCustomer() !== null);
|
| 359 |
|
|
|
|
|
|
|
|
|
|
| 360 |
// Only send phonenumber if it is at least 5 characters long
|
| 361 |
$phoneNumber = Mage::helper('core/string')->strlen($order->getBillingAddress()->getTelephone()) >= 5 ? $order->getBillingAddress()->getTelephone() : null;
|
| 362 |
|
|
@@ -374,6 +377,10 @@ class PostcodeNl_Api_Helper_Data extends Mage_Core_Helper_Abstract
|
|
| 374 |
'country' => $order->getBillingAddress()->getCountryId(),
|
| 375 |
),
|
| 376 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
| 377 |
'transaction' => array(
|
| 378 |
'internalId' => $order->getIncrementId(),
|
| 379 |
'deliveryAddress' => array(
|
|
@@ -388,9 +395,45 @@ class PostcodeNl_Api_Helper_Data extends Mage_Core_Helper_Abstract
|
|
| 388 |
),
|
| 389 |
);
|
| 390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 391 |
return $this->checkSignal($signalCheck);
|
| 392 |
}
|
| 393 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 394 |
protected function _getStoreConfig($path)
|
| 395 |
{
|
| 396 |
return Mage::getStoreConfig($path);
|
| 105 |
}
|
| 106 |
|
| 107 |
/**
|
| 108 |
+
* Lookup information about a Dutch address by postcode, house number, and house number addition
|
| 109 |
*
|
| 110 |
* @param string $postcode
|
| 111 |
* @param string $houseNumber
|
| 268 |
}
|
| 269 |
|
| 270 |
/**
|
| 271 |
+
* Split a house number addition from a house number.
|
| 272 |
* Examples: "123 2", "123 rood", "123a", "123a4", "123-a", "123 II"
|
| 273 |
+
* (the official notation is to separate the house number and addition with a single space)
|
| 274 |
*
|
| 275 |
+
* @param string $houseNumber House number input
|
| 276 |
*
|
| 277 |
* @return array Split 'houseNumber' and 'houseNumberAddition'
|
| 278 |
*/
|
| 289 |
}
|
| 290 |
|
| 291 |
/**
|
| 292 |
+
* Split a street name, house number and house number addition from a text lines containing a street and house number information.
|
| 293 |
*
|
| 294 |
+
* @param array $streetData Lines of street data
|
| 295 |
*
|
| 296 |
* @return array Array containing 'street', 'houseNumber' and 'houseNumberAddition'
|
| 297 |
*/
|
| 357 |
// No customer might be available if this is an order status change
|
| 358 |
$hasCustomer = ($order->getCustomer() !== null);
|
| 359 |
|
| 360 |
+
// Note if this is executed as an admin, then do not send access details, as that might muddy the customer info
|
| 361 |
+
$isAdmin = Mage::app()->getStore()->isAdmin();
|
| 362 |
+
|
| 363 |
// Only send phonenumber if it is at least 5 characters long
|
| 364 |
$phoneNumber = Mage::helper('core/string')->strlen($order->getBillingAddress()->getTelephone()) >= 5 ? $order->getBillingAddress()->getTelephone() : null;
|
| 365 |
|
| 377 |
'country' => $order->getBillingAddress()->getCountryId(),
|
| 378 |
),
|
| 379 |
),
|
| 380 |
+
'access' => array(
|
| 381 |
+
'ipAddress' => $isAdmin ? null : Mage::helper('core/http')->getRemoteAddr(),
|
| 382 |
+
'additionalIpAddresses' => array(),
|
| 383 |
+
),
|
| 384 |
'transaction' => array(
|
| 385 |
'internalId' => $order->getIncrementId(),
|
| 386 |
'deliveryAddress' => array(
|
| 395 |
),
|
| 396 |
);
|
| 397 |
|
| 398 |
+
// Retrieve quote for registered remote IP / proxy IP (they are registered at session start)
|
| 399 |
+
$quoteId = $order->getQuoteId();
|
| 400 |
+
$quote = Mage::getModel('sales/quote')->load($quoteId);
|
| 401 |
+
if ($quote)
|
| 402 |
+
{
|
| 403 |
+
$signalCheck['access'] = $this->_addAccessIpAddress($signalCheck['access'], $quote->getRemoteIp());
|
| 404 |
+
$signalCheck['access'] = $this->_addAccessIpAddress($signalCheck['access'], $quote->getXForwardedFor());
|
| 405 |
+
}
|
| 406 |
+
// Register current forwarded-for IP address (if not admin)
|
| 407 |
+
if (!$isAdmin)
|
| 408 |
+
{
|
| 409 |
+
$forwardedFor = Mage::app()->getRequest()->getServer('HTTP_X_FORWARDED_FOR');
|
| 410 |
+
$signalCheck['access'] = $this->_addAccessIpAddress($signalCheck['access'], $forwardedFor);
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
return $this->checkSignal($signalCheck);
|
| 414 |
}
|
| 415 |
|
| 416 |
+
protected function _addAccessIpAddress($access, $inputIp)
|
| 417 |
+
{
|
| 418 |
+
if ($inputIp === '' || $inputIp === null || $inputIp === false)
|
| 419 |
+
return $access;
|
| 420 |
+
|
| 421 |
+
// input might be multiple IPs (from X-Forwarded-For, for example)
|
| 422 |
+
if (strpos($inputIp, ',') !== false)
|
| 423 |
+
{
|
| 424 |
+
$inputIp = array_map('trim', explode(',', $inputIp));
|
| 425 |
+
|
| 426 |
+
foreach ($inputIp as $ip)
|
| 427 |
+
$access = $this->_addAccessIpAddress($access, $ip);
|
| 428 |
+
}
|
| 429 |
+
else if (filter_var($inputIp, FILTER_VALIDATE_IP) && $inputIp !== $access['ipAddress'] && !in_array($inputIp, $access['additionalIpAddresses']))
|
| 430 |
+
{
|
| 431 |
+
$access['additionalIpAddresses'][] = $inputIp;
|
| 432 |
+
}
|
| 433 |
+
|
| 434 |
+
return $access;
|
| 435 |
+
}
|
| 436 |
+
|
| 437 |
protected function _getStoreConfig($path)
|
| 438 |
{
|
| 439 |
return Mage::getStoreConfig($path);
|
app/code/community/PostcodeNl/Api/data/postcodenl_api_setup/data-upgrade-1.0.8.0-1.1.0.0.php
CHANGED
|
@@ -12,7 +12,7 @@ $serviceNeverHideCountry = Mage::getStoreConfig('postcodenl/config/never_hide_co
|
|
| 12 |
$serviceUseStreet2AsHousenumber = Mage::getStoreConfig('postcodenl/config/use_street2_as_housenumber');
|
| 13 |
|
| 14 |
// Only do update, if we actually have old configuration (secret being most important to check)
|
| 15 |
-
if ($serviceSecret !==
|
| 16 |
{
|
| 17 |
// Set new basic configuration
|
| 18 |
$config->saveConfig('postcodenl_api/config/enabled', $serviceEnabled, 'default', 0);
|
| 12 |
$serviceUseStreet2AsHousenumber = Mage::getStoreConfig('postcodenl/config/use_street2_as_housenumber');
|
| 13 |
|
| 14 |
// Only do update, if we actually have old configuration (secret being most important to check)
|
| 15 |
+
if ($serviceSecret !== '')
|
| 16 |
{
|
| 17 |
// Set new basic configuration
|
| 18 |
$config->saveConfig('postcodenl_api/config/enabled', $serviceEnabled, 'default', 0);
|
app/code/community/PostcodeNl/Api/etc/config.xml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<PostcodeNl_Api>
|
| 5 |
-
<version>1.2.0
|
| 6 |
</PostcodeNl_Api>
|
| 7 |
</modules>
|
| 8 |
<frontend>
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<PostcodeNl_Api>
|
| 5 |
+
<version>1.2.1.0</version>
|
| 6 |
</PostcodeNl_Api>
|
| 7 |
</modules>
|
| 8 |
<frontend>
|
app/design/frontend/base/default/layout/postcodenl/api/lookup.xml
CHANGED
|
@@ -166,4 +166,14 @@
|
|
| 166 |
<block type="postcodenl_api/jsinit" name="postcodenl.jsinit" template="postcodenl/api/jsinit.phtml" />
|
| 167 |
</reference>
|
| 168 |
</mastercheckout_index_index>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 169 |
</layout>
|
| 166 |
<block type="postcodenl_api/jsinit" name="postcodenl.jsinit" template="postcodenl/api/jsinit.phtml" />
|
| 167 |
</reference>
|
| 168 |
</mastercheckout_index_index>
|
| 169 |
+
<!-- For `Lotusbreath One Step Checkout` -->
|
| 170 |
+
<lotusbreath_onestepcheckout_index_index>
|
| 171 |
+
<reference name="head">
|
| 172 |
+
<action method="addCss" ifconfig="postcodenl_api/config/enabled"><script>postcodenl/api/css/lookup.css</script></action>
|
| 173 |
+
<action method="addJs" ifconfig="postcodenl_api/config/enabled"><script>postcodenl/api/lookup.js</script></action>
|
| 174 |
+
</reference>
|
| 175 |
+
<reference name="content">
|
| 176 |
+
<block type="postcodenl_api/jsinit" name="postcodenl.jsinit" template="postcodenl/api/jsinit.phtml" />
|
| 177 |
+
</reference>
|
| 178 |
+
</lotusbreath_onestepcheckout_index_index>
|
| 179 |
</layout>
|
js/postcodenl/api/lookup.js
CHANGED
|
@@ -78,6 +78,7 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 78 |
'Quick One Page Checkout (by KAM)': 18,
|
| 79 |
'MAGExtended MasterCheckout': 19,
|
| 80 |
'Customer Address Form': 20,
|
|
|
|
| 81 |
},
|
| 82 |
enrichHint: null,
|
| 83 |
|
|
@@ -120,16 +121,19 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 120 |
if (advice)
|
| 121 |
{
|
| 122 |
Validation.hideAdvice($(prefix +'postcode_housenumber'), advice, 'invalid-postcode');
|
|
|
|
| 123 |
}
|
| 124 |
var advice = Validation.getAdvice('invalid-postcode', $(prefix +'postcode_input'));
|
| 125 |
if (advice)
|
| 126 |
{
|
| 127 |
Validation.hideAdvice($(prefix +'postcode_input'), advice, 'invalid-postcode');
|
|
|
|
| 128 |
}
|
| 129 |
var advice = Validation.getAdvice('address-is-postofficebox', $(prefix +'postcode_input'));
|
| 130 |
if (advice)
|
| 131 |
{
|
| 132 |
Validation.hideAdvice($(prefix +'postcode_input'), advice, 'address-is-postofficebox');
|
|
|
|
| 133 |
}
|
| 134 |
if ($(prefix +'postcode_housenumber_addition'))
|
| 135 |
{
|
|
@@ -137,6 +141,7 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 137 |
if (additionAdvice)
|
| 138 |
{
|
| 139 |
Validation.hideAdvice($(prefix +'postcode_housenumber_addition'), additionAdvice, 'invalid-addition');
|
|
|
|
| 140 |
}
|
| 141 |
}
|
| 142 |
},
|
|
@@ -429,6 +434,8 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 429 |
$(prefix + 'postcode_output').update((data.street +' '+ data.houseNumber +' '+ (data.houseNumberAddition ? data.houseNumberAddition : housenumber_addition)).trim() + "<br>" + data.postcode + " " + data.city);
|
| 430 |
}
|
| 431 |
|
|
|
|
|
|
|
| 432 |
// Handle all housenumber addition possiblities
|
| 433 |
if (data.houseNumberAddition == null && (housenumber_addition_select == housenumber_addition || (housenumber_addition_select == '__none__' && housenumber_addition == '')))
|
| 434 |
{
|
|
@@ -444,6 +451,13 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 444 |
{
|
| 445 |
newAdvice = Validation.createAdvice('invalid-addition', $(prefix +'postcode_housenumber_addition'), false, (housenumber_addition != '' ? PCNLAPI_CONFIG.translations.houseNumberAdditionUnknown.replace('{addition}', housenumber_addition) : PCNLAPI_CONFIG.translations.houseNumberAdditionRequired));
|
| 446 |
Validation.showAdvice($(prefix +'postcode_housenumber_addition'), newAdvice, 'invalid-addition');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 447 |
}
|
| 448 |
}
|
| 449 |
else if (data.houseNumberAddition == null)
|
|
@@ -454,12 +468,17 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 454 |
|
| 455 |
newAdvice = Validation.createAdvice('invalid-addition', $(prefix +'postcode_housenumber_addition'), false, (housenumber_addition != '' ? PCNLAPI_CONFIG.translations.houseNumberAdditionUnknown.replace('{addition}', housenumber_addition) : PCNLAPI_CONFIG.translations.houseNumberAdditionRequired));
|
| 456 |
Validation.showAdvice($(prefix +'postcode_housenumber_addition'), newAdvice, 'invalid-addition');
|
|
|
|
|
|
|
|
|
|
| 457 |
}
|
| 458 |
else if (data.houseNumberAdditions.length > 1 || (data.houseNumberAdditions.length == 1 && data.houseNumberAdditions[0] != ''))
|
| 459 |
{
|
| 460 |
// Address has multiple housenumber additions
|
| 461 |
var additionSelect = this.createPostcodeHouseNumberAddition(prefix, postcodeFieldId, countryFieldId, street1, street2, street3, street4, data.houseNumberAdditions);
|
| 462 |
additionSelect.setValue(data.houseNumberAddition);
|
|
|
|
|
|
|
| 463 |
}
|
| 464 |
else
|
| 465 |
{
|
|
@@ -471,6 +490,15 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 471 |
{
|
| 472 |
newAdvice = Validation.createAdvice('address-is-postofficebox', $(prefix + 'postcode_input'), false, PCNLAPI_CONFIG.translations.postOfficeBoxNotAllowed);
|
| 473 |
Validation.showAdvice($(prefix + postcodeFieldId), newAdvice, 'address-is-postofficebox');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 474 |
}
|
| 475 |
}
|
| 476 |
else if (data.message !== undefined)
|
|
@@ -479,9 +507,12 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 479 |
if (typeof data.useManual !== 'undefined' && data.useManual === true) {
|
| 480 |
$(prefix + 'postcode_input_checkbox').click();
|
| 481 |
}
|
|
|
|
| 482 |
|
| 483 |
-
newAdvice = Validation.createAdvice('invalid-postcode', $(prefix +
|
| 484 |
-
Validation.showAdvice($(prefix +
|
|
|
|
|
|
|
| 485 |
|
| 486 |
this.removeHousenumberAddition(prefix);
|
| 487 |
}
|
|
@@ -489,8 +520,12 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 489 |
{
|
| 490 |
// Address check did not return an error or a postcode result (something else wrong)
|
| 491 |
|
| 492 |
-
|
| 493 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 494 |
|
| 495 |
this.removeHousenumberAddition(prefix);
|
| 496 |
}
|
|
@@ -918,6 +953,7 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 918 |
// + Fire Checkout
|
| 919 |
// + Quick One Page Checkout (by KAM)
|
| 920 |
// + MAGExtended MasterCheckout
|
|
|
|
| 921 |
|
| 922 |
if ($(document.body).hasClassName('firecheckout-index-index'))
|
| 923 |
this.enrichType = 'Fire Checkout';
|
|
@@ -925,6 +961,8 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 925 |
this.enrichType = 'Quick One Page Checkout (by KAM)';
|
| 926 |
else if ($(document.body).hasClassName('mastercheckout-index-index'))
|
| 927 |
this.enrichType = 'MAGExtended MasterCheckout';
|
|
|
|
|
|
|
| 928 |
else if ($(document.body).hasClassName('checkout-onepage-index'))
|
| 929 |
this.enrichType = 'Basic';
|
| 930 |
else if ($(document.body).hasClassName('customer-address-form'))
|
|
@@ -957,6 +995,10 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 957 |
this.showFields([prefix +'postcode_input', prefix +'postcode_housenumber', prefix +'postcode_housenumber_addition', prefix + 'postcode_input:info-text', prefix + 'postcode_input_checkbox']);
|
| 958 |
}
|
| 959 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 960 |
this.toggleAddressFields(prefix, postcodeFieldId, countryFieldId, street1, street2, street3, street4);
|
| 961 |
|
| 962 |
// Previous value was not NL, switch manual off
|
|
@@ -1045,6 +1087,36 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 1045 |
}
|
| 1046 |
},
|
| 1047 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1048 |
/**
|
| 1049 |
* Toggle address field visibility, to be in line with the value of the 'manual input' checkbox.
|
| 1050 |
*/
|
|
@@ -1166,6 +1238,8 @@ document.observe("dom:loaded", PCNL_START_FUNCTION = function()
|
|
| 1166 |
|
| 1167 |
$(prefix +'postcode_housenumber_addition').observe('change', function(e) { pcnlapi.lookupPostcode(prefix, postcodeFieldId, countryFieldId, street1, street2, street3, street4, e); });
|
| 1168 |
|
|
|
|
|
|
|
| 1169 |
return $(prefix +'postcode_housenumber_addition');
|
| 1170 |
},
|
| 1171 |
|
| 78 |
'Quick One Page Checkout (by KAM)': 18,
|
| 79 |
'MAGExtended MasterCheckout': 19,
|
| 80 |
'Customer Address Form': 20,
|
| 81 |
+
'Lotusbreath One Step Checkout': 21
|
| 82 |
},
|
| 83 |
enrichHint: null,
|
| 84 |
|
| 121 |
if (advice)
|
| 122 |
{
|
| 123 |
Validation.hideAdvice($(prefix +'postcode_housenumber'), advice, 'invalid-postcode');
|
| 124 |
+
$(prefix +'postcode_housenumber').removeClassName('validation-failed');
|
| 125 |
}
|
| 126 |
var advice = Validation.getAdvice('invalid-postcode', $(prefix +'postcode_input'));
|
| 127 |
if (advice)
|
| 128 |
{
|
| 129 |
Validation.hideAdvice($(prefix +'postcode_input'), advice, 'invalid-postcode');
|
| 130 |
+
$(prefix +'postcode_input').removeClassName('validation-failed');
|
| 131 |
}
|
| 132 |
var advice = Validation.getAdvice('address-is-postofficebox', $(prefix +'postcode_input'));
|
| 133 |
if (advice)
|
| 134 |
{
|
| 135 |
Validation.hideAdvice($(prefix +'postcode_input'), advice, 'address-is-postofficebox');
|
| 136 |
+
$(prefix +'postcode_input').removeClassName('validation-failed');
|
| 137 |
}
|
| 138 |
if ($(prefix +'postcode_housenumber_addition'))
|
| 139 |
{
|
| 141 |
if (additionAdvice)
|
| 142 |
{
|
| 143 |
Validation.hideAdvice($(prefix +'postcode_housenumber_addition'), additionAdvice, 'invalid-addition');
|
| 144 |
+
$(prefix +'postcode_housenumber_addition').removeClassName('validation-failed');
|
| 145 |
}
|
| 146 |
}
|
| 147 |
},
|
| 434 |
$(prefix + 'postcode_output').update((data.street +' '+ data.houseNumber +' '+ (data.houseNumberAddition ? data.houseNumberAddition : housenumber_addition)).trim() + "<br>" + data.postcode + " " + data.city);
|
| 435 |
}
|
| 436 |
|
| 437 |
+
var hasAdvice = false;
|
| 438 |
+
|
| 439 |
// Handle all housenumber addition possiblities
|
| 440 |
if (data.houseNumberAddition == null && (housenumber_addition_select == housenumber_addition || (housenumber_addition_select == '__none__' && housenumber_addition == '')))
|
| 441 |
{
|
| 451 |
{
|
| 452 |
newAdvice = Validation.createAdvice('invalid-addition', $(prefix +'postcode_housenumber_addition'), false, (housenumber_addition != '' ? PCNLAPI_CONFIG.translations.houseNumberAdditionUnknown.replace('{addition}', housenumber_addition) : PCNLAPI_CONFIG.translations.houseNumberAdditionRequired));
|
| 453 |
Validation.showAdvice($(prefix +'postcode_housenumber_addition'), newAdvice, 'invalid-addition');
|
| 454 |
+
$(prefix +'postcode_housenumber_addition').removeClassName('validation-passed');
|
| 455 |
+
$(prefix +'postcode_housenumber_addition').addClassName('validation-failed');
|
| 456 |
+
hasAdvice = true;
|
| 457 |
+
}
|
| 458 |
+
else
|
| 459 |
+
{
|
| 460 |
+
$(prefix + 'postcode_housenumber_addition').addClassName('validation-passed');
|
| 461 |
}
|
| 462 |
}
|
| 463 |
else if (data.houseNumberAddition == null)
|
| 468 |
|
| 469 |
newAdvice = Validation.createAdvice('invalid-addition', $(prefix +'postcode_housenumber_addition'), false, (housenumber_addition != '' ? PCNLAPI_CONFIG.translations.houseNumberAdditionUnknown.replace('{addition}', housenumber_addition) : PCNLAPI_CONFIG.translations.houseNumberAdditionRequired));
|
| 470 |
Validation.showAdvice($(prefix +'postcode_housenumber_addition'), newAdvice, 'invalid-addition');
|
| 471 |
+
$(prefix +'postcode_housenumber_addition').removeClassName('validation-passed');
|
| 472 |
+
$(prefix +'postcode_housenumber_addition').addClassName('validation-failed');
|
| 473 |
+
hasAdvice = true;
|
| 474 |
}
|
| 475 |
else if (data.houseNumberAdditions.length > 1 || (data.houseNumberAdditions.length == 1 && data.houseNumberAdditions[0] != ''))
|
| 476 |
{
|
| 477 |
// Address has multiple housenumber additions
|
| 478 |
var additionSelect = this.createPostcodeHouseNumberAddition(prefix, postcodeFieldId, countryFieldId, street1, street2, street3, street4, data.houseNumberAdditions);
|
| 479 |
additionSelect.setValue(data.houseNumberAddition);
|
| 480 |
+
|
| 481 |
+
$(prefix + 'postcode_housenumber_addition').addClassName('validation-passed');
|
| 482 |
}
|
| 483 |
else
|
| 484 |
{
|
| 490 |
{
|
| 491 |
newAdvice = Validation.createAdvice('address-is-postofficebox', $(prefix + 'postcode_input'), false, PCNLAPI_CONFIG.translations.postOfficeBoxNotAllowed);
|
| 492 |
Validation.showAdvice($(prefix + postcodeFieldId), newAdvice, 'address-is-postofficebox');
|
| 493 |
+
$(prefix + postcodeFieldId).removeClassName('validation-passed');
|
| 494 |
+
$(prefix + postcodeFieldId).addClassName('validation-failed');
|
| 495 |
+
hasAdvice = true;
|
| 496 |
+
}
|
| 497 |
+
|
| 498 |
+
if (!hasAdvice)
|
| 499 |
+
{
|
| 500 |
+
$(prefix + postcodeFieldId).addClassName('validation-passed');
|
| 501 |
+
$(prefix + 'postcode_housenumber').addClassName('validation-passed');
|
| 502 |
}
|
| 503 |
}
|
| 504 |
else if (data.message !== undefined)
|
| 507 |
if (typeof data.useManual !== 'undefined' && data.useManual === true) {
|
| 508 |
$(prefix + 'postcode_input_checkbox').click();
|
| 509 |
}
|
| 510 |
+
var target = (data.messageTarget == 'postcode' ? 'postcode_input' : 'postcode_housenumber');
|
| 511 |
|
| 512 |
+
newAdvice = Validation.createAdvice('invalid-postcode', $(prefix + target), false, data.message);
|
| 513 |
+
Validation.showAdvice($(prefix + target), newAdvice, 'invalid-postcode');
|
| 514 |
+
$(prefix + target).removeClassName('validation-passed');
|
| 515 |
+
$(prefix + target).addClassName('validation-failed');
|
| 516 |
|
| 517 |
this.removeHousenumberAddition(prefix);
|
| 518 |
}
|
| 520 |
{
|
| 521 |
// Address check did not return an error or a postcode result (something else wrong)
|
| 522 |
|
| 523 |
+
var target = (data.messageTarget == 'postcode' ? 'postcode_input' : 'postcode_housenumber');
|
| 524 |
+
|
| 525 |
+
newAdvice = Validation.createAdvice('invalid-postcode', $(prefix + target), false, '');
|
| 526 |
+
Validation.showAdvice($(prefix + target), newAdvice, 'invalid-postcode');
|
| 527 |
+
$(prefix + target).removeClassName('validation-passed');
|
| 528 |
+
$(prefix + target).addClassName('validation-failed');
|
| 529 |
|
| 530 |
this.removeHousenumberAddition(prefix);
|
| 531 |
}
|
| 953 |
// + Fire Checkout
|
| 954 |
// + Quick One Page Checkout (by KAM)
|
| 955 |
// + MAGExtended MasterCheckout
|
| 956 |
+
// + Lotusbreath One Step Checkout
|
| 957 |
|
| 958 |
if ($(document.body).hasClassName('firecheckout-index-index'))
|
| 959 |
this.enrichType = 'Fire Checkout';
|
| 961 |
this.enrichType = 'Quick One Page Checkout (by KAM)';
|
| 962 |
else if ($(document.body).hasClassName('mastercheckout-index-index'))
|
| 963 |
this.enrichType = 'MAGExtended MasterCheckout';
|
| 964 |
+
else if ($(document.body).hasClassName('lotusbreath-onestepcheckout-index-index'))
|
| 965 |
+
this.enrichType = 'Lotusbreath One Step Checkout';
|
| 966 |
else if ($(document.body).hasClassName('checkout-onepage-index'))
|
| 967 |
this.enrichType = 'Basic';
|
| 968 |
else if ($(document.body).hasClassName('customer-address-form'))
|
| 995 |
this.showFields([prefix +'postcode_input', prefix +'postcode_housenumber', prefix +'postcode_housenumber_addition', prefix + 'postcode_input:info-text', prefix + 'postcode_input_checkbox']);
|
| 996 |
}
|
| 997 |
|
| 998 |
+
this.observeImmediate(prefix, 'postcode_input');
|
| 999 |
+
this.observeImmediate(prefix, 'postcode_housenumber');
|
| 1000 |
+
this.observeImmediate(prefix, 'postcode_input_checkbox');
|
| 1001 |
+
|
| 1002 |
this.toggleAddressFields(prefix, postcodeFieldId, countryFieldId, street1, street2, street3, street4);
|
| 1003 |
|
| 1004 |
// Previous value was not NL, switch manual off
|
| 1087 |
}
|
| 1088 |
},
|
| 1089 |
|
| 1090 |
+
/**
|
| 1091 |
+
* Try to see if our created fields need to be observed by the billing/shipping form
|
| 1092 |
+
*/
|
| 1093 |
+
observeImmediate: function(prefix, formElement)
|
| 1094 |
+
{
|
| 1095 |
+
var form;
|
| 1096 |
+
if (prefix.substring(0, 7) == 'billing' && (typeof billingForm != 'undefined'))
|
| 1097 |
+
form = billingForm;
|
| 1098 |
+
if (prefix.substring(0, 8) == 'shipping' && (typeof shippingForm != 'undefined'))
|
| 1099 |
+
form = shippingForm;
|
| 1100 |
+
|
| 1101 |
+
if (!form || !form.validator.options.immediate)
|
| 1102 |
+
return;
|
| 1103 |
+
|
| 1104 |
+
var input = $(prefix + formElement);
|
| 1105 |
+
|
| 1106 |
+
if (input.tagName.toLowerCase() == 'select')
|
| 1107 |
+
{
|
| 1108 |
+
Event.observe(input, 'blur', form.validator.onChange.bindAsEventListener(form.validator));
|
| 1109 |
+
}
|
| 1110 |
+
if (input.type.toLowerCase() == 'radio' || input.type.toLowerCase() == 'checkbox')
|
| 1111 |
+
{
|
| 1112 |
+
Event.observe(input, 'click', form.validator.onChange.bindAsEventListener(form.validator));
|
| 1113 |
+
}
|
| 1114 |
+
else
|
| 1115 |
+
{
|
| 1116 |
+
Event.observe(input, 'change', form.validator.onChange.bindAsEventListener(form.validator));
|
| 1117 |
+
}
|
| 1118 |
+
},
|
| 1119 |
+
|
| 1120 |
/**
|
| 1121 |
* Toggle address field visibility, to be in line with the value of the 'manual input' checkbox.
|
| 1122 |
*/
|
| 1238 |
|
| 1239 |
$(prefix +'postcode_housenumber_addition').observe('change', function(e) { pcnlapi.lookupPostcode(prefix, postcodeFieldId, countryFieldId, street1, street2, street3, street4, e); });
|
| 1240 |
|
| 1241 |
+
this.observeImmediate(prefix, 'postcode_housenumber_addition');
|
| 1242 |
+
|
| 1243 |
return $(prefix +'postcode_housenumber_addition');
|
| 1244 |
},
|
| 1245 |
|
package.xml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>PostcodeNl_Api</name>
|
| 4 |
-
<version>1.2.0
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license>Simplified BSD License</license>
|
| 7 |
<channel>community</channel>
|
|
@@ -19,14 +19,17 @@ Also includes the free Postcode.nl Signal API service to validate and enrich ord
|
|
| 19 |

|
| 20 |
The postcode Magento plugin from Postcode.nl is free of charge, based on a Fair-Use policy. The use of the Postcode.nl Magento plugin is subject to our Terms and Conditions.</description>
|
| 21 |
<notes>Features:
|
| 22 |
-
-
|
| 23 |
-
- Added
|
| 24 |
-
-
|
|
|
|
|
|
|
|
|
|
| 25 |
</notes>
|
| 26 |
<authors><author><name>Postcode.nl Technical Support</name><user>TechPostcodeNl</user><email>tech@postcode.nl</email></author></authors>
|
| 27 |
-
<date>
|
| 28 |
-
<time>
|
| 29 |
-
<contents><target name="magecommunity"><dir name="PostcodeNl"><dir name="Api"><dir name="Block"><file name="Jsinit.php" hash="79bb826a50ce0cf4f87cc2f958bfafa1"/></dir><dir name="Helper"><file name="Data.php" hash="
|
| 30 |
<compatible/>
|
| 31 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>curl</name><min>7.10.5</min><max>7.99.0</max></extension></required></dependencies>
|
| 32 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>PostcodeNl_Api</name>
|
| 4 |
+
<version>1.2.1.0</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license>Simplified BSD License</license>
|
| 7 |
<channel>community</channel>
|
| 19 |

|
| 20 |
The postcode Magento plugin from Postcode.nl is free of charge, based on a Fair-Use policy. The use of the Postcode.nl Magento plugin is subject to our Terms and Conditions.</description>
|
| 21 |
<notes>Features:
|
| 22 |
+
- Add support for IP address checking and Dutch address checking with the Postcode.nl Signal API
|
| 23 |
+
- Added 'validation-passed' and 'validation-failed' css classes to checkout input fields, support for 'validate-immediate'
|
| 24 |
+
- Added provisional support for the Lotusbreath One Step Checkout extension
|
| 25 |
+

|
| 26 |
+
Fixes:
|
| 27 |
+
- Fix for language files installation via modman/composer
|
| 28 |
</notes>
|
| 29 |
<authors><author><name>Postcode.nl Technical Support</name><user>TechPostcodeNl</user><email>tech@postcode.nl</email></author></authors>
|
| 30 |
+
<date>2015-01-13</date>
|
| 31 |
+
<time>17:02:04</time>
|
| 32 |
+
<contents><target name="magecommunity"><dir name="PostcodeNl"><dir name="Api"><dir name="Block"><file name="Jsinit.php" hash="79bb826a50ce0cf4f87cc2f958bfafa1"/></dir><dir name="Helper"><file name="Data.php" hash="c11562e3bbed91822894e2511560314c"/></dir><dir name="Model"><file name="Observer.php" hash="f60c131c6000568df5313d9f07d153ee"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="PcnlController.php" hash="1a8eaf87ed60481f51f3f74eab3ab63f"/></dir><file name="JsonController.php" hash="6a3bff054e3229faaae2aa55f9a3cf3c"/></dir><dir name="data"><dir name="postcodenl_api_setup"><file name="data-upgrade-1.0.8.0-1.1.0.0.php" hash="169658dbcaec550a4c11820e0d620ecf"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="5d518aeaeae028b6299c7cf3d6e54f60"/><file name="config.xml" hash="6b18b78fecda7f26eac85e18893d4eab"/><file name="system.xml" hash="1dc10a6e0247c32270a66373ae58517d"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="postcodenl"><dir name="api"><file name="lookup.xml" hash="e8f6295a91c9c5bfd116ae1048a5445d"/></dir></dir></dir><dir name="template"><dir name="postcodenl"><dir name="api"><file name="jsinit.phtml" hash="8623676f4c6f4068d0b51e31dcfa08e9"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="postcodenl"><dir name="api"><file name="lookup.xml" hash="d2408958337c27b6fe9a33630e2d1714"/></dir></dir></dir><dir name="template"><dir name="postcodenl"><dir name="api"><file name="jsinit.phtml" hash="ff32e12bbc26e4414dd8ca76edc4ed0f"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="PostcodeNl_Api.csv" hash="f48fa23f30f5dfaab37a905fb1ba9c51"/></dir><dir name="nl_NL"><file name="PostcodeNl_Api.csv" hash="fc2be2700e2025a3f56d4d8e72d30781"/></dir></target><target name="mageweb"><dir name="js"><dir name="postcodenl"><dir name="api"><file name="lookup.js" hash="7f3c68201b37dde8552f0a4821f727a8"/></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="postcodenl"><dir name="api"><dir name="css"><file name="lookup.css" hash="c58103b505f8bcdf55cea1159ca21e27"/></dir><dir name="images"><file name="postcode-logo.png" hash="da02bc29be1057a0201e63f81ee4bd02"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="postcodenl"><dir name="api"><dir name="css"><file name="lookup.css" hash="c6ffbeceb6907b2e8463d1ff30810304"/></dir><dir name="images"><file name="postcode-logo.png" hash="da02bc29be1057a0201e63f81ee4bd02"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="PostcodeNl_Api.xml" hash="feeaf95128ffe4ad109ed8b0b8bc85ab"/></dir></target></contents>
|
| 33 |
<compatible/>
|
| 34 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>curl</name><min>7.10.5</min><max>7.99.0</max></extension></required></dependencies>
|
| 35 |
</package>
|
