EventHandler.php
11 months ago
WebsiteMcpOptInToggled.php
11 months ago
WebsitePageUpdated.php
11 months ago
WebsiteUpdated.php
11 months ago
EventHandler.php
62 lines
| 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 |