3 namespace Drupal\search;
5 use Drupal\Core\Config\ConfigFactoryInterface;
6 use Drupal\Core\Entity\EntityManagerInterface;
9 * Provides a repository for Search Page config entities.
11 class SearchPageRepository implements SearchPageRepositoryInterface {
16 * @var \Drupal\Core\Config\ConfigFactoryInterface
18 protected $configFactory;
21 * The search page storage.
23 * @var \Drupal\Core\Entity\EntityStorageInterface
28 * Constructs a new SearchPageRepository.
30 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
32 * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
35 public function __construct(ConfigFactoryInterface $config_factory, EntityManagerInterface $entity_manager) {
36 $this->configFactory = $config_factory;
37 $this->storage = $entity_manager->getStorage('search_page');
43 public function getActiveSearchPages() {
44 $ids = $this->getQuery()
45 ->condition('status', TRUE)
47 return $this->storage->loadMultiple($ids);
53 public function isSearchActive() {
54 return (bool) $this->getQuery()
55 ->condition('status', TRUE)
63 public function getIndexableSearchPages() {
64 return array_filter($this->getActiveSearchPages(), function (SearchPageInterface $search) {
65 return $search->isIndexable();
72 public function getDefaultSearchPage() {
73 // Find all active search pages (without loading them).
74 $search_pages = $this->getQuery()
75 ->condition('status', TRUE)
78 // If the default page is active, return it.
79 $default = $this->configFactory->get('search.settings')->get('default_page');
80 if (isset($search_pages[$default])) {
84 // Otherwise, use the first active search page.
85 return is_array($search_pages) ? reset($search_pages) : FALSE;
91 public function clearDefaultSearchPage() {
92 $this->configFactory->getEditable('search.settings')->clear('default_page')->save();
98 public function setDefaultSearchPage(SearchPageInterface $search_page) {
99 $this->configFactory->getEditable('search.settings')->set('default_page', $search_page->id())->save();
100 $search_page->enable()->save();
106 public function sortSearchPages($search_pages) {
107 $entity_type = $this->storage->getEntityType();
108 uasort($search_pages, [$entity_type->getClass(), 'sort']);
109 return $search_pages;
113 * Returns an entity query instance.
115 * @return \Drupal\Core\Entity\Query\QueryInterface
116 * The query instance.
118 protected function getQuery() {
119 return $this->storage->getQuery();