: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
class ET_Builder_Module_Signup extends ET_Builder_Module_Type_WithSpamProtection {
protected static $_providers;
public static $enabled_providers;
public $child_slug = 'et_pb_signup_custom_field';
public $module_items_config = array(
'toggle_slug' => 'fields',
'use_custom_fields' => 'on',
'function.hasPredefinedFields' => 'off',
'${provider}_list' => array( '0|none', '' ),
$this->name = esc_html__( 'Email Optin', 'et_builder' );
$this->plural = esc_html__( 'Email Optins', 'et_builder' );
$this->slug = 'et_pb_signup';
$this->vb_support = 'on';
$this->child_item_text = esc_html__( 'Custom Field', 'et_builder' );
$providers = self::providers()->names_by_slug();
$providers['feedburner'] = 'FeedBurner';
self::$enabled_providers = apply_filters( 'et_builder_module_signup_enabled_providers', $providers );
ksort( self::$enabled_providers );
$this->main_css_element = '%%order_class%%.et_pb_subscribe';
$this->settings_modal_toggles = array(
'main_content' => et_builder_i18n( 'Text' ),
'provider' => esc_html__( 'Email Account', 'et_builder' ),
'fields' => esc_html__( 'Fields', 'et_builder' ),
'success_action' => esc_html__( 'Success Action', 'et_builder' ),
'spam' => esc_html__( 'Spam Protection', 'et_builder' ),
'layout' => et_builder_i18n( 'Layout' ),
'title' => et_builder_i18n( 'Text' ),
'privacy' => esc_html__( 'Privacy', 'et_builder' ),
$this->advanced_fields = array(
'label' => et_builder_i18n( 'Title' ),
'main' => "{$this->main_css_element} .et_pb_newsletter_description h2, {$this->main_css_element} .et_pb_newsletter_description h1.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h3.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h4.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h5.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h6.et_pb_module_header",
'label' => et_builder_i18n( 'Body' ),
'main' => "{$this->main_css_element} .et_pb_newsletter_description, {$this->main_css_element} .et_pb_newsletter_form",
'line_height' => "{$this->main_css_element} p",
'block_elements' => array(
'tabbed_subtoggles' => true,
'bb_icons_support' => true,
'link' => "{$this->main_css_element} .et_pb_newsletter_description a, {$this->main_css_element} .et_pb_newsletter_form a",
'ul' => "{$this->main_css_element} .et_pb_newsletter_description ul li, {$this->main_css_element} .et_pb_newsletter_form ul li",
'ul_item_indent' => "{$this->main_css_element} .et_pb_newsletter_description ul, {$this->main_css_element} .et_pb_newsletter_form ul",
'ol' => "{$this->main_css_element} .et_pb_newsletter_description ol li, {$this->main_css_element} .et_pb_newsletter_form ol li",
'ol_item_indent' => "{$this->main_css_element} .et_pb_newsletter_description ol, {$this->main_css_element} .et_pb_newsletter_form ol",
'quote' => "{$this->main_css_element} .et_pb_newsletter_description blockquote, {$this->main_css_element} .et_pb_newsletter_form blockquote",
'result_message' => array(
'label' => esc_html__( 'Result Message', 'et_builder' ),
'main' => "{$this->main_css_element} .et_pb_newsletter_form .et_pb_newsletter_result h2",
'margin_padding' => array(
'label' => et_builder_i18n( 'Button' ),
'main' => "{$this->main_css_element} .et_pb_newsletter_button.et_pb_button",
'limited_main' => "{$this->main_css_element} .et_pb_newsletter_button.et_pb_button",
'main' => '%%order_class%% .et_pb_newsletter_button',
'margin_padding' => array(
'has_background_color_toggle' => true,
'use_background_color' => array(
'background_color' => array(
'depends_show_if' => 'on',
'default' => et_builder_accent_color(),
'use_background_layout' => true,
'main' => '%%order_class%% .et_pb_newsletter_description p, %%order_class%% .et_pb_newsletter_description .et_pb_module_header',
'text_shadow' => '%%order_class%% .et_pb_newsletter_description p, %%order_class%% .et_pb_newsletter_description .et_pb_module_header',
'text_orientation' => array(
'background_layout' => array(
'label' => esc_html__( 'Fields', 'et_builder' ),
'main' => '%%order_class%% .et_pb_newsletter_form p .input',
'background_color' => '%%order_class%% .et_pb_newsletter_form p input[type="text"], %%order_class%% .et_pb_newsletter_form p textarea, %%order_class%% .et_pb_newsletter_form p select, %%order_class%% .et_pb_newsletter_form p .input[type="checkbox"] + label i, %%order_class%% .et_pb_newsletter_form p .input[type="radio"] + label i',
'background_color_hover' => '%%order_class%% .et_pb_newsletter_form p input[type="text"]:hover, %%order_class%% .et_pb_newsletter_form p textarea:hover, %%order_class%% .et_pb_newsletter_form p select:hover, %%order_class%% .et_pb_newsletter_form p .input[type="checkbox"] + label:hover i, %%order_class%% .et_pb_newsletter_form p .input[type="radio"] + label:hover i',
'focus_background_color' => '%%order_class%% .et_pb_newsletter_form p input.input:focus, %%order_class%% .et_pb_newsletter_form p textarea:focus, %%order_class%% .et_pb_newsletter_form p select:focus',
'form_text_color' => '%%order_class%% .et_pb_newsletter_form p input[type="text"], %%order_class%% .et_pb_newsletter_form p textarea, %%order_class%% .et_pb_newsletter_form p select, %%order_class%% .et_pb_newsletter_form p .input[type="checkbox"] + label i:before',
'form_text_color_hover' => '%%order_class%% .et_pb_newsletter_form p input[type="text"]:hover, %%order_class%% .et_pb_newsletter_form p textarea:hover, %%order_class%% .et_pb_newsletter_form p select:hover, %%order_class%% .et_pb_newsletter_form p .input[type="checkbox"] + label:hover i:before',
'focus_text_color' => '%%order_class%% .et_pb_newsletter_form p .input:focus',
'placeholder_focus' => '%%order_class%% .et_pb_newsletter_form p .input:focus::-webkit-input-placeholder, %%order_class%% .et_pb_newsletter_form p .input:focus::-moz-placeholder, %%order_class%% .et_pb_newsletter_form p .input:focus:-ms-input-placeholder, %%order_class%% .et_pb_newsletter_form p textarea:focus::-webkit-input-placeholder, %%order_class%% .et_pb_newsletter_form p textarea:focus::-moz-placeholder, %%order_class%% .et_pb_newsletter_form p textarea:focus:-ms-input-placeholder',
'important' => array( 'form_text_color' ),
'main' => '%%order_class%% .et_pb_newsletter_form .input',
'default_on_fronts' => array(
'border_styles' => array(
'border_radii' => '%%order_class%% .et_pb_newsletter_form p input[type="text"], %%order_class%% .et_pb_newsletter_form p textarea, %%order_class%% .et_pb_newsletter_form p select, %%order_class%% .et_pb_newsletter_form p .input[type="radio"] + label i, %%order_class%% .et_pb_newsletter_form p .input[type="checkbox"] + label i',
'border_styles' => '%%order_class%% .et_pb_newsletter_form p input[type="text"], %%order_class%% .et_pb_newsletter_form p textarea, %%order_class%% .et_pb_newsletter_form p select, %%order_class%% .et_pb_newsletter_form p .input[type="radio"] + label i, %%order_class%% .et_pb_newsletter_form p .input[type="checkbox"] + label i',
'label_prefix' => esc_html__( 'Fields', 'et_builder' ),
'form_field_focus' => array(
'name' => 'fields_focus',
'border_radii' => '%%order_class%% .et_pb_newsletter_form p input[type="text"]:focus',
'border_styles' => '%%order_class%% .et_pb_newsletter_form p input[type="text"]:focus',
'label_prefix' => esc_html__( 'Fields Focus', 'et_builder' ),
'%%order_class%%.et_pb_contact_field .et_pb_contact_field_options_title',
"{$this->main_css_element} .et_pb_newsletter_form .input",
"{$this->main_css_element} .et_pb_newsletter_form .input::-webkit-input-placeholder",
"{$this->main_css_element} .et_pb_newsletter_form .input::-moz-placeholder",
"{$this->main_css_element} .et_pb_newsletter_form .input:-ms-input-placeholder",
"{$this->main_css_element} .et_pb_newsletter_form .input[type=checkbox] + label",
"{$this->main_css_element} .et_pb_newsletter_form .input[type=radio] + label",
'%%order_class%%.et_pb_contact_field .et_pb_contact_field_options_title:hover',
"{$this->main_css_element} .et_pb_newsletter_form .input:hover",
"{$this->main_css_element} .et_pb_newsletter_form .input:hover::-webkit-input-placeholder",
"{$this->main_css_element} .et_pb_newsletter_form .input:hover::-moz-placeholder",
"{$this->main_css_element} .et_pb_newsletter_form .input:hover:-ms-input-placeholder",
"{$this->main_css_element} .et_pb_newsletter_form .input[type=checkbox] + label:hover",
"{$this->main_css_element} .et_pb_newsletter_form .input[type=radio] + label:hover",
'important' => 'plugin_only',
'margin_padding' => array(
'main' => '%%order_class%% .et_pb_newsletter_form p.et_pb_newsletter_field',
'padding' => '%%order_class%% .et_pb_newsletter_form .input, %%order_class%% .et_pb_newsletter_form input[type="text"], %%order_class%% .et_pb_newsletter_form p.et_pb_newsletter_field input[type="text"], %%order_class%% .et_pb_newsletter_form textarea, %%order_class%% .et_pb_newsletter_form p.et_pb_newsletter_field textarea, %%order_class%% .et_pb_newsletter_form select',
'important' => array( 'custom_padding' ),
$this->custom_css_fields = array(
'newsletter_title' => array(
'label' => esc_html__( 'Opt-in Title', 'et_builder' ),
'selector' => "{$this->main_css_element} .et_pb_newsletter_description h2, {$this->main_css_element} .et_pb_newsletter_description h1.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h3.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h4.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h5.et_pb_module_header, {$this->main_css_element} .et_pb_newsletter_description h6.et_pb_module_header",
'newsletter_description' => array(
'label' => esc_html__( 'Opt-in Description', 'et_builder' ),
'selector' => '.et_pb_newsletter_description',
'newsletter_form' => array(
'label' => esc_html__( 'Opt-in Form', 'et_builder' ),
'selector' => '.et_pb_newsletter_form',
'newsletter_fields' => array(
'label' => esc_html__( 'Opt-in Form Fields', 'et_builder' ),
'selector' => '%%order_class%% .et_pb_newsletter_form p input[type="text"], %%order_class%% .et_pb_newsletter_form p textarea, %%order_class%% .et_pb_newsletter_form p select, %%order_class%% .et_pb_newsletter_form p .input[type="radio"] + label i, %%order_class%% .et_pb_newsletter_form p .input[type="checkbox"] + label i',
'newsletter_button' => array(
'label' => esc_html__( 'Subscribe Button', 'et_builder' ),
'selector' => '.et_pb_subscribe .et_pb_newsletter_button.et_pb_button',
'no_space_before_selector' => true,
$this->help_videos = array(
'name' => esc_html__( 'An introduction to the Email Optin module', 'et_builder' ),
protected static function _get_account_fields( $provider_slug ) {
et_core_nonce_verified_previously();
$fields = self::providers()->account_fields( $provider_slug );
$is_VB = ( et_core_is_fb_enabled() && ! et_fb_dynamic_asset_exists( 'definitions' ) ) || apply_filters( 'et_builder_modules_is_saving_cache', false ) || ( isset( $_REQUEST['action'] ) && in_array( $_REQUEST['action'], array(
'et_fb_update_builder_assets',
'et_fb_retrieve_builder_data'
$show_if = $is_VB ? 'add_new_account' : 'manage|add_new_account';
$account_name_key = $provider_slug . '_account_name';
$list_key = $provider_slug . '_list';
$description_text = esc_html__( 'Email Provider Account Setup Documentation', 'et_builder' );
$field_ids = array_keys( $fields );
$last_field_id = "{$provider_slug}_" . array_pop( $field_ids );
$last_field_id = $account_name_key;
'option_class' => 'et-pb-option-group--last-field',
'class' => 'et_pb_email_cancel',
'text' => et_builder_i18n( 'Cancel' ),
'class' => 'et_pb_email_submit',
'text' => esc_html__( 'Submit', 'et_builder' ),
$account_name_key => array(
'name' => 'account_name',
'label' => esc_html__( 'Account Name', 'et_builder' ),
'option_category' => 'basic_option',
'description' => esc_html__( 'A name to associate with the account when displayed in the List select field.', 'et_builder' ),
'class' => "et_pb_email_{$provider_slug}_account_name",
'toggle_slug' => 'provider',
foreach ( $fields as $field_id => $field_info ) {
$field_id = "{$provider_slug}_{$field_id}";
$show_if_conditions = array(
if ( isset( $field_info['show_if'] ) ) {
$show_if_conditions = array_merge( $show_if_conditions, $field_info['show_if']);
$account_fields[ $field_id ] = array(
'label' => et_core_esc_previously( $field_info['label'] ),
'option_category' => 'basic_option',
'description' => sprintf( '<a target="_blank" href="https://www.elegantthemes.com/documentation/bloom/accounts#%1$s">%2$s</a>', $provider_slug, $description_text ),
'show_if' => $show_if_conditions,
'class' => 'et_pb_email_' . $field_id,
'toggle_slug' => 'provider',
'not_required' => self::$_->array_get( $field_info, 'not_required', false ),
$account_fields[ $last_field_id ] = array_merge( $account_fields[ $last_field_id ], $buttons );
protected static function _get_provider_fields() {
$lists = self::get_lists();
$no_lists[] = array( 'none' => esc_html__( 'Select a list', 'et_builder' ) );
$no_lists['manage'] = array(
'label' => esc_html_x( '%s List', 'MailChimp, Aweber, etc', 'et_builder' ),
'description' => esc_html__( 'Choose a list. If you don\'t see any lists, click "Add" to add an account.', 'et_builder' ),
'add' => esc_html__( 'Add', 'et_builder' ),
'remove' => esc_html__( 'Remove', 'et_builder' ),
'confirm' => esc_attr__( 'Confirm', 'et_builder' ),
'cancel' => esc_attr__( 'Cancel', 'et_builder' ),
'fetch' => esc_html__( 'Fetch Lists', 'et_builder' ),
'removing' => esc_attr__( 'The following account will be removed:', 'et_builder' ),
'adding' => esc_attr__( 'Use the fields below to add a new account.', 'et_builder' ),
foreach ( self::$enabled_providers as $provider_slug => $provider_name ) {
if ( 'feedburner' === $provider_slug ) {
$fields[ $provider_slug . '_list' ] = array(
'label' => sprintf( $i18n['label'], $provider_name ),
'type' => 'select_with_option_groups',
'option_category' => 'basic_option',
'options' => isset( $lists[ $provider_slug ] ) ? $lists[ $provider_slug ] : $no_lists,
'description' => $i18n['description'],
'provider' => $provider_slug,
'default_on_front' => '',
'toggle_slug' => 'provider',
'class' => 'et_pb_email_add_account',
'class' => 'et_pb_email_remove_account',
'text' => $i18n['remove'],
'data-confirm_text' => $i18n['confirm'],
'class' => 'et_pb_email_force_fetch_lists',
'text' => $i18n['fetch'],
'data-cancel_text' => $i18n['cancel'],
'data-confirm_remove_text' => $i18n['removing'],
'data-adding_new_account_text' => $i18n['adding'],
$account_fields = is_admin() || et_core_is_saving_builder_modules_cache() || ( et_core_is_fb_enabled() && ! et_fb_dynamic_asset_exists( 'definitions' ) ) ? self::_get_account_fields( $provider_slug ) : array();
$fields = array_merge( $fields, $account_fields );
$name_field_only = array_keys( self::providers()->names_by_slug( 'all', 'name_field_only' ) );
$no_custom_fields = array_keys( self::providers()->names_by_slug( 'all', 'no_custom_fields' ) );
'label' => esc_html__( 'Service Provider', 'et_builder' ),
'option_category' => 'basic_option',
'options' => self::$enabled_providers,
'description' => esc_html__( 'Choose a service provider.', 'et_builder' ),
'toggle_slug' => 'provider',
'default' => 'mailchimp',
'feedburner_uri' => array(
'label' => esc_html__( 'Feed Title', 'et_builder' ),
'option_category' => 'basic_option',
'provider' => 'feedburner',
'description' => et_get_safe_localization( sprintf( __( 'Enter <a href="%1$s" target="_blank">Feed Title</a>.', 'et_builder' ), esc_url( 'http://feedburner.google.com/fb/a/myfeeds' ) ) ),
'toggle_slug' => 'provider',
self::_get_provider_fields(),
'label' => et_builder_i18n( 'Layout' ),
'description' => esc_html__( 'Choose where you would like the input fields to appear in relation to the body text and title text.', 'et_builder' ),
'left_right' => esc_html__( 'Body On Left, Form On Right', 'et_builder' ),
'right_left' => esc_html__( 'Body On Right, Form On Left', 'et_builder' ),
'top_bottom' => esc_html__( 'Body On Top, Form On Bottom', 'et_builder' ),
'bottom_top' => esc_html__( 'Body On Bottom, Form On Top', 'et_builder' ),
'default' => 'left_right',
'tab_slug' => 'advanced',
'toggle_slug' => 'layout',
'label' => esc_html__( 'Include IP Address' ),
'type' => 'yes_no_button',
'on' => et_builder_i18n( 'Yes' ),
'off' => et_builder_i18n( 'No' ),
'option_category' => 'configuration',
'description' => esc_html__( "Include the subscriber's ip address in the data sent to your email provider.", 'et_builder' ),
'toggle_slug' => 'privacy',
'tab_slug' => 'custom_css',
'label' => esc_html__( 'Use Single Name Field', 'et_builder' ),
'type' => 'yes_no_button',
'option_category' => 'configuration',
'on' => et_builder_i18n( 'Yes' ),
'off' => et_builder_i18n( 'No' ),
'provider' => array_merge( $name_field_only, array( 'feedburner' ) ),
'toggle_slug' => 'fields',
'description' => esc_html__( 'Whether or not to use a single Name field in the opt-in form.', 'et_builder' ),