PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.0
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / Users / UsersService.php
surecart / app / src / WordPress / Users Last commit date
CustomerLinkService.php 3 years ago UsersService.php 3 years ago UsersServiceProvider.php 3 years ago
UsersService.php
219 lines
1 <?php
2
3 namespace SureCart\WordPress\Users;
4
5 use SureCart\Models\User;
6
7 /**
8 * WordPress Users service.
9 */
10 class UsersService {
11 /**
12 * Register rest related queries.
13 *
14 * @return void
15 */
16 public function bootstrap() {
17 add_filter( 'rest_user_query', [ $this, 'userMetaQuery' ], 10, 2 );
18 add_filter( 'rest_user_query', [ $this, 'isCustomerQuery' ], 10, 2 );
19 add_filter( 'rest_user_collection_params', [ $this, 'collectionParams' ] );
20 add_filter( 'show_admin_bar', [ $this, 'disableAdminBar' ], 10, 1 );
21 add_action( 'profile_update', [ $this, 'syncUserProfile' ], 10, 3 );
22
23 $this->registerMeta();
24 }
25
26 /**
27 * Fires immediately after an existing user is updated.
28 *
29 * @param int $user_id User ID.
30 * @param WP_User $old_user_data Object containing user's data prior to update.
31 * @param array $userdata The raw array of data passed to wp_insert_user().
32 */
33 public function syncUserProfile( $user_id, $old_user_data, $userdata ) {
34 $customer_ids = \SureCart\Models\User::find( $user_id )->customerIds();
35 if ( is_wp_error( $customer_ids ) || empty( $customer_ids ) ) {
36 return;
37 }
38
39 foreach ( $customer_ids as $id ) {
40 \SureCart\Models\Customer::update(
41 array_filter(
42 [
43 'id' => $id,
44 'first_name' => $userdata['first_name'],
45 'last_name' => $userdata['last_name'],
46 'email' => $userdata['user_email'],
47 'phone' => $userdata['phone'] ?? null,
48 ],
49 function( $x ) {
50 return null !== $x;
51 }
52 )
53 );
54 }
55 }
56
57 /**
58 * Prevent any user who cannot 'edit_posts' (subscribers, customers etc) from seeing the admin bar.
59 *
60 * @param bool $show_admin_bar If should display admin bar.
61 * @return bool
62 */
63 public function disableAdminBar( $show_admin_bar ) {
64 if ( apply_filters( 'surecart_disable_admin_bar', true ) && ! ( current_user_can( 'edit_posts' ) || current_user_can( 'manage_sc_shop_settings' ) ) ) {
65 return false;
66 }
67
68 return $show_admin_bar;
69 }
70
71 /**
72 * Add our query parameters to the rest api.
73 *
74 * @param array $query_params The query parameters.
75 * @return array
76 */
77 public function collectionParams( $query_params ) {
78 $query_params['is_customer'] = [
79 'description' => __( 'Limit result set to users with a customer.', 'surecart' ),
80 'type' => 'boolean',
81 ];
82 $query_params['sc_customer_ids'] = [
83 'description' => __( 'Limit result set to users with specific customer ids.', 'surecart' ),
84 'type' => 'array',
85 'items' => [
86 'type' => 'string',
87 ],
88 ];
89 return $query_params;
90 }
91
92 /**
93 * Register customer id meta.
94 *
95 * @return void
96 */
97 public function registerMeta() {
98 register_meta(
99 'user',
100 'sc_customer_ids',
101 [
102 'type' => 'object',
103 'show_in_rest' => [
104 'schema' => [
105 'type' => 'object',
106 'properties' => [
107 'live' => [
108 'type' => 'string',
109 ],
110 'test' => [
111 'type' => 'string',
112 ],
113 ],
114 ],
115 ],
116 'single' => true,
117 'sanitize_callback' => function( $value ) {
118 return array_filter( array_map( 'sanitize_text_field', (array) $value ) );
119 },
120 'auth_callback' => function () {
121 return current_user_can( 'edit_sc_customers' );
122 },
123 ]
124 );
125
126 register_meta(
127 'user',
128 'default_password_nag',
129 [
130 'type' => 'boolean',
131 'show_in_rest' => true,
132 'single' => true,
133 ]
134 );
135 }
136
137 /**
138 * Allow querying by customer id in the REST API
139 *
140 * @param array $args Query args.
141 * @param \WP_REST_Request $request Request.
142 * @return array
143 */
144 public function userMetaQuery( $args, $request ) {
145 $key = User::getCustomerMetaKey();
146 $customer_ids = $request->get_param( 'sc_customer_ids' );
147
148 // we're only concerned about our param.
149 if ( empty( $customer_ids ) ) {
150 return $args;
151 }
152
153 // lets double-check our permissions in case other permissions fail.
154 if ( ! current_user_can( 'edit_sc_customers' ) ) {
155 return $args;
156 }
157
158 // set the meta query.
159 $args['meta_query'] = [
160 'relation' => 'OR',
161 ];
162
163 foreach ( $customer_ids as $customer_id ) {
164 $args['meta_query'][] = [
165 'key' => $key,
166 'value' => $customer_id,
167 'compare' => 'LIKE',
168 ];
169 }
170
171 return $args;
172 }
173
174 /**
175 * Query only users who are customers or not.
176 *
177 * @param array $args Query args.
178 * @param \WP_REST_Request $request Request.
179 * @return array
180 */
181 public function isCustomerQuery( $args, $request ) {
182 $is_customer = $request->get_param( 'is_customer' );
183 if ( null === $is_customer ) {
184 return $args;
185 }
186
187 if ( $is_customer ) {
188 // exists and not empty.
189 $args['meta_query'] = [
190 'relation' => 'AND',
191 array(
192 'key' => User::getCustomerMetaKey(),
193 'compare' => 'EXISTS',
194 ),
195 array(
196 'key' => User::getCustomerMetaKey(),
197 'value' => '',
198 'compare' => '!=',
199 ),
200 ];
201 } else {
202 $args['meta_query'] = [
203 'relation' => 'OR',
204 array(
205 'key' => User::getCustomerMetaKey(),
206 'compare' => 'NOT EXISTS',
207 ),
208 array(
209 'key' => User::getCustomerMetaKey(),
210 'value' => '',
211 'compare' => '=',
212 ),
213 ];
214 }
215
216 return $args;
217 }
218 }
219