<?php
/**
* Integration class to hook plugin settings into WooCommerce's Settings Integration tab
*
* @package Kliken Marketing for Google
*/
namespace Kliken\WcPlugin;
defined( 'ABSPATH' ) || exit;
/**
* WooCommerce Integration class
*/
class WC_Integration extends \WC_Integration {
/**
* Constructor. Default to also init.
*
* @param boolean $init If class initialization is also needed.
*/
public function __construct( $init = true ) {
global $woocommerce;
$this->id = KK_WC_INTEGRATION_PAGE_ID;
$this->method_title = __( 'AI Powered Marketing', 'kliken-marketing-for-google' ); // This is for the sub-section text.
if ( true === $init ) {
// Load the settings.
$this->init_form_fields();
$this->init_settings();
$this->account_id = $this->get_option( 'account_id' );
$this->app_token = $this->get_option( 'app_token' );
// Action to save the options.
add_action( 'woocommerce_update_options_integration_' . $this->id, [ $this, 'process_admin_options' ] );
add_filter( 'woocommerce_settings_api_sanitized_fields_' . $this->id, [ $this, 'sanitize_settings' ] );
}
}
/**
* Initialize integration settings form fields.
*/
public function init_form_fields() {
$this->form_fields = [
'account_id' => [
'title' => __( 'Account Id', 'kliken-marketing-for-google' ),
'type' => 'text',
'default' => '',
],
'app_token' => [
'title' => __( 'Application Token', 'kliken-marketing-for-google' ),
'type' => 'text',
'default' => '',
],
'google_token' => [
'title' => __( 'Google Verification Token', 'kliken-marketing-for-google' ),
'type' => 'text',
'default' => '',
],
'facebook_token' => [
'title' => __( 'Facebook Verification Token', 'kliken-marketing-for-google' ),
'type' => 'text',
'default' => '',
],
'guide_link' => [
'type' => 'desc',
'description' => '<a href="https://support.kliken.com/hc/en-us/articles/360016107933-WooCommerce-Advanced-Options" target="_blank" rel="noopener noreferrer">' . __( 'What are these options?', 'kliken-marketing-for-google' ) . '</a>',
'desc_tip' => '',
],
];
}
/**
* Display "options" area.
*/
public function admin_options() {
Helper::check_redirect_for_wc_auth();
// So this is the way WordPress hide the save button *facepalming*.
$GLOBALS['hide_save_button'] = true;
include_once KK_WC_PLUGIN_DIR . 'pages/admin-style.php';
if ( Helper::is_valid_account_id( $this->settings['account_id'] )
&& Helper::is_valid_app_token( $this->settings['app_token'] )
) {
// Already have account info. Show dashboard.
include_once KK_WC_PLUGIN_DIR . 'pages/dashboard.php';
} else {
// Show sign up form.
include_once KK_WC_PLUGIN_DIR . 'pages/getstarted.php';
}
}
/**
* Generate HTML code for "desc" field.
* This is a custom field for display a descriptive info line alongside other fields.
*
* @param string $key Field key.
* @param array $data Field data.
*/
public function generate_desc_html( $key, $data ) {
ob_start();
?>
<tr valign="top">
<th scope="row" class="titledesc" style="padding: 0;">
</th>
<td class="forminp" style="padding: 0 0 0 10px;">
<fieldset>
<?php echo $this->get_description_html( $data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- WPCS: XSS ok. ?>
</fieldset>
</td>
</tr>
<?php
return ob_get_clean();
}
/**
* Sanitize setting values before saving to the database
*
* @param array $settings Array of fields setting values being submitted.
* @return array
*/
public function sanitize_settings( $settings ) {
// Validate account id as an integer.
$settings['account_id'] = intval( $settings['account_id'] );
// Sanitize token.
$settings['app_token'] = sanitize_text_field( $settings['app_token'] );
// Sanitize google verification token.
$settings['google_token'] = sanitize_text_field( $settings['google_token'] );
// Sanitize facebook verification token.
$settings['facebook_token'] = sanitize_text_field( $settings['facebook_token'] );
if ( 0 === $settings['account_id'] || '' === $settings['app_token'] ) {
// No (valid) values were entered, we should show onboarding/welcome message.
set_site_transient( KK_WC_WELCOME_MESSAGE, true, MONTH_IN_SECONDS );
} elseif ( intval( $this->account_id ) !== $settings['account_id']
|| $settings['app_token'] !== $this->app_token
) {
// If the values changed, we want to redirect them to the WooCommerce Authorization page immediately after save.
$authorization_url = Helper::build_authorization_url( $settings['account_id'], $settings['app_token'] );
if ( ! empty( $authorization_url ) ) {
set_site_transient( KK_WC_TRANSIENT_AUTH_REDIRECT, $authorization_url, MINUTE_IN_SECONDS );
}
}
return $settings;
}
}