<?php declare(strict_types=1);
namespace Shopsy\ShopsyKlaviyo\Subscriber;
use Frosh\ShareBasket\Services\ShareBasketServiceInterface;
use KlaviyoAPI\KlaviyoAPI;
use Shopsy\ShopsyKlaviyo\Service\DalService;
use Shopsy\ShopsyKlaviyo\Service\KlaviyoEventService;
use Shopware\Core\Checkout\Cart\Cart;
use Shopware\Core\Checkout\Cart\Event\AfterLineItemAddedEvent;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
use Shopware\Core\Checkout\Order\Aggregate\OrderCustomer\OrderCustomerEntity;
use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity;
use Shopware\Core\Checkout\Order\Event\OrderStateMachineStateChangeEvent;
use Shopware\Core\Checkout\Order\OrderDefinition;
use Shopware\Core\Checkout\Order\OrderEntity;
use Shopware\Core\Checkout\Order\OrderEvents;
use Shopware\Core\Content\Newsletter\NewsletterEvents;
use Shopware\Core\Content\Product\ProductEntity;
use Shopware\Core\Defaults;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Shopware\Core\Framework\Event\ShopwareSalesChannelEvent;
use Shopware\Core\Framework\Struct\ArrayEntity;
use Shopware\Core\System\SalesChannel\SalesChannelEntity;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Shopware\Storefront\Event\StorefrontRenderEvent;
use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoadedEvent;
use Shopware\Storefront\Page\Page;
use Shopware\Storefront\Page\Product\ProductPage;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class Subscriber implements EventSubscriberInterface
{
/**
* @var SystemConfigService
*/
private $systemConfigService;
/**
* @var RequestStack
*/
private $requestStack;
/**
* @var DalService $dalService
*/
private $dalService;
/**
* @var KlaviyoEventService $klaviyoEventService
*/
private $klaviyoEventService;
/**
* @var ShareBasketServiceInterface $shareBasketService
*/
private $shareBasketService;
public function __construct(
SystemConfigService $systemConfigService,
RequestStack $requestStack,
DalService $dalService,
KlaviyoEventService $klaviyoEventService,
$shareBasketService = null
) {
$this->systemConfigService = $systemConfigService;
$this->requestStack = $requestStack;
$this->dalService = $dalService;
$this->klaviyoEventService = $klaviyoEventService;
$this->shareBasketService = $shareBasketService;
}
public static function getSubscribedEvents(): array
{
return [
StorefrontRenderEvent::class => 'onStorefrontRender',
OrderEvents::ORDER_WRITTEN_EVENT => 'onOrderWritten',
CheckoutFinishPageLoadedEvent::class => 'onOrderPlaced',
NewsletterEvents::NEWSLETTER_RECIPIENT_WRITTEN_EVENT => 'onNewsletterWritten',
AfterLineItemAddedEvent::class => 'onAfterLineItemAdd',
'state_enter.order_transaction.state.paid' => 'onOrderStateChanged',
'state_enter.order_delivery.state.shipped' => 'onOrderStateChanged',
'state_enter.order_transaction.state.cancelled' => 'onOrderStateChanged',
'state_enter.order_transaction.state.refunded' => 'onOrderStateChanged'
];
}
/**
* @param EntityWrittenEvent $event
*/
public function onNewsletterWritten(EntityWrittenEvent $event)
{
$payload = $event->getWriteResults()[0]->getPayload();
if($payload['email'] == '') {
return;
}
$salesChannelId = $payload['salesChannelId'] ?? $event->getContext()->getSource()->getSalesChannelId();
if($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $salesChannelId) == '') {
return;
}
$klaviyo = new KlaviyoAPI($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $salesChannelId), 3, 2, [], 'ShopwareHostedSync/Shopsy/6');
if($klaviyo->api_key == '') {
return;
}
$salesChannel = $this->dalService->getSalesChannel($salesChannelId, $event->getContext());
$klaviyoListId = $this->getKlaviyoList($klaviyo, $salesChannel);
if($klaviyoListId == '') {
return;
}
//unsubscribe remove from newsletter list
if(isset($payload['status']) && $payload['status'] == 'optOut') {
$unsubscribeProfile = array(
'data' => array(
'type' => 'profile-subscription-bulk-delete-job',
'attributes' => array(
'profiles' => array(
'data' => [
array(
'type' => 'profile',
'attributes' => array(
'email' => $payload['email']
)
)
]
)
),
'relationships' => array(
'list' => array(
'data' => array(
'type' => 'list',
'id' => $klaviyoListId
)
)
)
)
);
try {
$klaviyo->Profiles->unsubscribeProfiles($unsubscribeProfile);
}catch (\Exception $ex) {}
}
else {
//check if email is already in list
$filter = 'any(email,["' . $payload['email']. '"])';
$newsletterProfile = $klaviyo->Lists->getListProfiles($klaviyoListId, null, null, $filter, null, 1);
if (count($newsletterProfile['data']) > 0 && isset($newsletterProfile[0]['id']) && $newsletterProfile[0]['id'] != '') {
return;
}
//subscribe add to newsletter list
$newsletterProfileBody = array(
'data' => array(
'type' => 'profile-subscription-bulk-create-job',
'attributes' => array(
'profiles' => array(
'data' => array(
array(
'type' => 'profile',
'attributes' => array(
'email' => $payload['email'],
'subscriptions' => array(
"email" => array(
'marketing' => array(
'consent' => 'SUBSCRIBED'
)
)
)
)
)
)
)
),
'relationships' => array(
'list' => array(
'data' => array(
'type' => 'list',
'id' => $klaviyoListId
)
)
)
)
);
try {
$klaviyo->Profiles->subscribeProfiles($newsletterProfileBody);
}catch (\Exception $ex) {}
}
}
/**
* @param StorefrontRenderEvent $event
* @return void
*/
public function onStorefrontRender(StorefrontRenderEvent $event): void
{
$shopId = $event->getSalesChannelContext()->getSalesChannel()->getId();
if($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoApiKey', $shopId) == ''
&& $this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $shopId) == '') {
return;
}
if(!isset($event->getParameters('page')['page'])) {
return;
}
$page = $event->getParameters('page')['page'];
$customer = $event->getSalesChannelContext()->getCustomer();
$controllerData = $this->getCurrentController();
if($controllerData[1] === 'Affiliate') {
return;
}
if($event->getRequest()->get('backInStockSuccess')) {
$page->assign([
'backInStockSuccess' => true
]);
}
if($page instanceof ProductPage) {
$page->assign([
'backInStock' => $this->systemConfigService->get('ShopsyKlaviyo6.config.backInStock', $shopId)
]);
}
$category = '';
if ($controllerData[1] == 'Product') {
$pageData = $event->getParameters('page');
if (is_array($pageData) && array_key_exists('page', $pageData)) {
$productPage = $pageData['page'];
if ($productPage instanceof ProductPage) {
$productEntity = $productPage->getProduct();
if ($productEntity && $productEntity instanceof ProductEntity) {
$category = $this->dalService->getCategory($productEntity->getCategoryTree(), $event->getContext());
}
}
}
}
if($controllerData[1] == 'Register' && $controllerData[2] == 'checkoutRegisterPage') {
$this->setKlaviyoCartItemExtension($event->getParameters()['page']->getCart(), $shopId, $event);
}
if(!$customer) {
if($page instanceof Page) {
$salesChannel = $this->dalService->getSalesChannel($event->getSalesChannelContext()->getSalesChannelId(), $event->getContext());
$page->assign([
'shopsyKlaviyo' => [
'apiKey' => $this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoApiKey', $shopId),
'cookieRequired' => $this->systemConfigService->get('ShopsyKlaviyo6.config.cookieRequired', $shopId),
'trackingMethod' => $this->systemConfigService->get('ShopsyKlaviyo6.config.trackingMethod', $shopId),
'category' => $category,
'salesChannel' => $salesChannel->getName()
]
]);
}
return;
}
$customer->setGroup($event->getSalesChannelContext()->getCurrentCustomerGroup());
if($customer->getBirthday() == '') {
$customerBirthday = null;
}
else {
$customerBirthday = $customer->getBirthday()->format("m/d/Y");
}
if($customer->getNewsletter() == '') {
$newsletter = 0;
}
else {
$newsletter = 1;
}
$checkOutURL = '';
if($controllerData[1] == 'Product' && $controllerData[2] == 'index'
&& $this->systemConfigService->get('ShopsyKlaviyo6.config.trackingMethod', $shopId) == 'serverSide' && !$event->getRequest()->get('backInStockSuccess')) {
if (isset($event->getParameters('page')['page'])) {
if(!method_exists($event->getParameters('page')['page'], 'getProduct')) {
return;
}
/** @var ProductEntity $product */
$product = $event->getParameters('page')['page']->getProduct();
if($product) {
$category = $this->dalService->getCategory($product->getCategoryTree(), $event->getContext());
}
$klaviyo = new KlaviyoAPI($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $shopId), 3, 2, [], 'ShopwareHostedSync/Shopsy/6');
if($klaviyo->api_key == '') {
return;
}
$this->klaviyoEventService->trackViewedProduct($klaviyo, $customer, $customerBirthday, $newsletter, $product, $category);
}
}
elseif($controllerData[1] == 'Checkout' && $controllerData[2] == 'confirmPage') {
$this->setKlaviyoCartItemExtension($event->getParameters()['page']->getCart(), $shopId, $event);
// Plugin "ShareBasket" from "Friends of Shopware" needed!
if($this->shareBasketService != null) {
$data = $this->shareBasketService->prepareLineItems($event->getSalesChannelContext());
$checkOutURL = $this->shareBasketService->saveCart($data, $event->getSalesChannelContext());
}
if($this->systemConfigService->get('ShopsyKlaviyo6.config.trackingMethod', $shopId) == 'serverSide') {
$klaviyo = new KlaviyoAPI($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $shopId), 3, 2, [], 'ShopwareHostedSync/Shopsy/6');
if($klaviyo->api_key == '') {
return;
}
$cart = $event->getParameters()['page']->getCart();
if($cart) {
$excludeTypes = explode(';', $this->systemConfigService->get('ShopsyKlaviyo6.config.excludeType', $shopId));
$this->klaviyoEventService->trackStartedCheckout($klaviyo, $customer, $customerBirthday, $newsletter, $cart, $excludeTypes, $event, $checkOutURL);
}
}
}
elseif($controllerData[1] == 'Checkout' && $controllerData[2] == 'finishPage') {
if (method_exists($event->getParameters('page')['page'], 'getOrder')) {
/** @var OrderEntity $order */
$order = $event->getParameters('page')['page']->getOrder();
$excludeTypes = explode(';', $this->systemConfigService->get('ShopsyKlaviyo6.config.excludeType', $shopId));
/** @var OrderLineItemEntity $lineItem */
foreach ($order->getLineItems() as $lineItem) {
if (!in_array($lineItem->getType(), $excludeTypes)) {
if(array_key_exists('categoryIds', $lineItem->getPayload())) {
$category = $this->dalService->getCategory($lineItem->getPayload()['categoryIds'], $event->getContext());
}
else {
$category = null;
}
$manufacturer = $this->dalService->getManufacturer($lineItem->getProductId(), $event->getContext());
$productUrl = $this->dalService->getProductUrl(
$lineItem->getProductId(),
$event->getSalesChannelContext()->getSalesChannel()->getDomains()->first()->getUrl()
);
$shopsyKlaviyoExtension = [
'category' => $category,
'manufacturer' => $manufacturer,
'productUrl' => $productUrl
];
$lineItem->addExtension('shopsyKlaviyo', new ArrayEntity($shopsyKlaviyoExtension));
}
}
}
}
$salesChannel = $this->dalService->getSalesChannel($event->getSalesChannelContext()->getSalesChannelId(), $event->getContext());
$page->assign([
'shopsyKlaviyo' => [
'apiKey' => $this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoApiKey', $shopId),
'cookieRequired' => $this->systemConfigService->get('ShopsyKlaviyo6.config.cookieRequired', $shopId),
'trackingMethod' => $this->systemConfigService->get('ShopsyKlaviyo6.config.trackingMethod', $shopId),
'birthday' => $customerBirthday,
'phoneNumber' => $customer->getActiveBillingAddress()->getPhoneNumber(),
'customerGroup' => $customer->getGroup()->getName(),
'newsletter' => $newsletter,
'category' => $category,
'salesChannel' => $salesChannel->getName(),
'checkOutURL' => $checkOutURL
]
]);
}
/**
* @param CheckoutFinishPageLoadedEvent $event
* @return void
*/
public function onOrderPlaced(CheckoutFinishPageLoadedEvent $event)
{
$order = $event->getPage()->getOrder();
$shopId = $event->getSalesChannelContext()->getSalesChannelId();
if ($this->systemConfigService->get('ShopsyKlaviyo6.config.trackingMethod', $shopId) == 'serverSide') {
$excludeTypes = explode(';', $this->systemConfigService->get('ShopsyKlaviyo6.config.excludeType', $shopId));
foreach ($order->getLineItems() as $lineItem) {
if (!in_array($lineItem->getType(), $excludeTypes)) {
if (array_key_exists('categoryIds', $lineItem->getPayload())) {
$category = $this->dalService->getCategory($lineItem->getPayload()['categoryIds'], $event->getContext());
} else {
$category = null;
}
$manufacturer = $this->dalService->getManufacturer($lineItem->getProductId(), $event->getContext());
$productUrl = $this->dalService->getProductUrl(
$lineItem->getProductId(),
''
);
$shopsyKlaviyoExtension = [
'category' => $category,
'manufacturer' => $manufacturer,
'productUrl' => $productUrl
];
$lineItem->addExtension('shopsyKlaviyo', new ArrayEntity($shopsyKlaviyoExtension));
}
}
$klaviyo = new KlaviyoAPI($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $shopId), 3, 2, [], 'ShopwareHostedSync/Shopsy/6');
if ($klaviyo->api_key == '') {
return;
}
if ($event->getPage()->getOrder()->getOrderCustomer()->getCustomer()->getBirthday() == '') {
$customerBirthday = null;
} else {
$customerBirthday = $event->getPage()->getOrder()->getOrderCustomer()->getCustomer()->getBirthday()->format("m/d/Y");
}
$this->klaviyoEventService->trackCheckoutCompleted($klaviyo, $event->getPage()->getOrder()->getOrderCustomer()->getCustomer(), $customerBirthday, $event->getPage()->getOrder()->getOrderCustomer()->getCustomer()->getNewsletter(), $order, $excludeTypes, $event);
}
}
/**
* @param EntityWrittenEvent $event
*/
public function onOrderWritten(EntityWrittenEvent $event): void
{
if ($event->getEntityName() !== OrderDefinition::ENTITY_NAME
|| $event->getWriteResults()[0]->getOperation() ==='update') {
return;
}
$versionId = $event->getWriteResults()[0]->getPayload()['versionId'];
if($versionId !== Defaults::LIVE_VERSION) {
return;
}
$shopId = $event->getWriteResults()[0]->getPayload()['salesChannelId'];
if($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoApiKey', $shopId) == ''
&& $this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $shopId) == '') {
return;
}
$klaviyo = new KlaviyoAPI($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $shopId), 3, 2, [], 'ShopwareHostedSync/Shopsy/6');
if($klaviyo->api_key == '') {
return;
}
/** @var OrderCustomerEntity $customer */
$customer = $this->dalService->getCustomer($event->getPayloads()[0]['id'], $event->getContext());
$lineItems = $this->dalService->getLineItems($event->getPayloads()[0]['id'], $event->getContext());
$excludeTypes = explode(';', $this->systemConfigService->get('ShopsyKlaviyo6.config.excludeType', $shopId));
/** @var OrderLineItemEntity $lineItem */
foreach ($lineItems as $lineItem) {
if(!in_array($lineItem->getType(), $excludeTypes)) {
$category = $this->dalService->getCategory($lineItem->getProduct()->getCategoryTree(), $event->getContext());
if ($this->systemConfigService->get('ShopsyKlaviyo6.config.trackOrderedProduct', $shopId)) {
$this->klaviyoEventService->trackOrderedProduct($klaviyo, $customer, $lineItem, $category,
$event->getContext(), $event);
}
}
}
if($this->systemConfigService->get('ShopsyKlaviyo6.config.trackPlacedOrder', $shopId)) {
$this->klaviyoEventService->trackPlacedOrder($klaviyo, $lineItems, $excludeTypes, $customer, $event->getContext(), $event, $this->systemConfigService->get('ShopsyKlaviyo6.config.trackPlacedOrderExtraData', $shopId));
}
}
/**
* @param OrderStateMachineStateChangeEvent $event
*/
public function onOrderStateChanged(OrderStateMachineStateChangeEvent $event): void
{
$context = $event->getContext();
$salesChannel = $event->getSalesChannelId();
if($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoApiKey', $salesChannel) == ''
&& $this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $salesChannel) == '') {
return;
}
$klaviyo = new KlaviyoAPI($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $salesChannel), 3, 2, [], 'ShopwareHostedSync/Shopsy/6');
if($klaviyo->api_key == '') {
return;
}
$order = $this->dalService->getOrder($event->getOrder()->getId());
$excludeTypes = explode(';', $this->systemConfigService->get('ShopsyKlaviyo6.config.excludeType', $salesChannel));
$orderCustomFields = $order->getCustomFields();
if($event->getName() == 'state_enter.order_delivery.state.shipped' && (!isset($orderCustomFields) || !isset($orderCustomFields['shopsy_klaviyo_tracked_fulfilled_order']) || $orderCustomFields['shopsy_klaviyo_tracked_fulfilled_order'] == 0)) {
if($this->systemConfigService->get('ShopsyKlaviyo6.config.trackFulfilledOrder', $salesChannel)) {
$this->klaviyoEventService->trackFulfilledOrder($klaviyo, $order, $excludeTypes, $context);
$this->dalService->setShopsyKlaviyoTrackedFulfilledOrder($order->getId());
}
}
if($event->getName() == 'state_enter.order_transaction.state.paid' && (!isset($orderCustomFields) || !isset($orderCustomFields['shopsy_klaviyo_tracked_purchased_items']) || $orderCustomFields['shopsy_klaviyo_tracked_purchased_items'] == 0)) {
if($this->systemConfigService->get('ShopsyKlaviyo6.config.trackPurchasedItems', $salesChannel)) {
$this->klaviyoEventService->trackPurchasedItems($klaviyo, $order, $excludeTypes, $context);
$this->dalService->setShopsyKlaviyoTrackPurchasedItemsOrder($order->getId());
}
}
if($event->getName() == 'state_enter.order_transaction.state.cancelled' && (!isset($orderCustomFields) || !isset($orderCustomFields['shopsy_klaviyo_tracked_cancelled_order']) || $orderCustomFields['shopsy_klaviyo_tracked_cancelled_order'] == 0)) {
if($this->systemConfigService->get('ShopsyKlaviyo6.config.trackCancelledOrder', $salesChannel)) {
$this->klaviyoEventService->trackCancelledOrder($klaviyo, $order, $excludeTypes, $context);
$this->dalService->setShopsyKlaviyoTrackedCancelledOrder($order->getId());
}
}
if($event->getName() == 'state_enter.order_transaction.state.refunded' && (!isset($orderCustomFields) || !isset($orderCustomFields['shopsy_klaviyo_tracked_refunded_order']) || $orderCustomFields['shopsy_klaviyo_tracked_refunded_order'] == 0)) {
if($this->systemConfigService->get('ShopsyKlaviyo6.config.trackRefundedOrder', $salesChannel)) {
$this->klaviyoEventService->trackRefundedOrder($klaviyo, $order, $excludeTypes, $context);
$this->dalService->setShopsyKlaviyoTrackedRefundedOrder($order->getId());
}
}
}
/**
* @param ShopwareSalesChannelEvent $event
* @return void
*/
public function onAfterLineItemAdd(ShopwareSalesChannelEvent $event)
{
$shopId = $event->getSalesChannelContext()->getSalesChannel()->getId();
if($this->systemConfigService->get('ShopsyKlaviyo6.config.trackingMethod', $shopId) == 'serverSide') {
$customer = $event->getSalesChannelContext()->getCustomer();
if(!$customer) {
return;
}
$customer->setGroup($event->getSalesChannelContext()->getCurrentCustomerGroup());
if ($event->getLineItems()[0]) {
$excludeTypes = explode(';', $this->systemConfigService->get('ShopsyKlaviyo6.config.excludeType', $shopId));
/** @var LineItem $lineItem */
$lineItem = $event->getLineItems()[0];
if(!in_array($lineItem->getType(), $excludeTypes) && $lineItem->getLabel() != '') {
$category = '';
if(isset($lineItem->getPayload()['categoryIds'])) {
$category = $this->dalService->getCategory($lineItem->getPayload()['categoryIds'], $event->getContext());
}
$klaviyo = new KlaviyoAPI($this->systemConfigService->get('ShopsyKlaviyo6.config.klaviyoPrivateApiKey', $shopId), 3, 2, [], 'ShopwareHostedSync/Shopsy/6');
if ($klaviyo->api_key == '') {
return;
}
$customer = $event->getSalesChannelContext()->getCustomer();
if($customer->getBirthday() == '') {
$customerBirthday = null;
}
else {
$customerBirthday = $customer->getBirthday()->format("m/d/Y");
}
if($customer->getNewsletter() == '') {
$newsletter = 0;
}
else {
$newsletter = 1;
}
$this->klaviyoEventService->trackAddedToCart($klaviyo, $customer, $customerBirthday, $newsletter, $lineItem, $category);
}
}
}
}
/**
* @return array|false
*/
private function getCurrentController()
{
$controllerData = [];
$currentRequest = $this->requestStack->getCurrentRequest();
$currentController = $currentRequest->attributes->get('_controller');
if(!$currentController) {
return false;
}
preg_match('/Controller\\\\(\w+)Controller::?(\w+)$/', $currentController, $controllerData);
return $controllerData;
}
/**
* @param $cart
* @param $shopId
* @param $event
*/
private function setKlaviyoCartItemExtension($cart, $shopId, $event) {
/** @var Cart $cart */
$excludeTypes = explode(';', $this->systemConfigService->get('ShopsyKlaviyo6.config.excludeType', $shopId));
/** @var LineItem $lineItem */
foreach ($cart->getLineItems() as $lineItem) {
if(!in_array($lineItem->getType(), $excludeTypes)) {
$category = $this->dalService->getCategory($lineItem->getPayloadValue('categoryIds'), $event->getContext());
$productUrl = $this->dalService->getProductUrl(
$lineItem->getId(),
$event->getSalesChannelContext()->getSalesChannel()->getDomains()->first()->getUrl()
);
$shopsyKlaviyoExtension = [
'category' => $category,
'productUrl' => $productUrl
];
$lineItem->addExtension('shopsyKlaviyo', new ArrayEntity($shopsyKlaviyoExtension));
}
}
}
/**
* @param KlaviyoAPI $klaviyo
* @param SalesChannelEntity $salesChannel
* @return mixed|string
*/
private function getKlaviyoList(KlaviyoAPI $klaviyo, SalesChannelEntity $salesChannel) {
//get klaviyo newsletter list depending on saleschannel name
$listName = 'Shopware_Newsletter_' . $salesChannel->getTranslated()['name'];
$filter = 'equals(name,"' . $listName . '")';
$klaviyoList = $klaviyo->Lists->getLists(null, null, $filter, 'tags', null);
if(count($klaviyoList['data']) > 0) {
$klaviyoListId = '';
if($klaviyoList['data'][0]['type'] == 'list' && $klaviyoList['data'][0]['attributes']['name'] == 'Shopware_Newsletter_' . $salesChannel->getTranslated()['name']) {
return $klaviyoList['data'][0]['id'];
}
//create new newsletterlist in Klaviyo
if($klaviyoListId == '') {
$newsletterList = array(
'data' => array(
'type' => 'list',
'attributes' => array(
'name' => 'Shopware_Newsletter_' . $salesChannel->getTranslated()['name']
)
)
);
$newKlaviyoList = $klaviyo->Lists->createList($newsletterList);
if(isset($newKlaviyoList['data']['id'])) {
return $newKlaviyoList['data']['id'];
}
}
}
else {
//create new newsletterlist in Klaviyo
$newsletterList = array(
'data' => array(
'type' => 'list',
'attributes' => array(
'name' => 'Shopware_Newsletter_' . $salesChannel->getTranslated()['name']
)
)
);
$newKlaviyoList = $klaviyo->Lists->createList($newsletterList);
if(isset($newKlaviyoList['data']['id'])) {
return $newKlaviyoList['data']['id'];
}
}
return '';
}
}