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 / suredash / actions / suredash-post-to-discussion-space.php
suretriggers / src / Integrations / suredash / actions Last commit date
suredash-add-badges-to-user.php 6 months ago suredash-create-space.php 5 months ago suredash-post-to-discussion-space.php 7 months ago suredash-remove-badges-from-user.php 6 months ago
suredash-post-to-discussion-space.php
241 lines
1 <?php
2 /**
3 * SureDashPostToDiscussionSpace.
4 * php version 5.6
5 *
6 * @category SureDashPostToDiscussionSpace
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\SureDash\Actions;
15
16 use SureTriggers\Integrations\AutomateAction;
17 use SureTriggers\Traits\SingletonLoader;
18 use Exception;
19
20 /**
21 * SureDashPostToDiscussionSpace
22 *
23 * @category SureDashPostToDiscussionSpace
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 SureDashPostToDiscussionSpace extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'SureDash';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'suredash_post_to_discussion_space';
45
46 use SingletonLoader;
47
48 /**
49 * Register a action.
50 *
51 * @param array $actions actions.
52 * @return array
53 */
54 public function register( $actions ) {
55 $actions[ $this->integration ][ $this->action ] = [
56 'label' => __( 'Create Post in Specific Space', 'suretriggers' ),
57 'action' => 'suredash_post_to_discussion_space',
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 * @return array|bool|object
73 * @throws Exception Error.
74 */
75 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
76 if ( ! defined( 'SUREDASHBOARD_FEED_POST_TYPE' ) ) {
77 return [
78 'status' => 'error',
79 'message' => __( 'SureDash plugin is not active or properly configured.', 'suretriggers' ),
80 ];
81 }
82
83 $post_data = [];
84
85 if ( ! empty( $selected_options['post_title'] ) ) {
86 $post_data['post_title'] = sanitize_text_field( $selected_options['post_title'] );
87 }
88
89 if ( ! empty( $selected_options['post_content'] ) ) {
90 $html_content = $selected_options['post_content'];
91 $patterns = [
92 '/<head\b[^>]*>.*?<\/head>/is',
93 '/<script\b[^>]*>.*?<\/script>/is',
94 '/<style\b[^>]*>.*?<\/style>/is',
95 ];
96 $post_data['post_content'] = preg_replace( $patterns, '', $html_content );
97 }
98
99 if ( ! empty( $selected_options['post_excerpt'] ) ) {
100 $post_data['post_excerpt'] = sanitize_textarea_field( $selected_options['post_excerpt'] );
101 }
102
103 $meta_array = [];
104 if ( ! empty( $selected_options['post_meta'] ) && is_array( $selected_options['post_meta'] ) ) {
105 foreach ( $selected_options['post_meta'] as $meta ) {
106 if ( isset( $meta['metaKey'] ) && isset( $meta['metaValue'] ) ) {
107 $meta_key = sanitize_key( $meta['metaKey'] );
108 $meta_value = sanitize_text_field( $meta['metaValue'] );
109 $meta_array[ $meta_key ] = $meta_value;
110 }
111 }
112 if ( ! empty( $meta_array ) ) {
113 $post_data['meta_input'] = $meta_array;
114 }
115 }
116
117 $post_data['post_type'] = SUREDASHBOARD_FEED_POST_TYPE;
118 $post_data['post_status'] = ! empty( $selected_options['post_status'] ) ? $selected_options['post_status'] : 'publish';
119
120 if ( ! empty( $selected_options['post_author'] ) ) {
121 $post_data['post_author'] = absint( $selected_options['post_author'] );
122 } elseif ( $user_id ) {
123 $post_data['post_author'] = $user_id;
124 } else {
125 $post_data['post_author'] = get_current_user_id();
126 }
127
128 if ( empty( $post_data['post_title'] ) ) {
129 return [
130 'status' => 'error',
131 'message' => __( 'Post title is required.', 'suretriggers' ),
132 ];
133 }
134
135 /**
136 * Post ID.
137 *
138 * @var int|\WP_Error $post_id
139 */
140 $post_id = wp_insert_post( $post_data );
141
142 if ( is_wp_error( $post_id ) || 0 === $post_id ) {
143 $this->set_error(
144 [
145 'post_data' => $post_data,
146 'msg' => __( 'Failed to create discussion post!', 'suretriggers' ),
147 ]
148 );
149 return false;
150 }
151
152 if ( ! empty( $selected_options['space_id'] ) ) {
153 $space_id = absint( $selected_options['space_id'] );
154 $space_post = get_post( $space_id );
155
156 if ( $space_post ) {
157 $taxonomy = defined( 'SUREDASHBOARD_FEED_TAXONOMY' ) ? SUREDASHBOARD_FEED_TAXONOMY : 'community-forum';
158
159 if ( taxonomy_exists( $taxonomy ) ) {
160 $terms = get_terms(
161 [
162 'taxonomy' => $taxonomy,
163 'hide_empty' => false,
164 ]
165 );
166
167 if ( ! is_wp_error( $terms ) && is_array( $terms ) ) {
168 $matching_term = null;
169
170 foreach ( $terms as $term ) {
171 if ( $space_post->post_title === $term->name ||
172 sanitize_title( $space_post->post_title ) === $term->slug ||
173 false !== strpos( $term->name, $space_post->post_title ) ||
174 false !== strpos( $space_post->post_title, str_replace( 'Forum: ', '', $term->name ) )
175 ) {
176 $matching_term = $term;
177 break;
178 }
179 }
180
181 if ( $matching_term ) {
182 wp_set_object_terms( $post_id, [ $matching_term->term_id ], $taxonomy );
183 }
184 }
185 }
186 }
187 }
188
189 if ( ! empty( $selected_options['featured_image'] ) ) {
190 $image_url = $selected_options['featured_image'];
191 require_once ABSPATH . 'wp-admin/includes/media.php';
192 require_once ABSPATH . 'wp-admin/includes/file.php';
193 require_once ABSPATH . 'wp-admin/includes/image.php';
194
195 $attachment_id = media_sideload_image( $image_url, $post_id, null, 'id' );
196
197 if ( ! is_wp_error( $attachment_id ) && $attachment_id ) {
198 set_post_thumbnail( $post_id, (int) $attachment_id );
199 }
200 }
201
202 $post_response = get_post( $post_id );
203
204 if ( ! $post_response ) {
205 return [
206 'status' => 'error',
207 'message' => __( 'Failed to retrieve created post.', 'suretriggers' ),
208 ];
209 }
210
211 $response_data = [
212 'post_id' => $post_response->ID,
213 'post_title' => $post_response->post_title,
214 'post_content' => $post_response->post_content,
215 'post_excerpt' => $post_response->post_excerpt,
216 'post_status' => $post_response->post_status,
217 'post_author' => $post_response->post_author,
218 'post_date' => $post_response->post_date,
219 'post_modified' => $post_response->post_modified,
220 'post_type' => $post_response->post_type,
221 'post_permalink' => get_permalink( $post_id ),
222 ];
223
224 if ( ! empty( $selected_options['space_id'] ) ) {
225 $response_data['space_id'] = $selected_options['space_id'];
226 }
227
228 $featured_image_url = get_the_post_thumbnail_url( $post_id, 'full' );
229 if ( $featured_image_url ) {
230 $response_data['featured_image_url'] = $featured_image_url;
231 }
232
233 $response_data['status'] = 'success';
234 $response_data['message'] = __( 'Discussion post created successfully.', 'suretriggers' );
235
236 return $response_data;
237 }
238 }
239
240 SureDashPostToDiscussionSpace::get_instance();
241