You are here

function filter_harmonizer_get_grouped_filter_options in Views Filter Harmonizer 7

Transforms the passed in filter value into the correct grouped filter option.

Parameters

mixed $value: String or array. In the context of this function multiple string values must be separated by |, not spaces.

object $regular_filter: The regular (exposed) filter, which may or may not be grouped.

1 call to filter_harmonizer_get_grouped_filter_options()
filter_harmonizer_convert_contextual_to_regular_value in ./filter_harmonizer.module
Convert a supplied contextual filter value to an equivalent exposed value.

File

./filter_harmonizer.module, line 563
filter_harmonizer.module For Views where both exposed and contextual filters are active on a page.

Code

function filter_harmonizer_get_grouped_filter_options($value, $regular_filter) {
  $group_ids = array();

  // This appears good enough for Grouped filters for now.
  foreach ($regular_filter->options['group_info']['group_items'] as $group_id => $info) {
    if (is_array($info['value'])) {
      if (isset($info['value']['value'])) {
        if (in_array($info['value']['value'], $value)) {
          $group_ids[$group_id] = $group_id;
        }
      }
      elseif (array_intersect(array_keys($info['value']), $value)) {
        $group_ids[$group_id] = $group_id;
      }
    }
    elseif (is_string($value)) {

      // Contextual argument like "holLAND" or "australia|Holland".
      // @todo implement Glossary mode?
      foreach (explode('|', $value) as $text) {
        if (strcasecmp($info['value'], $text) === 0) {
          $group_ids[$group_id] = $group_id;
        }
      }
    }
  }
  return empty($group_ids) ? $value : $group_ids;
}