annotate sites/all/modules/custom/solrconnect/plugins/facetapi/adapter.inc @ 0:015d06b10d37 default tip

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