PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.33
OttoKit: All-in-One Automation Platform v1.1.33
1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / woocommerce / triggers / purchase-product.php
suretriggers / src / Integrations / woocommerce / triggers Last commit date
add-product-to-cart.php 2 years ago customer-created.php 2 years ago customer-order-count-reach-specific-count.php 2 years ago customer-total-spend-reach-specific-amount.php 2 years ago order-created.php 10 months ago order-note-added.php 2 years ago order-paid.php 9 months ago order-status-changed.php 2 years ago purchase-product-category.php 1 year ago purchase-product.php 1 year ago purchase-variable-product.php 1 year ago review-product.php 2 years ago subscription-var-purchase.php 1 year ago view-product.php 2 years ago
purchase-product.php
217 lines
1 <?php
2 /**
3 * PurchaseProduct.
4 * php version 5.6
5 *
6 * @category PurchaseProduct
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\Woocommerce\Triggers;
15
16 use SureTriggers\Controllers\AutomationController;
17 use SureTriggers\Integrations\WooCommerce\WooCommerce;
18 use SureTriggers\Integrations\WordPress\WordPress;
19 use SureTriggers\Traits\SingletonLoader;
20 use WC_Product;
21
22 if ( ! class_exists( 'PurchaseProduct' ) ) :
23
24 /**
25 * PurchaseProduct
26 *
27 * @category PurchaseProduct
28 * @package SureTriggers
29 * @author BSF <username@example.com>
30 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
31 * @link https://www.brainstormforce.com/
32 * @since 1.0.0
33 *
34 * @psalm-suppress UndefinedTrait
35 */
36 class PurchaseProduct {
37
38 /**
39 * Integration type.
40 *
41 * @var string
42 */
43 public $integration = 'WooCommerce';
44
45 /**
46 * Trigger name.
47 *
48 * @var string
49 */
50 public $trigger = 'wc_purchase_product';
51
52 use SingletonLoader;
53
54 /**
55 * Constructor
56 *
57 * @since 1.0.0
58 */
59 public function __construct() {
60 add_filter( 'sure_trigger_register_trigger', [ $this, 'register' ] );
61 }
62
63 /**
64 * Register action.
65 *
66 * @param array $triggers trigger data.
67 * @return array
68 */
69 public function register( $triggers ) {
70 $triggers[ $this->integration ][ $this->trigger ] = [
71 'label' => __( 'User purchases a product', 'suretriggers' ),
72 'action' => $this->trigger,
73 'common_action' => 'woocommerce_order_status_changed',
74 'function' => [ $this, 'trigger_listener' ],
75 'priority' => 10,
76 'accepted_args' => 4,
77 ];
78
79 return $triggers;
80 }
81
82 /**
83 * Trigger listener
84 *
85 * @param int $order_id order ID.
86 * @param string $from_status order old status.
87 * @param string $to_status order new status.
88 * @param array $order order.
89 *
90 * @return void
91 */
92 public function trigger_listener( $order_id, $from_status, $to_status, $order ) {
93 if ( ! $order_id ) {
94 return;
95 }
96 $order = wc_get_order( $order_id );
97
98 if ( ! $order || ! $order instanceof \WC_Order ) {
99 return;
100 }
101
102 $user_id = $order->get_customer_id();
103
104 $items = $order->get_items();
105 $product_ids = [];
106 $product = [];
107 foreach ( $items as $item ) {
108 $product = wc_get_product( $item['product_id'] );
109 $product_ids[] = $item['product_id'];
110 }
111
112 if ( $product instanceof WC_Product ) {
113 $is_virtual = $product->is_virtual();
114 $is_downloadable = $product->is_downloadable();
115 } else {
116 $is_virtual = false;
117 $is_downloadable = false;
118 }
119
120
121 if ( ( ! $is_virtual || ! $is_downloadable ) && 'processing' !== $to_status ) {
122 return;
123 }
124
125 $product_data = [];
126 foreach ( $product_ids as $key => $product_id ) {
127 /**
128 *
129 * Ignore line
130 *
131 * @phpstan-ignore-next-line
132 */
133 $product_data[ 'product' . $key ] = WooCommerce::get_product_context( $product_id );
134 /**
135 *
136 * Ignore line
137 *
138 * @phpstan-ignore-next-line
139 */
140 $terms = get_the_terms( $product_id, 'product_cat' );
141 if ( ! empty( $terms ) && is_array( $terms ) && isset( $terms[0] ) ) {
142 $cat_name = [];
143 foreach ( $terms as $cat ) {
144 $cat_name[] = $cat->name;
145 }
146 $product_data[ 'product' . $key ]['category'] = implode( ', ', $cat_name );
147 }
148 /**
149 *
150 * Ignore line
151 *
152 * @phpstan-ignore-next-line
153 */
154 $terms_tags = get_the_terms( $product_id, 'product_tag' );
155 if ( ! empty( $terms_tags ) && is_array( $terms_tags ) && isset( $terms_tags[0] ) ) {
156 $tag_name = [];
157 foreach ( $terms_tags as $tag ) {
158 $tag_name[] = $tag->name;
159 }
160 $product_data[ 'product' . $key ]['tag'] = implode( ', ', $tag_name );
161 }
162 $product = wc_get_product( $product_id );
163 /**
164 *
165 * Ignore line
166 *
167 * @phpstan-ignore-next-line
168 */
169 if ( $product->is_downloadable() ) {
170 /**
171 *
172 * Ignore line
173 *
174 * @phpstan-ignore-next-line
175 */
176 foreach ( $product->get_downloads() as $key_download_id => $download ) {
177 $download_name = $download->get_name();
178 $download_link = $download->get_file();
179 $download_id = $download->get_id();
180 $download_type = $download->get_file_type();
181 $download_ext = $download->get_file_extension();
182 $product_data[ 'product' . $key ]['download'] = [
183 'download_name' => $download_name,
184 'download_link' => $download_link,
185 'download_id' => $download_id,
186 'download_type' => $download_type,
187 'download_ext' => $download_ext,
188 ];
189 }
190 }
191 }
192 $order_context = WooCommerce::get_order_context( $order_id );
193 $context = array_merge(
194 isset( $order_context ) ? $order_context : [],
195 $product_data,
196 WordPress::get_user_context( $user_id )
197 );
198
199 $context['total_items_in_order'] = count( $product_ids );
200 AutomationController::sure_trigger_handle_trigger(
201 [
202 'trigger' => $this->trigger,
203 'context' => $context,
204 ]
205 );
206 }
207 }
208
209 /**
210 * Ignore false positive
211 *
212 * @psalm-suppress UndefinedMethod
213 */
214 PurchaseProduct::get_instance();
215
216 endif;
217