search_api_location-8.x-1.0-alpha2/modules/facets_map_widget/src/Plugin/facets/processor/RptMapProcessor.php

modules/facets_map_widget/src/Plugin/facets/processor/RptMapProcessor.php
<?php

namespace Drupal\facets_map_widget\Plugin\facets\processor;

use Drupal\facets\FacetInterface;
use Drupal\facets\Processor\BuildProcessorInterface;
use Drupal\facets\Processor\ProcessorPluginBase;

/**
 * Provides a processor for faceted map.
 *
 * @FacetsProcessor(
 *   id = "rpt",
 *   label = @Translation("Facets Map Processor"),
 *   description = @Translation("Support a map to be used as a facet by forwarding the bounding box values to the search backend as the search area to filter on."),
 *   stages = {
 *     "build" = 2
 *   }
 * )
 */
class RptMapProcessor extends ProcessorPluginBase implements BuildProcessorInterface {

  /**
   * {@inheritdoc}
   */
  public function build(FacetInterface $facet, array $results) {
    /** @var \Drupal\facets\Plugin\facets\processor\UrlProcessorHandler $url_processor_handler */
    $url_processor_handler = $facet->getProcessors()['url_processor_handler'];
    $url_processor = $url_processor_handler->getProcessor();
    $filter_key = $url_processor->getFilterKey();

    /** @var \Drupal\facets\Result\ResultInterface[] $results */
    foreach ($results as &$result) {
      $url = $result->getUrl();
      $query = $url->getOption('query');

      // Remove all the query filters for the field of the facet.
      if (isset($query[$filter_key])) {
        foreach ($query[$filter_key] as $id => $filter) {
          if (strpos($filter . $url_processor->getSeparator(), $facet->getUrlAlias()) === 0) {
            unset($query[$filter_key][$id]);
          }
        }
      }

      $query[$filter_key][] = $facet->getUrlAlias() . $url_processor->getSeparator() . '(geom:__GEOM__)';
      $url->setOption('query', $query);
      $result->setUrl($url);
    }
    return $results;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc