get_attributed_to(); } /** * 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_type(): string { return 'Event'; } /** * Get a sane default for whether comments are enabled. */ protected function get_comments_enabled(): ?bool { return comments_open( $this->wp_object ); } /** * Returns the title of the event. * * @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-name * * @return string The name. */ protected function get_name(): string { return $this->wp_object->post_title; } /** * 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; } /** * Extract the join mode. * * Currently we don't handle joins, we always mark events as external. * * @return string */ public function get_join_mode(): ?string { return 'external'; } /** * Extract the external participation url. * * Currently we don't handle joins, we always mark events as external. * We just link back to the events HTML representation on our WordPress site. * * @return ?string The external participation URL. */ public function get_external_participation_url(): ?string { return 'external' === $this->get_join_mode() ? $this->get_url() : null; } /** * Set the event category, via the mapping setting. */ public function get_category(): ?string { $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(): Event_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(), ) ); $activitypub_object->set_to( array( 'https://www.w3.org/ns/activitystreams#Public', $this->get_actor_object()->get_followers(), ) ); return $activitypub_object; } }