You are here

function FacetapiAjaxWidgetCheckboxes::buildListItems in Ajax facets 7.3

Same name and namespace in other branches
  1. 7 plugins/facetapi/ajax_widget_checkboxes.inc \FacetapiAjaxWidgetCheckboxes::buildListItems()
  2. 7.2 plugins/facetapi/ajax_widget_checkboxes.inc \FacetapiAjaxWidgetCheckboxes::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().

File

plugins/facetapi/ajax_widget_checkboxes.inc, line 81
The facetapi_links and facetapi_checkbox_links widget plugin classes.

Class

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

Code

function buildListItems($build) {
  $have_active = FALSE;

  // Builds rows.
  $items = [];
  $items_count = count($build);
  $active_items = [];
  foreach ($build as $value => $item) {
    $row = [
      'class' => [],
    ];
    $attributes = [
      'class' => [
        'facet-multiselect-checkbox',
      ],
      'data-facet-value' => $value,
      'data-facet-name' => rawurlencode($this->settings->facet),
      'data-raw-facet-name' => $this->settings->facet,
    ];

    // Mark as disabled if count is 0.
    if ($item['#count'] == 0) {
      $attributes['disabled'] = 'disabled';
      $row['class'][] = 'facetapi-disabled';
    }

    // Respect current selection.
    if (!empty($item['#active'])) {
      $attributes['checked'] = 'checked';
      $have_active = TRUE;
      $active_items[] = $this->key . ':' . $item['#markup'];
      $row['class'][] = 'facetapi-active';
    }

    // Show/hide counts according to the settings.
    if (!empty($this->settings->settings['display_count'])) {
      $item['#markup'] .= ' ' . theme('facetapi_count', [
        'count' => $item['#count'],
      ]);
    }
    $checkbox = [
      '#id' => $this
        ->getAjaxFacetsUuid($value),
      '#name' => rawurlencode($this->key),
      '#type' => 'checkbox',
      '#title' => $item['#markup'],
      '#attributes' => $attributes,
    ];
    $row['data'] = drupal_render($checkbox);
    if ($items_count == 1) {
      $row['class'][] = 'single-leaf';
    }
    if (!empty($item['#item_children'])) {
      if (!empty($item['#active']) || !empty($this->settings->settings['show_expanded'])) {
        $row['class'][] = 'expanded';
        $row['children'] = $this
          ->buildListItems($item['#item_children']);
      }
      else {
        $row['class'][] = 'collapsed';
      }
    }
    $items[] = $row;
  }
  $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());
  }
  $facet_settings = $this->facet
    ->getSettings();
  $this->jsSettings['limit_active_items'] = $facet_settings->settings['limit_active_items'];
  return $items;
}