: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
require_once(dirname(__FILE__).'/SGPopup.php');
require_once(ABSPATH.'wp-admin/includes/plugin.php');
class SubscriptionPopup extends SGPopup
private $formContent = '';
public function __construct()
add_filter('sgpbPopupRenderOptions', array($this, 'renderOptions'), 12, 1);
add_filter('sgpbAdminJsFiles', array($this, 'adminJsFilter'), 1, 1);
add_filter('sgpbAdminCssFiles', array($this, 'adminCssFilter'), 1, 1);
add_filter('sgpbSubscriptionForm', array($this, 'subscriptionForm'), 1, 1);
private function frontendFilters()
$isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
if (!$isSubscriptionPlusActive) {
add_filter('sgpbFrontendJsFiles', array($this, 'frontJsFilter'), 1, 1);
add_filter('sgpbFrontendCssFiles', array($this, 'frontCssFilter'), 1, 1);
public function setData($data)
public function getData()
public function setFormContent($formContent)
$this->formContent = $formContent;
public function getFormContent()
return $this->formContent;
public static function getTablesSql()
$dbEngine = Functions::getDatabaseEngine();
$tablesSql[] = SGPB_SUBSCRIBERS_TABLE_NAME.' (
`id` int(12) NOT NULL AUTO_INCREMENT,
`firstName` varchar(255),
`subscriptionType` int(12),
`unsubscribed` int(11) default 0,
) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;';
$tablesSql[] = SGPB_SUBSCRIBERS_ERROR_TABLE_NAME.' (
`id` int(12) NOT NULL AUTO_INCREMENT,
`firstName` varchar(255),
`popupType` varchar(255),
) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;';
* Return Subscription popup type need all table names
* @return array $table names
public static function getTableNames()
SGPB_SUBSCRIBERS_TABLE_NAME,
SGPB_SUBSCRIBERS_ERROR_TABLE_NAME
public function frontJsFilter($jsFiles)
$jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Subscription.js');
$jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Validate.js');
public function adminJsFilter($jsFiles)
$jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Subscription.js');
public function adminCssFilter($cssFiles)
'folderUrl' => SG_POPUP_CSS_URL,
'filename' => 'ResetFormStyle.css'
'folderUrl' => SG_POPUP_CSS_URL,
'filename' => 'SubscriptionForm.css'
public function frontCssFilter($cssFiles)
'folderUrl' => SG_POPUP_CSS_URL,
'filename' => 'ResetFormStyle.css',
'folderUrl' => SG_POPUP_CSS_URL,
'filename' => 'SubscriptionForm.css',
public function addAdditionalSettings($postData = array(), $obj = null)
$this->setData($postData);
$this->setPostData($postData);
$isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
if (!$isSubscriptionPlusActive) {
$postData['sgpb-subs-fields'] = $this->createFormFieldsData();
public function setSubsFormData($formId)
$savedData = SGPopup::getSavedData($formId);
$this->setData($savedData);
private function getFieldValue($optionName)
$postData = $this->getPostData();
if (!empty($postData[$optionName])) {
return $postData[$optionName];
$defaultData = $this->getDefaultDataByName($optionName);
// when Saved data does not exist we try find inside default values
if (empty($postData) && !empty($defaultData)) {
return $defaultData['defaultValue'];
* Create form fields data
* @return array $formData
public function createFormFieldsData()
$emailPlaceholder = $this->getFieldValue('sgpb-subs-email-placeholder');
if ($this->getFieldValue('sgpb-subs-text-width')) {
$inputWidth = $this->getFieldValue('sgpb-subs-text-width');
$inputStyles['width'] = AdminHelper::getCSSSafeSize($inputWidth);
if ($this->getFieldValue('sgpb-subs-text-height')) {
$inputHeight = $this->getFieldValue('sgpb-subs-text-height');
$inputStyles['height'] = AdminHelper::getCSSSafeSize($inputHeight);
if ($this->getFieldValue('sgpb-subs-text-border-width')) {
$inputBorderWidth = $this->getFieldValue('sgpb-subs-text-border-width');
$inputStyles['border-width'] = AdminHelper::getCSSSafeSize($inputBorderWidth);
if ($this->getFieldValue('sgpb-subs-text-border-color')) {
$inputStyles['border-color'] = $this->getFieldValue('sgpb-subs-text-border-color');
if ($this->getFieldValue('sgpb-subs-text-bg-color')) {
$inputStyles['background-color'] = $this->getFieldValue('sgpb-subs-text-bg-color');
if ($this->getFieldValue('sgpb-subs-text-color')) {
$inputStyles['color'] = $this->getFieldValue('sgpb-subs-text-color');
$inputStyles['autocomplete'] = 'off';
if ($this->getFieldValue('sgpb-subs-btn-width')) {
$submitWidth = $this->getFieldValue('sgpb-subs-btn-width');
$submitStyles['width'] = AdminHelper::getCSSSafeSize($submitWidth);
if ($this->getFieldValue('sgpb-subs-btn-height')) {
$submitHeight = $this->getFieldValue('sgpb-subs-btn-height');
$submitStyles['height'] = AdminHelper::getCSSSafeSize($submitHeight);
if ($this->getFieldValue('sgpb-subs-btn-bg-color')) {
$submitStyles['background-color'] = $this->getFieldValue('sgpb-subs-btn-bg-color').' !important';
if ($this->getFieldValue('sgpb-subs-btn-text-color')) {
$submitStyles['color'] = $this->getFieldValue('sgpb-subs-btn-text-color');
if ($this->getFieldValue('sgpb-subs-btn-border-radius')) {
$submitStyles['border-radius'] = AdminHelper::getCSSSafeSize($this->getFieldValue('sgpb-subs-btn-border-radius')).' !important';
if ($this->getFieldValue('sgpb-subs-btn-border-width')) {
$submitStyles['border-width'] = AdminHelper::getCSSSafeSize($this->getFieldValue('sgpb-subs-btn-border-width')).' !important';
if ($this->getFieldValue('sgpb-subs-btn-border-color')) {
$submitStyles['border-color'] = $this->getFieldValue('sgpb-subs-btn-border-color').' !important';
$submitStyles['text-transform'] = 'none !important';
$submitStyles['border-style'] = 'solid';
$formData['email'] = array(
'name' => 'sgpb-subs-email',
'placeholder' => $emailPlaceholder,
'class' => 'js-subs-text-inputs js-subs-email-input',
'data-error-message-class' => 'sgpb-subs-email-error-message'
'errorMessageBoxStyles' => isset($inputStyles["width"]) ?$inputStyles["width"] : ''
$firstNamePlaceholder = $this->getFieldValue('sgpb-subs-first-placeholder');
$firstNameRequired = $this->getOptionValueFromSavedData('sgpb-subs-first-name-required');
$firstNameRequired = (!empty($firstNameRequired)) ? true : false;
$isShow = ($this->getFieldValue('sgpb-subs-first-name-status')) ? true : false;
$formData['first-name'] = array(
'data-required' => $firstNameRequired,
'name' => 'sgpb-subs-first-name',
'placeholder' => $firstNamePlaceholder,
'class' => 'js-subs-text-inputs js-subs-first-name-input',
'data-error-message-class' => 'sgpb-subs-first-name-error-message'
'errorMessageBoxStyles' => isset($inputStyles['width']) ? $inputStyles['width'] : ''
$lastNamePlaceholder = $this->getFieldValue('sgpb-subs-last-placeholder');
$lastNameRequired = $this->getOptionValueFromSavedData('sgpb-subs-last-name-required');
$lastNameRequired = (!empty($lastNameRequired)) ? true : false;
$isShow = ($this->getFieldValue('sgpb-subs-last-name-status')) ? true : false;
$formData['last-name'] = array(
'data-required' => $lastNameRequired,
'name' => 'sgpb-subs-last-name',
'placeholder' => $lastNamePlaceholder,
'class' => 'js-subs-text-inputs js-subs-last-name-input',
'data-error-message-class' => 'sgpb-subs-last-name-error-message'
'errorMessageBoxStyles' => isset($inputStyles['width']) ? $inputStyles['width'] : ''
$gdprLabel = $this->getOptionValueFromSavedData('sgpb-subs-gdpr-label');
$gdprRequired = ($this->getOptionValueFromSavedData('sgpb-subs-gdpr-status')) ? true : false;
$isShow = ($this->getOptionValueFromSavedData('sgpb-subs-gdpr-status')) ? true : false;
$formData['gdpr'] = array(
'type' => 'customCheckbox',
'data-required' => $gdprRequired,
'name' => 'sgpb-subs-gdpr',
'class' => 'js-subs-gdpr-inputs js-subs-gdpr-label',
'id' => 'sgpb-gdpr-field-label',
'data-error-message-class' => 'sgpb-gdpr-error-message'
'style' => array('width' => isset($inputWidth)? $inputWidth :''),
'text' => wp_kses($this->getFieldValue('sgpb-subs-gdpr-text'), AdminHelper::allowed_html_tags(false)),
'errorMessageBoxStyles' => isset($inputStyles['width'])?$inputStyles['width']:''
$hiddenChecker['position'] = 'absolute';
// For protected bots and spams
$hiddenChecker['left'] = '-5000px';
$hiddenChecker['padding'] = '0';
$formData['hidden-checker'] = array(
'data-required' => false,
'name' => 'sgpb-subs-hidden-checker',
'class' => 'js-subs-text-inputs js-subs-last-name-input'
'style' => $hiddenChecker
$submitTitle = $this->getFieldValue('sgpb-subs-btn-title');
$progressTitle = $this->getFieldValue('sgpb-subs-btn-progress-title');
$formData['submit'] = array(
'name' => 'sgpb-subs-submit',
'data-title' => $submitTitle,
'data-progress-title' => $progressTitle,
'class' => 'js-subs-submit-btn'
* Create validation obj for jQuery validate
* @param array $subsFields
* @param array $validationMessages
private function createValidateObj($subsFields, $validationMessages)
$requiredMessage = $this->getOptionValue('sgpb-subs-validation-message');
$emailMessage = $this->getOptionValue('sgpb-subs-invalid-message');
if (empty($subsFields)) {
if (empty($emailMessage)) {
$emailMessage = SGPB_SUBSCRIPTION_EMAIL_MESSAGE;
if (empty($requiredMessage)) {
$requiredMessage = SGPB_SUBSCRIPTION_VALIDATION_MESSAGE;
$messages = 'messages: { ';
$validateObj = 'var sgpbSubsValidateObj'.$id.' = { ';
foreach ($subsFields as $subsField) {
if (empty($subsField['attrs'])) {
$attrs = $subsField['attrs'];
if (!empty($attrs['type'])) {
if (!empty($attrs['name'])) {
if (!empty($attrs['data-required'])) {
$required = $attrs['data-required'];
$rules .= '"'.$name.'": {required: true, email: true},';
$messages .= '"'.$name.'": {
"required": "'.$requiredMessage.'",
"email": "'.$emailMessage.'"
$messages .= '"'.$name.'": "'.$requiredMessage.'",';
$rules .= '"'.$name.'" : "required",';
$rules = rtrim($rules, ',');
$messages = rtrim($messages, ',');
$validateObj .= $messages;
private function getSubscriptionValidationScripts($validateObj)
wp_register_script( 'sgpb-subscriptionpopup-js-footer', '', array("jquery"), SGPB_POPUP_VERSION, true );
wp_enqueue_script( 'sgpb-subscriptionpopup-js-footer' );
wp_add_inline_script( 'sgpb-subscriptionpopup-js-footer', $validateObj);
public function getFormCustomStyles($styleData)
$placeholderColor = $styleData['placeholderColor'];
$formBackgroundColor = $this->getFieldValue('sgpb-subs-form-bg-color');
$formPadding = $this->getFieldValue('sgpb-subs-form-padding');
$formBackgroundOpacity = $this->getFieldValue('sgpb-subs-form-bg-opacity');
$popupId = $this->getId();
if (isset($styleData['formBackgroundOpacity'])) {
$formBackgroundOpacity = $styleData['formBackgroundOpacity'];
if (isset($styleData['formColor'])) {
$formBackgroundColor = $styleData['formColor'];
if (isset($styleData['formPadding'])) {
$formPadding = $styleData['formPadding'];
$formBackgroundColor = AdminHelper::hexToRgba($formBackgroundColor, $formBackgroundOpacity);
.sgpb-subs-form-<?php echo esc_attr($popupId); ?> {background-color: <?php echo esc_html($formBackgroundColor); ?>;padding: <?php echo esc_html($formPadding).'px'; ?>}
.sgpb-subs-form-<?php echo esc_attr($popupId); ?> .js-subs-text-inputs::-webkit-input-placeholder {color: <?php echo esc_html($placeholderColor); ?>;font-weight: lighter;}
.sgpb-subs-form-<?php echo esc_attr($popupId); ?> .js-subs-text-inputs::-moz-placeholder {color:<?php echo esc_html($placeholderColor); ?>;font-weight: lighter;}
.sgpb-subs-form-<?php echo esc_attr($popupId); ?> .js-subs-text-inputs:-ms-input-placeholder {color:<?php echo esc_html($placeholderColor); ?>;font-weight: lighter;} /* ie */
.sgpb-subs-form-<?php echo esc_attr($popupId); ?> .js-subs-text-inputs:-moz-placeholder {color:<?php echo esc_html($placeholderColor); ?>;font-weight: lighter;}
.sgpb-subs-form-<?php echo esc_attr($popupId); ?> input[type="checkbox"] {-webkit-appearance: checkbox;!important}
.sgpb-subs-form-<?php echo esc_attr($popupId); ?> input[type="checkbox"]:before {content: none!important; }
$styles = ob_get_contents();
public function getOptionValue($optionName, $forceDefaultValue = false)
return parent::getOptionValue($optionName, $forceDefaultValue);
public function getPopupTypeOptionsView()
$optionsViewData = array(
'filePath' => SG_POPUP_TYPE_OPTIONS_PATH . 'subscription.php',
'metaboxTitle' => __('Subscription Settings', 'popup-builder'),
'short_description' => 'Create subscription form, customize the fields and styles'
$isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
if ($isSubscriptionPlusActive) {