| 1 |
<?php |
| 2 |
|
| 3 |
namespace Hostinger\Mcp\Handlers; |
| 4 |
|
| 5 |
use Hostinger\Admin\Proxy; |
| 6 |
use Hostinger\Mcp\EventHandlerFactory; |
| 7 |
|
| 8 |
defined( 'ABSPATH' ) || exit; |
| 9 |
|
| 10 |
abstract class EventHandler { |
| 11 |
|
| 12 |
public Proxy $proxy; |
| 13 |
|
| 14 |
public function __construct( Proxy $proxy ) { |
| 15 |
$this->proxy = $proxy; |
| 16 |
} |
| 17 |
|
| 18 |
protected function send_to_proxy( array $args = array() ): bool { |
| 19 |
if ( ! $this->can_send( $args ) ) { |
| 20 |
$this->debug_mcp( 'Event failed: User is not opted in' . ' -- ' . print_r( $args, true ) ); |
| 21 |
return false; |
| 22 |
} |
| 23 |
|
| 24 |
$event = $args['event']; |
| 25 |
$request = $this->proxy->trigger_event( $event, $args ); |
| 26 |
if ( is_wp_error( $request ) ) { |
| 27 |
$this->debug_mcp( 'Event failed: ' . $event . $request->get_error_message() . ' -- ' . print_r( $args, true ) ); |
| 28 |
return false; |
| 29 |
} |
| 30 |
|
| 31 |
$response_code = wp_remote_retrieve_response_code( $request ); |
| 32 |
if ( $response_code < 300 ) { |
| 33 |
$this->debug_mcp( 'Event sent: ' . $event . ' -- ' . print_r( $args, true ) ); |
| 34 |
return true; |
| 35 |
} |
| 36 |
|
| 37 |
$this->debug_mcp( 'Event failed: ' . $event . ' --' . $response_code . ' -- ' . print_r( $args, true ) ); |
| 38 |
return false; |
| 39 |
} |
| 40 |
|
| 41 |
public function can_send( array $args = array() ): bool { |
| 42 |
return isset( $args['event'] ) && ( $this->is_optin_event( $args['event'] ) || $this->is_opted_in() ); |
| 43 |
} |
| 44 |
|
| 45 |
private function is_opted_in(): bool { |
| 46 |
$settings = get_option( HOSTINGER_PLUGIN_SETTINGS_OPTION, array() ); |
| 47 |
return $settings['optin_mcp'] ?? false; |
| 48 |
} |
| 49 |
|
| 50 |
private function is_optin_event( $event ): bool { |
| 51 |
return $event === EventHandlerFactory::MCP_EVENT_OPTIN_TOGGLED; |
| 52 |
} |
| 53 |
|
| 54 |
private function debug_mcp( string $msg ): void { |
| 55 |
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { |
| 56 |
error_log( 'Hostinger Tools MCP: ' . $msg . PHP_EOL, 3, WP_CONTENT_DIR . '/mcp.log' ); |
| 57 |
} |
| 58 |
} |
| 59 |
|
| 60 |
abstract public function send( array $args = array() ): void; |
| 61 |
} |
| 62 |
|