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_password( 32, false );
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 $return( count( $orders ) ); }
/** * Delete WooPayments test orders. * * @return \WP_REST_Response */ public function delete_woopay_test_orders() { $return = function ( $status = 204 ) { return new \WP_REST_Response( null, $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_Response( get_option( 'woocommerce_admin_launch_your_store_survey_completed', 'no' ) ); } }
|