woocommerce-subscriptions/includes/gifting/class-wcsg-recipient-addres...

92 lines
3.9 KiB
PHP

<?php
/**
* Address update handling.
*
* @package WooCommerce Subscriptions Gifting
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Allow for updating subscription addresses taking into consideration purchaser/recipient subscriptions.
*/
class WCSG_Recipient_Addresses {
/**
* Setup hooks & filters, when the class is initialised.
*/
public static function init() {
add_filter( 'wcs_get_users_subscriptions', __CLASS__ . '::get_users_subscriptions', 100, 2 );
add_filter( 'woocommerce_form_field_checkbox', __CLASS__ . '::display_update_all_addresses_notice', 1, 2 );
}
/**
* Returns the subset of user subscriptions which should be included when updating all subscription addresses.
* When setting shipping addresses only include those which the user has purchased for themselves or have been gifted to them.
* When setting billing addresses only include subscriptions that belong to the user and those they have gifted to another user.
*
* @param array $subscriptions Array of subscriptions.
* @param int $user_id User ID.
* @return array
*/
public static function get_users_subscriptions( $subscriptions, $user_id ) {
if ( ( 'shipping' === get_query_var( 'edit-address' ) || 'billing' === get_query_var( 'edit-address' ) ) && ! isset( $_GET['subscription'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
// We dont want to update the shipping address of subscriptions the user isn't the recipient of.
if ( 'shipping' === get_query_var( 'edit-address' ) ) {
foreach ( $subscriptions as $subscription_id => $subscription ) {
$recipient_user_id = WCS_Gifting::get_recipient_user( $subscription );
if ( ! empty( $recipient_user_id ) && $recipient_user_id != $user_id ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
unset( $subscriptions[ $subscription_id ] );
}
}
} elseif ( 'billing' === get_query_var( 'edit-address' ) ) {
// We dont want to update the billing address of gifted subscriptions for this user.
foreach ( $subscriptions as $subscription_id => $subscription ) {
$recipient_user_id = WCS_Gifting::get_recipient_user( $subscription );
if ( ! empty( $recipient_user_id ) && $recipient_user_id == $user_id ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
unset( $subscriptions[ $subscription_id ] );
}
}
}
}
return $subscriptions;
}
/**
* Appends a notice to the 'update all subscriptions addresses' checkbox notifing the customer that updating all
* subscription addresses will not update gifted subscriptions, depending on which address is being updated.
*
* @param string $field The generated html element field string.
* @param string $field_id The id attribute of the html element being generated.
*/
public static function display_update_all_addresses_notice( $field, $field_id ) {
if ( 'update_all_subscriptions_addresses' === $field_id && ( 'shipping' === get_query_var( 'edit-address' ) || 'billing' === get_query_var( 'edit-address' ) ) ) {
switch ( get_query_var( 'edit-address' ) ) {
case 'shipping':
// Translators: 1) <strong> opening tag, 2) </strong> closing tag.
$field = substr_replace( $field, '<small>' . sprintf( esc_html__( '%1$sNote:%2$s This will not update the shipping address of subscriptions you have purchased for others.', 'woocommerce-subscriptions' ), '<strong>', '</strong>' ) . '</small>', strpos( $field, '</p>' ), 0 );
break;
case 'billing':
// Translators: 1) <strong> opening tag, 2) </strong> closing tag.
$field = substr_replace( $field, '<small>' . sprintf( esc_html__( '%1$sNote:%2$s This will not update the billing address of subscriptions purchased for you by someone else.', 'woocommerce-subscriptions' ), '<strong>', '</strong>' ) . '</small>', strpos( $field, '</p>' ), 0 );
break;
}
}
return $field;
}
}