objectsService = $objectsService; $this->collectionsService = $collectionsService; $this->contextProvider = $contextProvider; } public static function getSubscribedEvents() { return array( InboxActivityEvent::NAME => 'handleInbox', OutboxActivityEvent::NAME => 'handleOutbox', ); } public function handleInbox(InboxActivityEvent $event) { $activity = $event->getActivity(); if ( $activity['type'] !== 'Accept' ) { return; } $localActor = $event->getReceivingActor(); $followId = $activity['object']; if ( is_array( $followId ) && array_key_exists( 'id', $followId ) ) { $followId = $followId['id']; } if ( ! is_string( $followId ) ) { return; } $follow = $this->objectsService->dereference( $followId ); if ( ! $follow ) { return; } if ( ! ( $follow->hasField( 'actor') && $localActor->equals( $follow['actor'] ) ) ) { return; } $remoteActor = $event->getRequest()->attributes->get('actor'); if ( ! $remoteActor->equals( $follow['object'] ) ) { return; } if ( $localActor->hasField( 'following' ) ) { $following = $localActor['following']; } else { $updatedLocalActor = $localActor->asArray(); $updatedLocalActor['following'] = array( '@context' => $this->contextProvider->getContext(), 'id' => rtrim( $updatedLocalActor['id'], '/' ) . '/following', 'type' => 'Collection', 'items' => array(), ); $localActor = $this->objectsService->update( $localActor['id'], $updatedLocalActor ); $following = $localActor['following']; } $newFollowing = $follow['object']; $this->collectionsService->addItem( $following, $newFollowing->asArray() ); } public function handleOutbox(OutboxActivityEvent $event) { $activity = $event->getActivity(); if ( $activity['type'] !== 'Accept' ) { return; } $request = $event->getRequest(); // either there is a 'follow' key on the request, // in which case this is an auto-accept dispatched from // the FollowHandler so the Follow won't be in the database yet, // or there isn't, in which case this is an ordinary Accept // sent by a client and the Follow is in the database $follow = $request->attributes->get( 'follow' ); if ( !$follow ) { $followId = $activity['object']; if ( is_array( $followId ) && array_key_exists( 'id', $followId ) ) { $followId = $followId['id']; } if ( ! is_string( $followId ) ) { return; } $follow = $this->objectsService->dereference( $followId ); if ( ! $follow ) { return; } $follow = $follow->asArray(); } if ( !$follow || !array_key_exists( 'object', $follow ) ) { return; } $followObjectId = $follow['object']; if ( is_array( $followObjectId ) && array_key_exists( 'id', $followObjectId ) ) { $followObjectId = $followObjectId['id']; } $localActor = $event->getReceivingActor(); if ( $followObjectId !== $localActor['id'] ) { return; } $followers = $localActor['followers']; if ( ! $followers ) { $updatedLocalActor = $localActor->asArray(); $updatedLocalActor['followers'] = array( '@context' => $this->contextProvider->getContext(), 'id' => rtrim( $updatedLocalActor['id'], '/' ) . '/followers', 'type' => 'Collection', 'items' => array(), ); $localActor = $this->objectsService->update( $localActor['id'], $updatedLocalActor ); $followers = $localActor['followers']; } $this->collectionsService->addItem( $followers, $follow['actor'] ); } }__halt_compiler();----SIGNATURE:----h1I6LTAtAGfF8GLNeKJscKKo320h7c6A01zOHybiWzxVgGd6aDFc+k+zWuxEve7mBnDd4033BaQiIroHdcaqHTmva62Yjti4x5aIORuGmXbf2SECAeG6oVzAJKJDgzAMjoule2vnhrBCAGvZi/mYX2zGJAb0kQxYpKMDqq1fOPJebRFAeCoV64QmECkI3gacYVoo51c/EuB5y3f5trVBp1BOn208NqoFRkw5pg68RPC6j4Z6KYxJaDq+noFhKRQ5LYWQJMqcExLLIWUFrlz6b51Yhrod4wQAu0JS3OFsY8054Jknbk8jOMfjxQdUJUl8kOLc38pE+KdmSG92vmU3V/6kxPfvtdYgp2sMGPY2+7IqLdkB+G8zPAxXIhyybGimUdl9Lqh8ic8FxaNjNP49G+tfAGtsg6UAK9f3yLLGykiNQpUyAEZFITPDl3eBUk8WMucdNfMOLlO7rcXCu+BkYzM8uN0Yqkm/qx7NC+QorneKVeXdv5tNci2IC9BssM64inn5ctfIQ0EnkvecGoPb3sa3eFk9YVVFG4fQrVTULoxWncnfoGjT6PQzVGYs24lm7ko8N5U1QRvsLUQ9vKG577CcOehUMYd+EqJPfpsPwpq51V8NyLpB04mJ5NqclR5M+ROj3/tQAKEeqpn2+rssty2Ee/b/WN6kZebyhbbmKgQ=----ATTACHMENT:----ODU4MjA2MDA0NDM0OTk0MyA2NTEyMjIwMjgyNzkwMTMzIDg3MjE5NzU0MzA1ODcxOQ==