PluginProbe
WPFunnels – Funnel Builder for WooCommerce with Checkout & One Click Upsell / 3.10.9
WPFunnels – Funnel Builder for WooCommerce with Checkout & One Click Upsell v3.10.9
3.13.3 3.13.2 3.13.1 3.13.0 3.12.13 3.12.12 3.12.11 3.12.10 3.12.9 3.12.8 3.12.7 3.12.6 3.12.5 3.12.4 3.12.3 3.12.1 3.12.2 3.12.0 3.11.1 3.11.0 3.10.9 3.10.8 3.10.7 3.10.6 2.8.16 All 261 releases
wpfunnels / admin / modules / createFunnel / class-wpfnl-create-funnel.php

class-wpfnl-create-funnel.php in WPFunnels – Funnel Builder for WooCommerce with Checkout & One Click Upsell 3.10.9, at admin/modules/createFunnel/class-wpfnl-create-funnel.php

179 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Create funnel
4 *
5 * @package
6 */
7 namespace WPFunnels\Modules\Admin\CreateFunnel;
8
9 use WPFunnels\Admin\Module\Wpfnl_Admin_Module;
10 use WPFunnels\Traits\SingletonTrait;
11 use WPFunnels\Wpfnl;
12 use WPFunnels\Wpfnl_functions;
13
14 class Module extends Wpfnl_Admin_Module
15 {
16 use SingletonTrait;
17
18 private $builder;
19
20 public function get_view()
21 {
22 $this->builder = Wpfnl_functions::get_builder_type();
23 if (Wpfnl_functions::is_builder_active($this->builder)) {
24 require_once WPFNL_DIR . '/admin/modules/createFunnel/views/view.php';
25 } else {
26 require_once WPFNL_DIR . '/admin/modules/createFunnel/views/builder-not-activated.php';
27 }
28 }
29
30 public function init_ajax()
31 {
32 wp_ajax_helper()->handle('create-funnel')
33 ->with_callback([ $this, 'create_funnel' ])
34 ->with_validation($this->get_validation_data());
35 }
36
37
38 /**
39 * Create funnel by ajax request
40 *
41 * @return array
42 * @since 1.0.0
43 */
44 public function create_funnel( $payload )
45 {
46 // Check if this is a Store Checkout import
47 $is_store_checkout = isset($payload['is_store_checkout']) && filter_var($payload['is_store_checkout'], FILTER_VALIDATE_BOOLEAN);
48
49 $funnel = Wpfnl::$instance->funnel_store;
50 $funnel_id = $funnel->create($payload['funnelName']);
51 $funnel_type = '';
52 if ( $funnel_id ) {
53 // Mark funnel as Store Checkout if applicable
54 if ($is_store_checkout) {
55 update_post_meta( $funnel_id, '_wpfnl_funnel_type', 'store_checkout' );
56 $funnel_type = 'store_checkout';
57 } else {
58 $general_settings = get_option( '_wpfunnels_general_settings' );
59 if( isset($general_settings['funnel_type']) ){
60 if( 'woocommerce' == $general_settings['funnel_type'] ){
61 $general_settings['funnel_type'] = 'sales';
62 update_option( '_wpfunnels_general_settings', $general_settings );
63
64 }
65
66 if( 'sales' == $general_settings['funnel_type'] ){
67 // Check if LMS add-on is active AND at least one LMS plugin (LearnDash or CreatorLMS) is active
68 if( Wpfnl_functions::is_lms_addon_active() && Wpfnl_functions::is_any_lms_plugin_active() && isset($payload['type']) && 'lms' === $payload['type'] ){
69 update_post_meta( $funnel_id, '_wpfnl_funnel_type', 'lms' );
70 $funnel_type = 'lms';
71 }elseif( Wpfnl_functions::is_wc_active() && isset($payload['type']) && 'wc' === $payload['type'] ){
72 update_post_meta( $funnel_id, '_wpfnl_funnel_type', 'wc' );
73 $funnel_type = 'wc';
74 }elseif( isset($payload['type']) && 'lead' === $payload['type'] ){
75 update_post_meta( $funnel_id, '_wpfnl_funnel_type', 'lead' );
76 $funnel_type = 'lead';
77 }
78
79 }else{
80
81 if( isset($payload['type']) && 'lead' === $payload['type'] ){
82 update_post_meta( $funnel_id, '_wpfnl_funnel_type', 'lead' );
83 $funnel_type = 'lead';
84 }
85 }
86 }
87 }
88 }
89
90 if ($is_store_checkout) {
91 // For Store Checkout funnels, always create a fixed checkout → thank you layout
92 $steps = $this->get_store_checkout_default_steps();
93 $templateLayout = new \WPFunnels\Admin\Module\Layout\TemplateLayout($funnel, $funnel_id, $funnel_type, $steps);
94 $templateLayout->create_step();
95 $templateLayout->save_funnel_data();
96
97 // Persist the checkout step ID so the public-facing override can use it
98 require_once WPFNL_DIR . 'includes/core/woocommerce/class-wpfnl-store-checkout-override.php';
99 \WPFunnels\WooCommerce\Wpfnl_Store_Checkout_Override::save_checkout_step_id( $funnel_id );
100 } elseif( !empty($payload['selectedFunnelLayout']['steps']) ){
101 $steps = $payload['selectedFunnelLayout']['steps'];
102 $templateLayout = new \WPFunnels\Admin\Module\Layout\TemplateLayout($funnel, $funnel_id, $funnel_type, $steps);
103 $templateLayout->create_step();
104 $templateLayout->save_funnel_data();
105 }
106
107 $link = add_query_arg(
108 [
109 'page' => 'edit_funnel',
110 'id' => $funnel_id,
111 ],
112 admin_url('admin.php')
113 );
114
115 do_action('wpfunnels_after_funnel_created', $funnel_id, $funnel_type);
116
117 return [
118 'success' => true,
119 'funnelID' => $funnel_id,
120 'redirectUrl' => $link,
121 ];
122 }
123
124
125 /**
126 * Get the default steps for a Store Checkout funnel (checkout + thank you only).
127 *
128 * @return array
129 * @since 3.5.0
130 */
131 private function get_store_checkout_default_steps()
132 {
133 return [
134 [
135 'name' => __( 'Checkout', 'wpfnl' ),
136 'value' => 'checkout',
137 'pos_x' => 156,
138 'pos_y' => 258,
139 ],
140 [
141 'name' => __( 'Thank You', 'wpfnl' ),
142 'value' => 'thankyou',
143 'pos_x' => 399,
144 'pos_y' => 258,
145 ],
146 ];
147 }
148
149
150 /**
151 * Get Store Checkout funnel if exists
152 *
153 * @return WP_Post|false
154 * @since 3.5.0
155 */
156 private function get_store_checkout_funnel()
157 {
158 $args = array(
159 'post_type' => WPFNL_FUNNELS_POST_TYPE,
160 'posts_per_page' => 1,
161 'post_status' => array( 'publish', 'draft' ),
162 'meta_query' => array(
163 array(
164 'key' => '_wpfnl_funnel_type',
165 'value' => 'store_checkout',
166 ),
167 ),
168 );
169
170 $funnels = get_posts( $args );
171 return !empty( $funnels ) ? $funnels[0] : false;
172 }
173
174 public function get_name()
175 {
176 return 'create-funnel';
177 }
178 }
179