PluginProbe
SellKit – Funnel builder and checkout optimizer for WooCommerce to sell more, faster / 1.6.8
SellKit – Funnel builder and checkout optimizer for WooCommerce to sell more, faster v1.6.8
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
sellkit / includes / admin / funnel / importer / step-importer.php

step-importer.php in SellKit – Funnel builder and checkout optimizer for WooCommerce to sell more, faster 1.6.8, at includes/admin/funnel/importer/step-importer.php

264 lines 7.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Sellkit\Admin\Funnel\Importer;
4
5 use Sellkit\Admin\Funnel\Importer\Page_Builder\Importer_Base;
6
7 defined( 'ABSPATH' ) || die();
8
9 /**
10 * Class Step Importer.
11 *
12 * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
13 * @since 1.1.0
14 */
15 class Step_Importer {
16
17 /**
18 * Importer object.
19 *
20 * @var object
21 */
22 public static $importer;
23
24 /**
25 * Step data.
26 *
27 * @var array
28 */
29 public $step_data;
30
31 /**
32 * Step_Importer constructor.
33 *
34 * @since 1.1.0
35 */
36 public function __construct() {
37 self::$importer = new Importer_Base();
38 }
39
40 /**
41 * Importing template.
42 *
43 * @since 1.1.0
44 * @param object $data Funnel id.
45 * @param string $new_step_id New step id.
46 * @SuppressWarnings(PHPMD.NPathComplexity)
47 */
48 public function import_template( $data, $new_step_id ) {
49 self::$importer->push_to_queue( [
50 'data' => $data,
51 'new_step_id' => $new_step_id,
52 ] );
53 }
54
55 /**
56 * Runs all importing.
57 *
58 * @since 1.1.0
59 */
60 public function run() {
61 self::$importer->save()->dispatch();
62 }
63
64 /**
65 * Imports the step
66 *
67 * @since 1.1.0
68 * @param string $step_id Step id.
69 */
70 public function import_from_api( $step_id ) {
71 if ( empty( $step_id ) ) {
72 return new \WP_Error( 'sellkit_step_importer_has_no_step_id', esc_html__( 'Does not have any step id for importing', 'sellkit' ) );
73 }
74
75 $response = wp_remote_get( "https://templates.getsellkit.com/wp-json/sellkit/v1/step/{$step_id}" );
76
77 $response_code = wp_remote_retrieve_response_code( $response );
78
79 if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) && 200 === (int) $response_code ) {
80 $step_data = json_decode( $response['body'] );
81
82 return $step_data;
83 }
84
85 new \WP_Error( 'sellkit_funnel_step_importing_data_error', esc_html__( 'Something went wrong in importing data from API.', 'sellkit' ) );
86 }
87
88 /**
89 * Imports data to funnel.
90 *
91 * @since 1.1.0
92 * @param object $data Step data.
93 * @param int $funnel_id Funnel id.
94 * @param int $origin_node Origin node id.
95 * @param int $target_node Target node id.
96 * @param int $target_index Target index.
97 * @SuppressWarnings(PHPMD.NPathComplexity)
98 * @SuppressWarnings(PHPMD.CyclomaticComplexity)
99 */
100 public function import_to_funnel( $data, $funnel_id, $origin_node = null, $target_node = null, $target_index = 0 ) {
101 $meta_data = (array) $data->meta;
102 $funnel_step_data = get_post_meta( $funnel_id, 'sellkit_steps', true );
103 $funnel_nodes = get_post_meta( $funnel_id, 'nodes', true );
104
105 if ( empty( $meta_data['nodes'] ) ) {
106 $step_data = unserialize( $meta_data['step_data'] ); //phpcs:ignore
107 }
108
109 if ( ! empty( $meta_data['nodes'] ) ) {
110 $step_data = unserialize( $meta_data['nodes'] ); //phpcs:ignore
111 }
112
113 if ( ! empty( $funnel_nodes ) ) {
114 $funnel_step_data = get_post_meta( $funnel_id, 'nodes', true );
115 }
116
117 unset( $step_data['funnel_id'] );
118 unset( $step_data['number'] );
119 unset( $step_data['data'] );
120 unset( $step_data['targets'] );
121
122 if ( ! empty( $target_node ) ) {
123 $current_target = [ 'nodeId' => $target_node ];
124 }
125
126 $funnel_step_data = ! empty( $funnel_step_data ) ? $funnel_step_data : [];
127 $new_step_data = $this->create_new_step_page( $step_data );
128
129 if ( ! empty( $current_target ) ) {
130 $new_step_data['targets'] = ! is_null( $current_target ) ? [ $current_target ] : [];
131 }
132
133 // Adding current target info the the step.
134 $new_step_data['current_target_index'] = $target_index;
135
136 if ( 'last-node' === $origin_node ) {
137 $first_end_path_node_key = \Sellkit_Admin_Steps::get_first_end_path_node_key( $funnel_step_data );
138
139 $new_step_data['origin_node'] = 'last-node';
140
141 if ( $first_end_path_node_key ) {
142 unset( $funnel_step_data[ $first_end_path_node_key ]['origin_node'] );
143 }
144 }
145
146 $old_node_keys = array_keys( (array) $funnel_step_data );
147 $new_funnel_step_data = (array) $funnel_step_data;
148 $new_step_id = intval( end( $old_node_keys ) ) + 1;
149
150 if (
151 'decision' === $new_step_data['type']['key'] && ! is_null( $target_node ) ||
152 'upsell' === $new_step_data['type']['key'] && ! is_null( $target_node ) ||
153 'downsell' === $new_step_data['type']['key'] && ! is_null( $target_node )
154 ) {
155 $new_step_data['targets'] = [
156 $current_target,
157 $current_target
158 ];
159 }
160
161 $new_funnel_step_data[ $new_step_id ] = $new_step_data;
162
163 if ( 'none' === $origin_node && 'none' === $target_node ) {
164 $new_funnel_step_data = [ 1 => $new_step_data ];
165 }
166
167 if ( 'last-node' !== $origin_node && is_object( $new_funnel_step_data[ $origin_node ]['type'] ) ) {
168 $new_funnel_step_data[ $origin_node ]['type'] = (array) $new_funnel_step_data[ $origin_node ]['type'];
169 }
170
171 if (
172 'last-node' !== $origin_node &&
173 'none' !== $origin_node &&
174 'decision' !== $new_funnel_step_data[ $origin_node ]['type']['key'] &&
175 'upsell' !== $new_funnel_step_data[ $origin_node ]['type']['key'] &&
176 'downsell' !== $new_funnel_step_data[ $origin_node ]['type']['key']
177 ) {
178 $new_funnel_step_data[ $origin_node ]['targets'] = [ [ 'nodeId' => strval( $new_step_id ) ] ];
179 }
180
181 if (
182 'last-node' !== $origin_node &&
183 (
184 'decision' === $new_funnel_step_data[ $origin_node ]['type']['key'] ||
185 'upsell' === $new_funnel_step_data[ $origin_node ]['type']['key'] ||
186 'downsell' === $new_funnel_step_data[ $origin_node ]['type']['key']
187 )
188 ) {
189 if ( is_array( $new_funnel_step_data[ $origin_node ]['targets'] ) && empty( $new_funnel_step_data[ $origin_node ]['targets'][0] ) ) {
190 $new_funnel_step_data[ $origin_node ]['targets'][0] = 'none' !== $target_node ? [ 'nodeId' => $target_node ] : null;
191 }
192
193 if ( is_array( $new_funnel_step_data[ $origin_node ]['targets'] ) && empty( $new_funnel_step_data[ $origin_node ]['targets'][1] ) ) {
194 $new_funnel_step_data[ $origin_node ]['targets'][1] = 'none' !== $target_node ? [ 'nodeId' => $target_node ] : null;
195 }
196
197 $new_funnel_step_data[ $origin_node ]['targets'][ (int) $target_index ] = [ 'nodeId' => strval( $new_step_id ) ];
198 }
199
200 if ( empty( $funnel_nodes ) && 'none' !== $origin_node && 'none' !== $target_node ) {
201 update_post_meta( $funnel_id, 'sellkit_steps', $new_funnel_step_data );
202 }
203
204 if ( ! empty( $funnel_nodes ) || ( 'none' === $origin_node && 'none' === $target_node ) ) {
205 update_post_meta( $funnel_id, 'nodes', $new_funnel_step_data );
206 }
207
208 $args = array(
209 'ID' => $new_step_data['page_id'],
210 'post_content' => $data->post_content,
211 );
212
213 wp_update_post( $args );
214
215 foreach ( $data->meta as $meta_key => $meta_value ) {
216 if ( '_elementor_data' === $meta_key ) {
217
218 if ( ! is_array( $meta_value ) ) {
219 $elementor_data = add_magic_quotes( $meta_value );
220 $elementor_data = json_decode( $elementor_data, true );
221 }
222 update_post_meta( $new_step_data['page_id'], $meta_key, $elementor_data );
223 continue;
224 }
225
226 if ( '_elementor_css' === $meta_key ) {
227 continue;
228 }
229
230 if ( is_serialized( $meta_value, true ) ) {
231 $meta_value = maybe_unserialize( stripslashes( $meta_value ) );
232 }
233
234 if ( 'step_data' === $meta_key ) {
235 $meta_value['funnel_id'] = intval( $funnel_id );
236 }
237
238 update_post_meta( $new_step_data['page_id'], $meta_key, $meta_value );
239 }
240
241 return $new_step_data['page_id'];
242 }
243
244 /**
245 * Filter step data before saving.
246 *
247 * @since 1.1.0
248 * @param array $last_step Step data.
249 */
250 public function create_new_step_page( $last_step ) {
251 $new_step_id = wp_insert_post( [
252 'post_type' => \Sellkit_Admin_Steps::SELLKIT_STEP_POST_TYPE,
253 'post_title' => $last_step['title'],
254 'post_name' => sanitize_title( $last_step['title'] ),
255 'post_status' => 'publish',
256 ] );
257
258 $last_step['page_id'] = $new_step_id;
259 $last_step['slug'] = get_post_field( 'post_name', $new_step_id );
260
261 return $last_step;
262 }
263 }
264