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 / voxel / actions / update-voxel-taxonomy.php
suretriggers / src / Integrations / voxel / actions Last commit date
add-post-profile-wall.php 11 months ago add-post-to-collection.php 11 months ago add-post-wall.php 11 months ago assign-listing-plan-to-user.php 6 months ago change-membership-plan.php 8 months ago claim-post.php 11 months ago delete-post.php 8 months ago delete-wall-post.php 11 months ago find-post.php 8 months ago follow-post.php 11 months ago get-address-by-coordinates.php 2 weeks ago get-coordinates-by-address.php 2 weeks ago get-member-by-email.php 10 months ago get-member-by-id.php 10 months ago get-member-by-profile-id.php 10 months ago get-post-by-id.php 11 months ago get-posts-by-voxel-field.php 11 months ago new-collection-post.php 1 year ago new-post.php 1 year ago new-profile.php 11 months ago remove-post-from-collection.php 11 months ago send-custom-in-app-notification.php 2 years ago send-direct-message.php 11 months ago send-email.php 11 months ago set-collection-post-verified.php 11 months ago set-custom-priority.php 11 months ago set-post-verified.php 11 months ago set-profile-verified.php 11 months ago update-collection-post.php 1 year ago update-post.php 11 months ago update-profile.php 11 months ago update-voxel-post-field.php 10 months ago update-voxel-taxonomy.php 10 months ago
update-voxel-taxonomy.php
320 lines
1 <?php
2 /**
3 * UpdateVoxelTaxonomy.
4 * php version 5.6
5 *
6 * @category UpdateVoxelTaxonomy
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\Voxel\Actions;
15
16 use SureTriggers\Integrations\AutomateAction;
17 use SureTriggers\Traits\SingletonLoader;
18 use Exception;
19
20 /**
21 * UpdateVoxelTaxonomy
22 *
23 * @category UpdateVoxelTaxonomy
24 * @package SureTriggers
25 * @author BSF <username@example.com>
26 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
27 * @link https://www.brainstormforce.com/
28 * @since 1.0.0
29 */
30 class UpdateVoxelTaxonomy extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'Voxel';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'voxel_update_taxonomy';
45
46 use SingletonLoader;
47
48 /**
49 * Register action.
50 *
51 * @param array $actions action data.
52 * @return array
53 */
54 public function register( $actions ) {
55 $actions[ $this->integration ][ $this->action ] = [
56 'label' => __( 'Update Voxel Taxonomy', 'suretriggers' ),
57 'action' => 'voxel_update_taxonomy',
58 'function' => [ $this, 'action_listener' ],
59 ];
60
61 return $actions;
62 }
63
64 /**
65 * Action listener.
66 *
67 * @param int $user_id user_id.
68 * @param int $automation_id automation_id.
69 * @param array $fields fields.
70 * @param array $selected_options selectedOptions.
71 *
72 * @throws Exception Exception.
73 *
74 * @return bool|array
75 */
76 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
77 if ( ! class_exists( 'Voxel\Post' ) || ! class_exists( 'Voxel\Post_Type' ) ) {
78 return [
79 'success' => false,
80 'message' => esc_attr__( 'Voxel classes not found', 'suretriggers' ),
81 ];
82 }
83
84 $post_id = isset( $selected_options['post_id'] ) ? absint( $selected_options['post_id'] ) : 0;
85 if ( ! $post_id ) {
86 return [
87 'success' => false,
88 'message' => esc_attr__( 'Post ID is required', 'suretriggers' ),
89 ];
90 }
91
92 $post = \Voxel\Post::force_get( $post_id );
93 if ( ! $post ) {
94 return [
95 'success' => false,
96 'message' => esc_attr__( 'Post not found', 'suretriggers' ),
97 ];
98 }
99
100 $taxonomy = isset( $selected_options['taxonomy'] ) ? sanitize_text_field( $selected_options['taxonomy'] ) : '';
101 if ( empty( $taxonomy ) ) {
102 return [
103 'success' => false,
104 'message' => esc_attr__( 'Taxonomy is required', 'suretriggers' ),
105 ];
106 }
107
108 $terms = isset( $selected_options['terms'] ) ? $selected_options['terms'] : [];
109 if ( ! is_array( $terms ) ) {
110 $terms = array_map( 'trim', explode( ',', $terms ) );
111 }
112
113 $post_type_string = get_post_type( $post->get_id() );
114 if ( false === $post_type_string ) {
115 return [
116 'success' => false,
117 'message' => esc_attr__( 'Invalid post type', 'suretriggers' ),
118 ];
119 }
120
121 $wp_taxonomies = get_object_taxonomies( $post_type_string );
122 $is_wp_taxonomy = in_array( $taxonomy, $wp_taxonomies );
123
124 if ( $is_wp_taxonomy ) {
125 return $this->update_wordpress_taxonomy( $post_id, $taxonomy, $terms );
126 }
127
128 $post_type_obj = \Voxel\Post_Type::get( $post_type_string );
129 if ( ! $post_type_obj ) {
130 return [
131 'success' => false,
132 'message' => esc_attr__( 'Post type not found', 'suretriggers' ),
133 ];
134 }
135
136 return $this->update_voxel_taxonomy_field( $post, $post_type_obj, $taxonomy, $terms, $post_id );
137 }
138
139 /**
140 * Update standard WordPress taxonomy.
141 *
142 * @param int $post_id Post ID.
143 * @param string $taxonomy Taxonomy name.
144 * @param array $terms Array of terms.
145 * @return array
146 */
147 private function update_wordpress_taxonomy( $post_id, $taxonomy, $terms ) {
148 $term_ids = [];
149 $created_terms = [];
150
151 foreach ( $terms as $term ) {
152 if ( is_numeric( $term ) ) {
153 $term_obj = get_term( absint( $term ), $taxonomy );
154 if ( $term_obj && ! is_wp_error( $term_obj ) ) {
155 $term_ids[] = $term_obj->term_id;
156 }
157 } else {
158 $term_obj = get_term_by( 'slug', sanitize_title( $term ), $taxonomy );
159 if ( ! $term_obj ) {
160 $term_obj = get_term_by( 'name', sanitize_text_field( $term ), $taxonomy );
161 }
162
163 if ( $term_obj ) {
164 $term_ids[] = $term_obj->term_id;
165 } else {
166 // Term doesn't exist, create new one.
167 $new_term = wp_insert_term( sanitize_text_field( $term ), $taxonomy );
168 if ( ! is_wp_error( $new_term ) && isset( $new_term['term_id'] ) ) {
169 $term_ids[] = $new_term['term_id'];
170 $created_terms[] = sanitize_text_field( $term );
171 }
172 }
173 }
174 }
175
176 if ( empty( $term_ids ) ) {
177 return [
178 'success' => false,
179 'message' => esc_attr__( 'No valid terms found', 'suretriggers' ),
180 ];
181 }
182
183 $result = wp_set_object_terms( $post_id, $term_ids, $taxonomy, false );
184
185 if ( is_wp_error( $result ) ) {
186 return [
187 'success' => false,
188 'message' => esc_attr__( 'Failed to update taxonomy: ', 'suretriggers' ) . $result->get_error_message(),
189 ];
190 }
191
192 return [
193 'success' => true,
194 'message' => esc_attr__( 'WordPress taxonomy updated successfully', 'suretriggers' ),
195 'post_id' => $post_id,
196 'taxonomy' => $taxonomy,
197 'terms_updated' => count( $term_ids ),
198 'terms_created' => $created_terms,
199 ];
200 }
201
202 /**
203 * Update Voxel taxonomy field.
204 *
205 * @param object $post Voxel post object.
206 * @param object $post_type_obj Voxel post type object.
207 * @param string $taxonomy Field name.
208 * @param array $terms Array of terms.
209 * @param int $post_id Post ID.
210 * @return array
211 */
212 private function update_voxel_taxonomy_field( $post, $post_type_obj, $taxonomy, $terms, $post_id ) {
213 $post_fields = null;
214 if ( is_object( $post_type_obj ) && method_exists( $post_type_obj, 'get_fields' ) ) {
215 $post_fields = $post_type_obj->get_fields();
216 }
217
218 if ( ! is_array( $post_fields ) ) {
219 return [
220 'success' => false,
221 'message' => esc_attr__( 'Unable to get post fields', 'suretriggers' ),
222 ];
223 }
224
225 foreach ( $post_fields as $key => $field ) {
226 if ( is_object( $field ) && method_exists( $field, 'get_props' ) ) {
227 $post_fields[ $key ] = $field->get_props();
228 }
229 }
230
231 $taxonomy_field = null;
232 $taxonomy_field_key = null;
233
234 foreach ( $post_fields as $field_key => $field ) {
235 if ( isset( $field['type'] ) && 'taxonomy' === $field['type'] ) {
236 if ( $field_key === $taxonomy ||
237 ( isset( $field['label'] ) && $field['label'] === $taxonomy ) ||
238 ( isset( $field['taxonomy'] ) && $field['taxonomy'] === $taxonomy ) ) {
239 $taxonomy_field = $field;
240 $taxonomy_field_key = $field_key;
241 break;
242 }
243 }
244 }
245
246 if ( ! $taxonomy_field ) {
247 return [
248 'success' => false,
249 'message' => esc_attr__( 'Voxel taxonomy field not found', 'suretriggers' ),
250 ];
251 }
252
253 $post_field = null;
254 if ( is_object( $post ) && method_exists( $post, 'get_field' ) ) {
255 $post_field = $post->get_field( $taxonomy_field_key );
256 }
257 if ( ! $post_field ) {
258 return [
259 'success' => false,
260 'message' => esc_attr__( 'Voxel post field not found', 'suretriggers' ),
261 ];
262 }
263
264 $term_ids = [];
265 $created_terms = [];
266 foreach ( $terms as $term ) {
267 if ( is_numeric( $term ) ) {
268 $term_obj = get_term( absint( $term ) );
269 if ( $term_obj && ! is_wp_error( $term_obj ) ) {
270 $term_ids[] = $term_obj->term_id;
271 }
272 } else {
273 $term_obj = get_term_by( 'slug', sanitize_title( $term ), $taxonomy_field['taxonomy'] );
274 if ( ! $term_obj ) {
275 $term_obj = get_term_by( 'name', sanitize_text_field( $term ), $taxonomy_field['taxonomy'] );
276 }
277
278 if ( $term_obj ) {
279 $term_ids[] = $term_obj->term_id;
280 } else {
281 // Term doesn't exist, create new one in the Voxel taxonomy.
282 $new_term = wp_insert_term( sanitize_text_field( $term ), $taxonomy_field['taxonomy'] );
283 if ( ! is_wp_error( $new_term ) && isset( $new_term['term_id'] ) ) {
284 $term_ids[] = $new_term['term_id'];
285 $created_terms[] = sanitize_text_field( $term );
286 }
287 }
288 }
289 }
290
291 if ( empty( $term_ids ) ) {
292 return [
293 'success' => false,
294 'message' => esc_attr__( 'No valid terms found', 'suretriggers' ),
295 ];
296 }
297
298 try {
299 $post_field->update( $term_ids );
300
301 return [
302 'success' => true,
303 'message' => esc_attr__( 'Voxel taxonomy field updated successfully', 'suretriggers' ),
304 'post_id' => $post_id,
305 'taxonomy' => $taxonomy,
306 'terms_updated' => count( $term_ids ),
307 'terms_created' => $created_terms,
308 ];
309 } catch ( Exception $e ) {
310 return [
311 'success' => false,
312 'message' => esc_attr__( 'Failed to update Voxel taxonomy: ', 'suretriggers' ) . $e->getMessage(),
313 ];
314 }
315 }
316
317 }
318
319 UpdateVoxelTaxonomy::get_instance();
320