<?php
namespace App\GridExtensions\Filter\ContactSegmentFilter;
use Traversable;
class ContactSegmentFiltersProvider
{
/** @var ContactSegmentFilterInterface[] */
private array $filters;
public function __construct(iterable $filters)
{
$this->filters = $filters instanceof Traversable ? iterator_to_array($filters) : $filters;
}
public function getFilters(): array
{
return $this->filters;
}
public function getOrderedFiltersByGroup(): array
{
$orderedFiltersByGroup = [
ContactSegmentFilterInterface::GENERIC_GROUP => [],
ContactSegmentFilterInterface::PROSPECT_REQUEST_GROUP => [],
ContactSegmentFilterInterface::QUOTE_GROUP => [],
ContactSegmentFilterInterface::BOOKING_GROUP => [],
ContactSegmentFilterInterface::CONTACT_GROUP => [],
//ContactSegmentFilterInterface::CONTACT_PROFILE_GROUP => [],
];
foreach ($this->filters as $filter) {
if (isset($orderedFiltersByGroup[$filter->getGroup()])) {
$orderedFiltersByGroup[$filter->getGroup()][] = $filter;
}
}
foreach ($orderedFiltersByGroup as $groupName => &$groupFilters) {
if (empty($groupFilters)) {
unset($orderedFiltersByGroup[$groupName]);
} else {
usort($groupFilters, function (ContactSegmentFilterInterface $filterA, ContactSegmentFilterInterface $filterB) {
return $filterA->getOrder() <=> $filterB->getOrder();
});
}
}
return $orderedFiltersByGroup;
}
}