culturefeed-1.0.2/modules/culturefeed_search/src/Facet/Facet.php

modules/culturefeed_search/src/Facet/Facet.php
<?php

namespace Drupal\culturefeed_search\Facet;

/**
 * Provides a catalog search facet.
 */
class Facet {

  /**
   * The facet Id.
   *
   * @var string
   */
  protected $id;

  /**
   * The buckets for this facet.
   *
   * @var FacetBucket[]
   */
  protected $buckets = [];

  /**
   * Facet constructor.
   *
   * @param string $id
   *   The facet Id.
   */
  public function __construct(string $id) {
    $this->id = $id;
  }

  /**
   * Get the Id of the facet.
   *
   * @return string
   *   The facet Id.
   */
  public function getId(): string {
    return $this->id;
  }

  /**
   * Set the Id of the facet.
   *
   * @param string $id
   *   The Id to set.
   *
   * @return Facet
   *   The current facet.
   */
  public function setId(string $id): Facet {
    $this->id = $id;
    return $this;
  }

  /**
   * Add the given bucket to the facet.
   *
   * @param FacetBucket $bucket
   *   The bucket to add.
   */
  public function addBucket(FacetBucket $bucket) {
    $this->buckets[$bucket->getId()] = $bucket;
  }

  /**
   * Return the facet buckets.
   *
   * @return FacetBucket[]
   *   The buckets in the facet.
   */
  public function getBuckets() {
    return $this->buckets;
  }

  /**
   * Set the facet buckets.
   *
   * @param array $buckets
   *   The buckets to set.
   */
  public function setBuckets(array $buckets) {
    $this->buckets = $buckets;
  }

  /**
   * Get the currently active buckets in this facet.
   *
   * @return \Drupal\culturefeed_search\Facet\FacetBucket[]
   *   The active buckets.
   */
  public function getActiveBuckets() {
    $activeBuckets = [];

    foreach ($this->buckets as $bucket) {
      $activeBuckets += $this->getActiveBucketsRecursively($bucket);
    }

    return $activeBuckets;
  }

  /**
   * Recursively get the active buckets of a given Facet bucket.
   *
   * @param \Drupal\culturefeed_search\Facet\FacetBucket $facetBucket
   *   The bucket to check.
   *
   * @return \Drupal\culturefeed_search\Facet\FacetBucket[]
   *   The active buckets.
   */
  private function getActiveBucketsRecursively(FacetBucket $facetBucket) {
    $activeBuckets = [];

    if ($facetBucket->isActive()) {
      $activeBuckets[$facetBucket->getId()] = $facetBucket;
    }

    if ($facetBucket->hasChildren()) {
      foreach ($facetBucket->getChildren() as $child) {
        $activeBuckets += $this->getActiveBucketsRecursively($child);
      }
    }

    return $activeBuckets;
  }

  /**
   * Set the currently active buckets.
   *
   * @param array $activeBuckets
   *   Buckets to set active.
   */
  public function setActiveBuckets(array $activeBuckets) {
    foreach ($this->buckets as $bucket) {
      $this->checkActiveBucket($bucket, $activeBuckets);

      foreach ($bucket->getChildren() as $child) {
        if ($child->isActive() || $child->hasActiveChildren()) {
          $bucket->setHasActiveChildren();
        }
      }
    }
  }

  /**
   * Check if a single bucket is active and set it's active state.
   *
   * @param \Drupal\culturefeed_search\Facet\FacetBucket $bucket
   *   The bucket to check.
   * @param array $activeBuckets
   *   The active buckets to check against.
   */
  private function checkActiveBucket(FacetBucket $bucket, array $activeBuckets) {
    if (isset($activeBuckets[$bucket->getId()])) {
      $bucket->setActive();
      $bucket->setLabel($activeBuckets[$bucket->getId()]);
    }

    // Traverse the child buckets.
    if ($bucket->hasChildren()) {
      foreach ($bucket->getChildren() as $child) {
        $this->checkActiveBucket($child, $activeBuckets);

        if ($child->isActive() || $child->hasActiveChildren()) {
          $bucket->setHasActiveChildren();
        }
      }
    }
  }

}

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

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