PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.36
OttoKit: All-in-One Automation Platform v1.1.36
1.1.37 1.1.36 1.1.35 1.1.34 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-category.php
suretriggers / src / Integrations / woocommerce / triggers Last commit date
add-product-to-cart.php 3 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 11 months ago order-note-added.php 2 years ago order-paid.php 10 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 3 years ago subscription-var-purchase.php 1 year ago view-product.php 2 years ago
purchase-product-category.php
219 lines
1 <?php
2 /**
3 * PurchaseProductCategory.
4 * php version 5.6
5 *
6 * @category PurchaseProductCategory
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_Order;
21
22 if ( ! class_exists( 'PurchaseProductCategory' ) ) :
23
24 /**
25 * PurchaseProductCategory
26 *
27 * @category PurchaseProductCategory
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 PurchaseProductCategory {
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_category';
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' => __( 'Product Category Purchased', 'suretriggers' ),
72 'action' => $this->trigger,
73 'common_action' => [ 'woocommerce_checkout_order_processed', 'woocommerce_store_api_checkout_order_processed' ],
74 'function' => [ $this, 'trigger_listener' ],
75 'priority' => 10,
76 'accepted_args' => 1,
77 ];
78
79 return $triggers;
80 }
81
82 /**
83 * Trigger listener
84 *
85 * @param int $order_id order ID.
86 *
87 * @return void
88 */
89 public function trigger_listener( $order_id ) {
90 if ( ! $order_id ) {
91 return;
92 }
93 $order = wc_get_order( $order_id );
94
95 if ( ! $order instanceof WC_Order ) {
96 return;
97 }
98
99 $user_id = $order->get_customer_id();
100
101 $items = $order->get_items();
102 $product_ids = [];
103 $product = [];
104 foreach ( $items as $item ) {
105 $product = wc_get_product( $item['product_id'] );
106 $product_ids[] = $item['product_id'];
107 }
108
109 $product_data = [];
110 $category_ids = [];
111
112 foreach ( $product_ids as $key => $product_id ) {
113 /**
114 *
115 * Ignore line
116 *
117 * @phpstan-ignore-next-line
118 */
119 $product_data[ 'product' . $key ] = WooCommerce::get_product_context( $product_id );
120 /**
121 *
122 * Ignore line
123 *
124 * @phpstan-ignore-next-line
125 */
126 $terms = get_the_terms( $product_id, 'product_cat' );
127 if ( ! empty( $terms ) && is_array( $terms ) && isset( $terms[0] ) ) {
128 $cat_name = [];
129 foreach ( $terms as $cat ) {
130 $cat_name[] = $cat->name;
131 $category_ids[] = $cat->term_id;
132 }
133 $product_data[ 'product' . $key ]['category'] = implode( ', ', $cat_name );
134 }
135 /**
136 *
137 * Ignore line
138 *
139 * @phpstan-ignore-next-line
140 */
141 $terms_tags = get_the_terms( $product_id, 'product_tag' );
142 if ( ! empty( $terms_tags ) && is_array( $terms_tags ) && isset( $terms_tags[0] ) ) {
143 $tag_name = [];
144 foreach ( $terms_tags as $tag ) {
145 $tag_name[] = $tag->name;
146 }
147 $product_data[ 'product' . $key ]['tag'] = implode( ', ', $tag_name );
148 }
149 $product = wc_get_product( $product_id );
150 /**
151 *
152 * Ignore line
153 *
154 * @phpstan-ignore-next-line
155 */
156 if ( $product->is_downloadable() ) {
157 /**
158 *
159 * Ignore line
160 *
161 * @phpstan-ignore-next-line
162 */
163 foreach ( $product->get_downloads() as $key_download_id => $download ) {
164 $download_name = $download->get_name();
165 $download_link = $download->get_file();
166 $download_id = $download->get_id();
167 $download_type = $download->get_file_type();
168 $download_ext = $download->get_file_extension();
169 $product_data[ 'product' . $key ]['download'] = [
170 'download_name' => $download_name,
171 'download_link' => $download_link,
172 'download_id' => $download_id,
173 'download_type' => $download_type,
174 'download_ext' => $download_ext,
175 ];
176 }
177 }
178 }
179
180 if ( empty( $category_ids ) ) {
181 return;
182 }
183
184 $order_data = WooCommerce::get_order_context( $order_id );
185
186 $context = array_merge(
187 $product_data,
188 WordPress::get_user_context( $user_id )
189 );
190 if ( is_array( $order_data ) ) {
191 $context = array_merge(
192 $context,
193 $order_data
194 );
195 }
196
197 $context['total_items_in_order'] = count( $product_ids );
198
199 foreach ( $category_ids as $category_id ) {
200 $context['product_category_id'] = $category_id;
201 AutomationController::sure_trigger_handle_trigger(
202 [
203 'trigger' => $this->trigger,
204 'context' => $context,
205 ]
206 );
207 }
208 }
209 }
210
211 /**
212 * Ignore false positive
213 *
214 * @psalm-suppress UndefinedMethod
215 */
216 PurchaseProductCategory::get_instance();
217
218 endif;
219