<?php declare( strict_types=1 ); namespace Automattic\WooCommerce\GoogleListingsAndAds\Notes; use Automattic\WooCommerce\Admin\Notes\Note as NoteEntry; use Automattic\WooCommerce\GoogleListingsAndAds\Ads\AdsAwareTrait; use Automattic\WooCommerce\GoogleListingsAndAds\HelperTraits\Utilities; use Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter\MerchantCenterAwareInterface; use Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter\MerchantCenterAwareTrait; use Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter\MerchantStatuses; use Automattic\WooCommerce\GoogleListingsAndAds\PluginHelper; use Automattic\WooCommerce\GoogleListingsAndAds\Ads\AdsAwareInterface; use Automattic\WooCommerce\GoogleListingsAndAds\Value\ChannelVisibility; use Automattic\WooCommerce\GoogleListingsAndAds\Coupon\CouponMetaHandler; defined( 'ABSPATH' ) || exit; /** * Class SetupCouponSharing * * @package Automattic\WooCommerce\GoogleListingsAndAds\Notes */ class SetupCouponSharing extends AbstractNote implements MerchantCenterAwareInterface, AdsAwareInterface { use AdsAwareTrait; use MerchantCenterAwareTrait; use PluginHelper; use Utilities; /** @var MerchantStatuses */ protected $merchant_statuses; /** * SetupCouponSharing constructor. * * @param MerchantStatuses $merchant_statuses */ public function __construct( MerchantStatuses $merchant_statuses ) { $this->merchant_statuses = $merchant_statuses; } /** * Get the note's unique name. * * @return string */ public function get_name(): string { return 'gla-coupon-optin'; } /** * Get the note entry. */ public function get_entry(): NoteEntry { $note = new NoteEntry(); $note->set_title( __( 'Show your store coupons on your Google listings', 'google-listings-and-ads' ) ); $note->set_content( __( 'Sync your store promotions and coupons directly with Google to showcase on your product listings across the Google Shopping tab. <br/><br/>When creating a coupon, you’ll see a Channel Visibility settings box on the right; select "Show coupon on Google" to enable.', 'google-listings-and-ads' ) ); $note->set_content_data( (object) [] ); $note->set_type( NoteEntry::E_WC_ADMIN_NOTE_INFORMATIONAL ); $note->set_layout( 'plain' ); $note->set_image( '' ); $note->set_name( $this->get_name() ); $note->set_source( $this->get_slug() ); $note->add_action( 'coupon-views', __( 'Go to coupons', 'google-listings-and-ads' ), $this->get_coupons_url() ); return $note; } /** * Checks if a note can and should be added. We insert the notes only when all the conditions are satisfied: * 1. Store is in promotion supported country * 2. Store has at least one active product in Merchant Center * 3. Store has coupons created, but no coupons synced with Merchant Center * 4. Store has Ads account connected and has been setup for >3 days OR no Ads account and >17 days * * @return bool */ public function should_be_added(): bool { if ( $this->has_been_added() ) { return false; } if ( ! $this->merchant_center->is_promotion_supported_country() ) { return false; } // Check if there are synced products. $statuses = $this->merchant_statuses->get_product_statistics(); if ( $statuses['statistics']['active'] <= 0 ) { return false; } // Check if merchants have created coupons. $coupons = get_posts( [ 'post_type' => 'shop_coupon' ] ); $shared_coupons = get_posts( [ 'post_type' => 'shop_coupon', 'meta_key' => CouponMetaHandler::KEY_VISIBILITY, 'meta_value' => ChannelVisibility::SYNC_AND_SHOW, ] ); if ( empty( $coupons ) || ! empty( $shared_coupons ) ) { return false; } if ( $this->ads_service->is_setup_complete() ) { if ( ! $this->gla_setup_for( 3 * DAY_IN_SECONDS ) ) { return false; } } else { if ( ! $this->gla_setup_for( 17 * DAY_IN_SECONDS ) ) { return false; } } return true; } }