Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\search;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Config\ConfigFactoryInterface;
|
Chris@18
|
6 use Drupal\Core\Entity\EntityTypeManagerInterface;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Provides a repository for Search Page config entities.
|
Chris@0
|
10 */
|
Chris@0
|
11 class SearchPageRepository implements SearchPageRepositoryInterface {
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * The config factory.
|
Chris@0
|
15 *
|
Chris@0
|
16 * @var \Drupal\Core\Config\ConfigFactoryInterface
|
Chris@0
|
17 */
|
Chris@0
|
18 protected $configFactory;
|
Chris@0
|
19
|
Chris@0
|
20 /**
|
Chris@0
|
21 * The search page storage.
|
Chris@0
|
22 *
|
Chris@0
|
23 * @var \Drupal\Core\Entity\EntityStorageInterface
|
Chris@0
|
24 */
|
Chris@0
|
25 protected $storage;
|
Chris@0
|
26
|
Chris@0
|
27 /**
|
Chris@0
|
28 * Constructs a new SearchPageRepository.
|
Chris@0
|
29 *
|
Chris@0
|
30 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
|
Chris@0
|
31 * The config factory.
|
Chris@18
|
32 * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
|
Chris@18
|
33 * The entity type manager.
|
Chris@0
|
34 */
|
Chris@18
|
35 public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entity_type_manager) {
|
Chris@0
|
36 $this->configFactory = $config_factory;
|
Chris@18
|
37 $this->storage = $entity_type_manager->getStorage('search_page');
|
Chris@0
|
38 }
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * {@inheritdoc}
|
Chris@0
|
42 */
|
Chris@0
|
43 public function getActiveSearchPages() {
|
Chris@0
|
44 $ids = $this->getQuery()
|
Chris@0
|
45 ->condition('status', TRUE)
|
Chris@0
|
46 ->execute();
|
Chris@0
|
47 return $this->storage->loadMultiple($ids);
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 /**
|
Chris@0
|
51 * {@inheritdoc}
|
Chris@0
|
52 */
|
Chris@0
|
53 public function isSearchActive() {
|
Chris@0
|
54 return (bool) $this->getQuery()
|
Chris@0
|
55 ->condition('status', TRUE)
|
Chris@0
|
56 ->range(0, 1)
|
Chris@0
|
57 ->execute();
|
Chris@0
|
58 }
|
Chris@0
|
59
|
Chris@0
|
60 /**
|
Chris@0
|
61 * {@inheritdoc}
|
Chris@0
|
62 */
|
Chris@0
|
63 public function getIndexableSearchPages() {
|
Chris@0
|
64 return array_filter($this->getActiveSearchPages(), function (SearchPageInterface $search) {
|
Chris@0
|
65 return $search->isIndexable();
|
Chris@0
|
66 });
|
Chris@0
|
67 }
|
Chris@0
|
68
|
Chris@0
|
69 /**
|
Chris@0
|
70 * {@inheritdoc}
|
Chris@0
|
71 */
|
Chris@0
|
72 public function getDefaultSearchPage() {
|
Chris@0
|
73 // Find all active search pages (without loading them).
|
Chris@0
|
74 $search_pages = $this->getQuery()
|
Chris@0
|
75 ->condition('status', TRUE)
|
Chris@0
|
76 ->execute();
|
Chris@0
|
77
|
Chris@0
|
78 // If the default page is active, return it.
|
Chris@0
|
79 $default = $this->configFactory->get('search.settings')->get('default_page');
|
Chris@0
|
80 if (isset($search_pages[$default])) {
|
Chris@0
|
81 return $default;
|
Chris@0
|
82 }
|
Chris@0
|
83
|
Chris@0
|
84 // Otherwise, use the first active search page.
|
Chris@0
|
85 return is_array($search_pages) ? reset($search_pages) : FALSE;
|
Chris@0
|
86 }
|
Chris@0
|
87
|
Chris@0
|
88 /**
|
Chris@0
|
89 * {@inheritdoc}
|
Chris@0
|
90 */
|
Chris@0
|
91 public function clearDefaultSearchPage() {
|
Chris@0
|
92 $this->configFactory->getEditable('search.settings')->clear('default_page')->save();
|
Chris@0
|
93 }
|
Chris@0
|
94
|
Chris@0
|
95 /**
|
Chris@0
|
96 * {@inheritdoc}
|
Chris@0
|
97 */
|
Chris@0
|
98 public function setDefaultSearchPage(SearchPageInterface $search_page) {
|
Chris@0
|
99 $this->configFactory->getEditable('search.settings')->set('default_page', $search_page->id())->save();
|
Chris@0
|
100 $search_page->enable()->save();
|
Chris@0
|
101 }
|
Chris@0
|
102
|
Chris@0
|
103 /**
|
Chris@0
|
104 * {@inheritdoc}
|
Chris@0
|
105 */
|
Chris@0
|
106 public function sortSearchPages($search_pages) {
|
Chris@0
|
107 $entity_type = $this->storage->getEntityType();
|
Chris@0
|
108 uasort($search_pages, [$entity_type->getClass(), 'sort']);
|
Chris@0
|
109 return $search_pages;
|
Chris@0
|
110 }
|
Chris@0
|
111
|
Chris@0
|
112 /**
|
Chris@0
|
113 * Returns an entity query instance.
|
Chris@0
|
114 *
|
Chris@0
|
115 * @return \Drupal\Core\Entity\Query\QueryInterface
|
Chris@0
|
116 * The query instance.
|
Chris@0
|
117 */
|
Chris@0
|
118 protected function getQuery() {
|
Chris@0
|
119 return $this->storage->getQuery();
|
Chris@0
|
120 }
|
Chris@0
|
121
|
Chris@0
|
122 }
|