: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
use \SGPBConfigDataHelper;
public function __construct()
public function setPostData($postData)
$this->postData = $postData;
public function getPostData()
* Return ajax param form post data by key
public function getValueFromPost($key)
$postData = $this->getPostData();
if(!empty($postData[$key])) {
$value = $postData[$key];
public function actions()
add_action('wp_ajax_sgpb_send_to_open_counter', array($this, 'addToCounter'));
add_action('wp_ajax_nopriv_sgpb_send_to_open_counter', array($this, 'addToCounter'));
add_action('wp_ajax_sgpb_process_after_submission', array($this, 'sgpbSubsciptionFormSubmittedAction'));
add_action('wp_ajax_nopriv_sgpb_process_after_submission', array($this, 'sgpbSubsciptionFormSubmittedAction'));
add_action('wp_ajax_sgpb_subscription_submission', array($this, 'subscriptionSubmission'));
add_action('wp_ajax_nopriv_sgpb_subscription_submission', array($this, 'subscriptionSubmission'));
$allowToAction = AdminHelper::userCanAccessTo();
add_action('wp_ajax_add_condition_group_row', array($this, 'addConditionGroupRow'));
add_action('wp_ajax_add_condition_rule_row', array($this, 'addConditionRuleRow'));
add_action('wp_ajax_change_condition_rule_row', array($this, 'changeConditionRuleRow'));
add_action('wp_ajax_select2_search_data', array($this, 'select2SearchData'));
add_action('wp_ajax_change_popup_status', array($this, 'changePopupStatus'));
add_action('wp_ajax_check_same_origin', array($this, 'checkSameOrigin'));
add_action('wp_ajax_sgpb_subscribers_delete', array($this, 'deleteSubscribers'));
add_action('wp_ajax_sgpb_add_subscribers', array($this, 'addSubscribers'));
add_action('wp_ajax_sgpb_import_subscribers', array($this, 'importSubscribers'));
add_action('wp_ajax_sgpb_import_settings', array($this, 'importSettings'));
add_action('wp_ajax_sgpb_save_imported_subscribers', array($this, 'saveImportedSubscribers'));
add_action('wp_ajax_sgpb_send_newsletter', array($this, 'sendNewsletter'));
add_action('wp_ajax_sgpb_change_review_popup_show_period', array($this, 'changeReviewPopupPeriod'));
add_action('wp_ajax_sgpb_dont_show_review_popup', array($this, 'dontShowReviewPopup'));
add_action('wp_ajax_sgpb_close_banner', array($this, 'closeMainRateUsBanner'));
add_action('wp_ajax_sgpb_close_license_notice', array($this, 'closeLicenseNoticeBanner'));
add_action('wp_ajax_sgpb_hide_ask_review_popup', array($this, 'dontShowAskReviewBanner'));
add_action('wp_ajax_sgpb_reset_popup_opening_count', array($this, 'resetPopupOpeningCount'));
/*Extension notification panel*/
add_action('wp_ajax_sgpb_dont_show_extension_panel', array($this, 'extensionNotificationPanel'));
add_action('wp_ajax_sgpb_dont_show_problem_alert', array($this, 'dontShowProblemAlert'));
add_action('wp_ajax_sgpb_autosave', array($this, 'sgpbAutosave'));
public function sgpbAutosave()
$allowToAction = AdminHelper::userCanAccessTo();
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
if (!isset($_POST['post_ID'])){
$popupId = (int)sanitize_text_field($_POST['post_ID']);
$postStatus = get_post_status($popupId);
if($postStatus == 'publish') {
if(!isset($_POST['allPopupData'])) {
// we will use array_walk_recursive method for sanitizing current data because we can receive an multidimensional array!
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$allPopupData = $_POST['allPopupData']; //
array_walk_recursive($allPopupData, function(&$item){
$item = sanitize_text_field($item);
$popupData = SGPopup::parsePopupDataFromData($allPopupData);
do_action('save_post_popupbuilder');
$popupType = $popupData['sgpb-type'];
$popupClassName = SGPopup::getPopupClassNameFormType($popupType);
$popupClassPath = SGPopup::getPopupTypeClassPath($popupType);
if(file_exists($popupClassPath.$popupClassName.'.php')) {
require_once($popupClassPath.$popupClassName.'.php');
$popupClassName = __NAMESPACE__.'\\'.$popupClassName;
$popupClassName::create($popupData, '_preview', 1);
public function dontShowReviewPopup()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
update_option('SGPBCloseReviewPopup-notification', true);
do_action('sgpbGetNotifications');
public function changeReviewPopupPeriod()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
$messageType = isset($_POST['messageType']) ? sanitize_text_field($_POST['messageType']) : '';
if($messageType == 'count') {
$maxPopupCount = get_option('SGPBMaxOpenCount');
$maxPopupCount = SGPB_ASK_REVIEW_POPUP_COUNT;
$maxPopupData = AdminHelper::getMaxOpenPopupId();
if(!empty($maxPopupData['maxCount'])) {
$maxPopupCount = $maxPopupData['maxCount'];
$maxPopupCount += SGPB_ASK_REVIEW_POPUP_COUNT;
update_option('SGPBMaxOpenCount', $maxPopupCount);
$popupTimeZone = get_option('timezone_string');
$popupTimeZone = SG_POPUP_DEFAULT_TIME_ZONE;
$timeDate = new \DateTime('now', new \DateTimeZone($popupTimeZone));
$timeDate->modify('+'.SGPB_REVIEW_POPUP_PERIOD.' day');
$timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
update_option('SGPBOpenNextTime', $timeNow);
$usageDays = get_option('SGPBUsageDays');
$usageDays += SGPB_REVIEW_POPUP_PERIOD;
update_option('SGPBUsageDays', $usageDays);
public function resetPopupOpeningCount()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
if (!isset($_POST['popupId'])){
$tableName = $wpdb->prefix.'sgpb_analytics';
$popupId = (int)sanitize_text_field($_POST['popupId']);
$allPopupsCount = get_option('SgpbCounter');
if($wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName) {
SGPopup::deleteAnalyticsDataByPopupId($popupId);
if(empty($allPopupsCount)) {
// TODO ASAP remove echo use only wp_die
echo esc_html(SGPB_AJAX_STATUS_FALSE);
if(isset($allPopupsCount[$popupId])) {
$allPopupsCount[$popupId] = 0;
$popupAnalyticsData = $wpdb->get_var( $wpdb->prepare(' DELETE FROM '.$wpdb->prefix.'sgpb_analytics WHERE target_id = %d AND event_id NOT IN (7, 12, 13)', $popupId));
update_option('SgpbCounter', $allPopupsCount);
public function dontShowAskReviewBanner()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
update_option('sgpbDontShowAskReviewBanner', 1);
echo esc_html(SGPB_AJAX_STATUS_TRUE);
public function dontShowProblemAlert()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
update_option('sgpb_alert_problems', 1);
echo esc_html(SGPB_AJAX_STATUS_TRUE);
public function extensionNotificationPanel()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
update_option('sgpb_extensions_updated', 1);
echo esc_html(SGPB_AJAX_STATUS_TRUE);
public function closeMainRateUsBanner()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
update_option('sgpb-hide-support-banner', 1);
do_action('sgpbGetNotifications');
public function closeLicenseNoticeBanner()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
update_option('sgpb-hide-license-notice-banner', 1);
public function addToCounter()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
if(isset($_GET['sg_popup_preview_id']) && !isset($_POST['params'])) {
// we will use array_walk_recursive method for sanitizing current data because we can receive an multidimensional array!
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$popupParams = $_POST['params'];
/* Sanitizing multidimensional array */
array_walk_recursive($popupParams, function(&$item){
$item = sanitize_text_field($item);
$popupsIdCollection = is_array($popupParams['popupsIdCollection']) ? $popupParams['popupsIdCollection'] : array();
$popupsCounterData = get_option('SgpbCounter');
if($popupsCounterData === false) {
$popupsCounterData = array();
foreach($popupsIdCollection as $popupId => $popupCount) {
if(empty($popupsCounterData[$popupId])) {
$popupsCounterData[$popupId] = 0;
$popupsCounterData[$popupId] += $popupCount;
update_option('SgpbCounter', $popupsCounterData);
public function deleteSubscribers()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
if (empty($_POST['subscribersId'])){
$subscribersId = array_map('sanitize_text_field', $_POST['subscribersId']);
foreach($subscribersId as $subscriberId) {
$table_sgpb_subscribers = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
$wpdb->query( $wpdb->prepare("DELETE FROM $table_sgpb_subscribers WHERE id = %d", $subscriberId) );
public function addSubscribers()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
$status = SGPB_AJAX_STATUS_FALSE;
$firstName = isset($_POST['firstName']) ? sanitize_text_field($_POST['firstName']) : '';
$lastName = isset($_POST['lastName']) ? sanitize_text_field($_POST['lastName']) : '';
$email = isset($_POST['email']) ? sanitize_text_field($_POST['email']) : '';
// we will use array_walk_recursive method for sanitizing current data because we can receive an multidimensional array!
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$subscriptionPopupsId = !empty($_POST['popups']) ? $_POST['popups'] : [];
array_walk_recursive($subscriptionPopupsId, function(&$item){
$item = sanitize_text_field($item);
$table_sgpb_subscribers = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
foreach($subscriptionPopupsId as $subscriptionPopupId) {
$res = $wpdb->get_row( $wpdb->prepare("SELECT id FROM $table_sgpb_subscribers WHERE email = %s AND subscriptionType = %d", $email, $subscriptionPopupId), ARRAY_A);
$res = $wpdb->query( $wpdb->prepare("INSERT INTO $table_sgpb_subscribers (firstName, lastName, email, cDate, subscriptionType) VALUES (%s, %s, %s, %s, %d) ", $firstName, $lastName, $email, $date, $subscriptionPopupId) );
$wpdb->query( $wpdb->prepare("UPDATE $table_sgpb_subscribers SET firstName = %s, lastName = %s, email = %s, cDate = %s, subscriptionType = %d, unsubscribered = 0 WHERE id = %d", $firstName, $lastName, $email, $date, $subscriptionPopupId, $res['id']) );
$status = SGPB_AJAX_STATUS_TRUE;
public function importSubscribers()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
$formId = isset($_POST['popupSubscriptionList']) ? (int)sanitize_text_field($_POST['popupSubscriptionList']) : '';
$fileURL = isset($_POST['importListURL']) ? sanitize_text_field($_POST['importListURL']) : '';
require_once SG_POPUP_VIEWS_PATH.'importConfigView.php';
$content = ob_get_contents();
echo wp_kses($content, AdminHelper::allowed_html_tags());
public function importSettings()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
require_once SG_POPUP_VIEWS_PATH.'importPopupsView.php';
$content = ob_get_contents();
echo wp_kses($content, AdminHelper::allowed_html_tags());
public function saveImportedSubscribers()
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action
if ( ! current_user_can( 'manage_options' ) ) {
wp_die(esc_html__('You do not have permission to do this action!', 'popup-builder'));
@ini_set('auto_detect_line_endings', '1');
$formId = isset($_POST['popupSubscriptionList']) ? (int)sanitize_text_field($_POST['popupSubscriptionList']) : '';
$fileURL = isset($_POST['importListURL']) ? sanitize_text_field($_POST['importListURL']) : '';
// we will use array_walk_recursive method for sanitizing current data because we can receive an multidimensional array!
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$mapping = !empty($_POST['namesMapping']) ? $_POST['namesMapping'] : [];
array_walk_recursive($mapping, function(&$item){
$item = sanitize_text_field($item);
$fileContent = AdminHelper::getFileFromURL($fileURL);
$csvFileArray = array_map('str_getcsv', file($fileURL));
$header = $csvFileArray[0];
$subscriptionPlusContent = apply_filters('sgpbImportToSubscriptionList', $csvFileArray, $mapping, $formId);
// -1 it's mean saved from Subscription Plus
if($subscriptionPlusContent != -1) {
$subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
foreach($csvFileArray as $csvData) {
$result_check = $wpdb->query( $wpdb->prepare("SELECT submittedData FROM $subscribersTableName") );
if(!empty($mapping['date'])) {
$date = $csvData[$mapping['date']];
$date = gmdate('Y-m-d', strtotime($date));
$wpdb->query( $wpdb->prepare("INSERT INTO $subscribersTableName (firstName, lastName, email, cDate, subscriptionType, status, unsubscribed) VALUES (%s, %s, %s, %s, %d, %d, %d) ", $csvData[$mapping['firstName']], $csvData[$mapping['lastName']], $csvData[$mapping['email']], $date, $formId, 0, 0) );
$wpdb->query( $wpdb->prepare("INSERT INTO $subscribersTableName (firstName, lastName, email, cDate, subscriptionType, status, unsubscribed, submittedData) VALUES (%s, %s, %s, %s, %d, %d, %d, %s) ", $csvData[$mapping['firstName']], $csvData[$mapping['lastName']], $csvData[$mapping['email']], $csvData[$mapping['date']], $formId, 0, 0, '') );
//Fix the vulnerable to Sensitive Information Exposure
// Get the attachment ID from the URL.
$csv_attachment_id = attachment_url_to_postid( $fileURL );
// Check if an attachment ID was found.
if ($csv_attachment_id) {
// Check if the attachment exists.
if (get_post_type($csv_attachment_id) === 'attachment') {
// Delete the attachment and the file.
wp_delete_attachment($csv_attachment_id, true);
echo esc_html(SGPB_AJAX_STATUS_TRUE);
public function sendNewsletter()
$allowToAction = AdminHelper::userCanAccessTo();
wp_redirect(get_home_url());
check_ajax_referer(SG_AJAX_NONCE, 'nonce');
* We only allow administrator to do this action