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