You are here

function search_api_ranges_generate_ranges_advanced in Search API ranges 7

2 calls to search_api_ranges_generate_ranges_advanced()
SearchApiRangesWidgetLinks::execute in plugins/facetapi/widget_links.inc
Renders the links.
SearchApiRangesWidgetSelect::execute in plugins/facetapi/widget_select.inc
Renders the links.

File

./search_api_ranges.module, line 538
Performs min/max queries through Search API and provides UI Slider display widget for Facet API

Code

function search_api_ranges_generate_ranges_advanced($variables, $steps) {
  $element = $variables['element'];

  // Calculate the min and max of the ranges.
  $values = array();
  foreach ($element as $key => $value) {

    // Exclude values that don't belong to ranges list
    if (is_numeric($key)) {
      $values[] = $key;
    }
  }
  sort($values, SORT_NUMERIC);
  $min_all = $values[0];
  $max_all = $values[count($values) - 1];
  $adv_ranges = _search_api_ranges_parse_advanced_range_settings($steps);
  $tmp_ranges = array();
  $ret_ranges = array();
  if (count($adv_ranges)) {
    foreach ($adv_ranges as $range) {
      if (substr_count($range['value'], '-') == 1) {
        $maxmin = explode("-", $range['value']);
        $min = trim($maxmin[0]);
        $max = trim($maxmin[1]);
        if (strlen($min) == 0) {
          $min = $min_all;
        }
        if (strlen($max) == 0) {
          $max = $max_all;
        }
        $tmp_ranges[] = array(
          'min' => $min,
          'max' => $max,
          'label' => $range['label'],
        );
      }
    }
  }
  if (count($tmp_ranges)) {
    $params = drupal_get_query_parameters($_GET, array(
      'q',
      'page',
    ));
    $range_step = 0;
    foreach ($tmp_ranges as $tmp_range_id => $tmp_range) {
      $min = $tmp_range['min'];
      $max = $tmp_range['max'];
      $label = $tmp_range['label'];
      $result_count = 0;
      foreach ($values as $val) {
        if ($max != SEARCH_API_RANGES_ENDPOINT_INFINITE && $val > $max) {
          break;
        }
        elseif ($min != SEARCH_API_RANGES_ENDPOINT_INFINITE && $val < $min) {
          continue;
        }
        $result_count += $element[$val]['#count'];
      }
      if ($result_count) {
        $ret_ranges[$min . ' - ' . $max] = _search_api_generate_range($min, $max, $result_count, $variables, $params, $label);
      }
    }
  }
  return $ret_ranges;
}