src/GridExtensions/Filter/ContactSegmentFilter/ContactSegmentFiltersProvider.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\GridExtensions\Filter\ContactSegmentFilter;
  3. use Traversable;
  4. class ContactSegmentFiltersProvider
  5. {
  6.     /** @var ContactSegmentFilterInterface[] */
  7.     private array $filters;
  8.     public function __construct(iterable $filters)
  9.     {
  10.         $this->filters $filters instanceof Traversable iterator_to_array($filters) : $filters;
  11.     }
  12.     public function getFilters(): array
  13.     {
  14.         return $this->filters;
  15.     }
  16.     public function getOrderedFiltersByGroup(): array
  17.     {
  18.         $orderedFiltersByGroup = [
  19.             ContactSegmentFilterInterface::GENERIC_GROUP => [],
  20.             ContactSegmentFilterInterface::PROSPECT_REQUEST_GROUP => [],
  21.             ContactSegmentFilterInterface::QUOTE_GROUP => [],
  22.             ContactSegmentFilterInterface::BOOKING_GROUP => [],
  23.             ContactSegmentFilterInterface::CONTACT_GROUP => [],
  24.             //ContactSegmentFilterInterface::CONTACT_PROFILE_GROUP => [],
  25.         ];
  26.         foreach ($this->filters as $filter) {
  27.             if (isset($orderedFiltersByGroup[$filter->getGroup()])) {
  28.                 $orderedFiltersByGroup[$filter->getGroup()][] = $filter;
  29.             }
  30.         }
  31.         foreach ($orderedFiltersByGroup as $groupName => &$groupFilters) {
  32.             if (empty($groupFilters)) {
  33.                 unset($orderedFiltersByGroup[$groupName]);
  34.             } else {
  35.                 usort($groupFilters, function (ContactSegmentFilterInterface $filterAContactSegmentFilterInterface $filterB) {
  36.                     return $filterA->getOrder() <=> $filterB->getOrder();
  37.                 });
  38.             }
  39.         }
  40.         return $orderedFiltersByGroup;
  41.     }
  42. }