Version 2.0
Version 2.0 is a major BuddyPress feature release that introduces several new Administrative features, a number of new APIs and a slew of “under the hood” enhancements that include significant gains in performance via caching and streamlined queries.
For Version 2.0, the database version (_bp_db_version
in wp_options
) was 7892, and the Trac revision was 8279. Read the full ticket log here here.
Highlights
- Major performance improvements across BuddyPress, with a special focus on Activity and Members components. Improvements are particularly noteworthy when using a persistent object cache, such as APC or Memcached.
- New Administrative tools:
- User Extended Profile data is now editable at Dashboard > [Network Admin >] Users
- Non-Multisite installations can now perform spam actions from Dashboard > Users
- Dashboard > Tools > BuddyPress contains a number of tools for correcting data that occasionally gets out of sync on BP installs
- Signups/registrations have been completely overhauled.
- Pending users can be managed at Dashboard > [Network Admin >] Users (resend activation emails, perform manual activations, and more)
- We now mimic WPMS’s wp_signups functionality on non-multisite installs
- Two-way sync of blog-related activity. Blog comments are synced to the activity stream as replies to the blog post’s activity item, and replies to “new blog post” activity items are mirrored as blog comments.
- Automatic, AJAX-powered checks for new content when viewing the activity stream. When new content is detected, a “Load Newest” button appears.
- There’s a brand new API (
BP_XProfile_Field_Type
) for registering xprofile field types, and our own field types have been completely rewritten to use it. - Activity actions – “Joe became a registered member”, etc – are now generated dynamically, rather than stored statically. This means that the data is always up-to-date, and will mean better compatibility with multilingual sites.
- Metadata functions have been completely rewritten to leverage WP’s core metadata API.
- Newly registered users have the option to trigger a resending of their activation emails after failed login attempts.
User Features
Activity
- Improved object caching for better performance (#5369, #5434)
- Split activity comments query into separate ID query. (#5371)
- Don’t auto-link @mentions that appear inside the context of links. (#468)
- Use Dashicon for About/Credits page badge, rather than old image.
- Don’t shrink “what’s new” entry box when focusing away from window.
- Automatically check for newly created items when viewing the Activity Stream, and display a “Load Newest” button if there are more to show. (#5328)
- Activity action strings (“Joe became a registered member”, etc) are now generated dynamically, ensuring that they’re up-to-date and multilingual-friendly. (#3856)
- Improve output sanitization, for better compatibility with certain non-English punctuation characters. (#2776)
- Use WP’s comment depth setting to limit activity comment depth. (#2768)
Administration
- Improved localization on About screen (#534)
- Don’t show Activate and Register pages in the Pages meta box of the Menu Administration screen. (#5323)
- Don’t show the “Edit Page” WP adminbar menu when on a BP page.
- Smoother page loading when editing xProfile fields in the Dashboard. (r7963)
- Use standards-compliant markup for labels and fieldsets in group administration panels. (#5437)
- When editing an Activity item in the admin panel, allow for proper “type” saving when the activity type is not registered properly with BuddyPress. (#4786)
- New BuddyPress Tools panel, for repairing out-of-sync data. (#5296)
- New Pending Users management panel, for managing non-activated registrations. (#5374, #4651)
- Don’t swap ‘[User Set]’ into welcome emails when accounts are created through the Dashboard (and passwords are not user set). (#5466)
- Improved permissions checks when deciding whether to display certain administration panels to site- vs network-admins. (#5465)
- Enable Spam administration tools for non-Multisite users.php Dashboard panel. (#5113)
- Fix bug that caused deleted xprofile field options to be saved in some cases. (#5453)
- Add ‘Action’ column to Activity administration panel. (#5484)
- In Activity admin panel, don’t allow replying if the activity item doesn’t allow it. (#513)
Blogs
- Two-way syncing between blog comments and the activity stream. (#513)
- Better handling of blog-post activity, so that new_blog_post activity items are correctly published/unpublished when the corresponding blog posts are published/unpublished. (#5333)
Core
- Make sure the Register item of a dynamic BuddyPress nav menu is displayed to a logged out user. (#5322)
- Improved default avatar handling, so that default avatars are loaded directly from Gravatar when possible. (#4571)
- Fix bug that caused avatar cropping to fail if uploaded image had the same name as an existing BuddyPress avatar. (#5417)
- When using autocomplete to add member to group in Dashboard, don’t match spammed users. (#5359)
Friends
- Improved object caching for better performance. (#5435)
General
- Use the correct function name when populating unread notification count in Buddybar (#543)
- Improve localizability of directory page <title> elements. (#4726, #463, #4631)
- Display a “resend email” link when an unactivated user tries to log in. (#4676)
Groups
- When creating a new Group, only allow the Group creator to continue the Group creation process for improved security.
- After creating a new Group and switching back to the “Details” tab, ensure Group ID, name, and description field output is properly sanitized, for improved security.
- Improved object caching for better performance. (#4551, #547)
- Makes group avatars independent of xprofile component settings. (#533)
- On single group screens, uses default avatar as a fallback in group navigation menu. (#5343)
- Members tab in individual groups now support sorting and pagination. (#921)
- Send Invites page now supports AJAX pagination. (#5423)
- Membership Requests admin pages now support AJAX pagination. (#544)
- Fix bug that caused sitewide Groups widget to display only a user’s group’s when on a user’s page. (#2368)
- Fix Remove Invite buttons so that they work when Javascript is disabled. (#5281)
- Allow site admins to visit the Request Membership page of a private group. (#5357)
- Don’t show the “Create a Group” button in the page title during the group creation process. (#5469)
Members
- Do not display Change Avatar subnav if WP’s Show Avatars setting is disabled. (#5346)
- Fix bug that caused members widget count to be incorrect in some cases. (#541)
- Make sure that Members widgets don’t accidentally use directory search parameters. (#5318)
Messages
- Fix bulk-delete javascript on the inbox/sentbox screens. (#5347)
- Fix broken redirect when incorrectly attempting to view member’s private messages. (r7923)
- Improved object caching for better performance. (#5419, #5414)
- Improved workflow surrounding deleted message threads, to avoid “phantom” threads. (#5254)
- Match user login names when using autocomplete for message recipients. (#5115)
- Improved formatting for new message notifications. (#5479)
Notifications
- Object caching for the more frequently used items in bp-notifications, for improved performance. (#5377)
- Fix incorrect group associations in membership request notifications, which caused the links to go to the wrong place. (#5446)
- More reliable marking-as-read and deleting when corresponding items are deleted. (#5289)
Profiles
- Allow user profiles to be edited by the administrator in wp-admin (#5197)
- Split xprofile group query, and add caching support for individual xprofile groups. (#1332)
- Improved object caching for better performance. (#1322)
- Create a “Boone updated his profile” activity item when Boone updates his profile. (#4636)
- New Settings > Profile tab allows users to configure profile field visibility from a single screen. (#5352)
- Smoother loading/toggling for field visibility options. (#5439)
Settings
Theme
- Don’t unregister bp-default if it’s been previously registered. (#5325)
- Fix AJAX pagination in directories when clicked page number is more than 1. (#544)
- Don’t register bp-default if it’s installed elsewhere in the WP installation. (#5212)
Development, Themes, Plugins
Activity
- Split primary Activity query up into separate, more performant queries. (#5349)
- Don’t join against the users table when fetching activity comment data. (#5371)
- Migrate activity meta functions to the WP metadata API. (#4551)
- Introduce bp_activity_add_meta(). (#54)
- Add support for $single param in _get_meta() functions. (#54)
- Add delete_all support for all _delete_meta() functions. (#54)
- Add support for prev_value param to _update_meta() functions. (#54)
- Introduce update_meta_cache parameter for bp_has_activities() stack, for better performance and parity with WP_Query. (#5398)
- Add ‘offset’ parameter to the bp_has_activities() stack. (#5328)
- Streamline COUNT query in BP_Activity_Activity::get(). (#5448)
- Removed redundant markup when loading new activity items via AJAX. (#5329)
- Better data integrity checks when adding/removing activity favorites. (#5478)
Blogs
- Migrate blogmeta functions to the WP metadata API. (#4551)
- Introduce bp_blogs_add_blogmeta(). (#54)
- Don’t run meta_value through esc_sql() in bp_blogs_update_blogmeta(). (#4551)
- Introduce update_meta_cache parameter for bp_has_blogs() stack, for better performance and parity with WP_Query. (#5398)
- Introduce include_blog_ids param to the bp_has_blogs() stack. (r842)
Core
- Introduce `bp_parse_args()` and implement in template functions. (#536)
- Replace `$bp` global references in slug functions with `buddypress()` calls. (#5138)
- Improved persistent caching for BP bootstrap. (#5362)
- Fix incorrect $wpdb->prepare() use in bp_update_meta_cache(). (#5338)
- Improve inline docs in bp-loader.php. (#522)
- In `bp_locate_template()` check for `WP_USE_THEMES` before calling `load_template()`
- Add `bp_locate_template` action to `bp_locate_template()` (syncing it with bbPress) to allow code execution immediately before a template is decided.
- Better compatibility with PHP versions that don’t allow func_get_args() as a function parameter. (#4294)
- Make it possible to prevent deprecated functions from loading. (#5361)
- Introduce bp_add_option()
- Save default options on install/update, to reduce the number of null queries and reduce SQL overhead during BP bootstrap. (#5385)
- Better multisite performance in unit test suite.
- Support PHPUnit configuration override by renaming our shipped config to phpunit.xml.dist.
- Improve cache invalidation for bp_core_get_user_domain(). (#542)
- Don’t load item counts in profile navigation when the counts will not be used in the interface. (#5413)
- Don’t use deprecated mysql_real_escape_string(). (#5432)
- Cache WP_User_Query data in BP, since WP doesn’t do it. (#5445)
- Introduce bp_core_user_displaynames(), for bulk displayname lookups. (#5445)
- Remove PHP notices from login widget code.
- Proper caching for user last activity data. (#5128)
- Merge BP’s custom body classes with WP’s, instead of overwriting them. (#4929, #524)
- Pass additional data to bp_core_signup_send_activation_key filter. (#5481)
Friends
- Pass $item_id as an argument for notification format filters. (#5314)
- More logical behavior when friends_add_friends() is run with the same user as initiator and friend. (#5319)
General
- Introduce bp_is_{component}_directory helper functions. (#548)
- Improved string and textarea output escaping. (r7965)
- Enqueue .confirm JS, rather than printing directly in the . (#529)
Groups
- Migrate groupmeta functions to the WP metadata API. (#4551)
- Introduce groups_add_groupmeta(). (#54)
- Pass $group object to bp_get_group_description_excerpt filter. (#5393)
- Introduce update_meta_cache parameter for bp_has_groups() stack, for better performance and parity with WP_Query. (#5398)
- Don’t prefetch groupmeta when querying for groups to populate activity post form dropdown. (#5398)
- Don’t fetch group extras or groupmeta when pulling up secondary group avatars. (#5398)
- Use a parameter array for bp_group_has_members(). (#3797, #921)
- Fix broken pagination URL parameter for group member lists. (#921)
- Add support for ‘search_terms’ param in bp_group_has_members() stack. (#921)
- Don’t query for certain group extras for unauthenticated users, to reduce query overhead. (#5416)
- Introduce support for ‘type’ sorting parameter in BP_Group_Member_Query stack. (#921)
- Introduce ‘inviter_id’, ‘invite_sent’, and pagination parameters to BP_Group_Member_Query. (#5423)
- Add filters to BP_Groups_List_Table that enable the adding of custom columns. (#5287)
- Introduce groups_get_invite_count_for_user(), for more efficient invite info lookup. (r857)
- Use BP_Group_Member_Query as the internals for group invite and group membership requests functions. (#544)
- Be less aggressive about getting group directory search terms from URL params, allowing for search term overrides via bp_has_groups() parameters. (#5456)
Members
- Store user ‘last_activity’ data in the activity table rather than usermeta, for improved query performance. (#5128)
- Add ‘active_format’ parameter to bp_get_member_last_active(), for better localizability. (#5387)
- Make it possible to use the BP_Group_Members_Template class outside the context of a single group. (#542)
- Make it possible to use bp_group_has_invites() outside of the context of a single group. (#5427)
- Non-Multisite registrations are now stored in a signups table, for better manageability and parity with Multisite. (#4651)
Messages
- Improved filters in bp_has_message_threads(). (r7924)
- Introduce template functions for getting the last message in a given thread. (#5176)
Notifications
- Don’t allow duplicate notifications by default. (#5297)
- Allow both read + unread notifications to be fetched by passing is_new=both to BP_Notifications_Notification::get(). (#5315)
Profiles
- Introduce BP_XProfile_Field_Type and refactor existing field types to use new base class. (#522, #4694)
- Use API function rather than direct SQL query in bp_xprofile_filter_user_query_populate_extras()
- Add persistent caching support for xprofile field data. (#1332)
- Introduce filter ‘bp_xprofile_get_hidden_field_types_for_user’. This will make it easier for plugin authors to create custom visibility levels. (#5317)
- Add support for ‘user_id’ param to bp_get_the_profile_field_options(). (#5197)
- Migrate xprofilemeta functions to the WP metadata API. (#4551)
- Introduce bp_xprofile_add_meta(). (#54)
- xProfile: `bp_get_the_profile_group_description()` should return a value, not echo it.
- xProfile: correctly sanitise `$_POST[‘field_ids’]` when a user updates their profile.
- Introduce bp_xprofile_fullname_field_id() and use in query building throughout BP. (#5362)
- Introduce update_meta_cache parameter for bp_has_profile() stack, for better performance and parity with WP_Query. (#5398)
- Enable bp_member_profile_data() to be used correctly outside of profile loops. (#5334)
- Improved return values from xprofile_sanitize_data_value_before_save(). (#522)
Settings
Theme
- Better compatibility with themes that load their template content in non-standard ways, like Atahualpa. (#531)
- Add CSS classes for BP nav bar item counts. (#5169)
- Workaround for `comments_template()` running when in theme compatibility mode. (#5339)
- Improve the way Create buttons are inserted into page titles for groups and blogs components when running theme compat. (#5144)
- Remove charset attribute for <script> call. (#5366)