diff --git a/includes/class-activity-dispatcher.php b/includes/class-activity-dispatcher.php index 51d69b2..4e203c8 100644 --- a/includes/class-activity-dispatcher.php +++ b/includes/class-activity-dispatcher.php @@ -7,6 +7,7 @@ use Activitypub\Collection\Users; use Activitypub\Collection\Followers; use Activitypub\Transformer\Post; +use function Activitypub\is_single_user; use function Activitypub\is_user_disabled; use function Activitypub\safe_remote_post; @@ -22,8 +23,11 @@ class Activity_Dispatcher { * Initialize the class, registering WordPress hooks. */ public static function init() { - \add_action( 'activitypub_send_activity', array( self::class, 'send_user_activity' ), 10, 2 ); - \add_action( 'activitypub_send_activity', array( self::class, 'send_announce_activity' ), 10, 2 ); + // check if a migration is needed before sending new posts + Migration::maybe_migrate(); + + \add_action( 'activitypub_send_activity', array( self::class, 'send_activity' ), 10, 2 ); + \add_action( 'activitypub_send_activity', array( self::class, 'send_activity_or_announce' ), 10, 2 ); } /** @@ -34,10 +38,7 @@ class Activity_Dispatcher { * * @return void */ - public static function send_user_activity( WP_Post $wp_post, $type ) { - // check if a migration is needed before sending new posts - Migration::maybe_migrate(); - + public static function send_activity( WP_Post $wp_post, $type ) { if ( is_user_disabled( $wp_post->post_author ) ) { return; } @@ -48,8 +49,7 @@ class Activity_Dispatcher { $activity->set_type( $type ); $activity->set_object( $object ); - $user_id = $wp_post->post_author; - $follower_inboxes = Followers::get_inboxes( $user_id ); + $follower_inboxes = Followers::get_inboxes( $wp_post->post_author ); $mentioned_inboxes = Mention::get_inboxes( $activity->get_cc() ); $inboxes = array_merge( $follower_inboxes, $mentioned_inboxes ); @@ -63,46 +63,24 @@ class Activity_Dispatcher { } /** - * Send Activities to followers and mentioned users. + * Send Activities to followers and mentioned users or `Announce` (boost) a blog post. * * @param WP_Post $wp_post The ActivityPub Post. * @param string $type The Activity-Type. * * @return void */ - public static function send_blog_activity( WP_Post $wp_post, $type ) { - // check if a migration is needed before sending new posts - Migration::maybe_migrate(); - - if ( ! in_array( $type, array( 'Create', 'Update' ), true ) ) { - return; - } - + public static function send_activity_or_announce( WP_Post $wp_post, $type ) { if ( is_user_disabled( Users::BLOG_USER_ID ) ) { return; } - $user = Users::get_by_id( Users::BLOG_USER_ID ); + $wp_post->post_author = Users::BLOG_USER_ID; - $object = Post::transform( $wp_post )->to_object(); - $object->set_attributed_to( $user->get_id() ); - - $activity = new Activity(); - $activity->set_type( $type ); - $activity->set_actor( $user->get_id() ); - $activity->set_object( $object ); - - $user_id = Users::BLOG_USER_ID; - $follower_inboxes = Followers::get_inboxes( $user_id ); - $mentioned_inboxes = Mention::get_inboxes( $activity->get_cc() ); - - $inboxes = array_merge( $follower_inboxes, $mentioned_inboxes ); - $inboxes = array_unique( $inboxes ); - - $json = $activity->to_json(); - - foreach ( $inboxes as $inbox ) { - safe_remote_post( $inbox, $json, $user_id ); + if ( is_single_user() ) { + self::send_user_activity( $wp_post, $type ); + } else { + self::send_announce_activity( $wp_post, $type ); } } @@ -114,7 +92,7 @@ class Activity_Dispatcher { * * @return void */ - public static function send_announce_activity( WP_Post $wp_post, $type ) { + public static function send_announce( WP_Post $wp_post, $type ) { // check if a migration is needed before sending new posts Migration::maybe_migrate(); @@ -126,19 +104,16 @@ class Activity_Dispatcher { return; } - $user = Users::get_by_id( Users::BLOG_USER_ID ); - $object = Post::transform( $wp_post )->to_object(); $activity = new Activity(); $activity->set_type( 'Announce' ); - $activity->set_actor( $user->get_id() ); + // to pre-fill attributes like "published" and "id" $activity->set_object( $object ); - + // send only the id $activity->set_object( $object->get_id() ); - $user_id = Users::BLOG_USER_ID; - $follower_inboxes = Followers::get_inboxes( $user_id ); + $follower_inboxes = Followers::get_inboxes( $wp_post->post_author ); $mentioned_inboxes = Mention::get_inboxes( $activity->get_cc() ); $inboxes = array_merge( $follower_inboxes, $mentioned_inboxes );