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