0
|
1 <?php
|
|
2
|
|
3 /**
|
|
4 * @file
|
|
5 * Classes used by the Facet API module.
|
|
6 */
|
|
7
|
|
8 /**
|
|
9 * Facet API adapter for the Apache Solr Search Integration module.
|
|
10 */
|
|
11 class ApacheSolrFacetapiAdapter extends FacetapiAdapter {
|
|
12
|
|
13 /**
|
|
14 * Returns the path to the admin settings for a given realm.
|
|
15 *
|
|
16 * @param string $realm_name
|
|
17 * The name of the realm.
|
|
18 *
|
|
19 * @return string
|
|
20 * The path to the admin settings.
|
|
21 */
|
|
22 public function getPath($realm_name) {
|
|
23 $path = 'admin/config/search/apachesolr/settings';
|
|
24 // $adapter will be an instance of class FacetapiAdapter
|
|
25 if ($adapter = menu_get_object('facetapi_adapter', 4)) {
|
|
26 // Get the environment ID from the machine name of the searcher.
|
|
27 $env_id = ltrim(strstr($adapter->getSearcher(), '@'), '@');
|
|
28 $path .= '/' . $env_id . '/facets';
|
|
29 // Add the realm name to the path if it is not the first one in the list.
|
|
30 if (key(facetapi_get_realm_info()) != $realm_name) {
|
|
31 $path .= '/' . $realm_name;
|
|
32 }
|
|
33 }
|
|
34 return $path;
|
|
35 }
|
|
36
|
|
37 /**
|
|
38 * Allows the backend to initialize its query object before adding the facet
|
|
39 * filters.
|
|
40 *
|
|
41 * @param mixed $query
|
|
42 * The backend's native object.
|
|
43 */
|
|
44 function initActiveFilters($query) {
|
|
45 $enabled_facets = facetapi_get_enabled_facets($this->info['name']);
|
|
46 if ($enabled_facets) {
|
|
47 $query->addParam('facet', 'true');
|
|
48 $query->addParam('facet.sort', 'count');
|
|
49 $query->addParam('facet.mincount', '1');
|
|
50 }
|
|
51 }
|
|
52
|
|
53 /**
|
|
54 * Returns a boolean flagging whether $this->_searcher executed a search.
|
|
55 */
|
|
56 public function searchExecuted() {
|
|
57 // Initial check - has ANY solr query run in our environment.
|
|
58 $env_id = $this->info['instance'];
|
|
59 $this_has_searched = apachesolr_has_searched($env_id);
|
|
60 // Secondary check - do we have results for this searcher?
|
|
61 $this_has_searched = $this_has_searched && apachesolr_static_response_cache($this->getSearcher());
|
|
62 return $this_has_searched;
|
|
63 }
|
|
64
|
|
65 /**
|
|
66 * Suppress output of the realm
|
|
67 *
|
|
68 * @param string $realm_name
|
|
69 *
|
|
70 * @return bool $flag
|
|
71 * Returns if it was suppressed or not
|
|
72 */
|
|
73 public function suppressOutput($realm_name) {
|
|
74 $flag = FALSE;
|
|
75 if ($realm_name == 'block') {
|
|
76 $env_id = $this->info['instance'];
|
|
77 $flag = apachesolr_suppress_blocks($env_id);
|
|
78 }
|
|
79 return $flag || !$this->searchExecuted();
|
|
80 }
|
|
81
|
|
82 /**
|
|
83 * Returns the search keys.
|
|
84 *
|
|
85 * @return string
|
|
86 */
|
|
87 public function getSearchKeys() {
|
|
88 if (NULL === $this->keys) {
|
|
89 $env_id = $this->info['instance'];
|
|
90 if ($query = apachesolr_current_query($env_id)) {
|
|
91 return $query->getParam('q');
|
|
92 }
|
|
93 }
|
|
94 else {
|
|
95 return $this->keys;
|
|
96 }
|
|
97 return FALSE;
|
|
98 }
|
|
99
|
|
100 /**
|
|
101 * Returns the search path.
|
|
102 *
|
|
103 * @return string
|
|
104 * A string containing the search path.
|
|
105 *
|
|
106 * @todo D8 should provide an API function for this.
|
|
107 */
|
|
108 public function getSearchPath() {
|
|
109 $env_id = $this->info['instance'];
|
|
110 $query = apachesolr_current_query($env_id);
|
|
111 if (!$query || (NULL === $this->searchPath && NULL === $query->getPath())) {
|
|
112 if ($path = module_invoke($this->info['module'] . '_search', 'search_info')) {
|
|
113 $this->searchPath = 'search/' . $path['path'];
|
|
114 if (!isset($_GET['keys']) && ($keys = $this->getSearchKeys())) {
|
|
115 $this->searchPath .= '/' . $keys;
|
|
116 }
|
|
117 }
|
|
118 }
|
|
119 if (!$query || NULL === $query->getPath()) {
|
|
120 return $this->searchPath;
|
|
121 }
|
|
122 else {
|
|
123 return $query->getPath();
|
|
124 }
|
|
125
|
|
126 }
|
|
127
|
|
128 /**
|
|
129 * Returns the number of total results found for the current search.
|
|
130 *
|
|
131 * @return bool|int
|
|
132 * Number of results or false if no search response was found
|
|
133 */
|
|
134 public function getResultCount() {
|
|
135 $response = apachesolr_static_response_cache($this->getSearcher());
|
|
136 if ($response) {
|
|
137 return $response->response->numFound;
|
|
138 }
|
|
139 return FALSE;
|
|
140 }
|
|
141
|
|
142 /**
|
|
143 * Allows for backend specific overrides to the settings form.
|
|
144 *
|
|
145 * @param array $form
|
|
146 * @param array $form_state
|
|
147 */
|
|
148 public function settingsForm(&$form, &$form_state) {
|
|
149 $form['#validate'][] = 'apachesolr_facet_form_validate';
|
|
150 }
|
|
151 }
|