117 lines
3.3 KiB
PHP
117 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* Replace the default ActivityPub Transformer
|
|
*
|
|
* @package activity-event-transformers
|
|
* @license AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace Activitypub_Event_Extensions\Activitypub\Transformer;
|
|
|
|
use Activitypub\Activity\Extended_Object\Event as Event_Object;
|
|
use Activitypub\Model\Blog;
|
|
use Activitypub\Transformer\Post;
|
|
|
|
use function Activitypub\get_rest_url_by_path;
|
|
|
|
/**
|
|
* Base transformer for WordPress event post types to ActivityPub events.
|
|
*
|
|
* Everything that transforming several WordPress post types that represent events
|
|
* have in common, as well as sane defaults for events should be defined here.
|
|
*/
|
|
class Event extends Post {
|
|
|
|
/**
|
|
* The WordPress event taxonomy.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $wp_taxonomy;
|
|
|
|
/**
|
|
* Returns the User-URL of the Author of the Post.
|
|
*
|
|
* If `single_user` mode is enabled, the URL of the Blog-User is returned.
|
|
*
|
|
* @return string The User-URL.
|
|
*/
|
|
protected function get_attributed_to() {
|
|
$blog = new Blog();
|
|
return $blog->get_id();
|
|
}
|
|
|
|
/**
|
|
* Returns the ActivityStreams 2.0 Object-Type for an Event.
|
|
*
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-event
|
|
*
|
|
* @return string The Event Object-Type.
|
|
*/
|
|
protected function get_object_type() {
|
|
return 'Event';
|
|
}
|
|
|
|
/**
|
|
* Extend the construction of the Post Transformer to also set the according taxonomy of the event post type.
|
|
*
|
|
* @param WP_Post $wp_object The WordPress post object (event).
|
|
* @param string $wp_taxonomy The taxonomy slug of the event post type.
|
|
*/
|
|
public function __construct( $wp_object, $wp_taxonomy ) {
|
|
parent::__construct( $wp_object );
|
|
$this->wp_taxonomy = $wp_taxonomy;
|
|
}
|
|
|
|
/**
|
|
* Set the event category, via the mapping setting.
|
|
*/
|
|
public function get_category() {
|
|
$current_category_mapping = \get_option( 'activitypub_event_extensions_event_category_mappings', array() );
|
|
$terms = \get_the_terms( $this->wp_object, $this->wp_taxonomy );
|
|
|
|
// Check if the event has a category set and if that category has a specific mapping return that one.
|
|
if ( ! is_wp_error( $terms ) && $terms && array_key_exists( $terms[0]->slug, $current_category_mapping ) ) {
|
|
return sanitize_text_field( $current_category_mapping[ $terms[0]->slug ] );
|
|
} else {
|
|
// Return the default event category.
|
|
return sanitize_text_field( \get_option( 'activitypub_event_extensions_default_event_category', 'MEETING' ) );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generic function that converts an WP-Event object to an ActivityPub-Event object.
|
|
*
|
|
* @return Event_Object
|
|
*/
|
|
public function to_object() {
|
|
$activitypub_object = new Event_Object();
|
|
$activitypub_object = $this->transform_object_properties( $activitypub_object );
|
|
|
|
$published = \strtotime( $this->wp_object->post_date_gmt );
|
|
|
|
$activitypub_object->set_published( \gmdate( 'Y-m-d\TH:i:s\Z', $published ) );
|
|
|
|
$updated = \strtotime( $this->wp_object->post_modified_gmt );
|
|
|
|
if ( $updated > $published ) {
|
|
$activitypub_object->set_updated( \gmdate( 'Y-m-d\TH:i:s\Z', $updated ) );
|
|
}
|
|
|
|
$activitypub_object->set_content_map(
|
|
array(
|
|
$this->get_locale() => $this->get_content(),
|
|
)
|
|
);
|
|
$path = sprintf( 'actors/%d/followers', intval( $this->wp_object->post_author ) );
|
|
|
|
$activitypub_object->set_to(
|
|
array(
|
|
'https://www.w3.org/ns/activitystreams#Public',
|
|
get_rest_url_by_path( $path ),
|
|
)
|
|
);
|
|
|
|
return $activitypub_object;
|
|
}
|
|
}
|