geno/wp-content/plugins/mailpoet/lib/WooCommerce/Tracker.php

71 lines
2.5 KiB
PHP
Raw Permalink Normal View History

2024-02-01 17:24:18 +05:30
<?php declare(strict_types = 1);
namespace MailPoet\WooCommerce;
if (!defined('ABSPATH')) exit;
use MailPoet\Entities\NewsletterOptionFieldEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Statistics\StatisticsWooCommercePurchasesRepository;
class Tracker {
/** @var StatisticsWooCommercePurchasesRepository */
private $wooPurchasesRepository;
/** @var LoggerFactory */
private $loggerFactory;
/** @var Helper */
private $wooHelper;
/** @var NewslettersRepository */
private $newslettersRepository;
public function __construct(
StatisticsWooCommercePurchasesRepository $wooPurchasesRepository,
NewslettersRepository $newslettersRepository,
Helper $wooHelper,
LoggerFactory $loggerFactory
) {
$this->wooPurchasesRepository = $wooPurchasesRepository;
$this->newslettersRepository = $newslettersRepository;
$this->wooHelper = $wooHelper;
$this->loggerFactory = $loggerFactory;
}
public function addTrackingData(array $data): array {
try {
$currency = $this->wooHelper->getWoocommerceCurrency();
$analyticsData = $this->newslettersRepository->getAnalytics();
$data['extensions']['mailpoet'] = [
'campaigns_count' => $analyticsData['campaigns_count'],
];
$campaignData = $this->formatCampaignsData($this->wooPurchasesRepository->getRevenuesByCampaigns($currency));
$data['extensions']['mailpoet'] = array_merge($data['extensions']['mailpoet'], $campaignData);
} catch (\Throwable $e) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_TRACKING)->error($e->getMessage());
return $data;
}
return $data;
}
/**
* @param array<int, array{revenue: float, campaign_id: string, campaign_type: string, orders_count: int}> $campaignsData
* @return array<string, string|int|float>
*/
private function formatCampaignsData(array $campaignsData): array {
return array_reduce($campaignsData, function($result, array $campaign): array {
$newsletter = $this->newslettersRepository->findOneById((int)$campaign['campaign_id']);
$keyPrefix = 'campaign_' . $campaign['campaign_id'];
$result[$keyPrefix . '_revenue'] = $campaign['revenue'];
$result[$keyPrefix . '_orders_count'] = $campaign['orders_count'];
$result[$keyPrefix . '_type'] = $campaign['campaign_type'];
$result[$keyPrefix . '_event'] = $newsletter ? (string)$newsletter->getOptionValue(NewsletterOptionFieldEntity::NAME_EVENT) : '';
return $result;
}, []);
}
}