self::ID, 'label' => __( 'Disconnect Templately Account', 'templately' ), 'description' => __( 'Sign this site out of its connected Templately account.', 'templately' ), 'input_schema' => [ 'type' => 'object', 'properties' => (object) [], 'additionalProperties' => false, ], 'output_schema' => [ 'type' => 'object', ], 'execute_callback' => [ self::class, 'execute' ], 'permission_callback' => [ Permissions::class, 'can_use_abilities' ], 'access_level' => ToolDescriptor::ACCESS_FULL, 'annotations' => [ 'readonly' => false, 'destructive' => true, 'idempotent' => true ], ]; } /** * @param array $input * @return array */ public static function execute( array $input ): array { $user_id = get_current_user_id(); $api_key = Options::get_instance()->get( 'api_key', false, $user_id ); $cloud_disconnected = null; if ( ! empty( $api_key ) ) { $response = Http::get_instance()->mutation( 'disconnect', 'status, message', [ 'api_key' => $api_key, 'site_url' => home_url( '/' ) ] )->post(); $cloud_disconnected = ! is_wp_error( $response ) && ( $response['status'] ?? '' ) === 'success'; } self::clear_local_meta( $user_id ); return [ 'status' => 'success', 'cloud_disconnected' => $cloud_disconnected, ]; } /** * @param int $user_id * @return void */ private static function clear_local_meta( int $user_id ): void { $is_global = apply_filters( 'templately_multisite_is_global', false ); foreach ( self::META_KEYS as $key ) { if ( is_multisite() ) { delete_user_option( $user_id, $key, $is_global ); } else { delete_user_meta( $user_id, $key ); } } } }