annotate sites/all/modules/custom/solrsearch/plugins/facetapi/query_type_geo.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 * Plugin for "apachesolr_geo" query types.
015d06b10d37 initial
dwinter
parents:
diff changeset
5 */
015d06b10d37 initial
dwinter
parents:
diff changeset
6 class solrsearchFacetapiGeo extends FacetapiQueryType implements FacetapiQueryTypeInterface {
015d06b10d37 initial
dwinter
parents:
diff changeset
7 // Center point is Denver.
015d06b10d37 initial
dwinter
parents:
diff changeset
8 public $center_point = '39.7391667,-104.9841667';
015d06b10d37 initial
dwinter
parents:
diff changeset
9 public $facet_options = '0.5,0.1,0.01';
015d06b10d37 initial
dwinter
parents:
diff changeset
10 public $default_radius = 100;
015d06b10d37 initial
dwinter
parents:
diff changeset
11
015d06b10d37 initial
dwinter
parents:
diff changeset
12 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
13 * Returns the query type associated with the plugin.
015d06b10d37 initial
dwinter
parents:
diff changeset
14 *
015d06b10d37 initial
dwinter
parents:
diff changeset
15 * @return string
015d06b10d37 initial
dwinter
parents:
diff changeset
16 * The query type.
015d06b10d37 initial
dwinter
parents:
diff changeset
17 */
015d06b10d37 initial
dwinter
parents:
diff changeset
18 static public function getType() {
015d06b10d37 initial
dwinter
parents:
diff changeset
19 return 'geo';
015d06b10d37 initial
dwinter
parents:
diff changeset
20 }
015d06b10d37 initial
dwinter
parents:
diff changeset
21
015d06b10d37 initial
dwinter
parents:
diff changeset
22 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
23 * Adds the filter to the query object.
015d06b10d37 initial
dwinter
parents:
diff changeset
24 *
015d06b10d37 initial
dwinter
parents:
diff changeset
25 * @param DrupalSolrQueryInterface $query
015d06b10d37 initial
dwinter
parents:
diff changeset
26 * An object containing the query in the backend's native API.
015d06b10d37 initial
dwinter
parents:
diff changeset
27 */
015d06b10d37 initial
dwinter
parents:
diff changeset
28 public function execute($query) {
015d06b10d37 initial
dwinter
parents:
diff changeset
29 // Retrieve settings of the facet.
015d06b10d37 initial
dwinter
parents:
diff changeset
30 // We should be able to get all constants as facet options.
015d06b10d37 initial
dwinter
parents:
diff changeset
31 $settings = $this->adapter->getFacet($this->facet)->getSettings();
015d06b10d37 initial
dwinter
parents:
diff changeset
32
015d06b10d37 initial
dwinter
parents:
diff changeset
33 $facet_distances = explode(',', $this->facet_options);
015d06b10d37 initial
dwinter
parents:
diff changeset
34
015d06b10d37 initial
dwinter
parents:
diff changeset
35 $active_items = $this->adapter->getActiveItems($this->facet);
015d06b10d37 initial
dwinter
parents:
diff changeset
36
015d06b10d37 initial
dwinter
parents:
diff changeset
37 if (empty($active_items)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
38 $distance = $this->default_radius;
015d06b10d37 initial
dwinter
parents:
diff changeset
39 }
015d06b10d37 initial
dwinter
parents:
diff changeset
40 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
41 $active_item = array_pop($active_items);
015d06b10d37 initial
dwinter
parents:
diff changeset
42 $distance = substr($active_item['value'], 1);
015d06b10d37 initial
dwinter
parents:
diff changeset
43 // Add current selected distance to have possibility to unselect it.
015d06b10d37 initial
dwinter
parents:
diff changeset
44 $facet_distances[] = 1;
015d06b10d37 initial
dwinter
parents:
diff changeset
45 }
015d06b10d37 initial
dwinter
parents:
diff changeset
46
015d06b10d37 initial
dwinter
parents:
diff changeset
47 // Search center point.
015d06b10d37 initial
dwinter
parents:
diff changeset
48 $query->addParam('pt', $this->center_point);
015d06b10d37 initial
dwinter
parents:
diff changeset
49
015d06b10d37 initial
dwinter
parents:
diff changeset
50 // Set location field name.
015d06b10d37 initial
dwinter
parents:
diff changeset
51 $query->addParam('sfield', $this->facet['field']);
015d06b10d37 initial
dwinter
parents:
diff changeset
52 $query->addParam('fq', '{!geofilt sfield=' . $this->facet['field'] . '}');
015d06b10d37 initial
dwinter
parents:
diff changeset
53
015d06b10d37 initial
dwinter
parents:
diff changeset
54 // Set search radius.
015d06b10d37 initial
dwinter
parents:
diff changeset
55 $query->addParam('d', $distance);
015d06b10d37 initial
dwinter
parents:
diff changeset
56
015d06b10d37 initial
dwinter
parents:
diff changeset
57 // Set facets.
015d06b10d37 initial
dwinter
parents:
diff changeset
58 foreach ($facet_distances as $facet_option) {
015d06b10d37 initial
dwinter
parents:
diff changeset
59 $facet_distance = $distance * $facet_option;
015d06b10d37 initial
dwinter
parents:
diff changeset
60 $query->addParam('facet.query', '{!geofilt d=' . $facet_distance . ' key=d' . $facet_distance . '}');
015d06b10d37 initial
dwinter
parents:
diff changeset
61 }
015d06b10d37 initial
dwinter
parents:
diff changeset
62 }
015d06b10d37 initial
dwinter
parents:
diff changeset
63
015d06b10d37 initial
dwinter
parents:
diff changeset
64 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
65 * Initializes the facet's build array.
015d06b10d37 initial
dwinter
parents:
diff changeset
66 *
015d06b10d37 initial
dwinter
parents:
diff changeset
67 * @return array
015d06b10d37 initial
dwinter
parents:
diff changeset
68 * The initialized render array.
015d06b10d37 initial
dwinter
parents:
diff changeset
69 */
015d06b10d37 initial
dwinter
parents:
diff changeset
70 public function build() {
015d06b10d37 initial
dwinter
parents:
diff changeset
71 $build = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
72 if ($response = apachesolr_static_response_cache($this->adapter->getSearcher())) {
015d06b10d37 initial
dwinter
parents:
diff changeset
73 if (isset($response->facet_counts->facet_queries)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
74 foreach ($response->facet_counts->facet_queries as $value => $count) {
015d06b10d37 initial
dwinter
parents:
diff changeset
75 // Skip zero results values.
015d06b10d37 initial
dwinter
parents:
diff changeset
76 if ($count > 0) {
015d06b10d37 initial
dwinter
parents:
diff changeset
77 $build[$value] = array('#count' => $count);
015d06b10d37 initial
dwinter
parents:
diff changeset
78 }
015d06b10d37 initial
dwinter
parents:
diff changeset
79 }
015d06b10d37 initial
dwinter
parents:
diff changeset
80 }
015d06b10d37 initial
dwinter
parents:
diff changeset
81 }
015d06b10d37 initial
dwinter
parents:
diff changeset
82 return $build;
015d06b10d37 initial
dwinter
parents:
diff changeset
83 }
015d06b10d37 initial
dwinter
parents:
diff changeset
84 }