You are here

function FacetapiAjaxWidgetSelect::buildListItems in Ajax facets 7.3

Same name and namespace in other branches
  1. 7 plugins/facetapi/ajax_widget_select.inc \FacetapiAjaxWidgetSelect::buildListItems()
  2. 7.2 plugins/facetapi/ajax_widget_select.inc \FacetapiAjaxWidgetSelect::buildListItems()

Transforms the render array for use with theme_item_list().

The recursion allows this function to act on the various levels of a hierarchical data set.

Parameters

array $build: The items in the facet's render array being transformed.

Return value

array The "items" parameter for theme_item_list().

1 call to FacetapiAjaxWidgetSelect::buildListItems()
FacetapiAjaxWidgetSelect::execute in plugins/facetapi/ajax_widget_select.inc
Implements FacetapiWidget::execute().

File

plugins/facetapi/ajax_widget_select.inc, line 54
The facetapi_links and facetapi_checkbox_links widget plugin classes.

Class

FacetapiAjaxWidgetSelect
Widget that renders facets as a list of clickable links.

Code

function buildListItems($build, $level = 0) {
  $settings = $this->settings->settings;

  // Builds rows.
  $items = [
    '#disabled_items' => [],
  ];

  // Add default item only once.
  if ($level == 0) {
    $label = $settings['ajax_select_default_option_label'];

    // Translate through i18n if it's possible.
    if (function_exists('i18n_string_translate')) {
      $label = i18n_string_translate([
        'ajax_facets',
        'facet_label',
        str_replace(':', '_', $this->key),
        'label',
      ], $label);
    }
    $items['values']['_none'] = $label;
  }
  $prefix = str_repeat('-', $level);
  $level++;
  $active_items = [];
  $have_active = FALSE;
  foreach ($build as $value => $item) {

    // Respect current selection.
    if (!empty($item['#active'])) {
      $items['active_value'] = $value;
      $have_active = TRUE;
      $active_items[] = $this->key . ':' . $item['#markup'];
    }
    $items['values'][$item['#indexed_value']] = $prefix . $item['#markup'];

    // Mark as disabled if count is 0.
    if ($item['#count'] == 0) {
      $items['#disabled_items'][$item['#indexed_value']] = TRUE;
    }

    // Show/hide counts according to the settings.
    if (!empty($this->settings->settings['display_count'])) {
      $items['values'][$item['#indexed_value']] .= ' ' . theme('facetapi_count', [
        'count' => $item['#count'],
      ]);
    }
    if (!empty($item['#item_children'])) {
      $childrens = $this
        ->buildListItems($item['#item_children'], $level);
      if (!empty($childrens['active_value'])) {
        $items['active_value'] = $childrens['active_value'];
      }
      $items['values'] = $items['values'] + $childrens['values'];
    }
  }
  $this->jsSettings['haveActiveSelection'] = $this->settings->settings['have_active_selection'] = $have_active;
  sort($active_items);
  $this->jsSettings['activeItems'] = $active_items;

  // Generate reset path on server side to make possible to use aliases.
  if ($have_active) {
    $this->jsSettings['resetPath'] = ajax_facets_facet_build_reset_path($this->facet
      ->getFacet(), $this->facet
      ->getAdapter());
  }
  return $items;
}