Exemplo n.º 1
0
 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;
 }