google_tag-8.x-1.x-dev/src/Plugin/GoogleTag/Event/Commerce/AddToWishlistEvent.php
src/Plugin/GoogleTag/Event/Commerce/AddToWishlistEvent.php
<?php
declare(strict_types=1);
namespace Drupal\google_tag\Plugin\GoogleTag\Event\Commerce;
use Drupal\commerce_product\Entity\ProductVariationInterface;
use Drupal\commerce_store\CurrentStoreInterface;
use Drupal\commerce_wishlist\Entity\WishlistItemInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\google_tag\Plugin\GoogleTag\Event\EventBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Add to wish list event plugin.
*
* @GoogleTagEvent(
* id = "commerce_add_to_wishlist",
* event_name = "add_to_wishlist",
* label = @Translation("Add to wishlist"),
* description = @Translation("The event signifies that an item was added to a wishlist. Use this event to identify popular gift items in your app."),
* dependency = "commerce_wishlist",
* context_definitions = {
* "item" = @ContextDefinition("entity:commerce_wishlist_item")
* }
* )
*/
final class AddToWishlistEvent extends EventBase implements ContainerFactoryPluginInterface {
use CommerceEventTrait;
/**
* Current store.
*
* @var \Drupal\commerce_store\CurrentStoreInterface
*/
private CurrentStoreInterface $currentStore;
/**
* {@inheritDoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
$instance = new self($configuration, $plugin_id, $plugin_definition);
$instance->currentStore = $container->get('commerce_store.current_store');
return $instance;
}
/**
* {@inheritDoc}
*/
public function getData(): array {
// @todo leverage config for token replacement.
$wishlist_item = $this->getContextValue('item');
assert($wishlist_item instanceof WishlistItemInterface);
$item_data = [
'item_name' => $wishlist_item->label(),
'quantity' => (int) $wishlist_item->getQuantity(),
'affiliation' => $this->currentStore->getStore()->label(),
];
$purchased_entity = $wishlist_item->getPurchasableEntity();
if ($purchased_entity instanceof ProductVariationInterface) {
$item_data['item_id'] = $purchased_entity->getSku();
}
elseif ($purchased_entity !== NULL) {
$item_data['item_id'] = $purchased_entity->id();
}
return [
'currency' => $purchased_entity->getPrice()->getCurrencyCode(),
'value' => $this->formatPriceNumber($purchased_entity->getPrice()),
'items' => [
$item_data,
],
];
}
}
