BP Dev-Chat Agenda: January 6, 2021

Happy new year BuddyPress contributors 😍

Let’s all join the first #BuddyPress developer meeting of the year. It is scheduled on January 6 at 19:00 UTC (tomorrow), here’s the agenda:

BuddyPress 8.0.0’s kick off

  1. Features / bug fixes wishlist, please reply to the 8.0.0 call for tickets if you haven’t already!
  2. Release organization, how can we improve it?
    1. Leading.
    2. Scheduling.
    3. Dev-chats regularity, day/time.
    4. Major versions regularity.
    5. Announcements, developer notes, etc.

Open floor

Thanks in advance for your participation & ..

Happy new year Card

#8-0-0, #agenda, #dev-chat

BuddyPress 7.1.0 Maintenance Release

Hi!

BuddyPress 7.1.0 is available, please upgrade 🙏.

#7-1-0, #maintenance, #release

BP Dev-Chat Summary: December 16, 2020

7.0.0 release first feedbacks & results

2 bugs related to the 7.0.0 release were posted on Trac:

  • #8411 The Groups Administration screen was not reachable anymore for configs using the multiblog constant BP_ENABLE_MULTIBLOG. ✅ It has been fixed.
  • #8414 Using the BP Blogs component tool to repair site icon / blavatar synchronization on non multisite configs was generating an error due to a WordPress function not available. ✅ It has been fixed.

We also spent some time investigating a possible bug about Activity recorded dates but it turned out it wasn’t involving the plugin. We’ve decided to package a minor release (7.1.0) before christmas. It should be available for download later today (around 21:00 UTC).

The 7.0.0 release had the best download spike of our 2020 releases. It was reached on December 11 with 34326 downloads 🙌

About the 8.0.0 features wishlist!

We’ll post a new call for tickets at the very beggining of 2021, the same way we did it for the 7.0.0 release. Everyone will be welcome to contribute to it. You can start looking for Trac tickets you’d like to see fixed for 8.0.0.

@slaffik will personally take a look at good-first-issue tasks, on those that he has created a while ago, and will open a new ticket to work on bringing Twenty Twenty One compatibility improvements to our default Template Pack 👍.

Finally and more globally about development cycles, we’ll have a discussion about how we can improve things such has release regularity, release leading, etc.

Next Dev-Chat

It will happen next year on January 6 at 19:00 UTC and of course in #BuddyPress. If you have ideas or questions, feel free (and we are strongly encouraging you) to comment this summary to share them!

Many thanks to all BuddyPress contributors for their help during 2020, we wish you all great holidays and to stay safe. See you in 2021 for some great BuddyPress times!

🎄🎅🏻🤶🏾

#dev-chat, #summary

BuddyPress 7.0.0 Release Candidate 2

This is our last chance to test 7.0.0 before it’s officially released! Let’s do it 🕺🏻

Thanks in advance for your contributions 🥰

#7-0-0, #release-candidate

BP Dev-Chat agenda December 2, 2020

Hi BuddyPress contributors!

