<?php /** * ActivityPub Tribe Transformer * * @package activity-event-transformers * @license AGPL-3.0-or-later */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } use Activitypub\Transformer\Post; use Activitypub\Activity\Extended_Object\Event; use Activitypub\Activity\Extended_Object\Place; /** * ActivityPub Tribe Transformer * * @since 1.0.0 */ class Tribe extends Post { /** * The Tribe Event object. * * @var WP_Post */ protected $tribe_event; // /** // * resolve the tribe metadata in the setter of wp_post. // * // * @param WP_Post $wp_post The WP_Post object. // * @return void // */ // public function set_wp_post( WP_Post $wp_post ) { // parent::set_wp_post( $wp_post ); // $this->tribe_event = tribe_get_event( $wp_post->ID ); // } /** * Get widget name. * * Retrieve oEmbed widget name. * * @since 1.0.0 * @access public * @return string Widget name. */ public function get_name() { return 'activitypub-event-transformers/tribe'; } /** * Get widget title. * * Retrieve Transformer title. * * @since 1.0.0 * @access public * @return string Widget title. */ public function get_label() { return 'The Events Calendar'; } /** * 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'; } /** * Get supported post types. * * Retrieve the list of supported WordPress post types this transformer widget can handle. * * @since 1.0.0 * @access public * @return array Widget categories. */ public static function get_supported_post_types() { return array( 'tribe_events' ); } /** * Get tribe category of wp_post * * @return string|null tribe category if it exists */ public function get_tribe_category() { // todo make it possible that one event can have multiple categories? // using cat_slugs isn't 100% nice way to do this, don't know if it's a good idea $categories = tribe_get_event_cat_slugs( $this->wp_object->ID ); if ( count( $categories ) === 0 ) { return null; } return $categories[0]; } /** * Get status of the tribe event * * @return string status of the event */ public function get_tribe_status() { if ( 'canceled' === $this->tribe_event->event_status ) { return 'CANCELLED'; } if ( 'postponed' === $this->tribe_event->event_status ) { return 'CANCELLED'; // this will be reflected in the cancelled reason } if ( '' === $this->tribe_event->event_status ) { return 'CONFIRMED'; } return new WP_Error( 'invalid event_status value', __( 'invalid event_status', 'activitypub' ), array( 'status' => 404 ) ); } /** * Returns the content for the ActivityPub Item with * * The content will be generated based on the user settings. * * @return string The content. */ protected function get_content() { $content = parent::get_content(); // todo remove link at the end of the content // todo add organizer // $this->tribe_event->organizers[0] // todo add Canclled reason in the content (maybe at the end) return $content; } /** * Get the event location. * * @param int $post_id The WordPress post ID. * @returns array The Place. */ public function get_event_location() { /* 'post_title' => 'testvenue', 'post_name' => 'testvenue', 'guid' => 'http://localhost/venue/testvenue/', 'post_type' => 'tribe_venue', 'address' => 'testaddr', 'country' => 'Austria', 'city' => 'testcity', 'state_province' => 'testprovince', 'state' => '', 'province' => 'testprovince', 'zip' => '8000', 'phone' => '+4312343', 'permalink' => 'http://localhost/venue/testvenue/', 'directions_link' => 'https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=testaddr+testcity+testprovince+8000+Austria', 'website' => 'https://test.at', */ $venue = $this->tribe_event->venues[0]; return ( new Place() ) ->set_type( 'Place' ) ->set_name( $venue->post_name ) ->set_address( $venue->address . "\n" . $venue->zip . ', ' . $venue->city . "\n" . $venue->country ); // todo add checks that everything exists here (lol) } }