You are here

function ajax_facets_process_facet_blocks in Ajax facets 7.3

Same name and namespace in other branches
  1. 7 ajax_facets.module \ajax_facets_process_facet_blocks()
  2. 7.2 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 253

Code

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

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

  // Process values once per searcher-realm group.
  $adapter = facetapi_adapter_load($searcher);
  $builds[$group] = facetapi_build_realm($searcher, $realm_name);

  // Take search id.
  $search_id = key(search_api_current_search());

  // Process facets.
  foreach ($facets_to_proceed as $facet_name) {
    $facet = $adapter
      ->getFacet([
      'name' => $facet_name,
    ]);

    //$facet->getSettings($builds[$group])->settings['facet_search_ids']

    //search_api_views:search_results:page

    // First check if the facet is enabled for this search.
    $settings = $facet
      ->getSettings()->settings;
    $default_true = isset($settings['default_true']) ? $settings['default_true'] : TRUE;
    $facet_search_ids = isset($settings['facet_search_ids']) ? $settings['facet_search_ids'] : [];

    // If facet is enabled for this search id.
    // TODO replace it on facetapi_check_block_visibility() ?
    if ($default_true == empty($facet_search_ids[$search_id])) {
      $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] = [];
        foreach ($build as $key => $value) {
          if (!empty($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 = rawurlencode($facet_name);
        $delta = array_search("{$searcher}:{$realm_name}:{$facet_name}", $map);
        $blocks['hide_blocks'][] = 'block-facetapi-' . strtolower($delta);
      }
    }
  }
  return $blocks;
}