81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace Activitypub\Peer;
 | 
						|
 | 
						|
/**
 | 
						|
 * ActivityPub Followers DB-Class
 | 
						|
 *
 | 
						|
 * @author Matthias Pfefferle
 | 
						|
 */
 | 
						|
class Followers {
 | 
						|
 | 
						|
	public static function get_followers( $author_id ) {
 | 
						|
		$followers = \get_user_option( 'activitypub_followers', $author_id );
 | 
						|
 | 
						|
		if ( ! $followers ) {
 | 
						|
			return array();
 | 
						|
		}
 | 
						|
 | 
						|
		foreach ( $followers as $key => $follower ) {
 | 
						|
			if (
 | 
						|
				\is_array( $follower ) &&
 | 
						|
				isset( $follower['type'] ) &&
 | 
						|
				'Person' === $follower['type'] &&
 | 
						|
				isset( $follower['id'] ) &&
 | 
						|
				false !== \filter_var( $follower['id'], \FILTER_VALIDATE_URL )
 | 
						|
			) {
 | 
						|
				$followers[ $key ] = $follower['id'];
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return $followers;
 | 
						|
	}
 | 
						|
 | 
						|
	public static function count_followers( $author_id ) {
 | 
						|
		$followers = self::get_followers( $author_id );
 | 
						|
 | 
						|
		return \count( $followers );
 | 
						|
	}
 | 
						|
 | 
						|
	public static function add_follower( $actor, $author_id ) {
 | 
						|
		$followers = \get_user_option( 'activitypub_followers', $author_id );
 | 
						|
 | 
						|
		if ( ! \is_string( $actor ) ) {
 | 
						|
			if (
 | 
						|
				\is_array( $actor ) &&
 | 
						|
				isset( $actor['type'] ) &&
 | 
						|
				'Person' === $actor['type'] &&
 | 
						|
				isset( $actor['id'] ) &&
 | 
						|
				false !== \filter_var( $actor['id'], \FILTER_VALIDATE_URL )
 | 
						|
			) {
 | 
						|
				$actor = $actor['id'];
 | 
						|
			}
 | 
						|
 | 
						|
			return new \WP_Error( 'invalid_actor_object', \__( 'Unknown Actor schema', 'activitypub' ), array(
 | 
						|
				'status' => 404,
 | 
						|
			) );
 | 
						|
		}
 | 
						|
 | 
						|
		if ( ! \is_array( $followers ) ) {
 | 
						|
			$followers = array( $actor );
 | 
						|
		} else {
 | 
						|
			$followers[] = $actor;
 | 
						|
		}
 | 
						|
 | 
						|
		$followers = \array_unique( $followers );
 | 
						|
 | 
						|
		\update_user_meta( $author_id, 'activitypub_followers', $followers );
 | 
						|
	}
 | 
						|
 | 
						|
	public static function remove_follower( $actor, $author_id ) {
 | 
						|
		$followers = \get_user_option( 'activitypub_followers', $author_id );
 | 
						|
 | 
						|
		foreach ( $followers as $key => $value ) {
 | 
						|
			if ( $value === $actor ) {
 | 
						|
				unset( $followers[ $key ] );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		\update_user_meta( $author_id, 'activitypub_followers', $followers );
 | 
						|
	}
 | 
						|
}
 |