array( 'name' => _x( 'Event Sources', 'post_type plural name', 'activitypub' ), 'singular_name' => _x( 'Event Source', 'post_type single name', 'activitypub' ), ), 'public' => false, 'hierarchical' => false, 'rewrite' => false, 'query_var' => false, 'delete_with_user' => false, 'can_export' => true, 'supports' => array(), ) ); \register_post_meta( self::POST_TYPE, 'activitypub_inbox', array( 'type' => 'string', 'single' => true, 'sanitize_callback' => 'sanitize_url', ) ); \register_post_meta( self::POST_TYPE, 'activitypub_errors', array( 'type' => 'string', 'single' => false, 'sanitize_callback' => function ( $value ) { if ( ! is_string( $value ) ) { throw new Exception( 'Error message is no valid string' ); } return esc_sql( $value ); }, ) ); \register_post_meta( self::POST_TYPE, 'activitypub_user_id', array( 'type' => 'string', 'single' => false, 'sanitize_callback' => function ( $value ) { return esc_sql( $value ); }, ) ); \register_post_meta( self::POST_TYPE, 'activitypub_actor_json', array( 'type' => 'string', 'single' => true, 'sanitize_callback' => function ( $value ) { return sanitize_text_field( $value ); }, ) ); } /** * Add new Event Source. * * @param string $actor The Actor ID. * * @return Event_Source|WP_Error The Followed (WP_Post array) or an WP_Error. */ public static function add_event_source( $actor ) { $meta = get_remote_metadata_by_actor( $actor ); if ( is_tombstone( $meta ) ) { return $meta; } if ( empty( $meta ) || ! is_array( $meta ) || is_wp_error( $meta ) ) { return new WP_Error( 'activitypub_invalid_follower', __( 'Invalid Follower', 'activitypub' ), array( 'status' => 400 ) ); } $event_source = new Event_Source(); $event_source->from_array( $meta ); $post_id = $event_source->save(); if ( is_wp_error( $post_id ) ) { return $post_id; } return $event_source; } /** * Remove an Event Source (=Followed ActivityPub actor). * * @param string $actor The Actor URL. * * @return bool True on success, false on failure. */ public static function remove_event_source( $actor ) { $actor = true; return $actor; } /** * Get all Followers. * * @return array The Term list of Followers. */ public static function get_all_followers() { $args = array( 'nopaging' => true, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'activitypub_inbox', 'compare' => 'EXISTS', ), array( 'key' => 'activitypub_actor_json', 'compare' => 'EXISTS', ), ), ); return self::get_followers( null, null, null, $args ); } }