public function is_control_visible($control, $values = null) { if (null === $values) { $values = $this->get_settings(); } // Repeater fields if (!empty($control['conditions'])) { return Conditions::check($control['conditions'], $values); } if (empty($control['condition'])) { return true; } foreach ($control['condition'] as $condition_key => $condition_value) { preg_match('/([a-z_0-9]+)(?:\\[([a-z_]+)])?(!?)$/i', $condition_key, $condition_key_parts); $pure_condition_key = $condition_key_parts[1]; $condition_sub_key = $condition_key_parts[2]; $is_negative_condition = !!$condition_key_parts[3]; $instance_value = $values[$pure_condition_key]; if (null === $instance_value) { return false; } if ($condition_sub_key) { if (!isset($instance_value[$condition_sub_key])) { return false; } $instance_value = $instance_value[$condition_sub_key]; } $is_contains = is_array($condition_value) ? in_array($instance_value, $condition_value) : $instance_value === $condition_value; if ($is_negative_condition && $is_contains || !$is_negative_condition && !$is_contains) { return false; } } return true; }