PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.4.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.4.0
4.5.1 4.5.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
213 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 ( empty( $customer_ids ) ) {
36 return;
37 }
38
39 foreach ( $customer_ids as $id ) {
40 \SureCart\Models\Customer::update(
41 [
42 'id' => $id,
43 'first_name' => $userdata['first_name'],
44 'last_name' => $userdata['last_name'],
45 'email' => $userdata['user_email'],
46 ]
47 );
48 }
49 }
50
51 /**
52 * Prevent any user who cannot 'edit_posts' (subscribers, customers etc) from seeing the admin bar.
53 *
54 * @param bool $show_admin_bar If should display admin bar.
55 * @return bool
56 */
57 public function disableAdminBar( $show_admin_bar ) {
58 if ( apply_filters( 'surecart_disable_admin_bar', true ) && ! ( current_user_can( 'edit_posts' ) || current_user_can( 'manage_sc_shop_settings' ) ) ) {
59 return false;
60 }
61
62 return $show_admin_bar;
63 }
64
65 /**
66 * Add our query parameters to the rest api.
67 *
68 * @param array $query_params The query parameters.
69 * @return array
70 */
71 public function collectionParams( $query_params ) {
72 $query_params['is_customer'] = [
73 'description' => __( 'Limit result set to users with a customer.', 'surecart' ),
74 'type' => 'boolean',
75 ];
76 $query_params['sc_customer_ids'] = [
77 'description' => __( 'Limit result set to users with specific customer ids.', 'surecart' ),
78 'type' => 'array',
79 'items' => [
80 'type' => 'string',
81 ],
82 ];
83 return $query_params;
84 }
85
86 /**
87 * Register customer id meta.
88 *
89 * @return void
90 */
91 public function registerMeta() {
92 register_meta(
93 'user',
94 'sc_customer_ids',
95 [
96 'type' => 'object',
97 'show_in_rest' => [
98 'schema' => [
99 'type' => 'object',
100 'properties' => [
101 'live' => [
102 'type' => 'string',
103 ],
104 'test' => [
105 'type' => 'string',
106 ],
107 ],
108 ],
109 ],
110 'single' => true,
111 'sanitize_callback' => function( $value ) {
112 return array_filter( array_map( 'sanitize_text_field', (array) $value ) );
113 },
114 'auth_callback' => function () {
115 return current_user_can( 'edit_sc_customers' );
116 },
117 ]
118 );
119
120 register_meta(
121 'user',
122 'default_password_nag',
123 [
124 'type' => 'boolean',
125 'show_in_rest' => true,
126 'single' => true,
127 ]
128 );
129 }
130
131 /**
132 * Allow querying by customer id in the REST API
133 *
134 * @param array $args Query args.
135 * @param \WP_REST_Request $request Request.
136 * @return array
137 */
138 public function userMetaQuery( $args, $request ) {
139 $key = User::getCustomerMetaKey();
140 $customer_ids = $request->get_param( 'sc_customer_ids' );
141
142 // we're only concerned about our param.
143 if ( empty( $customer_ids ) ) {
144 return $args;
145 }
146
147 // lets double-check our permissions in case other permissions fail.
148 if ( ! current_user_can( 'edit_sc_customers' ) ) {
149 return $args;
150 }
151
152 // set the meta query.
153 $args['meta_query'] = [
154 'relation' => 'OR',
155 ];
156
157 foreach ( $customer_ids as $customer_id ) {
158 $args['meta_query'][] = [
159 'key' => $key,
160 'value' => $customer_id,
161 'compare' => 'LIKE',
162 ];
163 }
164
165 return $args;
166 }
167
168 /**
169 * Query only users who are customers or not.
170 *
171 * @param array $args Query args.
172 * @param \WP_REST_Request $request Request.
173 * @return array
174 */
175 public function isCustomerQuery( $args, $request ) {
176 $is_customer = $request->get_param( 'is_customer' );
177 if ( null === $is_customer ) {
178 return $args;
179 }
180
181 if ( $is_customer ) {
182 // exists and not empty.
183 $args['meta_query'] = [
184 'relation' => 'AND',
185 array(
186 'key' => User::getCustomerMetaKey(),
187 'compare' => 'EXISTS',
188 ),
189 array(
190 'key' => User::getCustomerMetaKey(),
191 'value' => '',
192 'compare' => '!=',
193 ),
194 ];
195 } else {
196 $args['meta_query'] = [
197 'relation' => 'OR',
198 array(
199 'key' => User::getCustomerMetaKey(),
200 'compare' => 'NOT EXISTS',
201 ),
202 array(
203 'key' => User::getCustomerMetaKey(),
204 'value' => '',
205 'compare' => '=',
206 ),
207 ];
208 }
209
210 return $args;
211 }
212 }
213