updated plugin Event Bridge for ActivityPub version 1.3.0

This commit is contained in:
2026-06-03 21:28:57 +00:00
committed by Gitium
parent 1f3438440f
commit f2d6714572
84 changed files with 1721 additions and 1361 deletions

View File

@ -13,11 +13,13 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Activitypub\Query;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\Event_Organiser as Event_Organiser_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Place\Event_Organiser as Event_Organiser_Place_Transformer;
use WP_Post;
use WP_Term;
/**
* Event Organiser.
@ -79,17 +81,21 @@ final class Event_Organiser extends Event_Plugin_Integration {
* @param \WP_Post $post The WordPress post object of the Event.
* @return Event_Organiser_Transformer
*/
public static function get_activitypub_event_transformer( $post ): Event_Organiser_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): Event_Organiser_Transformer {
return new Event_Organiser_Transformer( $post, self::get_event_category_taxonomy() );
}
/**
* Returns the ActivityPub transformer for a Event_Organiser event venue which is stored in a taxonomy.
*
* @param \WP_Term $term The WordPress Term/Taxonomy of the venue.
* @param WP_Post|WP_Term $term The WordPress Term/Taxonomy of the venue.
* @return Event_Organiser_Place_Transformer
*/
public static function get_activitypub_place_transformer( $term ): Event_Organiser_Place_Transformer {
public static function get_activitypub_place_transformer( WP_Post|WP_Term $term ): ?Event_Organiser_Place_Transformer {
if ( $term instanceof WP_Post ) {
return null;
}
if ( Query::get_instance()->is_activitypub_request() && defined( 'EVENT_ORGANISER_DIR' ) ) {
$class_path = constant( EVENT_ORGANISER_DIR ) . 'includes/class-eo-theme-compatability.php';

View File

@ -12,12 +12,13 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\Event as ActivityPub_Event_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Place\Base_Post_Place;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Place\Base_Term_Place;
use WP_Post;
use WP_Term;
require_once EVENT_BRIDGE_FOR_ACTIVITYPUB_PLUGIN_DIR . 'includes/integrations/interface-feature-event-sources.php';
@ -56,7 +57,7 @@ abstract class Event_Plugin_Integration {
* @param WP_Post $post The WordPress post object of the Event.
* @return ActivityPub_Event_Transformer
*/
abstract public static function get_activitypub_event_transformer( $post ): ActivityPub_Event_Transformer;
abstract public static function get_activitypub_event_transformer( WP_Post $post ): ActivityPub_Event_Transformer;
/**
* In case an event plugin uses a custom post type for the locations/venues return it here.
@ -79,10 +80,10 @@ abstract class Event_Plugin_Integration {
/**
* Returns the Activitypub transformer for places of the event plugins location post type.
*
* @param WP_Post $post The WordPress post object of the Event.
* @param WP_Post|WP_Term $data The WordPress post object of the Event.
* @return Base_Post_Place|Base_Term_Place|null
*/
public static function get_activitypub_place_transformer( $post ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter
public static function get_activitypub_place_transformer( WP_Post|WP_Term $data ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter
return null;
}
@ -108,7 +109,7 @@ abstract class Event_Plugin_Integration {
* Get the plugins name from the main plugin-file's top-level-file-comment.
*/
public static function get_plugin_name(): string {
$all_plugins = array_merge( get_plugins(), get_mu_plugins() );
$all_plugins = array_merge( \get_plugins(), \get_mu_plugins() );
if ( isset( $all_plugins[ static::get_relative_plugin_file() ]['Name'] ) ) {
return $all_plugins[ static::get_relative_plugin_file() ]['Name'];
} else {
@ -121,11 +122,11 @@ abstract class Event_Plugin_Integration {
*/
public static function is_plugin_page(): bool {
// Get the current page.
$screen = get_current_screen();
$screen = \get_current_screen();
// Check if we are on a edit page for the event, or on the settings page of the event plugin.
$is_event_plugins_edit_page = 'edit' === $screen->base && static::get_post_type() === $screen->post_type;
$is_event_plugins_settings_page = in_array( $screen->id, static::get_settings_pages(), true );
$is_event_plugins_settings_page = \in_array( $screen->id, static::get_settings_pages(), true );
return $is_event_plugins_edit_page || $is_event_plugins_settings_page;
}

View File

@ -13,9 +13,10 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\Eventin as Eventin_Transformer;
use WP_Post;
/**
* Eventin.
@ -65,10 +66,10 @@ final class Eventin extends Event_Plugin_Integration {
/**
* Returns the ActivityPub transformer for a Eventin event post.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return Eventin_Transformer
*/
public static function get_activitypub_event_transformer( $post ): Eventin_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): Eventin_Transformer {
return new Eventin_Transformer( $post, self::get_event_category_taxonomy() );
}
}

View File

@ -13,10 +13,12 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\EventOn as EventOn_Event_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Place\EventOn as EventOn_Location_Transformer;
use WP_Post;
use WP_Term;
/**
* EventON Events Calendar
@ -66,10 +68,10 @@ final class EventOn extends Event_Plugin_Integration {
/**
* Returns the ActivityPub transformer for a VS_Event_List event post.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return EventOn_Event_Transformer
*/
public static function get_activitypub_event_transformer( $post ): EventOn_Event_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): EventOn_Event_Transformer {
return new EventOn_Event_Transformer( $post, self::get_event_category_taxonomy() );
}
@ -85,10 +87,10 @@ final class EventOn extends Event_Plugin_Integration {
/**
* Returns the ActivityPub transformer for a Event_Organiser event venue which is stored in a taxonomy.
*
* @param \WP_Term $term The WordPress Term/Taxonomy of the venue.
* @param WP_Post|WP_Term $term The WordPress Term/Taxonomy of the venue.
* @return EventOn_Location_Transformer
*/
public static function get_activitypub_place_transformer( $term ): EventOn_Location_Transformer {
return new EventOn_Location_Transformer( $term );
public static function get_activitypub_place_transformer( WP_Post|WP_Term $term ): ?EventOn_Location_Transformer {
return $term instanceof WP_Term ? new EventOn_Location_Transformer( $term ) : null;
}
}

View File

@ -12,11 +12,12 @@ namespace Event_Bridge_For_ActivityPub\Integrations;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\EventPrime as EventPrime_Event_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Place\EventPrime as EventPrime_Place_Transformer;
use Eventprime_Basic_Functions;
use WP_Post;
use function Activitypub\is_activitypub_request;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
/**
* This class defines which information is necessary for the EventPrime event plugin.
@ -72,10 +73,10 @@ final class EventPrime extends Event_Plugin_Integration {
/**
* Returns the ActivityPub transformer.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return EventPrime_Event_Transformer
*/
public static function get_activitypub_event_transformer( $post ): EventPrime_Event_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): EventPrime_Event_Transformer {
return new EventPrime_Event_Transformer( $post, self::get_event_category_taxonomy() );
}
@ -150,7 +151,7 @@ final class EventPrime extends Event_Plugin_Integration {
* @return bool|int The post ID, or term ID if found, false otherwise.
*/
private static function get_object_id( $type = 'event' ) {
if ( ! in_array( $type, array( 'venue', 'event' ), true ) ) {
if ( ! \in_array( $type, array( 'venue', 'event' ), true ) ) {
return false;
}

View File

@ -13,11 +13,12 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\Events_Manager as Events_Manager_Event_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Place\Events_Manager as Events_Manager_Place_Transformer;
use WP_Post;
use WP_Term;
/**
* Events Manager.
@ -43,7 +44,7 @@ final class Events_Manager extends Event_Plugin_Integration {
* @return string
*/
public static function get_post_type(): string {
return defined( 'EM_POST_TYPE_EVENT' ) ? constant( 'EM_POST_TYPE_EVENT' ) : 'event';
return \defined( 'EM_POST_TYPE_EVENT' ) ? constant( 'EM_POST_TYPE_EVENT' ) : 'event';
}
/**
@ -52,17 +53,17 @@ final class Events_Manager extends Event_Plugin_Integration {
* @return string
*/
public static function get_place_post_type(): string {
return defined( 'EM_POST_TYPE_LOCATION' ) ? constant( 'EM_POST_TYPE_LOCATION' ) : 'location';
return \defined( 'EM_POST_TYPE_LOCATION' ) ? constant( 'EM_POST_TYPE_LOCATION' ) : 'location';
}
/**
* Returns the Activitypub transformer for places of the event plugins location post type.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post|WP_Term $post The WordPress post object of the Event.
* @return Events_Manager_Place_Transformer
*/
public static function get_activitypub_place_transformer( $post ): Events_Manager_Place_Transformer {
return new Events_Manager_Place_Transformer( $post );
public static function get_activitypub_place_transformer( WP_Post|WP_Term $post ): ?Events_Manager_Place_Transformer {
return $post instanceof WP_Post ? new Events_Manager_Place_Transformer( $post ) : null;
}
/**
@ -80,16 +81,16 @@ final class Events_Manager extends Event_Plugin_Integration {
* @return string
*/
public static function get_event_category_taxonomy(): string {
return defined( 'EM_TAXONOMY_CATEGORY' ) ? constant( 'EM_TAXONOMY_CATEGORY' ) : 'event-categories';
return \defined( 'EM_TAXONOMY_CATEGORY' ) ? constant( 'EM_TAXONOMY_CATEGORY' ) : 'event-categories';
}
/**
* Returns the ActivityPub transformer for a Events_Manager event post.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return Events_Manager_Event_Transformer
*/
public static function get_activitypub_event_transformer( $post ): Events_Manager_Event_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): Events_Manager_Event_Transformer {
return new Events_Manager_Event_Transformer( $post, self::get_event_category_taxonomy() );
}
}

View File

@ -13,10 +13,11 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\GatherPress as GatherPress_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transmogrifier\GatherPress as GatherPress_Transmogrifier;
use WP_Post;
/**
* GatherPress.
@ -66,10 +67,10 @@ final class GatherPress extends Event_Plugin_Integration implements Feature_Even
/**
* Returns the ActivityPub transformer for a GatherPress event post.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return GatherPress_Transformer
*/
public static function get_activitypub_event_transformer( $post ): GatherPress_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): GatherPress_Transformer {
return new GatherPress_Transformer( $post, self::get_event_category_taxonomy() );
}
@ -80,6 +81,15 @@ final class GatherPress extends Event_Plugin_Integration implements Feature_Even
return GatherPress_Transmogrifier::class;
}
/**
* GatherPress uses a taxonomy to store venues.
*
* @return string
*/
public static function get_place_taxonomy() {
return '_gatherpress_venue';
}
/**
* Get a list of Post IDs of events that have ended.
*
@ -87,11 +97,12 @@ final class GatherPress extends Event_Plugin_Integration implements Feature_Even
*
* @return array
*/
public static function get_cached_remote_events( $ends_before_time ): array {
public static function get_cached_remote_events( int $ends_before_time ): array {
global $wpdb;
$ends_before_time_string = gmdate( 'Y-m-d H:i:s', $ends_before_time );
// phpcs:disable WordPress.DB.DirectDatabaseQuery
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT DISTINCT {$wpdb->prefix}posts.ID

View File

@ -13,9 +13,10 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\Modern_Events_Calendar_Lite as Modern_Events_Calendar_Lite_Transformer;
use WP_Post;
/**
* Modern Events Calendar (Lite)
@ -66,10 +67,10 @@ final class Modern_Events_Calendar_Lite extends Event_Plugin_Integration {
/**
* Returns the ActivityPub transformer for a Modern_Events_Calendar_Lite event post.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return Modern_Events_Calendar_Lite_Transformer
*/
public static function get_activitypub_event_transformer( $post ): Modern_Events_Calendar_Lite_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): Modern_Events_Calendar_Lite_Transformer {
return new Modern_Events_Calendar_Lite_Transformer( $post, self::get_event_category_taxonomy() );
}
}

View File

@ -0,0 +1,81 @@
<?php
/**
* Integration with the Plugin "Spiffy Calendar".
*
* Defines all the necessary meta information and methods for the integration of the
* WordPress plugin "Spiffy Calendar".
*
* @link https://wordpress.org/plugins/eventin/
* @package Event_Bridge_For_ActivityPub
* @since 1.0.0
*/
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\Spiffy_Calendar as Spiffy_Calendar_Transformer;
use WP_Post;
/**
* Eventin.
*
* Defines all the necessary meta information and methods for the integration of the
* WordPress plugin "Eventin".
*
* @since 1.0.0
*/
final class Spiffy_Calendar extends Event_Plugin_Integration {
/**
* Returns the full plugin file.
*
* @return string
*/
public static function get_relative_plugin_file(): string {
return 'spiffy-calendar/spiffy-calendar.php';
}
/**
* Returns the event post type of the plugin.
*
* @return string
*/
public static function get_post_type(): string {
return 'spiffy_event';
}
/**
* Returns the IDs of the admin pages of the plugin.
*
* @return array The settings page url.
*/
public static function get_settings_pages(): array {
return array(
'spiffy_event_page_settings',
'spiffy_event_page_theme',
'spiffy_event_page_frontend_submit',
'spiffy_event_page_custom_fields',
'edit-spiffy_event',
);
}
/**
* Returns the taxonomy used for the plugin's event categories.
*
* @return string
*/
public static function get_event_category_taxonomy(): string {
return 'spiffy_categories';
}
/**
* Returns the ActivityPub transformer for a Eventin event post.
*
* @param WP_Post $post The WordPress post object of the Event.
* @return Spiffy_Calendar_Transformer
*/
public static function get_activitypub_event_transformer( WP_Post $post ): Spiffy_Calendar_Transformer {
return new Spiffy_Calendar_Transformer( $post, self::get_event_category_taxonomy() );
}
}

View File

@ -12,12 +12,15 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
use WP_Term;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\The_Events_Calendar as The_Events_Calendar_Event_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Place\The_Events_Calendar as The_Events_Calendar_Place_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transmogrifier\The_Events_Calendar as The_Events_Calendar_Transmogrifier;
use WP_Post;
/**
* The Events Calendar.
@ -61,7 +64,7 @@ final class The_Events_Calendar extends Event_Plugin_Integration implements Feat
* @param \WP_Post $post The WordPress post object of the Event.
* @return The_Events_Calendar_Event_Transformer
*/
public static function get_activitypub_event_transformer( $post ): The_Events_Calendar_Event_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): The_Events_Calendar_Event_Transformer {
return new The_Events_Calendar_Event_Transformer( $post, self::get_event_category_taxonomy() );
}
@ -86,10 +89,10 @@ final class The_Events_Calendar extends Event_Plugin_Integration implements Feat
/**
* Returns the ActivityPub transformer for a The_Events_Calendar venue post.
*
* @param \WP_Post $post The WordPress post object of the venue.
* @param mixed $post The WordPress post object of the venue.
* @return The_Events_Calendar_Place_Transformer
*/
public static function get_activitypub_place_transformer( $post ): The_Events_Calendar_Place_Transformer {
public static function get_activitypub_place_transformer( mixed $post ): The_Events_Calendar_Place_Transformer {
return new The_Events_Calendar_Place_Transformer( $post );
}

View File

@ -13,10 +13,11 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\VS_Event_List as VS_Event_List_Transformer;
use Event_Bridge_For_ActivityPub\ActivityPub\Transmogrifier\VS_Event_List as VS_Event_List_Transmogrifier;
use WP_Post;
use WP_Query;
/**
@ -67,10 +68,10 @@ final class VS_Event_List extends Event_Plugin_Integration implements Feature_Ev
/**
* Returns the ActivityPub transformer for a VS_Event_List event post.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return VS_Event_List_Transformer
*/
public static function get_activitypub_event_transformer( $post ): VS_Event_List_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): VS_Event_List_Transformer {
return new VS_Event_List_Transformer( $post, self::get_event_category_taxonomy() );
}
@ -88,11 +89,12 @@ final class VS_Event_List extends Event_Plugin_Integration implements Feature_Ev
*
* @return array<int>
*/
public static function get_cached_remote_events( $ends_before_time ): array {
public static function get_cached_remote_events( int $ends_before_time ): array {
$args = array(
'post_type' => 'event',
'posts_per_page' => -1,
'fields' => 'ids',
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
'meta_query' => array(
'relation' => 'AND',
array(

View File

@ -13,9 +13,10 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\Event\WP_Event_Manager as WP_Event_Manager_Transformer;
use WP_Post;
/**
* Interface for a supported event plugin.
@ -64,10 +65,10 @@ final class WP_Event_Manager extends Event_Plugin_Integration {
/**
* Returns the ActivityPub transformer for a WP_Event_Manager event post.
*
* @param \WP_Post $post The WordPress post object of the Event.
* @param WP_Post $post The WordPress post object of the Event.
* @return WP_Event_Manager_Transformer
*/
public static function get_activitypub_event_transformer( $post ): WP_Event_Manager_Transformer {
public static function get_activitypub_event_transformer( WP_Post $post ): WP_Event_Manager_Transformer {
return new WP_Event_Manager_Transformer( $post, self::get_event_category_taxonomy() );
}
}

View File

@ -14,7 +14,7 @@
namespace Event_Bridge_For_ActivityPub\Integrations;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
\defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
/**
* Interface for an event plugin integration that supports the Event Sources feature.
@ -38,5 +38,5 @@ interface Feature_Event_Sources {
*
* @return int[] List of post IDs for events that match the criteria.
*/
public static function get_cached_remote_events( $ends_before_time ): array;
public static function get_cached_remote_events( int $ends_before_time ): array;
}