| Server IP : 104.21.74.147 / Your IP : 216.73.217.154 Web Server : nginx/1.24.0 System : Linux wordpress-sites 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 User : www-data ( 33) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/rebeccaone.com/wp-content/plugins/cornerstone/includes/classes/Services/ |
Upload File : |
<?php
namespace Themeco\Cornerstone\Services;
use Themeco\Cornerstone\Util\ConditionRules;
class RuleMatching implements Service {
public function normalizeRuleSet( $rule_sets ) {
$groups = [];
$index = 0;
// Usually sent Dynamic Content
if (is_string($rule_sets)) {
$rule_sets = cs_maybe_json_decode(cs_dynamic_content($rule_sets, false));
}
if (!is_array($rule_sets)) {
trigger_error('This is not a valid rule set array.');
return [];
}
foreach ($rule_sets as $set) {
if ( isset( $set['group'] ) && $set['group'] ) {
$index++;
}
if ( ! isset( $groups[$index] ) ) {
$groups[$index] = [];
}
$groups[$index][] = [
$set['condition'],
$set['value'],
isset( $set['toggle'] ) ? ! $set['toggle'] : null,
isset( $set['operator'] ) ? $set['operator'] : null,
isset( $set['operand'] ) ? $set['operand'] : null
];
}
return array_values($groups);
}
public function evaluate( $rule ) {
list($type, $value, $invert, $operator, $operand) = $rule;
$invert = empty( $invert) ? false : $invert;
$operator = empty( $operator) ? null : $operator;
$parts = explode( '|', $type );
$handler = array_shift( $parts );
$rule_name = str_replace(':', '_', str_replace('-', '_', $handler ) );
if ( $operator ) $rule_name .= '_' . str_replace('-', '_', $operator );
$base_args = is_null( $operand ) ? [ $value ] : [ $operand, $value ];
$args = empty( $parts ) ? $base_args : array_merge( $parts, $base_args);
$method = [ ConditionRules::class, $rule_name ];
$is_callable = is_callable( $method );
if ( ! has_filter( 'cs_condition_rule_' . $rule_name ) && ! $is_callable ) {
trigger_error("No rule matching function for $rule_name ", E_USER_WARNING );
return false;
}
$args = apply_filters('cs_condition_args', $args);
$result = apply_filters('cs_condition_rule_' . $rule_name, $is_callable ? call_user_func_array( $method, $args ) : false, $args);
return $invert && ! $operator ? ! $result : $result;
}
// A group matches if all of its rules are true
public function matchRuleGroup( $rule_group ) {
foreach ($rule_group as $rule) {
if ( ! $this->evaluate($rule) ) {
return false;
}
}
return true;
}
// A set matches if any of its groups are true
public function match( $rule_sets ) {
$groups = $this->normalizeRuleSet( $rule_sets );
foreach ($groups as $group) {
if ( $this->matchRuleGroup( $group ) ) {
return true;
};
}
return false;
}
public function shouldHideElement( $data ) {
// Force filter hide
if (apply_filters('cs_element_should_hide', false, $data)) {
return true;
}
// Classic Columns
if ( isset( $data['_active'] ) && $data['_active'] === false) {
return true;
}
if ( ! isset($data['show_condition']) || ! $data['show_condition'] ) {
return false;
}
// Disable element conditions in the preview
if ( apply_filters( 'cs_preview_disable_element_conditions', false ) ) {
return false;
}
return ! $this->match( $data['show_condition'] );
}
}