oont-contents/plugins/mailpoet/lib/Cron/Workers/Automations/AbandonedCartWorker.php
2025-02-10 13:57:45 +01:00

71 lines
1.8 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Cron\Workers\Automations;
if (!defined('ABSPATH')) exit;
use MailPoet\Automation\Engine\Data\Automation;
use MailPoet\Automation\Engine\Storage\AutomationStorage;
use MailPoet\Cron\Workers\SimpleWorker;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\WP\Functions as WPFunctions;
class AbandonedCartWorker extends SimpleWorker {
const TASK_TYPE = 'automation_abandoned_cart';
const ACTION = 'abandoned_cart';
const AUTOMATIC_SCHEDULING = false;
const BATCH_SIZE = 1000;
private AutomationStorage $automationStorage;
private WPFunctions $wp;
public function __construct(
AutomationStorage $automationStorage,
WPFunctions $wp
) {
parent::__construct();
$this->automationStorage = $automationStorage;
$this->wp = $wp;
}
public function checkProcessingRequirements() {
return true;
}
public function processTaskStrategy(ScheduledTaskEntity $task, $timer) {
$productIds = $task->getMeta()['product_ids'] ?? [];
$automationId = $task->getMeta()['automation_id'] ?? 0;
$automationVersion = $task->getMeta()['automation_version'] ?? 0;
if (!$productIds || !$automationId || !$automationVersion) {
return true;
}
$lastActivityAt = $task->getCreatedAt();
$subscribers = $task->getSubscribers();
if ($subscribers->count() !== 1) {
return true;
}
$subscriber = isset($subscribers[0]) ? $subscribers[0]->getSubscriber() : null;
if (!$subscriber) {
return true;
}
$automation = $this->automationStorage->getAutomation((int)$automationId, (int)$automationVersion);
if (!$automation || $automation->getStatus() !== Automation::STATUS_ACTIVE) {
return true;
}
$this->wp->doAction(
self::ACTION,
$subscriber,
$productIds,
$lastActivityAt
);
return true;
}
}