Changeset 13675 for sites/trunk/wordpress.org/public_html/wp-content/mu-plugins/pub/profile-helpers.php
- Timestamp:
- 05/08/2024 05:44:41 AM (9 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/mu-plugins/pub/profile-helpers.php
r12254 r13675 30 30 function remove_badge( string $badge, $users ) : bool { 31 31 return badge_api( 'remove', $badge, $users ); 32 } 33 34 /** 35 * Get a list of badges for a given user. 36 * 37 * WARNING: Uncached. Excludes dynamically allocated badges. 38 * 39 * @param $users mixed The user to fetch the badged for. A WP_User/ID/Login/Email. 40 * @return array 41 */ 42 function get_user_badges( $user ) { 43 global $wpdb; 44 45 $user_id = find_user_id( $user ); 46 47 $badges = $wpdb->get_results( $wpdb->prepare( 48 "SELECT slug, name 49 FROM bpmain_wporg_groups_members m 50 JOIN bpmain_wporg_groups g ON m.group_id = g.id 51 WHERE m.user_id = %d 52 ORDER BY slug", 53 $user_id 54 ), ARRAY_A ); 55 56 return array_column( $badges, 'name', 'slug' ); 32 57 } 33 58 … … 76 101 * Assign a badge to a given user. 77 102 * 78 * @param $action string The action to perform; 'add' or 'remove'.103 * @param $action string The action to perform; 'add', 'remove', 'list'. 79 104 * @param $badge string The badge group to assign. 80 105 * @param $users mixed The user(s) to assign to. A WP_User/ID/Login/Email/Slug (or array of) of the user(s) to assign. … … 82 107 */ 83 108 function badge_api( string $action, string $badge, $users ) : bool { 84 $users = (array) $users; 85 $users = array_filter( array_map( function( $user ) { 86 // WP_User-like object. 87 if ( is_object( $user ) ) { 88 return $user->ID ?? false; 89 } 90 91 // User ID. 92 if ( is_numeric( $user ) && absint( $user ) == $user ) { 93 return (int) $user; 94 } 95 96 // Support user login / email / slug. 97 $_user = get_user_by( 'login', $user ); 98 if ( ! $_user && is_email( $user ) ) { 99 $_user = get_user_by( 'email', $user ); 100 } 101 if ( ! $_user ) { 102 $_user = get_user_by( 'slug', $user ); 103 } 104 105 return $_user->ID ?? false; 106 }, $users ) ); 109 $users = is_object( $users ) ? [ $users ] : (array) $users; 110 $users = array_filter( array_map( __NAMESPACE__ . '\find_user_id', $users ) ); 107 111 108 112 if ( ! $action || ! $badge || ! $users ) { 109 113 return false; 114 } 115 116 if ( 'remove' === $action ) { 117 $users = array_filter( 118 $users, 119 function( $user ) use ( $badge ) { 120 return isset( get_user_badges( $user )[ $badge ] ); 121 } 122 ); 123 } elseif ( 'add' === $action ) { 124 $users = array_filter( 125 $users, 126 function( $user ) use ( $badge ) { 127 return ! isset( get_user_badges( $user )[ $badge ] ); 128 } 129 ); 130 } 131 // If there are no users now, then the action must have already occured. 132 if ( ! $users ) { 133 return true; 110 134 } 111 135 … … 120 144 // Note: Success or error message may be present in the return cookies. 121 145 return ( 200 === wp_remote_retrieve_response_code( $request ) ); 146 } 147 148 /** 149 * Find a user ID from a variety of inputs. 150 * 151 * @param $user mixed A WP_User object, user ID, login, email, or slug. 152 * @return int|false 153 */ 154 function find_user_id( $user ) { 155 // WP_User-like object. 156 if ( is_object( $user ) ) { 157 return $user->ID ?? false; 158 } 159 160 // User ID. 161 if ( is_numeric( $user ) && absint( $user ) == $user ) { 162 return (int) $user; 163 } 164 165 // Support user login / email / slug. 166 $_user = get_user_by( 'login', $user ); 167 if ( ! $_user && is_email( $user ) ) { 168 $_user = get_user_by( 'email', $user ); 169 } 170 if ( ! $_user ) { 171 $_user = get_user_by( 'slug', $user ); 172 } 173 174 return $_user->ID ?? false; 122 175 } 123 176
Note: See TracChangeset
for help on using the changeset viewer.