: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
public function __construct($targetData)
if (!empty($targetData)) {
$this->setConditionsObj($targetData);
//When there is not group set groupId -1
private $prevGroupId = -1;
public function setPrevGroupId($prevGroupId)
$this->prevGroupId = $prevGroupId;
public function getPrevGroupId()
return $this->prevGroupId;
public function setConditionsObj($conditionsObj)
$this->conditionsObj = $conditionsObj;
public function getConditionsObj()
return $this->conditionsObj;
$conditionsObj = $this->getConditionsObj();
if (empty($conditionsObj)) {
foreach ($conditionsObj as $conditionObj) {
$currentGroupId = $conditionObj->getGroupId();
$prevGroupId = $this->getPrevGroupId();
if ($currentGroupId > $prevGroupId) {
if ($currentGroupId != 0) {
$closePrevGroupDiv = '</div>';
$separator = ConditionCreator::getOrRuleSeparator();
$openGroupDiv = '<div class="sgpb-wrapper sgpb-box-'.$conditionObj->getConditionName().' sg-target-group sg-target-group-'.$conditionObj->getGroupId().'" data-group-id="'.$currentGroupId.'">';
$view .= $closePrevGroupDiv;
$view .= ConditionCreator::createConditionRuleRow($conditionObj);
$this->setPrevGroupId($currentGroupId);
public static function getOrRuleSeparator()
return '<h4 class="sgpb-rules-or"><span>'.__('OR', 'popup-builder').'</span></h4>';
public static function createConditionRuleRow($conditionDataObj)
<div class="events form sg-target-rule sgpb-margin-bottom-40 sg-target-rule-<?php echo esc_attr($conditionDataObj->getRuleId()); ?> sgpb-event-row" data-rule-id="<?php echo esc_attr($conditionDataObj->getRuleId()); ?>">
<div class="formItem sgpb-align-item-start">
$savedData = $conditionDataObj->getSavedData();
if (!isset($savedData['value'])) {
$savedData['value'] = '';
<?php $idHiddenDiv = $conditionDataObj->getConditionName().'_'.$conditionDataObj->getGroupId().'_'.$conditionDataObj->getRuleId();?>
<?php foreach ($savedData as $conditionName => $conditionSavedData): ?>
$showRowStatusClass = '';
$hideStatus = self::getParamRowHideStatus($conditionDataObj, $conditionName);
$ruleElementData = self::getRuleElementData($conditionDataObj, 'param');
$ruleSavedData = $ruleElementData['saved'];
$currentArgs = array('savedData' => $ruleSavedData, 'conditionName' => $conditionName);
if (!self::allowToShowOperatorColumn($conditionDataObj, $currentArgs)) {
$showRowStatusClass = ($hideStatus) ? 'sgpb-hide-condition-row' : $showRowStatusClass;
<?php if ($conditionName != 'hiddenOption'): ?>
<div data-condition-name="<?php echo esc_attr($conditionName);?>" class="<?php echo esc_attr('inputBlock sg-condition-'.$conditionName.'-wrapper'.' '.$showRowStatusClass); ?>">
echo wp_kses(self::createConditionElement($conditionDataObj, $conditionName), AdminHelper::allowed_html_tags());
<?php if (($conditionName == 'hiddenOption')): ?>
<?php $hiddenContent = self::getHiddenDataContent($conditionDataObj); ?>
<div class="sgpb-hide-condition-row"><div id="<?php echo esc_attr($idHiddenDiv);?>"><?php echo wp_kses($hiddenContent, AdminHelper::allowed_html_tags()); ?></div></div>
<?php echo wp_kses(self::createConditionOperators($conditionDataObj, $idHiddenDiv), AdminHelper::allowed_html_tags()); ?>
$targetOptionRow = ob_get_contents();
private static function allowToShowOperatorColumn($conditionDataObj, $currentArgs = array())
global $SGPB_DATA_CONFIG_ARRAY;
$conditionName = $conditionDataObj->getConditionName();
$conditionData = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
$operatorAllowInConditions = array();
if (!empty($conditionData['operatorAllowInConditions'])) {
$operatorAllowInConditions = $conditionData['operatorAllowInConditions'];
$savedData = $conditionDataObj->getSavedData();
if ($currentArgs['conditionName'] == 'operator') {
$currentSavedData = $currentArgs['savedData'];
if (($currentSavedData == 'not_rule' || $currentSavedData == 'select_role' || $currentSavedData == 'select_event')) {
// unset old customOperator
$SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['customOperator'] = '';
if (is_array($operatorAllowInConditions)) {
if (in_array($savedData['param'], $operatorAllowInConditions)) {
if (!empty($conditionData['paramsData'][$savedData['param'].'Operator'])) {
$operator = $conditionData['paramsData'][$savedData['param'].'Operator'];
$SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['customOperator'] = $operator;
// there is no need to show is/is not column for not specific conditions (everywhere, all posts/pages/other_custom_post_types)
if (isset($savedData['param']) && !is_array($savedData['param']) && (strpos($savedData['param'], '_all') || $savedData['param'] == 'everywhere' || $savedData['param'] == 'post_tags')) {
if (!empty($savedData['tempParam']) && in_array($savedData['tempParam'], $operatorAllowInConditions)) {
$SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['operator'] = $conditionData['paramsData'][$savedData['tempParam'].'Operator'];
if (empty($SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['operator'])) {
public static function createConditionOperators($conditionDataObj, $idHiddenDiv = '')
global $SGPB_DATA_CONFIG_ARRAY;
$groupId = $conditionDataObj->getRuleId();
$groupTotal = $conditionDataObj->getGroupTotal();
$conditionName = $conditionDataObj->getConditionName();
$conditionData = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
$eventsData = $SGPB_DATA_CONFIG_ARRAY['events'];
$operatorsData = $conditionData['operators'];
$eventButtonClasses = '';
$eventButtonWrapperClass = '';
if (empty($operatorsData)) {
foreach ($operatorsData as $operator) {
$identificatorClass = '';
if (!isset($eventsData['hiddenOptionData'])) {
$saveData = $conditionDataObj->getSavedData();
if (empty($saveData['hiddenOption']) && $operator['name'] == 'Edit' && $saveData["param"] != 'load') {
if ($operator['name'] == 'Edit') {
$operator['name'] = 'Settings';
if ($operator['operator'] == 'edit') {
$btnClass = ' icons_gray';
$identificatorClass = $idHiddenDiv;
$eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
if ($operator['operator'] == 'add') {
$btnClass = ' icons_blue';
$eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
//Don't show add button if it's not for last element
if ($groupId < $groupTotal) {
$style = 'style="display: none;"';
if ($operator['operator'] == 'delete') {
$btnClass = ' icons_pink';
$eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
$element = '<i class="sgpb-icons '.$btnClass.'" data-id="'.$identificatorClass.'">'.$icon.'</i>';
$operatorsHtml .= '<div class="'.$eventButtonClasses.' sgpb-rules-'.$operator['operator'].'-button-wrapper" '.$style.'>';
$operatorsHtml .= $element;
$operatorsHtml .= '</div>';
public static function createConditionElement($conditionDataObj, $ruleName)
//more code added because of the lack of abstraction
//todo: remove ASAP if possible
$sData = $conditionDataObj->getSavedData();
if ($ruleName == 'param' && !empty($sData['tempParam'])) {
$sData['param'] = $sData['tempParam'];
$newObj = clone $conditionDataObj;
$newObj->setSavedData($sData);
$conditionDataObj = $newObj;
$ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
$elementHeader = self::createRuleHeader($ruleElementData);
$field = self::createRuleField($ruleElementData);
$element .= $elementHeader;
public static function createConditionField($conditionDataObj, $ruleName)
$ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
return self::createRuleField($ruleElementData);
public static function createConditionFieldHeader($conditionDataObj, $ruleName)
$ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
return self::createRuleHeader($ruleElementData);
public static function optionLabelSupplement($conditionDataObj, $ruleName)
global $SGPB_DATA_CONFIG_ARRAY;
$conditionName = $conditionDataObj->getConditionName();
$conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
$attrs = $conditionConfig['attrs'][$ruleName];
if (isset($attrs['infoAttrs']['rightLabel'])) {
$labelData = $attrs['infoAttrs']['rightLabel'];
$value = $labelData['value'];
$classes = $labelData['classes'];
return '<span class="'.esc_attr($classes).'">'.$value.'</span>';
private static function getRuleElementData($conditionDataObj, $ruleName = '')
global $SGPB_DATA_CONFIG_ARRAY;
$ruleElementData = array();
$conditionName = $conditionDataObj->getConditionName();
$saveData = $conditionDataObj->getSavedData();
$conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
$rulesType = $conditionConfig['columnTypes'];
$paramsData = $conditionConfig['paramsData'];
$attrs = $conditionConfig['attrs'];
if (!empty($saveData[$ruleName])) {
$savedParam = $saveData[$ruleName];
else if (!empty($saveData['hiddenOption']) && isset($saveData['hiddenOption'][$ruleName])) {
$savedParam = $saveData['hiddenOption'][$ruleName];
$ruleElementData['ruleName'] = $ruleName;
if ($ruleName == 'value' && !empty($saveData[$conditionDataObj->getTakeValueFrom()])) {
$index = $conditionDataObj->getTakeValueFrom();
$ruleName = $saveData[$index];
if (!empty($rulesType[$ruleName])) {
$type = $rulesType[$ruleName];
if (!empty($paramsData[$ruleName])) {
$data = $paramsData[$ruleName];
// if exists customOperator it takes the custom one
if ($ruleName == 'operator' && !empty($paramsData['customOperator'])) {
$data = $paramsData['customOperator'];
if (!empty($attrs[$ruleName])) {
$optionAttr = $attrs[$ruleName];
if (!empty($optionAttr['htmlAttrs'])) {
$attr = $optionAttr['htmlAttrs'];
$ruleElementData['type'] = $type;
$ruleElementData['data'] = apply_filters('sgpb'.$ruleName.'ConditionCreator', $data, $saveData);
$ruleElementData['saved'] = $savedParam;
$ruleElementData['attr'] = $attr;
$ruleElementData['conditionDataObj'] = $conditionDataObj;
private static function createRuleHeader($ruleElementData)
return self::createElementHeader($ruleElementData);
private static function isAssociativeArrayOrEmptyString($args)
if (gettype($args) === 'string') return true;
if (array() === $args) return false;
return array_keys($args) !== range(0, count($args) - 1);
public static function createRuleField($ruleElementData)
$type = $ruleElementData['type'];
$conditionObj = $ruleElementData['conditionDataObj'];
$name = 'sgpb-'.$conditionObj->getConditionName().'['.$conditionObj->getGroupId().']['.$conditionObj->getRuleId().']['.$ruleElementData['ruleName'].']';
if (is_array($ruleElementData['attr'])) {
$attr += $ruleElementData['attr'];
$attr['data-rule-id'] = $conditionObj->getRuleId();
if (!empty($attr['multiple'])) {
$savedData = $ruleElementData['saved'];
if (empty($ruleElementData['data'])) {
// this check is for current version update!
// the old value was a simple array!
// after update we need to convert them all to a associative array
// this check will resolve UI issues and also prevent bugs after update-ing the existing popup
// this change is for post_category and post_tags!
if (self::isAssociativeArrayOrEmptyString($ruleElementData['saved'])){
$ruleElementData['data'] = $ruleElementData['saved'];
if (!empty($ruleElementData['saved'])) {
$savedData = array_keys($ruleElementData['saved']);
$ruleElementData['data'] = $ruleElementData['saved'];
if (!empty($ruleElementData['saved'])) {
if (isset($attr['isPostCategory'])){
$ruleElementData['data'] = \SGPBConfigDataHelper::getTermsByIds($ruleElementData['saved']);
} elseif(isset($attr['isPostTag'])) {
$ruleElementData['data'] = \SGPBConfigDataHelper::getTagsByIds($ruleElementData['saved']);
$savedData = $ruleElementData['saved'];
$rowField .= AdminHelper::createSelectBox($ruleElementData['data'], $savedData, $attr);
//this is done to override the initial input value
if (!empty($ruleElementData['saved'])) {
$attr['value'] = esc_attr($ruleElementData['saved']);
$rowField .= AdminHelper::createInput($ruleElementData['data'], $ruleElementData['saved'], $attr);
$rowField .= AdminHelper::createCheckBox($ruleElementData['data'], $ruleElementData['saved'], $attr);
$popupId = self::getPopupId($conditionObj);
$attr['value'] = $attr['value'].$popupId;
$rowField .= AdminHelper::createInput($ruleElementData['data'], $ruleElementData['saved'].$popupId, $attr);
$rowField .= '<div class="sgpb-show-alert-before-save">'.$attr['beforeSaveLabel'].'</div>';
public static function getPopupId($conditionObj)
$conditionPopupId = $conditionObj->getPopupId();
if (!empty($conditionPopupId)) {
$popupId = $conditionObj->getPopupId();
else if(!empty($_GET['post'])) {
$popupId = sanitize_text_field($_GET['post']);
public static function createElementHeader($ruleElementData)
$conditionObj = $ruleElementData['conditionDataObj'];
$conditionName = $conditionObj->getConditionName();
$ruleName = $ruleElementData['ruleName'];
global $SGPB_DATA_CONFIG_ARRAY;
$conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
$conditionAttrs = $conditionConfig['attrs'];
$saveData = $conditionObj->getSavedData();
$optionTitle = $ruleName;
if ($ruleName == 'value' && !empty($saveData[$conditionObj->getTakeValueFrom()])) {
$titleKey = $saveData[$conditionObj->getTakeValueFrom()];
if (!empty($conditionAttrs[$titleKey])) {
$optionAttrs = $conditionAttrs[$titleKey];
if (!empty($optionAttrs['infoAttrs'])) {
// $conditionName => events, conditions, targets...
// $ruleName => param, operator, value (1-st, 2-nd, 3-rd columns)
$optionAttrs = apply_filters('sgpb'.$conditionName.$ruleName.'Param', $optionAttrs, $saveData);
$optionTitle = $optionAttrs['infoAttrs']['label'];
if (!empty($optionAttrs['infoAttrs']['labelAttrs'])) {
$labelAttributes = AdminHelper::createAttrs($optionAttrs['infoAttrs']['labelAttrs']);