Files
stemcell/app/code/Stemcell/ChineseDirectory/Plugin/ShippingAddress/ExtensionAttribute.php
T
2026-09-15 10:26:34 +08:00

66 lines
2.2 KiB
PHP

<?php
namespace Stemcell\ChineseDirectory\Plugin\ShippingAddress;
use Magento\Framework\App\ObjectManager;
use Magento\Quote\Model\Quote;
use Psr\Log\LoggerInterface;
use Magento\Framework\DataObject\Copy\Config;
use \Magento\Quote\Api\Data\AddressInterface;
class ExtensionAttribute
{
/**
* @var Config
*/
protected Config $fieldsetConfig;
public function __construct(
Config $config
) {
$this->fieldsetConfig = $config;
}
public function afterGetShippingAddress(Quote $quote, Quote\Address $result) {
/* @var $logger LoggerInterface */
$logger = ObjectManager::getInstance()->get(LoggerInterface::class);
$aspect = 'to_customer_address';
$fields = $this->fieldsetConfig->getFieldset('sales_convert_quote_address');
$extensionAttributes = $result->getExtensionAttributes();
foreach ($fields as $code => $node) {
if (empty($node[$aspect])) {
continue;
}
$method = 'set' . str_replace('_', '', ucwords($code, '_'));
if (method_exists($extensionAttributes, $method) && $result->getData($code)) {
$extensionAttributes->$method($result->getData($code));
$result->setCustomAttribute($code, $result->getData($code));
}
}
return $result;
}
public function beforeSetShippingAddress(Quote $quote, AddressInterface $address) {
$aspect = 'to_customer_address';
$fields = $this->fieldsetConfig->getFieldset('sales_convert_quote_address');
$extensionAttributes = $address->getExtensionAttributes();
$shippingAddress = $quote->getAddressesCollection()->getItemById($address->getId())
?? $quote->getShippingAddress();
foreach ($fields as $code => $node) {
if (empty($node[$aspect])) {
continue;
}
$method = 'get' . str_replace('_', '', ucwords($code, '_'));
if (method_exists($extensionAttributes, $method) && $extensionAttributes->$method()) {
$shippingAddress->addData([ $code => $extensionAttributes->$method()]);
}
}
return [$address];
}
}