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;
}
}
