PluginProbe
Stream – Activity Log & Audit Trail / 3.2.0
Stream – Activity Log & Audit Trail v3.2.0
4.4.0 4.3.0 4.2.2 4.2.1 trunk 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.1 3.1.1 3.10.0 3.2.0 3.2.1 3.2.2 3.2.3 All 50 releases
stream / connectors / class-connector-users.php

class-connector-users.php in Stream – Activity Log & Audit Trail 3.2.0, at connectors/class-connector-users.php

364 lines 8.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace WP_Stream;
3
4 class Connector_Users extends Connector {
5
6 /**
7 * Connector slug
8 *
9 * @var string
10 */
11 public $name = 'users';
12
13 /**
14 * Stores users object before the user being deleted.
15 */
16 protected $_users_object_pre_deleted = array();
17
18 /**
19 * Actions registered for this connector
20 *
21 * @var array
22 */
23 public $actions = array(
24 'user_register',
25 'profile_update',
26 'password_reset',
27 'retrieve_password',
28 'set_logged_in_cookie',
29 'clear_auth_cookie',
30 'delete_user',
31 'deleted_user',
32 'set_user_role',
33 );
34
35 /**
36 * Return translated connector label
37 *
38 * @return string Translated connector label
39 */
40 public function get_label() {
41 return esc_html__( 'Users', 'stream' );
42 }
43
44 /**
45 * Return translated action term labels
46 *
47 * @return array Action terms label translation
48 */
49 public function get_action_labels() {
50 return array(
51 'updated' => esc_html__( 'Updated', 'stream' ),
52 'created' => esc_html__( 'Created', 'stream' ),
53 'deleted' => esc_html__( 'Deleted', 'stream' ),
54 'password-reset' => esc_html__( 'Password Reset', 'stream' ),
55 'forgot-password' => esc_html__( 'Lost Password', 'stream' ),
56 'login' => esc_html__( 'Log In', 'stream' ),
57 'logout' => esc_html__( 'Log Out', 'stream' ),
58 'switched-to' => esc_html__( 'Switched To', 'stream' ),
59 'switched-back' => esc_html__( 'Switched Back', 'stream' ),
60 'switched-off' => esc_html__( 'Switched Off', 'stream' ),
61 );
62 }
63
64 /**
65 * Return translated context labels
66 *
67 * @return array Context label translations
68 */
69 public function get_context_labels() {
70 return array(
71 'users' => esc_html__( 'Users', 'stream' ),
72 'sessions' => esc_html__( 'Sessions', 'stream' ),
73 'profiles' => esc_html__( 'Profiles', 'stream' ),
74 );
75 }
76
77 /**
78 * Add action links to Stream drop row in admin list screen
79 *
80 * @filter wp_stream_action_links_{connector}
81 *
82 * @param array $links Previous links registered
83 * @param Record $record Stream record
84 *
85 * @return array Action links
86 */
87 public function action_links( $links, $record ) {
88 if ( $record->object_id ) {
89 if ( $link = get_edit_user_link( $record->object_id ) ) {
90 $links [ esc_html__( 'Edit User', 'stream' ) ] = $link;
91 }
92 }
93
94 return $links;
95 }
96
97 /**
98 * Get an array of role lables assigned to a specific user.
99 *
100 * @param object|int $user User object or user ID to get roles for
101 *
102 * @return array $labels An array of role labels
103 */
104 public function get_role_labels( $user ) {
105 if ( is_int( $user ) ) {
106 $user = get_user_by( 'id', $user );
107 }
108
109 if ( ! is_a( $user, 'WP_User' ) ) {
110 return array();
111 }
112
113 global $wp_roles;
114
115 $roles = $wp_roles->get_names();
116 $labels = array();
117
118 foreach ( $roles as $role => $label ) {
119 if ( in_array( $role, (array) $user->roles, true ) ) {
120 $labels[] = translate_user_role( $label );
121 }
122 }
123
124 return $labels;
125 }
126
127 /**
128 * Log user registrations
129 *
130 * @action user_register
131 *
132 * @param int $user_id Newly registered user ID
133 */
134 public function callback_user_register( $user_id ) {
135 $current_user = wp_get_current_user();
136 $registered_user = get_user_by( 'id', $user_id );
137
138 if ( ! $current_user->ID ) { // Non logged-in user registered themselves
139 $message = esc_html__( 'New user registration', 'stream' );
140 $user_to_log = $registered_user->ID;
141 } else { // Current logged-in user created a new user
142 $message = _x(
143 'New user account created for %1$s (%2$s)',
144 '1: User display name, 2: User role',
145 'stream'
146 );
147 $user_to_log = $current_user->ID;
148 }
149
150 $this->log(
151 $message,
152 array(
153 'display_name' => ( $registered_user->display_name ) ? $registered_user->display_name : $registered_user->user_login,
154 'roles' => implode( ', ', $this->get_role_labels( $user_id ) ),
155 ),
156 $registered_user->ID,
157 'users',
158 'created',
159 $user_to_log
160 );
161 }
162
163 /**
164 * Log profile update
165 *
166 * @action profile_update
167 *
168 * @param int $user_id registered user ID
169 * @param \WP_User $user registered user object
170 */
171 public function callback_profile_update( $user_id, $user ) {
172 unset( $user_id );
173
174 $this->log(
175 __( '%s\'s profile was updated', 'stream' ),
176 array(
177 'display_name' => $user->display_name,
178 ),
179 $user->ID,
180 'profiles',
181 'updated'
182 );
183 }
184
185 /**
186 * Log role transition
187 *
188 * @action set_user_role
189 *
190 * @param int $user_id
191 * @param string $new_role
192 * @param array $old_roles
193 */
194 public function callback_set_user_role( $user_id, $new_role, $old_roles ) {
195 if ( empty( $old_roles ) ) {
196 return;
197 }
198
199 global $wp_roles;
200
201 $this->log(
202 _x(
203 '%1$s\'s role was changed from %2$s to %3$s',
204 '1: User display name, 2: Old role, 3: New role',
205 'stream'
206 ),
207 array(
208 'display_name' => get_user_by( 'id', $user_id )->display_name,
209 'old_role' => translate_user_role( $wp_roles->role_names[ $old_roles[0] ] ),
210 'new_role' => translate_user_role( $wp_roles->role_names[ $new_role ] ),
211 ),
212 $user_id,
213 'profiles',
214 'updated'
215 );
216 }
217
218 /**
219 * Log password reset
220 *
221 * @action password_reset
222 *
223 * @param \WP_User $user
224 */
225 public function callback_password_reset( $user ) {
226 $this->log(
227 __( '%s\'s password was reset', 'stream' ),
228 array(
229 'email' => $user->display_name,
230 ),
231 $user->ID,
232 'profiles',
233 'password-reset',
234 $user->ID
235 );
236 }
237
238 /**
239 * Log user requests to retrieve passwords
240 *
241 * @action retrieve_password
242 *
243 * @param string $user_login
244 */
245 public function callback_retrieve_password( $user_login ) {
246 if ( wp_stream_filter_var( $user_login, FILTER_VALIDATE_EMAIL ) ) {
247 $user = get_user_by( 'email', $user_login );
248 } else {
249 $user = get_user_by( 'login', $user_login );
250 }
251
252 $this->log(
253 __( '%s\'s password was requested to be reset', 'stream' ),
254 array( 'display_name' => $user->display_name ),
255 $user->ID,
256 'sessions',
257 'forgot-password',
258 $user->ID
259 );
260 }
261
262 /**
263 * Log user login
264 *
265 * @action set_logged_in_cookie
266 *
267 * @param string $logged_in_cookie
268 * @param int $expire
269 * @param int $expiration
270 * @param int $user_id
271 */
272 public function callback_set_logged_in_cookie( $logged_in_cookie, $expire, $expiration, $user_id ) {
273 unset( $logged_in_cookie );
274 unset( $expire );
275 unset( $expiration );
276 $user = get_user_by( 'id', $user_id );
277
278 $this->log(
279 __( '%s logged in', 'stream' ),
280 array( 'display_name' => $user->display_name ),
281 $user->ID,
282 'sessions',
283 'login',
284 $user->ID
285 );
286 }
287
288 /**
289 * Log user logout
290 *
291 * @action clear_auth_cookie
292 */
293 public function callback_clear_auth_cookie() {
294 $user = wp_get_current_user();
295
296 // For some reason, incognito mode calls clear_auth_cookie on failed login attempts
297 if ( empty( $user ) || ! $user->exists() ) {
298 return;
299 }
300
301 $this->log(
302 __( '%s logged out', 'stream' ),
303 array( 'display_name' => $user->display_name ),
304 $user->ID,
305 'sessions',
306 'logout',
307 $user->ID
308 );
309 }
310
311 /**
312 * There's no logging in this callback's action, the reason
313 * behind this hook is so that we can store user objects before
314 * being deleted. During `deleted_user` hook, our callback
315 * receives $user_id param but it's useless as the user record
316 * was already removed from DB.
317 *
318 * @action delete_user
319 * @param int $user_id User ID that maybe deleted
320 */
321 public function callback_delete_user( $user_id ) {
322 if ( ! isset( $this->_users_object_pre_deleted[ $user_id ] ) ) {
323 $this->_users_object_pre_deleted[ $user_id ] = get_user_by( 'id', $user_id );
324 }
325 }
326
327 /**
328 * Log deleted user.
329 *
330 * @action deleted_user
331 * @param int $user_id Deleted user ID
332 */
333 public function callback_deleted_user( $user_id ) {
334 $user = wp_get_current_user();
335
336 if ( isset( $this->_users_object_pre_deleted[ $user_id ] ) ) {
337 $message = _x(
338 '%1$s\'s account was deleted (%2$s)',
339 '1: User display name, 2: User roles',
340 'stream'
341 );
342 $display_name = $this->_users_object_pre_deleted[ $user_id ]->display_name;
343 $deleted_user = $this->_users_object_pre_deleted[ $user_id ];
344 unset( $this->_users_object_pre_deleted[ $user_id ] );
345 } else {
346 $message = esc_html__( 'User account #%d was deleted', 'stream' );
347 $display_name = $user_id;
348 $deleted_user = $user_id;
349 }
350
351 $this->log(
352 $message,
353 array(
354 'display_name' => $display_name,
355 'roles' => implode( ', ', $this->get_role_labels( $deleted_user ) ),
356 ),
357 $user_id,
358 'users',
359 'deleted',
360 $user->ID
361 );
362 }
363 }
364