annotate solrsearch.index.inc_unused @ 0:a2b4f67e73dc default tip

initial
author Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
date Mon, 08 Jun 2015 10:21:54 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1 <?php
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
2
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
3 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
4 * @file
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
5 * Functions related to Apache Solr indexing operations.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
6 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
7
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
8 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
9 * Processes all index queues associated with the passed environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
10 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
11 * An environment usually indexes one or more entity types. Each entity type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
12 * stores its queue in a database table that is defined in the entity type's
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
13 * info array. This function processes N number of items in each queue table,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
14 * where N is the limit passed as the second argument.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
15 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
16 * The indexing routine allows developers to selectively bypass indexing on a
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
17 * per-entity basis by implementing the following hooks:
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
18 * - hook_solrsearch_exclude()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
19 * - hook_solrsearch_ENTITY_TYPE_exclude()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
20 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
21 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
22 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
23 * @param int $limit
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
24 * The number of items to process per queue table. For example, if there are
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
25 * two entities that are being indexed in this environment and they each have
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
26 * their own queue table, setting a limit of 50 will send a maximum number of
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
27 * 100 documents to the Apache Solr server.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
28 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
29 * @return int
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
30 * The total number of documents sent to the Apache Solr server for indexing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
31 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
32 * @see solrsearch_index_get_entities_to_index()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
33 * @see solrsearch_index_entity_to_documents()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
34 * @see solrsearch_index_send_to_solr()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
35 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
36 function solrsearch_index_entities($env_id, $limit) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
37 $documents_submitted = 0;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
38 foreach (entity_get_info() as $entity_type => $info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
39 // With each pass through the callback, retrieve the next group of nids.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
40 $rows = solrsearch_index_get_entities_to_index($env_id, $entity_type, $limit);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
41 $documents = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
42 foreach ($rows as $row) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
43 $row_documents = solrsearch_index_entities_document($row, $entity_type, $env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
44 $documents = array_merge($documents, $row_documents);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
45 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
46
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
47 $indexed = solrsearch_index_send_to_solr($env_id, $documents);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
48 if ($indexed !== FALSE) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
49 $documents_submitted += count($documents);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
50 $index_position = solrsearch_get_last_index_position($env_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
51 $max_changed = $index_position['last_changed'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
52 $max_entity_id = $index_position['last_entity_id'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
53 foreach ($rows as $row) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
54 if (!empty($row->status)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
55 if ($row->changed > $max_changed) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
56 $max_changed = $row->changed;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
57 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
58 if ($row->entity_id > $max_entity_id) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
59 $max_entity_id = $row->entity_id;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
60 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
61 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
62 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
63 solrsearch_set_last_index_position($env_id, $entity_type, $max_changed, $max_entity_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
64 solrsearch_set_last_index_updated($env_id, REQUEST_TIME);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
65 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
66 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
67 return $documents_submitted;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
68 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
69
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
70 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
71 * Convert a certain entity from the solrsearch index table to a set of documents. 1 entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
72 * can be converted in multiple documents if the solrsearch_index_entity_to_documents decides to do so.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
73 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
74 * @param array $row
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
75 * A row from the indexing table
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
76 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
77 * The type of the entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
78 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
79 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
80 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
81 * @return array of solrsearchDocument(s)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
82 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
83 function solrsearch_index_entities_document($row, $entity_type, $env_id) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
84 $documents = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
85 if (!empty($row->status)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
86 // Let any module exclude this entity from the index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
87 $build_document = TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
88 foreach (module_implements('solrsearch_exclude') as $module) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
89 $exclude = module_invoke($module, 'solrsearch_exclude', $row->entity_id, $entity_type, $row, $env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
90 // If the hook returns TRUE we should exclude the entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
91 if (!empty($exclude)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
92 $build_document = FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
93 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
94 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
95 foreach (module_implements('solrsearch_' . $entity_type . '_exclude') as $module) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
96 $exclude = module_invoke($module, 'solrsearch_' . $entity_type . '_exclude', $row->entity_id, $row, $env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
97 // If the hook returns TRUE we should exclude the entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
98 if (!empty($exclude)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
99 $build_document = FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
100 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
101 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
102 if ($build_document) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
103 $documents = array_merge($documents, solrsearch_index_entity_to_documents($row, $env_id));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
104 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
105 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
106 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
107 // Delete the entity from our index if the status callback returned 0
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
108 solrsearch_remove_entity($env_id, $row->entity_type, $row->entity_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
109 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
110 // Clear entity cache for this specific entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
111 entity_get_controller($row->entity_type)->resetCache(array($row->entity_id));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
112 return $documents;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
113 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
114 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
115 * Returns the total number of documents that are able to be indexed and the
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
116 * number of documents left to be indexed.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
117 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
118 * This is a helper function for modules that implement hook_search_status().
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
119 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
120 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
121 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
122 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
123 * @return array
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
124 * An associative array with the key-value pairs:
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
125 * - remaining: The number of items left to index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
126 * - total: The total number of items to index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
127 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
128 * @see hook_search_status()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
129 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
130 function solrsearch_index_status($env_id) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
131 $remaining = 0;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
132 $total = 0;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
133
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
134 foreach (entity_get_info() as $entity_type => $info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
135 $bundles = solrsearch_get_index_bundles($env_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
136 if (empty($bundles)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
137 continue;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
138 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
139
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
140 $table = solrsearch_get_indexer_table($entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
141 $query = db_select($table, 'asn')->condition('asn.status', 1)->condition('asn.bundle', $bundles);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
142 $total += $query->countQuery()->execute()->fetchField();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
143
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
144 // Get $last_entity_id and $last_changed.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
145 $last_index_position = solrsearch_get_last_index_position($env_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
146 $last_entity_id = $last_index_position['last_entity_id'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
147 $last_changed = $last_index_position['last_changed'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
148
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
149 // Find the remaining entities to index for this entity type.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
150 $query = db_select($table, 'aie')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
151 ->condition('aie.bundle', $bundles)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
152 ->condition('aie.status', 1)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
153 ->condition(db_or()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
154 ->condition('aie.changed', $last_changed, '>')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
155 ->condition(db_and()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
156 ->condition('aie.changed', $last_changed, '<=')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
157 ->condition('aie.entity_id', $last_entity_id, '>')))
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
158 ->addTag('solrsearch_index_' . $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
159
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
160
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
161 if ($table == 'solrsearch_index_entities') {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
162 // Other, entity-specific tables don't need this condition.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
163 $query->condition('aie.entity_type', $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
164 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
165 $remaining += $query->countQuery()->execute()->fetchField();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
166 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
167 return array('remaining' => $remaining, 'total' => $total);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
168 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
169
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
170 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
171 * Worker callback for solrsearch_index_entities().
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
172 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
173 * Loads and proccesses the entity queued for indexing and converts into one or
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
174 * more documents that are sent to the Apache Solr server for indexing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
175 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
176 * The entity is loaded as the user specified in the "solrsearch_index_user"
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
177 * system variable in order to prevent sentive data from being indexed and
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
178 * displayed to underprivileged users in search results. The index user defaults
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
179 * to a user ID of "0", which is the anonymous user.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
180 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
181 * After the entity is loaded, it is converted to an array via the callback
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
182 * specified in the entity type's info array. The array that the entity is
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
183 * converted to is the model of the document sent to the Apache Solr server for
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
184 * indexing. This function allows develoeprs to modify the document by
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
185 * implementing the following hooks:
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
186 * - solrsearch_index_document_build()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
187 * - solrsearch_index_document_build_ENTITY_TYPE()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
188 * - solrsearch_index_documents_alter()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
189 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
190 * @param stdClass $item
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
191 * The data returned by the queue table containing:
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
192 * - entity_id: An integer containing the unique identifier of the entity, for
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
193 * example a node ID or comment ID.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
194 * - entity_type: The unique identifier for the entity, i.e. "node", "file".
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
195 * - bundle: The machine-readable name of the bundle the passed entity is
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
196 * associated with.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
197 * - status: The "published" status of the entity. The status will also be set
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
198 * to "0" when entity is deleted but the Apache Solr server is unavailable.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
199 * - changed: A timestamp flagging when the entity was last modified.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
200 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
201 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
202 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
203 * @return array
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
204 * An associative array of documents that are sent to the Apache Solr server
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
205 * for indexing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
206 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
207 * @see solrsearch_index_nodes() for the old-skool version.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
208 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
209 function solrsearch_index_entity_to_documents($item, $env_id) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
210 global $user;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
211 drupal_save_session(FALSE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
212 $saved_user = $user;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
213 // build the content for the index as an anonymous user to avoid exposing restricted fields and such.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
214 // By setting a variable, indexing can take place as a different user
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
215 $uid = variable_get('solrsearch_index_user', 0);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
216 if ($uid == 0) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
217 $user = drupal_anonymous_user();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
218 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
219 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
220 $user = user_load($uid);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
221 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
222 // Pull out all of our pertinent data.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
223 $entity_type = $item->entity_type;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
224
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
225 // Entity cache will be reset at the end of the indexing algorithm, to use the cache properly whenever
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
226 // the code does another entity_load
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
227 $entity = entity_load($entity_type, array($item->entity_id));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
228 $entity = $entity ? reset($entity) : FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
229
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
230 if (empty($entity)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
231 // If the object failed to load, just stop.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
232 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
233 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
234
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
235 list($entity_id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
236
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
237 // Create a new document, and do the bare minimum on it.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
238 $document = _solrsearch_index_process_entity_get_document($entity, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
239
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
240 //Get the callback array to add stuff to the document
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
241 $callbacks = solrsearch_entity_get_callback($entity_type, 'document callback', $bundle);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
242 $documents = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
243 foreach ($callbacks as $callback) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
244 // Call a type-specific callback to add stuff to the document.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
245 $documents = array_merge($documents, $callback($document, $entity, $entity_type, $env_id));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
246 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
247
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
248 //do this for all possible documents that were returned by the callbacks
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
249 foreach ($documents as $document) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
250 // Call an all-entity hook to add stuff to the document.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
251 module_invoke_all('solrsearch_index_document_build', $document, $entity, $entity_type, $env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
252
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
253 // Call a type-specific hook to add stuff to the document.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
254 module_invoke_all('solrsearch_index_document_build_' . $entity_type, $document, $entity, $env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
255
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
256 // Final processing to ensure that the document is properly structured.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
257 // All records must have a label field, which is used for user-friendly labeling.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
258 if (empty($document->label)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
259 $document->label = '';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
260 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
261
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
262 // All records must have a "content" field, which is used for fulltext indexing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
263 // If we don't have one, enter an empty value. This does mean that the entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
264 // will not be fulltext searchable.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
265 if (empty($document->content)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
266 $document->content = '';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
267 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
268
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
269 // All records must have a "teaser" field, which is used for abbreviated
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
270 // displays when no highlighted text is available.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
271 if (empty($document->teaser)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
272 $document->teaser = truncate_utf8($document->content, 300, TRUE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
273 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
274
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
275 // Add additional indexing based on the body of each record.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
276 solrsearch_index_add_tags_to_document($document, $document->content);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
277 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
278
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
279 // Now allow modules to alter each other's additions for maximum flexibility.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
280
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
281 // Hook to allow modifications of the retrieved results
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
282 foreach (module_implements('solrsearch_index_documents_alter') as $module) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
283 $function = $module . '_solrsearch_index_documents_alter';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
284 $function($documents, $entity, $entity_type, $env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
285 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
286
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
287 // Restore the user.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
288 $user = $saved_user;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
289 drupal_save_session(TRUE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
290
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
291 return $documents;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
292 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
293
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
294 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
295 * Index an array of documents to solr.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
296 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
297 * @param $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
298 * @param array $documents
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
299 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
300 * @return bool|int number indexed, or FALSE on failure.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
301 * @throws Exception
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
302 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
303 function solrsearch_index_send_to_solr($env_id, array $documents) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
304 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
305 // Get the $solr object
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
306 $solr = solrsearch_get_solr($env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
307 // If there is no server available, don't continue.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
308 if (!$solr->ping(variable_get('solrsearch_ping_timeout', 4))) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
309 throw new Exception(t('No Solr instance available during indexing.'));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
310 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
311 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
312 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
313 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
314 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
315 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
316 // Do not index when we do not have any documents to send
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
317 // Send TRUE because this is not an error
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
318 if (empty($documents)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
319 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
320 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
321 // Send the document off to Solr.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
322 watchdog('Apache Solr', 'Adding @count documents.', array('@count' => count($documents)));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
323 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
324 $docs_chunk = array_chunk($documents, 20);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
325 foreach ($docs_chunk as $docs) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
326 $solr->addDocuments($docs);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
327 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
328 watchdog('Apache Solr', 'Indexing succeeded on @count documents', array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
329 '@count' => count($documents),
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
330 ), WATCHDOG_INFO);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
331 return count($documents);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
332 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
333 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
334 if (!empty($docs)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
335 foreach ($docs as $doc) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
336 $eids[] = $doc->entity_type . '/' . $doc->entity_id;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
337 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
338 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
339 watchdog('Apache Solr', 'Indexing failed on one of the following entity ids: @eids <br /> !message', array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
340 '@eids' => implode(', ', $eids),
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
341 '!message' => nl2br(strip_tags($e->getMessage())),
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
342 ), WATCHDOG_ERROR);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
343 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
344 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
345 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
346
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
347 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
348 * Extract HTML tag contents from $text and add to boost fields.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
349 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
350 * @param solrsearchDocument $document
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
351 * @param string $text
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
352 * must be stripped of control characters before hand.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
353 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
354 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
355 function solrsearch_index_add_tags_to_document(solrsearchDocument $document, $text) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
356 $tags_to_index = variable_get('solrsearch_tags_to_index', array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
357 'h1' => 'tags_h1',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
358 'h2' => 'tags_h2_h3',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
359 'h3' => 'tags_h2_h3',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
360 'h4' => 'tags_h4_h5_h6',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
361 'h5' => 'tags_h4_h5_h6',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
362 'h6' => 'tags_h4_h5_h6',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
363 'u' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
364 'b' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
365 'i' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
366 'strong' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
367 'em' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
368 'a' => 'tags_a'
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
369 ));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
370
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
371 // Strip off all ignored tags.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
372 $text = strip_tags($text, '<' . implode('><', array_keys($tags_to_index)) . '>');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
373
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
374 preg_match_all('@<(' . implode('|', array_keys($tags_to_index)) . ')[^>]*>(.*)</\1>@Ui', $text, $matches);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
375 foreach ($matches[1] as $key => $tag) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
376 $tag = drupal_strtolower($tag);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
377 // We don't want to index links auto-generated by the url filter.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
378 if ($tag != 'a' || !preg_match('@(?:http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://|www\.)[a-zA-Z0-9]+@', $matches[2][$key])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
379 if (!isset($document->{$tags_to_index[$tag]})) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
380 $document->{$tags_to_index[$tag]} = '';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
381 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
382 $document->{$tags_to_index[$tag]} .= ' ' . solrsearch_clean_text($matches[2][$key]);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
383 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
384 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
385 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
386
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
387 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
388 * Returns a generic Solr document object for this entity.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
389 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
390 * This function will do the basic processing for the document that is common
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
391 * to all entities, but virtually all entities will need their own additional
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
392 * processing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
393 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
394 * @param object $entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
395 * The entity for which we want a document.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
396 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
397 * The type of entity we're processing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
398 * @return solrsearchDocument
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
399 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
400 function _solrsearch_index_process_entity_get_document($entity, $entity_type) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
401 list($entity_id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
402
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
403 $document = new solrsearchDocument();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
404
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
405 // Define our url options in advance. This differs depending on the
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
406 // language
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
407 $languages = language_list();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
408 $url_options = array('absolute' => TRUE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
409 if (isset($entity->language) && isset($languages[$entity->language])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
410 $url_options = $url_options + array('language' => $languages[$entity->language]);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
411 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
412
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
413 $document->id = solrsearch_document_id($entity_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
414 $document->site = url(NULL, $url_options);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
415 $document->hash = solrsearch_site_hash();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
416
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
417 $document->entity_id = $entity_id;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
418 $document->entity_type = $entity_type;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
419 $document->bundle = $bundle;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
420 $document->bundle_name = entity_bundle_label($entity_type, $bundle);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
421
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
422 if (empty($entity->language)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
423 // 'und' is the language-neutral code in Drupal 7.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
424 $document->language = LANGUAGE_NONE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
425 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
426 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
427 $document->language = $entity->language;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
428 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
429
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
430 $path = entity_uri($entity_type, $entity);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
431 // A path is not a requirement of an entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
432 if (!empty($path)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
433 $document->path = $path['path'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
434 $document->url = url($path['path'], $path['options'] + $url_options);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
435 // Path aliases can have important information about the content.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
436 // Add them to the index as well.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
437 if (function_exists('drupal_get_path_alias')) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
438 // Add any path alias to the index, looking first for language specific
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
439 // aliases but using language neutral aliases otherwise.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
440 $output = drupal_get_path_alias($document->path, $document->language);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
441 if ($output && $output != $document->path) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
442 $document->path_alias = $output;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
443 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
444 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
445 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
446 return $document;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
447 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
448
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
449 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
450 * Returns an array of rows from a query based on an indexing environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
451 * @todo Remove the read only because it is not environment specific
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
452 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
453 * @param $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
454 * @param $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
455 * @param $limit
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
456 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
457 * @return array list of row to index
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
458 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
459 function solrsearch_index_get_entities_to_index($env_id, $entity_type, $limit) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
460 $rows = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
461 if (variable_get('solrsearch_read_only', 0)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
462 return $rows;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
463 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
464 $bundles = solrsearch_get_index_bundles($env_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
465 if (empty($bundles)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
466 return $rows;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
467 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
468
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
469 $table = solrsearch_get_indexer_table($entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
470 // Get $last_entity_id and $last_changed.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
471 $last_index_position = solrsearch_get_last_index_position($env_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
472 $last_entity_id = $last_index_position['last_entity_id'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
473 $last_changed = $last_index_position['last_changed'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
474
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
475 // Find the next batch of entities to index for this entity type. Note that
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
476 // for ordering we're grabbing the oldest first and then ordering by ID so
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
477 // that we get a definitive order.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
478 // Also note that we fetch ALL fields from the indexer table
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
479 $query = db_select($table, 'aie')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
480 ->fields('aie')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
481 ->condition('aie.bundle', $bundles)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
482 ->condition(db_or()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
483 ->condition('aie.changed', $last_changed, '>')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
484 ->condition(db_and()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
485 ->condition('aie.changed', $last_changed, '<=')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
486 ->condition('aie.entity_id', $last_entity_id, '>')))
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
487 ->orderBy('aie.changed', 'ASC')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
488 ->orderBy('aie.entity_id', 'ASC')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
489 ->addTag('solrsearch_index_' . $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
490
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
491 if ($table == 'solrsearch_index_entities') {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
492 // Other, entity-specific tables don't need this condition.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
493 $query->condition('aie.entity_type', $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
494 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
495 $query->range(0, $limit);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
496 $records = $query->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
497
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
498 $status_callbacks = solrsearch_entity_get_callback($entity_type, 'status callback');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
499 foreach ($records as $record) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
500 // Check status and status callbacks before sending to the index
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
501 if (is_array($status_callbacks)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
502 foreach($status_callbacks as $status_callback) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
503 if (is_callable($status_callback)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
504 // by placing $status in front we prevent calling any other callback
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
505 // after one status callback returned false
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
506 $record->status = $record->status && $status_callback($record->entity_id, $record->entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
507 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
508 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
509 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
510 $rows[] = $record;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
511 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
512 return $rows;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
513 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
514
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
515 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
516 * Delete the whole index for an environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
517 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
518 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
519 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
520 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
521 * (optional) specify to remove just this entity_type from the index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
522 * @param string $bundle
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
523 * (optional) also specify a bundle to remove just the bundle from
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
524 * the index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
525 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
526 function solrsearch_index_delete_index($env_id, $entity_type = NULL, $bundle = NULL) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
527 // Instantiate a new Solr object.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
528 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
529 $solr = solrsearch_get_solr($env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
530 $query = '*:*';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
531
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
532 if (!empty($entity_type) && !empty($bundle)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
533 $query = "(bundle:$bundle AND entity_type:$entity_type) OR sm_parent_entity_bundle:{$entity_type}-{$bundle}";
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
534 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
535 elseif (!empty($bundle)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
536 $query = "(bundle:$bundle)";
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
537 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
538
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
539 // Allow other modules to modify the delete query.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
540 // For example, use the site hash so that you only delete this site's
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
541 // content: $query = 'hash:' . solrsearch_site_hash()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
542 drupal_alter('solrsearch_delete_by_query', $query);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
543 $solr->deleteByQuery($query);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
544 $solr->commit();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
545
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
546 if (!empty($entity_type)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
547 $rebuild_callback = solrsearch_entity_get_callback($entity_type, 'reindex callback');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
548 if (is_callable($rebuild_callback)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
549 $rebuild_callback($env_id, $bundle);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
550 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
551 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
552 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
553 solrsearch_index_mark_for_reindex($env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
554 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
555
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
556 solrsearch_set_last_index_updated($env_id, REQUEST_TIME);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
557 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
558 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
559 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
560 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
561 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
562
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
563 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
564 * Delete from the index documents with the entity type and any of the excluded bundles.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
565 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
566 * Also deletes all documents that have the entity type and bundle as a parent.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
567 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
568 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
569 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
570 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
571 * @param array $excluded_bundles
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
572 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
573 * @return true on success, false on failure.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
574 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
575 function solrsearch_index_delete_bundles($env_id, $entity_type, array $excluded_bundles) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
576 // Remove newly omitted bundles.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
577 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
578 $solr = solrsearch_get_solr($env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
579 foreach ($excluded_bundles as $bundle) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
580 $query = "(bundle:$bundle AND entity_type:$entity_type) OR sm_parent_entity_bundle:{$entity_type}-{$bundle}";
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
581
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
582 // Allow other modules to modify the delete query.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
583 // For example, use the site hash so that you only delete this site's
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
584 // content: $query = 'hash:' . solrsearch_site_hash()
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
585 drupal_alter('solrsearch_delete_by_query', $query);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
586 $solr->deleteByQuery($query);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
587 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
588 if ($excluded_bundles) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
589 $solr->commit();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
590 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
591 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
592 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
593 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
594 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
595 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
596 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
597 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
598
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
599 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
600 * Delete an entity from the index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
601 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
602 * Also deletes all documents that have the deleted document as a parent.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
603 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
604 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
605 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
606 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
607 * @param string $entity_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
608 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
609 * @return true on success, false on failure.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
610 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
611 function solrsearch_index_delete_entity_from_index($env_id, $entity_type, $entity_id) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
612 static $failed = FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
613 if ($failed) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
614 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
615 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
616 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
617 $solr = solrsearch_get_solr($env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
618 $document_id = solrsearch_document_id($entity_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
619 $query = "id:\"$document_id\" OR sm_parent_document_id:\"$document_id\"";
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
620 $solr->deleteByQuery($query);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
621 solrsearch_set_last_index_updated($env_id, REQUEST_TIME);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
622 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
623 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
624 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
625 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
626 // Don't keep trying queries if they are failing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
627 $failed = TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
628 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
629 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
630 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
631
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
632 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
633 * Mark a certain entity type for a specific environment for reindexing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
634 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
635 * @param $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
636 * @param null $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
637 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
638 function solrsearch_index_mark_for_reindex($env_id, $entity_type = NULL) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
639 foreach (entity_get_info() as $type => $entity_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
640 if (($type == $entity_type) || ($entity_type == NULL)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
641 if (isset($entity_info['solrsearch']) && ($entity_info['solrsearch']['indexable'])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
642 $reindex_callback = solrsearch_entity_get_callback($type, 'reindex callback');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
643 if (!empty($reindex_callback)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
644 call_user_func($reindex_callback, $env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
645 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
646 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
647 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
648 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
649 solrsearch_clear_last_index_position($env_id, $entity_type);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
650 cache_clear_all('*', 'cache_solrsearch', TRUE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
651 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
652
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
653 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
654 * Sets what bundles on the specified entity type should be indexed.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
655 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
656 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
657 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
658 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
659 * The entity type to index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
660 * @param array $bundles
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
661 * The machine names of the bundles to index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
662 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
663 * @throws Exception
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
664 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
665 function solrsearch_index_set_bundles($env_id, $entity_type, array $bundles) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
666 $transaction = db_transaction();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
667 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
668 db_delete('solrsearch_index_bundles')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
669 ->condition('env_id', $env_id)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
670 ->condition('entity_type', $entity_type)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
671 ->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
672
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
673 if ($bundles) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
674 $insert = db_insert('solrsearch_index_bundles')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
675 ->fields(array('env_id', 'entity_type', 'bundle'));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
676
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
677 foreach ($bundles as $bundle) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
678 $insert->values(array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
679 'env_id' => $env_id,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
680 'entity_type' => $entity_type,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
681 'bundle' => $bundle,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
682 ));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
683 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
684 $insert->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
685 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
686 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
687 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
688 $transaction->rollback();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
689 // Re-throw the exception so we are aware of the failure.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
690 throw $e;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
691 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
692 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
693
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
694 // This really should be in core, but it isn't yet. When it gets added to core,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
695 // we can remove this version.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
696 // @see http://drupal.org/node/969180
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
697 if (!function_exists('entity_bundle_label')) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
698
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
699 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
700 * Returns the label of a bundle.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
701 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
702 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
703 * The entity type; e.g. 'node' or 'user'.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
704 * @param string $bundle_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
705 * The bundle for which we want the label from
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
706 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
707 * @return
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
708 * A string with the human-readable name of the bundle, or FALSE if not specified.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
709 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
710 function entity_bundle_label($entity_type, $bundle_name) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
711 $labels = &drupal_static(__FUNCTION__, array());
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
712
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
713 if (empty($labels)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
714 foreach (entity_get_info() as $type => $info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
715 foreach ($info['bundles'] as $bundle => $bundle_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
716 $labels[$type][$bundle] = !empty($bundle_info['label']) ? $bundle_info['label'] : FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
717 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
718 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
719 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
720
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
721 return $labels[$entity_type][$bundle_name];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
722 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
723
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
724 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
725
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
726 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
727 * Builds the node-specific information for a Solr document.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
728 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
729 * @param solrsearchDocument $document
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
730 * The Solr document we are building up.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
731 * @param object $node
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
732 * The entity we are indexing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
733 * @param string $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
734 * The type of entity we're dealing with.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
735 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
736 * The type of entity we're dealing with.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
737 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
738 * @return array A set of solrsearchDocument documents
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
739 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
740 function solrsearch_index_node_solr_document(solrsearchDocument $document, $node, $entity_type, $env_id) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
741 // None of these get added unless they are explicitly in our schema.xml
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
742 $document->label = solrsearch_clean_text($node->title);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
743
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
744 // Build the node body.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
745 $build = node_view($node, 'search_index', !empty($node->language) ? $node->language : LANGUAGE_NONE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
746 // Remove useless html crap out of the render.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
747 unset($build['#theme']);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
748 $text = drupal_render($build);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
749 $document->content = solrsearch_clean_text($text);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
750
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
751 // Adding the teaser
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
752 if (isset($node->teaser)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
753 $document->teaser = solrsearch_clean_text($node->teaser);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
754 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
755 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
756 $document->teaser = truncate_utf8($document->content, 300, TRUE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
757 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
758
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
759 // Path aliases can have important information about the content.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
760 // Add them to the index as well.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
761 if (function_exists('drupal_get_path_alias')) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
762 // Add any path alias to the index, looking first for language specific
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
763 // aliases but using language neutral aliases otherwise.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
764 $language = empty($node->language) ? NULL : $node->language;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
765 $path = 'node/' . $node->nid;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
766 $output = drupal_get_path_alias($path, $language);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
767 if ($output && $output != $path) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
768 $document->path_alias = $output;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
769 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
770 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
771
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
772 // Author information
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
773 $document->ss_name = $node->name;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
774 // We want the name to be searchable for keywords.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
775 $document->tos_name = $node->name;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
776
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
777 // Index formatted username so it can be searched and sorted on.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
778 $account = (object) array('uid' => $node->uid, 'name' => $node->name);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
779 $username = format_username($account);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
780 $document->ss_name_formatted = $username;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
781 $document->tos_name_formatted = $username;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
782 $document->is_uid = $node->uid;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
783 $document->bs_status = $node->status;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
784 $document->bs_sticky = $node->sticky;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
785 $document->bs_promote = $node->promote;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
786 $document->is_tnid = $node->tnid;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
787 $document->bs_translate = $node->translate;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
788
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
789 // Language specific checks
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
790 if (empty($node->language)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
791 // 'und' is the language-neutral code in Drupal 7.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
792 $document->ss_language = LANGUAGE_NONE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
793 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
794 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
795 $document->ss_language = $node->language;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
796 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
797
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
798 // Timestamp of the node
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
799 $document->ds_created = solrsearch_date_iso($node->created);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
800 $document->ds_changed = solrsearch_date_iso($node->changed);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
801
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
802 // Comment counts + time
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
803 if (isset($node->last_comment_timestamp) && !empty($node->comment_count)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
804 $document->ds_last_comment_timestamp = solrsearch_date_iso($node->last_comment_timestamp);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
805 $document->ds_last_comment_or_change = solrsearch_date_iso(max($node->last_comment_timestamp, $node->changed));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
806 $document->is_comment_count = $node->comment_count;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
807 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
808 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
809 $document->ds_last_comment_or_change = solrsearch_date_iso($node->changed);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
810 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
811
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
812 // Fetch extra data normally not visible, including comments.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
813 // We do this manually (with module_implements instead of node_invoke_nodeapi)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
814 // because we want a keyed array to come back. Only in this way can we decide
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
815 // whether to index comments or not.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
816 $extra = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
817 $excludes = variable_get('solrsearch_exclude_nodeapi_types', array());
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
818 $exclude_nodeapi = isset($excludes[$node->type]) ? $excludes[$node->type] : array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
819
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
820 foreach (module_implements('node_update_index') as $module) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
821 // Invoke nodeapi if this module has not been excluded, for example,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
822 // exclude 'comment' for a type to skip indexing its comments.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
823 if (empty($exclude_nodeapi[$module])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
824 $function = $module . '_node_update_index';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
825 if ($output = $function($node)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
826 $extra[$module] = $output;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
827 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
828 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
829 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
830
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
831 // Adding the text of the comments
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
832 if (isset($extra['comment'])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
833 $comments = $extra['comment'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
834 // Remove comments from the extra fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
835 unset($extra['comment']);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
836 $document->ts_comments = solrsearch_clean_text($comments);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
837 // @todo: do we want to reproduce solrsearch_add_tags_to_document() for comments?
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
838 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
839 // If there are other extra fields, add them to the document
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
840 if (!empty($extra)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
841 // Use an omit-norms text field since this is generally going to be short; not
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
842 // really a full-text field.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
843 $document->tos_content_extra = solrsearch_clean_text(implode(' ', $extra));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
844 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
845
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
846 // Generic use case for future reference. Callbacks can
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
847 // allow you to send back multiple documents
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
848 $documents = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
849 $documents[] = $document;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
850 return $documents;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
851 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
852
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
853 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
854 * Function that will be executed if the node bundles were updated.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
855 * Currently it does nothing, but it could potentially do something later on.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
856 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
857 * @param $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
858 * @param $existing_bundles
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
859 * @param $new_bundles
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
860 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
861 function solrsearch_index_node_bundles_changed($env_id, $existing_bundles, $new_bundles) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
862 // Nothing to do for now.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
863 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
864
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
865 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
866 * Reindexing callback for solrsearch, for nodes.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
867 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
868 * @param string $env_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
869 * The machine name of the environment.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
870 * @param string|null $bundle
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
871 * (optional) The bundle type to reindex. If not used
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
872 * all bundles will be re-indexed.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
873 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
874 * @return null
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
875 * returns NULL if the specified bundle is not in the indexable bundles list
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
876 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
877 * @throws Exception
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
878 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
879 function solrsearch_index_node_solr_reindex($env_id, $bundle = NULL) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
880 $indexer_table = solrsearch_get_indexer_table('node');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
881 $transaction = db_transaction();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
882 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
883 $indexable_bundles = solrsearch_get_index_bundles($env_id, 'node');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
884
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
885 if ($bundle && !empty($indexable_bundles) && !in_array($bundle, $indexable_bundles)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
886 // The bundle specified is not in the indexable bundles list.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
887 return NULL;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
888 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
889
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
890 // Leave status 0 rows - those need to be
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
891 // removed from the index later.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
892 $delete = db_delete($indexer_table);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
893 $delete->condition('status', 1);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
894
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
895 if (!empty($bundle)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
896 $delete->condition('bundle', $bundle);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
897 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
898 elseif (!empty($indexable_bundles)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
899 $delete->condition('bundle', $indexable_bundles, 'IN');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
900 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
901
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
902 $delete->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
903
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
904 $select = db_select('node', 'n');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
905 $select->condition('status', 1);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
906 $select->addExpression("'node'", 'entity_type');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
907 $select->addField('n', 'nid', 'entity_id');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
908 $select->addField('n', 'type', 'bundle');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
909 $select->addField('n', 'status', 'status');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
910 $select->addExpression(REQUEST_TIME, 'changed');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
911
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
912 if ($bundle) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
913 // Mark all nodes of the specified content type for reindexing.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
914 $select->condition('n.type', $bundle);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
915 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
916 elseif (!empty($indexable_bundles)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
917 // Restrict reindex to content types in the indexable bundles list.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
918 $select->condition('n.type', $indexable_bundles, 'IN');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
919 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
920
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
921 $insert = db_insert($indexer_table)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
922 ->fields(array('entity_id', 'bundle', 'status', 'entity_type', 'changed'))
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
923 ->from($select)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
924 ->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
925 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
926 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
927 $transaction->rollback();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
928 throw $e;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
929 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
930 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
931
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
932 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
933 * Status callback for solrsearch, for nodes.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
934 * after indexing a certain amount of nodes
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
935 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
936 * @param $entity_id
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
937 * @param $entity_type
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
938 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
939 * @return int
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
940 * The status of the node
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
941 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
942 function solrsearch_index_node_status_callback($entity_id, $entity_type) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
943 // Make sure we have a boolean value.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
944 // Anything different from 1 becomes zero
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
945 $entity = entity_load($entity_type, array($entity_id));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
946 $entity = $entity ? reset($entity) : FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
947
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
948 if (empty($entity)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
949 // If the object failed to load, just stop.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
950 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
951 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
952 $status = ($entity->status == 1 ? 1 : 0);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
953 return $status;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
954 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
955
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
956 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
957 * Callback that converts term_reference field into an array
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
958 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
959 * @param object $node
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
960 * @param string $field_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
961 * @param string $index_key
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
962 * @param array $field_info
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
963 * @return array $fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
964 * fields that will be indexed for this term reference
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
965 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
966 function solrsearch_term_reference_indexing_callback($node, $field_name, $index_key, array $field_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
967 // Keep ancestors cached
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
968 $ancestors = &drupal_static(__FUNCTION__, array());
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
969
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
970 $fields = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
971 $vocab_names = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
972 if (!empty($node->{$field_name}) && function_exists('taxonomy_get_parents_all')) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
973 $field = $node->$field_name;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
974 list($lang, $items) = each($field);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
975 foreach ($items as $item) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
976 // Triple indexing of tids lets us do efficient searches (on tid)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
977 // and do accurate per field or per-vocabulary faceting.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
978
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
979 // By including the ancestors to a term in the index we make
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
980 // sure that searches for general categories match specific
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
981 // categories, e.g. Fruit -> apple, a search for fruit will find
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
982 // content categorized with apple.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
983 if (!isset($ancestors[$item['tid']])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
984 $ancestors[$item['tid']] = taxonomy_get_parents_all($item['tid']);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
985 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
986 foreach ($ancestors[$item['tid']] as $ancestor) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
987 // Index parent term against the field. Note that this happens
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
988 // regardless of whether the facet is set to show as a hierarchy or not.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
989 // We would need a separate field if we were to index terms without any
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
990 // hierarchy at all.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
991 // If the term is singular, then we cannot add another value to the
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
992 // document as the field is single
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
993 if ($field_info['multiple'] == true) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
994 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
995 'key' => $index_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
996 'value' => $ancestor->tid,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
997 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
998 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
999 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1000 'key' => 'tid',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1001 'value' => $ancestor->tid,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1002 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1003 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1004 'key' => 'im_vid_' . $ancestor->vid,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1005 'value' => $ancestor->tid,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1006 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1007 $name = solrsearch_clean_text($ancestor->name);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1008 $vocab_names[$ancestor->vid][] = $name;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1009 // We index each name as a string for cross-site faceting
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1010 // using the vocab name rather than vid in field construction .
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1011 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1012 'key' => 'sm_vid_' . solrsearch_vocab_name($ancestor->vid),
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1013 'value' => $name,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1014 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1015 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1016 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1017 // Index the term names into a text field for MLT queries and keyword searching.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1018 foreach ($vocab_names as $vid => $names) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1019 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1020 'key' => 'tm_vid_' . $vid . '_names',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1021 'value' => implode(' ', $names),
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1022 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1023 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1024 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1025 return $fields;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1026 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1027
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1028 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1029 * Helper function - return a safe (PHP identifier) vocabulary name.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1030 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1031 * @param integer $vid
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1032 * @return string
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1033 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1034 function solrsearch_vocab_name($vid) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1035 $names = &drupal_static(__FUNCTION__, array());
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1036
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1037 if (!isset($names[$vid])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1038 $vocab_name = db_query('SELECT v.name FROM {taxonomy_vocabulary} v WHERE v.vid = :vid', array(':vid' => $vid))->fetchField();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1039 $names[$vid] = preg_replace('/[^a-zA-Z0-9_\x7f-\xff]/', '_', $vocab_name);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1040 // Fallback for names ending up all as '_'.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1041 $check = rtrim($names[$vid], '_');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1042 if (!$check) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1043 $names[$vid] = '_' . $vid . '_';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1044 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1045 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1046 return $names[$vid];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1047 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1048
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1049 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1050 * Callback that converts list module field into an array
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1051 * For every multivalued value we also add a single value to be able to
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1052 * use the stats
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1053 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1054 * @param object $entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1055 * @param string $field_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1056 * @param string $index_key
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1057 * @param array $field_info
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1058 * @return array $fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1059 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1060 function solrsearch_fields_default_indexing_callback($entity, $field_name, $index_key, array $field_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1061 $fields = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1062 $numeric = TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1063 if (!empty($entity->{$field_name})) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1064 $field = $entity->$field_name;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1065 list($lang, $values) = each($field);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1066 switch ($field_info['index_type']) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1067 case 'integer':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1068 case 'half-int':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1069 case 'sint':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1070 case 'tint':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1071 case 'thalf-int':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1072 case 'boolean':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1073 $function = 'intval';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1074 break;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1075 case 'float':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1076 case 'double':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1077 case 'sfloat':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1078 case 'sdouble':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1079 case 'tfloat':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1080 case 'tdouble':
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1081 $function = 'solrsearch_floatval';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1082 break;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1083 default:
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1084 $numeric = FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1085 $function = 'solrsearch_clean_text';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1086 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1087 for ($i = 0; $i < count($values); $i++) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1088 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1089 'key' => $index_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1090 'value' => $function($values[$i]['value']),
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1091 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1092 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1093 // Also store the first value of the field in a singular index for multi value fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1094 if ($field_info['multiple'] && $numeric && !empty($values[0])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1095 $singular_field_info = $field_info;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1096 $singular_field_info['multiple'] = FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1097 $single_key = solrsearch_index_key($singular_field_info);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1098 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1099 'key' => $single_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1100 'value' => $function($values[0]['value']),
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1101 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1102 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1103 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1104 return $fields;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1105 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1106
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1107 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1108 * This function is used during indexing to normalize the DATE and DATETIME
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1109 * fields into the appropriate format for Apache Solr.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1110 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1111 * @param object $entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1112 * @param string $field_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1113 * @param string $index_key
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1114 * @param array $field_info
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1115 * @return array $fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1116 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1117 function solrsearch_date_default_indexing_callback($entity, $field_name, $index_key, array $field_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1118 $fields = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1119 if (!empty($entity->{$field_name})) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1120 $field = $entity->$field_name;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1121 list($lang, $values) = each($field);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1122 // Construct a Solr-ready date string in UTC time zone based on the field's date string and time zone.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1123 $tz = new DateTimeZone(isset($field['timezone']) ? $field['timezone'] : 'UTC');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1124
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1125 // $fields may end up having two values; one for the start date
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1126 // and one for the end date.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1127 foreach ($values as $value) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1128 if ($date = date_create($value['value'], $tz)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1129 $index_value = solrsearch_date_iso($date->format('U'));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1130 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1131 'key' => $index_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1132 'value' => $index_value,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1133 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1134 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1135
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1136 if (isset($value['value2'])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1137 if ($date = date_create($value['value2'], $tz)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1138 $index_value = solrsearch_date_iso($date->format('U'));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1139 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1140 // The value2 element is the end date. Therefore it gets indexed
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1141 // into its own Solr field.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1142 'key' => $index_key . '_end',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1143 'value' => $index_value,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1144 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1145 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1146 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1147 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1148 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1149 return $fields;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1150 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1151
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1152 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1153 * This function is used during indexing to normalize the DATESTAMP fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1154 * into the appropriate format for Apache Solr.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1155 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1156 * @param object $entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1157 * @param string $field_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1158 * @param string $index_key
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1159 * @param array $field_info
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1160 * @return array $fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1161 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1162 function solrsearch_datestamp_default_indexing_callback($entity, $field_name, $index_key, array $field_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1163 $fields = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1164 if (!empty($entity->{$field_name})) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1165 // $fields may end up having two values; one for the start date
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1166 // and one for the end date.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1167 $field = $entity->$field_name;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1168 list($lang, $values) = each($field);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1169
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1170 foreach ($values as $value) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1171 if (isset($value['value']) && $value['value'] != 0) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1172 $index_value = solrsearch_date_iso($value['value']);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1173 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1174 'key' => $index_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1175 'value' => $index_value,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1176 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1177 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1178 if (isset($value['value2']) && $value['value'] != 0) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1179 $index_value = solrsearch_date_iso($value['value2']);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1180 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1181 // The value2 element is the end date. Therefore it gets indexed
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1182 // into its own Solr field.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1183 'key' => $index_key . '_end',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1184 'value' => $index_value,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1185 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1186 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1187 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1188 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1189 return $fields;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1190 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1191
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1192 function solrsearch_floatval($value) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1193 return sprintf('%0.20f', $value);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1194 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1195
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1196 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1197 * Indexing callback for the node_reference module
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1198 * by the references module
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1199 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1200 * @param object $entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1201 * @param string $field_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1202 * @param string $index_key
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1203 * @param array $field_info
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1204 * @return array $fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1205 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1206 function solrsearch_nodereference_indexing_callback($entity, $field_name, $index_key, array $field_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1207 $fields = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1208 if (!empty($entity->{$field_name})) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1209 $index_key = solrsearch_index_key($field_info);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1210 foreach ($entity->$field_name as $field_references) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1211 foreach ($field_references as $reference) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1212 if ($index_value = (!empty($reference['nid'])) ? $reference['nid'] : FALSE) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1213 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1214 'key' => $index_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1215 'value' => $index_value,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1216 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1217 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1218 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1219 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1220 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1221 return $fields;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1222 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1223
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1224 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1225 * Indexing callback for the user_reference module
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1226 * by the references module
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1227 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1228 * @param object $entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1229 * @param string $field_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1230 * @param string $index_key
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1231 * @param array $field_info
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1232 * @return array $fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1233 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1234 function solrsearch_userreference_indexing_callback($entity, $field_name, $index_key, array $field_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1235 $fields = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1236 if (!empty($entity->$field_name)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1237 $index_key = solrsearch_index_key($field_info);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1238 foreach ($entity->$field_name as $field_references) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1239 foreach ($field_references as $reference) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1240 if ($index_value = (isset($reference['uid']) && strlen($reference['uid'])) ? $reference['uid'] : FALSE) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1241 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1242 'key' => $index_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1243 'value' => $index_value,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1244 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1245 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1246 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1247 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1248 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1249 return $fields;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1250 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1251
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1252 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1253 * Indexing callback for entityreference fields.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1254 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1255 * @param object $entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1256 * @param string $field_name
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1257 * @param string $index_key
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1258 * @param array $field_info
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1259 * @return array $fields
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1260 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1261 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1262 function solrsearch_entityreference_indexing_callback($entity, $field_name, $index_key, $field_info) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1263 $fields = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1264 if (!empty($entity->{$field_name})) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1265
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1266 // Gets entity type and index key. We need to prefix the ID with the entity
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1267 // type so we know what entity we are dealing with in the mapping callback.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1268 $entity_type = $field_info['field']['settings']['target_type'];
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1269 $index_key = solrsearch_index_key($field_info);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1270
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1271 // Iterates over all references and adds them to the fields.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1272 foreach ($entity->$field_name as $entity_references) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1273 foreach ($entity_references as $reference) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1274 if ($id = (!empty($reference['target_id'])) ? $reference['target_id'] : FALSE) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1275 $fields[] = array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1276 'key' => $index_key,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1277 'value' => $entity_type . ':' . $id,
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1278 );
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1279 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1280 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1281 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1282 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1283 return $fields;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1284 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1285
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1286 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1287 * Extract HTML tag contents from $text and add to boost fields.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1288 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1289 * $text must be stripped of control characters before hand.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1290 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1291 * @param solrsearchDocument $document
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1292 * @param type $text
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1293 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1294 function solrsearch_add_tags_to_document(solrsearchDocument $document, $text) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1295 $tags_to_index = variable_get('solrsearch_tags_to_index', array(
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1296 'h1' => 'tags_h1',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1297 'h2' => 'tags_h2_h3',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1298 'h3' => 'tags_h2_h3',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1299 'h4' => 'tags_h4_h5_h6',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1300 'h5' => 'tags_h4_h5_h6',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1301 'h6' => 'tags_h4_h5_h6',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1302 'u' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1303 'b' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1304 'i' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1305 'strong' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1306 'em' => 'tags_inline',
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1307 'a' => 'tags_a'
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1308 ));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1309
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1310 // Strip off all ignored tags.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1311 $text = strip_tags($text, '<' . implode('><', array_keys($tags_to_index)) . '>');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1312
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1313 preg_match_all('@<(' . implode('|', array_keys($tags_to_index)) . ')[^>]*>(.*)</\1>@Ui', $text, $matches);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1314 foreach ($matches[1] as $key => $tag) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1315 $tag = strtolower($tag);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1316 // We don't want to index links auto-generated by the url filter.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1317 if ($tag != 'a' || !preg_match('@(?:http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://|www\.)[a-zA-Z0-9]+@', $matches[2][$key])) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1318 if (!isset($document->{$tags_to_index[$tag]})) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1319 $document->{$tags_to_index[$tag]} = '';
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1320 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1321 $document->{$tags_to_index[$tag]} .= ' ' . solrsearch_clean_text($matches[2][$key]);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1322 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1323 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1324 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1325
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1326 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1327 * hook_cron() helper to try to make the index table consistent with their
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1328 * respective entity table.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1329 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1330 function solrsearch_index_node_check_table() {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1331 // Check for unpublished content that wasn't deleted from the index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1332 $table = solrsearch_get_indexer_table('node');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1333 // We do not check more nodes than double the cron limit per time
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1334 // Update or delete at most this many in each Solr query.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1335 $limit = variable_get('solrsearch_cron_mass_limit', 500);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1336 $query = db_select($table, 'aien')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1337 ->fields('n', array('nid', 'status'))
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1338 ->where('aien.status <> n.status')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1339 ->range(0, ($limit * 2))
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1340 ->addTag('solrsearch_index_node');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1341 $query->innerJoin('node', 'n', 'n.nid = aien.entity_id');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1342 $nodes = $query->execute()->fetchAllAssoc('nid');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1343
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1344 $node_lists = array_chunk($nodes, $limit, TRUE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1345 foreach ($node_lists as $nodes) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1346 watchdog('Apache Solr', 'On cron running solrsearch_nodeapi_mass_update() on nids @nids', array('@nids' => implode(',', array_keys($nodes))), WATCHDOG_NOTICE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1347 if (!solrsearch_index_nodeapi_mass_update($nodes, $table)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1348 // Solr query failed - so stop trying.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1349 break;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1350 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1351 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1352
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1353 // Check for deleted content that wasn't deleted from the index.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1354 $query = db_select($table, 'aien')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1355 ->isNull('n.nid')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1356 ->range(0, ($limit*2));
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1357 $query->addExpression('aien.entity_id', 'nid');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1358 $query->leftJoin('node', 'n', 'n.nid = aien.entity_id');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1359 $nodes = $query->execute()->fetchAllAssoc('nid');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1360 $node_lists = array_chunk($nodes, $limit, TRUE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1361
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1362 foreach ($node_lists as $nodes) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1363 watchdog('Apache Solr', 'On cron running solrsearch_nodeapi_mass_delete() on nids @nids', array('@nids' => implode(',', array_keys($nodes))), WATCHDOG_NOTICE);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1364 if (!solrsearch_index_nodeapi_mass_delete($nodes, $table)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1365 // Solr query failed - so stop trying.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1366 break;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1367 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1368 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1369 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1370
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1371 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1372 * Mass Update nodes from the solr indexer table
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1373 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1374 * @param array $nodes
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1375 * @param string $table
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1376 * @return boolean
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1377 * true if we mass updated, false if failed
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1378 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1379 function solrsearch_index_nodeapi_mass_update(array $nodes, $table = NULL) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1380 if (empty($nodes)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1381 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1382 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1383 if (empty($table)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1384 $table = solrsearch_get_indexer_table('node');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1385 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1386
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1387 if (solrsearch_environment_variable_get(solrsearch_default_environment(), 'solrsearch_read_only', solrsearch_READ_WRITE) == solrsearch_READ_ONLY) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1388 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1389 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1390
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1391 $published_ids = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1392 $unpublished_ids = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1393 foreach ($nodes as $node) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1394 if ($node->status) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1395 $published_ids[$node->nid] = solrsearch_document_id($node->nid);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1396 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1397 else {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1398 $unpublished_ids[$node->nid] = solrsearch_document_id($node->nid);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1399 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1400 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1401 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1402 $env_id = solrsearch_default_environment();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1403 $solr = solrsearch_get_solr($env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1404 $solr->deleteByMultipleIds($unpublished_ids);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1405 solrsearch_set_last_index_updated($env_id, REQUEST_TIME);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1406
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1407 // There was no exception, so update the table.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1408 if ($published_ids) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1409 db_update($table)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1410 ->fields(array('changed' => REQUEST_TIME, 'status' => 1))
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1411 ->condition('entity_id', array_keys($published_ids), 'IN')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1412 ->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1413 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1414 if ($unpublished_ids) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1415 db_update($table)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1416 ->fields(array('changed' => REQUEST_TIME, 'status' => 0))
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1417 ->condition('entity_id', array_keys($unpublished_ids), 'IN')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1418 ->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1419 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1420 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1421 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1422 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1423 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1424 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1425 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1426 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1427
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1428 /**
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1429 * Mass delete nodes from the solr indexer tables.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1430 *
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1431 * @param array $nodes
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1432 * @param string $table
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1433 * @return boolean
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1434 * true if we mass updated, false if failed
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1435 */
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1436 function solrsearch_index_nodeapi_mass_delete(array $nodes, $table = NULL) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1437 if (empty($nodes)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1438 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1439 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1440 if (empty($table)) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1441 $table = solrsearch_get_indexer_table('node');
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1442 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1443
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1444 if (solrsearch_environment_variable_get(solrsearch_default_environment(), 'solrsearch_read_only', solrsearch_READ_WRITE) == solrsearch_READ_ONLY) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1445 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1446 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1447
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1448 $ids = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1449 $nids = array();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1450 foreach ($nodes as $node) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1451 $ids[] = solrsearch_document_id($node->nid);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1452 $nids[] = $node->nid;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1453 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1454 try {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1455 $env_id = solrsearch_default_environment();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1456 $solr = solrsearch_get_solr($env_id);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1457 $solr->deleteByMultipleIds($ids);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1458 solrsearch_set_last_index_updated($env_id, REQUEST_TIME);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1459 // There was no exception, so update the table.
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1460 db_delete($table)
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1461 ->condition('entity_id', $nids, 'IN')
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1462 ->execute();
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1463 return TRUE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1464 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1465 catch (Exception $e) {
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1466 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1467 return FALSE;
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1468 }
a2b4f67e73dc initial
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents:
diff changeset
1469 }