From 2225ecad3a26e4e5aad6f02084dd1d0467ca05b5 Mon Sep 17 00:00:00 2001 From: "Matthew Wire (MJW Consulting)" <mjw@mjwconsult.co.uk> Date: Thu, 6 Jun 2019 17:43:30 +0100 Subject: [PATCH] Autoformatting and convert to short array syntax --- CRM/Civicrmpostcodelookup/Form/Setting.php | 16 +- CRM/Civicrmpostcodelookup/Page/Afd.php | 232 +-- .../Page/Civipostcode.php | 358 ++--- CRM/Civicrmpostcodelookup/Page/Experian.php | 228 +-- .../Page/PostcodeAnywhere.php | 248 ++-- CRM/Civicrmpostcodelookup/Utils.php | 18 +- CRM/PafUtils/Address.php | 1286 ++++++++--------- civicrmpostcodelookup.php | 75 +- .../Form/Postcodelookup.tpl | 322 ++--- .../Civicrmpostcodelookup/Form/Setting.tpl | 150 +- .../Form/Edit/Address/street_address.tpl | 286 ++-- 11 files changed, 1600 insertions(+), 1619 deletions(-) diff --git a/CRM/Civicrmpostcodelookup/Form/Setting.php b/CRM/Civicrmpostcodelookup/Form/Setting.php index 7a8b21d..2a08799 100755 --- a/CRM/Civicrmpostcodelookup/Form/Setting.php +++ b/CRM/Civicrmpostcodelookup/Form/Setting.php @@ -41,7 +41,7 @@ class CRM_Civicrmpostcodelookup_Form_Setting extends CRM_Core_Form { false ); - // Serial Number + // Serial Number $this->addElement( 'text', 'serial_number', @@ -59,7 +59,7 @@ class CRM_Civicrmpostcodelookup_Form_Setting extends CRM_Core_Form { false ); - // Password + // Password $this->addElement( 'text', 'password', @@ -72,7 +72,7 @@ class CRM_Civicrmpostcodelookup_Form_Setting extends CRM_Core_Form { $locationTypes = array_flip(CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id')); $this->addCheckBox('location_type_id', - ts('Location Types'), + ts('Location Types'), $locationTypes, NULL, NULL, NULL, NULL, array(' ') @@ -202,9 +202,9 @@ class CRM_Civicrmpostcodelookup_Form_Setting extends CRM_Core_Form { $settingsStr = serialize($settingsArray); CRM_Core_BAO_Setting::setItem($settingsStr, - 'CiviCRM Postcode Lookup', - 'api_details' - ); + 'CiviCRM Postcode Lookup', + 'api_details' + ); $message = "Settings saved."; CRM_Core_Session::setStatus($message, 'Postcode Lookup', 'success'); @@ -212,8 +212,8 @@ class CRM_Civicrmpostcodelookup_Form_Setting extends CRM_Core_Form { function getProviderOptions() { $options = array( - '' => ts('- select -'), - ) + $GLOBALS["providers"]; + '' => ts('- select -'), + ) + $GLOBALS["providers"]; return $options; } diff --git a/CRM/Civicrmpostcodelookup/Page/Afd.php b/CRM/Civicrmpostcodelookup/Page/Afd.php index fa007d3..edff2a9 100755 --- a/CRM/Civicrmpostcodelookup/Page/Afd.php +++ b/CRM/Civicrmpostcodelookup/Page/Afd.php @@ -4,135 +4,135 @@ require_once 'CRM/Core/Page.php'; class CRM_Civicrmpostcodelookup_Page_Afd extends CRM_Civicrmpostcodelookup_Page_Postcode { - /* - * Function to get the Server URL and login credentials - */ - public static function getAFDCredentials($action = 1) { - ################# - #Server settings - ################# - $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); - $settingsArray = unserialize($settingsStr); - - $servertarget = $settingsArray['server']; - - // Action : '1' - Address List, '2' - Address Lookup - switch ($action) { - case 1: - $servertarget = $servertarget . "/addresslist.pce"; - break; - - case 2: - $servertarget = $servertarget . "/addresslookup.pce"; - break; - - default: - $servertarget = $servertarget . "/addresslist.pce"; - } - - $strSerial = $settingsArray['serial_number']; - $strPassword = $settingsArray['password']; - - $querystring = "serial=$strSerial&password=$strPassword"; - return $servertarget ."?" . $querystring; - } - - /* - * Function to get address list based on a Post code - */ - public static function search() { - $postcode = self::getPostcode(TRUE); // FIXME: Check whether API requires space or not - $number = CRM_Utils_Request::retrieve('number', 'String'); - - $querystring = self::getAFDCredentials(1); - $querystring = $querystring . "&postcode=" . $postcode . "&property=" . $number; - - ############### - #File Handling - ############### - - ##Open the XML Document## - $filetoparse = fopen("$querystring","r") or die("Error reading XML data."); - $data = stream_get_contents($filetoparse); - $simpleXMLData = simplexml_load_string($data); - - if (!empty($simpleXMLData)) { - $addresslist = self::getAddressList($simpleXMLData, $postcode); - } - - ##Close the XML source## - fclose($filetoparse); - - // Check CiviCRM version & return result as appropriate - $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); - if ($civiVersion < 4.5) { - foreach ($addresslist as $key => $val) { + /* + * Function to get the Server URL and login credentials + */ + public static function getAFDCredentials($action = 1) { + ################# + #Server settings + ################# + $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); + $settingsArray = unserialize($settingsStr); + + $servertarget = $settingsArray['server']; + + // Action : '1' - Address List, '2' - Address Lookup + switch ($action) { + case 1: + $servertarget = $servertarget . "/addresslist.pce"; + break; + + case 2: + $servertarget = $servertarget . "/addresslookup.pce"; + break; + + default: + $servertarget = $servertarget . "/addresslist.pce"; + } + + $strSerial = $settingsArray['serial_number']; + $strPassword = $settingsArray['password']; + + $querystring = "serial=$strSerial&password=$strPassword"; + return $servertarget ."?" . $querystring; + } + + /* + * Function to get address list based on a Post code + */ + public static function search() { + $postcode = self::getPostcode(TRUE); // FIXME: Check whether API requires space or not + $number = CRM_Utils_Request::retrieve('number', 'String'); + + $querystring = self::getAFDCredentials(1); + $querystring = $querystring . "&postcode=" . $postcode . "&property=" . $number; + + ############### + #File Handling + ############### + + ##Open the XML Document## + $filetoparse = fopen("$querystring","r") or die("Error reading XML data."); + $data = stream_get_contents($filetoparse); + $simpleXMLData = simplexml_load_string($data); + + if (!empty($simpleXMLData)) { + $addresslist = self::getAddressList($simpleXMLData, $postcode); + } + + ##Close the XML source## + fclose($filetoparse); + + // Check CiviCRM version & return result as appropriate + $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); + if ($civiVersion < 4.5) { + foreach ($addresslist as $key => $val) { echo "{$val['label']}|{$val['id']}\n"; } - } else { - echo json_encode($addresslist); - } - exit; - } - - private static function getAddressList($simpleXMLData, $postcode) { - $addressList = array(); - $addressRow = array(); - $AddressListItem = $simpleXMLData->AddressListItem; - foreach ($AddressListItem as $key => $addressItem) { - $addressRow["id"] = (string) $addressItem->PostKey; - $addressRow["value"] = $postcode; - $addressRow["label"] = (string) $addressItem->Address; - array_push($addressList, $addressRow); - //$addressList['items'][] = array('id' => (string) $addressItem->PostKey, 'label' => (string) $addressItem->Address); - //$addressList[(string) $addressItem->PostKey] = (string) $addressItem->Address; - } - - return $addressList; - } - - /* - * Function to get address details based on the AFD addressid/postkey - */ - public static function getaddress() { + } else { + echo json_encode($addresslist); + } + exit; + } + + private static function getAddressList($simpleXMLData, $postcode) { + $addressList = array(); + $addressRow = array(); + $AddressListItem = $simpleXMLData->AddressListItem; + foreach ($AddressListItem as $key => $addressItem) { + $addressRow["id"] = (string) $addressItem->PostKey; + $addressRow["value"] = $postcode; + $addressRow["label"] = (string) $addressItem->Address; + array_push($addressList, $addressRow); + //$addressList['items'][] = array('id' => (string) $addressItem->PostKey, 'label' => (string) $addressItem->Address); + //$addressList[(string) $addressItem->PostKey] = (string) $addressItem->Address; + } + + return $addressList; + } + + /* + * Function to get address details based on the AFD addressid/postkey + */ + public static function getaddress() { $moniker = CRM_Utils_Request::retrieve('id', 'String'); if (empty($moniker)) { exit; } - $address = self::getAddressByMoniker($moniker); - $response = array( - 'address' => $address - ); + $address = self::getAddressByMoniker($moniker); + $response = array( + 'address' => $address + ); - echo json_encode($response); - exit; - } + echo json_encode($response); + exit; + } - private static function getAddressByMoniker($moniker) { - $querystring = self::getAFDCredentials(2); - $querystring = $querystring . "&postkey=" . urlencode($moniker); + private static function getAddressByMoniker($moniker) { + $querystring = self::getAFDCredentials(2); + $querystring = $querystring . "&postkey=" . urlencode($moniker); - ############### - #File Handling - ############### + ############### + #File Handling + ############### - ##Open the XML Document## - $filetoparse = fopen("$querystring","r") or die("Error reading XML data."); - $data = stream_get_contents($filetoparse); - $simpleXMLData = simplexml_load_string($data); + ##Open the XML Document## + $filetoparse = fopen("$querystring","r") or die("Error reading XML data."); + $data = stream_get_contents($filetoparse); + $simpleXMLData = simplexml_load_string($data); - $address = array('id' => $moniker); - $addressItem = (array) $simpleXMLData->Address; + $address = array('id' => $moniker); + $addressItem = (array) $simpleXMLData->Address; - $address["street"] = empty($addressItem['Street']) ? '':$addressItem['Street']; - $address["locality"] = empty($addressItem['Locality']) ? '':$addressItem['Locality']; - $address["town"] = empty($addressItem['Town']) ? '':$addressItem['Town']; - $address["postcode"] = empty($addressItem['Postcode']) ? '':$addressItem['Postcode']; + $address["street"] = empty($addressItem['Street']) ? '':$addressItem['Street']; + $address["locality"] = empty($addressItem['Locality']) ? '':$addressItem['Locality']; + $address["town"] = empty($addressItem['Town']) ? '':$addressItem['Town']; + $address["postcode"] = empty($addressItem['Postcode']) ? '':$addressItem['Postcode']; - ##Close the XML source## - fclose($filetoparse); + ##Close the XML source## + fclose($filetoparse); - return $address; - } + return $address; + } } diff --git a/CRM/Civicrmpostcodelookup/Page/Civipostcode.php b/CRM/Civicrmpostcodelookup/Page/Civipostcode.php index c7ca648..e47651c 100755 --- a/CRM/Civicrmpostcodelookup/Page/Civipostcode.php +++ b/CRM/Civicrmpostcodelookup/Page/Civipostcode.php @@ -4,190 +4,190 @@ require_once 'CRM/Core/Page.php'; class CRM_Civicrmpostcodelookup_Page_Civipostcode extends CRM_Civicrmpostcodelookup_Page_Postcode { - /* - * Function to get the Server URL and login credentials - */ - public static function getCivipostcodeCredentials($action = 1) { - ################# - #Server settings - ################# - $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); - $settingsArray = unserialize($settingsStr); - - $servertarget = $settingsArray['server']; - - // Action : '1' - Address List, '2' - Address Lookup - switch ($action) { - case 1: - $servertarget = $servertarget . "/lookup/v1"; - break; - - case 2: - $servertarget = $servertarget . "/getaddress/v1"; - break; - - default: - $servertarget = $servertarget . "/lookup/v1"; - } - - $apiKey = $settingsArray['api_key']; - - $querystring = "key=$apiKey"; - return $servertarget ."?" . $querystring; - } - - /* - * Function to get address list based on a Post code - */ - public static function search() { - $postcode = self::getPostcode(TRUE); - $number = CRM_Utils_Request::retrieve('number', 'String'); - - $querystring = self::getCivipostcodeCredentials(1); - $querystring = $querystring . "&postcode=" . urlencode($postcode) . "&property=" . $number; - - ############### - #File Handling - ############### - - ##Open the JSON Document## - $filetoparse = fopen("$querystring","r") or die("Error reading JSON data."); - $data = stream_get_contents($filetoparse); - $simpleJSONData = json_decode($data); - - if (!empty($simpleJSONData)) { - if ($simpleJSONData->is_error == 1) { - $addresslist[0]['value'] = ''; - $addresslist[0]['label'] = $simpleJSONData->error; - } else { - $addresslist = self::getAddressList($simpleJSONData, $postcode); - } - } - - // highlight search results - //$addresslist = CRM_Civicrmpostcodelookup_Utils::apply_highlight($addresslist, $postcode); - - ##Close the JSON source## - fclose($filetoparse); - - // Check CiviCRM version & return result as appropriate - $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); - if ($civiVersion < 4.5) { - foreach ($addresslist as $key => $val) { + /* + * Function to get the Server URL and login credentials + */ + public static function getCivipostcodeCredentials($action = 1) { + ################# + #Server settings + ################# + $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); + $settingsArray = unserialize($settingsStr); + + $servertarget = $settingsArray['server']; + + // Action : '1' - Address List, '2' - Address Lookup + switch ($action) { + case 1: + $servertarget = $servertarget . "/lookup/v1"; + break; + + case 2: + $servertarget = $servertarget . "/getaddress/v1"; + break; + + default: + $servertarget = $servertarget . "/lookup/v1"; + } + + $apiKey = $settingsArray['api_key']; + + $querystring = "key=$apiKey"; + return $servertarget ."?" . $querystring; + } + + /* + * Function to get address list based on a Post code + */ + public static function search() { + $postcode = self::getPostcode(TRUE); + $number = CRM_Utils_Request::retrieve('number', 'String'); + + $querystring = self::getCivipostcodeCredentials(1); + $querystring = $querystring . "&postcode=" . urlencode($postcode) . "&property=" . $number; + + ############### + #File Handling + ############### + + ##Open the JSON Document## + $filetoparse = fopen("$querystring","r") or die("Error reading JSON data."); + $data = stream_get_contents($filetoparse); + $simpleJSONData = json_decode($data); + + if (!empty($simpleJSONData)) { + if ($simpleJSONData->is_error == 1) { + $addresslist[0]['value'] = ''; + $addresslist[0]['label'] = $simpleJSONData->error; + } else { + $addresslist = self::getAddressList($simpleJSONData, $postcode); + } + } + + // highlight search results + //$addresslist = CRM_Civicrmpostcodelookup_Utils::apply_highlight($addresslist, $postcode); + + ##Close the JSON source## + fclose($filetoparse); + + // Check CiviCRM version & return result as appropriate + $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); + if ($civiVersion < 4.5) { + foreach ($addresslist as $key => $val) { echo "{$val['label']}|{$val['id']}\n"; } - } else { - echo json_encode($addresslist); - } - exit; - } - - private static function getAddressList($simpleJSONData, $postcode) { - $addressList = array(); - $addressRow = array(); - $AddressListItem = $simpleJSONData->results; - foreach ($AddressListItem as $key => $addressItem) { - $addressLineArray = self::formatAddressLines($addressItem, TRUE); - $addressLineArray = array_filter($addressLineArray); - - $addressRow["id"] = (string) $addressItem->id; - $addressRow["value"] = $postcode; - $addressRow["label"] = @implode(', ', $addressLineArray); - array_push($addressList, $addressRow); - } - - if (empty($addressList)) { - $addressRow["id"] = ''; - $addressRow["value"] = ''; - $addressRow["label"] = 'Postcode Not Found'; - array_push($addressList, $addressRow); - } - - return $addressList; - } - - /* - * Function to get address details based on the Civipostcode address id - */ - public static function getaddress() { + } else { + echo json_encode($addresslist); + } + exit; + } + + private static function getAddressList($simpleJSONData, $postcode) { + $addressList = array(); + $addressRow = array(); + $AddressListItem = $simpleJSONData->results; + foreach ($AddressListItem as $key => $addressItem) { + $addressLineArray = self::formatAddressLines($addressItem, TRUE); + $addressLineArray = array_filter($addressLineArray); + + $addressRow["id"] = (string) $addressItem->id; + $addressRow["value"] = $postcode; + $addressRow["label"] = @implode(', ', $addressLineArray); + array_push($addressList, $addressRow); + } + + if (empty($addressList)) { + $addressRow["id"] = ''; + $addressRow["value"] = ''; + $addressRow["label"] = 'Postcode Not Found'; + array_push($addressList, $addressRow); + } + + return $addressList; + } + + /* + * Function to get address details based on the Civipostcode address id + */ + public static function getaddress() { $moniker = CRM_Utils_Request::retrieve('id', 'String'); if (empty($moniker)) { exit; } - $address = self::getAddressByMoniker($moniker); - $response = array( - 'address' => $address - ); - - echo json_encode($response); - exit; - } - - private static function getAddressByMoniker($moniker) { - $querystring = self::getCivipostcodeCredentials(2); - $querystring = $querystring . "&id=" . urlencode($moniker); - - ############### - #File Handling - ############### - - ##Open the JSON Document## - $filetoparse = fopen("$querystring","r") or die("Error reading JSON data."); - $data = stream_get_contents($filetoparse); - $simpleJSONData = json_decode($data); - $addressObj = $simpleJSONData->results[0]; - - $address = self::formatAddressLines($addressObj); - - ##Close the JSON source## - fclose($filetoparse); - - return $address; - } - - private static function formatAddressLines($addressObj, $forList = FALSE) { - if (empty($addressObj)) { - return; - } - - // Format address lines based on Royal Mail PAF address assembler (https://github.com/AllenJB/PafUtils) - require_once 'CRM/PafUtils/Address.php'; - $addressLineObj = new Address(); - $addressLineObj->setUdprn($addressObj->udprn) - ->setPostCode($addressObj->postcode) - ->setPostTown($addressObj->post_town) - ->setDependentLocality($addressObj->dependent_locality) - ->setDoubleDependentLocality($addressObj->double_dependent_locality) - ->setThoroughfare($addressObj->thoroughfare_descriptor) - ->setDependentThoroughfare($addressObj->dependent_thoroughfare_descriptor) - ->setBuildingNumber($addressObj->building_number) - ->setBuildingName($addressObj->building_name) - ->setSubBuildingName($addressObj->sub_building_name) - ->setPoBox($addressObj->po_box) - ->setDepartmentName($addressObj->department_name) - ->setOrganizationName($addressObj->organisation_name) - ->setPostcodeType($addressObj->postcode_type) - ->setSuOrganizationIndicator($addressObj->su_organisation_indicator) - ->setDeliveryPointSuffix($addressObj->delivery_point_suffix); - $addressLines = $addressLineObj->getAddressLines(); - - if ($forList == FALSE) { - $address = array('id' => $addressObj->id); - } - - if (!empty($addressLines[0])) { - $address["street_address"] = $addressLines[0]; - } - if (!empty($addressLines[1])) { - $address["supplemental_address_1"] = $addressLines[1]; - } - if (!empty($addressLines[2])) { - $address["supplemental_address_2"] = $addressLines[2]; - } - $address["town"] = (string) $addressObj->post_town; - $address["postcode"] = (string) $addressObj->postcode; - - return $address; - } + $address = self::getAddressByMoniker($moniker); + $response = array( + 'address' => $address + ); + + echo json_encode($response); + exit; + } + + private static function getAddressByMoniker($moniker) { + $querystring = self::getCivipostcodeCredentials(2); + $querystring = $querystring . "&id=" . urlencode($moniker); + + ############### + #File Handling + ############### + + ##Open the JSON Document## + $filetoparse = fopen("$querystring","r") or die("Error reading JSON data."); + $data = stream_get_contents($filetoparse); + $simpleJSONData = json_decode($data); + $addressObj = $simpleJSONData->results[0]; + + $address = self::formatAddressLines($addressObj); + + ##Close the JSON source## + fclose($filetoparse); + + return $address; + } + + private static function formatAddressLines($addressObj, $forList = FALSE) { + if (empty($addressObj)) { + return; + } + + // Format address lines based on Royal Mail PAF address assembler (https://github.com/AllenJB/PafUtils) + require_once 'CRM/PafUtils/Address.php'; + $addressLineObj = new Address(); + $addressLineObj->setUdprn($addressObj->udprn) + ->setPostCode($addressObj->postcode) + ->setPostTown($addressObj->post_town) + ->setDependentLocality($addressObj->dependent_locality) + ->setDoubleDependentLocality($addressObj->double_dependent_locality) + ->setThoroughfare($addressObj->thoroughfare_descriptor) + ->setDependentThoroughfare($addressObj->dependent_thoroughfare_descriptor) + ->setBuildingNumber($addressObj->building_number) + ->setBuildingName($addressObj->building_name) + ->setSubBuildingName($addressObj->sub_building_name) + ->setPoBox($addressObj->po_box) + ->setDepartmentName($addressObj->department_name) + ->setOrganizationName($addressObj->organisation_name) + ->setPostcodeType($addressObj->postcode_type) + ->setSuOrganizationIndicator($addressObj->su_organisation_indicator) + ->setDeliveryPointSuffix($addressObj->delivery_point_suffix); + $addressLines = $addressLineObj->getAddressLines(); + + if ($forList == FALSE) { + $address = array('id' => $addressObj->id); + } + + if (!empty($addressLines[0])) { + $address["street_address"] = $addressLines[0]; + } + if (!empty($addressLines[1])) { + $address["supplemental_address_1"] = $addressLines[1]; + } + if (!empty($addressLines[2])) { + $address["supplemental_address_2"] = $addressLines[2]; + } + $address["town"] = (string) $addressObj->post_town; + $address["postcode"] = (string) $addressObj->postcode; + + return $address; + } } diff --git a/CRM/Civicrmpostcodelookup/Page/Experian.php b/CRM/Civicrmpostcodelookup/Page/Experian.php index 05ce748..94564c2 100755 --- a/CRM/Civicrmpostcodelookup/Page/Experian.php +++ b/CRM/Civicrmpostcodelookup/Page/Experian.php @@ -6,134 +6,134 @@ require_once 'CRM/Core/Page.php'; require_once '/lib/QASCapture.php'; class CRM_PostcodeLookup_Page_Ajax extends CRM_Civicrmpostcodelookup_Page_Postcode { - static private $qacampture; - - public static function getQasCredentials($account_type) { - $credentials = array(); - - $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); - $settingsArray = unserialize($settingsStr); + static private $qacampture; + + public static function getQasCredentials($account_type) { + $credentials = array(); + + $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); + $settingsArray = unserialize($settingsStr); + + $credentials['username'] = $settingsArray['username']; + $credentials['password'] = $settingsArray['password']; + + /*// @todo Decide what format the value is coming in as int/hash etc + $map = array( + '0' => 'internal', + '1' => 'external' + ); + + switch ($map[$account_type]) { + case 'internal': + $credentials['username'] = '7aab7efc-f66'; + $credentials['password'] = 'biscuitbase1'; + break; + + case 'external': + $credentials['username'] = 'e220d980-d4d'; + $credentials['password'] = 'biscuitbase1'; + break; + + default: + $credentials['username'] = ''; + $credentials['password'] = ''; + }*/ + + return $credentials; + } + + public static function search() { + $postcode = self::getPostcode(TRUE); // FIXME: Check whether API requires space or not + $number = CRM_Utils_Request::retrieve('number', 'String'); + if (!$number) { + exit; + } - $credentials['username'] = $settingsArray['username']; - $credentials['password'] = $settingsArray['password']; + $qaCapture = self::getQACapture(); + $ret = $qaCapture->Search("$number, $postcode", 'GBR', 'Singleline', true);//, $intensity, $promptset, $threshold, $timeout, $layout, $formattedAddressInPicklist, $requestTag, $localisation) - /*// @todo Decide what format the value is coming in as int/hash etc - $map = array( - '0' => 'internal', - '1' => 'external' + $response = array(); + $response['items'] = array(); + foreach($ret->Picklist->Items as $item) { + $response['items'][] = array( + 'id' => $item->Moniker, + 'label' => $item->PartialAddress, ); + } - switch ($map[$account_type]) { - case 'internal': - $credentials['username'] = '7aab7efc-f66'; - $credentials['password'] = 'biscuitbase1'; - break; - - case 'external': - $credentials['username'] = 'e220d980-d4d'; - $credentials['password'] = 'biscuitbase1'; - break; + //mzeman: get the address details if it's the precise one + if($ret->Picklist->IsAutoformatSafe && $ret->Picklist->Total == 1) { + $listItem = $ret->Picklist->Items[0]; - default: - $credentials['username'] = ''; - $credentials['password'] = ''; - }*/ + $address = self::getAddressByMoniker($listItem->Moniker); + $response['address'] = $address; + } - return $credentials; + // Check CiviCRM version & return result as appropriate + $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); + if ($civiVersion < 4.5) { + foreach ($response as $key => $val) { + echo "{$val['label']}|{$val['id']}\n"; + } + } else { + echo json_encode($response); } - public static function search() { - $postcode = self::getPostcode(TRUE); // FIXME: Check whether API requires space or not - $number = CRM_Utils_Request::retrieve('number', 'String'); - if (!$number) { - exit; - } - - $qaCapture = self::getQACapture(); - $ret = $qaCapture->Search("$number, $postcode", 'GBR', 'Singleline', true);//, $intensity, $promptset, $threshold, $timeout, $layout, $formattedAddressInPicklist, $requestTag, $localisation) - - $response = array(); - $response['items'] = array(); - foreach($ret->Picklist->Items as $item) { - $response['items'][] = array( - 'id' => $item->Moniker, - 'label' => $item->PartialAddress, - ); - } - - //mzeman: get the address details if it's the precise one - if($ret->Picklist->IsAutoformatSafe && $ret->Picklist->Total == 1) { - $listItem = $ret->Picklist->Items[0]; - - $address = self::getAddressByMoniker($listItem->Moniker); - $response['address'] = $address; - } - - // Check CiviCRM version & return result as appropriate - $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); - if ($civiVersion < 4.5) { - foreach ($response as $key => $val) { - echo "{$val['label']}|{$val['id']}\n"; - } - } else { - echo json_encode($response); - } - - exit; + exit; + } + + public static function getaddress() { + $moniker = CRM_Utils_Request::retrieve('id', 'String'); + if (empty($moniker)) { + exit; } - public static function getaddress() { - $moniker = CRM_Utils_Request::retrieve('id', 'String'); - if (empty($moniker)) { - exit; + $address = self::getAddressByMoniker($moniker); + $response = array( + 'address' => $address + ); + + echo json_encode($response); + exit; + } + + private static function getQACapture() { + if(self::$qacampture === null) { + // @todo retrieved value should be encoded somehow, MD5 or whatever + $mode = CRM_Utils_Request::retrieve('mode', 'String'); + if (!$mode) { + $mode = '1'; } + $params = self::getQasCredentials($mode); + self::$qacampture = new QASCapture($params); + } - $address = self::getAddressByMoniker($moniker); - $response = array( - 'address' => $address - ); + return self::$qacampture; + } - echo json_encode($response); - exit; - } + private static function getAddressByMoniker($moniker) { + $addressRet = self::getQACapture()->GetAddress($moniker); - private static function getQACapture() { - if(self::$qacampture === null) { - // @todo retrieved value should be encoded somehow, MD5 or whatever - $mode = CRM_Utils_Request::retrieve('mode', 'String'); - if (!$mode) { - $mode = '1'; - } - $params = self::getQasCredentials($mode); - self::$qacampture = new QASCapture($params); - } - - return self::$qacampture; + $address = array('id' => $moniker); + $lineCounter = 0; + foreach($addressRet->AddressLines as $line) { + switch($line->Label) { + case '': + $lineCounter++; + $address["line{$lineCounter}"] = $line->Line; + break; + case 'Town': + $address["town"] = $line->Line; + break; + case 'County': + $address["county"] = $line->Line; + break; + case 'Postcode': + $address["postcode"] = $line->Line; + break; + } } - private static function getAddressByMoniker($moniker) { - $addressRet = self::getQACapture()->GetAddress($moniker); - - $address = array('id' => $moniker); - $lineCounter = 0; - foreach($addressRet->AddressLines as $line) { - switch($line->Label) { - case '': - $lineCounter++; - $address["line{$lineCounter}"] = $line->Line; - break; - case 'Town': - $address["town"] = $line->Line; - break; - case 'County': - $address["county"] = $line->Line; - break; - case 'Postcode': - $address["postcode"] = $line->Line; - break; - } - } - - return $address; - } + return $address; + } } diff --git a/CRM/Civicrmpostcodelookup/Page/PostcodeAnywhere.php b/CRM/Civicrmpostcodelookup/Page/PostcodeAnywhere.php index f9244d0..2631d2f 100755 --- a/CRM/Civicrmpostcodelookup/Page/PostcodeAnywhere.php +++ b/CRM/Civicrmpostcodelookup/Page/PostcodeAnywhere.php @@ -4,147 +4,147 @@ require_once 'CRM/Core/Page.php'; class CRM_Civicrmpostcodelookup_Page_PostcodeAnywhere extends CRM_Civicrmpostcodelookup_Page_Postcode { - /* - * Function to get the Server URL and login credentials - */ - public static function getPostcodeAnywhereCredentials($action = 1) { - ################# - #Server settings - ################# - $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); - $settingsArray = unserialize($settingsStr); - - $servertarget = $settingsArray['server']; - - // Action : '1' - Address List, '2' - Address Lookup - switch ($action) { - case 1: - $servertarget = $servertarget . "/PostcodeAnywhere/Interactive/Find/v1.10/xmla.ws"; - break; - - case 2: - $servertarget = $servertarget . "/PostcodeAnywhere/Interactive/RetrieveById/v1.30/xmla.ws"; - break; - - default: - $servertarget = $servertarget . "/PostcodeAnywhere/Interactive/Find/v1.10/xmla.ws"; - } - - $apiKey = urlencode($settingsArray['api_key']); - $username = urlencode($settingsArray['username']); - - $querystring = "Key=$apiKey&UserName=$username"; - return $servertarget ."?" . $querystring; - } - - /* - * Function to get address list based on a Post code - */ - public static function search() { - // PostcodeAnywhere API works with postcodes when they have a space and when they don't. - $postcode = self::getPostcode(); - - $querystring = self::getPostcodeAnywhereCredentials(1); - $querystring = $querystring . "&SearchTerm=" . urlencode($postcode); - - //Make the request to Postcode Anywhere and parse the XML returned - $simpleXMLData = simplexml_load_file($querystring); - - if (!empty($simpleXMLData)) { - $addresslist = self::getAddressList($simpleXMLData, $postcode); - } - - // Check CiviCRM version & return result as appropriate - $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); - if ($civiVersion < 4.5) { - foreach ($addresslist as $key => $val) { + /* + * Function to get the Server URL and login credentials + */ + public static function getPostcodeAnywhereCredentials($action = 1) { + ################# + #Server settings + ################# + $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); + $settingsArray = unserialize($settingsStr); + + $servertarget = $settingsArray['server']; + + // Action : '1' - Address List, '2' - Address Lookup + switch ($action) { + case 1: + $servertarget = $servertarget . "/PostcodeAnywhere/Interactive/Find/v1.10/xmla.ws"; + break; + + case 2: + $servertarget = $servertarget . "/PostcodeAnywhere/Interactive/RetrieveById/v1.30/xmla.ws"; + break; + + default: + $servertarget = $servertarget . "/PostcodeAnywhere/Interactive/Find/v1.10/xmla.ws"; + } + + $apiKey = urlencode($settingsArray['api_key']); + $username = urlencode($settingsArray['username']); + + $querystring = "Key=$apiKey&UserName=$username"; + return $servertarget ."?" . $querystring; + } + + /* + * Function to get address list based on a Post code + */ + public static function search() { + // PostcodeAnywhere API works with postcodes when they have a space and when they don't. + $postcode = self::getPostcode(); + + $querystring = self::getPostcodeAnywhereCredentials(1); + $querystring = $querystring . "&SearchTerm=" . urlencode($postcode); + + //Make the request to Postcode Anywhere and parse the XML returned + $simpleXMLData = simplexml_load_file($querystring); + + if (!empty($simpleXMLData)) { + $addresslist = self::getAddressList($simpleXMLData, $postcode); + } + + // Check CiviCRM version & return result as appropriate + $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); + if ($civiVersion < 4.5) { + foreach ($addresslist as $key => $val) { echo "{$val['label']}|{$val['id']}\n"; } - } else { - echo json_encode($addresslist); - } - exit; - } - - private static function getAddressList($simpleXMLData, $postcode) { - $addressList = array(); - $addressRow = array(); - $AddressListItem = (array) $simpleXMLData->Rows; - $AddressListItems = $AddressListItem['Row']; - - foreach ($AddressListItems as $key => $addressItem) { - $addressItemArray = (array) $addressItem; - $addressRow["id"] = (string) $addressItemArray['@attributes']['Id']; - $addressRow["value"] = $postcode; - $addressRow["label"] = $addressItemArray['@attributes']['StreetAddress'].', '.$addressItemArray['@attributes']['Place']; - array_push($addressList, $addressRow); - - /*$addressItemArray = (array) $addressItem; - $addressList['items'][] = array('id' => (string) $addressItemArray['@attributes']['Id'], 'label' => (string) $addressItemArray['@attributes']['StreetAddress'].', '.$addressItemArray['@attributes']['Place']);*/ - } - - if (empty($addressList)) { - $addressRow["id"] = ''; - $addressRow["value"] = ''; - $addressRow["label"] = 'Error: Postcode Not Found'; - array_push($addressList, $addressRow); - } - - return $addressList; - } - - /* - * Function to get address details based on the PostcodeAnywhere addressid/postkey - */ - public static function getaddress() { + } else { + echo json_encode($addresslist); + } + exit; + } + + private static function getAddressList($simpleXMLData, $postcode) { + $addressList = array(); + $addressRow = array(); + $AddressListItem = (array) $simpleXMLData->Rows; + $AddressListItems = $AddressListItem['Row']; + + foreach ($AddressListItems as $key => $addressItem) { + $addressItemArray = (array) $addressItem; + $addressRow["id"] = (string) $addressItemArray['@attributes']['Id']; + $addressRow["value"] = $postcode; + $addressRow["label"] = $addressItemArray['@attributes']['StreetAddress'].', '.$addressItemArray['@attributes']['Place']; + array_push($addressList, $addressRow); + + /*$addressItemArray = (array) $addressItem; + $addressList['items'][] = array('id' => (string) $addressItemArray['@attributes']['Id'], 'label' => (string) $addressItemArray['@attributes']['StreetAddress'].', '.$addressItemArray['@attributes']['Place']);*/ + } + + if (empty($addressList)) { + $addressRow["id"] = ''; + $addressRow["value"] = ''; + $addressRow["label"] = 'Error: Postcode Not Found'; + array_push($addressList, $addressRow); + } + + return $addressList; + } + + /* + * Function to get address details based on the PostcodeAnywhere addressid/postkey + */ + public static function getaddress() { $moniker = CRM_Utils_Request::retrieve('id', 'String'); if (empty($moniker)) { exit; } - $address = self::getAddressByMoniker($moniker); - $response = array( - 'address' => $address - ); + $address = self::getAddressByMoniker($moniker); + $response = array( + 'address' => $address + ); - echo json_encode($response); - exit; - } + echo json_encode($response); + exit; + } - private static function getAddressByMoniker($moniker) { + private static function getAddressByMoniker($moniker) { - // Get state/county - $states = CRM_Core_PseudoConstant::stateProvince(); + // Get state/county + $states = CRM_Core_PseudoConstant::stateProvince(); - $querystring = self::getPostcodeAnywhereCredentials(2); - $querystring = $querystring . "&Id=" . urlencode($moniker); + $querystring = self::getPostcodeAnywhereCredentials(2); + $querystring = $querystring . "&Id=" . urlencode($moniker); - //Make the request to Postcode Anywhere and parse the XML returned - $simpleXMLData = simplexml_load_file($querystring); + //Make the request to Postcode Anywhere and parse the XML returned + $simpleXMLData = simplexml_load_file($querystring); - $address = array('id' => $moniker); - $addressItemRow = (array) $simpleXMLData->Rows; - $addressItem = (array) $addressItemRow['Row']; + $address = array('id' => $moniker); + $addressItemRow = (array) $simpleXMLData->Rows; + $addressItem = (array) $addressItemRow['Row']; - $addressLineArray[] = $addressItem['@attributes']['Company']; - $addressLineArray[] = $addressItem['@attributes']['BuildingName']; - $addressLineArray[] = $addressItem['@attributes']['BuildingNumber']; - $addressLineArray[] = $addressItem['@attributes']['PrimaryStreet']; - $addressLineArray = array_filter($addressLineArray); - $address["street_address"] = @implode(', ', $addressLineArray); + $addressLineArray[] = $addressItem['@attributes']['Company']; + $addressLineArray[] = $addressItem['@attributes']['BuildingName']; + $addressLineArray[] = $addressItem['@attributes']['BuildingNumber']; + $addressLineArray[] = $addressItem['@attributes']['PrimaryStreet']; + $addressLineArray = array_filter($addressLineArray); + $address["street_address"] = @implode(', ', $addressLineArray); - $address["supplemental_address_1"] = $addressItem['@attributes']['SecondaryStreet']; - $address["supplemental_address_2"] = $addressItem['@attributes']['DependentLocality']; + $address["supplemental_address_1"] = $addressItem['@attributes']['SecondaryStreet']; + $address["supplemental_address_2"] = $addressItem['@attributes']['DependentLocality']; - $address["town"] = $addressItem['@attributes']['PostTown']; + $address["town"] = $addressItem['@attributes']['PostTown']; - $address["postcode"] = $addressItem['@attributes']['Postcode']; + $address["postcode"] = $addressItem['@attributes']['Postcode']; - $address["state_province_id"] = ''; - if ($stateId = array_search($addressItem['@attributes']['County'], $states)) { - $address["state_province_id"] = $stateId; - } + $address["state_province_id"] = ''; + if ($stateId = array_search($addressItem['@attributes']['County'], $states)) { + $address["state_province_id"] = $stateId; + } - return $address; - } + return $address; + } } diff --git a/CRM/Civicrmpostcodelookup/Utils.php b/CRM/Civicrmpostcodelookup/Utils.php index d950efa..cf3ad47 100755 --- a/CRM/Civicrmpostcodelookup/Utils.php +++ b/CRM/Civicrmpostcodelookup/Utils.php @@ -4,15 +4,15 @@ require_once 'CRM/Core/Page.php'; class CRM_Civicrmpostcodelookup_Utils { /** - * mb_stripos all occurences - * based on http://www.php.net/manual/en/function.strpos.php#87061 - * - * Find all occurrences of a needle in a haystack - * - * @param string $haystack - * @param string $needle - * @return array or false - */ + * mb_stripos all occurences + * based on http://www.php.net/manual/en/function.strpos.php#87061 + * + * Find all occurrences of a needle in a haystack + * + * @param string $haystack + * @param string $needle + * @return array or false + */ public static function mb_stripos_all($haystack, $needle) { $s = 0; diff --git a/CRM/PafUtils/Address.php b/CRM/PafUtils/Address.php index 51936a2..0d0c5fd 100644 --- a/CRM/PafUtils/Address.php +++ b/CRM/PafUtils/Address.php @@ -3,723 +3,723 @@ class Address { - protected $udprn = null; + protected $udprn = null; - protected $postcode = null; + protected $postcode = null; - protected $postTown = null; + protected $postTown = null; - protected $dependentLocality = null; + protected $dependentLocality = null; - protected $doubleDependentLocality = null; + protected $doubleDependentLocality = null; - protected $thoroughfare = null; + protected $thoroughfare = null; - protected $dependentThoroughfare = null; + protected $dependentThoroughfare = null; - protected $buildingNumber = null; + protected $buildingNumber = null; - protected $buildingName = null; + protected $buildingName = null; - protected $subBuildingName = null; + protected $subBuildingName = null; - protected $poBox = null; + protected $poBox = null; - protected $departmentName = null; + protected $departmentName = null; - protected $organizationName = null; + protected $organizationName = null; - protected $postcodeType = null; + protected $postcodeType = null; - protected $suOrganizationIndicator = null; + protected $suOrganizationIndicator = null; - protected $deliveryPointSuffix = null; + protected $deliveryPointSuffix = null; - protected $addressLines = null; + protected $addressLines = null; - protected $assembleDebugFlags = array(); + protected $assembleDebugFlags = array(); - public function __construct() - { - } - - - /** - * @return null - */ - public function getUdprn() - { - return $this->udprn; - } + public function __construct() + { + } - /** - * @param null $udprn - * @return self - */ - public function setUdprn($udprn) - { - $this->udprn = $udprn; - return $this; - } + /** + * @return null + */ + public function getUdprn() + { + return $this->udprn; + } - /** - * @return null - */ - public function getPostcode() - { - return $this->postcode; - } + /** + * @param null $udprn + * @return self + */ + public function setUdprn($udprn) + { + $this->udprn = $udprn; + return $this; + } - /** - * @param null $postcode - * @return self - */ - public function setPostcode($postcode) - { - $this->addressLines = null; - $this->postcode = $postcode; - return $this; - } + /** + * @return null + */ + public function getPostcode() + { + return $this->postcode; + } - /** - * @return null - */ - public function getPostTown() - { - return $this->postTown; - } + /** + * @param null $postcode + * @return self + */ + public function setPostcode($postcode) + { + $this->addressLines = null; + $this->postcode = $postcode; + return $this; + } - /** - * @param null $postTown - * @return self - */ - public function setPostTown($postTown) - { - $this->addressLines = null; - $this->postTown = $postTown; - return $this; - } - - - /** - * @return null - */ - public function getDependentLocality() - { - return $this->dependentLocality; - } - - - /** - * @param null $dependentLocality - * @return self - */ - public function setDependentLocality($dependentLocality) - { - $this->addressLines = null; - $this->dependentLocality = $dependentLocality; - return $this; - } + /** + * @return null + */ + public function getPostTown() + { + return $this->postTown; + } - /** - * @return null - */ - public function getDoubleDependentLocality() - { - return $this->doubleDependentLocality; - } - - - /** - * @param null $doubleDependentLocality - * @return self - */ - public function setDoubleDependentLocality($doubleDependentLocality) - { - $this->addressLines = null; - $this->doubleDependentLocality = $doubleDependentLocality; - return $this; - } - - - /** - * @return null - */ - public function getThoroughfare() - { - return $this->thoroughfare; - } - - - /** - * @param null $thoroughfare - * @return self - */ - public function setThoroughfare($thoroughfare) - { - $this->addressLines = null; - $this->thoroughfare = $thoroughfare; - return $this; - } - - - /** - * @return null - */ - public function getDependentThoroughfare() - { - return $this->dependentThoroughfare; - } - + /** + * @param null $postTown + * @return self + */ + public function setPostTown($postTown) + { + $this->addressLines = null; + $this->postTown = $postTown; + return $this; + } - /** - * @param null $dependentThoroughfare - * @return self - */ - public function setDependentThoroughfare($dependentThoroughfare) - { - $this->addressLines = null; - $this->dependentThoroughfare = $dependentThoroughfare; - return $this; - } - - - /** - * @return null - */ - public function getBuildingNumber() - { - return $this->buildingNumber; - } - - - /** - * @param null $buildingNumber - * @return self - */ - public function setBuildingNumber($buildingNumber) - { - $this->addressLines = null; - $this->buildingNumber = $buildingNumber; - return $this; - } - - - /** - * @return null - */ - public function getBuildingName() - { - return $this->buildingName; - } - - - /** - * @param null $buildingName - * @return self - */ - public function setBuildingName($buildingName) - { - $this->addressLines = null; - $this->buildingName = $buildingName; - return $this; - } - - - /** - * @return null - */ - public function getSubBuildingName() - { - return $this->subBuildingName; - } - - - /** - * @param null $subBuildingName - * @return self - */ - public function setSubBuildingName($subBuildingName) - { - $this->addressLines = null; - $this->subBuildingName = $subBuildingName; - return $this; - } - - - /** - * @return null - */ - public function getPobox() - { - return $this->poBox; - } - - - /** - * @param null $poBox - * @return self - */ - public function setPoBox($poBox) - { - $this->addressLines = null; - $this->poBox = $poBox; - return $this; - } - - - /** - * @return null - */ - public function getDepartmentName() - { - return $this->departmentName; - } - - /** - * @param null $departmentName - * @return self - */ - public function setDepartmentName($departmentName) - { - $this->addressLines = null; - $this->departmentName = $departmentName; - return $this; - } - - - /** - * @return null - */ - public function getOrganizationName() - { - return $this->organizationName; - } - - - /** - * @param null $organizationName - * @return self - */ - public function setOrganizationName($organizationName) - { - $this->addressLines = null; - $this->organizationName = $organizationName; - return $this; + /** + * @return null + */ + public function getDependentLocality() + { + return $this->dependentLocality; + } + + + /** + * @param null $dependentLocality + * @return self + */ + public function setDependentLocality($dependentLocality) + { + $this->addressLines = null; + $this->dependentLocality = $dependentLocality; + return $this; + } + + + /** + * @return null + */ + public function getDoubleDependentLocality() + { + return $this->doubleDependentLocality; + } + + + /** + * @param null $doubleDependentLocality + * @return self + */ + public function setDoubleDependentLocality($doubleDependentLocality) + { + $this->addressLines = null; + $this->doubleDependentLocality = $doubleDependentLocality; + return $this; + } + + + /** + * @return null + */ + public function getThoroughfare() + { + return $this->thoroughfare; + } + + + /** + * @param null $thoroughfare + * @return self + */ + public function setThoroughfare($thoroughfare) + { + $this->addressLines = null; + $this->thoroughfare = $thoroughfare; + return $this; + } + + + /** + * @return null + */ + public function getDependentThoroughfare() + { + return $this->dependentThoroughfare; + } + + + /** + * @param null $dependentThoroughfare + * @return self + */ + public function setDependentThoroughfare($dependentThoroughfare) + { + $this->addressLines = null; + $this->dependentThoroughfare = $dependentThoroughfare; + return $this; + } + + + /** + * @return null + */ + public function getBuildingNumber() + { + return $this->buildingNumber; + } + + + /** + * @param null $buildingNumber + * @return self + */ + public function setBuildingNumber($buildingNumber) + { + $this->addressLines = null; + $this->buildingNumber = $buildingNumber; + return $this; + } + + + /** + * @return null + */ + public function getBuildingName() + { + return $this->buildingName; + } + + + /** + * @param null $buildingName + * @return self + */ + public function setBuildingName($buildingName) + { + $this->addressLines = null; + $this->buildingName = $buildingName; + return $this; + } + + + /** + * @return null + */ + public function getSubBuildingName() + { + return $this->subBuildingName; + } + + + /** + * @param null $subBuildingName + * @return self + */ + public function setSubBuildingName($subBuildingName) + { + $this->addressLines = null; + $this->subBuildingName = $subBuildingName; + return $this; + } + + + /** + * @return null + */ + public function getPobox() + { + return $this->poBox; + } + + + /** + * @param null $poBox + * @return self + */ + public function setPoBox($poBox) + { + $this->addressLines = null; + $this->poBox = $poBox; + return $this; + } + + + /** + * @return null + */ + public function getDepartmentName() + { + return $this->departmentName; + } + + + /** + * @param null $departmentName + * @return self + */ + public function setDepartmentName($departmentName) + { + $this->addressLines = null; + $this->departmentName = $departmentName; + return $this; + } + + + /** + * @return null + */ + public function getOrganizationName() + { + return $this->organizationName; + } + + + /** + * @param null $organizationName + * @return self + */ + public function setOrganizationName($organizationName) + { + $this->addressLines = null; + $this->organizationName = $organizationName; + return $this; + } + + + /** + * @return null + */ + public function getPostcodeType() + { + return $this->postcodeType; + } + + + /** + * @param null $postcodeType + * @return self + */ + public function setPostcodeType($postcodeType) + { + $this->postcodeType = $postcodeType; + return $this; + } + + + /** + * @return null + */ + public function getSuOrganizationIndicator() + { + return $this->suOrganizationIndicator; + } + + + /** + * @param null $suOrganizationIndicator + * @return self + */ + public function setSuOrganizationIndicator($suOrganizationIndicator) + { + $this->suOrganizationIndicator = $suOrganizationIndicator; + return $this; + } + + + /** + * @return null + */ + public function getDeliveryPointSuffix() + { + return $this->deliveryPointSuffix; + } + + + /** + * @param null $deliveryPointSuffix + * @return self + */ + public function setDeliveryPointSuffix($deliveryPointSuffix) + { + $this->deliveryPointSuffix = $deliveryPointSuffix; + return $this; + } + + + /** + * @return null + */ + public function getAddressLines() + { + if ($this->addressLines === null) { + $this->assembleAddressLines(); + } + return $this->addressLines; + } + + + /** + * Assemble the address lines (excluding post town and post code) according to the rule laid out by Royal Mail. + * The primary reference for these rules is the Royal Mail programmers guide. In some cases (particularly those + * not covered by the programmers guide), the layout used by the RM online address finder has been followed. + * + * @fixme Simplify whitespace handling with $nextLinePrefix + */ + protected function assembleAddressLines() + { + $this->assembleDebugFlags = array('errors' => array()); + $processed = false; + $processingError = false; + $addressLines = array(); + + // Take copies of the building name and number + // This allows us to manipulate their values (specifically for the split building name rules) + // without affecting the object "true" values, while making later processing within this method simpler + $buildingName = $this->buildingName; + $buildingNumber = $this->buildingNumber; + if ($buildingNumber == 0) { + $buildingNumber = null; + } + + // Exception 4 regex: Any of the specified prefixes followed by either a number with an alpha suffix or a numeric range + $specialPrefixes = array( + 'Back of', + 'Block', + 'Blocks', + 'Building', + 'Maisonette', + 'Maisonettes', + 'Rear of', + 'Shop', + 'Shops', + 'Stall', + 'Stalls', + 'Suite', + 'Suites', + 'Unit', + 'Units', + ); + $ex4Regex = '/^(' . join('|', $specialPrefixes) . ')\s([0-9]+[a-zA-Z]+|[0-9]+\-[0-9]+|[a-zA-Z])$/'; + + if (strlen($buildingName)) { + if (preg_match($ex4Regex, $buildingName)) { + $this->assembleDebugFlags['ex4BuildingName'] = true; + } + } + + if (strlen($this->subBuildingName)) { + if (preg_match($ex4Regex, $this->subBuildingName)) { + $this->assembleDebugFlags['ex4SubBuildingName'] = true; + } + } + + // Do we need to split the building name - see Table 27c / 27d + if (! empty($buildingName) && empty($buildingNumber)) { + + if (preg_match('/\s[0-9]+[a-zA-Z]+$/', $buildingName) + || preg_match('/\s[0-9]+\-[0-9]+$/', $buildingName) + ) { + if (! preg_match($ex4Regex, $buildingName)) { + $this->assembleDebugFlags['splitBuildingName'] = true; + $parts = explode(' ', $buildingName); + $buildingNumber = array_pop($parts); + $buildingName = join(' ', $parts); + } + } } - /** - * @return null - */ - public function getPostcodeType() - { - return $this->postcodeType; + // Table 19, note b: If an organization name is present, it should appear on the first address line + if (! empty($this->organizationName)) { + $addressLines[] = $this->organizationName; } - - - /** - * @param null $postcodeType - * @return self - */ - public function setPostcodeType($postcodeType) - { - $this->postcodeType = $postcodeType; - return $this; + // Table 19, note c: If a department name is present, it should appear on the second line (after organization name) + if (! empty($this->departmentName)) { + $addressLines[] = $this->departmentName; } - - - /** - * @return null - */ - public function getSuOrganizationIndicator() - { - return $this->suOrganizationIndicator; + // Table 19, note d: If a PO Box is present, it should appear on the first address line after any organization / dept. name + // The PO Box number MUST be preceded by 'PO Box' + if (! empty($this->poBox)) { + $addressLines[] = 'PO Box ' . $this->poBox; } + $nextLinePrefix = null; - /** - * @param null $suOrganizationIndicator - * @return self - */ - public function setSuOrganizationIndicator($suOrganizationIndicator) - { - $this->suOrganizationIndicator = $suOrganizationIndicator; - return $this; - } - + // Rule 1 - Organisation name only + if (empty($this->subBuildingName) && empty($buildingName) && empty($buildingNumber)) { + if (!empty($this->organizationName)) { + $processed = true; + $this->assembleDebugFlags['rule'] = 1; - /** - * @return null - */ - public function getDeliveryPointSuffix() - { - return $this->deliveryPointSuffix; + // No actual manipulation code as the organization name is handled above + } } + // The following code is based on Table 20 + // Rule 2 - Building number only + if (empty($this->subBuildingName) && empty($buildingName) && (! empty($buildingNumber))) { + $processed = true; + $this->assembleDebugFlags['rule'] = 2; - /** - * @param null $deliveryPointSuffix - * @return self - */ - public function setDeliveryPointSuffix($deliveryPointSuffix) - { - $this->deliveryPointSuffix = $deliveryPointSuffix; - return $this; + $this->assembleDebugFlags['nlpBuildingNumber'] = true; + $nextLinePrefix = $buildingNumber . ' '; } + // Rule 3 - Building Name only + if (empty($this->subBuildingName) && (! empty($buildingName)) && empty($buildingNumber)) { + $processed = true; + $this->assembleDebugFlags['rule'] = 3; - /** - * @return null - */ - public function getAddressLines() - { - if ($this->addressLines === null) { - $this->assembleAddressLines(); + // Exceptions: + // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') + // ii) First and penultimate characters are numeric, last character is alphabetic + // iii) Building name has only 1 character + if (preg_match('/^[0-9].*[0-9]$/', $buildingName) + || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $buildingName) + || (strlen($buildingName) == 1) + ) { + $this->assembleDebugFlags['exceptionBuildingName'] = true; + if ($nextLinePrefix !== null) { + $this->assembleDebugFlags['errors'][] = 'NLP ' . __LINE__; + $processingError = true; } - return $this->addressLines; - } - - /** - * Assemble the address lines (excluding post town and post code) according to the rule laid out by Royal Mail. - * The primary reference for these rules is the Royal Mail programmers guide. In some cases (particularly those - * not covered by the programmers guide), the layout used by the RM online address finder has been followed. - * - * @fixme Simplify whitespace handling with $nextLinePrefix - */ - protected function assembleAddressLines() - { - $this->assembleDebugFlags = array('errors' => array()); - $processed = false; - $processingError = false; - $addressLines = array(); - - // Take copies of the building name and number - // This allows us to manipulate their values (specifically for the split building name rules) - // without affecting the object "true" values, while making later processing within this method simpler - $buildingName = $this->buildingName; - $buildingNumber = $this->buildingNumber; - if ($buildingNumber == 0) { - $buildingNumber = null; + $this->assembleDebugFlags['nlpBuildingName'] = true; + $nextLinePrefix = $buildingName; + if ((strlen($buildingName) == 1) && (! is_numeric($buildingName))) { + $nextLinePrefix .= ','; } + $nextLinePrefix .= ' '; + } else { + $addressLines[] = $buildingName; + } + } + + // Rule 4 - Building Name & Building Number + if (empty($this->subBuildingName) && (! empty($buildingName) && (! empty($buildingNumber)))) { + $processed = true; + $this->assembleDebugFlags['rule'] = 4; + + $this->assembleDebugFlags['nlpBuildingNumber'] = true; + $addressLines[] = $buildingName; + $nextLinePrefix = $buildingNumber . ' '; + } + + // Rule 5 - Sub building name & Building Number + // The programmers guide talks about an exception involving the 'concatenation indicator', + // But as far as I can see this field doesn't exist in the CSV format files + if ((! empty($this->subBuildingName) && empty($buildingName) && (! empty($buildingNumber)))) { + $processed = true; + $this->assembleDebugFlags['rule'] = 5; + + $this->assembleDebugFlags['nlpBuildingNumber'] = true; + $addressLines[] = $this->subBuildingName; + $nextLinePrefix = $buildingNumber . ' '; + } + + // Rule 6 - Sub Building Name & Building Name + if ((! empty($this->subBuildingName)) && (! empty($buildingName)) && empty($buildingNumber)) { + $processed = true; + $this->assembleDebugFlags['rule'] = 6; + + $exceptionSubBuildingName = false; + // Exceptions: + // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') + // ii) First and penultimate characters are numeric, last character is alphabetic + // iii) Building name has only 1 character + if (preg_match('/^[0-9].*[0-9]$/', $this->subBuildingName) + || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $this->subBuildingName) + || (strlen($this->subBuildingName) == 1) + ) { + $this->assembleDebugFlags['exceptionSubBuildingName'] = true; + $exceptionSubBuildingName = true; - // Exception 4 regex: Any of the specified prefixes followed by either a number with an alpha suffix or a numeric range - $specialPrefixes = array( - 'Back of', - 'Block', - 'Blocks', - 'Building', - 'Maisonette', - 'Maisonettes', - 'Rear of', - 'Shop', - 'Shops', - 'Stall', - 'Stalls', - 'Suite', - 'Suites', - 'Unit', - 'Units', - ); - $ex4Regex = '/^(' . join('|', $specialPrefixes) . ')\s([0-9]+[a-zA-Z]+|[0-9]+\-[0-9]+|[a-zA-Z])$/'; - - if (strlen($buildingName)) { - if (preg_match($ex4Regex, $buildingName)) { - $this->assembleDebugFlags['ex4BuildingName'] = true; - } + if ($nextLinePrefix !== null) { + $this->assembleDebugFlags['errors'][] = 'NLP ' . __LINE__; + $processingError = true; } - if (strlen($this->subBuildingName)) { - if (preg_match($ex4Regex, $this->subBuildingName)) { - $this->assembleDebugFlags['ex4SubBuildingName'] = true; - } + $this->assembleDebugFlags['nlpSubBuildingName'] = true; + $nextLinePrefix = $this->subBuildingName; + if ((strlen($this->subBuildingName) == 1) && (! is_numeric($this->subBuildingName))) { + $nextLinePrefix .= ','; } - - // Do we need to split the building name - see Table 27c / 27d - if (! empty($buildingName) && empty($buildingNumber)) { - - if (preg_match('/\s[0-9]+[a-zA-Z]+$/', $buildingName) - || preg_match('/\s[0-9]+\-[0-9]+$/', $buildingName) - ) { - if (! preg_match($ex4Regex, $buildingName)) { - $this->assembleDebugFlags['splitBuildingName'] = true; - $parts = explode(' ', $buildingName); - $buildingNumber = array_pop($parts); - $buildingName = join(' ', $parts); - } - } + $nextLinePrefix .= ' '; + } else { + $addressLines[] = $this->subBuildingName; + } + + + // Exceptions: + // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') + // ii) First and penultimate characters are numeric, last character is alphabetic + // iii) Building name has only 1 character + if (preg_match('/^[0-9].*[0-9]$/', $buildingName) + || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $buildingName) + || (strlen($buildingName) == 1) + ) { + $this->assembleDebugFlags['exceptionBuildingName'] = true; + + if ((strlen($nextLinePrefix)) && (!$exceptionSubBuildingName)) { + $addressLines[] = trim($nextLinePrefix); + $nextLinePrefix = null; } - - // Table 19, note b: If an organization name is present, it should appear on the first address line - if (! empty($this->organizationName)) { - $addressLines[] = $this->organizationName; - } - // Table 19, note c: If a department name is present, it should appear on the second line (after organization name) - if (! empty($this->departmentName)) { - $addressLines[] = $this->departmentName; + $this->assembleDebugFlags['nlpBuildingName'] = true; + $nextLinePrefix = trim(trim($nextLinePrefix) .' '. $buildingName); + if ((strlen($buildingName) == 1) && (! is_numeric($buildingName))) { + $nextLinePrefix .= ','; } - // Table 19, note d: If a PO Box is present, it should appear on the first address line after any organization / dept. name - // The PO Box number MUST be preceded by 'PO Box' - if (! empty($this->poBox)) { - $addressLines[] = 'PO Box ' . $this->poBox; - } - + $nextLinePrefix .= ' '; + } else { + $addressLines[] = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $buildingName; $nextLinePrefix = null; - - // Rule 1 - Organisation name only - if (empty($this->subBuildingName) && empty($buildingName) && empty($buildingNumber)) { - if (!empty($this->organizationName)) { - $processed = true; - $this->assembleDebugFlags['rule'] = 1; - - // No actual manipulation code as the organization name is handled above - } - } - - // The following code is based on Table 20 - // Rule 2 - Building number only - if (empty($this->subBuildingName) && empty($buildingName) && (! empty($buildingNumber))) { - $processed = true; - $this->assembleDebugFlags['rule'] = 2; - - $this->assembleDebugFlags['nlpBuildingNumber'] = true; - $nextLinePrefix = $buildingNumber . ' '; - } - - // Rule 3 - Building Name only - if (empty($this->subBuildingName) && (! empty($buildingName)) && empty($buildingNumber)) { - $processed = true; - $this->assembleDebugFlags['rule'] = 3; - - // Exceptions: - // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') - // ii) First and penultimate characters are numeric, last character is alphabetic - // iii) Building name has only 1 character - if (preg_match('/^[0-9].*[0-9]$/', $buildingName) - || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $buildingName) - || (strlen($buildingName) == 1) - ) { - $this->assembleDebugFlags['exceptionBuildingName'] = true; - if ($nextLinePrefix !== null) { - $this->assembleDebugFlags['errors'][] = 'NLP ' . __LINE__; - $processingError = true; - } - - $this->assembleDebugFlags['nlpBuildingName'] = true; - $nextLinePrefix = $buildingName; - if ((strlen($buildingName) == 1) && (! is_numeric($buildingName))) { - $nextLinePrefix .= ','; - } - $nextLinePrefix .= ' '; - } else { - $addressLines[] = $buildingName; - } + } + } + + // Rule 7 - Sub building name, building name & building number + if (! (empty($this->subBuildingName) || empty($buildingName) || (empty($buildingNumber)))) { + $processed = true; + $this->assembleDebugFlags['rule'] = 7; + + // Exceptions: + // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') + // ii) First and penultimate characters are numeric, last character is alphabetic + // iii) Building name has only 1 character + if (preg_match('/^[0-9].*[0-9]$/', $this->subBuildingName) + || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $this->subBuildingName) + || (strlen($this->subBuildingName) == 1) + ) { + $this->assembleDebugFlags['exceptionSubBuildingName'] = true; + if ($nextLinePrefix !== null) { + $this->assembleDebugFlags['errors'][] = 'NLP ' . __LINE__; + $processingError = true; } - // Rule 4 - Building Name & Building Number - if (empty($this->subBuildingName) && (! empty($buildingName) && (! empty($buildingNumber)))) { - $processed = true; - $this->assembleDebugFlags['rule'] = 4; - - $this->assembleDebugFlags['nlpBuildingNumber'] = true; - $addressLines[] = $buildingName; - $nextLinePrefix = $buildingNumber . ' '; + $this->assembleDebugFlags['nlpSubBuildingName'] = true; + $nextLinePrefix = $this->subBuildingName; + if ((strlen($this->subBuildingName) == 1) && (! is_numeric($this->subBuildingName))) { + $nextLinePrefix .= ','; } + $nextLinePrefix .= ' '; + } else { + $addressLines[] = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $this->subBuildingName; + $nextLinePrefix = null; + } - // Rule 5 - Sub building name & Building Number - // The programmers guide talks about an exception involving the 'concatenation indicator', - // But as far as I can see this field doesn't exist in the CSV format files - if ((! empty($this->subBuildingName) && empty($buildingName) && (! empty($buildingNumber)))) { - $processed = true; - $this->assembleDebugFlags['rule'] = 5; - - $this->assembleDebugFlags['nlpBuildingNumber'] = true; - $addressLines[] = $this->subBuildingName; - $nextLinePrefix = $buildingNumber . ' '; - } + $addressLines[] = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $buildingName; + $nextLinePrefix = null; - // Rule 6 - Sub Building Name & Building Name - if ((! empty($this->subBuildingName)) && (! empty($buildingName)) && empty($buildingNumber)) { - $processed = true; - $this->assembleDebugFlags['rule'] = 6; - - $exceptionSubBuildingName = false; - // Exceptions: - // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') - // ii) First and penultimate characters are numeric, last character is alphabetic - // iii) Building name has only 1 character - if (preg_match('/^[0-9].*[0-9]$/', $this->subBuildingName) - || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $this->subBuildingName) - || (strlen($this->subBuildingName) == 1) - ) { - $this->assembleDebugFlags['exceptionSubBuildingName'] = true; - $exceptionSubBuildingName = true; - - if ($nextLinePrefix !== null) { - $this->assembleDebugFlags['errors'][] = 'NLP ' . __LINE__; - $processingError = true; - } - - $this->assembleDebugFlags['nlpSubBuildingName'] = true; - $nextLinePrefix = $this->subBuildingName; - if ((strlen($this->subBuildingName) == 1) && (! is_numeric($this->subBuildingName))) { - $nextLinePrefix .= ','; - } - $nextLinePrefix .= ' '; - } else { - $addressLines[] = $this->subBuildingName; - } - - - // Exceptions: - // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') - // ii) First and penultimate characters are numeric, last character is alphabetic - // iii) Building name has only 1 character - if (preg_match('/^[0-9].*[0-9]$/', $buildingName) - || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $buildingName) - || (strlen($buildingName) == 1) - ) { - $this->assembleDebugFlags['exceptionBuildingName'] = true; - - if ((strlen($nextLinePrefix)) && (!$exceptionSubBuildingName)) { - $addressLines[] = trim($nextLinePrefix); - $nextLinePrefix = null; - } - - $this->assembleDebugFlags['nlpBuildingName'] = true; - $nextLinePrefix = trim(trim($nextLinePrefix) .' '. $buildingName); - if ((strlen($buildingName) == 1) && (! is_numeric($buildingName))) { - $nextLinePrefix .= ','; - } - $nextLinePrefix .= ' '; - } else { - $addressLines[] = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $buildingName; - $nextLinePrefix = null; - } - } + $this->assembleDebugFlags['nlpBuildingNumber'] = true; + $nextLinePrefix = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $buildingNumber; + } - // Rule 7 - Sub building name, building name & building number - if (! (empty($this->subBuildingName) || empty($buildingName) || (empty($buildingNumber)))) { - $processed = true; - $this->assembleDebugFlags['rule'] = 7; - - // Exceptions: - // i) First and last characters of the building name are numeric (eg. '1to1' or '100:1') - // ii) First and penultimate characters are numeric, last character is alphabetic - // iii) Building name has only 1 character - if (preg_match('/^[0-9].*[0-9]$/', $this->subBuildingName) - || preg_match('/^[0-9].*[0-9][a-zA-Z]$/', $this->subBuildingName) - || (strlen($this->subBuildingName) == 1) - ) { - $this->assembleDebugFlags['exceptionSubBuildingName'] = true; - if ($nextLinePrefix !== null) { - $this->assembleDebugFlags['errors'][] = 'NLP ' . __LINE__; - $processingError = true; - } - - $this->assembleDebugFlags['nlpSubBuildingName'] = true; - $nextLinePrefix = $this->subBuildingName; - if ((strlen($this->subBuildingName) == 1) && (! is_numeric($this->subBuildingName))) { - $nextLinePrefix .= ','; - } - $nextLinePrefix .= ' '; - } else { - $addressLines[] = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $this->subBuildingName; - $nextLinePrefix = null; - } - - $addressLines[] = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $buildingName; - $nextLinePrefix = null; - - $this->assembleDebugFlags['nlpBuildingNumber'] = true; - $nextLinePrefix = (strlen($nextLinePrefix) ? trim($nextLinePrefix) . ' ' : '') . $buildingNumber; - } + // Rule C1 - Self-written rule: Sub-building name occurs, but no building name or number + // This occurred in the Y14M09 update - 8350793 / EH12 5DD (15Gf Eglinton Crescent) + // And was still the same on the Royal Mail Postcode Lookup website data as of 2014-10-21 + if (empty($buildingName) && empty($buildingNumber) && (! empty($this->subBuildingName))) { + $processed = true; + $this->assembleDebugFlags['rule'] = 'c1'; + $nextLinePrefix = $this->subBuildingName; - // Rule C1 - Self-written rule: Sub-building name occurs, but no building name or number - // This occurred in the Y14M09 update - 8350793 / EH12 5DD (15Gf Eglinton Crescent) - // And was still the same on the Royal Mail Postcode Lookup website data as of 2014-10-21 - if (empty($buildingName) && empty($buildingNumber) && (! empty($this->subBuildingName))) { - $processed = true; - $this->assembleDebugFlags['rule'] = 'c1'; - $nextLinePrefix = $this->subBuildingName; + // FIXME Should we test the exception rules? + } - // FIXME Should we test the exception rules? - } + if (strlen($nextLinePrefix) && (substr($nextLinePrefix, -1) != ' ')) { + $nextLinePrefix .= ' '; + } - if (strlen($nextLinePrefix) && (substr($nextLinePrefix, -1) != ' ')) { - $nextLinePrefix .= ' '; - } + // Dependent Thoroughfare + if (! empty($this->dependentThoroughfare)) { + $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->dependentThoroughfare; + $nextLinePrefix = null; + } + // Thoroughfare + if (! empty($this->thoroughfare)) { + $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->thoroughfare; + $nextLinePrefix = null; + } + // Double dependent locality + if (! empty($this->doubleDependentLocality)) { + $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->doubleDependentLocality; + $nextLinePrefix = null; + } + // Dependent locality + if (! empty($this->dependentLocality)) { + $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->dependentLocality; + $nextLinePrefix = null; + } - // Dependent Thoroughfare - if (! empty($this->dependentThoroughfare)) { - $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->dependentThoroughfare; - $nextLinePrefix = null; - } - // Thoroughfare - if (! empty($this->thoroughfare)) { - $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->thoroughfare; - $nextLinePrefix = null; - } - // Double dependent locality - if (! empty($this->doubleDependentLocality)) { - $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->doubleDependentLocality; - $nextLinePrefix = null; - } - // Dependent locality - if (! empty($this->dependentLocality)) { - $addressLines[] = (strlen($nextLinePrefix) ? $nextLinePrefix : '') . $this->dependentLocality; - $nextLinePrefix = null; - } + // Yup, apparently there's addresses in the database with no locality / thoroughfare. Just a number. + // UDPRNs affected as of 2014-02-06: 2431986 and 328392 + if ($nextLinePrefix !== null) { + $this->assembleDebugFlags['nlpAlone'] = true; + $addressLines[] = $nextLinePrefix; + } - // Yup, apparently there's addresses in the database with no locality / thoroughfare. Just a number. - // UDPRNs affected as of 2014-02-06: 2431986 and 328392 - if ($nextLinePrefix !== null) { - $this->assembleDebugFlags['nlpAlone'] = true; - $addressLines[] = $nextLinePrefix; - } + $this->assembleDebugFlags['processingError'] = $processingError; + $this->assembleDebugFlags['processed'] = $processed; - $this->assembleDebugFlags['processingError'] = $processingError; - $this->assembleDebugFlags['processed'] = $processed; - - // Send a notification to developers if an address was not processed by any of the above rules - // (and should have been) or if we think there was an error in processing the address correctly - // (because the RM programmers guide does not specify how to correctly handle the address encountered) - if ((! $processed) || $processingError) { - if (! (empty($this->subBuildingName) && empty($buildingName) && (empty($buildingNumber)))) { - if ($processingError) { - trigger_error("An address (with UDPRN: {$this->udprn}) was probably processed incorrectly", - E_USER_NOTICE); - } else { - trigger_error("An address (with UDPRN: {$this->udprn}) was not processed by any rules", - E_USER_NOTICE); - } - } + // Send a notification to developers if an address was not processed by any of the above rules + // (and should have been) or if we think there was an error in processing the address correctly + // (because the RM programmers guide does not specify how to correctly handle the address encountered) + if ((! $processed) || $processingError) { + if (! (empty($this->subBuildingName) && empty($buildingName) && (empty($buildingNumber)))) { + if ($processingError) { + trigger_error("An address (with UDPRN: {$this->udprn}) was probably processed incorrectly", + E_USER_NOTICE); + } else { + trigger_error("An address (with UDPRN: {$this->udprn}) was not processed by any rules", + E_USER_NOTICE); } - - $this->addressLines = $addressLines; + } } + $this->addressLines = $addressLines; + } - /** - * Return the debug flags that indicate what processing was done by assembleAddressLines() - * While this is internal implementation information, it can be useful, for example, to build an SQL table - * containing these values to allow quick location of addresses that are matching certain rules / criteria - * - * @return array - */ - public function getAssemblyDebugFlags() - { - return $this->assembleDebugFlags; - } + + /** + * Return the debug flags that indicate what processing was done by assembleAddressLines() + * While this is internal implementation information, it can be useful, for example, to build an SQL table + * containing these values to allow quick location of addresses that are matching certain rules / criteria + * + * @return array + */ + public function getAssemblyDebugFlags() + { + return $this->assembleDebugFlags; + } } diff --git a/civicrmpostcodelookup.php b/civicrmpostcodelookup.php index abce437..f1f53c6 100755 --- a/civicrmpostcodelookup.php +++ b/civicrmpostcodelookup.php @@ -1,16 +1,17 @@ <?php require_once 'civicrmpostcodelookup.civix.php'; +use CRM_Civigiftaid_ExtensionUtil as E; // Postcode lookup providers // FIXME: Move this list to option values -$GLOBALS["providers"] = array( - 'afd' => 'AFD', - 'civipostcode' => 'CiviPostcode', - 'experian' => 'Experian', - 'postcodeanywhere' => 'PostcodeAnywhere', - 'getaddressio' => 'GetAddress' - ); +$GLOBALS["providers"] = [ + 'afd' => 'AFD', + 'civipostcode' => 'CiviPostcode', + 'experian' => 'Experian', + 'postcodeanywhere' => 'PostcodeAnywhere', + 'getaddressio' => 'GetAddress' +]; /** * Implementation of hook_civicrm_config @@ -38,13 +39,7 @@ function civicrmpostcodelookup_civicrm_xmlMenu(&$files) { * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install */ function civicrmpostcodelookup_civicrm_install() { - - require_once 'CRM/Core/BAO/Setting.php'; - CRM_Core_BAO_Setting::setItem('', - 'CiviCRM Postcode Lookup', - 'api_details' - ); - + CRM_Core_BAO_Setting::setItem('', 'CiviCRM Postcode Lookup', 'api_details'); _civicrmpostcodelookup_civix_civicrm_install(); } @@ -126,35 +121,23 @@ function civicrmpostcodelookup_civicrm_alterSettingsFolders(&$metaDataFolders = /** * Add navigation for Postcode Lookup under "Administer" menu - * - * @param $params associated array of navigation menus */ -function civicrmpostcodelookup_civicrm_navigationMenu( &$params ) { - // get the id of Administer Menu - $administerMenuId = CRM_Core_DAO::getFieldValue('CRM_Core_BAO_Navigation', 'Administer', 'id', 'name'); - - // skip adding menu if there is no administer menu - if ($administerMenuId) { - // get the maximum key under adminster menu - $maxKey = max( array_keys($params[$administerMenuId]['child'])); - $params[$administerMenuId]['child'][$maxKey+1] = array ( - 'attributes' => array ( - 'label' => 'Postcode Lookup', - 'name' => 'Postcode Lookup', - 'url' => 'civicrm/admin/postcodelookup/settings?reset=1', - 'permission' => 'administer CiviCRM', - 'operator' => NULL, - 'separator' => TRUE, - 'parentID' => $administerMenuId, - 'navID' => $maxKey+1, - 'active' => 1 - ) - ); - } +function civicrmpostcodelookup_civicrm_navigationMenu(&$menu) { + $item[] = [ + 'label' => E::ts('Postcode Lookup'), + 'name' => 'Postcode Lookup', + 'url' => 'civicrm/admin/postcodelookup/settings?reset=1', + 'permission' => 'administer CiviCRM', + 'operator' => NULL, + 'separator' => TRUE, + 'active' => 1 + ]; + _civicrmpostcodelookup_civix_insert_navigation_menu($menu, 'Administer', $item[0]); + _civicrmpostcodelookup_civix_navigationMenu($menu); } function civicrmpostcodelookup_civicrm_buildForm($formName, &$form) { - $postCodeLookupPages = array( + $postCodeLookupPages = [ 'CRM_Contact_Form_Contact' , 'CRM_Contact_Form_Inline_Address' , 'CRM_Profile_Form_Edit' @@ -163,7 +146,7 @@ function civicrmpostcodelookup_civicrm_buildForm($formName, &$form) { , 'CRM_Event_Form_ManageEvent_Location' , 'CRM_Financial_Form_Payment' , 'CRM_Contact_Form_Domain' - ); + ]; if (in_array($formName, $postCodeLookupPages)) { // Assign the postcode lookup provider to form, so that we can call the related function in AJAX $settingsStr = CRM_Core_BAO_Setting::getItem('CiviCRM Postcode Lookup', 'api_details'); @@ -180,10 +163,9 @@ function civicrmpostcodelookup_civicrm_buildForm($formName, &$form) { $civiVersion = CRM_Civicrmpostcodelookup_Utils::getCiviVersion(); $form->assign('civiVersion', $civiVersion); - require_once 'CRM/Core/Resources.php'; CRM_Core_Resources::singleton() - ->addScriptFile('uk.co.vedaconsulting.module.civicrmpostcodelookup', 'js/jquery.ui.autocomplete.html.js', 110, 'html-header', FALSE) - ->addStyleFile('uk.co.vedaconsulting.module.civicrmpostcodelookup', 'css/civipostcode.css', 110, 'page-header'); + ->addScriptFile(E::LONG_NAME, 'js/jquery.ui.autocomplete.html.js', 110, 'html-header', FALSE) + ->addStyleFile(E::LONG_NAME, 'css/civipostcode.css', 110, 'page-header'); } } @@ -194,8 +176,7 @@ function civicrmpostcodelookup_civicrm_buildForm($formName, &$form) { * @return void */ function civicrmpostcodelookup_civicrm_permission(&$permissions) { - $prefix = ts('CiviCRM') . ': '; // name of extension or module - $permissions += array( - 'access postcode lookup' => $prefix . ts('Access CiviCRM Postcode lookups'), - ); + $permissions += [ + 'access postcode lookup' => E::ts('CiviCRM: Access CiviCRM Postcode lookups'), + ]; } diff --git a/templates/CRM/Civicrmpostcodelookup/Form/Postcodelookup.tpl b/templates/CRM/Civicrmpostcodelookup/Form/Postcodelookup.tpl index a56ad7b..18e64ad 100755 --- a/templates/CRM/Civicrmpostcodelookup/Form/Postcodelookup.tpl +++ b/templates/CRM/Civicrmpostcodelookup/Form/Postcodelookup.tpl @@ -1,74 +1,74 @@ {literal} -<style type="text/css"> - .ui-autocomplete { height: 200px; overflow-y: scroll; overflow-x: hidden;} -</style> + <style type="text/css"> + .ui-autocomplete { height: 200px; overflow-y: scroll; overflow-x: hidden;} + </style> <script type="text/javascript"> -cj(document).ready(function(){ - var locationTypes = {/literal}{if $civiPostCodeLookupLocationTypeJson}{$civiPostCodeLookupLocationTypeJson}{else}''{/if}{literal}; - var blockId = ''; - var blockNo = ''; - if (cj('#editrow-street_address-Primary').length > 0 ) { - var blockId = 'Primary'; - var blockNo = 'Primary'; - var targetHtml = ''; - var postCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCode_' + blockId + '" id ="inputPostCode_' + blockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + blockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; - cj('#editrow-street_address-Primary').before(postCodeHtml); + cj(document).ready(function(){ + var locationTypes = {/literal}{if $civiPostCodeLookupLocationTypeJson}{$civiPostCodeLookupLocationTypeJson}{else}''{/if}{literal}; + var blockId = ''; + var blockNo = ''; + if (cj('#editrow-street_address-Primary').length > 0 ) { + var blockId = 'Primary'; + var blockNo = 'Primary'; + var targetHtml = ''; + var postCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCode_' + blockId + '" id ="inputPostCode_' + blockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + blockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; + cj('#editrow-street_address-Primary').before(postCodeHtml); } else if (cj('#editrow-street_address-5').length > 0 ) { - var blockId = '5'; - var blockNo = '5'; - var targetHtml = ''; - var divHtml = cj('#editrow-street_address-5').html(); - var postCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCode_' + blockId + '" id ="inputPostCode_' + blockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + blockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; - cj('#editrow-street_address-5').before(postCodeHtml); + var blockId = '5'; + var blockNo = '5'; + var targetHtml = ''; + var divHtml = cj('#editrow-street_address-5').html(); + var postCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCode_' + blockId + '" id ="inputPostCode_' + blockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + blockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; + cj('#editrow-street_address-5').before(postCodeHtml); } // Include lookup in billing section as well if (cj('#billing_street_address-5').length > 0 ) { - var billingblockId = '5'; - var billingblockNo = '5'; - var billingtargetHtml = ''; - var billingdivHtml = cj('#billing_street_address-5').html(); - var billingpostCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCodeBillingSection_' + billingblockId + '" id ="inputPostCodeBillingSection_' + billingblockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + billingblockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; - cj('.billing_street_address-5-section').before(billingpostCodeHtml); - - var billingPostcodeElement = '#inputPostCodeBillingSection_'+billingblockNo; + var billingblockId = '5'; + var billingblockNo = '5'; + var billingtargetHtml = ''; + var billingdivHtml = cj('#billing_street_address-5').html(); + var billingpostCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCodeBillingSection_' + billingblockId + '" id ="inputPostCodeBillingSection_' + billingblockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + billingblockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; + cj('.billing_street_address-5-section').before(billingpostCodeHtml); + + var billingPostcodeElement = '#inputPostCodeBillingSection_'+billingblockNo; } //Location Types from settings if (locationTypes) { cj.each(locationTypes, function (id, index) { if (cj('#editrow-street_address-'+ id).length > 0 ) { - blockId = id; - blockNo = id; - var targetHtml = ''; - // var divHtml = cj('#editrow-street_address-'+ id).html(); - var postCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCode_' + blockId + '" id ="inputPostCode_' + blockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + blockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; - cj('#editrow-street_address-'+ id).before(postCodeHtml); + blockId = id; + blockNo = id; + var targetHtml = ''; + // var divHtml = cj('#editrow-street_address-'+ id).html(); + var postCodeHtml = '<div class="crm-section addressLookup form-item"><div class="label"><label for="addressLookup">Search for an address</label></div><div class="edit-value content"><div class="postcodelookup-textbox-wrapper"><input placeholder="Start typing a postcode" name="inputPostCode_' + blockId + '" id ="inputPostCode_' + blockId + '" style="width: 25em;"></div><div class="loader-image"><img id="loaderimage_' + blockId + '" src="{/literal}{$config->resourceBase}{literal}i/loading.gif" style="width:15px;height:15px; display: none" /></div></div><div class="clear"></div></div>'; + cj('#editrow-street_address-'+ id).before(postCodeHtml); } }); } - var buttonElement = '#postcodeLookupButton_'+blockNo; - var houseElement = '#inputNumber_'+blockNo; - var postcodeElement = '#inputPostCode_'+blockNo; - var addressResultElement = '#addressResult_'+blockNo; - var addressResultsElement = '#addressResults_'+blockNo; - var minCharacters = 4; - var delay = 200; - - var postcodeProvider = '{/literal}{$civiPostCodeLookupProvider}{literal}'; - if (postcodeProvider !== 'civipostcode') { - cj(postcodeElement).attr("placeholder", "Type full postcode to find addresses"); - minCharacters = 5; - } + var buttonElement = '#postcodeLookupButton_'+blockNo; + var houseElement = '#inputNumber_'+blockNo; + var postcodeElement = '#inputPostCode_'+blockNo; + var addressResultElement = '#addressResult_'+blockNo; + var addressResultsElement = '#addressResults_'+blockNo; + var minCharacters = 4; + var delay = 200; + + var postcodeProvider = '{/literal}{$civiPostCodeLookupProvider}{literal}'; + if (postcodeProvider !== 'civipostcode') { + cj(postcodeElement).attr("placeholder", "Type full postcode to find addresses"); + minCharacters = 5; + } - cj(function() { - var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/search', {"json": 1}); + cj(function() { + var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/search', {"json": 1}); - {/literal}{if $civiVersion < 4.5}{literal} + {/literal}{if $civiVersion < 4.5}{literal} - cj( postcodeElement ).autocomplete( sourceUrl, { + cj( postcodeElement ).autocomplete( sourceUrl, { width: 400, selectFirst: false, minChars: minCharacters, @@ -80,18 +80,18 @@ cj(document).ready(function(){ return cj( postcodeElement ).val(); }, number:function () { - return cj(houseElement).val(); + return cj(houseElement).val(); } } - }).result(function(event, data, formatted) { - findAddressValues(data[1], blockNo, blockPrefix = ''); - cj(postcodeElement).val(''); - return false; - }); + }).result(function(event, data, formatted) { + findAddressValues(data[1], blockNo, blockPrefix = ''); + cj(postcodeElement).val(''); + return false; + }); - // Postcode lookup in billing section - if (cj('#billing_street_address-5').length > 0 ) { - cj( billingPostcodeElement ).autocomplete( sourceUrl, { + // Postcode lookup in billing section + if (cj('#billing_street_address-5').length > 0 ) { + cj( billingPostcodeElement ).autocomplete( sourceUrl, { width: 400, selectFirst: false, minChars: minCharacters, @@ -103,50 +103,22 @@ cj(document).ready(function(){ return cj( billingPostcodeElement ).val(); }, number:function () { - return cj(houseElement).val(); + return cj(houseElement).val(); } } - }).result(function(event, data, formatted) { - findAddressValues(data[1], '5', blockPrefix = 'billing_'); - cj(billingPostcodeElement).val(''); - return false; - }); - } - - {/literal}{else}{literal} - - cj(postcodeElement).autocomplete({ - source: sourceUrl, - minLength: minCharacters, - data: {postcode: cj( postcodeElement ).val(), number: cj(houseElement).val(), mode: '0'}, - search: function( event, ui ) { - cj('#loaderimage_'+blockNo).show(); - }, - response: function( event, ui ) { - cj('#loaderimage_'+blockNo).hide(); - }, - select: function(event, ui) { - if (ui.item.id != '') { - findAddressValues(ui.item.id, blockNo, blockPrefix = ''); - cj('#loaderimage_'+blockNo).show(); - } - return false; - }, - - html: true, // optional (jquery.ui.autocomplete.html.js required) - - //optional (if other layers overlap autocomplete list) - open: function(event, ui) { - cj(".ui-autocomplete").css("z-index", 1000); + }).result(function(event, data, formatted) { + findAddressValues(data[1], '5', blockPrefix = 'billing_'); + cj(billingPostcodeElement).val(''); + return false; + }); } - }); - // Postcode lookup in billing section - if (cj('#billing_street_address-5').length > 0 ) { - cj(billingPostcodeElement).autocomplete({ + {/literal}{else}{literal} + + cj(postcodeElement).autocomplete({ source: sourceUrl, minLength: minCharacters, - data: {postcode: cj( billingPostcodeElement ).val(), number: cj(houseElement).val(), mode: '0'}, + data: {postcode: cj( postcodeElement ).val(), number: cj(houseElement).val(), mode: '0'}, search: function( event, ui ) { cj('#loaderimage_'+blockNo).show(); }, @@ -155,7 +127,7 @@ cj(document).ready(function(){ }, select: function(event, ui) { if (ui.item.id != '') { - findAddressValues(ui.item.id, '5', blockPrefix = 'billing_'); + findAddressValues(ui.item.id, blockNo, blockPrefix = ''); cj('#loaderimage_'+blockNo).show(); } return false; @@ -168,75 +140,103 @@ cj(document).ready(function(){ cj(".ui-autocomplete").css("z-index", 1000); } }); - } - {/literal}{/if}{literal} + // Postcode lookup in billing section + if (cj('#billing_street_address-5').length > 0 ) { + cj(billingPostcodeElement).autocomplete({ + source: sourceUrl, + minLength: minCharacters, + data: {postcode: cj( billingPostcodeElement ).val(), number: cj(houseElement).val(), mode: '0'}, + search: function( event, ui ) { + cj('#loaderimage_'+blockNo).show(); + }, + response: function( event, ui ) { + cj('#loaderimage_'+blockNo).hide(); + }, + select: function(event, ui) { + if (ui.item.id != '') { + findAddressValues(ui.item.id, '5', blockPrefix = 'billing_'); + cj('#loaderimage_'+blockNo).show(); + } + return false; + }, + html: true, // optional (jquery.ui.autocomplete.html.js required) + + //optional (if other layers overlap autocomplete list) + open: function(event, ui) { + cj(".ui-autocomplete").css("z-index", 1000); + } + }); + } + + {/literal}{/if}{literal} + + }); }); -}); - -function findAddressValues(id , blockNo, blockPrefix) { - cj('#loaderimage_'+blockNo).show(); - setAddressFields(false, blockNo, blockPrefix); - var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/get', {"json": 1}); - cj.ajax({ - dataType: 'json', - data: {id: id, mode: '0'}, - url: sourceUrl, - success: function (data) { - setAddressFields(data.address, blockNo, blockPrefix); - setAddressFields(true, blockNo, blockPrefix); - }, - complete: function (data) { - cj('#loaderimage_'+blockNo).hide(); - } - }); -} - -function setAddressFields(address, blockNo, blockPrefix) { - var postcodeElement = '#' + blockPrefix + 'postal_code-'+ blockNo; - var streetAddressElement = '#' + blockPrefix + 'street_address-'+ blockNo; - var AddstreetAddressElement = '#' + blockPrefix + 'supplemental_address_1-'+ blockNo; - var AddstreetAddressElement1 = '#' + blockPrefix + 'supplemental_address_2-'+ blockNo; - var cityElement = '#' + blockPrefix + 'city-'+ blockNo; - var countyElement = '#address_'+ blockNo +'_state_province_id'; - - var allFields = { - postcode: postcodeElement, - line1: streetAddressElement, - line2: AddstreetAddressElement, - line3: AddstreetAddressElement1, - city: cityElement - }; - - if(address == true) { - for(var field in allFields) { - cj(allFields[field]).removeAttr('disabled'); - } + + function findAddressValues(id , blockNo, blockPrefix) { + cj('#loaderimage_'+blockNo).show(); + setAddressFields(false, blockNo, blockPrefix); + var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/get', {"json": 1}); + cj.ajax({ + dataType: 'json', + data: {id: id, mode: '0'}, + url: sourceUrl, + success: function (data) { + setAddressFields(data.address, blockNo, blockPrefix); + setAddressFields(true, blockNo, blockPrefix); + }, + complete: function (data) { + cj('#loaderimage_'+blockNo).hide(); + } + }); } - else if(address == false) { - for(var field in allFields) { - cj(allFields[field]).attr('disabled', 'disabled'); + + function setAddressFields(address, blockNo, blockPrefix) { + var postcodeElement = '#' + blockPrefix + 'postal_code-'+ blockNo; + var streetAddressElement = '#' + blockPrefix + 'street_address-'+ blockNo; + var AddstreetAddressElement = '#' + blockPrefix + 'supplemental_address_1-'+ blockNo; + var AddstreetAddressElement1 = '#' + blockPrefix + 'supplemental_address_2-'+ blockNo; + var cityElement = '#' + blockPrefix + 'city-'+ blockNo; + var countyElement = '#address_'+ blockNo +'_state_province_id'; + + var allFields = { + postcode: postcodeElement, + line1: streetAddressElement, + line2: AddstreetAddressElement, + line3: AddstreetAddressElement1, + city: cityElement + }; + + if(address == true) { + for(var field in allFields) { + cj(allFields[field]).removeAttr('disabled'); + } } - } - else { - cj(streetAddressElement).val(''); - cj(AddstreetAddressElement).val(''); - cj(AddstreetAddressElement1).val(''); - cj(cityElement).val(''); - cj(postcodeElement).val(''); - cj(countyElement).val(''); - - cj(streetAddressElement).val(address.street_address); - cj(AddstreetAddressElement).val(address.supplemental_address_1); - cj(AddstreetAddressElement1).val(address.supplemental_address_2); - cj(cityElement).val(address.town); - cj(postcodeElement).val(address.postcode); - if(typeof(address.state_province_id) != "undefined" && address.state_province_id !== null) { - cj(countyElement).val(address.state_province_id); + else if(address == false) { + for(var field in allFields) { + cj(allFields[field]).attr('disabled', 'disabled'); + } + } + else { + cj(streetAddressElement).val(''); + cj(AddstreetAddressElement).val(''); + cj(AddstreetAddressElement1).val(''); + cj(cityElement).val(''); + cj(postcodeElement).val(''); + cj(countyElement).val(''); + + cj(streetAddressElement).val(address.street_address); + cj(AddstreetAddressElement).val(address.supplemental_address_1); + cj(AddstreetAddressElement1).val(address.supplemental_address_2); + cj(cityElement).val(address.town); + cj(postcodeElement).val(address.postcode); + if(typeof(address.state_province_id) != "undefined" && address.state_province_id !== null) { + cj(countyElement).val(address.state_province_id); + } + cj(countyElement).trigger("change"); } - cj(countyElement).trigger("change"); } -} </script> {/literal} diff --git a/templates/CRM/Civicrmpostcodelookup/Form/Setting.tpl b/templates/CRM/Civicrmpostcodelookup/Form/Setting.tpl index 7f80fa9..10932fa 100755 --- a/templates/CRM/Civicrmpostcodelookup/Form/Setting.tpl +++ b/templates/CRM/Civicrmpostcodelookup/Form/Setting.tpl @@ -6,86 +6,86 @@ <div class="crm-block crm-form-block crm-export-form-block"> -{* FIELD EXAMPLE: OPTION 1 (AUTOMATIC LAYOUT) *} - -{foreach from=$elementNames item=elementName} - <div class="crm-section"> - <div class="label">{$form.$elementName.label}</div> - <div class="content">{$form.$elementName.html}</div> - <div class="clear"></div> + {* FIELD EXAMPLE: OPTION 1 (AUTOMATIC LAYOUT) *} + + {foreach from=$elementNames item=elementName} + <div class="crm-section"> + <div class="label">{$form.$elementName.label}</div> + <div class="content">{$form.$elementName.html}</div> + <div class="clear"></div> + </div> + {/foreach} + + {* FIELD EXAMPLE: OPTION 2 (MANUAL LAYOUT) + + <!-- <div> + <span>{$form.favorite_color.label}</span> + <span>{$form.favorite_color.html}</span> + </div> --> + + {* FOOTER *} + <div class="crm-submit-buttons"> + {include file="CRM/common/formButtons.tpl" location="bottom"} </div> -{/foreach} - -{* FIELD EXAMPLE: OPTION 2 (MANUAL LAYOUT) - - <!-- <div> - <span>{$form.favorite_color.label}</span> - <span>{$form.favorite_color.html}</span> - </div> --> - -{* FOOTER *} -<div class="crm-submit-buttons"> -{include file="CRM/common/formButtons.tpl" location="bottom"} -</div> </div> {literal} -<script> -cj( document ).ready(function() { - cj('#server').parent().append('<br />Without trailing slash. Example: http://pce.afd.co.uk , http://civipostcode.com'); - hideAllFields(); - showFields(); - cj('#provider').change(function() { - hideAllFields(); - showFields(); - }); -}); - -function hideAllFields() { - cj('#server').parent().parent().hide(); - cj('#api_key').parent().parent().hide(); - cj('#serial_number').parent().parent().hide(); - cj('#username').parent().parent().hide(); - cj('#password').parent().parent().hide(); -} - -function showFields() { - - var providerVal = cj("#provider").val(); - - if (providerVal == 'experian') { - cj('#username').parent().parent().show(); - cj('#password').parent().parent().show(); - } - - if (providerVal == 'afd') { - cj('#server').parent().parent().show(); - cj('#serial_number').parent().parent().show(); - cj('#password').parent().parent().show(); - cj('#server').val('http://pce.afd.co.uk'); - } - - if (providerVal == 'civipostcode') { - cj('#server').parent().parent().show(); - cj('#api_key').parent().parent().show(); - cj('#server').val('http://civipostcode.com'); - } - - if (providerVal == 'postcodeanywhere') { - cj('#server').parent().parent().show(); - cj('#api_key').parent().parent().show(); - cj('#username').parent().parent().show(); - cj('#server').val('http://services.postcodeanywhere.co.uk'); - } - - if (providerVal == 'getaddressio') { - cj('#server').parent().parent().show(); - cj('#api_key').parent().parent().show(); - cj('#server').val('https://api.getAddress.io'); - } -} -</script> + <script> + cj( document ).ready(function() { + cj('#server').parent().append('<br />Without trailing slash. Example: http://pce.afd.co.uk , http://civipostcode.com'); + hideAllFields(); + showFields(); + cj('#provider').change(function() { + hideAllFields(); + showFields(); + }); + }); + + function hideAllFields() { + cj('#server').parent().parent().hide(); + cj('#api_key').parent().parent().hide(); + cj('#serial_number').parent().parent().hide(); + cj('#username').parent().parent().hide(); + cj('#password').parent().parent().hide(); + } + + function showFields() { + + var providerVal = cj("#provider").val(); + + if (providerVal == 'experian') { + cj('#username').parent().parent().show(); + cj('#password').parent().parent().show(); + } + + if (providerVal == 'afd') { + cj('#server').parent().parent().show(); + cj('#serial_number').parent().parent().show(); + cj('#password').parent().parent().show(); + cj('#server').val('http://pce.afd.co.uk'); + } + + if (providerVal == 'civipostcode') { + cj('#server').parent().parent().show(); + cj('#api_key').parent().parent().show(); + cj('#server').val('http://civipostcode.com'); + } + + if (providerVal == 'postcodeanywhere') { + cj('#server').parent().parent().show(); + cj('#api_key').parent().parent().show(); + cj('#username').parent().parent().show(); + cj('#server').val('http://services.postcodeanywhere.co.uk'); + } + + if (providerVal == 'getaddressio') { + cj('#server').parent().parent().show(); + cj('#api_key').parent().parent().show(); + cj('#server').val('https://api.getAddress.io'); + } + } + </script> {/literal} diff --git a/templates/CRM/Contact/Form/Edit/Address/street_address.tpl b/templates/CRM/Contact/Form/Edit/Address/street_address.tpl index 4aa0d3f..152a3e1 100755 --- a/templates/CRM/Contact/Form/Edit/Address/street_address.tpl +++ b/templates/CRM/Contact/Form/Edit/Address/street_address.tpl @@ -33,33 +33,33 @@ </tr> {literal} -<style type="text/css"> - .ui-autocomplete { height: 200px; overflow-y: scroll; overflow-x: hidden;} -</style> + <style type="text/css"> + .ui-autocomplete { height: 200px; overflow-y: scroll; overflow-x: hidden;} + </style> <script type="text/javascript"> -var info = []; //Needed to access data from outside the JSON processing function -cj(document).ready(function() { - var blockNo = {/literal}{$blockId}{literal}; - var buttonElement = '#postcodeLookupButton_'+blockNo; - var houseElement = '#inputNumber_'+blockNo; - var postcodeElement = '#inputPostCode_'+blockNo; - var addressResultElement = '#addressResult_'+blockNo; - var addressResultsElement = '#addressResults_'+blockNo; - var minCharacters = 4; - var delay = 200; - - var postcodeProvider = '{/literal}{$civiPostCodeLookupProvider}{literal}'; - if (postcodeProvider !== 'civipostcode') { - cj(postcodeElement).attr("placeholder", "Type full postcode to find addresses"); - minCharacters = 5; - } + var info = []; //Needed to access data from outside the JSON processing function + cj(document).ready(function() { + var blockNo = {/literal}{$blockId}{literal}; + var buttonElement = '#postcodeLookupButton_'+blockNo; + var houseElement = '#inputNumber_'+blockNo; + var postcodeElement = '#inputPostCode_'+blockNo; + var addressResultElement = '#addressResult_'+blockNo; + var addressResultsElement = '#addressResults_'+blockNo; + var minCharacters = 4; + var delay = 200; + + var postcodeProvider = '{/literal}{$civiPostCodeLookupProvider}{literal}'; + if (postcodeProvider !== 'civipostcode') { + cj(postcodeElement).attr("placeholder", "Type full postcode to find addresses"); + minCharacters = 5; + } - cj(function() { - var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/search', {"json": 1}); + cj(function() { + var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/search', {"json": 1}); - {/literal}{if $civiVersion < 4.5}{literal} + {/literal}{if $civiVersion < 4.5}{literal} - cj( postcodeElement ).autocomplete( sourceUrl, { + cj( postcodeElement ).autocomplete( sourceUrl, { width: 400, selectFirst: false, minChars: minCharacters, @@ -71,18 +71,18 @@ cj(document).ready(function() { return cj( postcodeElement ).val(); }, number:function () { - return cj(houseElement).val(); + return cj(houseElement).val(); } } - }).result(function(event, data, formatted) { - findAddressValues(data[1], blockNo); - cj(postcodeElement).val(''); - return false; - }); + }).result(function(event, data, formatted) { + findAddressValues(data[1], blockNo); + cj(postcodeElement).val(''); + return false; + }); - {/literal}{else}{literal} + {/literal}{else}{literal} - cj(postcodeElement).autocomplete({ + cj(postcodeElement).autocomplete({ source: sourceUrl, minLength: minCharacters, delay: delay, @@ -106,94 +106,94 @@ cj(document).ready(function() { //optional (if other layers overlap autocomplete list) open: function(event, ui) { - cj(".ui-autocomplete").css("z-index", 1000); + cj(".ui-autocomplete").css("z-index", 1000); } - }); + }); - {/literal}{/if}{literal} + {/literal}{/if}{literal} + }); }); -}); -function addslashes (str) { + function addslashes (str) { return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0'); -} - -function findAddressValues(id , blockNo) { - cj('#loaderimage_'+blockNo).show(); - setAddressFields(false, blockNo); - var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/get', {"json": 1}); - cj.ajax({ - dataType: 'json', - data: {id: id}, - url: sourceUrl, - success: function (data) { - setAddressFields(data.address, blockNo); - setAddressFields(true, blockNo); - }, - complete: function (data) { - cj('#loaderimage_'+blockNo).hide(); + } + + function findAddressValues(id , blockNo) { + cj('#loaderimage_'+blockNo).show(); + setAddressFields(false, blockNo); + var sourceUrl = CRM.url('civicrm/{/literal}{$civiPostCodeLookupProvider}{literal}/ajax/get', {"json": 1}); + cj.ajax({ + dataType: 'json', + data: {id: id}, + url: sourceUrl, + success: function (data) { + setAddressFields(data.address, blockNo); + setAddressFields(true, blockNo); + }, + complete: function (data) { + cj('#loaderimage_'+blockNo).hide(); + } + }); + } + + function setAddressFields(address, blockNo) { + var postcodeElement = '#address_'+ blockNo +'_postal_code'; + var streetAddressElement = '#address_'+ blockNo +'_street_address'; + var AddstreetAddressElement = '#address_'+ blockNo +'_supplemental_address_1'; + var AddstreetAddressElement1 = '#address_'+ blockNo +'_supplemental_address_2'; + var cityElement = '#address_'+ blockNo +'_city'; + var countyElement = '#address_'+ blockNo +'_state_province_id'; + + var allFields = { + postcode: postcodeElement, + line1: streetAddressElement, + line2: AddstreetAddressElement, + line3: AddstreetAddressElement1, + city: cityElement + }; + + if(address == true) { + for(var field in allFields) { + cj(allFields[field]).removeAttr('disabled'); + } } - }); -} - -function setAddressFields(address, blockNo) { - var postcodeElement = '#address_'+ blockNo +'_postal_code'; - var streetAddressElement = '#address_'+ blockNo +'_street_address'; - var AddstreetAddressElement = '#address_'+ blockNo +'_supplemental_address_1'; - var AddstreetAddressElement1 = '#address_'+ blockNo +'_supplemental_address_2'; - var cityElement = '#address_'+ blockNo +'_city'; - var countyElement = '#address_'+ blockNo +'_state_province_id'; - - var allFields = { - postcode: postcodeElement, - line1: streetAddressElement, - line2: AddstreetAddressElement, - line3: AddstreetAddressElement1, - city: cityElement - }; - - if(address == true) { - for(var field in allFields) { - cj(allFields[field]).removeAttr('disabled'); - } - } - else if(address == false) { - for(var field in allFields) { - cj(allFields[field]).attr('disabled', 'disabled'); - } - } - else { - cj(streetAddressElement).val(''); - cj(AddstreetAddressElement).val(''); - cj(AddstreetAddressElement1).val(''); - cj(cityElement).val(''); - cj(postcodeElement).val(''); - cj(countyElement).val(''); - - cj(streetAddressElement).val(address.street_address); - cj(AddstreetAddressElement).val(address.supplemental_address_1); - cj(AddstreetAddressElement1).val(address.supplemental_address_2); - cj(cityElement).val(address.town); - cj(postcodeElement).val(address.postcode); - if(typeof(address.state_province_id) != "undefined" && address.state_province_id !== null) { - cj(countyElement).val(address.state_province_id); - } - cj(countyElement).trigger("change"); - } -} + else if(address == false) { + for(var field in allFields) { + cj(allFields[field]).attr('disabled', 'disabled'); + } + } + else { + cj(streetAddressElement).val(''); + cj(AddstreetAddressElement).val(''); + cj(AddstreetAddressElement1).val(''); + cj(cityElement).val(''); + cj(postcodeElement).val(''); + cj(countyElement).val(''); + + cj(streetAddressElement).val(address.street_address); + cj(AddstreetAddressElement).val(address.supplemental_address_1); + cj(AddstreetAddressElement1).val(address.supplemental_address_2); + cj(cityElement).val(address.town); + cj(postcodeElement).val(address.postcode); + if(typeof(address.state_province_id) != "undefined" && address.state_province_id !== null) { + cj(countyElement).val(address.state_province_id); + } + cj(countyElement).trigger("change"); + } + } </script> {/literal} {if !empty($form.address.$blockId.street_address)} - <tr id="streetAddress_{$blockId}"> + <tr id="streetAddress_{$blockId}"> <td colspan="2"> {$form.address.$blockId.street_address.label} {help id="id-street-address" file="CRM/Contact/Form/Contact.hlp"}<br /> {$form.address.$blockId.street_address.html} {if $parseStreetAddress eq 1 && ($action eq 1 || $action eq 2)} - <a href="#" title="{ts}Edit Address Elements{/ts}" onClick="processAddressFields( 'addressElements' , '{$blockId}', 1 );return false;">{ts}Edit Address Elements{/ts}</a> - {help id="id-edit-street-elements" file="CRM/Contact/Form/Contact.hlp"} + <a href="#" title="{ts}Edit Address Elements{/ts}" onClick="processAddressFields( 'addressElements' , '{$blockId}', 1 );return false;">{ts}Edit Address Elements{/ts}</a> + {help id="id-edit-street-elements" file="CRM/Contact/Form/Contact.hlp"} {/if} </td> </tr> @@ -201,13 +201,13 @@ function setAddressFields(address, blockNo) { {if $parseStreetAddress eq 1 && ($action eq 1 || $action eq 2)} <tr id="addressElements_{$blockId}" class=hiddenElement> <td> - {$form.address.$blockId.street_number.label}<br /> - {$form.address.$blockId.street_number.html} - </td> + {$form.address.$blockId.street_number.label}<br /> + {$form.address.$blockId.street_number.html} + </td> <td> - {$form.address.$blockId.street_name.label}<br /> - {$form.address.$blockId.street_name.html}<br /> + {$form.address.$blockId.street_name.label}<br /> + {$form.address.$blockId.street_name.html}<br /> </td> <td colspan="2"> @@ -219,51 +219,51 @@ function setAddressFields(address, blockNo) { </tr> {/if} -{if $parseStreetAddress eq 1} -{literal} -<script type="text/javascript"> -function processAddressFields( name, blockId, loadData ) { - - if ( loadData ) { - var allAddressValues = {/literal}{if $allAddressFieldValues}{$allAddressFieldValues}{else}''{/if}{literal}; - - var streetName = eval( "allAddressValues.street_name_" + blockId ); - if (streetName === null) streetName = ''; - var streetUnit = eval( "allAddressValues.street_unit_" + blockId ); - if (streetUnit === null) streetUnit = ''; - var streetNumber = eval( "allAddressValues.street_number_" + blockId ); - if (streetNumber === null) streetNumber = ''; - var streetAddress = eval( "allAddressValues.street_address_" + blockId ); - if (streetAddress === null) streetAddress = ''; - } + {if $parseStreetAddress eq 1} + {literal} + <script type="text/javascript"> + function processAddressFields( name, blockId, loadData ) { + + if ( loadData ) { + var allAddressValues = {/literal}{if $allAddressFieldValues}{$allAddressFieldValues}{else}''{/if}{literal}; + + var streetName = eval( "allAddressValues.street_name_" + blockId ); + if (streetName === null) streetName = ''; + var streetUnit = eval( "allAddressValues.street_unit_" + blockId ); + if (streetUnit === null) streetUnit = ''; + var streetNumber = eval( "allAddressValues.street_number_" + blockId ); + if (streetNumber === null) streetNumber = ''; + var streetAddress = eval( "allAddressValues.street_address_" + blockId ); + if (streetAddress === null) streetAddress = ''; + } if ( name == 'addressElements' ) { - if ( loadData ) { + if ( loadData ) { streetAddress = ''; - } + } - cj('#addressElements_' + blockId).show(); - cj('#streetAddress_' + blockId).hide(); - } else { - if ( loadData ) { - streetNumber = streetName = streetUnit = ''; - } + cj('#addressElements_' + blockId).show(); + cj('#streetAddress_' + blockId).hide(); + } else { + if ( loadData ) { + streetNumber = streetName = streetUnit = ''; + } - cj('#streetAddress_' + blockId).show(); - cj('#addressElements_'+ blockId).hide(); - } + cj('#streetAddress_' + blockId).show(); + cj('#addressElements_'+ blockId).hide(); + } - // set the values. - if ( loadData ) { + // set the values. + if ( loadData ) { cj( '#address_' + blockId +'_street_name' ).val( streetName ); cj( '#address_' + blockId +'_street_unit' ).val( streetUnit ); cj( '#address_' + blockId +'_street_number' ).val( streetNumber ); cj( '#address_' + blockId +'_street_address' ).val( streetAddress ); - } -} + } + } -</script> -{/literal} -{/if} + </script> + {/literal} + {/if} {/if} -- GitLab