automationTriggers['user']['woocommerce_order_change'] = acym_translation('ACYM_ON_WOOCOMMERCE_ORDER_CHANGE');
}
public function displayTriggerOptions_woocommerce_order_change(string $fieldName, array $defaultValues): void
{
$orderStatuses = $this->getOrderStatuses(true);
?>
'acym__select'],
'value',
'text',
null,
false,
true
); ?>
'acym__select'],
'value',
'text',
null,
false,
true
); ?>
triggers;
$from = false;
$to = false;
if (!empty($triggers['woocommerce_order_change']) && is_array($triggers['woocommerce_order_change'])) {
$fromStatus = 'wc-'.(isset($data['statusFrom']) ? $data['statusFrom'] : '');
$toStatus = 'wc-'.(isset($data['statusTo']) ? $data['statusTo'] : '');
if (isset($triggers['woocommerce_order_change']['from']) && ($fromStatus === $triggers['woocommerce_order_change']['from'] || $triggers['woocommerce_order_change']['from'] === '0')) {
$from = true;
}
if (isset($triggers['woocommerce_order_change']['to']) && ($toStatus === $triggers['woocommerce_order_change']['to'] || $triggers['woocommerce_order_change']['to'] === '0')) {
$to = true;
}
if ($from && $to) {
$execute = true;
}
}
}
public function onAcymDeclareSummary_triggers(object $automation): void
{
if (empty($automation->triggers['woocommerce_order_change']['from'])) {
return;
}
$orderStatuses = $this->getOrderStatuses(true);
$automation->triggers['woocommerce_order_change'] = acym_translationSprintf(
'ACYM_TRIGGER_WOOCOMMERCE_ORDER_CHANGE_SUMMARY',
$orderStatuses[$automation->triggers['woocommerce_order_change']['from']],
$orderStatuses[$automation->triggers['woocommerce_order_change']['to']]
);
}
public function onWooCommerceOrderStatusChange($orderId, $statusFrom, $statusTo, $order)
{
$userClass = new UserClass();
$wpUserId = $order->get_user_id();
if (!empty($wpUserId)) $acyUser = $userClass->getOneByCMSId($wpUserId);
if (empty($acyUser)) {
$billingEmail = $order->get_billing_email();
if (!empty($billingEmail)) {
$acyUser = $userClass->getOneByEmail($billingEmail);
}
}
if (empty($acyUser)) return;
$items = $order->get_items();
$productIds = [];
$categoriesIds = [];
foreach ($items as $item) {
$productIds[] = $item->get_product_id();
$variationId = $item->get_variation_id();
if (!empty($variationId)) {
$productIds[] = $variationId;
}
$terms = get_the_terms($item->get_product_id(), 'product_cat');
if (!empty($terms)) {
foreach ($terms as $term) {
if (!in_array($term->term_id, $categoriesIds)) {
$categoriesIds[] = $term->term_id;
}
}
}
}
$params = [
'woo_order_status' => $statusTo,
'woo_order_product_ids' => $productIds,
'woo_order_cat_ids' => $categoriesIds,
'woo_order_id' => $order->get_id(),
];
$followupClass = new FollowupClass();
$followupClass->addFollowupEmailsQueue($this->purchaseTriggerName, $acyUser->id, $params);
$automationClass = new AutomationClass();
$automationClass->trigger(
'woocommerce_order_change',
[
'userId' => $acyUser->id,
'statusFrom' => $statusFrom,
'statusTo' => $statusTo,
]
);
$scenarioHelper = new ScenarioHelper();
$scenarioHelper->trigger(
'woocommerce_order_change',
[
'userId' => $acyUser->id,
'statusFrom' => $statusFrom,
'statusTo' => $statusTo,
]
);
}
}