PluginProbe
ActivityPub / 2.6.0
ActivityPub v2.6.0
9.3.1 9.3.0 9.2.2 9.2.1 9.2.0 9.1.0 9.0.2 9.0.1 9.0.0 8.3.0 8.2.1 8.2.0 8.1.1 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.2.0 1.3.0 2.0.0 2.0.1 2.1.0 2.1.1 All 160 releases
← All changes | includes/handler/class-undo.php +27 -62 8.3.02.6.0 View file →
@@ -1,85 +1,50 @@
1 1 <?php
2 -/**
3 - * Undo handler file.
4 - *
5 - * @package Activitypub
6 - */
7 -
8 2 namespace Activitypub\Handler;
9 3
10 -use Activitypub\Collection\Inbox as Inbox_Collection;
4 +use Activitypub\Collection\Users;
5 +use Activitypub\Collection\Followers;
11 6
12 7 use function Activitypub\object_to_uri;
13 8
14 9 /**
15 - * Handle Undo requests.
10 + * Handle Undo requests
16 11 */
17 12 class Undo {
18 13 /**
19 - * Initialize the class, registering WordPress hooks.
14 + * Initialize the class, registering WordPress hooks
20 15 */
21 16 public static function init() {
22 - \add_action( 'activitypub_inbox_undo', array( self::class, 'handle_undo' ), 10, 2 );
23 - \add_action( 'activitypub_validate_object', array( self::class, 'validate_object' ), 10, 3 );
17 + \add_action(
18 + 'activitypub_inbox_undo',
19 + array( self::class, 'handle_undo' )
20 + );
24 21 }
25 22
26 23 /**
27 - * Handle "Unfollow" requests.
24 + * Handle "Unfollow" requests
28 25 *
29 - * @param array $activity The JSON "Undo" Activity.
30 - * @param int|int[]|null $user_ids The user ID(s).
26 + * @param array $activity The JSON "Undo" Activity
27 + * @param int $user_id The ID of the ID of the WordPress User
31 28 */
32 - public static function handle_undo( $activity, $user_ids ) {
33 - $success = false;
34 - $result = Inbox_Collection::undo( object_to_uri( $activity['object'] ) );
29 + public static function handle_undo( $activity ) {
30 + if (
31 + isset( $activity['object']['type'] ) &&
32 + 'Follow' === $activity['object']['type'] &&
33 + isset( $activity['object']['object'] )
34 + ) {
35 + $user_id = object_to_uri( $activity['object']['object'] );
36 + $user = Users::get_by_resource( $user_id );
35 37
36 - if ( $result && ! \is_wp_error( $result ) ) {
37 - $success = true;
38 - }
38 + if ( ! $user || is_wp_error( $user ) ) {
39 + // If we can not find a user,
40 + // we can not initiate a follow process
41 + return;
42 + }
39 43
40 - /**
41 - * Fires after an ActivityPub Undo activity has been handled.
42 - *
43 - * @param array $activity The ActivityPub activity data.
44 - * @param int[] $user_ids The local user IDs.
45 - * @param bool $success True on success, false on failure.
46 - * @param \WP_Comment|string $result The target, based on the activity that is being undone.
47 - */
48 - \do_action( 'activitypub_handled_undo', $activity, (array) $user_ids, $success, $result );
49 - }
44 + $user_id = $user->get__id();
45 + $actor = object_to_uri( $activity['actor'] );
50 46
51 - /**
52 - * Validate the object.
53 - *
54 - * @param bool $valid The validation state.
55 - * @param string $param The object parameter.
56 - * @param \WP_REST_Request $request The request object.
57 - *
58 - * @return bool The validation state: true if valid, false if not.
59 - */
60 - public static function validate_object( $valid, $param, $request ) {
61 - $activity = $request->get_json_params();
62 -
63 - if ( empty( $activity['type'] ) ) {
64 - return false;
47 + Followers::remove_follower( $user_id, $actor );
65 48 }
66 -
67 - if ( 'Undo' !== $activity['type'] ) {
68 - return $valid;
69 - }
70 -
71 - if ( ! isset( $activity['actor'], $activity['object'] ) ) {
72 - return false;
73 - }
74 -
75 - if ( ! \is_array( $activity['object'] ) && ! \is_string( $activity['object'] ) ) {
76 - return false;
77 - }
78 -
79 - if ( \is_array( $activity['object'] ) && ! isset( $activity['object']['id'] ) ) {
80 - return false;
81 - }
82 -
83 - return $valid;
84 49 }
85 50 }