fix migration to blog user
Some checks failed
PHP Code Checker / PHP Code Checker (pull_request) Successful in 54s
PHPUnit / PHPUnit – PHP 7.4 (pull_request) Failing after 54s
PHPUnit / PHPUnit – PHP 8.0 (pull_request) Successful in 1m4s
PHPUnit / PHPUnit – PHP 8.1 (pull_request) Successful in 1m9s
PHPUnit / PHPUnit – PHP 8.2 (pull_request) Successful in 1m5s
PHPUnit / PHPUnit – PHP 8.3 (pull_request) Successful in 1m6s
PHPUnit / PHPUnit – PHP 8.4 (pull_request) Successful in 1m2s

This commit is contained in:
André Menrath 2024-12-15 16:12:24 +01:00
parent 96e0d0937c
commit 69f0cd3ccb
4 changed files with 46 additions and 30 deletions

View file

@ -9,9 +9,10 @@
namespace Event_Bridge_For_ActivityPub\ActivityPub\Collection; namespace Event_Bridge_For_ActivityPub\ActivityPub\Collection;
use Activitypub\Model\Blog;
use Event_Bridge_For_ActivityPub\ActivityPub\Model\Event_Source;
use WP_Error; use WP_Error;
use WP_Query; use WP_Query;
use Event_Bridge_For_ActivityPub\ActivityPub\Model\Event_Source;
use function Activitypub\is_tombstone; use function Activitypub\is_tombstone;
use function Activitypub\get_remote_metadata_by_actor; use function Activitypub\get_remote_metadata_by_actor;
@ -30,8 +31,8 @@ class Event_Sources {
*/ */
public static function init() { public static function init() {
self::register_post_type(); self::register_post_type();
\add_action( 'event_bridge_for_activitypub_follow', array( self::class, 'activitypub_follow_actor' ), 10, 2 ); \add_action( 'event_bridge_for_activitypub_follow', array( self::class, 'activitypub_follow_actor' ), 10, 1 );
\add_action( 'event_bridge_for_activitypub_unfollow', array( self::class, 'activitypub_unfollow_actor' ), 10, 2 ); \add_action( 'event_bridge_for_activitypub_unfollow', array( self::class, 'activitypub_unfollow_actor' ), 10, 1 );
} }
/** /**
@ -155,7 +156,7 @@ class Event_Sources {
return $post_id; return $post_id;
} }
self::queue_follow_actor( $actor ); $success = self::queue_follow_actor( $actor );
self::delete_event_source_transients(); self::delete_event_source_transients();
@ -181,12 +182,24 @@ class Event_Sources {
* @return WP_Post|false|null Post data on success, false or null on failure. * @return WP_Post|false|null Post data on success, false or null on failure.
*/ */
public static function remove_event_source( $actor ) { public static function remove_event_source( $actor ) {
$post_id = Event_Source::get_wp_post_from_activitypub_actor_id( $actor ); $actor = Event_Source::get_by_id( $actor );
if ( ! $actor ) {
return;
}
$post_id = $actor->get__id();
if ( ! $post_id ) { if ( ! $post_id ) {
return; return;
} }
$thumbnail_id = get_post_thumbnail_id( $post_id );
if ( $thumbnail_id ) {
wp_delete_attachment( $thumbnail_id, true );
}
$result = wp_delete_post( $post_id, true ); $result = wp_delete_post( $post_id, true );
// If the deletion was successful delete all transients regarding event sources. // If the deletion was successful delete all transients regarding event sources.
@ -336,7 +349,7 @@ class Event_Sources {
public static function queue_follow_actor( $actor ) { public static function queue_follow_actor( $actor ) {
$queued = self::queue( $queued = self::queue(
'event_bridge_for_activitypub_follow', 'event_bridge_for_activitypub_follow',
$actor, array( $actor ),
'event_bridge_for_activitypub_unfollow' 'event_bridge_for_activitypub_unfollow'
); );
@ -344,27 +357,21 @@ class Event_Sources {
} }
/** /**
* Follow an ActivityPub actor via the Application user. * Follow an ActivityPub actor via the Blog user.
* *
* @param string $actor_id The ID/URL of the Actor. * @param string $actor_id The ID/URL of the Actor.
*/ */
public static function activitypub_follow_actor( $actor_id ) { public static function activitypub_follow_actor( $actor_id ) {
$post_id = Event_Source::get_wp_post_from_activitypub_actor_id( $actor_id ); $actor = Event_Source::get_by_id( $actor_id );
if ( ! $post_id ) { if ( ! $actor ) {
return;
}
$actor = Event_Source::init_from_cpt( get_post( $post_id ) );
if ( ! $actor instanceof Event_Source ) {
return $actor; return $actor;
} }
$inbox = $actor->get_shared_inbox(); $inbox = $actor->get_shared_inbox();
$to = $actor->get_id(); $to = $actor->get_id();
$application = new \Activitypub\Model\Application(); $application = new Blog();
$activity = new \Activitypub\Activity\Activity(); $activity = new \Activitypub\Activity\Activity();
$activity->set_type( 'Follow' ); $activity->set_type( 'Follow' );
@ -387,7 +394,7 @@ class Event_Sources {
public static function queue_unfollow_actor( $actor ) { public static function queue_unfollow_actor( $actor ) {
$queued = self::queue( $queued = self::queue(
'event_bridge_for_activitypub_unfollow', 'event_bridge_for_activitypub_unfollow',
$actor, array( $actor ),
'event_bridge_for_activitypub_follow' 'event_bridge_for_activitypub_follow'
); );
@ -400,22 +407,16 @@ class Event_Sources {
* @param string $actor_id The ActivityPub actor ID. * @param string $actor_id The ActivityPub actor ID.
*/ */
public static function activitypub_unfollow_actor( $actor_id ) { public static function activitypub_unfollow_actor( $actor_id ) {
$post_id = Event_Source::get_wp_post_from_activitypub_actor_id( $actor_id ); $actor = Event_Source::get_by_id( $actor_id );
if ( ! $post_id ) { if ( ! $actor ) {
return;
}
$actor = Event_Source::init_from_cpt( get_post( $post_id ) );
if ( ! $actor instanceof Event_Source ) {
return $actor; return $actor;
} }
$inbox = $actor->get_shared_inbox(); $inbox = $actor->get_shared_inbox();
$to = $actor->get_id(); $to = $actor->get_id();
$application = new \Activitypub\Model\Application(); $application = new Blog();
if ( is_wp_error( $inbox ) ) { if ( is_wp_error( $inbox ) ) {
return $inbox; return $inbox;

View file

@ -74,7 +74,7 @@ class Create {
} }
$transmogrifier = new $transmogrifier_class( $activity['object'] ); $transmogrifier = new $transmogrifier_class( $activity['object'] );
$transmogrifier->create(); $transmogrifier->save();
} }
/** /**

View file

@ -57,6 +57,6 @@ class Update {
} }
$transmogrifier = new $transmogrifier_class( $activity['object'] ); $transmogrifier = new $transmogrifier_class( $activity['object'] );
$transmogrifier->update(); $transmogrifier->save();
} }
} }

View file

@ -52,7 +52,7 @@ class Event_Source extends Actor {
* @param string $actor_id The ActivityPub actor ID. * @param string $actor_id The ActivityPub actor ID.
* @return ?int The WordPress post ID if the actor is found, null if not. * @return ?int The WordPress post ID if the actor is found, null if not.
*/ */
public static function get_wp_post_from_activitypub_actor_id( $actor_id ) { private static function get_wp_post_by_activitypub_actor_id( $actor_id ) {
global $wpdb; global $wpdb;
$post_id = $wpdb->get_var( $post_id = $wpdb->get_var(
$wpdb->prepare( $wpdb->prepare(
@ -61,7 +61,22 @@ class Event_Source extends Actor {
Event_Sources::POST_TYPE Event_Sources::POST_TYPE
) )
); );
return $post_id ? intval( $post_id ) : null; return $post_id ? get_post( $post_id ) : null;
}
/**
* Get the WordPress post which stores the Event Source by the ActivityPub actor id of the event source.
*
* @param string $actor_id The ActivityPub actor ID.
* @return ?Event_Source The WordPress post ID if the actor is found, null if not.
*/
public static function get_by_id( $actor_id ) {
$post = self::get_wp_post_by_activitypub_actor_id( $actor_id );
if ( $post ) {
$actor = self::init_from_cpt( $post );
}
return $actor ?? null;
} }
/** /**