Add Tribe organizer
All checks were successful
PHP Code Checker / PHP Code Checker (pull_request) Successful in 55s
PHPUnit / PHPUnit – PHP 7.4 (pull_request) Successful in 1m4s
PHPUnit / PHPUnit – PHP 8.0 (pull_request) Successful in 1m4s
PHPUnit / PHPUnit – PHP 8.1 (pull_request) Successful in 1m1s
PHPUnit / PHPUnit – PHP 8.2 (pull_request) Successful in 1m3s
PHPUnit / PHPUnit – PHP 8.3 (pull_request) Successful in 1m3s
PHPUnit / PHPUnit – PHP 8.4 (pull_request) Successful in 1m0s
All checks were successful
PHP Code Checker / PHP Code Checker (pull_request) Successful in 55s
PHPUnit / PHPUnit – PHP 7.4 (pull_request) Successful in 1m4s
PHPUnit / PHPUnit – PHP 8.0 (pull_request) Successful in 1m4s
PHPUnit / PHPUnit – PHP 8.1 (pull_request) Successful in 1m1s
PHPUnit / PHPUnit – PHP 8.2 (pull_request) Successful in 1m3s
PHPUnit / PHPUnit – PHP 8.3 (pull_request) Successful in 1m3s
PHPUnit / PHPUnit – PHP 8.4 (pull_request) Successful in 1m0s
This commit is contained in:
parent
633a5332d1
commit
aee19e9606
2 changed files with 79 additions and 3 deletions
|
@ -15,6 +15,7 @@ namespace Event_Bridge_For_ActivityPub\ActivityPub\Model;
|
||||||
use Activitypub\Activity\Actor;
|
use Activitypub\Activity\Actor;
|
||||||
use Event_Bridge_For_ActivityPub\ActivityPub\Collection\Event_Sources;
|
use Event_Bridge_For_ActivityPub\ActivityPub\Collection\Event_Sources;
|
||||||
use WP_Error;
|
use WP_Error;
|
||||||
|
use WP_Post;
|
||||||
|
|
||||||
use function Activitypub\sanitize_url;
|
use function Activitypub\sanitize_url;
|
||||||
|
|
||||||
|
@ -61,11 +62,24 @@ class Event_Source extends Actor {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for URL attribute.
|
||||||
|
*
|
||||||
|
* @return string The URL.
|
||||||
|
*/
|
||||||
|
public function get_url() {
|
||||||
|
if ( $this->url ) {
|
||||||
|
return $this->url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the WordPress post which stores the Event Source by the ActivityPub actor id of the event source.
|
* 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.
|
* @param string $actor_id The ActivityPub actor ID.
|
||||||
* @return ?int The WordPress post ID if the actor is found, null if not.
|
* @return ?WP_Post The WordPress post if the actor is found, null if not.
|
||||||
*/
|
*/
|
||||||
private static function get_wp_post_by_activitypub_actor_id( $actor_id ) {
|
private static function get_wp_post_by_activitypub_actor_id( $actor_id ) {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
@ -110,8 +124,8 @@ class Event_Source extends Actor {
|
||||||
$object->set_id( $post->guid );
|
$object->set_id( $post->guid );
|
||||||
$object->set_name( $post->post_title );
|
$object->set_name( $post->post_title );
|
||||||
$object->set_summary( $post->post_excerpt );
|
$object->set_summary( $post->post_excerpt );
|
||||||
$object->set_published( gmdate( 'Y-m-d H:i:s', strtotime( $post->post_date ) ) );
|
$object->set_published( gmdate( 'Y-m-d H:i:s', strtotime( $post->post_date_gmt ) ) );
|
||||||
$object->set_updated( gmdate( 'Y-m-d H:i:s', strtotime( $post->post_modified ) ) );
|
$object->set_updated( gmdate( 'Y-m-d H:i:s', strtotime( $post->post_modified_gmt ) ) );
|
||||||
$thumbnail_id = get_post_thumbnail_id( $post );
|
$thumbnail_id = get_post_thumbnail_id( $post );
|
||||||
if ( $thumbnail_id ) {
|
if ( $thumbnail_id ) {
|
||||||
$object->set_icon(
|
$object->set_icon(
|
||||||
|
|
|
@ -11,9 +11,11 @@
|
||||||
|
|
||||||
namespace Event_Bridge_For_ActivityPub\ActivityPub\Transmogrifier;
|
namespace Event_Bridge_For_ActivityPub\ActivityPub\Transmogrifier;
|
||||||
|
|
||||||
|
use Event_Bridge_For_ActivityPub\ActivityPub\Model\Event_Source;
|
||||||
use Tribe__Date_Utils;
|
use Tribe__Date_Utils;
|
||||||
|
|
||||||
use function Activitypub\sanitize_url;
|
use function Activitypub\sanitize_url;
|
||||||
|
use function Activitypub\object_to_uri;
|
||||||
|
|
||||||
// Exit if accessed directly.
|
// Exit if accessed directly.
|
||||||
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
|
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
|
||||||
|
@ -103,6 +105,59 @@ class The_Events_Calendar extends Base {
|
||||||
return $post_id;
|
return $post_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add organizer.
|
||||||
|
*
|
||||||
|
* @return int|bool $post_id The organizers post ID.
|
||||||
|
*/
|
||||||
|
private function add_organizer() {
|
||||||
|
// This might likely change, because of FEP-8a8e.
|
||||||
|
$actor = $this->activitypub_event->get_attributed_to();
|
||||||
|
if ( is_null( $actor ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$actor_id = object_to_uri( $actor );
|
||||||
|
|
||||||
|
$event_source = Event_Source::get_by_id( $actor_id );
|
||||||
|
|
||||||
|
// As long as we do not support announces, we expect the attributedTo to be an existing event source.
|
||||||
|
if ( ! $event_source ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tribe_organizer = tribe_organizers()
|
||||||
|
->set_args(
|
||||||
|
array(
|
||||||
|
'organizer' => $event_source->get_name(),
|
||||||
|
'description' => $event_source->get_summary(),
|
||||||
|
'post_date_gmt' => $event_source->get_published(),
|
||||||
|
'website' => $event_source->get_id(),
|
||||||
|
'excerpt' => $event_source->get_summary(),
|
||||||
|
),
|
||||||
|
'publish',
|
||||||
|
true // This enables avoid_duplicates which includes exact matches of title, content, excerpt, and website.
|
||||||
|
)->create();
|
||||||
|
|
||||||
|
if ( ! $tribe_organizer ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make a relationship between the event source WP_Post and the organizer WP_Post.
|
||||||
|
wp_update_post(
|
||||||
|
array(
|
||||||
|
'ID' => $tribe_organizer->ID,
|
||||||
|
'post_parent' => $event_source->get__id(),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add the thumbnail of the event source to the organizer.
|
||||||
|
if ( get_post_thumbnail_id( $event_source ) ) {
|
||||||
|
set_post_thumbnail( $tribe_organizer, get_post_thumbnail_id( $event_source ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return $tribe_organizer->ID;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the ActivityPub event object as GatherPress Event.
|
* Save the ActivityPub event object as GatherPress Event.
|
||||||
*
|
*
|
||||||
|
@ -118,6 +173,8 @@ class The_Events_Calendar extends Base {
|
||||||
|
|
||||||
$venue_id = $this->add_venue();
|
$venue_id = $this->add_venue();
|
||||||
|
|
||||||
|
$organizer_id = $this->add_organizer();
|
||||||
|
|
||||||
$args = array(
|
$args = array(
|
||||||
'title' => sanitize_text_field( $this->activitypub_event->get_name() ),
|
'title' => sanitize_text_field( $this->activitypub_event->get_name() ),
|
||||||
'content' => wp_kses_post( $this->activitypub_event->get_content() ?? '' ),
|
'content' => wp_kses_post( $this->activitypub_event->get_content() ?? '' ),
|
||||||
|
@ -132,6 +189,11 @@ class The_Events_Calendar extends Base {
|
||||||
$args['VenueID'] = $venue_id;
|
$args['VenueID'] = $venue_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $organizer_id ) {
|
||||||
|
$args['organizer'] = $organizer_id;
|
||||||
|
$args['OrganizerID'] = $organizer_id;
|
||||||
|
}
|
||||||
|
|
||||||
$tribe_event = new The_Events_Calendar_Event_Repository();
|
$tribe_event = new The_Events_Calendar_Event_Repository();
|
||||||
|
|
||||||
if ( $post_id ) {
|
if ( $post_id ) {
|
||||||
|
|
Loading…
Reference in a new issue