all_settings = get_option( 'wf_address_autocomplete_validation_settings' );
$this->id = 'elex_address_autocomplete_validation';
}
/**
* Get an option set in our settings tab.
*
* @param string $key Key.
*/
public function wf_address_autocomplete_validation_get_option( $key ) {
$fields = $this->wf_address_autocomplete_validation_get_fields();
/**
* Get option value.
*
* @since 1.0.0
*/
return apply_filters( 'wc_option_' . $key, wf_address_autocomplete_validation_get_option( 'wc_settings_wf_address_autocomplete_validation_' . $key, ( ( isset( $fields[ $key ] ) && isset( $fields[ $key ]['default'] ) ) ? $fields[ $key ]['default'] : '' ) ) );
}
/** Setup the WooCommerce settings */
public function wf_address_autocomplete_validation_setup() {
// Filters for adding tabs and sections.
add_filter( 'woocommerce_settings_tabs_array', array( $this, 'wf_address_autocomplete_validation_add_settings_tab' ), 70 );
add_filter( 'woocommerce_sections_elex_address_autocomplete_validation', array( $this, 'output_sections' ) );
add_filter( 'woocommerce_settings_elex_address_autocomplete_validation', array( $this, 'elex_address_validation_output_section' ) );
add_action( 'woocommerce_update_options_elex_address_autocomplete_validation', array( $this, 'elex_address_validation_update_section' ) );
add_action( 'woocommerce_settings_tabs_elex_address_autocomplete_validation', array( $this, 'wf_address_autocomplete_validation_tab_content' ) );
if ( empty( $this->all_settings['wf_address_autocomplete_validation_enable_address_popup_css_edit'] ) ) {
$this->all_settings['wf_address_autocomplete_validation_enable_address_popup_css_edit'] = ".xa-container{padding:0.01em 16px}
.xa-center{text-align:center!important}
.xa-btn:disabled *{pointer-events:none}
.xa-btn:disabled:hover{box-shadow:none}
.xa-container:after{content:'';display:table;clear:both}
.xa-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}
.xa-white{color:#000!important;background-color:#fff!important}
.xa-red{color:#fff!important;background-color:#f44336!important}
.xa-btn{border:none;display:inline-block;outline:0;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none!important;color:white!important;background-color:blue !important;text-align:center;cursor:pointer;white-space:nowrap}
.xa-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}
.xa-btn:disabled{cursor:not-allowed;opacity:0.3}
.xa-btn{box-shadow:none!important;text-shadow:none!important;background-color:inherit;color:inherit;float:left;width:100%}
.xa-btn{-webkit-transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s;transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s}
.xa-round-large{border-radius:8px!important}.xa-round-xlarge{border-radius:16px!important}
.xa-border{border:1px solid #ccc!important}
@media (max-width:600px){.xa-modal-content{margin:0 10px;width:auto!important}.xa-modal{padding-top:30px}}
@media (max-width:768px){.xa-modal-content{width:500px}.xa-modal{padding-top:50px}}
@media (min-width:993px){.xa-modal-content{width:900px}}
.xa-closebtn{-webkit-transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s;transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s}
.xa-closebtn{text-decoration:none;float:right;font-size:24px;font-weight:bold;color:inherit}
.xa-closebtn:hover,.xa-closebtn:focus{color:#000;text-decoration:none;cursor:pointer}
";
}
update_option( 'wf_address_autocomplete_validation_settings', $this->all_settings );
}
/** Add Address Validation settings tab to the settings page.
*
* @param array $settings_tabs Settings Tabs.
*/
public function wf_address_autocomplete_validation_add_settings_tab( $settings_tabs ) {
$settings_tabs['elex_address_autocomplete_validation'] = __( 'Address Validation & Autocomplete', 'wf_address_autocomplete_validation' );
return $settings_tabs;
}
/** To add sections to a tab. */
public function get_sections() {
$sections = array(
'' => __( 'Address Autocomplete', 'wf_address_autocomplete_validation' ),
'elex-address-validation' => __( 'Address Validation', 'wf_address_autocomplete_validation' ),
'elex-api-credentials' => __( 'API Credentials', 'wf_address_autocomplete_validation' ),
'elex-customise-labels' => __( 'Customise', 'wf_address_autocomplete_validation' ),
'elex-go-premium' => __( 'Go Premium!', 'wf_address_autocomplete_validation' ),
);
/**
* Get sections to be added to settings tab.
*
* @since 1.0.0
*/
return apply_filters( 'woocommerce_get_sections_elex_address_autocomplete_validation', $sections );
}
/** Function to change section when clicked on them. */
public function elex_address_validation_output_section() {
global $current_section;
if ( '' === $current_section ) {
$settings = $this->elex_google_autocomplete_settings( $current_section );
WC_Admin_Settings::output_fields( $settings );
} elseif ( 'elex-address-validation' === $current_section ) {
$settings = $this->elex_address_validation_settings( $current_section );
WC_Admin_Settings::output_fields( $settings );
} elseif ( 'elex-api-credentials' === $current_section ) {
$settings = $this->elex_api_credentials_settings( $current_section );
WC_Admin_Settings::output_fields( $settings );
} elseif ( 'elex-customise-labels' === $current_section ) {
$settings = $this->elex_customise_labels_settings( $current_section );
WC_Admin_Settings::output_fields( $settings );
} elseif ( 'elex-go-premium' === $current_section ) {
wp_enqueue_style( 'bootstrap', plugins_url( '../assests/css/bootstrap.css', __FILE__ ), false, true );
include_once 'market.php';
}
}
/** Function to update settings.
*
* @param string $current_section Current Section.
*/
public function elex_address_validation_update_section( $current_section ) {
global $current_section;
if ( '' === $current_section ) {
$options = $this->elex_google_autocomplete_settings( $current_section );
woocommerce_update_options( $options );
}
if ( 'elex-address-validation' === $current_section ) {
$options = $this->elex_address_validation_settings( $current_section );
woocommerce_update_options( $options );
}
if ( 'elex-api-credentials' === $current_section ) {
$options = $this->elex_api_credentials_settings( $current_section );
woocommerce_update_options( $options );
}
if ( 'elex-customise-labels' === $current_section ) {
$options = $this->elex_customise_labels_settings( $current_section );
woocommerce_update_options( $options );
}
}
/** Autocomplete tab settings. */
public function elex_google_autocomplete_settings() {
global $woocommerce;
$settings = array(
'section_title' => array(
'name' => '',
'type' => 'title',
'desc' => '
Enable the required fields to activate Address Autocomplete and Validation. Respective API keys are MANDATORY requirements.',
),
'address_autocomplete' => array(
'title' => __( 'Address Autocomplete', 'wf-address-autocomplete-validation' ),
'type' => 'select',
'css' => 'padding: 0px;',
'default' => '',
'desc' => __( 'Choose the service for Address Autocomplete', 'wf-address-autocomplete-validation' ),
'desc_tip' => true,
'class' => 'wf_address_autocomplete_restriction',
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_restriction]',
'options' => array(
'' => __( 'None', 'wf-address-autocomplete-validation' ),
'google' => __( 'Google', 'wf-address-autocomplete-validation' ),
'addressfinder' => __( 'AddressFinder (Australia) [Premium]', 'wf-address-autocomplete-validation' ),
),
),
'set_address_autocomplete_field' => array(
'title' => __( 'Autocomplete Field', 'wf-address-autocomplete-validation' ),
'type' => 'select',
'css' => 'padding: 0px;',
'default' => 'default',
'desc' => __( 'Select an option to choose where to display the autocomplete field. The default option will be a dedicated autocomplete field for both billing and shipping address sections. By selecting the option Street 1, the Street Address field 1 will be enabled with the autocomplete feature.', 'wf-address-autocomplete-validation' ),
'desc_tip' => true,
'class' => 'wf_address_autocomplete_validation_set_address_autocomplete_field_class',
'options' => array(
'default' => __( 'Dedicated Field', 'wf-address-autocomplete-validation' ),
'street1' => __( 'Street 1 [Premium]', 'wf-address-autocomplete-validation' ),
),
),
'enable_autocomplete_checkout' => array(
'title' => 'Address Autocomplete (Checkout Page)',
'type' => 'checkbox',
'default' => 'no',
'desc' => 'Enable
Activates Google Address Autocomplete on the checkout page.',
'id' => 'wf_address_autocomplete_validation_settings[wf_aac_enable_google_autocomplete_checkout]',
'class' => 'wf_aac_enable_google_autocomplete_checkout_class',
),
'enable_autocomplete_backend' => array(
'title' => 'Address Autocomplete (Backend Orders)',
'type' => 'checkbox',
'default' => 'no',
'desc' => 'Enable [Premium]
Activates Google Address Autocomplete on the backend order page.',
'class' => 'wf_aac_enable_google_autocomplete_backend_class',
'custom_attributes' => array( 'disabled' => 'disabled' ),
),
'enable_country_availability' => array(
'title' => __( 'Address Autocomplete Available to', 'wf_address_autocomplete_validation' ),
'type' => 'select',
'css' => 'padding: 0px;',
'default' => 'all',
'desc' => __( 'Select the countries', 'wf_address_autocomplete_validation' ),
'desc_tip' => true,
'class' => 'availabilityy wf_address_autocomplete_validation_availability ',
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_availability]',
'options' => array(
'all' => __( 'All Countries', 'wf_address_autocomplete_validation' ),
'specific' => __( 'Specific Countries', 'wf_address_autocomplete_validation' ),
),
),
'countries_availabilty' => array(
'title' => __( 'Specific Countries', 'wf_address_autocomplete_validation' ),
'type' => 'multiselect',
'class' => 'chosen_select wf_address_autocomplete_validation_restrict_countries',
'desc_tip' => true,
'desc' => __( 'Select the countries to show the suggestion (Maximum five countries)', 'wf_address_autocomplete_validation' ),
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_countries_availabilty]',
'css' => 'width: 300px;',
'default' => '',
'options' => $woocommerce->countries->get_allowed_countries(),
),
'google_api_key' => array(
'title' => __( 'Google API Key', 'wf_address_autocomplete_validation' ),
'type' => 'password',
'desc' => "Enter the Google API Key.
By default, google address autocomplete api usage is limited.
To increase the usage limit, check this article from google.",
'custom_attributes' => array(
'autocomplete' => 'off',
),
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_google_api_key]',
'class' => 'wf_address_autocomplete_validation_google_api_key_class',
),
'Enable_disable_autocomplete_fields' => array(
'title' => __( 'Editable Address Fields', 'wf_address_autocomplete_validation' ),
'type' => 'checkbox',
'default' => 'yes',
'desc' => 'Enable
To make the checkout address fields editable when Address Autocomplete is already enabled.',
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_enable_disable_autocomplete_fields]',
'class' => 'wf_address_autocomplete_validation_enable_disable_autocomplete_fields_class',
),
'section_end' => array(
'type' => 'sectionend',
),
);
/**
* Add settings fields.
*
* @since 1.0.0
*/
return apply_filters( 'elex_address_autocomplete_validation_autocomplete_settings', $settings );
}
/** Address validation settings. */
public function elex_address_validation_settings() {
global $woocommerce;
$settings = array(
'section_title' => array(
'name' => '',
'type' => 'title',
),
'address_validation' => array(
'title' => __( 'Address Validation', 'wf_address_autocomplete_validation' ),
'type' => 'select',
'css' => 'padding: 0px;',
'default' => 'none',
'desc' => __( 'Choose the service for Address Validation', 'wf_address_autocomplete_validation' ),
'desc_tip' => true,
'class' => 'wf_address_validation_restriction',
'id' => 'wf_address_autocomplete_validation_settings[xa_address_validation]',
'options' => array(
'none' => __( 'None', 'wf_address_autocomplete_validation' ),
'easypost' => __( 'EasyPost', 'wf_address_autocomplete_validation' ),
'ups' => __( 'UPS [Premium]', 'wf_address_autocomplete_validation' ),
'usps' => __( 'USPS [Premium]', 'wf_address_autocomplete_validation' ),
'addressfinder' => __( 'AddressFinder API [Premium]', 'wf_address_autocomplete_validation' ),
'countryspecific' => __( 'Country Specific [Premium]', 'wf_address_autocomplete_validation' ),
),
),
'validated_address_only' => array(
'title' => __( 'Enforce Address Validation', 'wf_address_autocomplete_validation' ),
'type' => 'checkbox',
'default' => 'no',
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_validated_address_only]',
'desc' => 'Enable
By enabling this, the user will not be able to proceed with checkout if address validation fails.
This option will be ignored if EasyPost/UPS/USPS/AddressFinder API server is down.',
'class' => 'wf_address_autocomplete_validation_validated_address_only',
),
'record_log' => array(
'title' => __( 'Debug Log', 'wf_address_autocomplete_validation' ),
'type' => 'checkbox',
'default' => 'no',
'desc' => 'Enable
Find request and response logs here (wp-content\uploads\wc-logs)',
'custom_attributes' => array(
'autocomplete' => 'off',
),
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_record_log]',
'class' => 'wf_address_autocomplete_validation_record_log_class',
),
'confirm_validation' => array(
'title' => __( 'Confirm Before Validation', 'wf_address_autocomplete_validation' ),
'type' => 'checkbox',
'default' => 'yes',
'desc' => 'Enable
Enable it if you want customers to confirm any address before validation.',
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_confirm_validation]',
'class' => 'wf_address_autocomplete_validation_confirm_validation_class',
),
'address_confirm' => array(
'title' => __( 'Confirm Using ', 'wf_address_autocomplete_validation' ),
'type' => 'select',
'css' => 'padding: 0px;',
'default' => 'msg',
'desc' => __( 'Choose either of the options to get a confirmation from customer, if they want the Entered Address or the Suggested Address on the checkout page.', 'wf_address_autocomplete_validation' ),
'desc_tip' => true,
'class' => 'wf_address_autocomplete_validation_settings_popup_msg',
'id' => 'wf_address_autocomplete_validation_settings[xa_address_validation_confirm]',
'options' => array(
'popup' => __( 'A Popup Window', 'wf_address_autocomplete_validation' ),
'msg' => __( 'Checkout Page Message', 'wf_address_autocomplete_validation' ),
),
),
'enable_address_popup_css_edit' => array(
'title' => __( 'Confirmation Window CSS', 'wf_address_autocomplete_validation' ),
'type' => 'textarea',
'css' => 'width:700px; height:400px',
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_enable_address_popup_css_edit]',
'class' => 'wf_address_autocomplete_validation_enable_address_popup_css_edit_class',
'desc' => __( 'Modify the CSS to change the design of the address confirmation window. Leave it without modification to keep the default design. Clear the field to restore the default.', 'wf_address_autocomplete_validation' ),
'desc_tip' => true,
),
'section_end' => array(
'type' => 'sectionend',
),
);
/**
* Add settings fields.
*
* @since 1.0.0
*/
return apply_filters( 'elex_address_autocomplete_validation_validation_settings', $settings );
}
/** API Credential settings. */
public function elex_api_credentials_settings() {
$settings = array(
'easypost_header' => array(
'title' => __( 'EasyPost', 'wf_address_autocomplete_validation' ),
'type' => 'title',
'desc' => 'This address validation method is recommended for most countries. Check the list of countries supported.',
'id' => 'easypost_header',
),
'easypost_api_key' => array(
'title' => __( 'EasyPost API Key', 'wf_address_autocomplete_validation' ),
'type' => 'password',
'desc' => "Enter the EasyPost API Key.",
'custom_attributes' => array(
'autocomplete' => 'off',
),
'id' => 'wf_address_autocomplete_validation_settings[wf_address_autocomplete_validation_easypost_api_key]',
'class' => 'wf_address_autocomplete_validation_easypost_api_key_class',
),
'easypost_section_end' => array(
'type' => 'sectionend',
'id' => 'easypost_header',
),
'ups_header' => array(
'title' => '', // the title is given in the disc
'type' => 'title',
'desc' => '