91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * BuddyPress integration class file.
 | 
						|
 *
 | 
						|
 * @package Activitypub
 | 
						|
 */
 | 
						|
 | 
						|
namespace Activitypub\Integration;
 | 
						|
 | 
						|
/**
 | 
						|
 * Compatibility with the BuddyPress plugin.
 | 
						|
 *
 | 
						|
 * @see https://buddypress.org/
 | 
						|
 */
 | 
						|
class Buddypress {
 | 
						|
	/**
 | 
						|
	 * Initialize the class, registering WordPress hooks.
 | 
						|
	 */
 | 
						|
	public static function init() {
 | 
						|
		\add_filter( 'activitypub_json_author_array', array( self::class, 'add_user_metadata' ), 11, 2 );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Add BuddyPress user metadata to the author array.
 | 
						|
	 *
 | 
						|
	 * @param object $author    The author object.
 | 
						|
	 * @param int    $author_id The author ID.
 | 
						|
	 *
 | 
						|
	 * @return object The author object.
 | 
						|
	 */
 | 
						|
	public static function add_user_metadata( $author, $author_id ) {
 | 
						|
		$author->url = bp_core_get_user_domain( $author_id ); // Add BP member profile URL as user URL.
 | 
						|
 | 
						|
		// Add BuddyPress' cover_image instead of WordPress' header_image.
 | 
						|
		$cover_image_url = bp_attachments_get_attachment( 'url', array( 'item_id' => $author_id ) );
 | 
						|
 | 
						|
		if ( $cover_image_url ) {
 | 
						|
			$author->image = array(
 | 
						|
				'type' => 'Image',
 | 
						|
				'url'  => $cover_image_url,
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		// Change profile URL to BuddyPress' profile URL.
 | 
						|
		$author->attachment['profile_url'] = array(
 | 
						|
			'type'  => 'PropertyValue',
 | 
						|
			'name'  => \__( 'Profile', 'activitypub' ),
 | 
						|
			'value' => \html_entity_decode(
 | 
						|
				sprintf(
 | 
						|
					'<a rel="me" title="%s" target="_blank" href="%s">%s</a>',
 | 
						|
					\esc_attr( bp_core_get_user_domain( $author_id ) ),
 | 
						|
					\bp_core_get_user_domain( $author_id ),
 | 
						|
					\wp_parse_url( \bp_core_get_user_domain( $author_id ), \PHP_URL_HOST )
 | 
						|
				),
 | 
						|
				\ENT_QUOTES,
 | 
						|
				'UTF-8'
 | 
						|
			),
 | 
						|
		);
 | 
						|
 | 
						|
		// Replace blog URL on multisite.
 | 
						|
		if ( is_multisite() ) {
 | 
						|
			$user_blogs = get_blogs_of_user( $author_id ); // Get sites of user to send as AP metadata.
 | 
						|
 | 
						|
			if ( ! empty( $user_blogs ) ) {
 | 
						|
				unset( $author->attachment['blog_url'] );
 | 
						|
 | 
						|
				foreach ( $user_blogs as $blog ) {
 | 
						|
					if ( 1 !== $blog->userblog_id ) {
 | 
						|
						$author->attachment[] = array(
 | 
						|
							'type'  => 'PropertyValue',
 | 
						|
							'name'  => $blog->blogname,
 | 
						|
							'value' => \html_entity_decode(
 | 
						|
								sprintf(
 | 
						|
									'<a rel="me" title="%s" target="_blank" href="%s">%s</a>',
 | 
						|
									\esc_attr( $blog->siteurl ),
 | 
						|
									$blog->siteurl,
 | 
						|
									\wp_parse_url( $blog->siteurl, \PHP_URL_HOST )
 | 
						|
								),
 | 
						|
								\ENT_QUOTES,
 | 
						|
								'UTF-8'
 | 
						|
							),
 | 
						|
						);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return $author;
 | 
						|
	}
 | 
						|
}
 |