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;
}