<?php /** * Abstract base class for a basic integration of a WordPress event plugin. * * Basic information and methods that each supported event needs for this plugin to work. * * @package Event_Bridge_For_ActivityPub * @since 1.0.0 * @license AGPL-3.0-or-later */ namespace Event_Bridge_For_ActivityPub\Integrations; // Exit if accessed directly. 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; require_once EVENT_BRIDGE_FOR_ACTIVITYPUB_PLUGIN_DIR . 'includes/integrations/interface-feature-event-sources.php'; /** * Abstract base class for a basic integration of a WordPress event plugin. * * Basic information and methods that each supported event needs for this plugin to work. * * @since 1.0.0 */ abstract class Event_Plugin_Integration { /** * Returns the plugin file relative to the plugins dir. * * @return string */ abstract public static function get_relative_plugin_file(): string; /** * Returns the event post type of the plugin. * * @return string */ abstract public static function get_post_type(): string; /** * Returns the taxonomy used for the plugin's event categories. * * @return string */ abstract public static function get_event_category_taxonomy(): string; /** * Returns the Activitypub transformer for events of the event plugins event post type. * * @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; /** * In case an event plugin uses a custom post type for the locations/venues return it here. * * @return ?string */ public static function get_place_post_type() { return null; } /** * In case an event plugin uses a custom taxonomy for storing locations/venues return it here. * * @return ?string */ public static function get_place_taxonomy() { return null; } /** * Returns the Activitypub transformer for places of the event plugins location post type. * * @param WP_Post $post 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 return null; } /** * In case an event plugin used a custom post type for organizers return it here. * * @return ?string */ public static function get_organizer_post_type() { return null; } /** * Returns the IDs of the admin pages of the plugin. * * @return array The IDs of one or several admin/settings pages. */ public static function get_settings_pages(): array { return array(); } /** * 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() ); if ( isset( $all_plugins[ static::get_relative_plugin_file() ]['Name'] ) ) { return $all_plugins[ static::get_relative_plugin_file() ]['Name']; } else { return ''; } } /** * Detects whether the current screen is a admin page of the event plugin. */ public static function is_plugin_page(): bool { // Get the current page. $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 ); return $is_event_plugins_edit_page || $is_event_plugins_settings_page; } }