get_id() ) { return new \WP_Error( 'activitypub_forbidden', \__( 'You can only undo your own activities.', 'activitypub' ), array( 'status' => 403 ) ); } $target = object_to_uri( $object['object'] ?? '' ); if ( $target ) { return unfollow( $target, $user_id ); } } return $data; } $outbox_item = Outbox_Collection::get_by_guid( $id ); if ( \is_wp_error( $outbox_item ) ) { return $data; } // Verify the user owns this outbox item (blog actor user_id === 0 can undo any). if ( $user_id > 0 && (int) $outbox_item->post_author !== $user_id ) { return new \WP_Error( 'activitypub_forbidden', \__( 'You can only undo your own activities.', 'activitypub' ), array( 'status' => 403 ) ); } $activity_type = \get_post_meta( $outbox_item->ID, '_activitypub_activity_type', true ); switch ( $activity_type ) { case 'Follow': $stored = \json_decode( $outbox_item->post_content, true ); $target = object_to_uri( $stored['object'] ?? '' ); if ( $target ) { return unfollow( $target, $user_id ); } return $data; case 'Block': $stored = \json_decode( $outbox_item->post_content, true ); $actor_uri = \is_array( $stored ) ? object_to_uri( $stored['object'] ?? '' ) : ''; if ( $actor_uri ) { Moderation::remove_user_block( $user_id, Moderation::TYPE_ACTOR, $actor_uri ); } return Outbox_Collection::undo( $outbox_item ); default: return Outbox_Collection::undo( $outbox_item ); } } }