From 915a7deef3c606260a93d01c63190757b042b46f Mon Sep 17 00:00:00 2001 From: Iwona Just Date: Wed, 14 Feb 2024 12:57:43 +0000 Subject: [PATCH 1/5] ensure parent fields are visible when displaying subdivion fields --- src/helpers/Cp.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/helpers/Cp.php b/src/helpers/Cp.php index 69825f26562..79979b7a8b5 100644 --- a/src/helpers/Cp.php +++ b/src/helpers/Cp.php @@ -2082,7 +2082,10 @@ public static function addressFieldsHtml(Address $address): string $belongsToCurrentUser ? 'address-level2' : 'off', isset($visibleFields['locality']), isset($requiredFields['locality']), - [$address->countryCode, $address->administrativeArea], + array_merge( + [$address->countryCode], + array_key_exists('administrativeArea', $visibleFields) ? [$address->administrativeArea] : [], + ), true, ) . self::_subdivisionField( @@ -2091,7 +2094,11 @@ public static function addressFieldsHtml(Address $address): string $belongsToCurrentUser ? 'address-level3' : 'off', isset($visibleFields['dependentLocality']), isset($requiredFields['dependentLocality']), - [$address->countryCode, $address->administrativeArea, $address->locality], + array_merge( + [$address->countryCode], + array_key_exists('administrativeArea', $visibleFields) ? [$address->administrativeArea] : [], + array_key_exists('locality', $visibleFields) ? [$address->locality] : [], + ), false, ) . static::textFieldHtml([ From 48b63621beb01093f95212d7ed097b74167d0a70 Mon Sep 17 00:00:00 2001 From: Iwona Just Date: Wed, 14 Feb 2024 12:58:17 +0000 Subject: [PATCH 2/5] use SubdivisionUpdater --- src/elements/Address.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/elements/Address.php b/src/elements/Address.php index 5bde3825611..7d5871fa3aa 100644 --- a/src/elements/Address.php +++ b/src/elements/Address.php @@ -4,6 +4,7 @@ use CommerceGuys\Addressing\AddressFormat\AddressField; use CommerceGuys\Addressing\AddressInterface; +use CommerceGuys\Addressing\Subdivision\SubdivisionUpdater; use Craft; use craft\base\Element; use craft\base\NameTrait; @@ -256,6 +257,24 @@ public function setAttributes($values, $safeOnly = true): void $this->fullName = null; } + // commerceguys/addressing 2.0.x - remap changed subdivision IDs + // update the subdivision ID to its ISO code where available + if (isset($values['countryCode'])) { + if (isset($values['administrativeArea'])) { + $values['administrativeArea'] = SubdivisionUpdater::updateValue( + $values['countryCode'], + $values['administrativeArea'] + ); + } + // Andorra is the only country with remapped localities. + if ($values['countryCode'] == 'AD' && isset($values['locality'])) { + $values['locality'] = SubdivisionUpdater::updateValue( + $values['countryCode'], + $values['locality'] + ); + } + } + parent::setAttributes($values, $safeOnly); } From 8741fc83c5ee0607825e0354ba14868430b2885e Mon Sep 17 00:00:00 2001 From: Iwona Just Date: Wed, 14 Feb 2024 13:14:30 +0000 Subject: [PATCH 3/5] do it on before save --- src/elements/Address.php | 44 ++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/src/elements/Address.php b/src/elements/Address.php index 7d5871fa3aa..3e33c913b97 100644 --- a/src/elements/Address.php +++ b/src/elements/Address.php @@ -257,24 +257,6 @@ public function setAttributes($values, $safeOnly = true): void $this->fullName = null; } - // commerceguys/addressing 2.0.x - remap changed subdivision IDs - // update the subdivision ID to its ISO code where available - if (isset($values['countryCode'])) { - if (isset($values['administrativeArea'])) { - $values['administrativeArea'] = SubdivisionUpdater::updateValue( - $values['countryCode'], - $values['administrativeArea'] - ); - } - // Andorra is the only country with remapped localities. - if ($values['countryCode'] == 'AD' && isset($values['locality'])) { - $values['locality'] = SubdivisionUpdater::updateValue( - $values['countryCode'], - $values['locality'] - ); - } - } - parent::setAttributes($values, $safeOnly); } @@ -602,6 +584,32 @@ protected function cacheTags(): array return $tags; } + /** + * @inheritdoc + */ + public function beforeSave(bool $isNew): bool + { + // commerceguys/addressing 2.0.x - remap changed subdivision IDs + // update the subdivision ID to its ISO code where available + if (isset($this->countryCode)) { + if (isset($this->administrativeArea)) { + $this->administrativeArea = SubdivisionUpdater::updateValue( + $this->countryCode, + $this->administrativeArea, + ); + } + // Andorra is the only country with remapped localities. + if ($this->countryCode == 'AD' && isset($this->locality)) { + $this->locality = SubdivisionUpdater::updateValue( + $this->countryCode, + $this->locality, + ); + } + } + + return parent::beforeSave($isNew); + } + /** * @inheritdoc * @throws InvalidConfigException From 64e921a4d8479bc6211c15306a8476c46750928d Mon Sep 17 00:00:00 2001 From: brandonkelly Date: Wed, 14 Feb 2024 08:25:18 -0800 Subject: [PATCH 4/5] Use array_filter() --- src/helpers/Cp.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/helpers/Cp.php b/src/helpers/Cp.php index 79979b7a8b5..768801b7af5 100644 --- a/src/helpers/Cp.php +++ b/src/helpers/Cp.php @@ -2082,10 +2082,10 @@ public static function addressFieldsHtml(Address $address): string $belongsToCurrentUser ? 'address-level2' : 'off', isset($visibleFields['locality']), isset($requiredFields['locality']), - array_merge( - [$address->countryCode], - array_key_exists('administrativeArea', $visibleFields) ? [$address->administrativeArea] : [], - ), + array_filter([ + $address->countryCode, + array_key_exists('administrativeArea', $visibleFields) ? $address->administrativeArea : null, + ]), true, ) . self::_subdivisionField( @@ -2094,11 +2094,11 @@ public static function addressFieldsHtml(Address $address): string $belongsToCurrentUser ? 'address-level3' : 'off', isset($visibleFields['dependentLocality']), isset($requiredFields['dependentLocality']), - array_merge( - [$address->countryCode], - array_key_exists('administrativeArea', $visibleFields) ? [$address->administrativeArea] : [], - array_key_exists('locality', $visibleFields) ? [$address->locality] : [], - ), + array_filter([ + $address->countryCode, + array_key_exists('administrativeArea', $visibleFields) ? $address->administrativeArea : null, + array_key_exists('locality', $visibleFields) ? $address->locality : null, + ]), false, ) . static::textFieldHtml([ From 570af4ecb557ae2f1271f3be76ba65006c2f659c Mon Sep 17 00:00:00 2001 From: brandonkelly Date: Wed, 14 Feb 2024 09:36:32 -0800 Subject: [PATCH 5/5] Fixed weird behavior --- src/helpers/Cp.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/helpers/Cp.php b/src/helpers/Cp.php index 768801b7af5..2f27c665b43 100644 --- a/src/helpers/Cp.php +++ b/src/helpers/Cp.php @@ -2082,10 +2082,10 @@ public static function addressFieldsHtml(Address $address): string $belongsToCurrentUser ? 'address-level2' : 'off', isset($visibleFields['locality']), isset($requiredFields['locality']), - array_filter([ + array_values(array_filter([ $address->countryCode, - array_key_exists('administrativeArea', $visibleFields) ? $address->administrativeArea : null, - ]), + array_key_exists('administrativeArea', $visibleFields) ? $address->administrativeArea : false, + ], fn($v) => $v !== false)), true, ) . self::_subdivisionField( @@ -2094,11 +2094,11 @@ public static function addressFieldsHtml(Address $address): string $belongsToCurrentUser ? 'address-level3' : 'off', isset($visibleFields['dependentLocality']), isset($requiredFields['dependentLocality']), - array_filter([ + array_values(array_filter([ $address->countryCode, - array_key_exists('administrativeArea', $visibleFields) ? $address->administrativeArea : null, - array_key_exists('locality', $visibleFields) ? $address->locality : null, - ]), + array_key_exists('administrativeArea', $visibleFields) ? $address->administrativeArea : false, + array_key_exists('locality', $visibleFields) ? $address->locality : false, + ], fn($v) => $v !== false)), false, ) . static::textFieldHtml([