<?php /** * Create handler file. * * @package Event_Bridge_For_ActivityPub */ namespace Event_Bridge_For_ActivityPub\ActivityPub\Handler; use Activitypub\Collection\Actors; use Event_Bridge_For_ActivityPub\Setup; use function Activitypub\is_activity_public; /** * Handle Create requests. */ class Create { /** * Initialize the class, registering WordPress hooks. */ public static function init() { \add_action( 'activitypub_inbox_create', array( self::class, 'handle_create' ), 15, 2 ); \add_filter( 'activitypub_validate_object', array( self::class, 'validate_object' ), 12, 3 ); } /** * Handle "Create" requests. * * @param array $activity The activity-object. * @param int $user_id The id of the local blog-user. */ public static function handle_create( $activity, $user_id ) { // We only process activities that are target to the application user. if ( Actors::APPLICATION_USER_ID !== $user_id ) { return; } // Check if Activity is public or not. if ( ! is_activity_public( $activity ) ) { return; } // Check if an object is set. if ( ! isset( $activity['object']['type'] ) || 'Event' !== $activity['object']['type'] ) { return; } $transmogrifier_class = Setup::get_transmogrifier(); if ( ! $transmogrifier_class ) { return; } $transmogrifier = new $transmogrifier_class( $activity['object'] ); $transmogrifier->create(); } /** * Validate the object. * * @param bool $valid The validation state. * @param string $param The object parameter. * @param \WP_REST_Request $request The request object. * * @return bool The validation state: true if valid, false if not. */ public static function validate_object( $valid, $param, $request ) { $json_params = $request->get_json_params(); if ( isset( $json_params['object']['type'] ) && 'Event' === $json_params['object']['type'] ) { $valid = true; } else { return $valid; } if ( empty( $json_params['type'] ) ) { return false; } if ( 'Create' !== $json_params['type'] || 'Update' !== $json_params['type'] || is_wp_error( $request ) ) { return $valid; } $object = $json_params['object']; if ( ! is_array( $object ) ) { return false; } $required = array( 'id', ); // Limit this as a safety measure. add_filter( 'wp_revisions_to_keep', array( 'revisions_to_keep' ) ); if ( array_intersect( $required, array_keys( $object ) ) !== $required ) { return false; } return $valid; } /** * Return the number of revisions to keep. * * @return int The number of revisions to keep. */ public static function revisions_to_keep() { return 3; } }