|
Server : Apache System : Linux s1230 5.15.0-139-generic #149~20.04.1 SMP Tue Jul 14 11:21:49 UTC 2026 x86_64 User : p141464 ( 418825) PHP Version : 7.4.33.12 Disable Function : NONE Directory : /html/relaunch-kmu/wp-content/plugins/imagify/classes/Tracking/ |
Upload File : |
<?php
declare(strict_types=1);
namespace Imagify\Tracking;
use Imagify\EventManagement\SubscriberInterface;
/**
* WordPress hook listener that routes MCP ability lifecycle events to McpTracking.
*
* @since 2.3.0
*/
class McpTrackingSubscriber implements SubscriberInterface {
/**
* The MCP tracking service.
*
* @var McpTracking
*/
private $mcp_tracking;
/**
* Constructor.
*
* @param McpTracking $mcp_tracking The MCP tracking service.
*/
public function __construct( McpTracking $mcp_tracking ) {
$this->mcp_tracking = $mcp_tracking;
}
/**
* Returns the list of events this subscriber wants to listen to.
*
* @return array<string, array<int, int|string>>
*/
public static function get_subscribed_events(): array {
return [
// @action imagify_mcp_ability_executed
'imagify_mcp_ability_executed' => [ 'on_ability_executed', 10, 5 ],
// @action imagify_mcp_permission_denied
'imagify_mcp_permission_denied' => [ 'on_permission_denied', 10, 3 ],
];
}
/**
* Fired after an MCP ability's execute() method returns (success or failure).
*
* Calls both the generic ability-executed tracker (all abilities) and the
* media-optimized tracker (optimize-media success only).
*
* @param string $ability_id Ability slug, e.g. `imagify/optimize-media`.
* @param string $ability_name Human-readable ability label.
* @param mixed $result Return value of the ability's execute() method.
* @param float $start_time microtime(true) captured before execute() ran.
* @param array $input_params Raw input params passed to execute().
* @return void
*/
public function on_ability_executed( string $ability_id, string $ability_name, $result, float $start_time, array $input_params ): void {
$is_preview = is_array( $result ) && in_array(
$result['status'] ?? '',
[ 'confirmation_required', 'insufficient_quota', 'invalid_api_key' ],
true
);
$this->mcp_tracking->track_ability_executed( $ability_id, $ability_name, $start_time, $is_preview );
if ( 'imagify/optimize-media' === $ability_id && is_array( $result ) ) {
$this->mcp_tracking->track_media_optimized( $ability_id, $result, $start_time, $input_params );
}
}
/**
* Fired when an MCP ability's check_permissions() returns false.
*
* @param string $ability_id Ability slug.
* @param string $ability_name Human-readable ability label.
* @param string $required_capability The capability that was missing.
* @return void
*/
public function on_permission_denied( string $ability_id, string $ability_name, string $required_capability ): void {
$this->mcp_tracking->track_permission_denied( $ability_id, $ability_name, $required_capability );
}
}