2024-09-06 14:58:21 +02:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* GatherPress.
|
|
|
|
*
|
2024-12-16 17:36:23 +01:00
|
|
|
* Defines all the necessary meta information and methods for the integration
|
|
|
|
* of the WordPress event plugin "GatherPress".
|
2024-09-06 14:58:21 +02:00
|
|
|
*
|
|
|
|
* @link https://wordpress.org/plugins/gatherpress/
|
2024-12-05 16:16:30 +01:00
|
|
|
* @package Event_Bridge_For_ActivityPub
|
2024-09-06 14:58:21 +02:00
|
|
|
* @since 1.0.0
|
|
|
|
*/
|
|
|
|
|
2024-12-05 16:16:30 +01:00
|
|
|
namespace Event_Bridge_For_ActivityPub\Integrations;
|
2024-09-06 14:58:21 +02:00
|
|
|
|
2024-12-15 22:25:28 +01:00
|
|
|
use Event_Bridge_For_ActivityPub\ActivityPub\Transformer\GatherPress as GatherPress_Transformer;
|
|
|
|
use Event_Bridge_For_ActivityPub\ActivityPub\Transmogrifier\GatherPress as GatherPress_Transmogrifier;
|
|
|
|
|
2024-09-06 14:58:21 +02:00
|
|
|
// Exit if accessed directly.
|
|
|
|
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
|
|
|
|
|
|
|
|
/**
|
2024-12-16 17:36:23 +01:00
|
|
|
* GatherPress.
|
2024-09-06 14:58:21 +02:00
|
|
|
*
|
2024-12-16 17:36:23 +01:00
|
|
|
* Defines all the necessary meta information and methods for the integration
|
|
|
|
* of the WordPress event plugin "GatherPress".
|
2024-09-06 14:58:21 +02:00
|
|
|
*
|
|
|
|
* @since 1.0.0
|
|
|
|
*/
|
2024-12-15 22:25:28 +01:00
|
|
|
final class GatherPress extends Event_Plugin_Integration implements Feature_Event_Sources {
|
2024-09-06 14:58:21 +02:00
|
|
|
/**
|
|
|
|
* Returns the full plugin file.
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2024-12-12 23:24:36 +01:00
|
|
|
public static function get_relative_plugin_file(): string {
|
2024-09-11 00:38:21 +02:00
|
|
|
return 'gatherpress/gatherpress.php';
|
2024-09-06 14:58:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the event post type of the plugin.
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public static function get_post_type(): string {
|
2024-09-11 00:38:21 +02:00
|
|
|
return class_exists( '\GatherPress\Core\Event' ) ? \GatherPress\Core\Event::POST_TYPE : 'gatherpress_event';
|
2024-09-06 14:58:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2024-10-19 16:46:50 +02:00
|
|
|
* Returns the IDs of the admin pages of the plugin.
|
2024-09-06 14:58:21 +02:00
|
|
|
*
|
2024-10-19 16:46:50 +02:00
|
|
|
* @return array The settings page urls.
|
2024-09-06 14:58:21 +02:00
|
|
|
*/
|
2024-10-19 16:46:50 +02:00
|
|
|
public static function get_settings_pages(): array {
|
|
|
|
return array( class_exists( '\GatherPress\Core\Utility' ) ? \GatherPress\Core\Utility::prefix_key( 'general' ) : 'gatherpress_general' );
|
2024-09-06 14:58:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2024-12-15 22:25:28 +01:00
|
|
|
* Returns the taxonomy used for the plugin's event categories.
|
2024-09-06 14:58:21 +02:00
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2024-12-15 22:25:28 +01:00
|
|
|
public static function get_event_category_taxonomy(): string {
|
|
|
|
return class_exists( '\GatherPress\Core\Topic' ) ? \GatherPress\Core\Topic::TAXONOMY : 'gatherpress_topic';
|
2024-09-06 14:58:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2024-12-15 22:25:28 +01:00
|
|
|
* Returns the ActivityPub transformer for a GatherPress event post.
|
2024-09-06 14:58:21 +02:00
|
|
|
*
|
2024-12-15 22:25:28 +01:00
|
|
|
* @param WP_Post $post The WordPress post object of the Event.
|
|
|
|
* @return GatherPress_Transformer
|
2024-09-06 14:58:21 +02:00
|
|
|
*/
|
2024-12-15 22:25:28 +01:00
|
|
|
public static function get_activitypub_event_transformer( $post ): GatherPress_Transformer {
|
|
|
|
return new GatherPress_Transformer( $post, self::get_event_category_taxonomy() );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the Transmogrifier for GatherPress.
|
|
|
|
*/
|
|
|
|
public static function get_transmogrifier(): GatherPress_Transmogrifier {
|
|
|
|
return new GatherPress_Transmogrifier();
|
2024-09-06 14:58:21 +02:00
|
|
|
}
|
2024-12-08 22:36:40 +01:00
|
|
|
|
|
|
|
/**
|
2024-12-15 22:25:28 +01:00
|
|
|
* Get a list of Post IDs of events that have ended.
|
|
|
|
*
|
2024-12-22 21:55:08 +01:00
|
|
|
* @param int $ends_before_time Filter: only get events that ended before that datetime as unix-time.
|
2024-12-08 22:36:40 +01:00
|
|
|
*
|
2024-12-15 22:25:28 +01:00
|
|
|
* @return array
|
2024-12-08 22:36:40 +01:00
|
|
|
*/
|
2024-12-22 21:55:08 +01:00
|
|
|
public static function get_cached_remote_events( $ends_before_time ): array {
|
2024-12-15 22:25:28 +01:00
|
|
|
global $wpdb;
|
|
|
|
|
2024-12-22 21:55:08 +01:00
|
|
|
$ends_before_time_string = gmdate( 'Y-m-d H:i:s', $ends_before_time );
|
2024-12-15 22:25:28 +01:00
|
|
|
|
2024-12-23 11:49:42 +01:00
|
|
|
$results = $wpdb->get_results(
|
2024-12-15 22:25:28 +01:00
|
|
|
$wpdb->prepare(
|
2024-12-23 11:49:42 +01:00
|
|
|
"SELECT DISTINCT {$wpdb->prefix}posts.ID
|
|
|
|
FROM {$wpdb->prefix}posts
|
|
|
|
LEFT JOIN {$wpdb->prefix}gatherpress_events
|
|
|
|
ON {$wpdb->prefix}posts.ID = {$wpdb->prefix}gatherpress_events.post_id
|
|
|
|
LEFT JOIN {$wpdb->prefix}postmeta
|
|
|
|
ON {$wpdb->prefix}posts.ID = {$wpdb->prefix}postmeta.post_id
|
|
|
|
WHERE {$wpdb->prefix}posts.post_type = 'gatherpress_event'
|
|
|
|
AND {$wpdb->prefix}posts.post_status = 'publish'
|
|
|
|
AND {$wpdb->prefix}gatherpress_events.datetime_end_gmt <= %s
|
|
|
|
AND {$wpdb->prefix}postmeta.meta_key = '_event_bridge_for_activitypub_is_remote_cached'
|
|
|
|
",
|
2024-12-22 21:55:08 +01:00
|
|
|
$ends_before_time_string
|
2024-12-23 11:49:42 +01:00
|
|
|
),
|
|
|
|
ARRAY_N
|
2024-12-15 22:25:28 +01:00
|
|
|
);
|
|
|
|
|
2024-12-23 11:49:42 +01:00
|
|
|
$post_ids = array_column( $results, 0 );
|
|
|
|
|
|
|
|
return $post_ids;
|
2024-12-15 22:25:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2024-12-23 11:49:42 +01:00
|
|
|
* Init function: force displaying online event link for federated events.
|
2024-12-15 22:25:28 +01:00
|
|
|
*/
|
|
|
|
public static function init() {
|
|
|
|
\add_filter(
|
|
|
|
'gatherpress_force_online_event_link',
|
|
|
|
function ( $force_online_event_link ) {
|
|
|
|
// Get the current post object.
|
|
|
|
$post = get_post();
|
|
|
|
|
|
|
|
// Check if we are in a valid context and the post type is 'gatherpress'.
|
|
|
|
if ( $post && 'gatherpress_event' === $post->post_type ) {
|
|
|
|
// Add your custom logic here to decide whether to force the link.
|
|
|
|
// For example, force it only if a specific meta field exists.
|
2024-12-22 21:55:08 +01:00
|
|
|
if ( get_post_meta( $post->ID, '_event_bridge_for_activitypub_is_remote_cached', true ) ) {
|
2024-12-15 22:25:28 +01:00
|
|
|
return true; // Force the online event link.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $force_online_event_link; // Default behavior.
|
|
|
|
},
|
|
|
|
10,
|
|
|
|
1
|
|
|
|
);
|
2024-12-08 22:36:40 +01:00
|
|
|
}
|
2024-09-06 14:58:21 +02:00
|
|
|
}
|