Changeset 11111
- Timestamp:
- 09/17/2016 09:38:42 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-members/classes/class-bp-members-admin.php
r10828 r11111 215 215 add_filter( 'set-screen-option', array( $this, 'signup_screen_options' ), 10, 3 ); 216 216 } 217 } 218 219 /** Users List - Members Types *************************************** 220 */ 221 222 if ( is_admin() && bp_get_member_types() ) { 223 224 // Add "Change type" <select> to WP admin users list table and process bulk members type changes. 225 add_action( 'restrict_manage_users', array( $this, 'users_table_output_type_change_select' ) ); 226 add_action( 'load-users.php', array( $this, 'users_table_process_bulk_type_change' ) ); 227 228 // Add the member type column to the WP admin users list table. 229 add_filter( 'manage_users_columns', array( $this, 'users_table_add_type_column' ) ); 230 add_filter( 'manage_users_custom_column', array( $this, 'users_table_populate_type_cell' ), 10, 3 ); 231 232 // Filter WP admin users list table to include users of the specified type. 233 add_filter( 'pre_get_users', array( $this, 'users_table_filter_by_type' ) ); 217 234 } 218 235 } … … 1906 1923 * 1907 1924 * @param string $action Delete, activate, or resend activation link. 1925 * 1908 1926 * @return string 1909 1927 */ … … 2033 2051 <?php 2034 2052 } 2053 2054 /** Users List Management ****************************************************/ 2055 2056 /** 2057 * Display a dropdown to bulk change the member type of selected user(s). 2058 * 2059 * @since 2.7.0 2060 * 2061 * @param string $which Where this dropdown is displayed - top or bottom. 2062 */ 2063 public function users_table_output_type_change_select( $which = 'top' ) { 2064 2065 // Bail if current user cannot promote users. 2066 if ( ! current_user_can( 'promote_users' ) ) { 2067 return; 2068 } 2069 2070 // `$which` is only passed in WordPress 4.6+. Avoid duplicating controls in earlier versions. 2071 static $displayed = false; 2072 if ( version_compare( bp_get_major_wp_version(), '4.6', '<' ) && $displayed ) { 2073 return; 2074 } 2075 $displayed = true; 2076 2077 $id_name = 'bottom' === $which ? 'bp_change_type2' : 'bp_change_type'; 2078 2079 $types = bp_get_member_types( array(), 'objects' ); ?> 2080 2081 <label class="screen-reader-text" for="<?php echo $id_name; ?>"><?php _e( 'Change member type to…', 'buddypress' ) ?></label> 2082 <select name="<?php echo $id_name; ?>" id="<?php echo $id_name; ?>" style="display:inline-block;float:none;"> 2083 <option value=""><?php _e( 'Change member type to…', 'buddypress' ) ?></option> 2084 2085 <?php foreach( $types as $type ) : ?> 2086 2087 <option value="<?php echo esc_attr( $type->name ); ?>"><?php echo $type->labels['name']; ?></option> 2088 2089 <?php endforeach; ?> 2090 2091 <option value="remove_member_type"><?php _e( 'No Member Type', 'buddypress' ) ?></option> 2092 2093 </select> 2094 <?php 2095 wp_nonce_field( 'bp-bulk-users-change-type-' . bp_loggedin_user_id(), 'bp-bulk-users-change-type-nonce' ); 2096 submit_button( __( 'Change', 'buddypress' ), 'button', 'bp_change_member_type', false ); 2097 } 2098 2099 /** 2100 * Process bulk member type change submission from the WP admin users list table. 2101 * 2102 * @since 2.7.0 2103 */ 2104 public function users_table_process_bulk_type_change() { 2105 // Output the admin notice. 2106 $this->users_type_change_notice(); 2107 2108 // Bail if no users specified. 2109 if ( empty( $_REQUEST['users'] ) ) { 2110 return; 2111 } 2112 2113 // Bail if this isn't a BuddyPress action. 2114 if ( ( empty( $_REQUEST['bp_change_type'] ) && empty( $_REQUEST['bp_change_type2'] ) ) 2115 || empty( $_REQUEST['bp_change_member_type'] ) 2116 ) { 2117 return; 2118 } 2119 2120 // Bail if nonce check fails. 2121 check_admin_referer( 'bp-bulk-users-change-type-' . bp_loggedin_user_id(), 'bp-bulk-users-change-type-nonce' ); 2122 2123 // Bail if current user cannot promote users. 2124 if ( ! current_user_can( 'promote_users' ) ) { 2125 return; 2126 } 2127 2128 $new_type = ''; 2129 if ( ! empty( $_REQUEST['bp_change_type2'] ) ) { 2130 $new_type = sanitize_text_field( $_REQUEST['bp_change_type2'] ); 2131 } elseif ( ! empty( $_REQUEST['bp_change_type'] ) ) { 2132 $new_type = sanitize_text_field( $_REQUEST['bp_change_type'] ); 2133 } 2134 2135 // Check that the selected type actually exists. 2136 if ( 'remove_member_type' != $new_type && null == bp_get_member_type_object( $new_type ) ) { 2137 return; 2138 } 2139 2140 // Run through user ids. 2141 $error = false; 2142 foreach ( (array) $_REQUEST['users'] as $user_id ) { 2143 $user_id = (int) $user_id; 2144 2145 // Get the old member type to check against. 2146 $member_type = bp_get_member_type( $user_id ); 2147 2148 if ( 'remove_member_type' == $new_type ) { 2149 // Remove the current member type, if there's one to remove. 2150 if ( $member_type ) { 2151 $removed = bp_remove_member_type( $user_id, $member_type ); 2152 if ( false == $removed || is_wp_error( $removed ) ) { 2153 $error = true; 2154 } 2155 } 2156 } else { 2157 // Set the new member type. 2158 if ( $new_type !== $member_type ) { 2159 $set = bp_set_member_type( $user_id, $new_type ); 2160 if ( false == $set || is_wp_error( $set ) ) { 2161 $error = true; 2162 } 2163 } 2164 } 2165 } 2166 2167 // If there were any errors, show the error message. 2168 if ( $error ) { 2169 $redirect = add_query_arg( array( 'updated' => 'member-type-change-error' ), wp_get_referer() ); 2170 } else { 2171 $redirect = add_query_arg( array( 'updated' => 'member-type-change-success' ), wp_get_referer() ); 2172 } 2173 2174 wp_redirect( $redirect ); 2175 exit(); 2176 } 2177 2178 /** 2179 * Display an admin notice upon member type bulk update. 2180 * 2181 * @since 2.7.0 2182 */ 2183 public function users_type_change_notice() { 2184 $updated = isset( $_REQUEST['updated'] ) ? $_REQUEST['updated'] : false; 2185 2186 // Display feedback. 2187 if ( $updated && in_array( $updated, array( 'member-type-change-error', 'member-type-change-success' ) ) ) { 2188 2189 if ( 'member-type-change-error' === $updated ) { 2190 $notice = __( 'There was an error while changing member type. Please try again.', 'buddypress' ); 2191 } else { 2192 $notice = __( 'Member type was changed successfully.', 'buddypress' ); 2193 } 2194 2195 bp_core_add_admin_notice( $notice ); 2196 } 2197 } 2198 2199 /** 2200 * Add member type column to the WordPress admin users list table. 2201 * 2202 * @since 2.7.0 2203 * 2204 * @param array $columns Users table columns. 2205 * 2206 * @return array $columns 2207 */ 2208 public function users_table_add_type_column( $columns = array() ) { 2209 $columns[ bp_get_member_type_tax_name() ] = _x( 'Member Type', 'Label for the WP users table member type column' , 'buddypress' ); 2210 2211 return $columns; 2212 } 2213 2214 /** 2215 * Return member's type for display in the WP admin users list table. 2216 * 2217 * @since 2.7.0 2218 * 2219 * @param string $retval 2220 * @param string $column_name 2221 * @param int $user_id 2222 * 2223 * @return string Member type as a link to filter all users. 2224 */ 2225 public function users_table_populate_type_cell( $retval = '', $column_name = '', $user_id = 0 ) { 2226 // Only looking for member type column. 2227 if ( bp_get_member_type_tax_name() !== $column_name ) { 2228 return $retval; 2229 } 2230 2231 // Get the member type. 2232 $type = bp_get_member_type( $user_id ); 2233 2234 // Output the 2235 if ( $type_obj = bp_get_member_type_object( $type ) ) { 2236 $url = add_query_arg( array( 'bp-member-type' => urlencode( $type ) ) ); 2237 $retval = '<a href="' . esc_url( $url ) . '">' . $type_obj->labels['singular_name'] . '</a>'; 2238 } 2239 2240 return $retval; 2241 } 2242 2243 /** 2244 * Filter WP Admin users list table to include users of the specified type. 2245 * 2246 * @param WP_Query $query 2247 * 2248 * @since 2.7.0 2249 */ 2250 public function users_table_filter_by_type( $query ) { 2251 global $pagenow; 2252 2253 if ( is_admin() && 'users.php' === $pagenow && ! empty( $_REQUEST['bp-member-type'] ) ) { 2254 $type_slug = sanitize_text_field( $_REQUEST['bp-member-type'] ); 2255 2256 // Check that the type is registered. 2257 if ( null == bp_get_member_type_object( $type_slug ) ) { 2258 return; 2259 } 2260 2261 // Get the list of users that are assigned to this member type. 2262 $type = get_term_by( 'slug', $type_slug, bp_get_member_type_tax_name() ); 2263 2264 if ( empty( $type->term_id ) ) { 2265 return; 2266 } 2267 2268 $user_ids = get_objects_in_term( $type->term_id, bp_get_member_type_tax_name() ); 2269 2270 if ( $user_ids && ! is_wp_error( $user_ids ) ) { 2271 $query->set( 'include', (array) $user_ids ); 2272 } 2273 } 2274 } 2035 2275 } 2036 2276 endif; // End class_exists check.
Note: See TracChangeset
for help on using the changeset viewer.