- 2.5.0: Adds get-user-groups, which lists every BuddyPress group a user belongs to with their role in each (admin, mod, member or banned), including private and hidden groups, plus their pending invites (with the inviter) and membership requests. Filtering by role banned answers which groups have banned someone in one call, replacing a sweep of every group with get-group-members. Like the other abilities it is site-scoped, takes site_id and needs bp_moderate; no email addresses are returned. plugin_version() now reads the Version header instead of returning a hardcoded 2.1.1.
- 2.4.0: get-group-members now accepts group_ids, a list of up to 100 groups, as well as group_id, so every captain on a night can be fetched in one call. role, search and paging apply to each group, and the result is a groups array with one entry per requested group holding its total and members, or an error (not_found, not_permitted). Members of all requested groups are now read in a single query instead of one BuddyPress member query per group; spam and deleted accounts are left out. Group admins (captains) can now see the members of their own groups, including emails, without edit_users: edit_users still sees every group, an admin sees only the groups they administer, and with group_ids any other group comes back as not_permitted instead of failing the call. Group mods get no extra access. group_id calls keep their existing output shape.
- 2.3.1: list-groups now points to lh-competitions/get-teams for finding teams by season, night or other team terms, since the group taxonomy abilities moved from LH BuddyPress Group Taxonomies to LH Competitions.
- 2.3.0: All seven abilities now take an optional site_id, so they can be run against another network site from any connector you use. The member directory is per site on LocalHero (search-members returns that site's members), so a call with site_id now gives the target site's results. Without site_id the abilities behave exactly as before. Site handling comes from LH MCP Adapter Extensions: the target site must be live, you must belong to it (or be a super admin), and the ability's own capability is checked on the target site.
- 2.2.2: Shorter MCP ability description. The opening sentence of search-members now says what the ability does and returns in about 100 characters, because discover-abilities lists only that sentence. How it differs from lh-membership/list-members follows in the next sentence. Wording only: no change to behaviour, inputs or outputs.
- 2.2.1: Fixes get-group-activity returning the whole network's activity. The group and action were passed to bp_activity_get() as top-level arguments, which it ignores, so any group_id returned the latest site-wide items; they now go in its filter argument (object groups, primary_id, action), and hidden items are included so private and hidden groups' activity is returned to the moderators the ability is gated to. Both activity abilities also ask bp_activity_get() to count, so total is the real number of matching items instead of always 0.
- 2.2.0: Ability declarations brought up to the LH standard. All seven abilities (list-groups, get-group, get-group-activity, get-user-activity, get-group-members, get-group-membership-status, search-members) now declare an output schema, with nullable fields marked and the failure message documented, and each description ends with the permission sentence: Requires bp_moderate. for the five that return no email addresses, Requires edit_users. for get-group-members and search-members.
- 2.1.1: Patch bump for the deprecated bp_get_group_permalink() -> bp_get_group_url() fix in the Group Listing class (list-groups and get-group abilities), surfaced by a debug-log deprecation notice.
- 2.1.0: Refactor: split the monolithic abilities class into four functional-area classes (group membership, group listing, activity, member directory) plus a shared ability-helpers trait, coordinated by a slim registrar class. Also remove the class_exists() guard around the plugin's own top-level class declaration, per the updated Plugin Structure convention — a top-level class with no extends/implements is eligible for PHP/OPcache compile-time early binding, which caused a real production incident on lh-tasks (the guard silently skipped __construct(), so no hooks ever registered, with no fatal or log entry). The guard is reserved for genuinely shared third-party library code, never a plugin's own classes. No functional or behavioural change — same 7 ability IDs, same capabilities, same logic, just reorganised into smaller, more maintainable files. Minor version bump.
- 2.0.0: Slim the coordinator abilities class down to a dispatcher: it now only registers the shared ability category and requires/instantiates the four functional-area classes (Group Membership, Group Listing, Activity, Member Directory), each of which registers its own abilities via its own wp_abilities_api_init hook. Also removes the class_exists() guard around the plugin's own class declaration, per the updated Plugin Structure convention (a top-level class with no extends/implements is eligible for PHP/OPcache compile-time early binding, which caused a real production incident on lh-tasks — the guard is only for genuinely shared third-party library code, never a plugin's own classes).
- 1.0.1: Fix documentation links now that the lh-portfolio root entry exists: readme.md and readme.txt pointed at the old, now-trashed /knowledge/plugins/lh-buddypress-queries/ KB page. Point both at the new canonical /portfolio/lh-buddypress-queries/ page and its changelog doc-section, per rules 2-3. Patch bump for the doc-only fix.
- 1.0.0: Initial release. Seven abilities across group membership, group listing, activity streams, and the member directory. Group membership: get-group-members (edit_users — returns email), get-group-membership-status (bp_moderate). Group listing: list-groups, get-group (both bp_moderate). Activity: get-group-activity, get-user-activity (both bp_moderate). Member directory: search-members (edit_users — returns email). Deliberately excludes private messages and friend connections — different risk category, out of scope.