Ticket #8045: 8045.5.patch
File 8045.5.patch, 50.8 KB (added by , 6 years ago) |
---|
-
new file src/bp-core/bp-core-rest-api.php
diff --git src/bp-core/bp-core-rest-api.php src/bp-core/bp-core-rest-api.php new file mode 100644 index 000000000..d4ad8319c
- + 1 <?php 2 /** 3 * Core REST API functions. 4 * 5 * @package BuddyPress 6 * @subpackage Core 7 * @since 5.0.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Is the BP REST plugin is active? 15 * 16 * @since 5.0.0 17 * 18 * @return boolean True if the BP REST plugin is active. False otherwise. 19 */ 20 function bp_rest_is_plugin_active() { 21 return (bool) has_action( 'bp_rest_api_init', 'bp_rest', 5 ); 22 } 23 24 /** 25 * Check the availability of the BP REST API. 26 * 27 * @since 5.0.0 28 * 29 * @return boolean True if the BP REST API is available. False otherwise. 30 */ 31 function bp_rest_api_is_available() { 32 /** 33 * Filter here to disable the BP REST API. 34 * 35 * The BP REST API requires at least WordPress 4.7.0 36 * 37 * @since 5.0.0 38 * 39 * @param boolean $value True if the BP REST API is available. False otherwise. 40 */ 41 return apply_filters( 'bp_rest_api_is_available', function_exists( 'create_initial_rest_routes' ) && bp_rest_is_plugin_active() ); 42 } 43 44 /** 45 * Register the jQuery.ajax wrapper for BP REST API requests. 46 * 47 * @since 5.0.0 48 */ 49 function bp_rest_api_register_request_script() { 50 if ( ! bp_rest_api_is_available() ) { 51 return; 52 } 53 54 $dependencies = array( 'jquery' ); 55 56 // The wrapper for WP REST API requests was introduced in WordPress 4.9.0 57 if ( wp_script_is( 'wp-api-request', 'registered' ) ) { 58 $dependencies = array( 'wp-api-request' ); 59 } 60 61 wp_register_script( 62 'bp-api-request', 63 sprintf( '%1$sbp-core/js/bp-api-request%2$s.js', buddypress()->plugin_url, bp_core_get_minified_asset_suffix() ), 64 $dependencies, 65 bp_get_version(), 66 true 67 ); 68 wp_localize_script( 69 'bp-api-request', 70 'bpApiSettings', 71 array( 72 'root' => esc_url_raw( get_rest_url() ), 73 'nonce' => wp_create_nonce( 'wp_rest' ), 74 ) 75 ); 76 } 77 add_action( 'bp_init', 'bp_rest_api_register_request_script' ); -
new file src/bp-core/js/bp-api-request.js
diff --git src/bp-core/js/bp-api-request.js src/bp-core/js/bp-api-request.js new file mode 100644 index 000000000..adae8c848
- + 1 /** 2 * jQuery.ajax wrapper for BP REST API requests. 3 * 4 * @since 5.0.0 5 * @output bp-core/js/bp-api-request.js 6 */ 7 /* global bpApiSettings */ 8 window.bp = window.bp || {}; 9 10 ( function( wp, bp, $ ) { 11 // Bail if not set 12 if ( typeof bpApiSettings === 'undefined' ) { 13 return; 14 } 15 16 bp.isRestEnabled = true; 17 18 // Polyfill wp.apiRequest if WordPress < 4.9 19 bp.apiRequest = wp.apiRequest || function( options ) { 20 var url = bpApiSettings.root; 21 22 if ( options.path ) { 23 url = url + options.path.replace( /^\//, '' ); 24 } 25 26 options.url = url; 27 options.beforeSend = function( xhr ) { 28 xhr.setRequestHeader( 'X-WP-Nonce', bpApiSettings.nonce ); 29 }; 30 31 return $.ajax( options ); 32 }; 33 34 } )( window.wp || {}, window.bp, jQuery ); -
src/bp-groups/admin/css/admin-rtl.css
diff --git src/bp-groups/admin/css/admin-rtl.css src/bp-groups/admin/css/admin-rtl.css index cf0df3cf0..16665581b 100644
table.bp-group-members .urole-column { 140 140 padding-left: 20px; 141 141 } 142 142 143 #group-manage-members-ui .subnav-filters .filter.last { 144 float: left; 145 } 146 147 #group-manage-members-ui .subnav-filters .left-menu { 148 float: right; 149 } 150 151 #group-manage-members-ui .subnav-filters .group-members-paginate-button:last-child { 152 margin-left: 2em; 153 } 154 155 #group-manage-members-ui .subnav-filters .dashicons { 156 padding-top: 2px; 157 } 158 159 #group-manage-members-ui .uname-column .profile-photo { 160 margin-left: 1em; 161 } 162 163 #bp-no-group-members .bp-feedback.info { 164 background: #fff; 165 border-right: 4px solid #00a0d2; 166 box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); 167 margin: 5px 5px 2px; 168 padding: 1px 12px; 169 } 170 171 #bp-no-group-members .bp-feedback.info p { 172 margin: 0.5em 0; 173 padding: 2px; 174 } 175 143 176 @media screen and (max-width: 782px) { 144 177 145 178 .bp-groups-settings-section label { -
src/bp-groups/admin/css/admin.css
diff --git src/bp-groups/admin/css/admin.css src/bp-groups/admin/css/admin.css index 0a7887a10..8f1a877b9 100644
table.bp-group-members .urole-column { 140 140 padding-right: 20px; 141 141 } 142 142 143 #group-manage-members-ui .subnav-filters .filter.last { 144 float: right; 145 } 146 147 #group-manage-members-ui .subnav-filters .left-menu { 148 float: left; 149 } 150 151 #group-manage-members-ui .subnav-filters .group-members-paginate-button:last-child { 152 margin-right: 2em; 153 } 154 155 #group-manage-members-ui .subnav-filters .dashicons { 156 padding-top: 2px; 157 } 158 159 #group-manage-members-ui .uname-column .profile-photo { 160 margin-right: 1em; 161 } 162 163 #bp-no-group-members .bp-feedback.info { 164 background: #fff; 165 border-left: 4px solid #00a0d2; 166 box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); 167 margin: 5px 5px 2px; 168 padding: 1px 12px; 169 } 170 171 #bp-no-group-members .bp-feedback.info p { 172 margin: 0.5em 0; 173 padding: 2px; 174 } 175 143 176 @media screen and (max-width: 782px) { 144 177 145 178 .bp-groups-settings-section label { -
src/bp-groups/bp-groups-admin.php
diff --git src/bp-groups/bp-groups-admin.php src/bp-groups/bp-groups-admin.php index dd504673a..56338699a 100644
function bp_groups_admin_edit_metabox_add_new_members( $item ) { 891 891 * @param BP_Groups_Group $item The BP_Groups_Group object for the current group. 892 892 */ 893 893 function bp_groups_admin_edit_metabox_members( $item ) { 894 // Use the BP REST API if it supported. 895 if ( bp_rest_api_is_available() && bp_groups_has_manage_group_members_templates() ) { 896 wp_enqueue_script( 'bp-group-manage-members' ); 897 wp_localize_script( 898 'bp-group-manage-members', 899 'bpGroupManageMembersSettings', 900 bp_groups_get_group_manage_members_script_data( $item->id ) 901 ); 902 903 bp_get_template_part( 'common/js-templates/group-members/index' ); 904 905 /** 906 * Echo out the JavaScript variable. 907 * This seems to be required by the autocompleter, leaving this here for now... 908 */ 909 echo '<script type="text/javascript">var group_id = "' . esc_js( $item->id ) . '";</script>'; 910 return; 911 } 894 912 895 913 // Pull up a list of group members, so we can separate out the types 896 914 // We'll also keep track of group members here to place them into a -
new file src/bp-groups/bp-groups-cssjs.php
diff --git src/bp-groups/bp-groups-cssjs.php src/bp-groups/bp-groups-cssjs.php new file mode 100644 index 000000000..61368a56a
- + 1 <?php 2 /** 3 * Groups component CSS/JS 4 * 5 * @package BuddyPress 6 * @subpackage GroupsScripts 7 * @since 5.0.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Register Groups JavaScripts. 15 * 16 * @since 5.0.0 17 */ 18 function bp_groups_register_scripts() { 19 wp_register_script( 20 'bp-group-manage-members', 21 sprintf( '%1$sbp-groups/js/manage-members%2$s.js', buddypress()->plugin_url, bp_core_get_minified_asset_suffix() ), 22 array( 'json2', 'wp-backbone', 'bp-api-request' ), 23 bp_get_version(), 24 true 25 ); 26 } 27 add_action( 'bp_enqueue_scripts', 'bp_groups_register_scripts', 1 ); 28 add_action( 'bp_admin_enqueue_scripts', 'bp_groups_register_scripts', 1 ); 29 30 /** 31 * Get JavaScript data for the Manage Group Members UI. 32 * 33 * @since 5.0.0 34 * 35 * @param integer $group_id Required. The Group ID whose members has to be managed. 36 * @return array The JavaScript data. 37 */ 38 function bp_groups_get_group_manage_members_script_data( $group_id = 0 ) { 39 if ( ! $group_id ) { 40 return array(); 41 } else { 42 $group_id = (int) $group_id; 43 } 44 45 $path = sprintf( '/%1$s/%2$s/%3$s/%4$s/members?exclude_admins=false', 46 bp_rest_namespace(), 47 bp_rest_version(), 48 buddypress()->groups->id, 49 $group_id 50 ); 51 52 $preloaded_members = array(); 53 if ( function_exists( 'rest_preload_api_request' ) ) { 54 $preloaded_members = rest_preload_api_request( '', $path ); 55 } 56 57 return array( 58 'path' => remove_query_arg( 'exclude_admins', $path ), 59 'preloaded' => reset( $preloaded_members ), 60 'roles' => bp_groups_get_group_roles(), 61 ); 62 } -
src/bp-groups/bp-groups-functions.php
diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php index b391afd76..e51263ca1 100644
function groups_avatar_upload_dir( $group_id = 0 ) { 1111 1111 1112 1112 /** Group Member Status Checks ************************************************/ 1113 1113 1114 /** 1115 * Get the Group roles. 1116 * 1117 * @since 5.0.0 1118 * 1119 * @return array The list of Group role objects. 1120 */ 1121 function bp_groups_get_group_roles() { 1122 return array( 1123 'admin' => (object) array( 1124 'id' => 'admin', 1125 'name' => __( 'Administrator', 'buddypress' ), 1126 'is_admin' => true, 1127 'is_banned' => false, 1128 'is_confirmed' => true, 1129 'is_mod' => false, 1130 ), 1131 'mod' => (object) array( 1132 'id' => 'mod', 1133 'name' => __( 'Moderator', 'buddypress' ), 1134 'is_admin' => false, 1135 'is_banned' => false, 1136 'is_confirmed' => true, 1137 'is_mod' => true, 1138 ), 1139 'member' => (object) array( 1140 'id' => 'member', 1141 'name' => __( 'Member', 'buddypress' ), 1142 'is_admin' => false, 1143 'is_banned' => false, 1144 'is_confirmed' => true, 1145 'is_mod' => false, 1146 ), 1147 'banned' => (object) array( 1148 'id' => 'banned', 1149 'name' => __( 'Banned', 'buddypress' ), 1150 'is_admin' => false, 1151 'is_banned' => true, 1152 'is_confirmed' => true, 1153 'is_mod' => false, 1154 ), 1155 ); 1156 } 1157 1114 1158 /** 1115 1159 * Check whether a user is an admin of a given group. 1116 1160 * -
src/bp-groups/bp-groups-template.php
diff --git src/bp-groups/bp-groups-template.php src/bp-groups/bp-groups-template.php index 575eeaceb..9096c4b39 100644
function bp_groups_get_profile_stats( $args = '' ) { 6217 6217 */ 6218 6218 return apply_filters( 'bp_groups_get_profile_stats', $r['output'], $r ); 6219 6219 } 6220 6221 /** 6222 * Check if the active template pack includes the Group Membership management UI templates. 6223 * 6224 * @since 5.0.0 6225 * 6226 * @return boolean True if the active template pack includes the Group Membership management UI templates. 6227 * False otherwise. 6228 */ 6229 function bp_groups_has_manage_group_members_templates() { 6230 return file_exists( bp_locate_template( 'common/js-templates/group-members/index.php' ) ); 6231 } -
src/bp-groups/classes/class-bp-groups-component.php
diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php index f7d45658d..99c5a7f31 100644
class BP_Groups_Component extends BP_Component { 128 128 'template', 129 129 'adminbar', 130 130 'functions', 131 'notifications' 131 'notifications', 132 'cssjs', 132 133 ); 133 134 134 135 // Conditional includes. -
new file src/bp-groups/js/manage-members.js
diff --git src/bp-groups/js/manage-members.js src/bp-groups/js/manage-members.js new file mode 100644 index 000000000..991722f0b
- + 1 /* global bpGroupManageMembersSettings, _, Backbone */ 2 /* @version 5.0.0 */ 3 4 ( function( wp, bp, $ ) { 5 6 // Bail if not set 7 if ( typeof bpGroupManageMembersSettings === 'undefined' || ! bp.isRestEnabled ) { 8 return; 9 } 10 11 // Copy useful WP Objects into BP. 12 _.extend( bp, _.pick( wp, 'Backbone', 'template' ) ); 13 14 bp.Models = bp.Models || {}; 15 bp.Collections = bp.Collections || {}; 16 bp.Views = bp.Views || {}; 17 18 /** 19 * Model for the Member of the displayed group. 20 */ 21 bp.Models.groupMember = Backbone.Model.extend( { 22 defaults: { 23 id: 0, 24 name: '', 25 avatar_urls : {}, 26 is_admin: false, 27 is_banned: false, 28 is_confirmed: false, 29 is_mod: false, 30 link: '' 31 }, 32 options : { 33 path: bpGroupManageMembersSettings.path, 34 type: 'POST', 35 data: {}, 36 dataType: 'json' 37 }, 38 39 initialize: function() { 40 // Make sure to reset data & path on model's sync. 41 this.on( 'sync', this.resetRequestOptions, this ); 42 }, 43 44 resetRequestOptions: function() { 45 this.options.data = {}; 46 this.options.path = bpGroupManageMembersSettings.path; 47 }, 48 49 sync: function( method, model, options ) { 50 options = options || {}; 51 options.context = this; 52 var data = options.data || {}; 53 this.options.path = this.options.path.concat( '/' + model.get( 'id' ) ); 54 55 _.extend( options, this.options ); 56 _.extend( options.data, data ); 57 58 if ( 'delete' === method || 'update' === method ) { 59 if ( 'delete' === method ) { 60 options.headers = { 'X-HTTP-Method-Override': 'DELETE' }; 61 } else { 62 options.headers = { 'X-HTTP-Method-Override': 'PUT' }; 63 } 64 65 return bp.apiRequest( options ); 66 } 67 }, 68 69 parse: function( response ) { 70 if ( _.isArray( response ) ) { 71 response = _.first( response ); 72 } 73 74 return response; 75 } 76 } ); 77 78 /** 79 * Collection for the Members of the displayed group. 80 */ 81 bp.Collections.groupMembers = Backbone.Collection.extend( { 82 model: bp.Models.groupMember, 83 options : { 84 path: bpGroupManageMembersSettings.path, 85 type: 'GET', 86 data: {}, 87 dataType: 'json' 88 }, 89 90 initialize: function() { 91 // Make sure to reset data on collection's reset. 92 this.on( 'reset', function() { 93 this.options.data = {}; 94 }, this ); 95 }, 96 97 sync: function( method, collection, options ) { 98 options = options || {}; 99 options.context = this; 100 var data = options.data || {}; 101 102 _.extend( options, this.options ); 103 _.extend( options.data, data ); 104 105 if ( 'read' === method ) { 106 var self = this, success = options.success; 107 options.success = function( data, textStatus, request ) { 108 if ( ! _.isUndefined( request ) ) { 109 self.totalPages = parseInt( request.getResponseHeader( 'X-WP-TotalPages' ), 10 ); 110 self.totalGroupMembers = parseInt( request.getResponseHeader( 'X-WP-Total' ), 10 ); 111 } 112 113 self.currentPage = options.data.page || 1; 114 115 if ( success ) { 116 return success.apply( this, arguments ); 117 } 118 }; 119 120 return bp.apiRequest( options ); 121 } 122 } 123 } ); 124 125 // Extend wp.Backbone.View with .prepare(). 126 bp.View = bp.View || bp.Backbone.View.extend( { 127 prepare: function() { 128 if ( ! _.isUndefined( this.model ) && _.isFunction( this.model.toJSON ) ) { 129 return this.model.toJSON(); 130 } else { 131 return {}; 132 } 133 } 134 } ); 135 136 bp.Views.GroupMemberUpdatingInfo = bp.View.extend( { 137 tagName: 'p', 138 template : bp.template( 'bp-manage-members-updating' ), 139 140 initialize: function() { 141 this.model = new Backbone.Model( { 142 type: this.options.value 143 } ); 144 } 145 } ); 146 147 bp.Views.GroupMemberErrorInfo = bp.View.extend( { 148 tagName: 'p', 149 template : bp.template( 'bp-manage-members-error' ), 150 151 initialize: function() { 152 this.model = new Backbone.Model( { 153 message: this.options.value 154 } ); 155 } 156 } ); 157 158 bp.Views.GroupsMembersLabel = bp.Views.GroupMemberUpdatingInfo.extend( { 159 tagName: 'label', 160 template: bp.template( 'bp-manage-members-label' ) 161 } ); 162 163 bp.Views.GroupRolesDropDown = bp.View.extend( { 164 tagName: 'select', 165 filters: _.extend( { all: { name: 'All members' } }, bpGroupManageMembersSettings.roles ), 166 167 events: { 168 change: 'change' 169 }, 170 171 initialize: function() { 172 if ( this.options.omits ) { 173 this.filters = _.omit( this.filters, this.options.omits ); 174 } 175 176 // Build `<option>` elements. 177 this.$el.html( _.chain( this.filters ).map( function( filter, value ) { 178 var optionOutput = $( '<option></option>' ).val( value ).html( filter.name )[0]; 179 180 if ( this.options.currentRole && value === this.options.currentRole ) { 181 return { 182 el: $( optionOutput ).prop( 'selected', true ) 183 }; 184 } else { 185 return { 186 el: optionOutput 187 }; 188 } 189 }, this ).pluck( 'el' ).value() ); 190 }, 191 192 change: function( event ) { 193 var role = $( event.target ).val(), queryArgs = { roles: [ role ] }; 194 195 if ( ! this.collection ) { 196 return; 197 } 198 199 if ( 'all' === role ) { 200 // Unset the current role. 201 this.collection.currentRole = ''; 202 203 queryArgs = { 'exclude_admins': false }; 204 } else { 205 // Set the current role. 206 this.collection.currentRole = role; 207 } 208 209 // Reset the current page. 210 this.collection.currentPage = 1; 211 212 queryArgs.page = 1; 213 $( '#manage-members-search' ).val( '' ); 214 215 this.collection.fetch( { 216 data: queryArgs, 217 reset: true 218 } ); 219 } 220 } ); 221 222 bp.Views.GroupMembersSearch = bp.View.extend( { 223 className: 'bp-dir-search-form', 224 tagName: 'form', 225 template: bp.template( 'bp-manage-members-search' ), 226 227 events: { 228 'click #manage-members-search-submit' : 'searchMember' 229 }, 230 231 searchMember: function( event ) { 232 event.preventDefault(); 233 234 var searchTerms = $( '#manage-members-search' ).val(), 235 queryArgs = _.extend( this.collection.options.data, { search: searchTerms, page: 1 } ); 236 237 // Reset the current page. 238 this.collection.currentPage = 1; 239 240 if ( ! this.collection.currentRole ) { 241 queryArgs.exclude_admins = false; 242 } else { 243 queryArgs.roles = [ this.collection.currentRole ]; 244 } 245 246 this.collection.fetch( { 247 data: queryArgs, 248 reset: true 249 } ); 250 } 251 } ); 252 253 bp.Views.GroupsMembersPagination = bp.View.extend( { 254 className: 'bp-pagination', 255 template: bp.template( 'bp-manage-members-paginate' ), 256 257 events: { 258 'click .group-members-paginate-button' : 'queryPage' 259 }, 260 261 initialize: function() { 262 this.collection.on( 'reset', this.setPagination, this ); 263 }, 264 265 setPagination: function( collection ) { 266 var attributes = _.pick( collection, [ 'currentPage', 'totalGroupMembers', 'totalPages' ] ); 267 268 if ( attributes.totalPages > 1 ) { 269 attributes.nextPage = attributes.currentPage + 1; 270 attributes.prevPage = attributes.currentPage - 1; 271 } 272 273 this.model = new Backbone.Model( attributes ); 274 this.render(); 275 }, 276 277 queryPage: function( event ) { 278 event.preventDefault(); 279 280 var page = $( event.currentTarget ).data( 'page' ), 281 searchTerms = $( '#manage-members-search' ).val(), 282 queryArgs = _.extend( this.collection.options.data, { search: searchTerms, page: page } ); 283 284 if ( ! this.collection.currentRole ) { 285 queryArgs.exclude_admins = false; 286 } else { 287 queryArgs.roles = [ this.collection.currentRole ]; 288 } 289 290 this.collection.fetch( { 291 data: queryArgs, 292 reset: true 293 } ); 294 } 295 } ); 296 297 bp.Views.GroupMembersNoMatches = bp.View.extend( { 298 tagName: 'tr', 299 template : bp.template( 'bp-manage-members-empty-row' ) 300 } ); 301 302 bp.Views.GroupMembersListRow = bp.View.extend( { 303 tagName: 'tr', 304 template : bp.template( 'bp-manage-members-row' ), 305 306 events: { 307 'click .group-member-actions a' : 'doMemberAction', 308 'change .group-member-edit select' : 'editMemberRole' 309 }, 310 311 initialize: function() { 312 var roleProps = [ 'is_admin', 'is_banned', 'is_confirmed', 'is_mod' ], 313 self = this; 314 315 _.each( bpGroupManageMembersSettings.roles, function( props ) { 316 if ( _.isMatch( self.model.attributes, _.pick( props, roleProps ) ) ) { 317 self.model.set( 'role', _.pick( props, ['id', 'name'] ), { silent: true } ); 318 } 319 } ); 320 321 this.model.collection.on( 'reset', this.clearRow, this ); 322 }, 323 324 clearRow: function() { 325 this.views.view.remove(); 326 }, 327 328 renderEditForm: function() { 329 var userId = this.model.get( 'id' ); 330 331 this.render(); 332 333 this.views.set( '#edit-group-member-' + userId, [ 334 new bp.Views.GroupsMembersLabel( { value: userId, attributes: { 'for': 'group-member' + userId + '-role' } } ), 335 new bp.Views.GroupRolesDropDown( { id: 'group-member' + userId + '-role', omits: [ 'all', 'banned' ], currentRole: this.model.get( 'role' ).id } ).render() 336 ] ); 337 }, 338 339 resetRow: function() { 340 this.model.set( 'editing', false ); 341 342 return this.render(); 343 }, 344 345 getRoleObject: function( roleId ) { 346 var roles = bpGroupManageMembersSettings.roles; 347 348 if ( _.isUndefined( roles[ roleId ] ) ) { 349 return {}; 350 } 351 352 return _.extend( 353 { role: _.pick( roles[ roleId ], ['id', 'name'] ) }, 354 _.pick( roles[ roleId ], [ 'is_admin', 'is_banned', 'is_confirmed', 'is_mod' ] ) 355 ); 356 }, 357 358 doMemberAction: function( event ) { 359 event.preventDefault(); 360 361 var action = $( event.target ).data( 'action' ), self = this; 362 363 if ( 'edit' === action ) { 364 this.model.set( 'editing', true ); 365 return this.renderEditForm(); 366 367 } else if ( 'abort' === action ) { 368 return this.resetRow(); 369 370 } else if ( 'ban' === action || 'unban' === action ) { 371 var newRole = ( 'ban' === action ) ? 'banned' : 'member', roleObject = this.getRoleObject( newRole ); 372 373 if ( ! roleObject ) { 374 return this.resetRow(); 375 } else { 376 this.model.set( 'managingBan', true ); 377 this.render(); 378 } 379 380 // Display user feedback. 381 this.views.set( '#edit-group-member-' + this.model.get( 'id' ), new bp.Views.GroupMemberUpdatingInfo( { value: action } ).render() ); 382 383 // Update Group member's role. 384 this.model.save( roleObject, { 385 wait: true, 386 data: { action: action }, 387 success: function( model) { 388 self.model.collection.remove( model ); 389 return self.clearRow(); 390 }, 391 error: function( model, response ) { 392 self.views.set( '#edit-group-member-' + model.get( 'id' ), new bp.Views.GroupMemberErrorInfo( { value: response.responseJSON.message } ).render() ); 393 394 // Make sure to reset request options. 395 model.resetRequestOptions(); 396 model.set( 'managingBan', false ); 397 } 398 } ); 399 } else if ( 'remove' === action ) { 400 this.model.set( 'removing', true ); 401 this.render(); 402 403 // Display user feedback. 404 this.views.set( '#edit-group-member-' + this.model.get( 'id' ), new bp.Views.GroupMemberUpdatingInfo( { value: action } ).render() ); 405 406 // Destroy the membership model. 407 this.model.destroy( { 408 wait: true, 409 data: {}, 410 success: function() { 411 return self.clearRow(); 412 }, 413 error: function( model, response ) { 414 self.views.set( '#edit-group-member-' + model.get( 'id' ), new bp.Views.GroupMemberErrorInfo( { value: response.responseJSON.message } ).render() ); 415 416 // Make sure to reset request options. 417 model.resetRequestOptions(); 418 model.set( 'removing', false ); 419 } 420 } ); 421 } 422 }, 423 424 editMemberRole: function( event ) { 425 var newRole = $( event.target ).val(), roleObject = this.getRoleObject( newRole ), 426 currentRole = this.model.get( 'role').id, roleAction = 'promote', self = this; 427 428 if ( newRole === this.model.get( 'role' ).id || ! roleObject ) { 429 return this.resetRow(); 430 } 431 432 this.views.set( '#edit-group-member-' + this.model.get( 'id' ), new bp.Views.GroupMemberUpdatingInfo().render() ); 433 434 if ( 'admin' === currentRole || ( 'mod' === currentRole && 'member' === newRole ) ) { 435 roleAction = 'demote'; 436 } 437 438 // Update Group member's role 439 this.model.save( roleObject, { 440 wait: true, 441 data: { 442 action: roleAction, 443 role: newRole 444 }, 445 success: function( model ) { 446 if ( self.model.collection.currentRole && newRole !== self.model.collection.currentRole ) { 447 self.model.collection.remove( model ); 448 return self.clearRow(); 449 } else { 450 return self.resetRow(); 451 } 452 }, 453 error: function( model, response ) { 454 self.views.set( '#edit-group-member-' + model.get( 'id' ), new bp.Views.GroupMemberErrorInfo( { value: response.responseJSON.message } ).render() ); 455 456 // Make sure to reset request options. 457 model.resetRequestOptions(); 458 model.set( 'editing', false ); 459 } 460 } ); 461 } 462 } ); 463 464 bp.Views.GroupMembersListHeader = bp.View.extend( { 465 tagName: 'thead', 466 template : bp.template( 'bp-manage-members-header' ) 467 } ); 468 469 bp.Views.GroupMembersListTable = bp.View.extend( { 470 tagName: 'tbody', 471 472 initialize: function() { 473 var preloaded = bpGroupManageMembersSettings.preloaded || {}, 474 models = []; 475 476 this.collection.on( 'reset', this.addListTableRows, this ); 477 478 if ( preloaded.body && preloaded.body.length > 0 ) { 479 _.each( preloaded.body, function( member ) { 480 models.push( new bp.Models.groupMember( member ) ); 481 } ); 482 483 this.collection.currentPage = 1; 484 if ( preloaded.headers && preloaded.headers[ 'X-WP-TotalPages' ] ) { 485 this.collection.totalPages = parseInt( preloaded.headers[ 'X-WP-TotalPages' ], 10 ); 486 } 487 488 if ( preloaded.headers && preloaded.headers[ 'X-WP-Total' ] ) { 489 this.collection.totalGroupMembers = parseInt( preloaded.headers[ 'X-WP-Total' ], 10 ); 490 } 491 492 this.collection.reset( models ); 493 } else { 494 this.collection.fetch( { 495 data: { 'exclude_admins': false }, 496 reset: true 497 } ); 498 } 499 }, 500 501 addListTableRows: function( collection ) { 502 if ( this.views._views ) { 503 var noMembersRow = _.findWhere( this.views._views[''] , { id: 'bp-no-group-members' } ); 504 505 if ( noMembersRow ) { 506 noMembersRow.remove(); 507 } 508 } 509 510 if ( ! collection.length ) { 511 this.views.add( new bp.Views.GroupMembersNoMatches( { id: 'bp-no-group-members' } ) ); 512 } else { 513 _.each( collection.models, function( member ) { 514 this.views.add( new bp.Views.GroupMembersListRow( { model: member } ) ); 515 }, this ); 516 } 517 } 518 } ); 519 520 bp.Views.GroupMembersUI = bp.View.extend( { 521 className: 'group-members', 522 523 initialize: function() { 524 var groupMembers = new bp.Collections.groupMembers(); 525 526 // Set filters. 527 this.views.set( '#group-roles-filter', [ 528 new bp.Views.GroupsMembersLabel( { attributes: { 'for': 'group-members-role-filter' } } ), 529 new bp.Views.GroupRolesDropDown( { id: 'group-members-role-filter', collection: groupMembers } ) 530 ] ); 531 532 // Set the search form. 533 this.views.set( '#group-members-search-form', new bp.Views.GroupMembersSearch( { id: 'group-members-search', collection: groupMembers } ) ); 534 535 // Set Paginate links. 536 this.views.set( '#group-members-pagination', new bp.Views.GroupsMembersPagination( { collection: groupMembers } ) ); 537 538 // Set Group members list header and body. 539 this.views.set( '#group-members-list-table', [ 540 new bp.Views.GroupMembersListHeader(), 541 new bp.Views.GroupMembersListTable( { collection: groupMembers } ) 542 ] ); 543 } 544 } ); 545 546 // Inject the UI to manage Group Members into the DOM. 547 bp.manageGroupMembersUI = new bp.Views.GroupMembersUI( { el:'#group-manage-members-ui' } ).render(); 548 549 } )( window.wp || {}, window.bp || {}, jQuery ); -
new file src/bp-templates/bp-nouveau/buddypress/common/js-templates/group-members/index.php
diff --git src/bp-templates/bp-nouveau/buddypress/common/js-templates/group-members/index.php src/bp-templates/bp-nouveau/buddypress/common/js-templates/group-members/index.php new file mode 100644 index 000000000..7ea66333d
- + 1 <?php 2 /** 3 * BP Nouveau single group's membership management main template. 4 * 5 * This template is used to inject the BuddyPress Backbone views 6 * dealing with a group's membership management. 7 * 8 * @since 5.0.0 9 * @version 5.0.0 10 */ 11 ?> 12 13 <?php 14 /** 15 * Placeholder to inject elements of the UI 16 * to manage Group members. 17 * 18 * @since 5.0.0 19 * @version 5.0.0 20 */ 21 ?> 22 <div id="group-manage-members-ui" class="standard-form"> 23 <ul class="subnav-filters"> 24 <li id="group-roles-filter" class="last filter"><?php // Placeholder for the Group Role Tabs ?></li> 25 <li id="group-members-pagination" class="left-menu"><?php // Placeholder for paginate links ?></li> 26 <li id="group-members-search-form" class="bp-search"><?php // Placeholder for search form ?></li> 27 </ul> 28 <table id="group-members-list-table" class="<?php echo is_admin() ? 'widefat bp-group-members' : 'bp-list'; ?>"><?php // Placeholder to list members ?></table> 29 </div> 30 31 <script type="text/html" id="tmpl-bp-manage-members-updating"> 32 <# if ( ! data.type ) { #> 33 <small><?php echo esc_html_x( 'Updating role... Please wait.', 'group manage members update feedback', 'buddypress' ); ?></small> 34 <# } else if ( 'ban' === data.type ) { #> 35 <small><?php echo esc_html_x( 'Banning member... Please wait.', 'group manage members ban feedback', 'buddypress' ); ?></small> 36 <# } else if ( 'unban' === data.type ) { #> 37 <small><?php echo esc_html_x( 'Unbanning member... Please wait.', 'group manage members unban feedback', 'buddypress' ); ?></small> 38 <# } else if ( 'remove' === data.type ) { #> 39 <small><?php echo esc_html_x( 'Removing member... Please wait.', 'group manage members remove feedback', 'buddypress' ); ?></small> 40 <# } #> 41 </script> 42 43 <script type="text/html" id="tmpl-bp-manage-members-error"> 44 <small>{{data.message}}</small> 45 </script> 46 47 <script type="text/html" id="tmpl-bp-manage-members-header"> 48 <tr> 49 <th><?php echo esc_html_x( 'Group Members', 'group manage members table header', 'buddypress' ); ?></th> 50 <th><?php echo esc_html_x( 'Roles', 'group manage members table header', 'buddypress' ); ?></th> 51 </tr> 52 </script> 53 54 <script type="text/html" id="tmpl-bp-manage-members-empty-row"> 55 <td colspan="2"> 56 <div class="bp-feedback info"> 57 <span class="bp-icon" aria-hidden="true"></span> 58 <p><?php esc_html_e( 'No Group members were found for this request.', 'buddypress' ); ?></p> 59 </div> 60 </td> 61 </script> 62 63 <script type="text/html" id="tmpl-bp-manage-members-label"> 64 <# if ( data.type && 'filter' !== data.type ) { #> 65 <?php echo esc_html_x( 'Change role for:', 'group manage members row edit', 'buddypress' ); ?> 66 <# } else { #> 67 <?php echo esc_html_x( 'Filter:', 'group manage members roles filter', 'buddypress' ); ?></small> 68 <# } #> 69 </script> 70 71 <script type="text/html" id="tmpl-bp-manage-members-row"> 72 <td class="uname-column"> 73 <div class="group-member"> 74 <a href="{{{data.link}}}"> 75 <img src="{{{data.avatar_urls.thumb}}}" alt="{{data.name}}" class="avatar profile-photo alignleft"/> 76 {{data.name}} 77 </a> 78 </div> 79 <div class="group-member-actions row-actions"> 80 <# if ( ! data.editing && ! data.is_banned ) { #> 81 <span class="edit"><a href="#edit-role" data-action="edit"><?php echo esc_html_x( 'Edit', 'group member edit role link', 'buddypress' ); ?></a> | </span> 82 <# } #> 83 <# if ( data.editing ) { #> 84 <span><a href="#edit-role-abort" data-action="abort"><?php echo esc_html_x( 'Stop editing', 'group member edit role abort link', 'buddypress' ); ?></a> | </span> 85 <# } #> 86 <# if ( ! data.is_banned ) { #> 87 <span class="spam"><a href="#ban" class="submitdelete" data-action="ban"><?php echo esc_html_x( 'Ban', 'group member ban link', 'buddypress' ); ?></a> | </span> 88 <# } else { #> 89 <span class="ham"><a href="#unban" data-action="unban"><?php echo esc_html_x( 'Unban', 'group member unban link', 'buddypress' ); ?></a> | </span> 90 <# } #> 91 <span class="delete"><a href="#remove" class="submitdelete" data-action="remove"><?php echo esc_html_x( 'Remove', 'group member ban link', 'buddypress' ); ?></a></span> 92 </div> 93 </td> 94 <td class="urole-column"> 95 <# if ( ! data.editing && ! data.managingBan && ! data.removing ) { #> 96 {{data.role.name}} 97 <# } else { #> 98 <div id="edit-group-member-{{data.id}}" class="group-member-edit"><?php // Placeholder for the Edit Role Dropdown. ;?></div> 99 <# } #> 100 </td> 101 </script> 102 103 <script type="text/html" id="tmpl-bp-manage-members-search"> 104 <?php 105 $button_classes = array( 'bp-button', 'bp-search' ); 106 $screen_reader_class = 'bp-screen-reader-text'; 107 108 if ( is_admin() ) { 109 $button_classes[] = 'button-secondary'; 110 $screen_reader_class = 'screen-reader-text'; 111 } 112 ?> 113 <label for="manage-members-search" class="<?php echo sanitize_html_class( $screen_reader_class ); ?>"> 114 <?php esc_html_e( 'Search Members', 'buddypress' ); ?> 115 </label> 116 <input type="search" id="manage-members-search" class="small" placeholder="<?php echo esc_attr_x( 'Search', 'search placeholder text', 'buddypress' ); ?>"/> 117 <button type="submit" id="manage-members-search-submit" class="<?php echo join( ' ', array_map( 'sanitize_html_class', $button_classes ) ); ?>"> 118 <span class="dashicons dashicons-search" aria-hidden="true"></span> 119 <span class="<?php echo sanitize_html_class( $screen_reader_class ); ?>"><?php echo esc_html_x( 'Search', 'button', 'buddypress' ); ?></span> 120 </button> 121 </script> 122 123 <script type="text/html" id="tmpl-bp-manage-members-paginate"> 124 <?php 125 $button_classes = array( 'group-members-paginate-button' ); 126 $screen_reader_class = 'bp-screen-reader-text'; 127 128 if ( is_admin() ) { 129 $button_classes[] = 'button-secondary'; 130 $screen_reader_class = 'screen-reader-text'; 131 } 132 ?> 133 <# if ( ! isNaN( data.currentPage ) && ! isNaN( data.totalPages ) ) { #> 134 <# if ( 1 !== data.currentPage && data.totalPages ) { #> 135 <button class="<?php echo join( ' ', array_map( 'sanitize_html_class', $button_classes ) ); ?>" data-page="{{data.prevPage}}"> 136 <span class="dashicons dashicons-arrow-left"></span> 137 <span class="<?php echo sanitize_html_class( $screen_reader_class ); ?>"><?php echo esc_html_x( 'Prev.', 'link', 'buddypress' ); ?></span> 138 </button> 139 <# } #> 140 <# if ( data.totalPages !== data.currentPage ) { #> 141 <button class="<?php echo join( ' ', array_map( 'sanitize_html_class', $button_classes ) ); ?>" data-page="{{data.nextPage}}"> 142 <span class="<?php echo sanitize_html_class( $screen_reader_class ); ?>"><?php echo esc_html_x( 'Next', 'link', 'buddypress' ); ?></span> 143 <span class="dashicons dashicons-arrow-right"></span> 144 </button> 145 <# } #> 146 <# } #> 147 </script> -
src/bp-templates/bp-nouveau/buddypress/groups/single/admin/manage-members.php
diff --git src/bp-templates/bp-nouveau/buddypress/groups/single/admin/manage-members.php src/bp-templates/bp-nouveau/buddypress/groups/single/admin/manage-members.php index f29e351db..6aa50ec19 100644
3 3 * BP Nouveau Group's manage members template. 4 4 * 5 5 * @since 3.0.0 6 * @version 3.1.06 * @version 5.0.0 7 7 */ 8 8 ?> 9 9 … … 11 11 <?php esc_html_e( 'Manage Group Members', 'buddypress' ); ?> 12 12 </h2> 13 13 14 <p class="bp-help-text"><?php esc_html_e( 'Manage your group members; promote to moderators, admins or demote or ban.', 'buddypress' ); ?></p> 14 <p class="bp-help-text"><?php esc_html_e( 'Manage your group members; promote to moderators, admins or demote or ban.', 'buddypress' ); ?></p> 15 16 <?php if ( bp_rest_api_is_available() ) : 17 /** 18 * Get the templates to manage Group Members using the BP REST API. 19 * 20 * @since 5.0.0 21 */ 22 bp_get_template_part( 'common/js-templates/group-members/index' ); 23 24 else : ?> 15 25 16 26 <dl class="groups-manage-members-list"> 17 27 … … 119 129 120 130 bp_nouveau_user_feedback( 'group-manage-members-none' ); 121 131 122 endif; ?>132 endif; 123 133 134 endif; -
src/bp-templates/bp-nouveau/common-styles/_bp_groups_management.scss
diff --git src/bp-templates/bp-nouveau/common-styles/_bp_groups_management.scss src/bp-templates/bp-nouveau/common-styles/_bp_groups_management.scss index 1ce2caf19..ad4853fd5 100644
139 139 } 140 140 141 141 } //close .groups-manage-members-list 142 143 #group-manage-members-ui { 144 145 #group-members-search-form { 146 147 button[type="submit"] { 148 float: right; 149 font-size: inherit; 150 font-weight: 400; 151 line-height: 1.5; 152 text-align: center; 153 text-transform: none; 154 155 span { 156 font-family: dashicons; 157 158 @include font-size(18); 159 line-height: 1.6; 160 } 161 } 162 } 163 164 #group-members-pagination { 165 166 button:last-child { 167 margin-right: 2em; 168 } 169 } 170 171 #bp-no-group-members td { 172 border: none; 173 } 174 } -
src/bp-templates/bp-nouveau/common-styles/_bp_search.scss
diff --git src/bp-templates/bp-nouveau/common-styles/_bp_search.scss src/bp-templates/bp-nouveau/common-styles/_bp_search.scss index bba309151..ae4fa53ce 100644
8 8 9 9 form.bp-dir-search-form, 10 10 form.bp-messages-search-form, 11 form[data-bp-search].bp-invites-search-form { 11 form[data-bp-search].bp-invites-search-form, 12 form#group-members-search { 12 13 border: 1px solid $bp-border-color; 13 14 14 15 width: 100%; … … 68 69 69 70 } // close form 70 71 72 form#group-members-search { 73 74 &:hover { 75 border: 1px solid darken($bp-border-color, 10%); 76 box-shadow: inset 0 0 3px #eee; 77 } 78 } 79 71 80 // this block needs to be moved really. 72 81 ul.filters { 73 82 -
src/bp-templates/bp-nouveau/css/buddypress-rtl.css
diff --git src/bp-templates/bp-nouveau/css/buddypress-rtl.css src/bp-templates/bp-nouveau/css/buddypress-rtl.css index 892aa1fdc..026488432 100644
body.no-js .single-item-header .js-self-profile-button { 2559 2559 } 2560 2560 } 2561 2561 2562 #group-manage-members-ui #group-members-search-form button[type="submit"] { 2563 float: left; 2564 font-size: inherit; 2565 font-weight: 400; 2566 line-height: 1.5; 2567 text-align: center; 2568 text-transform: none; 2569 } 2570 2571 #group-manage-members-ui #group-members-search-form button[type="submit"] span { 2572 font-family: dashicons; 2573 font-size: 18px; 2574 line-height: 1.6; 2575 } 2576 2577 #group-manage-members-ui #group-members-pagination button:last-child { 2578 margin-left: 2em; 2579 } 2580 2581 #group-manage-members-ui #bp-no-group-members td { 2582 border: none; 2583 } 2584 2562 2585 /** 2563 2586 *----------------------------------------- 2564 2587 * @subsection 5.2.1.2 - Group Members List … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3691 3714 3692 3715 .buddypress-wrap form.bp-dir-search-form, 3693 3716 .buddypress-wrap form.bp-messages-search-form, 3694 .buddypress-wrap form[data-bp-search].bp-invites-search-form { 3717 .buddypress-wrap form[data-bp-search].bp-invites-search-form, 3718 .buddypress-wrap form#group-members-search { 3695 3719 border: 1px solid #eee; 3696 3720 width: 100%; 3697 3721 } 3698 3722 3699 3723 .buddypress-wrap form.bp-dir-search-form label, 3700 3724 .buddypress-wrap form.bp-messages-search-form label, 3701 .buddypress-wrap form[data-bp-search].bp-invites-search-form label { 3725 .buddypress-wrap form[data-bp-search].bp-invites-search-form label, 3726 .buddypress-wrap form#group-members-search label { 3702 3727 margin: 0; 3703 3728 } 3704 3729 … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3710 3735 .buddypress-wrap form.bp-messages-search-form button[type="submit"], 3711 3736 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"], 3712 3737 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="text"], 3713 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] { 3738 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"], 3739 .buddypress-wrap form#group-members-search input[type="search"], 3740 .buddypress-wrap form#group-members-search input[type="text"], 3741 .buddypress-wrap form#group-members-search button[type="submit"] { 3714 3742 background: none; 3715 3743 border: 0; 3716 3744 border-radius: 0; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3722 3750 .buddypress-wrap form.bp-messages-search-form input[type="search"], 3723 3751 .buddypress-wrap form.bp-messages-search-form input[type="text"], 3724 3752 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"], 3725 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="text"] { 3753 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="text"], 3754 .buddypress-wrap form#group-members-search input[type="search"], 3755 .buddypress-wrap form#group-members-search input[type="text"] { 3726 3756 float: right; 3727 3757 line-height: 1.5; 3728 3758 padding: 3px 10px; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3731 3761 3732 3762 .buddypress-wrap form.bp-dir-search-form button[type="submit"], 3733 3763 .buddypress-wrap form.bp-messages-search-form button[type="submit"], 3734 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] { 3764 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"], 3765 .buddypress-wrap form#group-members-search button[type="submit"] { 3735 3766 float: left; 3736 3767 font-size: inherit; 3737 3768 font-weight: 400; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3744 3775 3745 3776 .buddypress-wrap form.bp-dir-search-form button[type="submit"] span, 3746 3777 .buddypress-wrap form.bp-messages-search-form button[type="submit"] span, 3747 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] span { 3778 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] span, 3779 .buddypress-wrap form#group-members-search button[type="submit"] span { 3748 3780 font-family: dashicons; 3749 3781 font-size: 18px; 3750 3782 line-height: 1.6; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3752 3784 3753 3785 .buddypress-wrap form.bp-dir-search-form button[type="submit"].bp-show, 3754 3786 .buddypress-wrap form.bp-messages-search-form button[type="submit"].bp-show, 3755 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"].bp-show { 3787 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"].bp-show, 3788 .buddypress-wrap form#group-members-search button[type="submit"].bp-show { 3756 3789 height: auto; 3757 3790 right: 0; 3758 3791 overflow: visible; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3762 3795 3763 3796 .buddypress-wrap form.bp-dir-search-form input[type="search"]::-webkit-search-cancel-button, 3764 3797 .buddypress-wrap form.bp-messages-search-form input[type="search"]::-webkit-search-cancel-button, 3765 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-cancel-button { 3798 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-cancel-button, 3799 .buddypress-wrap form#group-members-search input[type="search"]::-webkit-search-cancel-button { 3766 3800 -webkit-appearance: searchfield-cancel-button; 3767 3801 } 3768 3802 … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3771 3805 .buddypress-wrap form.bp-messages-search-form input[type="search"]::-webkit-search-results-button, 3772 3806 .buddypress-wrap form.bp-messages-search-form input[type="search"]::-webkit-search-results-decoration, 3773 3807 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-results-button, 3774 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-results-decoration { 3808 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-results-decoration, 3809 .buddypress-wrap form#group-members-search input[type="search"]::-webkit-search-results-button, 3810 .buddypress-wrap form#group-members-search input[type="search"]::-webkit-search-results-decoration { 3775 3811 display: none; 3776 3812 } 3777 3813 3814 .buddypress-wrap form#group-members-search:hover { 3815 border: 1px solid #d5d4d4; 3816 box-shadow: inset 0 0 3px #eee; 3817 } 3818 3778 3819 .buddypress-wrap ul.filters li form label input { 3779 3820 line-height: 1.4; 3780 3821 padding: 0.1em 0.7em; -
src/bp-templates/bp-nouveau/css/buddypress.css
diff --git src/bp-templates/bp-nouveau/css/buddypress.css src/bp-templates/bp-nouveau/css/buddypress.css index 91f7f965e..cc3144504 100644
body.no-js .single-item-header .js-self-profile-button { 2559 2559 } 2560 2560 } 2561 2561 2562 #group-manage-members-ui #group-members-search-form button[type="submit"] { 2563 float: right; 2564 font-size: inherit; 2565 font-weight: 400; 2566 line-height: 1.5; 2567 text-align: center; 2568 text-transform: none; 2569 } 2570 2571 #group-manage-members-ui #group-members-search-form button[type="submit"] span { 2572 font-family: dashicons; 2573 font-size: 18px; 2574 line-height: 1.6; 2575 } 2576 2577 #group-manage-members-ui #group-members-pagination button:last-child { 2578 margin-right: 2em; 2579 } 2580 2581 #group-manage-members-ui #bp-no-group-members td { 2582 border: none; 2583 } 2584 2562 2585 /** 2563 2586 *----------------------------------------- 2564 2587 * @subsection 5.2.1.2 - Group Members List … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3691 3714 3692 3715 .buddypress-wrap form.bp-dir-search-form, 3693 3716 .buddypress-wrap form.bp-messages-search-form, 3694 .buddypress-wrap form[data-bp-search].bp-invites-search-form { 3717 .buddypress-wrap form[data-bp-search].bp-invites-search-form, 3718 .buddypress-wrap form#group-members-search { 3695 3719 border: 1px solid #eee; 3696 3720 width: 100%; 3697 3721 } 3698 3722 3699 3723 .buddypress-wrap form.bp-dir-search-form label, 3700 3724 .buddypress-wrap form.bp-messages-search-form label, 3701 .buddypress-wrap form[data-bp-search].bp-invites-search-form label { 3725 .buddypress-wrap form[data-bp-search].bp-invites-search-form label, 3726 .buddypress-wrap form#group-members-search label { 3702 3727 margin: 0; 3703 3728 } 3704 3729 … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3710 3735 .buddypress-wrap form.bp-messages-search-form button[type="submit"], 3711 3736 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"], 3712 3737 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="text"], 3713 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] { 3738 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"], 3739 .buddypress-wrap form#group-members-search input[type="search"], 3740 .buddypress-wrap form#group-members-search input[type="text"], 3741 .buddypress-wrap form#group-members-search button[type="submit"] { 3714 3742 background: none; 3715 3743 border: 0; 3716 3744 border-radius: 0; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3722 3750 .buddypress-wrap form.bp-messages-search-form input[type="search"], 3723 3751 .buddypress-wrap form.bp-messages-search-form input[type="text"], 3724 3752 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"], 3725 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="text"] { 3753 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="text"], 3754 .buddypress-wrap form#group-members-search input[type="search"], 3755 .buddypress-wrap form#group-members-search input[type="text"] { 3726 3756 float: left; 3727 3757 line-height: 1.5; 3728 3758 padding: 3px 10px; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3731 3761 3732 3762 .buddypress-wrap form.bp-dir-search-form button[type="submit"], 3733 3763 .buddypress-wrap form.bp-messages-search-form button[type="submit"], 3734 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] { 3764 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"], 3765 .buddypress-wrap form#group-members-search button[type="submit"] { 3735 3766 float: right; 3736 3767 font-size: inherit; 3737 3768 font-weight: 400; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3744 3775 3745 3776 .buddypress-wrap form.bp-dir-search-form button[type="submit"] span, 3746 3777 .buddypress-wrap form.bp-messages-search-form button[type="submit"] span, 3747 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] span { 3778 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"] span, 3779 .buddypress-wrap form#group-members-search button[type="submit"] span { 3748 3780 font-family: dashicons; 3749 3781 font-size: 18px; 3750 3782 line-height: 1.6; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3752 3784 3753 3785 .buddypress-wrap form.bp-dir-search-form button[type="submit"].bp-show, 3754 3786 .buddypress-wrap form.bp-messages-search-form button[type="submit"].bp-show, 3755 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"].bp-show { 3787 .buddypress-wrap form[data-bp-search].bp-invites-search-form button[type="submit"].bp-show, 3788 .buddypress-wrap form#group-members-search button[type="submit"].bp-show { 3756 3789 height: auto; 3757 3790 left: 0; 3758 3791 overflow: visible; … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3762 3795 3763 3796 .buddypress-wrap form.bp-dir-search-form input[type="search"]::-webkit-search-cancel-button, 3764 3797 .buddypress-wrap form.bp-messages-search-form input[type="search"]::-webkit-search-cancel-button, 3765 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-cancel-button { 3798 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-cancel-button, 3799 .buddypress-wrap form#group-members-search input[type="search"]::-webkit-search-cancel-button { 3766 3800 -webkit-appearance: searchfield-cancel-button; 3767 3801 } 3768 3802 … … body.no-js .buddypress #messages-bulk-management #select-all-messages { 3771 3805 .buddypress-wrap form.bp-messages-search-form input[type="search"]::-webkit-search-results-button, 3772 3806 .buddypress-wrap form.bp-messages-search-form input[type="search"]::-webkit-search-results-decoration, 3773 3807 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-results-button, 3774 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-results-decoration { 3808 .buddypress-wrap form[data-bp-search].bp-invites-search-form input[type="search"]::-webkit-search-results-decoration, 3809 .buddypress-wrap form#group-members-search input[type="search"]::-webkit-search-results-button, 3810 .buddypress-wrap form#group-members-search input[type="search"]::-webkit-search-results-decoration { 3775 3811 display: none; 3776 3812 } 3777 3813 3814 .buddypress-wrap form#group-members-search:hover { 3815 border: 1px solid #d5d4d4; 3816 box-shadow: inset 0 0 3px #eee; 3817 } 3818 3778 3819 .buddypress-wrap ul.filters li form label input { 3779 3820 line-height: 1.4; 3780 3821 padding: 0.1em 0.7em; -
src/bp-templates/bp-nouveau/includes/groups/functions.php
diff --git src/bp-templates/bp-nouveau/includes/groups/functions.php src/bp-templates/bp-nouveau/includes/groups/functions.php index e0f18356c..0967ad7c7 100644
3 3 * Groups functions 4 4 * 5 5 * @since 3.0.0 6 * @version 3.1.06 * @version 5.0.0 7 7 */ 8 8 9 9 // Exit if accessed directly. … … function bp_nouveau_groups_enqueue_scripts() { 68 68 ' ); 69 69 } 70 70 71 if ( ! bp_is_group_invites() && !( bp_is_group_create() && bp_is_group_creation_step( 'group-invites' ) ) ) {72 return;71 if ( bp_is_group_invites() || ( bp_is_group_create() && bp_is_group_creation_step( 'group-invites' ) ) ) { 72 wp_enqueue_script( 'bp-nouveau-group-invites' ); 73 73 } 74 74 75 wp_enqueue_script( 'bp-nouveau-group-invites' ); 75 if ( bp_rest_api_is_available() && bp_is_group_admin_page() && bp_is_group_admin_screen( 'manage-members' ) ) { 76 wp_enqueue_script( 'bp-group-manage-members' ); 77 wp_localize_script( 78 'bp-group-manage-members', 79 'bpGroupManageMembersSettings', 80 bp_groups_get_group_manage_members_script_data( bp_get_current_group_id() ) 81 ); 82 } 76 83 } 77 84 78 85 /** -
src/class-buddypress.php
diff --git src/class-buddypress.php src/class-buddypress.php index e6d8d609b..efa9744fc 100644
class BuddyPress { 487 487 require( $this->plugin_dir . 'bp-core/bp-core-moderation.php' ); 488 488 require( $this->plugin_dir . 'bp-core/bp-core-loader.php' ); 489 489 require( $this->plugin_dir . 'bp-core/bp-core-customizer-email.php' ); 490 require( $this->plugin_dir . 'bp-core/bp-core-rest-api.php' ); 490 491 491 492 // Maybe load deprecated functionality (this double negative is proof positive!) 492 493 if ( ! bp_get_option( '_bp_ignore_deprecated_code', ! $this->load_deprecated ) ) {