You are here

facetapi_bonus.module in Facet API Bonus 7

Supply additional plugins/funtionality for facetapi

File

facetapi_bonus.module
View source
<?php

/**
 * @file
 *
 * Supply additional plugins/funtionality for facetapi
 */

// Integration with Page Title module.
module_load_include('inc', 'facetapi_bonus', 'facetapi_bonus.page_title');

/**
 * Implements hook_facetapi_facet_info_alter().
 */
function facetapi_bonus_facetapi_facet_info_alter(&$facet_info, $searcher_info) {
  foreach ($facet_info as &$facet) {
    $facet['dependency plugins'][] = 'facet';
  }
}

/**
 * Implements hook_facetapi_dependencies().
 */
function facetapi_bonus_facetapi_dependencies() {
  return array(
    'facet' => array(
      'handler' => array(
        'label' => t('Another facet'),
        'class' => 'FacetapiDependencyFacet',
      ),
    ),
  );
}

/**
 * Implements hook_facetapi_filters().
 */
function facetapi_bonus_facetapi_filters() {
  return array(
    'exclude_items' => array(
      'handler' => array(
        'label' => t('Exclude specified items'),
        'class' => 'FacetapiFilterExcludeItems',
      ),
    ),
    'rewrite_items' => array(
      'handler' => array(
        'label' => t('Rewrite facet items via callback function'),
        'class' => 'FacetapiFilterRewriteItems',
      ),
    ),
    'narrow_results' => array(
      'handler' => array(
        'label' => t('Do not display items that do not narrow results'),
        'class' => 'FacetapiFilterNarrowResults',
      ),
    ),
    'show_if_minimum_items' => array(
      'handler' => array(
        'label' => t('Do not show facet with only X items'),
        'class' => 'FacetapiFilterShowIfMinimumItems',
      ),
    ),
    'deepest_level_items' => array(
      'handler' => array(
        'label' => t('Show only deepest level items'),
        'class' => 'FacetapiFilterShowDeepestLevelItems',
      ),
    ),
    'filter_depth' => array(
      'handler' => array(
        'label' => t('Show items from a specific depth'),
        'class' => 'FacetapiFilterShowItemsFromSpecificDepth',
      ),
    ),
    'hide_if_selected' => array(
      'handler' => array(
        'label' => t('Do not show facet with already selected items'),
        'class' => 'FacetapiFilterHideIfSelected',
      ),
    ),
  );
}

/**
 * Implements hook_facetapi_sort_info().
 */
function facetapi_bonus_facetapi_sort_info() {
  $sorts['natural'] = array(
    'label' => t('Display value (natural)'),
    'callback' => 'facetapi_sort_natural',
    'description' => t('Sort by the value displayed to the user in natural order.'),
  );
  return $sorts;
}

/**
 * Implements hook_facetapi_widgets().
 */
function facetapi_bonus_facetapi_widgets() {
  return array(
    'facetapi_bonus' => array(
      'handler' => array(
        'label' => t('Select'),
        'class' => 'FacetapiBonusSelect',
        'query types' => array(
          'term',
          'date',
        ),
      ),
    ),
  );
}

/**
 * Implements hook_current_search_items().
 */
function facetapi_bonus_current_search_items() {
  return array(
    'reset_filters' => array(
      'handler' => array(
        'label' => t('Reset filters link'),
        'class' => 'FacetapiBonusCurrentSearchResetFiltersLink',
      ),
    ),
  );
}

/**
 * Sorts by display value in natural order.
 */
function facetapi_sort_natural(array $a, array $b) {
  $a_value = isset($a['#markup']) ? $a['#markup'] : '';
  $b_value = isset($b['#markup']) ? $b['#markup'] : '';
  return strnatcmp($a_value, $b_value);
}

/**
 * Implements hook_forms().
 *
 * Set callbacks for select facet forms.
 */
function facetapi_bonus_forms($form_id, $args) {
  $forms = array();

  // Map all form IDs starting with facetapi_bonus_select_ to our callback.
  if (strpos($form_id, 'facetapi_bonus_select_') === 0) {
    $forms[$form_id] = array(
      'callback' => 'facetapi_bonus_select',
    );
  }
  return $forms;
}

/**
 * Implements hook_theme().
 */
function facetapi_bonus_theme() {
  return array(
    'facetapi_bonus_select_option' => array(
      'title' => NULL,
      'count' => NULL,
    ),
  );
}

/**
 * Theme function for selectbox widget option.
 */
function theme_facetapi_bonus_select_option($element) {
  return $element['title'] . ' (' . $element['count'] . ')';
}