annotate sites/all/modules/custom/solrsearch/apachesolr.admin.inc @ 0:015d06b10d37 default tip

initial
author dwinter
date Wed, 31 Jul 2013 13:49:13 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
015d06b10d37 initial
dwinter
parents:
diff changeset
1 <?php
015d06b10d37 initial
dwinter
parents:
diff changeset
2
015d06b10d37 initial
dwinter
parents:
diff changeset
3 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
4 * @file
015d06b10d37 initial
dwinter
parents:
diff changeset
5 * Administrative pages for the Apache Solr framework.
015d06b10d37 initial
dwinter
parents:
diff changeset
6 */
015d06b10d37 initial
dwinter
parents:
diff changeset
7
015d06b10d37 initial
dwinter
parents:
diff changeset
8 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
9 * Form to delete a search environment
015d06b10d37 initial
dwinter
parents:
diff changeset
10 *
015d06b10d37 initial
dwinter
parents:
diff changeset
11 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
12 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
13 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
14 *
015d06b10d37 initial
dwinter
parents:
diff changeset
15 * @return array output of confirm_form()
015d06b10d37 initial
dwinter
parents:
diff changeset
16 */
015d06b10d37 initial
dwinter
parents:
diff changeset
17 function apachesolr_environment_delete_form(array $form, array &$form_state, array $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
18 $form['env_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
19 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
20 '#value' => $environment['env_id'],
015d06b10d37 initial
dwinter
parents:
diff changeset
21 );
015d06b10d37 initial
dwinter
parents:
diff changeset
22 if (isset($environment['export_type']) && $environment['export_type'] == 3) {
015d06b10d37 initial
dwinter
parents:
diff changeset
23 $verb = t('Revert');
015d06b10d37 initial
dwinter
parents:
diff changeset
24 }
015d06b10d37 initial
dwinter
parents:
diff changeset
25 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
26 $verb = t('Delete');
015d06b10d37 initial
dwinter
parents:
diff changeset
27 }
015d06b10d37 initial
dwinter
parents:
diff changeset
28 return confirm_form(
015d06b10d37 initial
dwinter
parents:
diff changeset
29 $form,
015d06b10d37 initial
dwinter
parents:
diff changeset
30 t('Are you sure you want to !verb search environment %name?', array('%name' => $environment['name'], '!verb' => strtolower($verb))),
015d06b10d37 initial
dwinter
parents:
diff changeset
31 'admin/config/search/apachesolr',
015d06b10d37 initial
dwinter
parents:
diff changeset
32 t('This action cannot be undone.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
33 $verb,
015d06b10d37 initial
dwinter
parents:
diff changeset
34 t('Cancel')
015d06b10d37 initial
dwinter
parents:
diff changeset
35 );
015d06b10d37 initial
dwinter
parents:
diff changeset
36 }
015d06b10d37 initial
dwinter
parents:
diff changeset
37
015d06b10d37 initial
dwinter
parents:
diff changeset
38 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
39 * Submit handler for the delete form
015d06b10d37 initial
dwinter
parents:
diff changeset
40 *
015d06b10d37 initial
dwinter
parents:
diff changeset
41 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
42 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
43 */
015d06b10d37 initial
dwinter
parents:
diff changeset
44 function apachesolr_environment_delete_form_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
45 if (apachesolr_environment_delete($form_state['values']['env_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
46 drupal_set_message(t('The search environment was deleted'));
015d06b10d37 initial
dwinter
parents:
diff changeset
47 }
015d06b10d37 initial
dwinter
parents:
diff changeset
48 $form_state['redirect'] = 'admin/config/search/apachesolr/settings';
015d06b10d37 initial
dwinter
parents:
diff changeset
49 }
015d06b10d37 initial
dwinter
parents:
diff changeset
50
015d06b10d37 initial
dwinter
parents:
diff changeset
51 function apachesolr_environment_edit_delete_submit($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
52 $form_state['redirect'] = 'admin/config/search/apachesolr/settings/' . $form_state['values']['env_id'] . '/delete';
015d06b10d37 initial
dwinter
parents:
diff changeset
53
015d06b10d37 initial
dwinter
parents:
diff changeset
54 // Regardlessly of the destination parameter we want to go to another page
015d06b10d37 initial
dwinter
parents:
diff changeset
55 unset($_GET['destination']);
015d06b10d37 initial
dwinter
parents:
diff changeset
56 drupal_static_reset('drupal_get_destination');
015d06b10d37 initial
dwinter
parents:
diff changeset
57 drupal_get_destination();
015d06b10d37 initial
dwinter
parents:
diff changeset
58 }
015d06b10d37 initial
dwinter
parents:
diff changeset
59
015d06b10d37 initial
dwinter
parents:
diff changeset
60 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
61 * Settings page for a specific environment (or default one if not provided)
015d06b10d37 initial
dwinter
parents:
diff changeset
62 *
015d06b10d37 initial
dwinter
parents:
diff changeset
63 * @param array|bool $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
64 *
015d06b10d37 initial
dwinter
parents:
diff changeset
65 * @return array Render array for a settings page
015d06b10d37 initial
dwinter
parents:
diff changeset
66 */
015d06b10d37 initial
dwinter
parents:
diff changeset
67 function apachesolr_environment_settings_page(array $environment = array()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
68 if (empty($environment)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
69 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
70 $environment = apachesolr_environment_load($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
71 }
015d06b10d37 initial
dwinter
parents:
diff changeset
72 $env_id = $environment['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
73
015d06b10d37 initial
dwinter
parents:
diff changeset
74 // Initializes output with information about which environment's setting we are
015d06b10d37 initial
dwinter
parents:
diff changeset
75 // editing, as it is otherwise not transparent to the end user.
015d06b10d37 initial
dwinter
parents:
diff changeset
76 $output = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
77 'apachesolr_environment' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
78 '#theme' => 'apachesolr_settings_title',
015d06b10d37 initial
dwinter
parents:
diff changeset
79 '#env_id' => $env_id,
015d06b10d37 initial
dwinter
parents:
diff changeset
80 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
81 );
015d06b10d37 initial
dwinter
parents:
diff changeset
82 $output['form'] = drupal_get_form('apachesolr_environment_edit_form', $environment);
015d06b10d37 initial
dwinter
parents:
diff changeset
83 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
84 }
015d06b10d37 initial
dwinter
parents:
diff changeset
85
015d06b10d37 initial
dwinter
parents:
diff changeset
86 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
87 * Form to clone a certain environment
015d06b10d37 initial
dwinter
parents:
diff changeset
88 *
015d06b10d37 initial
dwinter
parents:
diff changeset
89 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
90 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
91 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
92 *
015d06b10d37 initial
dwinter
parents:
diff changeset
93 * @return array output of confirm_form()
015d06b10d37 initial
dwinter
parents:
diff changeset
94 */
015d06b10d37 initial
dwinter
parents:
diff changeset
95 function apachesolr_environment_clone_form(array $form, array &$form_state, array $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
96 $form['env_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
97 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
98 '#value' => $environment['env_id'],
015d06b10d37 initial
dwinter
parents:
diff changeset
99 );
015d06b10d37 initial
dwinter
parents:
diff changeset
100 return confirm_form(
015d06b10d37 initial
dwinter
parents:
diff changeset
101 $form,
015d06b10d37 initial
dwinter
parents:
diff changeset
102 t('Are you sure you want to clone search environment %name?', array('%name' => $environment['name'])),
015d06b10d37 initial
dwinter
parents:
diff changeset
103 'admin/config/search/apachesolr',
015d06b10d37 initial
dwinter
parents:
diff changeset
104 '',
015d06b10d37 initial
dwinter
parents:
diff changeset
105 t('Clone'),
015d06b10d37 initial
dwinter
parents:
diff changeset
106 t('Cancel')
015d06b10d37 initial
dwinter
parents:
diff changeset
107 );
015d06b10d37 initial
dwinter
parents:
diff changeset
108 }
015d06b10d37 initial
dwinter
parents:
diff changeset
109
015d06b10d37 initial
dwinter
parents:
diff changeset
110 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
111 * Submit handler for the clone form
015d06b10d37 initial
dwinter
parents:
diff changeset
112 *
015d06b10d37 initial
dwinter
parents:
diff changeset
113 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
114 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
115 */
015d06b10d37 initial
dwinter
parents:
diff changeset
116 function apachesolr_environment_clone_form_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
117 if (apachesolr_environment_clone($form_state['values']['env_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
118 drupal_set_message(t('The search environment was cloned'));
015d06b10d37 initial
dwinter
parents:
diff changeset
119 }
015d06b10d37 initial
dwinter
parents:
diff changeset
120 $form_state['redirect'] = 'admin/config/search/apachesolr/settings';
015d06b10d37 initial
dwinter
parents:
diff changeset
121 }
015d06b10d37 initial
dwinter
parents:
diff changeset
122
015d06b10d37 initial
dwinter
parents:
diff changeset
123 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
124 * Submit handler for the confirmation page of cloning an environment
015d06b10d37 initial
dwinter
parents:
diff changeset
125 *
015d06b10d37 initial
dwinter
parents:
diff changeset
126 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
127 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
128 */
015d06b10d37 initial
dwinter
parents:
diff changeset
129 function apachesolr_environment_clone_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
130 $form_state['redirect'] = 'admin/config/search/apachesolr/settings/' . $form_state['values']['env_id'] . '/clone';
015d06b10d37 initial
dwinter
parents:
diff changeset
131 }
015d06b10d37 initial
dwinter
parents:
diff changeset
132
015d06b10d37 initial
dwinter
parents:
diff changeset
133 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
134 * Form builder for adding/editing a Solr environment used as a menu callback.
015d06b10d37 initial
dwinter
parents:
diff changeset
135 */
015d06b10d37 initial
dwinter
parents:
diff changeset
136 function apachesolr_environment_edit_form(array $form, array &$form_state, array $environment = array()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
137 if (empty($environment)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
138 $environment = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
139 }
015d06b10d37 initial
dwinter
parents:
diff changeset
140 $environment += array('env_id' => '', 'name' => '', 'url' => '', 'service_class' => '', 'conf' => array());
015d06b10d37 initial
dwinter
parents:
diff changeset
141
015d06b10d37 initial
dwinter
parents:
diff changeset
142 $form['#environment'] = $environment;
015d06b10d37 initial
dwinter
parents:
diff changeset
143 $form['url'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
144 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
145 '#title' => t('Solr server URL'),
015d06b10d37 initial
dwinter
parents:
diff changeset
146 '#default_value' => $environment['url'],
015d06b10d37 initial
dwinter
parents:
diff changeset
147 '#description' => t('Example: http://localhost:8983/solr'),
015d06b10d37 initial
dwinter
parents:
diff changeset
148 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
149 );
015d06b10d37 initial
dwinter
parents:
diff changeset
150 $is_default = $environment['env_id'] == apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
151 $form['make_default'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
152 '#type' => 'checkbox',
015d06b10d37 initial
dwinter
parents:
diff changeset
153 '#title' => t('Make this Solr search environment the default'),
015d06b10d37 initial
dwinter
parents:
diff changeset
154 '#default_value' => $is_default,
015d06b10d37 initial
dwinter
parents:
diff changeset
155 '#disabled' => $is_default,
015d06b10d37 initial
dwinter
parents:
diff changeset
156 );
015d06b10d37 initial
dwinter
parents:
diff changeset
157 $form['name'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
158 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
159 '#title' => t('Description'),
015d06b10d37 initial
dwinter
parents:
diff changeset
160 '#default_value' => $environment['name'],
015d06b10d37 initial
dwinter
parents:
diff changeset
161 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
162 );
015d06b10d37 initial
dwinter
parents:
diff changeset
163 $form['env_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
164 '#type' => 'machine_name',
015d06b10d37 initial
dwinter
parents:
diff changeset
165 '#title' => t('Environment id'),
015d06b10d37 initial
dwinter
parents:
diff changeset
166 '#machine_name' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
167 'exists' => 'apachesolr_environment_load',
015d06b10d37 initial
dwinter
parents:
diff changeset
168 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
169 '#default_value' => $environment['env_id'],
015d06b10d37 initial
dwinter
parents:
diff changeset
170 '#disabled' => !empty($environment['env_id']), // Cannot change it once set.
015d06b10d37 initial
dwinter
parents:
diff changeset
171 '#description' => t('Unique, machine-readable identifier for this Solr environment.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
172 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
173 );
015d06b10d37 initial
dwinter
parents:
diff changeset
174 $form['service_class'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
175 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
176 '#value' => $environment['service_class'],
015d06b10d37 initial
dwinter
parents:
diff changeset
177 );
015d06b10d37 initial
dwinter
parents:
diff changeset
178 $form['conf'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
179 '#tree' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
180 );
015d06b10d37 initial
dwinter
parents:
diff changeset
181 $form['conf']['apachesolr_read_only'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
182 '#type' => 'radios',
015d06b10d37 initial
dwinter
parents:
diff changeset
183 '#title' => t('Index write access'),
015d06b10d37 initial
dwinter
parents:
diff changeset
184 '#default_value' => isset($environment['conf']['apachesolr_read_only']) ? $environment['conf']['apachesolr_read_only'] : APACHESOLR_READ_WRITE,
015d06b10d37 initial
dwinter
parents:
diff changeset
185 '#options' => array(APACHESOLR_READ_WRITE => t('Read and write (normal)'), APACHESOLR_READ_ONLY => t('Read only')),
015d06b10d37 initial
dwinter
parents:
diff changeset
186 '#description' => t('<em>Read only</em> stops this site from sending updates to this search environment. Useful for development sites.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
187 );
015d06b10d37 initial
dwinter
parents:
diff changeset
188 $form['actions'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
189 '#type' => 'actions',
015d06b10d37 initial
dwinter
parents:
diff changeset
190 );
015d06b10d37 initial
dwinter
parents:
diff changeset
191 $form['actions']['save'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
192 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
193 '#validate' => array('apachesolr_environment_edit_validate'),
015d06b10d37 initial
dwinter
parents:
diff changeset
194 '#submit' => array('apachesolr_environment_edit_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
195 '#value' => t('Save'),
015d06b10d37 initial
dwinter
parents:
diff changeset
196 );
015d06b10d37 initial
dwinter
parents:
diff changeset
197 $form['actions']['save_edit'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
198 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
199 '#validate' => array('apachesolr_environment_edit_validate'),
015d06b10d37 initial
dwinter
parents:
diff changeset
200 '#submit' => array('apachesolr_environment_edit_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
201 '#value' => t('Save and edit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
202 );
015d06b10d37 initial
dwinter
parents:
diff changeset
203 $form['actions']['test'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
204 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
205 '#validate' => array('apachesolr_environment_edit_validate'),
015d06b10d37 initial
dwinter
parents:
diff changeset
206 '#submit' => array('apachesolr_environment_edit_test_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
207 '#value' => t('Test connection'),
015d06b10d37 initial
dwinter
parents:
diff changeset
208 );
015d06b10d37 initial
dwinter
parents:
diff changeset
209 if (!empty($environment['env_id']) && !$is_default) {
015d06b10d37 initial
dwinter
parents:
diff changeset
210 $form['actions']['delete'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
211 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
212 '#submit' => array('apachesolr_environment_edit_delete_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
213 '#value' => t('Delete'),
015d06b10d37 initial
dwinter
parents:
diff changeset
214 );
015d06b10d37 initial
dwinter
parents:
diff changeset
215 }
015d06b10d37 initial
dwinter
parents:
diff changeset
216
015d06b10d37 initial
dwinter
parents:
diff changeset
217 // Ensures destination is an internal URL, builds "cancel" link.
015d06b10d37 initial
dwinter
parents:
diff changeset
218 if (isset($_GET['destination']) && !url_is_external($_GET['destination'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
219 $destination = $_GET['destination'];
015d06b10d37 initial
dwinter
parents:
diff changeset
220 }
015d06b10d37 initial
dwinter
parents:
diff changeset
221 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
222 $destination = 'admin/config/search/apachesolr/settings';
015d06b10d37 initial
dwinter
parents:
diff changeset
223 }
015d06b10d37 initial
dwinter
parents:
diff changeset
224 $form['actions']['cancel'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
225 '#type' => 'link',
015d06b10d37 initial
dwinter
parents:
diff changeset
226 '#title' => t('Cancel'),
015d06b10d37 initial
dwinter
parents:
diff changeset
227 '#href' => $destination,
015d06b10d37 initial
dwinter
parents:
diff changeset
228 );
015d06b10d37 initial
dwinter
parents:
diff changeset
229
015d06b10d37 initial
dwinter
parents:
diff changeset
230 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
231 }
015d06b10d37 initial
dwinter
parents:
diff changeset
232
015d06b10d37 initial
dwinter
parents:
diff changeset
233 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
234 * Submit handler for the test button in the environment edit page
015d06b10d37 initial
dwinter
parents:
diff changeset
235 *
015d06b10d37 initial
dwinter
parents:
diff changeset
236 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
237 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
238 */
015d06b10d37 initial
dwinter
parents:
diff changeset
239 function apachesolr_environment_edit_test_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
240 $ping = apachesolr_server_status($form_state['values']['url'], $form_state['values']['service_class']);
015d06b10d37 initial
dwinter
parents:
diff changeset
241 if ($ping) {
015d06b10d37 initial
dwinter
parents:
diff changeset
242 drupal_set_message(t('Your site has contacted the Apache Solr server.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
243 }
015d06b10d37 initial
dwinter
parents:
diff changeset
244 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
245 drupal_set_message(t('Your site was unable to contact the Apache Solr server.'), 'error');
015d06b10d37 initial
dwinter
parents:
diff changeset
246 }
015d06b10d37 initial
dwinter
parents:
diff changeset
247 $form_state['rebuild'] = TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
248 }
015d06b10d37 initial
dwinter
parents:
diff changeset
249
015d06b10d37 initial
dwinter
parents:
diff changeset
250 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
251 * Validate handler for the environment edit page
015d06b10d37 initial
dwinter
parents:
diff changeset
252 *
015d06b10d37 initial
dwinter
parents:
diff changeset
253 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
254 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
255 */
015d06b10d37 initial
dwinter
parents:
diff changeset
256 function apachesolr_environment_edit_validate(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
257 $parts = parse_url($form_state['values']['url']);
015d06b10d37 initial
dwinter
parents:
diff changeset
258 foreach (array('scheme', 'host', 'path') as $key) {
015d06b10d37 initial
dwinter
parents:
diff changeset
259 if (empty($parts[$key])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
260 form_set_error('url', t('The Solr server URL needs to include a !part', array('!part' => $key)));
015d06b10d37 initial
dwinter
parents:
diff changeset
261 }
015d06b10d37 initial
dwinter
parents:
diff changeset
262 }
015d06b10d37 initial
dwinter
parents:
diff changeset
263 if (isset($parts['port'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
264 // parse_url() should always give an integer for port. Since drupal_http_request()
015d06b10d37 initial
dwinter
parents:
diff changeset
265 // also uses parse_url(), we don't need to validate anything except the range.
015d06b10d37 initial
dwinter
parents:
diff changeset
266 $pattern = empty($parts['user']) ? '@://[^:]+:([^/]+)@' : '#://[^@]+@[^:]+:([^/]+)#';
015d06b10d37 initial
dwinter
parents:
diff changeset
267 preg_match($pattern, $form_state['values']['url'], $m);
015d06b10d37 initial
dwinter
parents:
diff changeset
268 if (empty($m[1]) || !ctype_digit($m[1]) || $m[1] < 1 || $m[1] > 65535) {
015d06b10d37 initial
dwinter
parents:
diff changeset
269 form_set_error('port', t('The port has to be an integer between 1 and 65535.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
270 }
015d06b10d37 initial
dwinter
parents:
diff changeset
271 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
272 // Normalize the url by removing extra slashes and whitespace.
015d06b10d37 initial
dwinter
parents:
diff changeset
273 $form_state['values']['url'] = trim($form_state['values']['url'], "/ \t\r\n\0\x0B");
015d06b10d37 initial
dwinter
parents:
diff changeset
274 }
015d06b10d37 initial
dwinter
parents:
diff changeset
275 }
015d06b10d37 initial
dwinter
parents:
diff changeset
276 }
015d06b10d37 initial
dwinter
parents:
diff changeset
277
015d06b10d37 initial
dwinter
parents:
diff changeset
278 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
279 * Submit handler for the environment edit page
015d06b10d37 initial
dwinter
parents:
diff changeset
280 *
015d06b10d37 initial
dwinter
parents:
diff changeset
281 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
282 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
283 */
015d06b10d37 initial
dwinter
parents:
diff changeset
284 function apachesolr_environment_edit_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
285 apachesolr_environment_save($form_state['values']);
015d06b10d37 initial
dwinter
parents:
diff changeset
286 if (!empty($form_state['values']['make_default'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
287 apachesolr_set_default_environment($form_state['values']['env_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
288 }
015d06b10d37 initial
dwinter
parents:
diff changeset
289 cache_clear_all('apachesolr:environments', 'cache_apachesolr');
015d06b10d37 initial
dwinter
parents:
diff changeset
290 drupal_set_message(t('The %name search environment has been saved.', array('%name' => $form_state['values']['name'])));
015d06b10d37 initial
dwinter
parents:
diff changeset
291 if ($form_state['values']['op'] == t('Save')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
292 $form_state['redirect'] = 'admin/config/search/apachesolr/settings';
015d06b10d37 initial
dwinter
parents:
diff changeset
293 }
015d06b10d37 initial
dwinter
parents:
diff changeset
294 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
295 $form_state['redirect'] = current_path();
015d06b10d37 initial
dwinter
parents:
diff changeset
296 }
015d06b10d37 initial
dwinter
parents:
diff changeset
297 // Regardlessly of the destination parameter we want to go to another page
015d06b10d37 initial
dwinter
parents:
diff changeset
298 unset($_GET['destination']);
015d06b10d37 initial
dwinter
parents:
diff changeset
299 drupal_static_reset('drupal_get_destination');
015d06b10d37 initial
dwinter
parents:
diff changeset
300 drupal_get_destination();
015d06b10d37 initial
dwinter
parents:
diff changeset
301 }
015d06b10d37 initial
dwinter
parents:
diff changeset
302
015d06b10d37 initial
dwinter
parents:
diff changeset
303 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
304 * Check to see if the facetapi module is installed, and if not put up
015d06b10d37 initial
dwinter
parents:
diff changeset
305 * a message.
015d06b10d37 initial
dwinter
parents:
diff changeset
306 *
015d06b10d37 initial
dwinter
parents:
diff changeset
307 * Only call this function if the user is already in a position for this to
015d06b10d37 initial
dwinter
parents:
diff changeset
308 * be useful.
015d06b10d37 initial
dwinter
parents:
diff changeset
309 */
015d06b10d37 initial
dwinter
parents:
diff changeset
310 function apachesolr_check_facetapi() {
015d06b10d37 initial
dwinter
parents:
diff changeset
311 if (!module_exists('facetapi')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
312 $filename = db_query_range("SELECT filename FROM {system} WHERE type = 'module' AND name = 'facetapi'", 0, 1)
015d06b10d37 initial
dwinter
parents:
diff changeset
313 ->fetchField();
015d06b10d37 initial
dwinter
parents:
diff changeset
314 if ($filename && file_exists($filename)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
315 drupal_set_message(t('If you <a href="@modules">enable the facetapi module</a>, Apache Solr Search will provide you with configurable facets.', array('@modules' => url('admin/modules'))));
015d06b10d37 initial
dwinter
parents:
diff changeset
316 }
015d06b10d37 initial
dwinter
parents:
diff changeset
317 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
318 drupal_set_message(t('If you install the facetapi module from !href, Apache Solr Search will provide you with configurable facets.', array('!href' => url('http://drupal.org/project/facetapi'))));
015d06b10d37 initial
dwinter
parents:
diff changeset
319 }
015d06b10d37 initial
dwinter
parents:
diff changeset
320 }
015d06b10d37 initial
dwinter
parents:
diff changeset
321 }
015d06b10d37 initial
dwinter
parents:
diff changeset
322
015d06b10d37 initial
dwinter
parents:
diff changeset
323 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
324 * Form builder for general settings used as a menu callback.
015d06b10d37 initial
dwinter
parents:
diff changeset
325 *
015d06b10d37 initial
dwinter
parents:
diff changeset
326 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
327 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
328 *
015d06b10d37 initial
dwinter
parents:
diff changeset
329 * @return array Output of the system_settings_form()
015d06b10d37 initial
dwinter
parents:
diff changeset
330 */
015d06b10d37 initial
dwinter
parents:
diff changeset
331 function apachesolr_settings(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
332 $form = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
333 $rows = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
334
015d06b10d37 initial
dwinter
parents:
diff changeset
335 // Environment settings
015d06b10d37 initial
dwinter
parents:
diff changeset
336 $id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
337 $environments = apachesolr_load_all_environments();
015d06b10d37 initial
dwinter
parents:
diff changeset
338 $default_environment = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
339 apachesolr_check_facetapi();
015d06b10d37 initial
dwinter
parents:
diff changeset
340
015d06b10d37 initial
dwinter
parents:
diff changeset
341 // Reserve a row for the default one
015d06b10d37 initial
dwinter
parents:
diff changeset
342 $rows[$default_environment] = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
343
015d06b10d37 initial
dwinter
parents:
diff changeset
344 foreach ($environments as $environment_id => $data) {
015d06b10d37 initial
dwinter
parents:
diff changeset
345 // Define all the Operations
015d06b10d37 initial
dwinter
parents:
diff changeset
346 $confs = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
347 $ops = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
348 // Whenever facetapi is enabled we also enable our operation link
015d06b10d37 initial
dwinter
parents:
diff changeset
349 if (module_exists('facetapi')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
350 $confs['facets'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
351 'class' => 'operation',
015d06b10d37 initial
dwinter
parents:
diff changeset
352 'data' => l(t('Facets'),
015d06b10d37 initial
dwinter
parents:
diff changeset
353 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/facets',
015d06b10d37 initial
dwinter
parents:
diff changeset
354 array('query' => array('destination' => current_path()))
015d06b10d37 initial
dwinter
parents:
diff changeset
355 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
356 );
015d06b10d37 initial
dwinter
parents:
diff changeset
357 }
015d06b10d37 initial
dwinter
parents:
diff changeset
358 // These are our result and bias settings
015d06b10d37 initial
dwinter
parents:
diff changeset
359 if (module_exists('apachesolr_search')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
360 $confs['result_bias'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
361 'class' => 'operation',
015d06b10d37 initial
dwinter
parents:
diff changeset
362 'data' => l(t('Bias'),
015d06b10d37 initial
dwinter
parents:
diff changeset
363 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/bias',
015d06b10d37 initial
dwinter
parents:
diff changeset
364 array('query' => array('destination' => current_path()))
015d06b10d37 initial
dwinter
parents:
diff changeset
365 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
366 );
015d06b10d37 initial
dwinter
parents:
diff changeset
367 }
015d06b10d37 initial
dwinter
parents:
diff changeset
368 $confs['index'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
369 'class' => 'operation',
015d06b10d37 initial
dwinter
parents:
diff changeset
370 'data' => l(t('Index'),
015d06b10d37 initial
dwinter
parents:
diff changeset
371 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/index'
015d06b10d37 initial
dwinter
parents:
diff changeset
372 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
373 );
015d06b10d37 initial
dwinter
parents:
diff changeset
374 $ops['edit'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
375 'class' => 'operation',
015d06b10d37 initial
dwinter
parents:
diff changeset
376 'data' => l(t('Edit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
377 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/edit',
015d06b10d37 initial
dwinter
parents:
diff changeset
378 array('query' => array('destination' => current_path()))
015d06b10d37 initial
dwinter
parents:
diff changeset
379 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
380 );
015d06b10d37 initial
dwinter
parents:
diff changeset
381
015d06b10d37 initial
dwinter
parents:
diff changeset
382 $ops['clone'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
383 'class' => 'operation',
015d06b10d37 initial
dwinter
parents:
diff changeset
384 'data' => l(t('Clone'),
015d06b10d37 initial
dwinter
parents:
diff changeset
385 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/clone',
015d06b10d37 initial
dwinter
parents:
diff changeset
386 array('query' => array('destination' => $_GET['q']))
015d06b10d37 initial
dwinter
parents:
diff changeset
387 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
388 );
015d06b10d37 initial
dwinter
parents:
diff changeset
389 $env_name = l($data['name'], 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/edit', array('query' => array('destination' => $_GET['q'])));
015d06b10d37 initial
dwinter
parents:
diff changeset
390
015d06b10d37 initial
dwinter
parents:
diff changeset
391 // Is this row our default environment?
015d06b10d37 initial
dwinter
parents:
diff changeset
392 if ($environment_id == $default_environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
393 $env_name = t('!environment <em>(Default)</em>', array('!environment' => $env_name));
015d06b10d37 initial
dwinter
parents:
diff changeset
394 $env_class_row = 'default-environment';
015d06b10d37 initial
dwinter
parents:
diff changeset
395 }
015d06b10d37 initial
dwinter
parents:
diff changeset
396 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
397 $env_class_row = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
398 }
015d06b10d37 initial
dwinter
parents:
diff changeset
399 // For every non-default we add a delete link
015d06b10d37 initial
dwinter
parents:
diff changeset
400 // Allow to revert a search environment or to delete it
015d06b10d37 initial
dwinter
parents:
diff changeset
401 $delete_value = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
402 if (!isset($data['in_code_only'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
403 if ((isset($data['type']) && $data['type'] == 'Overridden')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
404 $delete_value = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
405 'class' => 'operation',
015d06b10d37 initial
dwinter
parents:
diff changeset
406 'data' => l(t('Revert'), 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/delete'),
015d06b10d37 initial
dwinter
parents:
diff changeset
407 );
015d06b10d37 initial
dwinter
parents:
diff changeset
408 }
015d06b10d37 initial
dwinter
parents:
diff changeset
409 // don't allow the deletion of the default environment
015d06b10d37 initial
dwinter
parents:
diff changeset
410 elseif ($environment_id != $default_environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
411 $delete_value = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
412 'class' => 'operation',
015d06b10d37 initial
dwinter
parents:
diff changeset
413 'data' => l(t('Delete'), 'admin/config/search/apachesolr/settings/' . $data['env_id'] . '/delete'),
015d06b10d37 initial
dwinter
parents:
diff changeset
414 );
015d06b10d37 initial
dwinter
parents:
diff changeset
415 }
015d06b10d37 initial
dwinter
parents:
diff changeset
416 }
015d06b10d37 initial
dwinter
parents:
diff changeset
417 $ops['delete'] = $delete_value;
015d06b10d37 initial
dwinter
parents:
diff changeset
418
015d06b10d37 initial
dwinter
parents:
diff changeset
419 // When we are receiving a http POST (so the page does not show) we do not
015d06b10d37 initial
dwinter
parents:
diff changeset
420 // want to check the statusses of any environment
015d06b10d37 initial
dwinter
parents:
diff changeset
421 $class = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
422 if (empty($form_state['input'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
423 $class = apachesolr_server_status($data['url'], $data['service_class']) ? 'ok' : 'error';
015d06b10d37 initial
dwinter
parents:
diff changeset
424 }
015d06b10d37 initial
dwinter
parents:
diff changeset
425
015d06b10d37 initial
dwinter
parents:
diff changeset
426 $headers = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
427 array('data' => t('Name'), 'colspan' => 2),
015d06b10d37 initial
dwinter
parents:
diff changeset
428 t('URL'),
015d06b10d37 initial
dwinter
parents:
diff changeset
429 array('data' => t('Configuration'), 'colspan' => count($confs)),
015d06b10d37 initial
dwinter
parents:
diff changeset
430 array('data' => t('Operations'), 'colspan' => count($ops)),
015d06b10d37 initial
dwinter
parents:
diff changeset
431 );
015d06b10d37 initial
dwinter
parents:
diff changeset
432
015d06b10d37 initial
dwinter
parents:
diff changeset
433 $rows[$environment_id] = array('data' =>
015d06b10d37 initial
dwinter
parents:
diff changeset
434 array(
015d06b10d37 initial
dwinter
parents:
diff changeset
435 // Cells
015d06b10d37 initial
dwinter
parents:
diff changeset
436 array(
015d06b10d37 initial
dwinter
parents:
diff changeset
437 'class' => 'status-icon',
015d06b10d37 initial
dwinter
parents:
diff changeset
438 'data' => '<div title="' . $class . '"><span class="element-invisible">' . $class . '</span></div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
439 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
440 array(
015d06b10d37 initial
dwinter
parents:
diff changeset
441 'class' => $env_class_row,
015d06b10d37 initial
dwinter
parents:
diff changeset
442 'data' => $env_name,
015d06b10d37 initial
dwinter
parents:
diff changeset
443 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
444 check_plain($data['url']),
015d06b10d37 initial
dwinter
parents:
diff changeset
445 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
446 'class' => array(drupal_html_class($class)),
015d06b10d37 initial
dwinter
parents:
diff changeset
447 );
015d06b10d37 initial
dwinter
parents:
diff changeset
448 // Add the links to the page
015d06b10d37 initial
dwinter
parents:
diff changeset
449 $rows[$environment_id]['data'] = array_merge($rows[$environment_id]['data'], $confs);
015d06b10d37 initial
dwinter
parents:
diff changeset
450 $rows[$environment_id]['data'] = array_merge($rows[$environment_id]['data'], $ops);
015d06b10d37 initial
dwinter
parents:
diff changeset
451 }
015d06b10d37 initial
dwinter
parents:
diff changeset
452
015d06b10d37 initial
dwinter
parents:
diff changeset
453 $form['apachesolr_host_settings']['actions'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
454 '#markup' => '<ul class="action-links">' . drupal_render($actions) . '</ul>',
015d06b10d37 initial
dwinter
parents:
diff changeset
455 );
015d06b10d37 initial
dwinter
parents:
diff changeset
456 $form['apachesolr_host_settings']['table'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
457 '#theme' => 'table',
015d06b10d37 initial
dwinter
parents:
diff changeset
458 '#header' => $headers,
015d06b10d37 initial
dwinter
parents:
diff changeset
459 '#rows' => array_values($rows),
015d06b10d37 initial
dwinter
parents:
diff changeset
460 '#attributes' => array('class' => array('admin-apachesolr')),
015d06b10d37 initial
dwinter
parents:
diff changeset
461 );
015d06b10d37 initial
dwinter
parents:
diff changeset
462
015d06b10d37 initial
dwinter
parents:
diff changeset
463 $form['advanced'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
464 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
465 '#title' => t('Advanced configuration'),
015d06b10d37 initial
dwinter
parents:
diff changeset
466 '#collapsed' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
467 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
468 );
015d06b10d37 initial
dwinter
parents:
diff changeset
469 $form['advanced']['apachesolr_set_nodeapi_messages'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
470 '#type' => 'radios',
015d06b10d37 initial
dwinter
parents:
diff changeset
471 '#title' => t('Extra help messages for administrators'),
015d06b10d37 initial
dwinter
parents:
diff changeset
472 '#description' => t('Adds notices to a page whenever Drupal changed content that needs reindexing'),
015d06b10d37 initial
dwinter
parents:
diff changeset
473 '#default_value' => variable_get('apachesolr_set_nodeapi_messages', 1),
015d06b10d37 initial
dwinter
parents:
diff changeset
474 '#options' => array(0 => t('Disabled'), 1 => t('Enabled')),
015d06b10d37 initial
dwinter
parents:
diff changeset
475 );
015d06b10d37 initial
dwinter
parents:
diff changeset
476
015d06b10d37 initial
dwinter
parents:
diff changeset
477 // Number of Items to index
015d06b10d37 initial
dwinter
parents:
diff changeset
478 $numbers = drupal_map_assoc(array(1, 5, 10, 20, 50, 100, 200));
015d06b10d37 initial
dwinter
parents:
diff changeset
479 $default_cron_limit = variable_get('apachesolr_cron_limit', 50);
015d06b10d37 initial
dwinter
parents:
diff changeset
480
015d06b10d37 initial
dwinter
parents:
diff changeset
481 // apachesolr_cron_limit may be overridden in settings.php. If its current
015d06b10d37 initial
dwinter
parents:
diff changeset
482 // value is not among the default set of options, add it.
015d06b10d37 initial
dwinter
parents:
diff changeset
483 if (!isset($numbers[$default_cron_limit])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
484 $numbers[$default_cron_limit] = $default_cron_limit;
015d06b10d37 initial
dwinter
parents:
diff changeset
485 }
015d06b10d37 initial
dwinter
parents:
diff changeset
486 $form['advanced']['apachesolr_cron_limit'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
487 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
488 '#title' => t('Number of items to index per cron run'),
015d06b10d37 initial
dwinter
parents:
diff changeset
489 '#default_value' => $default_cron_limit,
015d06b10d37 initial
dwinter
parents:
diff changeset
490 '#options' => $numbers,
015d06b10d37 initial
dwinter
parents:
diff changeset
491 '#description' => t('Reduce the number of items to prevent timeouts and memory errors while indexing.', array('@cron' => url('admin/reports/status')))
015d06b10d37 initial
dwinter
parents:
diff changeset
492 );
015d06b10d37 initial
dwinter
parents:
diff changeset
493
015d06b10d37 initial
dwinter
parents:
diff changeset
494 $options = array('apachesolr:show_error' => t('Show error message'));
015d06b10d37 initial
dwinter
parents:
diff changeset
495 $system_info = system_get_info('module');
015d06b10d37 initial
dwinter
parents:
diff changeset
496 if (module_exists('search')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
497 foreach (search_get_info() as $module => $search_info) {
015d06b10d37 initial
dwinter
parents:
diff changeset
498 // Don't allow apachesolr to return results on failure of apachesolr.
015d06b10d37 initial
dwinter
parents:
diff changeset
499 if ($module == 'apachesolr_search') {
015d06b10d37 initial
dwinter
parents:
diff changeset
500 continue;
015d06b10d37 initial
dwinter
parents:
diff changeset
501 }
015d06b10d37 initial
dwinter
parents:
diff changeset
502 $options[$module] = t('Show @name search results', array('@name' => $system_info[$module]['name']));
015d06b10d37 initial
dwinter
parents:
diff changeset
503 }
015d06b10d37 initial
dwinter
parents:
diff changeset
504 }
015d06b10d37 initial
dwinter
parents:
diff changeset
505
015d06b10d37 initial
dwinter
parents:
diff changeset
506 $options['apachesolr:show_no_results'] = t('Show no results');
015d06b10d37 initial
dwinter
parents:
diff changeset
507 $form['advanced']['apachesolr_failure'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
508 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
509 '#title' => t('On failure'),
015d06b10d37 initial
dwinter
parents:
diff changeset
510 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
511 '#default_value' => variable_get('apachesolr_failure', 'apachesolr:show_error'),
015d06b10d37 initial
dwinter
parents:
diff changeset
512 );
015d06b10d37 initial
dwinter
parents:
diff changeset
513
015d06b10d37 initial
dwinter
parents:
diff changeset
514 return system_settings_form($form);
015d06b10d37 initial
dwinter
parents:
diff changeset
515 }
015d06b10d37 initial
dwinter
parents:
diff changeset
516
015d06b10d37 initial
dwinter
parents:
diff changeset
517 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
518 * Gets information about the fields already in solr index.
015d06b10d37 initial
dwinter
parents:
diff changeset
519 *
015d06b10d37 initial
dwinter
parents:
diff changeset
520 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
521 * The environment for which we need to ask the status from
015d06b10d37 initial
dwinter
parents:
diff changeset
522 *
015d06b10d37 initial
dwinter
parents:
diff changeset
523 * @return array page render array
015d06b10d37 initial
dwinter
parents:
diff changeset
524 */
015d06b10d37 initial
dwinter
parents:
diff changeset
525 function apachesolr_status_page($environment = array()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
526 if (empty($environment)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
527 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
528 $environment = apachesolr_environment_load($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
529 }
015d06b10d37 initial
dwinter
parents:
diff changeset
530 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
531 $env_id = $environment['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
532 }
015d06b10d37 initial
dwinter
parents:
diff changeset
533
015d06b10d37 initial
dwinter
parents:
diff changeset
534 // Check for availability
015d06b10d37 initial
dwinter
parents:
diff changeset
535 if (!apachesolr_server_status($environment['url'], $environment['service_class'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
536 drupal_set_message(t('The server seems to be unavailable. Please verify the server settings at the <a href="!settings_page">settings page</a>', array('!settings_page' => url("admin/config/search/apachesolr/settings/{$environment['env_id']}/edit", array('query' => drupal_get_destination())))), 'warning');
015d06b10d37 initial
dwinter
parents:
diff changeset
537 return '';
015d06b10d37 initial
dwinter
parents:
diff changeset
538 }
015d06b10d37 initial
dwinter
parents:
diff changeset
539
015d06b10d37 initial
dwinter
parents:
diff changeset
540 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
541 $solr = apachesolr_get_solr($environment["env_id"]);
015d06b10d37 initial
dwinter
parents:
diff changeset
542 $solr->clearCache();
015d06b10d37 initial
dwinter
parents:
diff changeset
543 $data = $solr->getLuke();
015d06b10d37 initial
dwinter
parents:
diff changeset
544 }
015d06b10d37 initial
dwinter
parents:
diff changeset
545 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
546 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
547 drupal_set_message(nl2br(check_plain($e->getMessage())), "warning");
015d06b10d37 initial
dwinter
parents:
diff changeset
548 $data = new stdClass;
015d06b10d37 initial
dwinter
parents:
diff changeset
549 $data->fields = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
550 }
015d06b10d37 initial
dwinter
parents:
diff changeset
551
015d06b10d37 initial
dwinter
parents:
diff changeset
552 $messages = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
553 if (isset($data->index->numDocs)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
554 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
555 // Collect the stats
015d06b10d37 initial
dwinter
parents:
diff changeset
556 $stats_summary = $solr->getStatsSummary();
015d06b10d37 initial
dwinter
parents:
diff changeset
557 module_load_include('inc', 'apachesolr', 'apachesolr.index');
015d06b10d37 initial
dwinter
parents:
diff changeset
558 $status = apachesolr_index_status($environment["env_id"]);
015d06b10d37 initial
dwinter
parents:
diff changeset
559 // We need a schema version greater than beta3. This is mostly to catch
015d06b10d37 initial
dwinter
parents:
diff changeset
560 // people using the Drupal 6 schema.
015d06b10d37 initial
dwinter
parents:
diff changeset
561 if (preg_match('/^drupal-[13]/', $stats_summary['@schema_version'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
562 $minimum = 'drupal-3.0-beta4';
015d06b10d37 initial
dwinter
parents:
diff changeset
563 if (version_compare($stats_summary['@schema_version'], $minimum, '<')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
564 drupal_set_message(t('Your schema.xml version is too old. You must update it to at least %minimum and re-index your content.', array('%minimum' => $minimum)), 'error');
015d06b10d37 initial
dwinter
parents:
diff changeset
565 }
015d06b10d37 initial
dwinter
parents:
diff changeset
566 }
015d06b10d37 initial
dwinter
parents:
diff changeset
567 $pending_msg = $stats_summary['@pending_docs'] ? t('(@pending_docs sent but not yet processed)', $stats_summary) : '';
015d06b10d37 initial
dwinter
parents:
diff changeset
568 $index_msg = $stats_summary['@index_size'] ? t('(@index_size on disk)', $stats_summary) : '';
015d06b10d37 initial
dwinter
parents:
diff changeset
569 $indexed_message = t('@num Items !pending !index_msg', array(
015d06b10d37 initial
dwinter
parents:
diff changeset
570 '@num' => $data->index->numDocs,
015d06b10d37 initial
dwinter
parents:
diff changeset
571 '!pending' => $pending_msg,
015d06b10d37 initial
dwinter
parents:
diff changeset
572 '!index_msg' => $index_msg,
015d06b10d37 initial
dwinter
parents:
diff changeset
573 ));
015d06b10d37 initial
dwinter
parents:
diff changeset
574 $messages[] = array(t('Indexed'), $indexed_message);
015d06b10d37 initial
dwinter
parents:
diff changeset
575
015d06b10d37 initial
dwinter
parents:
diff changeset
576 $remaining_message = t('@items (@percentage% has been sent to the server)', array(
015d06b10d37 initial
dwinter
parents:
diff changeset
577 '@items' => format_plural($status['remaining'], t('1 item'), t('@count items')),
015d06b10d37 initial
dwinter
parents:
diff changeset
578 '@percentage' => ((int)min(100, 100 * ($status['total'] - $status['remaining']) / max(1, $status['total']))),
015d06b10d37 initial
dwinter
parents:
diff changeset
579 )
015d06b10d37 initial
dwinter
parents:
diff changeset
580 );
015d06b10d37 initial
dwinter
parents:
diff changeset
581 $messages[] = array(t('Remaining'), $remaining_message);
015d06b10d37 initial
dwinter
parents:
diff changeset
582
015d06b10d37 initial
dwinter
parents:
diff changeset
583 $messages[] = array(t('Schema'), t('@schema_version', $stats_summary));
015d06b10d37 initial
dwinter
parents:
diff changeset
584 if (!empty($stats_summary['@core_name'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
585 $messages[] = array(t('Solr Core Name'), t('@core_name', $stats_summary));
015d06b10d37 initial
dwinter
parents:
diff changeset
586 }
015d06b10d37 initial
dwinter
parents:
diff changeset
587 $messages[] = array(t('Delay'), t('@autocommit_time before updates are processed.', $stats_summary));
015d06b10d37 initial
dwinter
parents:
diff changeset
588 $messages[] = array(t('Pending Deletions'), t('@deletes_total', $stats_summary));
015d06b10d37 initial
dwinter
parents:
diff changeset
589 }
015d06b10d37 initial
dwinter
parents:
diff changeset
590 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
591 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
592 }
015d06b10d37 initial
dwinter
parents:
diff changeset
593 }
015d06b10d37 initial
dwinter
parents:
diff changeset
594 if (empty($messages)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
595 $messages[] = array(t('Error'), t('No data was returned from the server. Check your log messages.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
596 }
015d06b10d37 initial
dwinter
parents:
diff changeset
597 // Initializes output with information about which server's setting we are
015d06b10d37 initial
dwinter
parents:
diff changeset
598 // editing, as it is otherwise not transparent to the end user.
015d06b10d37 initial
dwinter
parents:
diff changeset
599 $output['apachesolr_index_action_status'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
600 '#prefix' => '<h3>' . t('@environment: Search Index Content', array('@environment' => $environment['name'])) . '</h3>',
015d06b10d37 initial
dwinter
parents:
diff changeset
601 '#theme' => 'table',
015d06b10d37 initial
dwinter
parents:
diff changeset
602 '#header' => array(t('Type'), t('Value')),
015d06b10d37 initial
dwinter
parents:
diff changeset
603 '#rows' => $messages,
015d06b10d37 initial
dwinter
parents:
diff changeset
604 );
015d06b10d37 initial
dwinter
parents:
diff changeset
605
015d06b10d37 initial
dwinter
parents:
diff changeset
606 $output['viewmore'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
607 '#markup' => l(t('View more details on the search index contents'), 'admin/reports/apachesolr'),
015d06b10d37 initial
dwinter
parents:
diff changeset
608 );
015d06b10d37 initial
dwinter
parents:
diff changeset
609
015d06b10d37 initial
dwinter
parents:
diff changeset
610 $write_status = apachesolr_environment_variable_get($env_id, 'apachesolr_read_only', APACHESOLR_READ_WRITE);
015d06b10d37 initial
dwinter
parents:
diff changeset
611 if ($write_status == APACHESOLR_READ_WRITE) {
015d06b10d37 initial
dwinter
parents:
diff changeset
612 $output['index_action_form'] = drupal_get_form('apachesolr_index_action_form', $env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
613 $output['index_config_form'] = drupal_get_form('apachesolr_index_config_form', $env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
614 }
015d06b10d37 initial
dwinter
parents:
diff changeset
615 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
616 drupal_set_message(t('Options for deleting and re-indexing are not available because the index is read-only. This can be changed on the <a href="!settings_page">settings page</a>', array('!settings_page' => url('admin/config/search/apachesolr/settings/' . $env_id . '/edit', array('query' => drupal_get_destination())))), 'warning');
015d06b10d37 initial
dwinter
parents:
diff changeset
617 }
015d06b10d37 initial
dwinter
parents:
diff changeset
618
015d06b10d37 initial
dwinter
parents:
diff changeset
619 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
620 }
015d06b10d37 initial
dwinter
parents:
diff changeset
621
015d06b10d37 initial
dwinter
parents:
diff changeset
622 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
623 * Get the report, eg.: some statistics and useful data from the Apache Solr index
015d06b10d37 initial
dwinter
parents:
diff changeset
624 *
015d06b10d37 initial
dwinter
parents:
diff changeset
625 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
626 *
015d06b10d37 initial
dwinter
parents:
diff changeset
627 * @return array page render array
015d06b10d37 initial
dwinter
parents:
diff changeset
628 */
015d06b10d37 initial
dwinter
parents:
diff changeset
629 function apachesolr_index_report(array $environment = array()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
630 if (empty($environment)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
631 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
632 drupal_goto('admin/reports/apachesolr/' . $env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
633 }
015d06b10d37 initial
dwinter
parents:
diff changeset
634 $environments = apachesolr_load_all_environments();
015d06b10d37 initial
dwinter
parents:
diff changeset
635 $environments_list = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
636 foreach ($environments as $env) {
015d06b10d37 initial
dwinter
parents:
diff changeset
637 $var_status = array('!name' =>$env['name']);
015d06b10d37 initial
dwinter
parents:
diff changeset
638 $environments_list[] = l(t('Statistics for !name', $var_status), 'admin/reports/apachesolr/' . $env['env_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
639 }
015d06b10d37 initial
dwinter
parents:
diff changeset
640 $output['environments_list'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
641 '#theme' => 'item_list',
015d06b10d37 initial
dwinter
parents:
diff changeset
642 '#items' => $environments_list,
015d06b10d37 initial
dwinter
parents:
diff changeset
643 );
015d06b10d37 initial
dwinter
parents:
diff changeset
644
015d06b10d37 initial
dwinter
parents:
diff changeset
645 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
646 $solr = apachesolr_get_solr($environment['env_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
647 $solr->clearCache();
015d06b10d37 initial
dwinter
parents:
diff changeset
648 $data = $solr->getLuke();
015d06b10d37 initial
dwinter
parents:
diff changeset
649 }
015d06b10d37 initial
dwinter
parents:
diff changeset
650 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
651 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
652 drupal_set_message(nl2br(check_plain($e->getMessage())), "warning");
015d06b10d37 initial
dwinter
parents:
diff changeset
653 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
654 }
015d06b10d37 initial
dwinter
parents:
diff changeset
655
015d06b10d37 initial
dwinter
parents:
diff changeset
656 $messages = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
657 $messages[] = array(t('Number of documents in index'), $data->index->numDocs);
015d06b10d37 initial
dwinter
parents:
diff changeset
658
015d06b10d37 initial
dwinter
parents:
diff changeset
659 $limit = variable_get('apachesolr_luke_limit', 20000);
015d06b10d37 initial
dwinter
parents:
diff changeset
660 if (isset($data->index->numDocs) && $data->index->numDocs > $limit) {
015d06b10d37 initial
dwinter
parents:
diff changeset
661 $messages[] = array(t('Limit'), t('You have more than @limit documents, so term frequencies are being omitted for performance reasons.', array('@limit' => $limit)));
015d06b10d37 initial
dwinter
parents:
diff changeset
662 $not_found = t('<em>Omitted</em>');
015d06b10d37 initial
dwinter
parents:
diff changeset
663 }
015d06b10d37 initial
dwinter
parents:
diff changeset
664 elseif (isset($data->index->numDocs)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
665 $not_found = t('Not indexed');
015d06b10d37 initial
dwinter
parents:
diff changeset
666 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
667 $solr = apachesolr_get_solr($environment['env_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
668 // Note: we use 2 since 1 fails on Ubuntu Hardy.
015d06b10d37 initial
dwinter
parents:
diff changeset
669 $data = $solr->getLuke(2);
015d06b10d37 initial
dwinter
parents:
diff changeset
670 if (isset($data->index->numTerms)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
671 $messages[] = array(t('# of terms in index'), $data->index->numTerms);
015d06b10d37 initial
dwinter
parents:
diff changeset
672 }
015d06b10d37 initial
dwinter
parents:
diff changeset
673 }
015d06b10d37 initial
dwinter
parents:
diff changeset
674 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
675 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
676 $data->fields = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
677 }
015d06b10d37 initial
dwinter
parents:
diff changeset
678 }
015d06b10d37 initial
dwinter
parents:
diff changeset
679 // Initializes output with information about which server's setting we are
015d06b10d37 initial
dwinter
parents:
diff changeset
680 // editing, as it is otherwise not transparent to the end user.
015d06b10d37 initial
dwinter
parents:
diff changeset
681 $fields = (array)$data->fields;
015d06b10d37 initial
dwinter
parents:
diff changeset
682 if ($fields) {
015d06b10d37 initial
dwinter
parents:
diff changeset
683 $messages[] = array(t('# of fields in index'), count($fields));
015d06b10d37 initial
dwinter
parents:
diff changeset
684 }
015d06b10d37 initial
dwinter
parents:
diff changeset
685
015d06b10d37 initial
dwinter
parents:
diff changeset
686 // Output the messages we have for this page
015d06b10d37 initial
dwinter
parents:
diff changeset
687 $output['apachesolr_index_report'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
688 '#theme' => 'table',
015d06b10d37 initial
dwinter
parents:
diff changeset
689 '#header' => array('type', 'value'),
015d06b10d37 initial
dwinter
parents:
diff changeset
690 '#rows' => $messages,
015d06b10d37 initial
dwinter
parents:
diff changeset
691 );
015d06b10d37 initial
dwinter
parents:
diff changeset
692
015d06b10d37 initial
dwinter
parents:
diff changeset
693 if ($fields) {
015d06b10d37 initial
dwinter
parents:
diff changeset
694 // Initializes table header.
015d06b10d37 initial
dwinter
parents:
diff changeset
695 $header = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
696 'name' => t('Field name'),
015d06b10d37 initial
dwinter
parents:
diff changeset
697 'type' => t('Index type'),
015d06b10d37 initial
dwinter
parents:
diff changeset
698 'terms' => t('Distinct terms'),
015d06b10d37 initial
dwinter
parents:
diff changeset
699 );
015d06b10d37 initial
dwinter
parents:
diff changeset
700
015d06b10d37 initial
dwinter
parents:
diff changeset
701 // Builds table rows.
015d06b10d37 initial
dwinter
parents:
diff changeset
702 $rows = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
703 foreach ($fields as $name => $field) {
015d06b10d37 initial
dwinter
parents:
diff changeset
704 // TODO: try to map the name to something more meaningful.
015d06b10d37 initial
dwinter
parents:
diff changeset
705 $rows[$name] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
706 'name' => $name,
015d06b10d37 initial
dwinter
parents:
diff changeset
707 'type' => $field->type,
015d06b10d37 initial
dwinter
parents:
diff changeset
708 'terms' => isset($field->distinct) ? $field->distinct : $not_found
015d06b10d37 initial
dwinter
parents:
diff changeset
709 );
015d06b10d37 initial
dwinter
parents:
diff changeset
710 }
015d06b10d37 initial
dwinter
parents:
diff changeset
711 ksort($rows);
015d06b10d37 initial
dwinter
parents:
diff changeset
712 // Output the fields we found for this environment
015d06b10d37 initial
dwinter
parents:
diff changeset
713 $output['field_table'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
714 '#theme' => 'table',
015d06b10d37 initial
dwinter
parents:
diff changeset
715 '#header' => $header,
015d06b10d37 initial
dwinter
parents:
diff changeset
716 '#rows' => $rows,
015d06b10d37 initial
dwinter
parents:
diff changeset
717 );
015d06b10d37 initial
dwinter
parents:
diff changeset
718 }
015d06b10d37 initial
dwinter
parents:
diff changeset
719 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
720 $output['field_table'] = array('#markup' => t('No data on indexed fields.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
721 }
015d06b10d37 initial
dwinter
parents:
diff changeset
722 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
723 }
015d06b10d37 initial
dwinter
parents:
diff changeset
724
015d06b10d37 initial
dwinter
parents:
diff changeset
725 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
726 * Page callback to show available conf files.
015d06b10d37 initial
dwinter
parents:
diff changeset
727 *
015d06b10d37 initial
dwinter
parents:
diff changeset
728 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
729 *
015d06b10d37 initial
dwinter
parents:
diff changeset
730 * @return string
015d06b10d37 initial
dwinter
parents:
diff changeset
731 * A non-render array but plain theme output for the config files overview. Could be done better probably
015d06b10d37 initial
dwinter
parents:
diff changeset
732 */
015d06b10d37 initial
dwinter
parents:
diff changeset
733 function apachesolr_config_files_overview(array $environment = array()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
734 if (empty($environment)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
735 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
736 }
015d06b10d37 initial
dwinter
parents:
diff changeset
737 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
738 $env_id = $environment['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
739 }
015d06b10d37 initial
dwinter
parents:
diff changeset
740
015d06b10d37 initial
dwinter
parents:
diff changeset
741 $xml = NULL;
015d06b10d37 initial
dwinter
parents:
diff changeset
742 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
743 $solr = apachesolr_get_solr($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
744 $response = $solr->makeServletRequest('admin/file', array('wt' => 'xml'));
015d06b10d37 initial
dwinter
parents:
diff changeset
745 $xml = simplexml_load_string($response->data);
015d06b10d37 initial
dwinter
parents:
diff changeset
746 }
015d06b10d37 initial
dwinter
parents:
diff changeset
747 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
748 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
749 drupal_set_message(nl2br(check_plain($e->getMessage())), "warning");
015d06b10d37 initial
dwinter
parents:
diff changeset
750 }
015d06b10d37 initial
dwinter
parents:
diff changeset
751
015d06b10d37 initial
dwinter
parents:
diff changeset
752 if ($xml) {
015d06b10d37 initial
dwinter
parents:
diff changeset
753 // Retrieve our items from the xml using xpath
015d06b10d37 initial
dwinter
parents:
diff changeset
754 $items = $xml->xpath('//lst[@name="files"]/lst');
015d06b10d37 initial
dwinter
parents:
diff changeset
755
015d06b10d37 initial
dwinter
parents:
diff changeset
756 // Add all the data of the file in a files array
015d06b10d37 initial
dwinter
parents:
diff changeset
757 $files = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
758 foreach ($items as $item_id => $item) {
015d06b10d37 initial
dwinter
parents:
diff changeset
759 // Do not list directories. Always a bool
015d06b10d37 initial
dwinter
parents:
diff changeset
760 if (isset($item->bool)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
761 break;
015d06b10d37 initial
dwinter
parents:
diff changeset
762 }
015d06b10d37 initial
dwinter
parents:
diff changeset
763 // Get data from the files.
015d06b10d37 initial
dwinter
parents:
diff changeset
764 $name = $item->attributes();
015d06b10d37 initial
dwinter
parents:
diff changeset
765 $name = ((string)$item->attributes()) ? (string)$item->attributes() : t('No name found');
015d06b10d37 initial
dwinter
parents:
diff changeset
766 $files[$item_id]['name'] = l($name, 'admin/reports/apachesolr/' . $env_id . '/conf/' . $name);
015d06b10d37 initial
dwinter
parents:
diff changeset
767
015d06b10d37 initial
dwinter
parents:
diff changeset
768 // Retrieve the date attribute
015d06b10d37 initial
dwinter
parents:
diff changeset
769 if (isset($item->date)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
770 $modified = ((string)$item->date->attributes() == 'modified') ? (string) $item->date : t('No date found');
015d06b10d37 initial
dwinter
parents:
diff changeset
771 $files[$item_id]['modified'] = format_date(strtotime($modified));
015d06b10d37 initial
dwinter
parents:
diff changeset
772 }
015d06b10d37 initial
dwinter
parents:
diff changeset
773
015d06b10d37 initial
dwinter
parents:
diff changeset
774 // Retrieve the size attribute
015d06b10d37 initial
dwinter
parents:
diff changeset
775 if (isset($item->long)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
776 $size = ((string)$item->long->attributes() == 'size') ? (string) $item->long : t('No size found');
015d06b10d37 initial
dwinter
parents:
diff changeset
777 $files[$item_id]['size'] = t('Size (bytes): @bytes', array('@bytes' => $size));
015d06b10d37 initial
dwinter
parents:
diff changeset
778 }
015d06b10d37 initial
dwinter
parents:
diff changeset
779 }
015d06b10d37 initial
dwinter
parents:
diff changeset
780 // Sort our files alphabetically
015d06b10d37 initial
dwinter
parents:
diff changeset
781 ksort($files);
015d06b10d37 initial
dwinter
parents:
diff changeset
782
015d06b10d37 initial
dwinter
parents:
diff changeset
783 // Initializes table header.
015d06b10d37 initial
dwinter
parents:
diff changeset
784 $header = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
785 'name' => t('File name'),
015d06b10d37 initial
dwinter
parents:
diff changeset
786 'date' => t('Modified'),
015d06b10d37 initial
dwinter
parents:
diff changeset
787 'size' => t('Size'),
015d06b10d37 initial
dwinter
parents:
diff changeset
788 );
015d06b10d37 initial
dwinter
parents:
diff changeset
789
015d06b10d37 initial
dwinter
parents:
diff changeset
790 // Display the table of field names, index types, and term counts.
015d06b10d37 initial
dwinter
parents:
diff changeset
791 $variables = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
792 'header' => $header,
015d06b10d37 initial
dwinter
parents:
diff changeset
793 'rows' => $files,
015d06b10d37 initial
dwinter
parents:
diff changeset
794 );
015d06b10d37 initial
dwinter
parents:
diff changeset
795 $output = theme('table', $variables);
015d06b10d37 initial
dwinter
parents:
diff changeset
796 }
015d06b10d37 initial
dwinter
parents:
diff changeset
797 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
798 $output = '<p>' . t('No data about any file found.') . "</p>\n";
015d06b10d37 initial
dwinter
parents:
diff changeset
799 }
015d06b10d37 initial
dwinter
parents:
diff changeset
800 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
801 }
015d06b10d37 initial
dwinter
parents:
diff changeset
802
015d06b10d37 initial
dwinter
parents:
diff changeset
803 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
804 * Page callback to show one conf file.
015d06b10d37 initial
dwinter
parents:
diff changeset
805 *
015d06b10d37 initial
dwinter
parents:
diff changeset
806 * @param string $name
015d06b10d37 initial
dwinter
parents:
diff changeset
807 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
808 *
015d06b10d37 initial
dwinter
parents:
diff changeset
809 * @return string
015d06b10d37 initial
dwinter
parents:
diff changeset
810 * the requested config file
015d06b10d37 initial
dwinter
parents:
diff changeset
811 */
015d06b10d37 initial
dwinter
parents:
diff changeset
812 function apachesolr_config_file($name, array $environment = array()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
813 if (empty($environment)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
814 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
815 }
015d06b10d37 initial
dwinter
parents:
diff changeset
816 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
817 $env_id = $environment['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
818 }
015d06b10d37 initial
dwinter
parents:
diff changeset
819
015d06b10d37 initial
dwinter
parents:
diff changeset
820 $output = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
821 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
822 $solr = apachesolr_get_solr($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
823 $response = $solr->makeServletRequest('admin/file', array('file' => $name));
015d06b10d37 initial
dwinter
parents:
diff changeset
824 $raw_file = $response->data;
015d06b10d37 initial
dwinter
parents:
diff changeset
825 $output = '<pre>' . check_plain($raw_file) . '</pre>';
015d06b10d37 initial
dwinter
parents:
diff changeset
826 drupal_set_title(check_plain($name));
015d06b10d37 initial
dwinter
parents:
diff changeset
827 }
015d06b10d37 initial
dwinter
parents:
diff changeset
828 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
829 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
830 drupal_set_message(nl2br(check_plain($e->getMessage())), "warning");
015d06b10d37 initial
dwinter
parents:
diff changeset
831 }
015d06b10d37 initial
dwinter
parents:
diff changeset
832 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
833 }
015d06b10d37 initial
dwinter
parents:
diff changeset
834
015d06b10d37 initial
dwinter
parents:
diff changeset
835 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
836 * Form builder for the Apachesolr Indexer actions form.
015d06b10d37 initial
dwinter
parents:
diff changeset
837 *
015d06b10d37 initial
dwinter
parents:
diff changeset
838 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
839 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
840 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
841 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
842 * @see apachesolr_index_action_form_delete_submit().
015d06b10d37 initial
dwinter
parents:
diff changeset
843 *
015d06b10d37 initial
dwinter
parents:
diff changeset
844 * @return array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
845 */
015d06b10d37 initial
dwinter
parents:
diff changeset
846 function apachesolr_index_action_form(array $form, array $form_state, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
847 $form = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
848 $form['action'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
849 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
850 '#title' => t('Actions'),
015d06b10d37 initial
dwinter
parents:
diff changeset
851 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
852 );
015d06b10d37 initial
dwinter
parents:
diff changeset
853
015d06b10d37 initial
dwinter
parents:
diff changeset
854 $form['action']['env_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
855 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
856 '#value' => $env_id,
015d06b10d37 initial
dwinter
parents:
diff changeset
857 );
015d06b10d37 initial
dwinter
parents:
diff changeset
858
015d06b10d37 initial
dwinter
parents:
diff changeset
859 $form['action']['cron'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
860 '#prefix' => '<div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
861 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
862 '#value' => t('Index queued content (!amount)', array('!amount' => variable_get('apachesolr_cron_limit', 50))),
015d06b10d37 initial
dwinter
parents:
diff changeset
863 '#submit' => array('apachesolr_index_action_form_cron_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
864 );
015d06b10d37 initial
dwinter
parents:
diff changeset
865 $form['action']['cron_description'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
866 '#prefix' => '<span>',
015d06b10d37 initial
dwinter
parents:
diff changeset
867 '#suffix' => '</span></div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
868 '#markup' => t('Indexes just as many items as 1 cron run would do.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
869 );
015d06b10d37 initial
dwinter
parents:
diff changeset
870
015d06b10d37 initial
dwinter
parents:
diff changeset
871 $form['action']['remaining'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
872 '#prefix' => '<div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
873 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
874 '#value' => t('Index all queued content'),
015d06b10d37 initial
dwinter
parents:
diff changeset
875 '#submit' => array('apachesolr_index_action_form_remaining_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
876 );
015d06b10d37 initial
dwinter
parents:
diff changeset
877 $form['action']['remaining_description'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
878 '#prefix' => '<span>',
015d06b10d37 initial
dwinter
parents:
diff changeset
879 '#suffix' => '</span></div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
880 '#markup' => t('Could take time and could put an increased load on your server.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
881 );
015d06b10d37 initial
dwinter
parents:
diff changeset
882
015d06b10d37 initial
dwinter
parents:
diff changeset
883 $form['action']['reset'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
884 '#prefix' => '<div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
885 '#suffix' => '</div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
886 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
887 '#value' => t('Queue all content for reindexing'),
015d06b10d37 initial
dwinter
parents:
diff changeset
888 '#submit' => array('apachesolr_index_action_form_reset_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
889 );
015d06b10d37 initial
dwinter
parents:
diff changeset
890 $form['action']['delete'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
891 '#prefix' => '<div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
892 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
893 '#value' => t('Delete the Search & Solr index'),
015d06b10d37 initial
dwinter
parents:
diff changeset
894 '#submit' => array('apachesolr_index_action_form_delete_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
895 );
015d06b10d37 initial
dwinter
parents:
diff changeset
896 $form['action']['delete_description'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
897 '#prefix' => '<span>',
015d06b10d37 initial
dwinter
parents:
diff changeset
898 '#suffix' => '</span></div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
899 '#markup' => t('Useful with a corrupt index or a new schema.xml.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
900 );
015d06b10d37 initial
dwinter
parents:
diff changeset
901
015d06b10d37 initial
dwinter
parents:
diff changeset
902 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
903 }
015d06b10d37 initial
dwinter
parents:
diff changeset
904
015d06b10d37 initial
dwinter
parents:
diff changeset
905 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
906 * Submit handler for the Indexer actions form, delete button.
015d06b10d37 initial
dwinter
parents:
diff changeset
907 *
015d06b10d37 initial
dwinter
parents:
diff changeset
908 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
909 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
910 */
015d06b10d37 initial
dwinter
parents:
diff changeset
911 function apachesolr_index_action_form_remaining_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
912 $destination = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
913 if (isset($_GET['destination'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
914 $destination = drupal_get_destination();
015d06b10d37 initial
dwinter
parents:
diff changeset
915 unset($_GET['destination']);
015d06b10d37 initial
dwinter
parents:
diff changeset
916 }
015d06b10d37 initial
dwinter
parents:
diff changeset
917 $env_id = $form_state['values']['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
918 $form_state['redirect'] = array('admin/config/search/apachesolr/settings/' . $env_id . '/index/remaining', array('query' => $destination));
015d06b10d37 initial
dwinter
parents:
diff changeset
919 }
015d06b10d37 initial
dwinter
parents:
diff changeset
920
015d06b10d37 initial
dwinter
parents:
diff changeset
921 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
922 * Submit handler for the Indexer actions form, delete button.
015d06b10d37 initial
dwinter
parents:
diff changeset
923 *
015d06b10d37 initial
dwinter
parents:
diff changeset
924 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
925 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
926 */
015d06b10d37 initial
dwinter
parents:
diff changeset
927 function apachesolr_index_action_form_delete_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
928 $destination = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
929 if (isset($_GET['destination'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
930 $destination = drupal_get_destination();
015d06b10d37 initial
dwinter
parents:
diff changeset
931 unset($_GET['destination']);
015d06b10d37 initial
dwinter
parents:
diff changeset
932 }
015d06b10d37 initial
dwinter
parents:
diff changeset
933 $env_id = $form_state['values']['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
934 $form_state['redirect'] = array('admin/config/search/apachesolr/settings/' . $env_id . '/index/delete', array('query' => $destination));
015d06b10d37 initial
dwinter
parents:
diff changeset
935 }
015d06b10d37 initial
dwinter
parents:
diff changeset
936
015d06b10d37 initial
dwinter
parents:
diff changeset
937 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
938 * Submit handler for the Indexer actions form, delete button.
015d06b10d37 initial
dwinter
parents:
diff changeset
939 *
015d06b10d37 initial
dwinter
parents:
diff changeset
940 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
941 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
942 */
015d06b10d37 initial
dwinter
parents:
diff changeset
943 function apachesolr_index_action_form_reset_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
944 $destination = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
945 if (isset($_GET['destination'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
946 $destination = drupal_get_destination();
015d06b10d37 initial
dwinter
parents:
diff changeset
947 unset($_GET['destination']);
015d06b10d37 initial
dwinter
parents:
diff changeset
948 }
015d06b10d37 initial
dwinter
parents:
diff changeset
949 $env_id = $form_state['values']['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
950 $form_state['redirect'] = array('admin/config/search/apachesolr/settings/' . $env_id . '/index/reset', array('query' => $destination));
015d06b10d37 initial
dwinter
parents:
diff changeset
951 }
015d06b10d37 initial
dwinter
parents:
diff changeset
952
015d06b10d37 initial
dwinter
parents:
diff changeset
953 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
954 * Submit handler for the deletion form.
015d06b10d37 initial
dwinter
parents:
diff changeset
955 *
015d06b10d37 initial
dwinter
parents:
diff changeset
956 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
957 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
958 */
015d06b10d37 initial
dwinter
parents:
diff changeset
959 function apachesolr_index_action_form_cron_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
960 if (!empty($form_state['build_info']['args'][0])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
961 $env_id = $form_state['build_info']['args'][0];
015d06b10d37 initial
dwinter
parents:
diff changeset
962 $form_state['redirect'] = 'admin/config/search/apachesolr/settings/' . $env_id . '/index';
015d06b10d37 initial
dwinter
parents:
diff changeset
963 }
015d06b10d37 initial
dwinter
parents:
diff changeset
964 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
965 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
966 $form_state['redirect'] = 'admin/config/search/apachesolr';
015d06b10d37 initial
dwinter
parents:
diff changeset
967 }
015d06b10d37 initial
dwinter
parents:
diff changeset
968 apachesolr_cron($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
969 drupal_set_message(t('Apachesolr cron succesfully executed'));
015d06b10d37 initial
dwinter
parents:
diff changeset
970 }
015d06b10d37 initial
dwinter
parents:
diff changeset
971
015d06b10d37 initial
dwinter
parents:
diff changeset
972 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
973 * Form builder for to reindex the remaining items left in the queue.
015d06b10d37 initial
dwinter
parents:
diff changeset
974 *
015d06b10d37 initial
dwinter
parents:
diff changeset
975 * @see apachesolr_index_action_form_delete_confirm_submit().
015d06b10d37 initial
dwinter
parents:
diff changeset
976 *
015d06b10d37 initial
dwinter
parents:
diff changeset
977 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
978 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
979 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
980 *
015d06b10d37 initial
dwinter
parents:
diff changeset
981 * @return mixed
015d06b10d37 initial
dwinter
parents:
diff changeset
982 */
015d06b10d37 initial
dwinter
parents:
diff changeset
983 function apachesolr_index_action_form_remaining_confirm(array $form, array &$form_state, array $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
984 return confirm_form($form,
015d06b10d37 initial
dwinter
parents:
diff changeset
985 t('Are you sure you want index all remaining content?'),
015d06b10d37 initial
dwinter
parents:
diff changeset
986 'admin/config/search/apachesolr/settings/' . $environment['env_id'] . '/index',
015d06b10d37 initial
dwinter
parents:
diff changeset
987 NULL,
015d06b10d37 initial
dwinter
parents:
diff changeset
988 t('Index all remaining')
015d06b10d37 initial
dwinter
parents:
diff changeset
989 );
015d06b10d37 initial
dwinter
parents:
diff changeset
990 }
015d06b10d37 initial
dwinter
parents:
diff changeset
991
015d06b10d37 initial
dwinter
parents:
diff changeset
992 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
993 * Submit handler for the deletion form.
015d06b10d37 initial
dwinter
parents:
diff changeset
994 *
015d06b10d37 initial
dwinter
parents:
diff changeset
995 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
996 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
997 */
015d06b10d37 initial
dwinter
parents:
diff changeset
998 function apachesolr_index_action_form_remaining_confirm_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
999 if (!empty($form_state['build_info']['args'][0]['env_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1000 $env_id = $form_state['build_info']['args'][0]['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1001 $form_state['redirect'] = 'admin/config/search/apachesolr/settings/' . $env_id . '/index';
015d06b10d37 initial
dwinter
parents:
diff changeset
1002 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1003 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1004 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
1005 $form_state['redirect'] = 'admin/config/search/apachesolr';
015d06b10d37 initial
dwinter
parents:
diff changeset
1006 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1007 apachesolr_index_batch_index_remaining($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
1008 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1009
015d06b10d37 initial
dwinter
parents:
diff changeset
1010 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1011 * Form builder for the index re-enqueue form.
015d06b10d37 initial
dwinter
parents:
diff changeset
1012 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1013 * @see apachesolr_index_action_form_reset_confirm_submit().
015d06b10d37 initial
dwinter
parents:
diff changeset
1014 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1015 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
1016 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
1017 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
1018 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1019 * @return mixed
015d06b10d37 initial
dwinter
parents:
diff changeset
1020 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1021 function apachesolr_index_action_form_reset_confirm(array $form, array &$form_state, array $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1022 return confirm_form($form,
015d06b10d37 initial
dwinter
parents:
diff changeset
1023 t('Are you sure you want to queue content for reindexing?'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1024 'admin/config/search/apachesolr/settings/' . $environment['env_id'] . '/index',
015d06b10d37 initial
dwinter
parents:
diff changeset
1025 t('All content on the site will be queued for indexing. The documents currently in the Solr index will remain searchable.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1026 t('Queue all content')
015d06b10d37 initial
dwinter
parents:
diff changeset
1027 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1028 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1029
015d06b10d37 initial
dwinter
parents:
diff changeset
1030 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1031 * Submit handler for the deletion form.
015d06b10d37 initial
dwinter
parents:
diff changeset
1032 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1033 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
1034 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
1035 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1036 function apachesolr_index_action_form_reset_confirm_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1037 if (!empty($form_state['build_info']['args'][0]['env_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1038 $env_id = $form_state['build_info']['args'][0]['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1039 $form_state['redirect'] = 'admin/config/search/apachesolr/settings/' . $env_id . '/index';
015d06b10d37 initial
dwinter
parents:
diff changeset
1040 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1041 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1042 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
1043 $form_state['redirect'] = 'admin/config/search/apachesolr';
015d06b10d37 initial
dwinter
parents:
diff changeset
1044 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1045 module_load_include('inc', 'apachesolr', 'apachesolr.index');
015d06b10d37 initial
dwinter
parents:
diff changeset
1046 apachesolr_index_mark_for_reindex($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
1047 drupal_set_message(t('All the content on your site is queued for indexing. You can wait for it to be indexed during cron runs, or you can manually reindex it.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
1048 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1049
015d06b10d37 initial
dwinter
parents:
diff changeset
1050 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1051 * Form builder for the index delete/clear form.
015d06b10d37 initial
dwinter
parents:
diff changeset
1052 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1053 * @see apachesolr_index_action_form_delete_confirm_submit().
015d06b10d37 initial
dwinter
parents:
diff changeset
1054
015d06b10d37 initial
dwinter
parents:
diff changeset
1055 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
1056 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
1057 * @param array $environment
015d06b10d37 initial
dwinter
parents:
diff changeset
1058 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1059 * @return array output of confirm_form()
015d06b10d37 initial
dwinter
parents:
diff changeset
1060 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1061 function apachesolr_index_action_form_delete_confirm(array $form, array &$form_state, array $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1062 return confirm_form($form,
015d06b10d37 initial
dwinter
parents:
diff changeset
1063 t('Are you sure you want to clear your index?'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1064 'admin/config/search/apachesolr/settings/' . $environment['env_id'] . '/index',
015d06b10d37 initial
dwinter
parents:
diff changeset
1065 t('This will remove all data from your index and all search results will be incomplete until your site is reindexed.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1066 t('Delete index')
015d06b10d37 initial
dwinter
parents:
diff changeset
1067 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1068 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1069
015d06b10d37 initial
dwinter
parents:
diff changeset
1070 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1071 * Submit handler for the deletion form.
015d06b10d37 initial
dwinter
parents:
diff changeset
1072 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1073 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
1074 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
1075 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1076 function apachesolr_index_action_form_delete_confirm_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1077 if (!empty($form_state['build_info']['args'][0]['env_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1078 $env_id = $form_state['build_info']['args'][0]['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1079 $form_state['redirect'] = 'admin/config/search/apachesolr/settings/' . $env_id . '/index';
015d06b10d37 initial
dwinter
parents:
diff changeset
1080 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1081 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1082 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
1083 $form_state['redirect'] = 'admin/config/search/apachesolr';
015d06b10d37 initial
dwinter
parents:
diff changeset
1084 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1085 // Rebuild our tracking table.
015d06b10d37 initial
dwinter
parents:
diff changeset
1086 module_load_include('inc', 'apachesolr', 'apachesolr.index');
015d06b10d37 initial
dwinter
parents:
diff changeset
1087 apachesolr_index_delete_index($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
1088 drupal_set_message(t('The index has been deleted.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
1089 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1090
015d06b10d37 initial
dwinter
parents:
diff changeset
1091 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1092 * Submit a batch job to index the remaining, non-indexed content.
015d06b10d37 initial
dwinter
parents:
diff changeset
1093 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1094 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
1095 * The environment ID where it needs to index the remaining items for
015d06b10d37 initial
dwinter
parents:
diff changeset
1096 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1097 function apachesolr_index_batch_index_remaining($env_id, $total_limit = null) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1098 $batch = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1099 'operations' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1100 array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1101 'apachesolr_index_batch_index_entities',
015d06b10d37 initial
dwinter
parents:
diff changeset
1102 array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1103 $env_id,
015d06b10d37 initial
dwinter
parents:
diff changeset
1104 $total_limit,
015d06b10d37 initial
dwinter
parents:
diff changeset
1105 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
1106 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
1107 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
1108 'finished' => 'apachesolr_index_batch_index_finished',
015d06b10d37 initial
dwinter
parents:
diff changeset
1109 'title' => t('Indexing'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1110 'init_message' => t('Preparing to submit content to Solr for indexing...'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1111 'progress_message' => t('Submitting content to Solr...'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1112 'error_message' => t('Solr indexing has encountered an error.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1113 'file' => drupal_get_path('module', 'apachesolr') . '/apachesolr.admin.inc',
015d06b10d37 initial
dwinter
parents:
diff changeset
1114 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1115 batch_set($batch);
015d06b10d37 initial
dwinter
parents:
diff changeset
1116 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1117
015d06b10d37 initial
dwinter
parents:
diff changeset
1118
015d06b10d37 initial
dwinter
parents:
diff changeset
1119 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1120 * Batch Operation Callback
015d06b10d37 initial
dwinter
parents:
diff changeset
1121 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1122 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
1123 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
1124 * @param $total_limit
015d06b10d37 initial
dwinter
parents:
diff changeset
1125 * The total number of items to index across all batches
015d06b10d37 initial
dwinter
parents:
diff changeset
1126 * @param array $context
015d06b10d37 initial
dwinter
parents:
diff changeset
1127 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1128 * @return false
015d06b10d37 initial
dwinter
parents:
diff changeset
1129 * return false when an exception was caught
015d06b10d37 initial
dwinter
parents:
diff changeset
1130 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1131 * @throws Exception
015d06b10d37 initial
dwinter
parents:
diff changeset
1132 * When solr gives an error, throw an exception that solr is not available
015d06b10d37 initial
dwinter
parents:
diff changeset
1133 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1134 function apachesolr_index_batch_index_entities($env_id, $total_limit = NULL, &$context) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1135 module_load_include('inc', 'apachesolr', 'apachesolr.index');
015d06b10d37 initial
dwinter
parents:
diff changeset
1136 if (empty($context['sandbox'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1137 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
1138 // Get the $solr object
015d06b10d37 initial
dwinter
parents:
diff changeset
1139 $solr = apachesolr_get_solr($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
1140 // If there is no server available, don't continue.
015d06b10d37 initial
dwinter
parents:
diff changeset
1141 if (!$solr->ping()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1142 throw new Exception(t('No Solr instance available during indexing.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
1143 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1144 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1145 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1146 watchdog('Apache Solr', $e->getMessage(), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
1147 return FALSE;
015d06b10d37 initial
dwinter
parents:
diff changeset
1148 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1149
015d06b10d37 initial
dwinter
parents:
diff changeset
1150 $status = apachesolr_index_status($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
1151 $context['sandbox']['progress'] = 0;
015d06b10d37 initial
dwinter
parents:
diff changeset
1152 $context['sandbox']['submitted'] = 0;
015d06b10d37 initial
dwinter
parents:
diff changeset
1153
015d06b10d37 initial
dwinter
parents:
diff changeset
1154 // How many items do we want to index? All or a limited set of items
015d06b10d37 initial
dwinter
parents:
diff changeset
1155 if (empty($total_limit)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1156 $context['sandbox']['max'] = $status['remaining'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1157 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1158 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1159 $context['sandbox']['max'] = $total_limit;
015d06b10d37 initial
dwinter
parents:
diff changeset
1160 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1161 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1162
015d06b10d37 initial
dwinter
parents:
diff changeset
1163 // We can safely process the apachesolr_cron_limit nodes at a time without a
015d06b10d37 initial
dwinter
parents:
diff changeset
1164 // timeout or out of memory error.
015d06b10d37 initial
dwinter
parents:
diff changeset
1165 $limit = variable_get('apachesolr_cron_limit', 50);
015d06b10d37 initial
dwinter
parents:
diff changeset
1166
015d06b10d37 initial
dwinter
parents:
diff changeset
1167 // Reduce the limit for our final batch if we would be processing more than had been requested
015d06b10d37 initial
dwinter
parents:
diff changeset
1168 if ($limit + $context['sandbox']['progress'] > $context['sandbox']['max']) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1169 $limit = $context['sandbox']['max'] - $context['sandbox']['progress'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1170 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1171
015d06b10d37 initial
dwinter
parents:
diff changeset
1172 if ($context['sandbox']['max'] >= $context['sandbox']['progress'] + $limit) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1173 $context['sandbox']['progress'] += $limit;
015d06b10d37 initial
dwinter
parents:
diff changeset
1174 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1175 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1176 $context['sandbox']['progress'] = $context['sandbox']['max'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1177 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1178 $context['sandbox']['submitted'] += apachesolr_index_entities($env_id, $limit);
015d06b10d37 initial
dwinter
parents:
diff changeset
1179
015d06b10d37 initial
dwinter
parents:
diff changeset
1180 $arguments = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1181 '@current' => $context['sandbox']['progress'],
015d06b10d37 initial
dwinter
parents:
diff changeset
1182 '@total' => $context['sandbox']['max'],
015d06b10d37 initial
dwinter
parents:
diff changeset
1183 '@submitted' => $context['sandbox']['submitted'],
015d06b10d37 initial
dwinter
parents:
diff changeset
1184 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1185 $context['message'] = t('Inspected @current of @total entities. Submitted @submitted documents to Solr', $arguments);
015d06b10d37 initial
dwinter
parents:
diff changeset
1186
015d06b10d37 initial
dwinter
parents:
diff changeset
1187 // Inform the batch engine that we are not finished, and provide an
015d06b10d37 initial
dwinter
parents:
diff changeset
1188 // estimation of the completion level we reached.
015d06b10d37 initial
dwinter
parents:
diff changeset
1189 $context['finished'] = empty($context['sandbox']['max']) ? 1 : $context['sandbox']['progress'] / $context['sandbox']['max'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1190
015d06b10d37 initial
dwinter
parents:
diff changeset
1191 // Put the total into the results section when we're finished so we can
015d06b10d37 initial
dwinter
parents:
diff changeset
1192 // show it to the admin.
015d06b10d37 initial
dwinter
parents:
diff changeset
1193 if ($context['finished']) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1194 $context['results']['count'] = $context['sandbox']['progress'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1195 $context['results']['submitted'] = $context['sandbox']['submitted'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1196 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1197 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1198
015d06b10d37 initial
dwinter
parents:
diff changeset
1199 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1200 * Batch 'finished' callback
015d06b10d37 initial
dwinter
parents:
diff changeset
1201 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1202 * @param bool $success
015d06b10d37 initial
dwinter
parents:
diff changeset
1203 * Whether the batch ended with success or not
015d06b10d37 initial
dwinter
parents:
diff changeset
1204 * @param array $results
015d06b10d37 initial
dwinter
parents:
diff changeset
1205 * @param array $operations
015d06b10d37 initial
dwinter
parents:
diff changeset
1206 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1207 function apachesolr_index_batch_index_finished($success, array $results, array $operations) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1208 $message = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
1209 // $results['count'] will not be set if Solr is unavailable.
015d06b10d37 initial
dwinter
parents:
diff changeset
1210 if (isset($results['count'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1211 $message .= format_plural($results['count'], '1 item processed successfully. ', '@count items successfully processed. ');
015d06b10d37 initial
dwinter
parents:
diff changeset
1212 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1213 if (isset($results['submitted'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1214 $message .= format_plural($results['submitted'], '1 document successfully sent to Solr.', '@count documents successfully sent to Solr.');
015d06b10d37 initial
dwinter
parents:
diff changeset
1215 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1216 if ($success) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1217 $type = 'status';
015d06b10d37 initial
dwinter
parents:
diff changeset
1218 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1219 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1220 // An error occurred. $operations contains the unprocessed operations.
015d06b10d37 initial
dwinter
parents:
diff changeset
1221 $error_operation = reset($operations);
015d06b10d37 initial
dwinter
parents:
diff changeset
1222 $message .= ' ' . t('An error occurred while processing @num with arguments: @args', array('@num' => $error_operation[0], '@args' => print_r($error_operation[0], TRUE)));
015d06b10d37 initial
dwinter
parents:
diff changeset
1223 $type = 'error';
015d06b10d37 initial
dwinter
parents:
diff changeset
1224 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1225 drupal_set_message($message, $type);
015d06b10d37 initial
dwinter
parents:
diff changeset
1226 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1227
015d06b10d37 initial
dwinter
parents:
diff changeset
1228 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1229 * Form builder for the bundle configuration form.
015d06b10d37 initial
dwinter
parents:
diff changeset
1230 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1231 * @see apachesolr_index_config_form_submit().
015d06b10d37 initial
dwinter
parents:
diff changeset
1232 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1233 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
1234 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
1235 * @param string $env_id
015d06b10d37 initial
dwinter
parents:
diff changeset
1236 * The machine name of the environment.
015d06b10d37 initial
dwinter
parents:
diff changeset
1237 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1238 * @return array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
1239 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1240 function apachesolr_index_config_form(array $form, array $form_state, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1241 $form['config'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1242 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
1243 '#title' => t('Configuration'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1244 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1245 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1246
015d06b10d37 initial
dwinter
parents:
diff changeset
1247 $form['config']['bundles'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1248 '#type' => 'markup',
015d06b10d37 initial
dwinter
parents:
diff changeset
1249 '#markup' => t('Select the entity types and bundles that should be indexed.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1250 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1251
015d06b10d37 initial
dwinter
parents:
diff changeset
1252 // For future extensibility, when we have multiple cores.
015d06b10d37 initial
dwinter
parents:
diff changeset
1253 $form['config']['env_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1254 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
1255 '#value' => $env_id,
015d06b10d37 initial
dwinter
parents:
diff changeset
1256 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1257
015d06b10d37 initial
dwinter
parents:
diff changeset
1258 foreach (entity_get_info() as $entity_type => $entity_info) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1259 if (!empty($entity_info['apachesolr']['indexable'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1260 $options = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
1261 foreach ($entity_info['bundles'] as $key => $info) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1262 $options[$key] = $info['label'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1263 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1264
015d06b10d37 initial
dwinter
parents:
diff changeset
1265 $form['config']['entities']['#tree'] = TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
1266 $form['config']['entities'][$entity_type] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1267 '#type' => 'checkboxes',
015d06b10d37 initial
dwinter
parents:
diff changeset
1268 '#title' => check_plain($entity_info['label']),
015d06b10d37 initial
dwinter
parents:
diff changeset
1269 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
1270 '#default_value' => apachesolr_get_index_bundles($env_id, $entity_type),
015d06b10d37 initial
dwinter
parents:
diff changeset
1271 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1272 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1273 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1274
015d06b10d37 initial
dwinter
parents:
diff changeset
1275 $form['config']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
015d06b10d37 initial
dwinter
parents:
diff changeset
1276
015d06b10d37 initial
dwinter
parents:
diff changeset
1277 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
1278 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1279
015d06b10d37 initial
dwinter
parents:
diff changeset
1280 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1281 * Submit handler for the bundle configuration form.
015d06b10d37 initial
dwinter
parents:
diff changeset
1282 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1283 * @param array $form
015d06b10d37 initial
dwinter
parents:
diff changeset
1284 * @param array $form_state
015d06b10d37 initial
dwinter
parents:
diff changeset
1285 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1286 function apachesolr_index_config_form_submit(array $form, array &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1287 module_load_include('inc', 'apachesolr', 'apachesolr.index');
015d06b10d37 initial
dwinter
parents:
diff changeset
1288 $form_values = $form_state['values'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1289 $env_id = $form_values['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1290
015d06b10d37 initial
dwinter
parents:
diff changeset
1291 foreach ($form_values['entities'] as $entity_type => $bundles) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1292 $existing_bundles = apachesolr_get_index_bundles($env_id, $entity_type);
015d06b10d37 initial
dwinter
parents:
diff changeset
1293 $all_bundles = array_keys($bundles);
015d06b10d37 initial
dwinter
parents:
diff changeset
1294 $new_bundles = array_values(array_filter($bundles));
015d06b10d37 initial
dwinter
parents:
diff changeset
1295 apachesolr_index_set_bundles($env_id, $entity_type, $new_bundles);
015d06b10d37 initial
dwinter
parents:
diff changeset
1296
015d06b10d37 initial
dwinter
parents:
diff changeset
1297 // Remove all excluded bundles - this happens on form submit
015d06b10d37 initial
dwinter
parents:
diff changeset
1298 // even if there is no change so the admin can remove
015d06b10d37 initial
dwinter
parents:
diff changeset
1299 // bundles if there was an error.
015d06b10d37 initial
dwinter
parents:
diff changeset
1300 $excluded_bundles = array_diff($all_bundles, $new_bundles);
015d06b10d37 initial
dwinter
parents:
diff changeset
1301 if (apachesolr_index_delete_bundles($env_id, $entity_type, $excluded_bundles)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1302 $callback = apachesolr_entity_get_callback($entity_type, 'bundles changed callback');
015d06b10d37 initial
dwinter
parents:
diff changeset
1303 if (!empty($callback)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1304 call_user_func($callback, $env_id, $existing_bundles, $new_bundles);
015d06b10d37 initial
dwinter
parents:
diff changeset
1305 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1306 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1307 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1308 drupal_set_message(t('Search is temporarily unavailable. If the problem persists, please contact the site administrator.'), 'error');
015d06b10d37 initial
dwinter
parents:
diff changeset
1309 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1310 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1311
015d06b10d37 initial
dwinter
parents:
diff changeset
1312 // Clear the entity cache, since we will be changing its data.
015d06b10d37 initial
dwinter
parents:
diff changeset
1313 entity_info_cache_clear();
015d06b10d37 initial
dwinter
parents:
diff changeset
1314 cache_clear_all('apachesolr:environments', 'cache_apachesolr');
015d06b10d37 initial
dwinter
parents:
diff changeset
1315 drupal_set_message(t('Your settings have been saved.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
1316 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1317
015d06b10d37 initial
dwinter
parents:
diff changeset
1318 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
1319 * Page callback for node/%node/devel/apachesolr.
015d06b10d37 initial
dwinter
parents:
diff changeset
1320 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1321 * @param object $node
015d06b10d37 initial
dwinter
parents:
diff changeset
1322 * @return string debugging information
015d06b10d37 initial
dwinter
parents:
diff changeset
1323 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1324 function apachesolr_devel($node) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1325 module_load_include('inc', 'apachesolr', 'apachesolr.index');
015d06b10d37 initial
dwinter
parents:
diff changeset
1326 $item = new stdClass();
015d06b10d37 initial
dwinter
parents:
diff changeset
1327 $item->entity_type = 'node';
015d06b10d37 initial
dwinter
parents:
diff changeset
1328 $item->entity_id = $node->nid;
015d06b10d37 initial
dwinter
parents:
diff changeset
1329 $output = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
1330 foreach (apachesolr_load_all_environments() as $env_id => $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1331 $documents = apachesolr_index_entity_to_documents($item, $env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
1332 $output .= '<h1>' . t('Environment %name (%env_id)', array('%name' => $environment['name'], '%env_id' => $env_id)). '</h1>';
015d06b10d37 initial
dwinter
parents:
diff changeset
1333 foreach ($documents as $document) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1334 $debug_data = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
1335 foreach ($document as $key => $value) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1336 $debug_data[$key] = $value;
015d06b10d37 initial
dwinter
parents:
diff changeset
1337 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1338 $output .= kdevel_print_object($debug_data);
015d06b10d37 initial
dwinter
parents:
diff changeset
1339 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1340 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1341 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
1342 }