You are here

public function GlossaryAZPadItemsProcessor::build in Search API AZ Glossary 8.3

Same name and namespace in other branches
  1. 8.4 src/Plugin/facets/processor/GlossaryAZPadItemsProcessor.php \Drupal\search_api_glossary\Plugin\facets\processor\GlossaryAZPadItemsProcessor::build()
  2. 8 src/Plugin/facets/processor/GlossaryAZPadItemsProcessor.php \Drupal\search_api_glossary\Plugin\facets\processor\GlossaryAZPadItemsProcessor::build()
  3. 8.2 src/Plugin/facets/processor/GlossaryAZPadItemsProcessor.php \Drupal\search_api_glossary\Plugin\facets\processor\GlossaryAZPadItemsProcessor::build()

Runs before the renderable array is created.

Parameters

\Drupal\facets\FacetInterface $facet: The facet being changed.

\Drupal\facets\Result\ResultInterface[] $results: The results being changed.

Return value

\Drupal\facets\Result\ResultInterface[] The changed results.

Overrides BuildProcessorInterface::build

File

src/Plugin/facets/processor/GlossaryAZPadItemsProcessor.php, line 27

Class

GlossaryAZPadItemsProcessor
Provides a processor to rewrite facet results to pad out missing alpha.

Namespace

Drupal\search_api_glossary\Plugin\facets\processor

Code

public function build(FacetInterface $facet, array $results) {

  // All good?
  // Load up the search index and processor.
  $glossary_processor = $facet
    ->getFacetSource()
    ->getIndex()
    ->getProcessor('glossary');
  $glossary_processor_config_fields = $glossary_processor
    ->getConfig();

  // Resolve fields.
  $glossary_field_id = $facet
    ->getFieldIdentifier();
  $parent_field_id = $glossary_processor
    ->getFieldName($glossary_field_id);

  // Finally get group values.
  $glossary_az_grouping = array_values($glossary_processor_config_fields[$parent_field_id]['grouping']);
  $glossary_array = [];

  // TODO Dependency Inject.
  $glossary_helper = \Drupal::service('search_api_glossary.helper');
  $group_prefix = $glossary_helper
    ->glossaryGetGroupNamePrefix();

  // If Alpha grouping is not set, pad alpha.
  if (!in_array('grouping_az', $glossary_az_grouping, TRUE)) {

    // TODO Figure out how to get AZ equivalent in native language.
    $glossary_array = array_merge($glossary_array, range('A', 'Z'));
  }
  else {
    $glossary_array[] = $group_prefix['alpha'];
  }

  // If Numeric grouping is not set, pad alpha.
  if (!in_array('grouping_09', $glossary_az_grouping, TRUE)) {

    // TODO Figure out how to get 09 equivalent in native language.
    $glossary_array = array_merge($glossary_array, array_map('strval', range('0', '9')));
  }
  else {
    $glossary_array[] = $group_prefix['numeric'];
  }

  // Do we have Non Alpha Numeric grouping?
  if (in_array('grouping_other', $glossary_az_grouping, TRUE)) {

    // To get # equivalent in native language, change the settings YAML.
    $glossary_array[] = $group_prefix['special'];
  }

  // Generate keys from values.
  $glossary_missing = array_combine($glossary_array, $glossary_array);

  /** @var \Drupal\facets\Result\ResultInterface $result */
  foreach ($results as $result) {
    $result_glossary = $result
      ->getDisplayValue();

    // Items that exist in result, remove them from sample array.
    if (in_array($result_glossary, $glossary_missing)) {
      unset($glossary_missing[$result_glossary]);
    }
  }

  // Loop over the missing items and add them.
  foreach ($glossary_missing as $glossary) {
    $results[] = new Result($facet, $glossary, $glossary, 0);
  }
  return $results;
}