File: /var/www/html/triad-infosec/wp-content/plugins/fusion-builder/shortcodes/fusion-stripe-button.php
<?php
/**
* Add an element to fusion-builder.
*
* @package fusion-builder
* @since 3.9
*/
if ( fusion_is_element_enabled( 'fusion_stripe_button' ) ) {
if ( ! class_exists( 'FusionSC_Stripe_Button_API_Handler' ) ) {
/**
* Class Stripe API Handler.
*
* @since 3.9
*/
class FusionSC_Stripe_Button_API_Handler {
/**
* Stripe Endpoint URL.
*
* @access private
* @since 3.9
* @var string
*/
private static $stripe_endpoint_url = 'https://api.stripe.com/v1/';
/**
* Stripe Tax Endpoint.
*
* @access private
* @since 3.9
* @var string
*/
private static $stripe_tax_endpoint_url = 'tax_rates';
/**
* Stripe Checkout Endpoint.
*
* @access private
* @since 3.9
* @var string
*/
private static $stripe_checkout_url_ext = 'checkout/sessions';
/**
* API Get Request handler.
*
* @access public
* @since 3.9
* @param string $secret_key The secret key.
* @param string $endpoint The endpoint.
* @param array $body The body.
* @return array|\WP_Error
*/
public function get( $secret_key, $endpoint = '', $body = [] ) {
$headers = [ 'Authorization' => 'Bearer ' . $secret_key ];
return wp_remote_get(
self::$stripe_endpoint_url . $endpoint,
[
'headers' => $headers,
'body' => $body,
]
);
}
/**
* API Post Request handler.
*
* @access public
* @since 3.9
* @param array $headers The headers.
* @param array $body The body.
* @param string $endpoint The endpoint.
* @return array|\WP_Error
*/
public function post( $headers, $body, $endpoint ) {
return wp_remote_post(
self::$stripe_endpoint_url . $endpoint,
[
'headers' => $headers,
'body' => $body,
]
);
}
/**
* Get correct price based on currencies.
* Zero decimal currencies by stripe https://stripe.com/docs/currencies#zero-decimal
*
* @access public
* @since 3.9
* @param string $currency The currency.
* @param float $product_price The product price.
* @return false|float
*/
public function set_price( $currency, $product_price ) {
$zero_decimal = [ 'BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'UGX', 'VND', 'VUV', 'XAF', 'XOF', 'XPF' ];
if ( in_array( $currency, $zero_decimal, true ) ) {
// There is no need to multiply $product_price by 100.
return floor( $product_price );
} else {
return floor( $product_price * 100 );
}
}
/**
* Validate API KEY.
*
* @access public
* @since 3.9
* @param string $secret_key The secret key.
* @return array|WP_Error
*/
public function validate_api_key_endpoint( $secret_key ) {
return $this->get( $secret_key, self::$stripe_tax_endpoint_url, [ 'limit' => 0 ] );
}
/**
* Call API Checkout.
*
* @access public
* @since 3.9
* @param string $secret_key The secret key.
* @param array $args The arguments.
* @return void
*/
public function post_checkout_endpoint( $secret_key, $args ) {
$headers = [ 'Authorization' => 'Bearer ' . $secret_key ];
$body = [
'success_url' => $args['success_url'],
'cancel_url' => $args['cancel_url'],
'payment_method_types' => [ 'card' ],
'mode' => 'payment',
];
if ( ! empty( $args['product_name'] ) && ! empty( $args['product_price'] ) ) {
$body['line_items[0][quantity]'] = $args['product_qty'];
$body['line_items[0][price_data][currency]'] = $args['currency'];
$body['line_items[0][price_data][product_data][name]'] = $args['product_name'];
$body['line_items[0][price_data][unit_amount]'] = $this->set_price( $args['currency'], $args['product_price'] );
}
if ( ! empty( $args['shipping_price'] ) ) {
$body['shipping_options'][0]['shipping_rate_data']['type'] = 'fixed_amount';
$body['shipping_options'][0]['shipping_rate_data']['fixed_amount']['amount'] = $this->set_price( $args['currency'], $args['shipping_price'] );
$body['shipping_options'][0]['shipping_rate_data']['fixed_amount']['currency'] = $args['currency'];
$body['shipping_options'][0]['shipping_rate_data']['display_name'] = esc_html__( 'shipping fee', 'fusion-builder' );
}
if ( ! empty( $args['shipping_address'] ) && 'yes' === $args['shipping_address'] ) {
$body['shipping_address_collection'] = [
'allowed_countries' => self::get_available_shipping_address_countries(),
];
}
if ( isset( $args['tax_rate'] ) ) {
$tax_rate = explode( '|', $args['tax_rate'] );
$tax_id = [ $tax_rate[0] ];
$tax_behavior = $tax_rate[1];
if ( ! empty( $tax_behavior ) && ! empty( $tax_id ) ) {
$body['line_items'][0]['price_data']['tax_behavior'] = $tax_behavior;
$body['line_items'][0]['tax_rates'] = $tax_id;
}
}
$response = $this->post( $headers, $body, self::$stripe_checkout_url_ext );
wp_send_json( $response );
}
/**
* Call API Tax rates.
*
* @since 3.9
* @param string $secret_key The secret key.
* @return array
*/
public function post_tax_rates_endpoint( $secret_key ) {
$response = $this->get( $secret_key, self::$stripe_tax_endpoint_url, [ 'active' => 'true' ] );
$options = [];
$data = [];
if ( ! is_wp_error( $response ) ) {
$decoded_response = json_decode( $response['body'], true );
if ( isset( $decoded_response['error'] ) || 0 === count( $decoded_response['data'] ) ) {
$data = [];
} else {
$data = $decoded_response['data'];
}
}
if ( ! empty( $data ) ) {
foreach ( $data as $tax ) {
$rate_type = $tax['inclusive'] ? 'inclusive' : 'exclusive';
$options[ $tax['id'] . '|' . $rate_type ] = sprintf( '%s (%d%%) %s', $tax['display_name'], $tax['percentage'], $tax['description'] );
}
}
return $options;
}
/**
* Returns a list of country codes and countries.
*
* @since 3.9
* @return array $countries A list of the available countries
*/
public static function get_countries() {
$countries = [
'AF' => __( 'Afghanistan', 'fusion-builder' ),
'AX' => __( 'Ă…land Islands', 'fusion-builder' ),
'AL' => __( 'Albania', 'fusion-builder' ),
'DZ' => __( 'Algeria', 'fusion-builder' ),
'AS' => __( 'American Samoa', 'fusion-builder' ),
'AD' => __( 'Andorra', 'fusion-builder' ),
'AO' => __( 'Angola', 'fusion-builder' ),
'AI' => __( 'Anguilla', 'fusion-builder' ),
'AQ' => __( 'Antarctica', 'fusion-builder' ),
'AG' => __( 'Antigua and Barbuda', 'fusion-builder' ),
'AR' => __( 'Argentina', 'fusion-builder' ),
'AM' => __( 'Armenia', 'fusion-builder' ),
'AW' => __( 'Aruba', 'fusion-builder' ),
'AU' => __( 'Australia', 'fusion-builder' ),
'AT' => __( 'Austria', 'fusion-builder' ),
'AZ' => __( 'Azerbaijan', 'fusion-builder' ),
'BS' => __( 'Bahamas', 'fusion-builder' ),
'BH' => __( 'Bahrain', 'fusion-builder' ),
'BD' => __( 'Bangladesh', 'fusion-builder' ),
'BB' => __( 'Barbados', 'fusion-builder' ),
'BY' => __( 'Belarus', 'fusion-builder' ),
'BE' => __( 'Belgium', 'fusion-builder' ),
'PW' => __( 'Belau', 'fusion-builder' ),
'BZ' => __( 'Belize', 'fusion-builder' ),
'BJ' => __( 'Benin', 'fusion-builder' ),
'BM' => __( 'Bermuda', 'fusion-builder' ),
'BT' => __( 'Bhutan', 'fusion-builder' ),
'BO' => __( 'Bolivia', 'fusion-builder' ),
'BQ' => __( 'Bonaire, Saint Eustatius and Saba', 'fusion-builder' ),
'BA' => __( 'Bosnia and Herzegovina', 'fusion-builder' ),
'BW' => __( 'Botswana', 'fusion-builder' ),
'BV' => __( 'Bouvet Island', 'fusion-builder' ),
'BR' => __( 'Brazil', 'fusion-builder' ),
'IO' => __( 'British Indian Ocean Territory', 'fusion-builder' ),
'BN' => __( 'Brunei', 'fusion-builder' ),
'BG' => __( 'Bulgaria', 'fusion-builder' ),
'BF' => __( 'Burkina Faso', 'fusion-builder' ),
'BI' => __( 'Burundi', 'fusion-builder' ),
'KH' => __( 'Cambodia', 'fusion-builder' ),
'CM' => __( 'Cameroon', 'fusion-builder' ),
'CA' => __( 'Canada', 'fusion-builder' ),
'CV' => __( 'Cape Verde', 'fusion-builder' ),
'KY' => __( 'Cayman Islands', 'fusion-builder' ),
'CF' => __( 'Central African Republic', 'fusion-builder' ),
'TD' => __( 'Chad', 'fusion-builder' ),
'CL' => __( 'Chile', 'fusion-builder' ),
'CN' => __( 'China', 'fusion-builder' ),
'CX' => __( 'Christmas Island', 'fusion-builder' ),
'CC' => __( 'Cocos (Keeling) Islands', 'fusion-builder' ),
'CO' => __( 'Colombia', 'fusion-builder' ),
'KM' => __( 'Comoros', 'fusion-builder' ),
'CG' => __( 'Congo (Brazzaville)', 'fusion-builder' ),
'CD' => __( 'Congo (Kinshasa)', 'fusion-builder' ),
'CK' => __( 'Cook Islands', 'fusion-builder' ),
'CR' => __( 'Costa Rica', 'fusion-builder' ),
'HR' => __( 'Croatia', 'fusion-builder' ),
'CU' => __( 'Cuba', 'fusion-builder' ),
'CW' => __( 'Curaçao', 'fusion-builder' ),
'CY' => __( 'Cyprus', 'fusion-builder' ),
'CZ' => __( 'Czech Republic', 'fusion-builder' ),
'DK' => __( 'Denmark', 'fusion-builder' ),
'DJ' => __( 'Djibouti', 'fusion-builder' ),
'DM' => __( 'Dominica', 'fusion-builder' ),
'DO' => __( 'Dominican Republic', 'fusion-builder' ),
'EC' => __( 'Ecuador', 'fusion-builder' ),
'EG' => __( 'Egypt', 'fusion-builder' ),
'SV' => __( 'El Salvador', 'fusion-builder' ),
'GQ' => __( 'Equatorial Guinea', 'fusion-builder' ),
'ER' => __( 'Eritrea', 'fusion-builder' ),
'EE' => __( 'Estonia', 'fusion-builder' ),
'ET' => __( 'Ethiopia', 'fusion-builder' ),
'FK' => __( 'Falkland Islands', 'fusion-builder' ),
'FO' => __( 'Faroe Islands', 'fusion-builder' ),
'FJ' => __( 'Fiji', 'fusion-builder' ),
'FI' => __( 'Finland', 'fusion-builder' ),
'FR' => __( 'France', 'fusion-builder' ),
'GF' => __( 'French Guiana', 'fusion-builder' ),
'PF' => __( 'French Polynesia', 'fusion-builder' ),
'TF' => __( 'French Southern Territories', 'fusion-builder' ),
'GA' => __( 'Gabon', 'fusion-builder' ),
'GM' => __( 'Gambia', 'fusion-builder' ),
'GE' => __( 'Georgia', 'fusion-builder' ),
'DE' => __( 'Germany', 'fusion-builder' ),
'GH' => __( 'Ghana', 'fusion-builder' ),
'GI' => __( 'Gibraltar', 'fusion-builder' ),
'GR' => __( 'Greece', 'fusion-builder' ),
'GL' => __( 'Greenland', 'fusion-builder' ),
'GD' => __( 'Grenada', 'fusion-builder' ),
'GP' => __( 'Guadeloupe', 'fusion-builder' ),
'GU' => __( 'Guam', 'fusion-builder' ),
'GT' => __( 'Guatemala', 'fusion-builder' ),
'GG' => __( 'Guernsey', 'fusion-builder' ),
'GN' => __( 'Guinea', 'fusion-builder' ),
'GW' => __( 'Guinea-Bissau', 'fusion-builder' ),
'GY' => __( 'Guyana', 'fusion-builder' ),
'HT' => __( 'Haiti', 'fusion-builder' ),
'HM' => __( 'Heard Island and McDonald Islands', 'fusion-builder' ),
'HN' => __( 'Honduras', 'fusion-builder' ),
'HK' => __( 'Hong Kong', 'fusion-builder' ),
'HU' => __( 'Hungary', 'fusion-builder' ),
'IS' => __( 'Iceland', 'fusion-builder' ),
'IN' => __( 'India', 'fusion-builder' ),
'ID' => __( 'Indonesia', 'fusion-builder' ),
'IR' => __( 'Iran', 'fusion-builder' ),
'IQ' => __( 'Iraq', 'fusion-builder' ),
'IE' => __( 'Ireland', 'fusion-builder' ),
'IM' => __( 'Isle of Man', 'fusion-builder' ),
'IL' => __( 'Israel', 'fusion-builder' ),
'IT' => __( 'Italy', 'fusion-builder' ),
'CI' => __( 'Ivory Coast', 'fusion-builder' ),
'JM' => __( 'Jamaica', 'fusion-builder' ),
'JP' => __( 'Japan', 'fusion-builder' ),
'JE' => __( 'Jersey', 'fusion-builder' ),
'JO' => __( 'Jordan', 'fusion-builder' ),
'KZ' => __( 'Kazakhstan', 'fusion-builder' ),
'KE' => __( 'Kenya', 'fusion-builder' ),
'KI' => __( 'Kiribati', 'fusion-builder' ),
'KW' => __( 'Kuwait', 'fusion-builder' ),
'KG' => __( 'Kyrgyzstan', 'fusion-builder' ),
'LA' => __( 'Laos', 'fusion-builder' ),
'LV' => __( 'Latvia', 'fusion-builder' ),
'LB' => __( 'Lebanon', 'fusion-builder' ),
'LS' => __( 'Lesotho', 'fusion-builder' ),
'LR' => __( 'Liberia', 'fusion-builder' ),
'LY' => __( 'Libya', 'fusion-builder' ),
'LI' => __( 'Liechtenstein', 'fusion-builder' ),
'LT' => __( 'Lithuania', 'fusion-builder' ),
'LU' => __( 'Luxembourg', 'fusion-builder' ),
'MO' => __( 'Macao', 'fusion-builder' ),
'MK' => __( 'North Macedonia', 'fusion-builder' ),
'MG' => __( 'Madagascar', 'fusion-builder' ),
'MW' => __( 'Malawi', 'fusion-builder' ),
'MY' => __( 'Malaysia', 'fusion-builder' ),
'MV' => __( 'Maldives', 'fusion-builder' ),
'ML' => __( 'Mali', 'fusion-builder' ),
'MT' => __( 'Malta', 'fusion-builder' ),
'MH' => __( 'Marshall Islands', 'fusion-builder' ),
'MQ' => __( 'Martinique', 'fusion-builder' ),
'MR' => __( 'Mauritania', 'fusion-builder' ),
'MU' => __( 'Mauritius', 'fusion-builder' ),
'YT' => __( 'Mayotte', 'fusion-builder' ),
'MX' => __( 'Mexico', 'fusion-builder' ),
'FM' => __( 'Micronesia', 'fusion-builder' ),
'MD' => __( 'Moldova', 'fusion-builder' ),
'MC' => __( 'Monaco', 'fusion-builder' ),
'MN' => __( 'Mongolia', 'fusion-builder' ),
'ME' => __( 'Montenegro', 'fusion-builder' ),
'MS' => __( 'Montserrat', 'fusion-builder' ),
'MA' => __( 'Morocco', 'fusion-builder' ),
'MZ' => __( 'Mozambique', 'fusion-builder' ),
'MM' => __( 'Myanmar', 'fusion-builder' ),
'NA' => __( 'Namibia', 'fusion-builder' ),
'NR' => __( 'Nauru', 'fusion-builder' ),
'NP' => __( 'Nepal', 'fusion-builder' ),
'NL' => __( 'Netherlands', 'fusion-builder' ),
'NC' => __( 'New Caledonia', 'fusion-builder' ),
'NZ' => __( 'New Zealand', 'fusion-builder' ),
'NI' => __( 'Nicaragua', 'fusion-builder' ),
'NE' => __( 'Niger', 'fusion-builder' ),
'NG' => __( 'Nigeria', 'fusion-builder' ),
'NU' => __( 'Niue', 'fusion-builder' ),
'NF' => __( 'Norfolk Island', 'fusion-builder' ),
'MP' => __( 'Northern Mariana Islands', 'fusion-builder' ),
'KP' => __( 'North Korea', 'fusion-builder' ),
'NO' => __( 'Norway', 'fusion-builder' ),
'OM' => __( 'Oman', 'fusion-builder' ),
'PK' => __( 'Pakistan', 'fusion-builder' ),
'PS' => __( 'Palestinian Territory', 'fusion-builder' ),
'PA' => __( 'Panama', 'fusion-builder' ),
'PG' => __( 'Papua New Guinea', 'fusion-builder' ),
'PY' => __( 'Paraguay', 'fusion-builder' ),
'PE' => __( 'Peru', 'fusion-builder' ),
'PH' => __( 'Philippines', 'fusion-builder' ),
'PN' => __( 'Pitcairn', 'fusion-builder' ),
'PL' => __( 'Poland', 'fusion-builder' ),
'PT' => __( 'Portugal', 'fusion-builder' ),
'PR' => __( 'Puerto Rico', 'fusion-builder' ),
'QA' => __( 'Qatar', 'fusion-builder' ),
'RE' => __( 'Reunion', 'fusion-builder' ),
'RO' => __( 'Romania', 'fusion-builder' ),
'RU' => __( 'Russia', 'fusion-builder' ),
'RW' => __( 'Rwanda', 'fusion-builder' ),
'BL' => __( 'Saint Barthélemy', 'fusion-builder' ),
'SH' => __( 'Saint Helena', 'fusion-builder' ),
'KN' => __( 'Saint Kitts and Nevis', 'fusion-builder' ),
'LC' => __( 'Saint Lucia', 'fusion-builder' ),
'MF' => __( 'Saint Martin (French part)', 'fusion-builder' ),
'SX' => __( 'Saint Martin (Dutch part)', 'fusion-builder' ),
'PM' => __( 'Saint Pierre and Miquelon', 'fusion-builder' ),
'VC' => __( 'Saint Vincent and the Grenadines', 'fusion-builder' ),
'SM' => __( 'San Marino', 'fusion-builder' ),
'ST' => __( 'São Tomé and Príncipe', 'fusion-builder' ),
'SA' => __( 'Saudi Arabia', 'fusion-builder' ),
'SN' => __( 'Senegal', 'fusion-builder' ),
'RS' => __( 'Serbia', 'fusion-builder' ),
'SC' => __( 'Seychelles', 'fusion-builder' ),
'SL' => __( 'Sierra Leone', 'fusion-builder' ),
'SG' => __( 'Singapore', 'fusion-builder' ),
'SK' => __( 'Slovakia', 'fusion-builder' ),
'SI' => __( 'Slovenia', 'fusion-builder' ),
'SB' => __( 'Solomon Islands', 'fusion-builder' ),
'SO' => __( 'Somalia', 'fusion-builder' ),
'ZA' => __( 'South Africa', 'fusion-builder' ),
'GS' => __( 'South Georgia/Sandwich Islands', 'fusion-builder' ),
'KR' => __( 'South Korea', 'fusion-builder' ),
'SS' => __( 'South Sudan', 'fusion-builder' ),
'ES' => __( 'Spain', 'fusion-builder' ),
'LK' => __( 'Sri Lanka', 'fusion-builder' ),
'SD' => __( 'Sudan', 'fusion-builder' ),
'SR' => __( 'Suriname', 'fusion-builder' ),
'SJ' => __( 'Svalbard and Jan Mayen', 'fusion-builder' ),
'SZ' => __( 'Eswatini', 'fusion-builder' ),
'SE' => __( 'Sweden', 'fusion-builder' ),
'CH' => __( 'Switzerland', 'fusion-builder' ),
'SY' => __( 'Syria', 'fusion-builder' ),
'TW' => __( 'Taiwan', 'fusion-builder' ),
'TJ' => __( 'Tajikistan', 'fusion-builder' ),
'TZ' => __( 'Tanzania', 'fusion-builder' ),
'TH' => __( 'Thailand', 'fusion-builder' ),
'TL' => __( 'Timor-Leste', 'fusion-builder' ),
'TG' => __( 'Togo', 'fusion-builder' ),
'TK' => __( 'Tokelau', 'fusion-builder' ),
'TO' => __( 'Tonga', 'fusion-builder' ),
'TT' => __( 'Trinidad and Tobago', 'fusion-builder' ),
'TN' => __( 'Tunisia', 'fusion-builder' ),
'TR' => __( 'Turkey', 'fusion-builder' ),
'TM' => __( 'Turkmenistan', 'fusion-builder' ),
'TC' => __( 'Turks and Caicos Islands', 'fusion-builder' ),
'TV' => __( 'Tuvalu', 'fusion-builder' ),
'UG' => __( 'Uganda', 'fusion-builder' ),
'UA' => __( 'Ukraine', 'fusion-builder' ),
'AE' => __( 'United Arab Emirates', 'fusion-builder' ),
'GB' => __( 'United Kingdom (UK)', 'fusion-builder' ),
'US' => __( 'United States (US)', 'fusion-builder' ),
'UM' => __( 'United States (US) Minor Outlying Islands', 'fusion-builder' ),
'UY' => __( 'Uruguay', 'fusion-builder' ),
'UZ' => __( 'Uzbekistan', 'fusion-builder' ),
'VU' => __( 'Vanuatu', 'fusion-builder' ),
'VA' => __( 'Vatican', 'fusion-builder' ),
'VE' => __( 'Venezuela', 'fusion-builder' ),
'VN' => __( 'Vietnam', 'fusion-builder' ),
'VG' => __( 'Virgin Islands (British)', 'fusion-builder' ),
'VI' => __( 'Virgin Islands (US)', 'fusion-builder' ),
'WF' => __( 'Wallis and Futuna', 'fusion-builder' ),
'EH' => __( 'Western Sahara', 'fusion-builder' ),
'WS' => __( 'Samoa', 'fusion-builder' ),
'YE' => __( 'Yemen', 'fusion-builder' ),
'ZM' => __( 'Zambia', 'fusion-builder' ),
'ZW' => __( 'Zimbabwe', 'fusion-builder' ),
];
return apply_filters( 'fusion_stripe_countries', $countries );
}
/**
* Retrieves a list of countries that support Shipping Address collection.
*
* @since 3.9
* @return array List of country codes.
*/
public static function get_available_shipping_address_countries() {
// Built in countries.
$countries = self::get_countries();
// Remove unsupported countries.
unset( $countries['AS'] );
unset( $countries['CX'] );
unset( $countries['CC'] );
unset( $countries['CU'] );
unset( $countries['TP'] );
unset( $countries['HM'] );
unset( $countries['IR'] );
unset( $countries['MH'] );
unset( $countries['FM'] );
unset( $countries['AN'] );
unset( $countries['NF'] );
unset( $countries['KP'] );
unset( $countries['MP'] );
unset( $countries['PW'] );
unset( $countries['SD'] );
unset( $countries['SY'] );
unset( $countries['UM'] );
unset( $countries['VI'] );
return array_keys( $countries );
}
}
}
if ( ! class_exists( 'FusionSC_Stripe_Button' ) ) {
/**
* Shortcode class.
*
* @since 3.9
*/
class FusionSC_Stripe_Button extends Fusion_Element { // phpcs:ignore Generic.Files.OneObjectStructurePerFile, Generic.Classes.OpeningBraceSameLine
/**
* The one, true instance of this object.
*
* @static
* @access private
* @since 3.9
* @var object
*/
private static $instance;
/**
* The counter.
*
* @access private
* @since 3.9
* @var int
*/
private $counter = 1;
/**
* Secret key selected.
*
* @access protected
* @since 3.9
* @var string
*/
protected $secret_key;
/**
* Stripe Api Handler.
*
* @access public
* @since 3.9
* @var Object
*/
public $api;
/**
* Constructor.
*
* @access public
* @since 3.9
*/
public function __construct() {
parent::__construct();
add_filter( 'fusion_attr_stripe_button-shortcode', [ $this, 'attr' ] );
// Validate API KEY.
add_action( 'wp_ajax_awb_validate_stripe_api_key', [ $this, 'validate_api_key' ] );
add_action( 'wp_ajax_awb_stripe_button_submit', [ $this, 'submit_form_ajax' ] );
add_action( 'wp_ajax_nopriv_awb_stripe_button_submit', [ $this, 'submit_form_ajax' ] );
add_shortcode( 'fusion_stripe_button', [ $this, 'render' ] );
$this->api = new FusionSC_Stripe_Button_API_Handler();
}
/**
* Creates or returns an instance of this class.
*
* @static
* @access public
* @since 3.9
*/
public static function get_instance() {
// If an instance hasn't been created and set to $instance create an instance and set it to $instance.
if ( null === self::$instance ) {
self::$instance = new FusionSC_Stripe_Button();
}
return self::$instance;
}
/**
* Gets the default values.
*
* @static
* @access public
* @since 3.9
* @return array
*/
public static function get_element_defaults() {
$fusion_settings = awb_get_fusion_settings();
return [
'api_mode' => $fusion_settings->get( 'stripe_button_api_mode' ),
'shipping_address' => 'yes',
'product_name' => esc_attr__( 'My Product', 'fusion-builder' ),
'currency' => 'USD',
'product_price' => '3.99',
'product_qty' => '1',
'shipping_price' => '',
'test_tax_rate' => '',
'live_tax_rate' => '',
'success_url' => '',
'cancel_url' => '',
'button_el_type' => 'submit',
'tab_index' => '',
'hide_on_mobile' => fusion_builder_default_visibility( 'string' ),
'sticky_display' => '',
'class' => '',
'id' => '',
'accent_color' => ( '' !== $fusion_settings->get( 'button_accent_color' ) ) ? strtolower( $fusion_settings->get( 'button_accent_color' ) ) : '#ffffff',
'accent_hover_color' => ( '' !== $fusion_settings->get( 'button_accent_hover_color' ) ) ? strtolower( $fusion_settings->get( 'button_accent_hover_color' ) ) : '#ffffff',
'bevel_color' => ( '' !== $fusion_settings->get( 'button_bevel_color' ) ) ? strtolower( $fusion_settings->get( 'button_bevel_color' ) ) : '#54770F',
'bevel_color_hover' => ( '' !== $fusion_settings->get( 'button_bevel_color' ) ) ? strtolower( $fusion_settings->get( 'button_bevel_color_hover' ) ) : '#54770F',
'border_color' => ( '' !== $fusion_settings->get( 'button_border_color' ) ) ? strtolower( $fusion_settings->get( 'button_border_color' ) ) : '#ffffff',
'border_hover_color' => ( '' !== $fusion_settings->get( 'button_border_hover_color' ) ) ? strtolower( $fusion_settings->get( 'button_border_hover_color' ) ) : '#ffffff',
'color' => 'default',
'gradient_colors' => '',
'icon' => '',
'icon_divider' => 'no',
'icon_position' => 'left',
'link' => '',
'link_attributes' => '',
'modal' => '',
'size' => '',
'margin_bottom' => '',
'margin_left' => '',
'margin_right' => '',
'margin_top' => '',
'stretch' => ( '' !== $fusion_settings->get( 'button_span' ) ) ? $fusion_settings->get( 'button_span' ) : 'no',
'default_stretch_value' => ( '' !== $fusion_settings->get( 'button_span' ) ) ? $fusion_settings->get( 'button_span' ) : 'no',
'target' => '_self',
'text_transform' => '',
'title' => '',
'type' => ( '' !== $fusion_settings->get( 'button_type' ) ) ? strtolower( $fusion_settings->get( 'button_type' ) ) : 'flat',
'alignment' => '',
'alignment_medium' => '',
'alignment_small' => '',
'animation_type' => '',
'animation_direction' => 'down',
'animation_speed' => '',
'animation_delay' => '',
'animation_offset' => $fusion_settings->get( 'animation_offset' ),
'animation_color' => '',
'padding_top' => '',
'padding_right' => '',
'padding_bottom' => '',
'padding_left' => '',
'font_size' => '',
'line_height' => '',
'letter_spacing' => '',
'fusion_font_family_button_font' => '',
'fusion_font_variant_button_font' => '',
'gradient_start_position' => $fusion_settings->get( 'button_gradient_start' ),
'gradient_end_position' => $fusion_settings->get( 'button_gradient_end' ),
'gradient_type' => $fusion_settings->get( 'button_gradient_type' ),
'radial_direction' => $fusion_settings->get( 'button_radial_direction' ),
'linear_angle' => $fusion_settings->get( 'button_gradient_angle' ),
'border_radius_top_left' => $fusion_settings->get( 'button_border_radius', 'top_left' ),
'border_radius_top_right' => $fusion_settings->get( 'button_border_radius', 'top_right' ),
'border_radius_bottom_right' => $fusion_settings->get( 'button_border_radius', 'bottom_right' ),
'border_radius_bottom_left' => $fusion_settings->get( 'button_border_radius', 'bottom_left' ),
'border_top' => '',
'border_right' => '',
'border_bottom' => '',
'border_left' => '',
'icon_color' => '',
'text_color' => '',
'icon_hover_color' => '',
'text_hover_color' => '',
'gradient_hover_colors' => '',
'button_gradient_top_color' => ( '' !== $fusion_settings->get( 'button_gradient_top_color' ) ) ? $fusion_settings->get( 'button_gradient_top_color' ) : '#65bc7b',
'button_gradient_bottom_color' => ( '' !== $fusion_settings->get( 'button_gradient_bottom_color' ) ) ? $fusion_settings->get( 'button_gradient_bottom_color' ) : '#65bc7b',
'button_gradient_top_color_hover' => ( '' !== $fusion_settings->get( 'button_gradient_top_color_hover' ) ) ? $fusion_settings->get( 'button_gradient_top_color_hover' ) : '#5aa86c',
'button_gradient_bottom_color_hover' => ( '' !== $fusion_settings->get( 'button_gradient_bottom_color_hover' ) ) ? $fusion_settings->get( 'button_gradient_bottom_color_hover' ) : '#5aa86c',
'button_accent_color' => ( '' !== $fusion_settings->get( 'button_accent_color' ) ) ? $fusion_settings->get( 'button_accent_color' ) : '#ffffff',
'button_accent_hover_color' => ( '' !== $fusion_settings->get( 'button_accent_hover_color' ) ) ? $fusion_settings->get( 'button_accent_hover_color' ) : '#ffffff',
'button_bevel_color' => ( '' !== $fusion_settings->get( 'button_bevel_color' ) ) ? $fusion_settings->get( 'button_bevel_color' ) : '#54770F',
];
}
/**
* Maps settings to param variables.
*
* @static
* @access public
* @since 3.9
* @return array
*/
public static function settings_to_params() {
return [
'stripe_button_api_mode' => 'api_mode',
];
}
/**
* Render the shortcode
*
* @access public
* @since 3.9
* @param array $args Shortcode parameters.
* @param string $content Content between shortcode.
* @return string HTML output.
*/
public function render( $args, $content = '' ) {
global $shortcode_tags;
$this->set_element_id( $this->counter );
$this->defaults = self::get_element_defaults();
$this->args = FusionBuilder::set_shortcode_defaults( $this->defaults, $args, 'fusion_stripe_button' );
$html = '<form ' . FusionBuilder::attributes( 'stripe_button-shortcode' ) . '>';
$html .= $this->generate_hidden_fields();
$html .= call_user_func( $shortcode_tags['fusion_button'], $this->args, $content, 'fusion_button' );
$html .= $this->render_notice( ' ', 'error' );
$html .= '</form>';
$this->counter++;
$this->on_render();
return apply_filters( 'fusion_element_stripe_button_content', $html, $args );
}
/**
* Builds the attributes array.
*
* @access public
* @since 3.9
* @return array
*/
public function attr() {
$attr = [
'class' => 'awb-stripe-button-form awb-strip-button-form-' . $this->counter,
'style' => '',
];
$attr = fusion_builder_visibility_atts( $this->args['hide_on_mobile'], $attr );
$attr['data-target'] = $this->args['target'];
return $attr;
}
/**
* Renders notice.
*
* @since 3.9
* @access private
* @param string $notice The submission notice.
* @param string $notice_type Can be error|success.
* @return string The notices.
*/
private function render_notice( $notice, $notice_type ) {
// If form was not sent yet, $notice will be empty, so return early.
if ( ! $notice ) {
return '';
}
if ( class_exists( 'FusionSC_Alert' ) ) {
$shortcode = '[fusion_alert type="' . $notice_type . '" class="fusion-hidden awb-stripe-button-response awb-stripe-button-response-' . $notice_type . '" ';
foreach ( [ 'margin_top', 'margin_right', 'margin_bottom', 'margin_left' ] as $param ) {
if ( isset( $this->args[ $param ] ) && '' !== $this->args[ $param ] ) {
$shortcode .= $param . '="' . $this->args[ $param ] . '" ';
}
}
$shortcode .= ']' . $notice . '[/fusion_alert]';
$notice = do_shortcode( $shortcode );
} else {
$notice = '<div class="fusion-hidden awb-stripe-button-response awb-stripe-button-response-' . $notice_type . '">' . $notice . '</div>';
}
return apply_filters( 'fusion_stripe_button_notice', $notice, $notice_type );
}
/**
* Adds settings to element options panel.
*
* @access public
* @since 3.9
* @return array $sections Button settings.
*/
public function add_options() {
$api_key_link = 'https://stripe.com/docs/keys#obtain-api-keys';
return [
'stripe_button_shortcode_section' => [
'label' => esc_html__( 'Stripe Button', 'fusion-builder' ),
'id' => 'stripe_button_shortcode_section',
'type' => 'accordion',
'icon' => 'fusiona-check-empty',
'fields' => [
'stripe_button_shortcode_important_note_info' => [
'label' => '',
'description' => '<div class="fusion-redux-important-notice">' . __( '<strong>IMPORTANT NOTE:</strong> Insert API keys to authenticate requests with Stripe. You can find the keys in <a href="https://stripe.com/docs/keys" target="_blank">Stripe Account Dashboard</a>.', 'fusion-builder' ) . '</div>',
'id' => 'stripe_button_shortcode_important_note_info',
'type' => 'custom',
],
'stripe_button_api_mode' => [
'type' => 'radio-buttonset',
'label' => esc_attr__( 'API Mode', 'fusion-builder' ),
'description' => esc_attr__( 'Build your integration in Test mode, and switch to Live mode when you are ready.', 'fusion-builder' ),
'id' => 'stripe_button_api_mode',
'transport' => 'postMessage',
'choices' => [
'live' => esc_attr__( 'Live', 'fusion-builder' ),
'test' => esc_attr__( 'Test', 'fusion-builder' ),
],
'default' => 'test',
],
'stripe_button_test_secret_key' => [
'label' => esc_html__( 'Stripe Test Secret Key', 'fusion-builder' ),
/* translators: %s - Link to the docs. */
'description' => sprintf( __( 'Enter your Stripe Test Secret Key. For more information please see <a href="%s" target="_blank">Stripe API Guide</a>.', 'fusion-builder' ), $api_key_link ),
'id' => 'stripe_button_test_secret_key',
'default' => '',
'type' => 'text',
],
'stripe_button_validate_test_sk' => [
'label' => '',
'description' => esc_html__( 'Test Secret Key Status.', 'fusion-builder' ),
'id' => 'stripe_button_validate_test_sk',
'default' => '',
'type' => 'raw',
'content' => '<a class="button button-secondary" href="#" onclick="awbValidateStripeApiKey(event);" data-mode="test" target="_self" >' . esc_html__( 'Test Connection', 'fusion-builder' ) . '</a><span class="spinner fusion-spinner"></span>',
'full_width' => false,
'transport' => 'postMessage', // No need to refresh the page.
],
'stripe_button_live_secret_key' => [
'label' => esc_html__( 'Stripe Live Secret Key', 'fusion-builder' ),
/* translators: Link to the docs. */
'description' => sprintf( __( 'Enter your Live Secret Key. For more information please see <a href="%s" target="_blank">Stripe API Guide</a>.', 'fusion-builder' ), $api_key_link ),
'id' => 'stripe_button_live_secret_key',
'default' => '',
'type' => 'text',
],
'stripe_button_validate_live_sk' => [
'label' => '',
'description' => esc_html__( 'Live Secret Key Status.', 'fusion-builder' ),
'id' => 'stripe_button_validate_live_sk',
'default' => '',
'type' => 'raw',
'content' => '<a class="button button-secondary" href="#" onclick="awbValidateStripeApiKey(event);" data-mode="live" target="_self" >' . esc_html__( 'Test Connection', 'fusion-builder' ) . '</a><span class="spinner fusion-spinner"></span>',
'full_width' => false,
'transport' => 'postMessage', // No need to refresh the page.
],
],
],
];
}
/**
* Validate API KEY.
*
* @access public
* @since 3.9
* @return void
*/
public function validate_api_key() {
$secret_key = '';
if ( empty( $_POST['secretkey'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
wp_send_json_error( esc_html__( 'Secret Key is empty.', 'fusion-builder' ) );
} else {
$secret_key = wp_unslash( $_POST['secretkey'] ); // phpcs:ignore WordPress.Security.NonceVerification, WordPress.Security.ValidatedSanitizedInput
}
$response = $this->api->validate_api_key_endpoint( $secret_key );
$code = $response['response']['code'];
if ( 200 !== $code ) {
wp_send_json_error( sprintf( '%s: %s. %s', $code, $response['response']['message'], esc_html__( 'Please make sure you are entering a valid API KEY.', 'fusion-builder' ) ) );
} else {
wp_send_json_success( esc_html__( 'API is working properly.', 'fusion-builder' ) );
}
}
/**
* Generate form hidden fields.
*
* @access public
* @since 3.9
* @return string
*/
public function generate_hidden_fields() {
global $wp;
$current_url = home_url( add_query_arg( [], $wp->request ) );
$html = '';
$fields = [
'api_mode' => $this->args['api_mode'],
'url' => admin_url( 'admin-ajax.php' ),
'action' => 'submit_stripe_button',
'post_id' => get_the_ID(),
'cancel_url' => '' !== $this->args['cancel_url'] ? esc_url( $this->args['cancel_url'] ) : $current_url,
'success_url' => '' !== $this->args['success_url'] ? esc_url( $this->args['success_url'] ) : $current_url,
'product_name' => $this->args['product_name'],
'currency' => $this->args['currency'],
'product_price' => $this->args['product_price'],
'product_qty' => $this->args['product_qty'],
'shipping_price' => $this->args['shipping_price'],
'shipping_address' => $this->args['shipping_address'],
'tax_rate' => $this->args[ $this->args['api_mode'] . '_tax_rate' ],
];
foreach ( $fields as $key => $value ) {
$html .= sprintf( '<input type="hidden" name="%s" value="%s" />', $key, esc_attr( $value ) );
}
$html .= wp_nonce_field( 'stripe_button_form_submit', 'stripe_button_form_submit_nonce', true, false );
return $html;
}
/**
* Submit Stripe Form.
*
* @access public
* @since 3.9
* @return void
*/
public function submit_form_ajax() {
check_ajax_referer( 'awb-stripe-button-nonce', 'nonce' );
if ( isset( $_POST['data'] ) ) {
wp_parse_str( wp_unslash( $_POST['data'] ), $fields ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
} else {
wp_parse_str( '', $fields );
}
$args = wp_parse_args( $fields, self::get_element_defaults() );
$fusion_settings = awb_get_fusion_settings();
$secret_key = $fusion_settings->get( "stripe_button_{$args['api_mode']}_secret_key" );
if ( ! empty( $secret_key ) ) {
$this->api->post_checkout_endpoint( $secret_key, $args );
} else {
$this->error_handler( 401, esc_html__( 'Secret Key is empty. Please enter a valid secret key', 'fusion-builder' ) );
}
}
/**
* Error handler
*
* @since 3.9
*
* @param int $status_code The status code.
* @param string $error_message The error message.
*/
protected function error_handler( $status_code, $error_message ) {
$resp['response']['code'] = $status_code;
$resp['body'] = wp_json_encode(
[ 'error' => [ 'message' => $error_message ] ],
JSON_PRETTY_PRINT
);
wp_send_json( $resp );
}
/**
* Get list of supported currencies.
*
* @access public
* @since 3.9
* @return array
*/
public function get_currencies() {
return [
'USD' => _x( 'USD', 'Currency', 'fusion-builder' ),
'AED' => _x( 'AED', 'Currency', 'fusion-builder' ),
'AFN' => _x( 'AFN', 'Currency', 'fusion-builder' ),
'ALL' => _x( 'ALL', 'Currency', 'fusion-builder' ),
'AMD' => _x( 'AMD', 'Currency', 'fusion-builder' ),
'ANG' => _x( 'ANG', 'Currency', 'fusion-builder' ),
'AOA' => _x( 'AOA', 'Currency', 'fusion-builder' ),
'ARS' => _x( 'ARS', 'Currency', 'fusion-builder' ),
'AUD' => _x( 'AUD', 'Currency', 'fusion-builder' ),
'AWG' => _x( 'AWG', 'Currency', 'fusion-builder' ),
'AZN' => _x( 'AZN', 'Currency', 'fusion-builder' ),
'BAM' => _x( 'BAM', 'Currency', 'fusion-builder' ),
'BBD' => _x( 'BBD', 'Currency', 'fusion-builder' ),
'BDT' => _x( 'BDT', 'Currency', 'fusion-builder' ),
'BGN' => _x( 'BGN', 'Currency', 'fusion-builder' ),
'BIF' => _x( 'BIF', 'Currency', 'fusion-builder' ),
'BMD' => _x( 'BMD', 'Currency', 'fusion-builder' ),
'BND' => _x( 'BND', 'Currency', 'fusion-builder' ),
'BOB' => _x( 'BOB', 'Currency', 'fusion-builder' ),
'BRL' => _x( 'BRL', 'Currency', 'fusion-builder' ),
'BSD' => _x( 'BSD', 'Currency', 'fusion-builder' ),
'BWP' => _x( 'BWP', 'Currency', 'fusion-builder' ),
'BYN' => _x( 'BYN', 'Currency', 'fusion-builder' ),
'BZD' => _x( 'BZD', 'Currency', 'fusion-builder' ),
'CAD' => _x( 'CAD', 'Currency', 'fusion-builder' ),
'CDF' => _x( 'CDF', 'Currency', 'fusion-builder' ),
'CHF' => _x( 'CHF', 'Currency', 'fusion-builder' ),
'CLP' => _x( 'CLP', 'Currency', 'fusion-builder' ),
'CNY' => _x( 'CNY', 'Currency', 'fusion-builder' ),
'COP' => _x( 'COP', 'Currency', 'fusion-builder' ),
'CRC' => _x( 'CRC', 'Currency', 'fusion-builder' ),
'CVE' => _x( 'CVE', 'Currency', 'fusion-builder' ),
'CZK' => _x( 'CZK', 'Currency', 'fusion-builder' ),
'DJF' => _x( 'DJF', 'Currency', 'fusion-builder' ),
'DKK' => _x( 'DKK', 'Currency', 'fusion-builder' ),
'DOP' => _x( 'DOP', 'Currency', 'fusion-builder' ),
'DZD' => _x( 'DZD', 'Currency', 'fusion-builder' ),
'EGP' => _x( 'EGP', 'Currency', 'fusion-builder' ),
'ETB' => _x( 'ETB', 'Currency', 'fusion-builder' ),
'EUR' => _x( 'EUR', 'Currency', 'fusion-builder' ),
'FJD' => _x( 'FJD', 'Currency', 'fusion-builder' ),
'FKP' => _x( 'FKP', 'Currency', 'fusion-builder' ),
'GBP' => _x( 'GBP', 'Currency', 'fusion-builder' ),
'GEL' => _x( 'GEL', 'Currency', 'fusion-builder' ),
'GIP' => _x( 'GIP', 'Currency', 'fusion-builder' ),
'GMD' => _x( 'GMD', 'Currency', 'fusion-builder' ),
'GNF' => _x( 'GNF', 'Currency', 'fusion-builder' ),
'GTQ' => _x( 'GTQ', 'Currency', 'fusion-builder' ),
'GYD' => _x( 'GYD', 'Currency', 'fusion-builder' ),
'HKD' => _x( 'HKD', 'Currency', 'fusion-builder' ),
'HNL' => _x( 'HNL', 'Currency', 'fusion-builder' ),
'HRK' => _x( 'HRK', 'Currency', 'fusion-builder' ),
'HTG' => _x( 'HTG', 'Currency', 'fusion-builder' ),
'IDR' => _x( 'IDR', 'Currency', 'fusion-builder' ),
'ILS' => _x( 'ILS', 'Currency', 'fusion-builder' ),
'INR' => _x( 'INR', 'Currency', 'fusion-builder' ),
'ISK' => _x( 'ISK', 'Currency', 'fusion-builder' ),
'JMD' => _x( 'JMD', 'Currency', 'fusion-builder' ),
'JPY' => _x( 'JPY', 'Currency', 'fusion-builder' ),
'KES' => _x( 'KES', 'Currency', 'fusion-builder' ),
'KGS' => _x( 'KGS', 'Currency', 'fusion-builder' ),
'KHR' => _x( 'KHR', 'Currency', 'fusion-builder' ),
'KMF' => _x( 'KMF', 'Currency', 'fusion-builder' ),
'KRW' => _x( 'KRW', 'Currency', 'fusion-builder' ),
'KYD' => _x( 'KYD', 'Currency', 'fusion-builder' ),
'KZT' => _x( 'KZT', 'Currency', 'fusion-builder' ),
'LAK' => _x( 'LAK', 'Currency', 'fusion-builder' ),
'LBP' => _x( 'LBP', 'Currency', 'fusion-builder' ),
'LKR' => _x( 'LKR', 'Currency', 'fusion-builder' ),
'LRD' => _x( 'LRD', 'Currency', 'fusion-builder' ),
'LSL' => _x( 'LSL', 'Currency', 'fusion-builder' ),
'MAD' => _x( 'MAD', 'Currency', 'fusion-builder' ),
'MDL' => _x( 'MDL', 'Currency', 'fusion-builder' ),
'MGA' => _x( 'MGA', 'Currency', 'fusion-builder' ),
'MKD' => _x( 'MKD', 'Currency', 'fusion-builder' ),
'MMK' => _x( 'MMK', 'Currency', 'fusion-builder' ),
'MNT' => _x( 'MNT', 'Currency', 'fusion-builder' ),
'MOP' => _x( 'MOP', 'Currency', 'fusion-builder' ),
'MRO' => _x( 'MRO', 'Currency', 'fusion-builder' ),
'MUR' => _x( 'MUR', 'Currency', 'fusion-builder' ),
'MVR' => _x( 'MVR', 'Currency', 'fusion-builder' ),
'MWK' => _x( 'MWK', 'Currency', 'fusion-builder' ),
'MXN' => _x( 'MXN', 'Currency', 'fusion-builder' ),
'MYR' => _x( 'MYR', 'Currency', 'fusion-builder' ),
'MZN' => _x( 'MZN', 'Currency', 'fusion-builder' ),
'NAD' => _x( 'NAD', 'Currency', 'fusion-builder' ),
'NGN' => _x( 'NGN', 'Currency', 'fusion-builder' ),
'NIO' => _x( 'NIO', 'Currency', 'fusion-builder' ),
'NOK' => _x( 'NOK', 'Currency', 'fusion-builder' ),
'NPR' => _x( 'NPR', 'Currency', 'fusion-builder' ),
'NZD' => _x( 'NZD', 'Currency', 'fusion-builder' ),
'PAB' => _x( 'PAB', 'Currency', 'fusion-builder' ),
'PEN' => _x( 'PEN', 'Currency', 'fusion-builder' ),
'PGK' => _x( 'PGK', 'Currency', 'fusion-builder' ),
'PHP' => _x( 'PHP', 'Currency', 'fusion-builder' ),
'PKR' => _x( 'PKR', 'Currency', 'fusion-builder' ),
'PLN' => _x( 'PLN', 'Currency', 'fusion-builder' ),
'PYG' => _x( 'PYG', 'Currency', 'fusion-builder' ),
'QAR' => _x( 'QAR', 'Currency', 'fusion-builder' ),
'RON' => _x( 'RON', 'Currency', 'fusion-builder' ),
'RSD' => _x( 'RSD', 'Currency', 'fusion-builder' ),
'RUB' => _x( 'RUB', 'Currency', 'fusion-builder' ),
'RWF' => _x( 'RWF', 'Currency', 'fusion-builder' ),
'SAR' => _x( 'SAR', 'Currency', 'fusion-builder' ),
'SBD' => _x( 'SBD', 'Currency', 'fusion-builder' ),
'SCR' => _x( 'SCR', 'Currency', 'fusion-builder' ),
'SEK' => _x( 'SEK', 'Currency', 'fusion-builder' ),
'SGD' => _x( 'SGD', 'Currency', 'fusion-builder' ),
'SHP' => _x( 'SHP', 'Currency', 'fusion-builder' ),
'SLL' => _x( 'SLL', 'Currency', 'fusion-builder' ),
'SOS' => _x( 'SOS', 'Currency', 'fusion-builder' ),
'SRD' => _x( 'SRD', 'Currency', 'fusion-builder' ),
'STD' => _x( 'STD', 'Currency', 'fusion-builder' ),
'SZL' => _x( 'SZL', 'Currency', 'fusion-builder' ),
'THB' => _x( 'THB', 'Currency', 'fusion-builder' ),
'TJS' => _x( 'TJS', 'Currency', 'fusion-builder' ),
'TOP' => _x( 'TOP', 'Currency', 'fusion-builder' ),
'TRY' => _x( 'TRY', 'Currency', 'fusion-builder' ),
'TTD' => _x( 'TTD', 'Currency', 'fusion-builder' ),
'TWD' => _x( 'TWD', 'Currency', 'fusion-builder' ),
'TZS' => _x( 'TZS', 'Currency', 'fusion-builder' ),
'UAH' => _x( 'UAH', 'Currency', 'fusion-builder' ),
'UYU' => _x( 'UYU', 'Currency', 'fusion-builder' ),
'UZS' => _x( 'UZS', 'Currency', 'fusion-builder' ),
'VND' => _x( 'VND', 'Currency', 'fusion-builder' ),
'VUV' => _x( 'VUV', 'Currency', 'fusion-builder' ),
'WST' => _x( 'WST', 'Currency', 'fusion-builder' ),
'XAF' => _x( 'XAF', 'Currency', 'fusion-builder' ),
'XCD' => _x( 'XCD', 'Currency', 'fusion-builder' ),
'XOF' => _x( 'XOF', 'Currency', 'fusion-builder' ),
'XPF' => _x( 'XPF', 'Currency', 'fusion-builder' ),
'YER' => _x( 'YER', 'Currency', 'fusion-builder' ),
'ZAR' => _x( 'ZAR', 'Currency', 'fusion-builder' ),
'ZMW' => _x( 'ZMW', 'Currency', 'fusion-builder' ),
];
}
/**
* Get tax rates.
*
* @access public
* @since 3.9
* @param string $mode The mode.
* @return array
*/
public function get_tax_rates( $mode ) {
$fusion_settings = awb_get_fusion_settings();
$options = [
'' => esc_html__( 'None', 'fusion-builder' ),
];
$secret_key = $fusion_settings->get( "stripe_button_{$mode}_secret_key" );
if ( ! empty( $secret_key ) ) {
$rates = $this->api->post_tax_rates_endpoint( $secret_key );
$options = array_merge( $options, $rates );
}
return $options;
}
/**
* Sets the necessary scripts.
*
* @access public
* @since 3.9
* @return void
*/
public function on_first_render() {
Fusion_Dynamic_JS::enqueue_script(
'fusion-stripe-button',
FusionBuilder::$js_folder_url . '/general/fusion-stripe-button.js',
FusionBuilder::$js_folder_path . '/general/fusion-stripe-button.js',
[ 'jquery' ],
FUSION_BUILDER_VERSION,
true
);
Fusion_Dynamic_JS::localize_script(
'fusion-stripe-button',
'fusionStripeButtonVars',
[
'ajax_url' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'awb-stripe-button-nonce' ),
'productEmptyText' => esc_html__( 'Please fill product name or price in Element Settings.', 'fusion-builder' ),
]
);
}
}
}
/**
* Instantiates the post cards class.
*
* @since 3.9
* @return object FusionSC_Stripe_Button
*/
function fusion_stripe_button() { // phpcs:ignore WordPress.NamingConventions
return FusionSC_Stripe_Button::get_instance();
}
// Instantiate stripe button.
fusion_stripe_button();
}
/**
* Map shortcode to Avada Builder.
*
* @since 3.9
*/
function fusion_element_stripe_button() {
$editing = function_exists( 'is_fusion_editor' ) && is_fusion_editor();
$fusion_settings = awb_get_fusion_settings();
$currencies = [];
$test_mode_tax_rates = [];
$live_mode_tax_rates = [];
if ( function_exists( 'fusion_stripe_button' ) && $editing ) {
$currencies = fusion_stripe_button()->get_currencies();
$test_mode_tax_rates = fusion_stripe_button()->get_tax_rates( 'test' );
$live_mode_tax_rates = fusion_stripe_button()->get_tax_rates( 'live' );
}
$standard_schemes = [
'default' => esc_attr__( 'Default', 'fusion-builder' ),
'custom' => esc_attr__( 'Custom', 'fusion-builder' ),
];
$style_option = 'radio_button_set';
if ( apply_filters( 'awb_load_button_presets', ( '1' === $fusion_settings->get( 'button_presets' ) ) ) ) {
$style_option = 'select';
$standard_schemes = [
'default' => esc_attr__( 'Default', 'fusion-builder' ),
'custom' => esc_attr__( 'Custom', 'fusion-builder' ),
'green' => esc_attr__( 'Green', 'fusion-builder' ),
'darkgreen' => esc_attr__( 'Dark Green', 'fusion-builder' ),
'orange' => esc_attr__( 'Orange', 'fusion-builder' ),
'blue' => esc_attr__( 'Blue', 'fusion-builder' ),
'red' => esc_attr__( 'Red', 'fusion-builder' ),
'pink' => esc_attr__( 'Pink', 'fusion-builder' ),
'darkgray' => esc_attr__( 'Dark Gray', 'fusion-builder' ),
'lightgray' => esc_attr__( 'Light Gray', 'fusion-builder' ),
];
}
fusion_builder_map(
fusion_builder_frontend_data(
'FusionSC_Stripe_Button',
[
'name' => esc_attr__( 'Stripe Button', 'fusion-builder' ),
'shortcode' => 'fusion_stripe_button',
'icon' => 'fusiona-check-empty',
'preview' => FUSION_BUILDER_PLUGIN_DIR . 'inc/templates/previews/fusion-button-preview.php',
'preview_id' => 'fusion-builder-block-module-button-preview-template',
'help_url' => 'https://avada.com/documentation/stripe-button-element/',
'inline_editor' => true,
'subparam_map' => [
'fusion_font_family_button_font' => 'main_typography',
'fusion_font_variant_button_font' => 'main_typography',
'font_size' => 'main_typography',
'line_height' => 'main_typography',
'letter_spacing' => 'main_typography',
'text_transform' => 'main_typography',
],
'params' => [
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'API Mode', 'fusion-builder' ),
'description' => esc_attr__( 'Build your integration in Test mode, and switch to Live mode when you are ready.', 'fusion-builder' ),
'param_name' => 'api_mode',
'default' => '',
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'live' => esc_attr__( 'Live', 'fusion-builder' ),
'test' => esc_attr__( 'Test', 'fusion-builder' ),
],
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Collect Shipping Address', 'fusion-builder' ),
'description' => esc_attr__( 'Collect customer shipping address.', 'fusion-builder' ),
'param_name' => 'shipping_address',
'default' => 'yes',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Product Name', 'fusion-builder' ),
'param_name' => 'product_name',
'value' => esc_attr__( 'My Product', 'fusion-builder' ),
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
'description' => esc_attr__( 'Add the product name that you sell.', 'fusion-builder' ),
'placeholder' => true,
'dynamic_data' => true,
],
[
'type' => 'select',
'heading' => esc_attr__( 'Currency', 'fusion-builder' ),
'description' => esc_attr__( 'Select the currency.', 'fusion-builder' ),
'param_name' => 'currency',
'default' => 'USD',
'value' => $currencies,
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Product Price', 'fusion-builder' ),
'param_name' => 'product_price',
'value' => '3.99',
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
'description' => esc_attr__( 'Add the product price. Decimal numbers are supported by using the "." (period) delimiter.', 'fusion-builder' ),
'placeholder' => true,
'dynamic_data' => true,
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Quantity', 'fusion-builder' ),
'param_name' => 'product_qty',
'value' => '1',
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
'description' => esc_attr__( 'Add the product quantity.', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Shipping Price', 'fusion-builder' ),
'param_name' => 'shipping_price',
'value' => '',
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
'description' => esc_attr__( 'Add the shipping price. Decimal numbers are supported by using the "." (period) delimiter.', 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => 'select',
'heading' => esc_attr__( 'Tax Rate', 'fusion-builder' ),
'description' => esc_attr__( 'Select the tax rate. These options can be manage on Stripe dashboard > Products > Tax Rates.', 'fusion-builder' ),
'param_name' => 'test_tax_rate',
'default' => 'none',
'value' => $test_mode_tax_rates,
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
'dependency' => [
[
'element' => 'api_mode',
'value' => 'test',
'operator' => '==',
],
],
],
[
'type' => 'select',
'heading' => esc_attr__( 'Tax Rate', 'fusion-builder' ),
'description' => esc_attr__( 'Select the tax rate. These options can be manage on Stripe dashboard > Products > Tax Rates.', 'fusion-builder' ),
'param_name' => 'live_tax_rate',
'default' => 'none',
'value' => $live_mode_tax_rates,
'group' => esc_attr__( 'Payment', 'fusion-builder' ),
'dependency' => [
[
'element' => 'api_mode',
'value' => 'live',
'operator' => '==',
],
],
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Button Text', 'fusion-builder' ),
'param_name' => 'element_content',
'value' => esc_attr__( 'Pay Now', 'fusion-builder' ),
'description' => esc_attr__( 'Add the text that will display on button.', 'fusion-builder' ),
'placeholder' => true,
'dynamic_data' => true,
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Target', 'fusion-builder' ),
'description' => esc_attr__( '_self = open in same browser tab, _blank = open in new browser tab.', 'fusion-builder' ),
'param_name' => 'target',
'default' => '_self',
'value' => [
'_self' => esc_attr__( '_self', 'fusion-builder' ),
'_blank' => esc_attr__( '_blank', 'fusion-builder' ),
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Alignment', 'fusion-builder' ),
'description' => esc_attr__( "Select the button's alignment.", 'fusion-builder' ),
'param_name' => 'alignment',
'default' => '',
'responsive' => [
'state' => 'large',
],
'value' => [
'' => esc_attr__( 'Text Flow', 'fusion-builder' ),
'left' => esc_attr__( 'Left', 'fusion-builder' ),
'center' => esc_attr__( 'Center', 'fusion-builder' ),
'right' => esc_attr__( 'Right', 'fusion-builder' ),
],
],
[
'type' => 'link_selector',
'heading' => esc_attr__( 'Payment Success URL', 'fusion-builder' ),
'param_name' => 'success_url',
'value' => '',
'description' => esc_attr__( 'The URL the customer will be directed to after the payment is successful. ex: http://example.com.', 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => 'link_selector',
'heading' => esc_attr__( 'Payment Cancel URL', 'fusion-builder' ),
'param_name' => 'cancel_url',
'value' => '',
'description' => esc_attr__( 'The URL the customer will be directed to if they decide to cancel payment. ex: http://example.com.', 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => $style_option,
'heading' => esc_attr__( 'Button Style', 'fusion-builder' ),
'description' => $fusion_settings->get( 'button_presets' ) ? esc_attr__( 'Select the button\'s color. Select default or specific color name to use Global Options presets, or select custom to use advanced color options below.', 'fusion-builder' ) : esc_attr__( 'Select the button\'s color. Select default to use Global Options values, or custom to use advanced color options below.', 'fusion-builder' ),
'param_name' => 'color',
'default' => 'default',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => $standard_schemes,
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Gradient Start Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the start color of the button background.', 'fusion-builder' ),
'param_name' => 'button_gradient_top_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_top_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Gradient End Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the end color of the button background.', 'fusion-builder' ),
'param_name' => 'button_gradient_bottom_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_bottom_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Gradient Start Hover Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the start hover color of the button background.', 'fusion-builder' ),
'param_name' => 'button_gradient_top_color_hover',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_top_color_hover' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Gradient End Hover Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the end hover color of the button background.', 'fusion-builder' ),
'param_name' => 'button_gradient_bottom_color_hover',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_bottom_color_hover' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Gradient Start Position', 'fusion-builder' ),
'description' => esc_attr__( 'Select start position for gradient.', 'fusion-builder' ),
'param_name' => 'gradient_start_position',
'default' => $fusion_settings->get( 'button_gradient_start' ),
'value' => '',
'min' => '0',
'max' => '100',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Gradient End Position', 'fusion-builder' ),
'description' => esc_attr__( 'Select end position for gradient.', 'fusion-builder' ),
'param_name' => 'gradient_end_position',
'default' => $fusion_settings->get( 'button_gradient_end' ),
'value' => '',
'min' => '0',
'max' => '100',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Gradient Type', 'fusion-builder' ),
'description' => esc_attr__( 'Controls gradient type.', 'fusion-builder' ),
'param_name' => 'gradient_type',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'linear' => esc_attr__( 'Linear', 'fusion-builder' ),
'radial' => esc_attr__( 'Radial', 'fusion-builder' ),
],
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'select',
'heading' => esc_attr__( 'Radial Direction', 'fusion-builder' ),
'description' => esc_attr__( 'Select direction for radial gradient.', 'fusion-builder' ),
'param_name' => 'radial_direction',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'left top' => esc_attr__( 'Left Top', 'fusion-builder' ),
'left center' => esc_attr__( 'Left Center', 'fusion-builder' ),
'left bottom' => esc_attr__( 'Left Bottom', 'fusion-builder' ),
'right top' => esc_attr__( 'Right Top', 'fusion-builder' ),
'right center' => esc_attr__( 'Right Center', 'fusion-builder' ),
'right bottom' => esc_attr__( 'Right Bottom', 'fusion-builder' ),
'center top' => esc_attr__( 'Center Top', 'fusion-builder' ),
'center center' => esc_attr__( 'Center Center', 'fusion-builder' ),
'center bottom' => esc_attr__( 'Center Bottom', 'fusion-builder' ),
],
'dependency' => [
[
'element' => 'gradient_type',
'value' => 'linear',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Gradient Angle', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the gradient angle. In degrees.', 'fusion-builder' ),
'param_name' => 'linear_angle',
'default' => $fusion_settings->get( 'button_gradient_angle' ),
'value' => '180',
'min' => '',
'max' => '360',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'gradient_type',
'value' => 'radial',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Text Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the color of the button text, divider and icon.', 'fusion-builder' ),
'param_name' => 'accent_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_accent_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Accent Hover Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the hover color of the button text, divider and icon.', 'fusion-builder' ),
'param_name' => 'accent_hover_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_accent_hover_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Type', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the button type.', 'fusion-builder' ),
'param_name' => 'type',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'flat' => esc_attr__( 'Flat', 'fusion-builder' ),
'3d' => esc_attr__( '3D', 'fusion-builder' ),
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Bevel Color For 3D Mode', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the bevel color of the button when using 3D button type.', 'fusion-builder' ),
'param_name' => 'bevel_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_bevel_color' ),
'dependency' => [
[
'element' => 'type',
'value' => 'flat',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Hover Bevel Color For 3D Mode', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the hover bevel color of the button when using 3D button type.', 'fusion-builder' ),
'param_name' => 'bevel_color_hover',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_bevel_color_hover' ),
'dependency' => [
[
'element' => 'type',
'value' => 'flat',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_attr__( 'Button Border Size', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the border size. In pixels or percentage, ex: 10px or 10%.', 'fusion-builder' ),
'param_name' => 'border_width',
'value' => [
'border_top' => '',
'border_right' => '',
'border_bottom' => '',
'border_left' => '',
],
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_html__( 'Button Border Radius', 'fusion-builder' ),
'description' => esc_html__( 'Controls the border radius. Enter values including any valid CSS unit, ex: 10px.', 'fusion-builder' ),
'param_name' => 'border_radius',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'border_radius_top_left' => '',
'border_radius_top_right' => '',
'border_radius_bottom_right' => '',
'border_radius_bottom_left' => '',
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Border Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the border color of the button.', 'fusion-builder' ),
'param_name' => 'border_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_border_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Border Hover Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the hover border color of the button.', 'fusion-builder' ),
'param_name' => 'border_hover_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_border_hover_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Size', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the button size.', 'fusion-builder' ),
'param_name' => 'size',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Custom', 'fusion-builder' ),
'small' => esc_attr__( 'Small', 'fusion-builder' ),
'medium' => esc_attr__( 'Medium', 'fusion-builder' ),
'large' => esc_attr__( 'Large', 'fusion-builder' ),
'xlarge' => esc_attr__( 'XLarge', 'fusion-builder' ),
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_attr__( 'Padding', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the padding for the button.', 'fusion-builder' ),
'param_name' => 'padding',
'group' => esc_html__( 'Design', 'fusion-builder' ),
'value' => [
'padding_top' => '',
'padding_right' => '',
'padding_bottom' => '',
'padding_left' => '',
],
'dependency' => [
[
'element' => 'size',
'value' => '',
'operator' => '==',
],
],
],
[
'type' => 'typography',
'remove_from_atts' => true,
'global' => true,
'heading' => esc_attr__( 'Typography', 'fusion-builder' ),
'description' => esc_html__( 'Controls the button typography, if left empty will inherit from globals.', 'fusion-builder' ),
'param_name' => 'main_typography',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'choices' => [
'font-family' => 'button_font',
'font-size' => 'font_size',
'line-height' => 'line_height',
'letter-spacing' => 'letter_spacing',
'text-transform' => 'text_transform',
],
'default' => [
'font-family' => '',
'variant' => '',
'font-size' => '',
'line-height' => '',
'letter-spacing' => '',
'text-transform' => '',
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Span', 'fusion-builder' ),
'description' => esc_attr__( 'Controls if the button spans the full width of its container.', 'fusion-builder' ),
'param_name' => 'stretch',
'default' => 'default',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'default' => esc_attr__( 'Default', 'fusion-builder' ),
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
],
'fusion_margin_placeholder' => [
'param_name' => 'margin',
'value' => [
'margin_top' => '',
'margin_right' => '',
'margin_bottom' => '',
'margin_left' => '',
],
],
[
'type' => 'iconpicker',
'heading' => esc_attr__( 'Icon', 'fusion-builder' ),
'param_name' => 'icon',
'value' => '',
'description' => esc_attr__( 'Click an icon to select, click again to deselect.', 'fusion-builder' ),
'group' => esc_attr__( 'Design', 'fusion-builder' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Icon Position', 'fusion-builder' ),
'description' => esc_attr__( 'Choose the position of the icon on the button.', 'fusion-builder' ),
'param_name' => 'icon_position',
'value' => [
'left' => esc_attr__( 'Left', 'fusion-builder' ),
'right' => esc_attr__( 'Right', 'fusion-builder' ),
],
'default' => 'left',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'icon',
'value' => '',
'operator' => '!=',
],
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Icon Divider', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to display a divider between icon and text.', 'fusion-builder' ),
'param_name' => 'icon_divider',
'default' => 'no',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'icon',
'value' => '',
'operator' => '!=',
],
],
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
],
'fusion_animation_placeholder' => [
'preview_selector' => '.fusion-button',
],
[
'type' => 'checkbox_button_set',
'heading' => esc_attr__( 'Element Visibility', 'fusion-builder' ),
'param_name' => 'hide_on_mobile',
'value' => fusion_builder_visibility_options( 'full' ),
'default' => fusion_builder_default_visibility( 'array' ),
'description' => esc_attr__( 'Choose to show or hide the element on small, medium or large screens. You can choose more than one at a time.', 'fusion-builder' ),
],
'fusion_sticky_visibility_placeholder' => [],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS Class', 'fusion-builder' ),
'param_name' => 'class',
'value' => '',
'description' => esc_attr__( 'Add a class to the wrapping HTML element.', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS ID', 'fusion-builder' ),
'param_name' => 'id',
'value' => '',
'description' => esc_attr__( 'Add an ID to the wrapping HTML element.', 'fusion-builder' ),
],
],
]
)
);
}
add_action( 'fusion_builder_before_init', 'fusion_element_stripe_button' );