This commit is contained in:
Matthias Pfefferle 2023-04-25 09:09:07 +02:00
parent 84a82c2ac4
commit 377fc94161
2 changed files with 99 additions and 20 deletions

View file

@ -118,7 +118,8 @@ class Followers {
* Handle the "Follow" Request * Handle the "Follow" Request
* *
* @param array $object The JSON "Follow" Activity * @param array $object The JSON "Follow" Activity
* @param int $user_id The ID of the WordPress User * @param int $user_id The ID of the ID of the WordPress User
*
* @return void * @return void
*/ */
public static function handle_follow_request( $object, $user_id ) { public static function handle_follow_request( $object, $user_id ) {
@ -131,8 +132,8 @@ class Followers {
/** /**
* Handles "Unfollow" requests * Handles "Unfollow" requests
* *
* @param array $object The JSON "Undo" Activity * @param array $object The JSON "Undo" Activity
* @param int $user_id The ID of the WordPress User * @param int $user_id The ID of the ID of the WordPress User
*/ */
public static function handle_undo_request( $object, $user_id ) { public static function handle_undo_request( $object, $user_id ) {
if ( if (
@ -147,8 +148,9 @@ class Followers {
/** /**
* Add a new Follower * Add a new Follower
* *
* @param int $user_id The WordPress user * @param int $user_id The ID of the WordPress User
* @param string $actor The Actor URL * @param string $actor The Actor URL
*
* @return array|WP_Error The Follower (WP_Term array) or an WP_Error * @return array|WP_Error The Follower (WP_Term array) or an WP_Error
*/ */
public static function add_follower( $user_id, $actor ) { public static function add_follower( $user_id, $actor ) {
@ -167,9 +169,10 @@ class Followers {
/** /**
* Remove a Follower * Remove a Follower
* *
* @param int $user_id The WordPress user_id * @param int $user_id The ID of the WordPress User
* @param string $actor The Actor URL * @param string $actor The Actor URL
* @return bool|WP_Error True on success, false or WP_Error on failure. *
* @return bool|WP_Error True on success, false or WP_Error on failure.
*/ */
public static function remove_follower( $user_id, $actor ) { public static function remove_follower( $user_id, $actor ) {
return wp_remove_object_terms( $user_id, $actor, self::TAXONOMY ); return wp_remove_object_terms( $user_id, $actor, self::TAXONOMY );
@ -178,7 +181,8 @@ class Followers {
/** /**
* Remove a Follower * Remove a Follower
* *
* @param string $actor The Actor URL * @param string $actor The Actor URL
*
* @return \Activitypub\Model\Follower The Follower object * @return \Activitypub\Model\Follower The Follower object
*/ */
public static function get_follower( $actor ) { public static function get_follower( $actor ) {
@ -192,8 +196,9 @@ class Followers {
* *
* @param string $actor The Actor URL * @param string $actor The Actor URL
* @param array $object The Activity object * @param array $object The Activity object
* @param int $user_id The WordPress user_id * @param int $user_id The ID of the WordPress User
* @param Activitypub\Model\Follower $follower The Follower object * @param Activitypub\Model\Follower $follower The Follower object
*
* @return void * @return void
*/ */
public static function send_follow_response( $actor, $object, $user_id, $follower ) { public static function send_follow_response( $actor, $object, $user_id, $follower ) {
@ -218,11 +223,12 @@ class Followers {
/** /**
* Get the Followers of a given user * Get the Followers of a given user
* *
* @param int $user_id The WordPress user_id * @param int $user_id The ID of the WordPress User
* @param string $output The output format, supported ARRAY_N, OBJECT and ACTIVITYPUB_OBJECT * @param string $output The output format, supported ARRAY_N, OBJECT and ACTIVITYPUB_OBJECT
* @param int $number Limts the result * @param int $number Limts the result
* @param int $offset Offset * @param int $offset Offset
* @return array The Term list of Followers, the format depends on $output *
* @return array The Term list of Followers, the format depends on $output
*/ */
public static function get_followers( $user_id, $output = ARRAY_N, $number = null, $offset = null ) { public static function get_followers( $user_id, $output = ARRAY_N, $number = null, $offset = null ) {
//self::migrate_followers( $user_id ); //self::migrate_followers( $user_id );
@ -260,15 +266,23 @@ class Followers {
/** /**
* Count the total number of followers * Count the total number of followers
* *
* @param int $user_id The WordPress user * @param int $user_id The ID of the WordPress User
* @return int The number of Followers *
* @return int The number of Followers
*/ */
public static function count_followers( $user_id ) { public static function count_followers( $user_id ) {
return count( self::get_followers( $user_id ) ); return count( self::get_followers( $user_id ) );
} }
/**
* Returns all Inboxes fo a Users Followers
*
* @param int $user_id The ID of the WordPress User
*
* @return array The list of Inboxes
*/
public static function get_inboxes( $user_id ) { public static function get_inboxes( $user_id ) {
// get all Followers of a WordPress user // get all Followers of a ID of the WordPress User
$terms = new WP_Term_Query( $terms = new WP_Term_Query(
array( array(
'taxonomy' => self::TAXONOMY, 'taxonomy' => self::TAXONOMY,
@ -295,9 +309,9 @@ class Followers {
} }
/** /**
* Undocumented function * Migrate Followers
* *
* @param [type] $user_id * @param int $user_id The ID of the WordPress User
* @return void * @return void
*/ */
public static function migrate_followers( $user_id ) { public static function migrate_followers( $user_id ) {

View file

@ -8,32 +8,97 @@ use function Activitypub\get_remote_metadata_by_actor;
/** /**
* ActivityPub Follower Class * ActivityPub Follower Class
* *
* This Object represents a single Follower.
* There is no direct reference to a WordPress User here.
*
* @author Matthias Pfefferle * @author Matthias Pfefferle
* *
* @see https://www.w3.org/TR/activitypub/#follow-activity-inbox * @see https://www.w3.org/TR/activitypub/#follow-activity-inbox
*/ */
class Follower { class Follower {
/**
* The Object ID
*
* @var int
*/
private $id; private $id;
/**
* The Actor-URL of the Follower
*
* @var string
*/
private $actor; private $actor;
/**
* The Object slug
*
* This is a requirement of the Term-Meta but will not
* be actively used in the ActivityPub context.
*
* @var string
*/
private $slug; private $slug;
/**
* The Object Name
*
* This is the same as the Actor-URL
*
* @var string
*/
private $name; private $name;
/**
* The Username
*
* @var string
*/
private $username; private $username;
/**
* The Avatar URL
*
* @var string
*/
private $avatar; private $avatar;
/**
* The URL to the Followers Inbox
*
* @var string
*/
private $inbox; private $inbox;
/**
* The URL to the Servers Shared-Inbox
*
* If the Server does not support Shared-Inboxes,
* the Inbox will be stored.
*
* @var string
*/
private $shared_inbox; private $shared_inbox;
/**
* The date, the Follower was updated
*
* @var string untixtimestamp
*/
private $updated_at; private $updated_at;
/**
* The complete Remote-Profile of the Follower
*
* @var array
*/
private $meta; private $meta;
/**
* Maps the meta fields to the local db fields
*
* @var array
*/
private $map_meta = array( private $map_meta = array(
'name' => 'name', 'name' => 'name',
'preferredUsername' => 'username', 'preferredUsername' => 'username',