@ecartz @burt
Thanks Guys
I changed the line as suggested by ecartz and that worked great and the second address line saved to the database.
Gary, your file was very helpful and also the suggestion of changing the $streets. I added $cr$second_streets after $streets in each field in the address_format table.
I also had to add the second address line to includes/modules/customer_data/cd_traditional_address.php
Code: Select all
<?php
/*
$Id$
CE Phoenix, E-Commerce made Easy
https://phoenixcart.org
Copyright (c) 2021 Phoenix Cart
Released under the GNU General Public License
*/
class cd_traditional_address extends abstract_module {
const CONFIG_KEY_BASE = 'MODULE_CUSTOMER_DATA_TRADITIONAL_ADDRESS_';
const PROVIDES = [ 'address' ];
const REQUIRES = [ 'name', 'street_address', 'second_street_address', 'postcode', 'city', 'country' ];
const FIELDS = [ 'name', 'street_address', 'second_street_address', 'postcode', 'city', 'country_id', 'company', 'suburb', 'state' ];
private $active_fields;
protected function get_parameters() {
return [
static::CONFIG_KEY_BASE . 'STATUS' => [
'title' => 'Enable Traditional Address module',
'value' => 'True',
'desc' => 'Do you want to add the module to your shop?',
'set_func' => "Config::select_one(['True', 'False'], ",
],
];
}
public function get($field, &$customer_details) {
switch ($field) {
case 'address':
if (!isset($customer_details[$field])) {
$customer_details[$field] = array_combine(
$this->get_fields(),
array_map(
function ($v) use (&$customer_details) {
return $GLOBALS['customer_data']->get($v, $customer_details);
},
$this->get_fields()
)
);
}
return $customer_details[$field];
}
}
public function process(&$customer_details) {
$results = $GLOBALS['customer_data']->process($this->get_fields());
$customer_details = array_merge($customer_details, $results);
return !empty($results);
}
public function get_fields() {
if (is_null($this->active_fields)) {
global $customer_data;
$customer_data->has(self::FIELDS);
$this->active_fields = array_diff(self::FIELDS, $customer_data->get_last_missing_abilities());
}
return $this->active_fields;
}
public function get_purveyors() {
return array_map([$GLOBALS['customer_data'], 'get_module'], $this->get_fields());
}
public function build_db_values(&$db_tables, $customer_details, $table = 'both') {
foreach ($this->get_purveyors() as $purveyor) {
$purveyor->build_db_values($db_tables, $customer_details, $table);
}
}
public function build_db_aliases(&$db_tables, $table = 'both') {
foreach ($this->get_purveyors() as $purveyor) {
$purveyor->build_db_aliases($db_tables, $table);
}
}
function format($address, $html, $boln, $eoln) {
$address_format_id = $address['format_id'] ?? $address['address_format_id'] ?? $this->get_address_format_id($address['country_id'] ?? $address['country']['id'] ?? null);
$address_format = $GLOBALS['db']->query("SELECT address_format AS format FROM address_format WHERE address_format_id = " . (int)$address_format_id)->fetch_assoc();
$company = htmlspecialchars($address['company'] ?? '');
$name = htmlspecialchars($GLOBALS['customer_data']->get('name', $address) ?? '');
$street = htmlspecialchars($address['street_address']);
$second_street = htmlspecialchars($address['second_street_address']);
$suburb = htmlspecialchars($address['suburb'] ?? '');
$city = htmlspecialchars($address['city']);
$state = htmlspecialchars($address['state'] ?? '');
if (!empty($address['country_id'])) {
$country = Country::fetch_name($address['country_id']);
if (!empty($address['zone_id'])) {
$state = Zone::fetch_code($address['zone_id'], $address['country_id'], $state);
}
} elseif (!empty($address['country']) && is_array($address['country'])) {
$country = htmlspecialchars($address['country']['title']);
} else {
$country = '';
}
$postcode = htmlspecialchars($address['postcode']);
$zip = $postcode;
if ($html) {
// HTML Mode
$HR = '<hr />';
$hr = '<hr />';
if ( ($boln == '') && ($eoln == "\n") ) { // Values not specified, use rational defaults
$CR = '<br>';
$cr = '<br>';
$eoln = $cr;
} else { // Use values supplied
$CR = $eoln . $boln;
$cr = $CR;
}
} else {
// Text Mode
$CR = $eoln;
$cr = $CR;
$HR = '----------------------------------------';
$hr = '----------------------------------------';
}
$statecomma = '';
$streets = $street;
$second_streets = $second_street;
if ('' != $suburb) {
$streets .= $cr . $suburb;
}
if ('' != $state) {
$statecomma = $state . ', ';
}
$fmt = $address_format['format'];
eval("\$address = \"$fmt\";");
if (!empty($company)) {
$address = $company . $cr . $address;
}
return $address;
}
function get_address_format_id($country_id) {
$address_format = $GLOBALS['db']->query("SELECT address_format_id AS format_id FROM countries WHERE countries_id = " . (int)$country_id)->fetch_assoc();
return $address_format['format_id'] ?? '1';
}
}
I have check in most areas on the store front and all seems ok.
I then unfortunately had to modify catalog/includes/system/segments/checkout/insert_order.php
and add
Code: Select all
'customers_second_street_address' => $GLOBALS['customer_data']->get('second_street_address', $order->customer),
'delivery_second_street_address' => $GLOBALS['customer_data']->get('second_street_address', $order->delivery),
'billing_second_street_address' => $GLOBALS['customer_data']->get('second_street_address', $order->billing),
I then added 3 new fields to correspond to the above changes to the orders table