contacts_events-8.x-1.x-dev/modules/village_allocation/src/Plugin/rest/resource/SearchFacetResource.php

modules/village_allocation/src/Plugin/rest/resource/SearchFacetResource.php
<?php

namespace Drupal\village_allocation\Plugin\rest\resource;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\facets\FacetManager\DefaultFacetManager;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Provides bookings list.
 *
 * @RestResource(
 *   id = "village_allocation_search_facets",
 *   label = @Translation("Village Allocation - Search Facets"),
 *   uri_paths = {
 *     "canonical" = "/admin/village_allocation/search_facets/{event_id}"
 *   }
 * )
 */
class SearchFacetResource extends ResourceBase {

  /**
   * Entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * Fact manager.
   *
   * @var \Drupal\facets\FacetManager\DefaultFacetManager
   */
  protected $facetManager;

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, array $serializer_formats, LoggerInterface $logger, EntityTypeManagerInterface $entity_type_manager, DefaultFacetManager $facet_manager) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
    $this->entityTypeManager = $entity_type_manager;
    $this->facetManager = $facet_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->getParameter('serializer.formats'),
      $container->get('logger.factory')->get('rest'),
      $container->get('entity_type.manager'),
      $container->get('facets.manager')
    );
  }

  /**
   * Gets search facets as json.
   *
   * @param string $event_id
   *   Current event.
   *
   * @return \Drupal\rest\ResourceResponse
   *   Resource containing serailized search facets.
   */
  public function get($event_id) {
    $response = [];
    // Get the facets defined for the VA camping groups view.
    $facets = $this->facetManager->getFacetsByFacetSourceId('search_api:views_block__camping_groups_indexed___block_1');

    foreach ($facets as $facet) {
      /** @var \Drupal\facets\FacetInterface $facet */
      $facet_build = $this->facetManager->build($facet);
      // Facet manager builds a render array. This isn't useful for us, so
      // extract what we need for serialization to json.
      $facet_json = [
        'id' => $facet->id(),
        'name' => $facet->getName(),
        'items' => [],
      ];

      foreach ($facet_build[0]['#items'] as $item) {
        if ($item['#type'] == 'link') {
          $facet_json['items'][] = [
            'name' => $item['#title']['#value'],
            'count' => $item['#title']['#count'],
            'showCount' => $item['#title']['#show_count'],
            // Extract the filter querystring from the url.
            'filter' => $item['#url']->getOption('query')['f'][0],
          ];
        }
      }

      $response[] = $facet_json;
    }

    return (new ResourceResponse($response))
      ->addCacheableDependency([
        '#cache' => ['max-age' => 0],
      ]);
  }

}

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

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