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, ] ); } }