acym_translation('ACYM_WOOCOMMERCE_PURCHASE'), 'description' => acym_translation('ACYM_WOOCOMMERCE_FOLLOW_UP_DESC'), 'icon' => 'acymicon-cart-arrow-down', 'link' => acym_completeLink('campaigns&task=edit&step=followupCondition&trigger='.$this->purchaseTriggerName), 'level' => 2, 'alias' => $this->purchaseTriggerName, ]; } public function getFollowupTriggers(&$triggers) { $triggers[$this->purchaseTriggerName] = acym_translation('ACYM_WOOCOMMERCE_PURCHASE'); } public function getAcymAdditionalConditionFollowup(&$additionalCondition, $trigger, $followup, $statusArray) { if ($trigger !== $this->purchaseTriggerName) { return; } $multiselectOrderStatus = ''.acym_selectMultiple( $this->getOrderStatuses(), 'followup[condition][order_status]', !empty($followup->condition['order_status']) ? $followup->condition['order_status'] : [], ['class' => 'acym__select'] ).''; $statusOrderStatus = ''.acym_select( $statusArray, 'followup[condition][order_status_status]', !empty($followup->condition['order_status_status']) ? $followup->condition['order_status_status'] : '', ['class' => 'acym__select'] ).''; $additionalCondition['order_status'] = $this->followupConditionRow('ACYM_WOOCOMMERCE_ORDER_STATUS_IN', $statusOrderStatus, $multiselectOrderStatus); $multiselectProducts = ''.acym_selectMultiple( [], 'followup[condition][products]', !empty($followup->condition['products']) ? $followup->condition['products'] : [], [ 'class' => 'acym__select acym_select2_ajax', 'data-params' => [ 'plugin' => 'plgAcymWoocommerce', 'trigger' => 'searchProduct', 'variations' => true, ], 'data-selected' => !empty($followup->condition['products']) ? implode(',', $followup->condition['products']) : [], ] ).''; $statusProducts = ''.acym_select( $statusArray, 'followup[condition][products_status]', !empty($followup->condition['products_status']) ? $followup->condition['products_status'] : '', ['class' => 'acym__select'] ).''; $additionalCondition['products'] = $this->followupConditionRow('ACYM_WOOCOMMERCE_PRODUCT_IN', $statusProducts, $multiselectProducts); $multiselectCategories = ''.acym_selectMultiple( [], 'followup[condition][categories]', !empty($followup->condition['categories']) ? $followup->condition['categories'] : [], [ 'class' => 'acym__select acym_select2_ajax', 'data-params' => [ 'plugin' => 'plgAcymWoocommerce', 'trigger' => 'searchCat', ], 'data-selected' => !empty($followup->condition['categories']) ? implode(',', $followup->condition['categories']) : [], ] ).''; $statusCategories = ''.acym_select( $statusArray, 'followup[condition][categories_status]', !empty($followup->condition['categories_status']) ? $followup->condition['categories_status'] : '', ['class' => 'acym__select'] ).''; $additionalCondition['categories'] = $this->followupConditionRow('ACYM_WOOCOMMERCE_CATEGORY_IN', $statusCategories, $multiselectCategories); if ($this->wcsInstalled) { $orderTypes = $this->orderTypes; $selectedOrderType = empty($followup->condition['order_type']) ? '' : $followup->condition['order_type']; $additionalCondition['order_type'] = static function () use ($orderTypes, $selectedOrderType): void { echo esc_html(acym_translation('ACYM_ORDER_TYPE')); echo ''; acym_select( $orderTypes, 'followup[condition][order_type]', $selectedOrderType, ['class' => 'acym__select'], 'value', 'text', null, false, true ); echo ''; }; } } public function searchCat() { $ids = $this->getIdsSelectAjax(); if (!empty($ids)) { $cats = $this->getWooCategories($ids); $value = []; if (!empty($cats)) { foreach ($cats as $cat) { $value[] = ['text' => $cat->name, 'value' => $cat->term_id]; } } echo wp_json_encode($value); exit; } $search = acym_getVar('string', 'search', ''); $categories = []; if (!empty($search)) { $cats = $this->getWooCategories([], $search); foreach ($cats as $oneCat) { $categories[] = [$oneCat->term_id, $oneCat->name]; } } echo wp_json_encode($categories); exit; } public function matchFollowupsConditions(&$followups, $userId, $params) { foreach ($followups as $key => $followup) { if ($followup->trigger != $this->purchaseTriggerName) { continue; } //We check the order status if (!empty($followup->condition['order_status_status']) && !empty($followup->condition['order_status'])) { $status = $followup->condition['order_status_status'] === 'is'; $inArray = in_array('wc-'.$params['woo_order_status'], $followup->condition['order_status']); if ($status !== $inArray) { unset($followups[$key]); continue; } } //We check the products if (!empty($followup->condition['products_status']) && !empty($followup->condition['products'])) { $status = $followup->condition['products_status'] === 'is'; $inArray = false; foreach ($params['woo_order_product_ids'] as $product_id) { if (in_array($product_id, $followup->condition['products'])) { $inArray = true; break; } } if ($status !== $inArray) { unset($followups[$key]); continue; } } //We check the categories if (!empty($followup->condition['categories_status']) && !empty($followup->condition['categories'])) { $status = $followup->condition['categories_status'] === 'is'; $inArray = false; foreach ($params['woo_order_cat_ids'] as $cat_id) { if (in_array($cat_id, $followup->condition['categories'])) { $inArray = true; break; } } if ($status !== $inArray) { unset($followups[$key]); continue; } } if (!empty($followup->condition['order_type'])) { $order = wc_get_order($params['woo_order_id']); if (in_array($followup->condition['order_type'], ['original', 'regular'])) { if ($order->get_meta('_subscription_renewal') || $order->get_meta('_subscription_switch')) { unset($followups[$key]); } elseif ($followup->condition['order_type'] === 'regular' && !empty($order->get_parent_id())) { unset($followups[$key]); } } elseif ($followup->condition['order_type'] === 'parent') { if (!empty($order->get_parent_id())) { unset($followups[$key]); } } else { if ($followup->condition['order_type'] === 'renewal') { $metaKey = '_subscription_renewal'; } elseif ($followup->condition['order_type'] === 'resubscribe') { $metaKey = '_subscription_resubscribe'; } else { $metaKey = '_subscription_switch'; } $metaKey = apply_filters('woocommerce_subscriptions_admin_order_type_filter_meta_key', $metaKey, $followup->condition['order_type']); if (empty($order->get_meta($metaKey))) { unset($followups[$key]); } } } } } public function getFollowupConditionSummary(&$return, $condition, $trigger, $statusArray) { if ($trigger !== $this->purchaseTriggerName) { return; } if (empty($condition['order_status_status']) || empty($condition['order_status'])) { $return[] = acym_translation('ACYM_EVERY_ORDER_STATUS'); } else { $woocommerceOrderStatus = $this->getOrderStatuses(); $orderStatusToDisplay = []; foreach ($woocommerceOrderStatus as $key => $orderStatus) { if (in_array($key, $condition['order_status'])) $orderStatusToDisplay[] = $orderStatus; } $return[] = acym_translationSprintf('ACYM_ORDER_STATUS_X_IN_X', acym_strtolower($statusArray[$condition['order_status_status']]), implode(', ', $orderStatusToDisplay)); } if (empty($condition['products_status']) || empty($condition['products'])) { $return[] = acym_translation('ACYM_ANY_PRODUCT'); } else { $args = [ 'post__in' => $condition['products'], 'post_type' => ['product', 'product_variation'], ]; $posts = new WP_Query($args); $productsToDisplay = []; if ($posts->have_posts()) { foreach ($posts->get_posts() as $post) { $productsToDisplay[] = $post->post_title; } } $return[] = acym_translationSprintf('ACYM_PRODUCTS_X_IN_X', acym_strtolower($statusArray[$condition['products_status']]), implode(', ', $productsToDisplay)); } if (empty($condition['categories_status']) || empty($condition['categories'])) { $return[] = acym_translation('ACYM_EVERY_CATEGORIES'); } else { $cats = $this->getWooCategories($condition['categories']); $categoriesToDisplay = []; if (!empty($cats)) { foreach ($cats as $cat) { $categoriesToDisplay[] = $cat->name; } } $return[] = acym_translationSprintf('ACYM_CATEGORIES_X_IN_X', acym_strtolower($statusArray[$condition['categories_status']]), implode(', ', $categoriesToDisplay)); } if ($this->wcsInstalled && !empty($condition['order_type']) && !empty($this->orderTypes[$condition['order_type']])) { $return[] = acym_translation('ACYM_ORDER_TYPE').': '.$this->orderTypes[$condition['order_type']]; } } }