oont-contents/plugins/google-listings-and-ads/src/MerchantCenter/ContactInformation.php
2025-02-08 15:10:23 +01:00

87 lines
2.8 KiB
PHP

<?php
namespace Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter;
use Automattic\WooCommerce\GoogleListingsAndAds\API\Google\Merchant;
use Automattic\WooCommerce\GoogleListingsAndAds\API\Google\Settings;
use Automattic\WooCommerce\GoogleListingsAndAds\Exception\ExceptionWithResponseData;
use Automattic\WooCommerce\GoogleListingsAndAds\Infrastructure\Service;
use Automattic\WooCommerce\GoogleListingsAndAds\Vendor\Google\Service\ShoppingContent\AccountBusinessInformation;
/**
* Class ContactInformation.
*
* @since 1.4.0
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter
*/
class ContactInformation implements Service {
/**
* @var Merchant
*/
protected $merchant;
/**
* @var Settings
*/
protected $settings;
/**
* ContactInformation constructor.
*
* @param Merchant $merchant
* @param Settings $settings
*/
public function __construct( Merchant $merchant, Settings $settings ) {
$this->merchant = $merchant;
$this->settings = $settings;
}
/**
* Get the contact information for the connected Merchant Center account.
*
* @return AccountBusinessInformation|null The contact information associated with the Merchant Center account or
* null.
*
* @throws ExceptionWithResponseData If the Merchant Center account can't be retrieved.
*/
public function get_contact_information(): ?AccountBusinessInformation {
$business_information = $this->merchant->get_account()->getBusinessInformation();
return $business_information ?: null;
}
/**
* Update the address for the connected Merchant Center account to the store address set in WooCommerce
* settings.
*
* @return AccountBusinessInformation The contact information associated with the Merchant Center account.
*
* @throws ExceptionWithResponseData If the Merchant Center account can't be retrieved or updated.
*/
public function update_address_based_on_store_settings(): AccountBusinessInformation {
$business_information = $this->get_contact_information() ?: new AccountBusinessInformation();
$store_address = $this->settings->get_store_address();
$business_information->setAddress( $store_address );
$this->update_contact_information( $business_information );
return $business_information;
}
/**
* Update the contact information for the connected Merchant Center account.
*
* @param AccountBusinessInformation $business_information
*
* @throws ExceptionWithResponseData If the Merchant Center account can't be retrieved or updated.
*/
protected function update_contact_information( AccountBusinessInformation $business_information ): void {
$account = $this->merchant->get_account();
$account->setBusinessInformation( $business_information );
$this->merchant->update_account( $account );
}
}