PluginProbe
SellKit – Funnel builder and checkout optimizer for WooCommerce to sell more, faster / 2.7.0
SellKit – Funnel builder and checkout optimizer for WooCommerce to sell more, faster v2.7.0
2.7.0 2.6.0 trunk 1.1.0 1.1.4 1.2.1 1.2.2 1.2.3 1.2.5 1.2.9 1.3.1 1.3.2 1.5.0 1.5.1 1.5.4 1.5.7 1.5.8 1.5.9 1.6.2 1.6.5 1.6.8 1.7.2 1.7.4 1.7.5 1.7.9 All 43 releases
← All changes | includes/admin/funnel/importer/step-importer.php +160 -14 1.1.4 → 2.7.0 View file →
@@ -2,8 +2,9 @@
2 2
3 3 namespace Sellkit\Admin\Funnel\Importer;
4 4
5 5 use Sellkit\Admin\Funnel\Importer\Page_Builder\Importer_Base;
6 +use stdClass;
6 7
7 8 defined( 'ABSPATH' ) || die();
8 9
9 10 /**
@@ -8,8 +9,9 @@
8 9
9 10 /**
10 11 * Class Step Importer.
11 12 *
13 + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
12 14 * @since 1.1.0
13 15 */
14 16 class Step_Importer {
15 17
@@ -41,8 +43,9 @@
41 43 *
42 44 * @since 1.1.0
43 45 * @param object $data Funnel id.
44 46 * @param string $new_step_id New step id.
47 + * @SuppressWarnings(PHPMD.NPathComplexity)
45 48 */
46 49 public function import_template( $data, $new_step_id ) {
47 50 self::$importer->push_to_queue( [
48 51 'data' => $data,
@@ -71,9 +74,11 @@
71 74 }
72 75
73 76 $response = wp_remote_get( "https://templates.getsellkit.com/wp-json/sellkit/v1/step/{$step_id}" );
74 77
75 - if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) ) {
78 + $response_code = wp_remote_retrieve_response_code( $response );
79 +
80 + if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) && 200 === (int) $response_code ) {
76 81 $step_data = json_decode( $response['body'] );
77 82
78 83 return $step_data;
79 84 }
@@ -86,37 +91,174 @@
86 91 *
87 92 * @since 1.1.0
88 93 * @param object $data Step data.
89 94 * @param int $funnel_id Funnel id.
95 + * @param int $origin_node Origin node id.
96 + * @param int $target_node Target node id.
97 + * @param int $target_index Target index.
98 + * @SuppressWarnings(PHPMD.NPathComplexity)
99 + * @SuppressWarnings(PHPMD.CyclomaticComplexity)
90 100 */
91 - public function import_to_funnel( $data, $funnel_id ) {
92 - $meta_data = (array) $data->meta;
93 - $step_data = unserialize( $meta_data['step_data'] ); //phpcs:ignore
101 + public function import_to_funnel( $data, $funnel_id, $origin_node = null, $target_node = null, $target_index = 0 ) {
102 + $meta_data = [];
103 + $step_data = [];
94 104
105 + if ( empty( $data ) ) {
106 + $data = new stdClass();
107 + }
108 +
109 + if ( property_exists( $data, 'meta' ) ) {
110 + $meta_data = (array) $data->meta;
111 + }
112 +
113 + $funnel_step_data = get_post_meta( $funnel_id, 'sellkit_steps', true );
114 + $funnel_nodes = get_post_meta( $funnel_id, 'nodes', true );
115 +
116 + if ( empty( $meta_data['nodes'] ) && array_key_exists( 'step_data', $meta_data ) ) {
117 + $step_data = unserialize( $meta_data['step_data'] ); //phpcs:ignore
118 + }
119 +
120 + if ( ! empty( $meta_data['nodes'] ) ) {
121 + $step_data = unserialize( $meta_data['nodes'] ); //phpcs:ignore
122 + }
123 +
124 + if ( ! empty( $funnel_nodes ) ) {
125 + $funnel_step_data = get_post_meta( $funnel_id, 'nodes', true );
126 + }
127 +
95 128 unset( $step_data['funnel_id'] );
96 129 unset( $step_data['number'] );
97 130 unset( $step_data['data'] );
131 + unset( $step_data['targets'] );
98 132
99 - $funnel_step_data = get_post_meta( $funnel_id, 'sellkit_steps', true );
100 - $funnel_step_data = ! empty( $funnel_step_data ) ? $funnel_step_data : [];
101 - $new_step_data = $this->create_new_step_page( $step_data );
102 - $new_funnel_step_data = array_merge( $funnel_step_data, [ $new_step_data ] );
133 + if ( ! empty( $target_node ) ) {
134 + $current_target = [ 'nodeId' => $target_node ];
135 + }
103 136
104 - update_post_meta( $funnel_id, 'sellkit_steps', $new_funnel_step_data );
137 + $funnel_step_data = ! empty( $funnel_step_data ) ? $funnel_step_data : [];
138 + $new_step_data = $this->create_new_step_page( $step_data );
105 139
106 - $args = array(
140 + if ( ! empty( $current_target ) ) {
141 + $new_step_data['targets'] = ! is_null( $current_target ) ? [ $current_target ] : [];
142 + }
143 +
144 + // Adding current target info the the step.
145 + $new_step_data['current_target_index'] = $target_index;
146 +
147 + if ( 'last-node' === $origin_node ) {
148 + $first_end_path_node_key = \Sellkit_Admin_Steps::get_first_end_path_node_key( $funnel_step_data );
149 +
150 + $new_step_data['origin_node'] = 'last-node';
151 +
152 + if ( $first_end_path_node_key ) {
153 + unset( $funnel_step_data[ $first_end_path_node_key ]['origin_node'] );
154 + }
155 + }
156 +
157 + $old_node_keys = array_keys( (array) $funnel_step_data );
158 + $new_funnel_step_data = (array) $funnel_step_data;
159 + $new_step_id = intval( end( $old_node_keys ) ) + 1;
160 +
161 + if (
162 + ( array_key_exists( 'type', $new_step_data ) && 'decision' === $new_step_data['type']['key'] && ! is_null( $target_node ) ) ||
163 + ( array_key_exists( 'type', $new_step_data ) && 'upsell' === $new_step_data['type']['key'] && ! is_null( $target_node ) ) ||
164 + ( array_key_exists( 'type', $new_step_data ) && 'downsell' === $new_step_data['type']['key'] && ! is_null( $target_node ) )
165 + ) {
166 + $new_step_data['targets'] = [
167 + $current_target,
168 + $current_target
169 + ];
170 + }
171 +
172 + $new_funnel_step_data[ $new_step_id ] = $new_step_data;
173 +
174 + if ( 'none' === $origin_node && 'none' === $target_node ) {
175 + $new_funnel_step_data = [ 1 => $new_step_data ];
176 + }
177 +
178 + if ( 'last-node' !== $origin_node && ! empty( $origin_node ) && isset( $new_funnel_step_data[ $origin_node ] ) && is_object( $new_funnel_step_data[ $origin_node ]['type'] ) ) {
179 + $new_funnel_step_data[ $origin_node ]['type'] = (array) $new_funnel_step_data[ $origin_node ]['type'];
180 + }
181 +
182 + if (
183 + 'last-node' !== $origin_node &&
184 + 'none' !== $origin_node &&
185 + ! empty( $origin_node ) &&
186 + 'decision' !== $new_funnel_step_data[ $origin_node ]['type']['key'] &&
187 + 'upsell' !== $new_funnel_step_data[ $origin_node ]['type']['key'] &&
188 + 'downsell' !== $new_funnel_step_data[ $origin_node ]['type']['key']
189 + ) {
190 + $new_funnel_step_data[ $origin_node ]['targets'] = [ [ 'nodeId' => strval( $new_step_id ) ] ];
191 + }
192 +
193 + if (
194 + 'none' !== $origin_node &&
195 + 'last-node' !== $origin_node &&
196 + ! empty( $origin_node ) &&
197 + (
198 + 'decision' === $new_funnel_step_data[ $origin_node ]['type']['key'] ||
199 + 'upsell' === $new_funnel_step_data[ $origin_node ]['type']['key'] ||
200 + 'downsell' === $new_funnel_step_data[ $origin_node ]['type']['key']
201 + )
202 + ) {
203 + if ( is_array( $new_funnel_step_data[ $origin_node ]['targets'] ) && empty( $new_funnel_step_data[ $origin_node ]['targets'][0] ) ) {
204 + $new_funnel_step_data[ $origin_node ]['targets'][0] = 'none' !== $target_node ? [ 'nodeId' => $target_node ] : null;
205 + }
206 +
207 + if ( is_array( $new_funnel_step_data[ $origin_node ]['targets'] ) && empty( $new_funnel_step_data[ $origin_node ]['targets'][1] ) ) {
208 + $new_funnel_step_data[ $origin_node ]['targets'][1] = 'none' !== $target_node ? [ 'nodeId' => $target_node ] : null;
209 + }
210 +
211 + $new_funnel_step_data[ $origin_node ]['targets'][ (int) $target_index ] = [ 'nodeId' => strval( $new_step_id ) ];
212 + }
213 +
214 + if (
215 + 'last-node' !== $origin_node &&
216 + isset( $new_funnel_step_data[ $new_step_id ] ) &&
217 + isset( $new_funnel_step_data[ $new_step_id ]['origin_node'] ) &&
218 + 'last-node' === $new_funnel_step_data[ $new_step_id ]['origin_node'] &&
219 + (
220 + 'decision' !== $new_funnel_step_data[ $new_step_id ]['type']['key'] ||
221 + 'upsell' !== $new_funnel_step_data[ $new_step_id ]['type']['key'] ||
222 + 'downsell' !== $new_funnel_step_data[ $new_step_id ]['type']['key']
223 + )
224 + ) {
225 + unset( $new_funnel_step_data[ $new_step_id ]['origin_node'] );
226 + }
227 +
228 + if ( empty( $funnel_nodes ) && 'none' !== $origin_node && 'none' !== $target_node ) {
229 + update_post_meta( $funnel_id, 'sellkit_steps', $new_funnel_step_data );
230 + }
231 +
232 + if ( ! empty( $funnel_nodes ) || ( 'none' === $origin_node && 'none' === $target_node ) ) {
233 + update_post_meta( $funnel_id, 'nodes', $new_funnel_step_data );
234 + }
235 +
236 + $content = '';
237 +
238 + if ( property_exists( $data, 'post_content' ) ) {
239 + $content = $data->post_content;
240 + }
241 +
242 + $args = [
107 243 'ID' => $new_step_data['page_id'],
108 - 'post_content' => $data->post_content,
109 - );
244 + 'post_content' => $content,
245 + ];
110 246
111 247 wp_update_post( $args );
112 248
249 + if ( ! property_exists( $data, 'meta' ) ) {
250 + $data->meta = [];
251 + }
252 +
113 253 foreach ( $data->meta as $meta_key => $meta_value ) {
114 254 if ( '_elementor_data' === $meta_key ) {
255 +
115 256 if ( ! is_array( $meta_value ) ) {
116 - $elementor_data = add_magic_quotes( $meta_value );
117 - $elementor_data = json_decode( $elementor_data, true );
257 + $elementor_data = json_decode( $meta_value, true );
258 + $elementor_data = add_magic_quotes( $elementor_data );
118 259 }
260 +
119 261 update_post_meta( $new_step_data['page_id'], $meta_key, $elementor_data );
120 262 continue;
121 263 }
122 264
@@ -144,8 +286,12 @@
144 286 * @since 1.1.0
145 287 * @param array $last_step Step data.
146 288 */
147 289 public function create_new_step_page( $last_step ) {
290 + if ( ! array_key_exists( 'title', $last_step ) || is_null( $last_step['title'] ) ) {
291 + $last_step['title'] = 'step';
292 + }
293 +
148 294 $new_step_id = wp_insert_post( [
149 295 'post_type' => \Sellkit_Admin_Steps::SELLKIT_STEP_POST_TYPE,
150 296 'post_title' => $last_step['title'],
151 297 'post_name' => sanitize_title( $last_step['title'] ),