<?php /** * Like handler file. * * @package Activitypub */ namespace Activitypub\Handler; use Activitypub\Comment; use Activitypub\Collection\Interactions; use function Activitypub\object_to_uri; /** * Handle Like requests. */ class Like { /** * Initialize the class, registering WordPress hooks. */ public static function init() { \add_action( 'activitypub_inbox_like', array( self::class, 'handle_like' ), 10, 3 ); } /** * Handles "Like" requests. * * @param array $like The Activity array. * @param int $user_id The ID of the local blog user. */ public static function handle_like( $like, $user_id ) { if ( ACTIVITYPUB_DISABLE_INCOMING_INTERACTIONS ) { return; } $url = object_to_uri( $like['object'] ); if ( empty( $url ) ) { return; } $exists = Comment::object_id_to_comment( esc_url_raw( $url ) ); if ( $exists ) { return; } $state = Interactions::add_reaction( $like ); $reaction = null; if ( $state && ! is_wp_error( $state ) ) { $reaction = get_comment( $state ); } /** * Fires after a Like has been handled. * * @param array $like The Activity array. * @param int $user_id The ID of the local blog user. * @param mixed $state The state of the reaction. * @param mixed $reaction The reaction object. */ do_action( 'activitypub_handled_like', $like, $user_id, $state, $reaction ); } }