<?php
declare( strict_types=1 );
namespace Automattic\WooCommerce\GoogleListingsAndAds\Notes;
use Automattic\WooCommerce\Admin\Notes\Note as NoteEntry;
use Automattic\WooCommerce\GoogleListingsAndAds\API\Google\MerchantMetrics;
use Automattic\WooCommerce\GoogleListingsAndAds\HelperTraits\Utilities;
use Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter\MerchantCenterAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter\MerchantCenterAwareTrait;
use Automattic\WooCommerce\GoogleListingsAndAds\PluginHelper;
use Automattic\WooCommerce\GoogleListingsAndAds\Proxies\WP;
use Exception;
defined( 'ABSPATH' ) || exit;
/**
* Class ReviewAfterConversions
*
* Note for requesting a review after at 10+ ad conversions.
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\Notes
*/
class ReviewAfterConversions extends AbstractNote implements MerchantCenterAwareInterface {
use LeaveReviewActionTrait;
use MerchantCenterAwareTrait;
use PluginHelper;
use Utilities;
/**
* @var MerchantMetrics
*/
protected $merchant_metrics;
/**
* @var WP
*/
protected $wp;
/**
* ReviewAfterConversions constructor.
*
* @param MerchantMetrics $merchant_metrics
* @param WP $wp
*/
public function __construct( MerchantMetrics $merchant_metrics, WP $wp ) {
$this->merchant_metrics = $merchant_metrics;
$this->wp = $wp;
}
/**
* Get the note's unique name.
*
* @return string
*/
public function get_name(): string {
return 'gla-review-after-conversions';
}
/**
* Get ads conversions count.
*
* @return int
*
* @throws Exception When unable to get data.
*/
protected function get_ads_conversions_count(): int {
$metrics = $this->merchant_metrics->get_cached_ads_metrics();
return empty( $metrics ) ? 0 : (int) $metrics['conversions'];
}
/**
* Get the note entry.
*
* @throws Exception When unable to get data.
*/
public function get_entry(): NoteEntry {
// Round to nearest 10
$conversions_count_rounded = floor( $this->get_ads_conversions_count() / 10 ) * 10;
$note = new NoteEntry();
$note->set_title(
sprintf(
/* translators: %s number of conversions */
__( 'You’ve gotten %s+ conversions through Google Ads! 🎉', 'google-listings-and-ads' ),
$this->wp->number_format_i18n( $conversions_count_rounded )
)
);
$note->set_content(
__( 'Congratulations! Tell us what you think about Google Listings & Ads by leaving a review. Your feedback will help us make WooCommerce even better for you.', 'google-listings-and-ads' )
);
$note->set_content_data( (object) [] );
$note->set_type( NoteEntry::E_WC_ADMIN_NOTE_INFORMATIONAL );
$note->set_name( $this->get_name() );
$note->set_source( $this->get_slug() );
$this->add_leave_review_note_action( $note );
return $note;
}
/**
* Checks if a note can and should be added.
*
* - checks there are more than 10 ad conversions
*
* @throws Exception When unable to get data.
*
* @return bool
*/
public function should_be_added(): bool {
if ( $this->has_been_added() ) {
return false;
}
if ( $this->get_ads_conversions_count() <= 10 ) {
return false;
}
return true;
}
}