You are here

function ajax_facets_process_facet_blocks in Ajax facets 7.2

Same name and namespace in other branches
  1. 7.3 ajax_facets.module \ajax_facets_process_facet_blocks()
  2. 7 ajax_facets.module \ajax_facets_process_facet_blocks()

Generates an array of facet block data for a given searcher and realm

Parameters

string $searcher: The machine name of the searcher.

string $realm_name: The machine name of the realm

Return value

array An array of facet block data

2 calls to ajax_facets_process_facet_blocks()
ajax_facets_refresh_facets_content in ./ajax_facets.pages.inc
Callback to update facets content by AJAX.
ajax_facets_views_ajax_data_alter in ./ajax_facets.module
Implementation of hook_views_ajax_data_alter()

File

./ajax_facets.module, line 213
Ajax facets implementation.

Code

function ajax_facets_process_facet_blocks($searcher, $realm_name = 'block') {
  $map = facetapi_get_delta_map();
  $facets_to_proceed = array();
  $enabled_facets = facetapi_get_enabled_facets($searcher, $realm_name);
  foreach ($enabled_facets as $facet) {
    $facets_to_proceed[] = $facet['name'];
  }

  // Our return array
  $blocks = array(
    'facet_blocks' => array(),
    'hide_blocks' => array(),
    'reset_urls' => array(),
    'active_items' => array(),
  );
  $group = $searcher . ':' . $realm_name;
  $realm = facetapi_realm_load($realm_name);

  // Process values once per searcher-realm group.
  $adapter = facetapi_adapter_load($searcher);
  $builds[$group] = $adapter ? $adapter
    ->buildRealm($realm_name) : array();
  foreach ($facets_to_proceed as $facet_name) {
    $facet = $adapter
      ->getFacet(array(
      'name' => $facet_name,
    ));
    $blocks['reset_urls'][$facet_name] = ajax_facets_facet_build_reset_path($facet, $adapter);
    if (!empty($builds[$group][$facet_name])) {
      $build = $facet
        ->getBuild();
      $blocks['active_items'][$facet_name] = array();
      foreach ($build as $key => $value) {
        if ($value['#active']) {
          $blocks['active_items'][$facet_name][] = "{$facet_name}:{$key}";
        }
      }
      if (!empty($blocks['active_items'][$facet_name])) {
        sort($blocks['active_items'][$facet_name]);
      }

      // Skip currently checked facet - we will not refresh them.
      $blocks['facet_blocks'][$builds[$group][$facet_name]['#attributes']['id']] = drupal_render($builds[$group][$facet_name]);
    }
    else {
      $facet_name = urlencode($facet_name);
      $delta = array_search("{$searcher}:{$realm_name}:{$facet_name}", $map);
      $blocks['hide_blocks'][] = 'block-facetapi-' . strtolower($delta);
    }

    // Settings for update view.
    $facet_settings = $facet
      ->getSettings($realm);
    $update_results[$facet_name] = 0;
    $blocks['update_results'][$facet_name] = $facet_settings->settings['update_results'];
  }
  return $blocks;
}