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 / directories-pro / Actions / add-update-listing.php
suretriggers / src / Integrations / directories-pro / Actions Last commit date
add-update-listing.php 3 weeks ago approve-listing.php 3 weeks ago delete-listing.php 3 weeks ago
add-update-listing.php
201 lines
1 <?php
2 /**
3 * AddUpdateListing.
4 * php version 5.6
5 *
6 * @category AddUpdateListing
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.1.26
12 */
13
14 namespace SureTriggers\Integrations\DirectoriesPro\Actions;
15
16 use SureTriggers\Integrations\AutomateAction;
17 use SureTriggers\Integrations\DirectoriesPro\DirectoriesPro;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * AddUpdateListing
22 *
23 * @category AddUpdateListing
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.1.26
29 */
30 class AddUpdateListing extends AutomateAction {
31
32 use SingletonLoader;
33
34 /**
35 * Integration type.
36 *
37 * @var string
38 */
39 public $integration = 'DirectoriesPro';
40
41 /**
42 * Action name.
43 *
44 * @var string
45 */
46 public $action = 'directories_pro_add_update_listing';
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' => __( 'Add/Update Listing', 'suretriggers' ),
57 'action' => $this->action,
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
73 */
74 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
75 if ( ! function_exists( 'drts' ) ) {
76 return [
77 'status' => 'error',
78 'message' => __( 'Directories Pro is not installed or activated.', 'suretriggers' ),
79 ];
80 }
81
82 $listing_id = ! empty( $selected_options['listing_id'] ) ? absint( $selected_options['listing_id'] ) : 0;
83
84 if ( $listing_id ) {
85 return $this->update_listing( $listing_id, $selected_options );
86 }
87
88 return $this->add_listing( $selected_options, absint( $user_id ) );
89 }
90
91 /**
92 * Create a new listing.
93 *
94 * @param array $selected_options selectedOptions.
95 * @param int $user_id The automation's associated WP user ID, used as the default author.
96 * @return array
97 */
98 private function add_listing( $selected_options, $user_id ) {
99 $post_type = ! empty( $selected_options['post_type'] ) ? sanitize_key( $selected_options['post_type'] ) : '';
100
101 if ( ! $post_type ) {
102 return [
103 'status' => 'error',
104 'message' => __( 'Listing directory (post type) is required.', 'suretriggers' ),
105 ];
106 }
107
108 $bundle = DirectoriesPro::get_bundle( $post_type );
109 if ( ! DirectoriesPro::is_listing_bundle( $bundle ) ) {
110 return [
111 'status' => 'error',
112 'message' => __( 'The given post type is not a valid Directories Pro listing directory.', 'suretriggers' ),
113 ];
114 }
115
116 $status = ! empty( $selected_options['status'] ) ? sanitize_key( $selected_options['status'] ) : 'pending';
117 if ( ! in_array( $status, get_post_stati(), true ) ) {
118 $status = 'pending';
119 }
120
121 $post_id = wp_insert_post(
122 [
123 'post_type' => $post_type,
124 'post_title' => ! empty( $selected_options['title'] ) ? sanitize_text_field( $selected_options['title'] ) : '',
125 'post_content' => ! empty( $selected_options['content'] ) ? wp_kses_post( $selected_options['content'] ) : '',
126 'post_status' => $status,
127 'post_author' => ! empty( $selected_options['author_id'] ) ? absint( $selected_options['author_id'] ) : $user_id,
128 ],
129 true
130 );
131
132 if ( is_wp_error( $post_id ) ) {
133 return [
134 'status' => 'error',
135 'message' => $post_id->get_error_message(),
136 ];
137 }
138
139 $post = get_post( $post_id );
140
141 return DirectoriesPro::build_entity_context( $post, $bundle );
142 }
143
144 /**
145 * Update an existing listing.
146 *
147 * @param int $listing_id Listing post ID.
148 * @param array $selected_options selectedOptions.
149 * @return array
150 */
151 private function update_listing( $listing_id, $selected_options ) {
152 $post = get_post( $listing_id );
153 if ( ! $post ) {
154 return [
155 'status' => 'error',
156 'message' => __( 'Listing not found.', 'suretriggers' ),
157 ];
158 }
159
160 $bundle = DirectoriesPro::get_bundle( $post->post_type );
161 if ( ! DirectoriesPro::is_listing_bundle( $bundle ) ) {
162 return [
163 'status' => 'error',
164 'message' => __( 'The given ID does not belong to a Directories Pro listing.', 'suretriggers' ),
165 ];
166 }
167
168 $postarr = [ 'ID' => $listing_id ];
169 if ( isset( $selected_options['title'] ) && '' !== $selected_options['title'] ) {
170 $postarr['post_title'] = sanitize_text_field( $selected_options['title'] );
171 }
172 if ( isset( $selected_options['content'] ) && '' !== $selected_options['content'] ) {
173 $postarr['post_content'] = wp_kses_post( $selected_options['content'] );
174 }
175 if ( ! empty( $selected_options['status'] ) ) {
176 $status = sanitize_key( $selected_options['status'] );
177 if ( in_array( $status, get_post_stati(), true ) ) {
178 $postarr['post_status'] = $status;
179 }
180 }
181 if ( ! empty( $selected_options['author_id'] ) ) {
182 $postarr['post_author'] = absint( $selected_options['author_id'] );
183 }
184
185 $updated = wp_update_post( $postarr, true );
186
187 if ( is_wp_error( $updated ) ) {
188 return [
189 'status' => 'error',
190 'message' => $updated->get_error_message(),
191 ];
192 }
193
194 $post = get_post( $listing_id );
195
196 return DirectoriesPro::build_entity_context( $post, $bundle );
197 }
198 }
199
200 AddUpdateListing::get_instance();
201