<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName /** * Hustle_Get_Response class * * @package Hustle */ if ( ! class_exists( 'Hustle_Get_Response' ) ) : include_once 'hustle-get-response-api.php'; /** * Defines and adds neeed methods for GetResponse email service provider * * Class Hustle_Get_Response */ class Hustle_Get_Response extends Hustle_Provider_Abstract { const SLUG = 'getresponse'; /** * Api * * @var GetResponse */ protected static $api; /** * Errors * * @var array */ protected static $errors; /** * Provider Instance * * @since 3.0.5 * * @var self|null */ protected static $instance = null; /** * Slug * * @since 3.0.5 * @var string */ protected $slug = 'getresponse'; /** * Version * * @since 3.0.5 * @var string */ protected $version = '1.0'; /** * Class * * @since 3.0.5 * @var string */ protected $class = __CLASS__; /** * Title * * @since 3.0.5 * @var string */ protected $title = 'GetResponse'; /** * Class name of form settings * * @var string */ protected $form_settings = 'Hustle_Get_Response_Form_Settings'; /** * Class name of form hooks * * @since 4.0 * @var string */ protected $form_hooks = 'Hustle_Get_Response_Form_Hooks'; /** * Provider constructor. */ public function __construct() { $this->icon_2x = plugin_dir_url( __FILE__ ) . 'images/icon.png'; $this->logo_2x = plugin_dir_url( __FILE__ ) . 'images/logo.png'; } /** * Get Instance * * @return self|null */ public static function get_instance() { if ( is_null( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Get API * * @param string $api_key Api key. * @return Hustle_Get_Response_Api */ public static function api( $api_key ) { if ( empty( self::$api ) ) { try { self::$api = new Hustle_Get_Response_Api( $api_key, array( 'debug' => true ) ); self::$errors = array(); } catch ( Exception $e ) { self::$errors = array( 'api_error' => $e ); } } return self::$api; } /** * Get the wizard callbacks for the global settings. * * @since 4.0 * * @return array */ public function settings_wizards() { return array( array( 'callback' => array( $this, 'configure_api_key' ), 'is_completed' => array( $this, 'is_connected' ), ), ); } /** * Configure the API key settings. Global settings. * * @since 4.0 * * @param array $submitted_data Submitted data. * @return array */ public function configure_api_key( $submitted_data ) { $has_errors = false; $default_data = array( 'api_key' => '', 'name' => '', ); $current_data = $this->get_current_data( $default_data, $submitted_data ); $is_submit = isset( $submitted_data['api_key'] ); $global_multi_id = $this->get_global_multi_id( $submitted_data ); $api_key_validated = true; if ( $is_submit ) { $api_key_validated = $this->validate_api_key( $submitted_data['api_key'] ); if ( ! $api_key_validated ) { $error_message = $this->provider_connection_falied(); $has_errors = true; } if ( ! $has_errors ) { $settings_to_save = array( 'api_key' => $current_data['api_key'], 'name' => $current_data['name'], ); // If not active, activate it. // TODO: Wrap this in a friendlier method. if ( Hustle_Provider_Utils::is_provider_active( $this->slug ) || Hustle_Providers::get_instance()->activate_addon( $this->slug ) ) { $this->save_multi_settings_values( $global_multi_id, $settings_to_save ); } else { $error_message = __( "Provider couldn't be activated.", 'hustle' ); $has_errors = true; } } if ( ! $has_errors ) { return array( 'html' => Hustle_Provider_Utils::get_integration_modal_title_markup( __( 'GetResponse Added', 'hustle' ), __( 'You can now go to your pop-ups, slide-ins and embeds and assign them to this integration', 'hustle' ) ), 'buttons' => array( 'close' => array( 'markup' => Hustle_Provider_Utils::get_provider_button_markup( __( 'Close', 'hustle' ), 'sui-button-ghost', 'close' ), ), ), 'redirect' => false, 'has_errors' => false, 'notification' => array( 'type' => 'success', 'text' => '<strong>' . $this->get_title() . '</strong> ' . esc_html__( 'Successfully connected', 'hustle' ), ), ); } } $options = array( array( 'type' => 'wrapper', 'class' => $api_key_validated ? '' : 'sui-form-field-error', 'elements' => array( 'label' => array( 'type' => 'label', 'for' => 'api_key', 'value' => __( 'API Key', 'hustle' ), ), 'api_key' => array( 'type' => 'text', 'name' => 'api_key', 'value' => $current_data['api_key'], 'placeholder' => __( 'Enter Key', 'hustle' ), 'id' => 'api_key', 'icon' => 'key', ), 'error' => array( 'type' => 'error', 'class' => $api_key_validated ? 'sui-hidden' : '', 'value' => __( 'Please enter a valid GetResponse API key', 'hustle' ), ), ), ), array( 'type' => 'wrapper', 'style' => 'margin-bottom: 0;', 'elements' => array( 'label' => array( 'type' => 'label', 'for' => 'instance-name-input', 'value' => __( 'Identifier', 'hustle' ), ), 'name' => array( 'type' => 'text', 'name' => 'name', 'value' => $current_data['name'], 'placeholder' => __( 'E.g. Business Account', 'hustle' ), 'id' => 'instance-name-input', ), 'message' => array( 'type' => 'description', 'value' => __( 'Helps to distinguish your integrations if you have connected to the multiple accounts of this integration.', 'hustle' ), ), ), ), ); if ( $has_errors ) { $error_notice = array( 'type' => 'notice', 'icon' => 'info', 'class' => 'sui-notice-error', 'value' => esc_html( $error_message ), ); array_unshift( $options, $error_notice ); } $step_html = Hustle_Provider_Utils::get_integration_modal_title_markup( __( 'Configure GetResponse', 'hustle' ), sprintf( /* translators: 1. opening 'a' tag to the GetResponse API page, 2. closing 'a' tag */ __( 'Log in to your %1$sGetResponse account%2$s to get your API Key v3.', 'hustle' ), '<a href="https://app.getresponse.com/manage_api.html" target="_blank">', '</a>' ) ); $step_html .= Hustle_Provider_Utils::get_html_for_options( $options ); $is_edit = $this->settings_are_completed( $global_multi_id ); if ( $is_edit ) { $buttons = array( 'disconnect' => array( 'markup' => Hustle_Provider_Utils::get_provider_button_markup( __( 'Disconnect', 'hustle' ), 'sui-button-ghost', 'disconnect', true ), ), 'save' => array( 'markup' => Hustle_Provider_Utils::get_provider_button_markup( __( 'Save', 'hustle' ), '', 'connect', true ), ), ); } else { $buttons = array( 'connect' => array( 'markup' => Hustle_Provider_Utils::get_provider_button_markup( __( 'Connect', 'hustle' ), 'sui-button-right', 'connect', true ), ), ); } $response = array( 'html' => $step_html, 'buttons' => $buttons, 'has_errors' => $has_errors, ); return $response; } /** * Validate the provided API key. * * @since 4.0 * * @param string $api_key Api Key. * @return bool */ private function validate_api_key( $api_key ) { if ( empty( trim( $api_key ) ) ) { return false; } // Check API Key by validating it on get_info request. try { // Check if API key is valid. $api = self::api( $api_key ); $campaigns = $api->get_campaigns(); if ( is_wp_error( $campaigns ) ) { Hustle_Provider_Utils::maybe_log( __METHOD__, __( 'Invalid GetResponse API key.', 'hustle' ) ); return false; } } catch ( Exception $e ) { Hustle_Provider_Utils::maybe_log( __METHOD__, $e->getMessage() ); return false; } return true; } /** * Remove wp_options rows */ public function get_30_provider_mappings() { return array( 'api_key' => 'api_key', ); } } endif;