/var/www/html_us/wp-content/plugins/woocommerce/src/Admin/API/LaunchYourStore.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
<?php
/**
 * REST API Launch Your Store Controller
 *
 * Handles requests to /launch-your-store/*
 */

namespace Automattic\WooCommerce\Admin\API;

use 
Automattic\WooCommerce\Admin\WCAdminHelper;

defined'ABSPATH' ) || exit;

/**
 * Launch Your Store controller.
 *
 * @internal
 */
class LaunchYourStore {

    
/**
     * Endpoint namespace.
     *
     * @var string
     */
    
protected $namespace 'wc-admin';

    
/**
     * Route base.
     *
     * @var string
     */
    
protected $rest_base 'launch-your-store';

    
/**
     * Register routes.
     */
    
public function register_routes() {
        
register_rest_route(
            
$this->namespace,
            
'/' $this->rest_base '/initialize-coming-soon',
            array(
                array(
                    
'methods'             => 'POST',
                    
'callback'            => array( $this'initialize_coming_soon' ),
                    
'permission_callback' => array( $this'must_be_shop_manager_or_admin' ),
                ),
            )
        );

        
register_rest_route(
            
$this->namespace,
            
'/' $this->rest_base '/update-survey-status',
            array(
                array(
                    
'methods'             => 'POST',
                    
'callback'            => array( $this'update_survey_status' ),
                    
'permission_callback' => array( $this'must_be_shop_manager_or_admin' ),
                    
'args'                => array(
                        
'status' => array(
                            
'type' => 'string',
                            
'enum' => array( 'yes''no' ),
                        ),
                    ),
                ),
            )
        );

        
register_rest_route(
            
$this->namespace,
            
'/' $this->rest_base '/survey-completed',
            array(
                array(
                    
'methods'             => 'GET',
                    
'callback'            => array( $this'has_survey_completed' ),
                    
'permission_callback' => array( $this'must_be_shop_manager_or_admin' ),
                ),
            )
        );

        
register_rest_route(
            
$this->namespace,
            
'/' $this->rest_base '/woopayments/test-orders/count',
            array(
                array(
                    
'methods'             => 'GET',
                    
'callback'            => array( $this'get_woopay_test_orders_count' ),
                    
'permission_callback' => array( $this'must_be_shop_manager_or_admin' ),
                ),
            )
        );

        
register_rest_route(
            
$this->namespace,
            
'/' $this->rest_base '/woopayments/test-orders',
            array(
                array(
                    
'methods'             => 'DELETE',
                    
'callback'            => array( $this'delete_woopay_test_orders' ),
                    
'permission_callback' => array( $this'must_be_shop_manager_or_admin' ),
                ),
            )
        );
    }

    
/**
     * User must be either shop_manager or administrator.
     *
     * @return bool
     */
    
public function must_be_shop_manager_or_admin() {
        
// phpcs:ignore
        
if ( ! current_user_can'manage_woocommerce' ) && ! current_user_can'administrator' ) ) {
            return 
false;
        }
        return 
true;
    }

    
/**
     * Initializes options for coming soon. Overwrites existing coming soon status but keeps the private link and share key.
     *
     * @return bool|void
     */
    
public function initialize_coming_soon() {
        
$current_user_id get_current_user_id();
        
// Abort if we don't have a user id for some reason.
        
if ( ! $current_user_id ) {
            return;
        }

        
$coming_soon      'yes';
        
$store_pages_only WCAdminHelper::is_site_fresh() ? 'no' 'yes';
        
$private_link     'no';
        
$share_key        wp_generate_password32false );

        
update_option'woocommerce_coming_soon'$coming_soon );
        
update_option'woocommerce_store_pages_only'$store_pages_only );
        
add_option'woocommerce_private_link'$private_link );
        
add_option'woocommerce_share_key'$share_key );

        
wc_admin_record_tracks_event(
            
'launch_your_store_initialize_coming_soon',
            array(
                
'coming_soon'      => $coming_soon,
                
'store_pages_only' => $store_pages_only,
                
'private_link'     => $private_link,
            )
        );

        return 
true;
    }

    
/**
     * Count the test orders created during Woo Payments test mode.
     *
     * @return \WP_REST_Response
     */
    
public function get_woopay_test_orders_count() {
        
$return = function ( $count ) {
            return new 
\WP_REST_Response( array( 'count' => $count ) );
        };

        
$orders wc_get_orders(
            array(
                
// phpcs:ignore
                
'meta_key'   => '_wcpay_mode',
                
// phpcs:ignore
                
'meta_value' => 'test',
                
'return'     => 'ids',
            )
        );

        return 
$returncount$orders ) );
    }

    
/**
     * Delete WooPayments test orders.
     *
     * @return \WP_REST_Response
     */
    
public function delete_woopay_test_orders() {
        
$return = function ( $status 204 ) {
            return new 
\WP_REST_Responsenull$status );
        };

        
$orders wc_get_orders(
            array(
                
// phpcs:ignore
                
'meta_key'   => '_wcpay_mode',
                
// phpcs:ignore
                
'meta_value' => 'test',
            )
        );

        foreach ( 
$orders as $order ) {
            
$order->delete();
        }

        return 
$return();
    }

    
/**
     * Update woocommerce_admin_launch_your_store_survey_completed to yes or no
     *
     * @param \WP_REST_Request $request WP_REST_Request object.
     *
     * @return \WP_REST_Response
     */
    
public function update_survey_status\WP_REST_Request $request ) {
        
update_option'woocommerce_admin_launch_your_store_survey_completed'$request->get_param'status' ) );
        return new 
\WP_REST_Response();
    }

    
/**
     * Return woocommerce_admin_launch_your_store_survey_completed option.
     *
     * @return \WP_REST_Response
     */
    
public function has_survey_completed() {
        return new 
\WP_REST_Responseget_option'woocommerce_admin_launch_your_store_survey_completed''no' ) );
    }
}