Please join the #BuddyPress developer meeting that will happen on December 2 at 19:00 UTC (tomorrow), here’s our agenda:

  • 7.0.0 release tasks progress
  • 7.0.0 second release candidate (please have a look at this ticket #8395)
  • Open floor

Thanks in advance for your contributions 🤝.

#7-0-0, #agenda, #dev-chat

BuddyPress 6.4.0 Maintenance and Security Release

Hi everyone,

More information about it here 👇

Please upgrade 🙏 😉.

#6-4-0, #release, #security

BuddyPress 7.0.0 Release Candidate

The first release candidate of BuddyPress 7.0.0 is ready for your testing!

Thanks in advance for your contributions 😍

#7-0-0, #rc, #release

BP Dev Chat Agenda November 18, 2020.

Hi BuddyPress contributors!

Please join the #BuddyPress developers meeting that will happen on November 18 at 19:00 UTC (tomorrow), we’ll have 1 hour to talk about:

  • 6.4.0 « PHP 8.0 » compatibility release
  • 7.0.0 release tasks progress
  • 7.0.0 first release candidate (scheduled after the meeting 😱🍕)
  • Open floor (if we have some time left!)

Thanks in advance for your time 😍.

#7-0-0, #agenda, #dev-chat

BuddyPress REST API, what’s new in 7.0.0 ?

First of all, the Developer documentation has been updated according to the latest improvements we’ve brought to the BuddyPress REST API!

Members Endpoints

What’s the friendship status of the logged in user with other(s)?

If the Friends component is active and you’re wondering what’s the answer to this question, then you can get a clue thanks to a new property we’ve added to the Members item schema: friendship_status_slug.

Here’s an example of use of this new property:

/**
 * Showing the `friendship_status_slug` Members Endpoint's schema property.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/members\',
			type: \'GET\',
			data: {
				context: \'view\',
				type: \'active\',
				exclude: [2]
			}
		} ).done( function( data ) {
			data.forEach( function( member ) {
				console.log( member.name + \' => \' + member.friendship_status_slug );
			} );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

As you can see in the above browser’s inspector, the logged in user is :

  • not friend with admin (friendship_status_slug: 'not_friends'),
  • has requested a friendship request to Mercime that is still pending her approval (friendship_status_slug: 'pending'),
  • has received a friendship request from John that is awaiting his response (friendship_status_slug: 'awaiting_response'),
  • friend with Boone (friendship_status_slug: 'is_friend').

When was a user last active, what is his/her latest update and how many friends do he/she has ?

There’s now a new request argument you can use to know these information : populate_extras. You simply need to set it to true to do so. The response will include these extra properties:

  1. The last_activity object which contains 2 properties: 
    • date: the date the user was last active,
    • timediff: a human diff string, eg: “20 minutes ago”.
  2. The latest_update object which contains 3 properties:
    • id: the ID of the activity,
    • raw: the content of the activity as it exists into the database.
    • rendered: the content of the activity ready for output.
  3. The total_friend_count variable which contains the number of friends of the user (integer)

Here’s an example of use of this new request argument:

/**
 * Showing the `populate_extras` Members/:user_id request argument.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/members/2\',
			type: \'GET\',
			data: {
				context: \'view\',
				populate_extras: true
			}
		} ).done( function( member ) {
			console.log( \'Last activity:\' );
			console.log( member.last_activity );
			console.log( \'Latest activity update:\' );
			console.log( member.latest_update );
			console.log( \'Total number of friends:\' );
			console.log( member.total_friend_count );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

Can I assign more than one Member Type to a member like it’s now possible in BuddyPress?

Yes you can! You simply need to use a comma separated list of Member Types into the member_type request arggument when updating/creating the user.

Here’s an example for the first case:

/**
 * Showing the `member_type` request argument for the members/:user_id endpoint.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/members/2\',
			type: \'PUT\',
			data: {
				context: \'edit\',
				member_type: \'leads,developers\'
			}
		} ).done( function( member ) {
			console.log( \'Member Types\' );
			console.log( member.member_types );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

Groups Endpoints

Is there a route to get the groups the logged in user belongs to?

Yes, it’s /buddypress/v1/groups/me. Querying it you’ll get a list of these groups for the current user.

Here’s an example about how to use it:

/**
 * Showing the groups/me endpoint.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/groups/me\',
			type: \'GET\',
			data: {
				context: \'view\'
			}
		} ).done( function( groups ) {
			console.log( \'My Groups\' );
			groups.forEach( function( group ) {
				console.log( group.name );
			} );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

When was the last time a group was active & how many users are members of this group ?

Juste like for the Members Endpoints (GET Members & GET Member), there’s now a new request argument you can use to know these information : populate_extras. You simply need to set it to true to do so. The response will include these extra properties:

  1. total_member_count: the count of all Group members,
  2. last_activity: the date the Group was last active,
  3. last_activity_diff: the human diff time the Group was last active.

Here’s an example about how to use it:

/**
 * Showing the `populate_extras` Groups/:group_id request argument.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/groups/1\',
			type: \'GET\',
			data: {
				context: \'view\',
				populate_extras: true
			}
		} ).done( function( groups ) {
			groups.forEach( function( group ) {
				console.log( \'Last activity date:\' );
				console.log( group.last_activity );
				console.log( \'Last activity time diff:\' );
				console.log( group.last_activity_diff );
				console.log( \'Total number of group members:\' );
				console.log( group.total_member_count );
			} );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

Is it possible to append one or more Group Types to the Group Type(s) the group is assigned to ? What about removing one or more specific Group Types from the ones the group is assigned to ?

The PUT verb of the Groups/:group_id endpoint now supports 2 new request arguments to achieve this:

  • append_types : a string containing the Group Type name to append to existing group’s Group Types. To append more than one Group Type, use a comma separated list of Group Type names.
  • remove_types : a string containing the Group Type name to remove to existing group’s Group Types. To remove more than one Group Type, use a comma separated list of Group Type names.

Here’s an exemple of appending Group Types to the one that is already assigned to the group:

/**
 * Showing the groups/:group_id update method new request arguments.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/groups/1\',
			type: \'PUT\',
			data: {
				context: \'view\',
				append_types: \'team,pizzalovers\'
			}
		} ).done( function( groups ) {
			console.log( \'The initial + appended group types:\' );
			groups.forEach( function( group ) {
				console.log( group.types );
			} );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

Activity Endpoint

Is it possible to filter the list of activities on more than one action/type?

Yes, to filter the fetched activities (GET Activities) on one action/type, you need to set the type collection parameter to an array containing the corresponding action/type. For more than one action/type, include all the needed actions/types into the array used as the type collection parameter.

Here’s an example of how to achieve this:

/**
 * Showing the activity streams filtered on 2 actions/types.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/activity\',
			type: \'GET\',
			data: {
				context: \'view\',
				type: [\'activity_update\', \'friendship_created\', \'friendship_accepted\']
			}
		} ).done( function( activities ) {
			console.log( \'Updates and created friendships:\' );
			activities.forEach( function( activity ) {
				console.log( activity.id + \' => \' + activity.type );
			} );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

Do we still need to set the component request argument to groups when fetching group activities about a specified group_id request argument?

No! From now on the group_id is enough, of course you can still alternatively use a request (GET Activities) having the primary_id argument set to the ID of the group and the component argument set to groups.

Here’s an example about how you can use this request argument:

/**
 * Showing the activity streams filtered on a specific group.
 */
function test_bp_rest_api() {
	wp_enqueue_script( 'bp-api-request' );
	wp_add_inline_script(
		'bp-api-request',
		'bp.apiRequest( {
			path: \'buddypress/v1/activity\',
			type: \'GET\',
			data: {
				context: \'view\',
				group_id: 1
			}
		} ).done( function( activities ) {
			console.log( \'Group Activities:\' );
			activities.forEach( function( activity ) {
				console.log( activity.id + \' => \' + activity.component );
			} );
		} ).fail( function( error ) {
			return error;
		} );'
	);
}
add_action( 'bp_enqueue_scripts', 'test_bp_rest_api' );
Click on the image to view it in full screen

Blogs Endpoint

And last but not least, we’ve added a new route to let users create a blog (POST Blog) when the Network option is allowing it, read more about it from our freshly updated Developers documentation.

PS: if you want to get all examples at once, here’s a Gist.

#7-0-0, #rest-api

BuddyPress 7.0.0-beta2

Hi everyone!

BuddyPress 7.0.0-beta2 is ready for your testing, thanks in advance for your help 🍕 😍

https://buddypress.org/2020/11/buddypress-7-0-0-beta2/

#7-0-0, #beta, #release