annotate sites/all/modules/custom/solrconnect/apachesolr_search.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 settings for searching.
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 * Helper function for empty search configuration.
015d06b10d37 initial
dwinter
parents:
diff changeset
10 */
015d06b10d37 initial
dwinter
parents:
diff changeset
11 function _apachesolr_search_browse_form($default_value) {
015d06b10d37 initial
dwinter
parents:
diff changeset
12 $description = t('This is what is shown when the user enters an empty search, or removes all filters from an active search.') . ' ';
015d06b10d37 initial
dwinter
parents:
diff changeset
13 if (!module_exists('facetapi')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
14 $description .= t('<strong>Facets will not be shown until you enable Facet API module.</strong>');
015d06b10d37 initial
dwinter
parents:
diff changeset
15 }
015d06b10d37 initial
dwinter
parents:
diff changeset
16 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
17 $description .= t('Remember to configure the facets on the <a href="!facetslink">search environment page</a> and assign blocks to regions on the <a href="!blocklink">block settings page</a>', array(
015d06b10d37 initial
dwinter
parents:
diff changeset
18 '!facetslink' => url('admin/config/search/apachesolr/settings/'),
015d06b10d37 initial
dwinter
parents:
diff changeset
19 '!blocklink' => url('admin/structure/block'),
015d06b10d37 initial
dwinter
parents:
diff changeset
20 ));
015d06b10d37 initial
dwinter
parents:
diff changeset
21 }
015d06b10d37 initial
dwinter
parents:
diff changeset
22 return array(
015d06b10d37 initial
dwinter
parents:
diff changeset
23 '#type' => 'radios',
015d06b10d37 initial
dwinter
parents:
diff changeset
24 '#title' => t('Behavior on empty search'),
015d06b10d37 initial
dwinter
parents:
diff changeset
25 '#options' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
26 'none' => t("Show search box"),
015d06b10d37 initial
dwinter
parents:
diff changeset
27 'browse' => t("Show enabled facets' blocks under the search box"),
015d06b10d37 initial
dwinter
parents:
diff changeset
28 'blocks' => t("Show enabled facets' blocks in their configured regions"),
015d06b10d37 initial
dwinter
parents:
diff changeset
29 'results' => t("Show enabled facets' blocks in their configured regions and first page of all available results"),
015d06b10d37 initial
dwinter
parents:
diff changeset
30 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
31 '#default_value' => $default_value,
015d06b10d37 initial
dwinter
parents:
diff changeset
32 '#description' => $description,
015d06b10d37 initial
dwinter
parents:
diff changeset
33 );
015d06b10d37 initial
dwinter
parents:
diff changeset
34 }
015d06b10d37 initial
dwinter
parents:
diff changeset
35
015d06b10d37 initial
dwinter
parents:
diff changeset
36 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
37 * Menu callback for the overview page showing custom search pages and blocks.
015d06b10d37 initial
dwinter
parents:
diff changeset
38 * @return array $build
015d06b10d37 initial
dwinter
parents:
diff changeset
39 */
015d06b10d37 initial
dwinter
parents:
diff changeset
40 function apachesolr_search_page_list_all() {
015d06b10d37 initial
dwinter
parents:
diff changeset
41 $build['pages'] = apachesolr_search_page_list_pages();
015d06b10d37 initial
dwinter
parents:
diff changeset
42 $build['blocks'] = apachesolr_search_page_list_blocks();
015d06b10d37 initial
dwinter
parents:
diff changeset
43 return $build;
015d06b10d37 initial
dwinter
parents:
diff changeset
44
015d06b10d37 initial
dwinter
parents:
diff changeset
45 }
015d06b10d37 initial
dwinter
parents:
diff changeset
46
015d06b10d37 initial
dwinter
parents:
diff changeset
47 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
48 * Listing of all the search pages
015d06b10d37 initial
dwinter
parents:
diff changeset
49 * @return array $build
015d06b10d37 initial
dwinter
parents:
diff changeset
50 */
015d06b10d37 initial
dwinter
parents:
diff changeset
51 function apachesolr_search_page_list_pages() {
015d06b10d37 initial
dwinter
parents:
diff changeset
52 $build = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
53 $rows = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
54 $rows['core_search'] = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
55
015d06b10d37 initial
dwinter
parents:
diff changeset
56 // Build the sortable table header.
015d06b10d37 initial
dwinter
parents:
diff changeset
57 $header = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
58 'label' => array('data' => t('Name'), 'field' => 's.label'),
015d06b10d37 initial
dwinter
parents:
diff changeset
59 'path' => array('data' => t('Path'), 'field' => 's.search_path'),
015d06b10d37 initial
dwinter
parents:
diff changeset
60 'environment' => array('data' => t('Search environment')),
015d06b10d37 initial
dwinter
parents:
diff changeset
61 'operations' => array('data' => t('Operations')),
015d06b10d37 initial
dwinter
parents:
diff changeset
62 );
015d06b10d37 initial
dwinter
parents:
diff changeset
63
015d06b10d37 initial
dwinter
parents:
diff changeset
64 $search_pages = apachesolr_search_load_all_search_pages();
015d06b10d37 initial
dwinter
parents:
diff changeset
65 $default_search_page = apachesolr_search_default_search_page();
015d06b10d37 initial
dwinter
parents:
diff changeset
66 foreach ($search_pages as $search_page) {
015d06b10d37 initial
dwinter
parents:
diff changeset
67 $row = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
68
015d06b10d37 initial
dwinter
parents:
diff changeset
69 // Add the label
015d06b10d37 initial
dwinter
parents:
diff changeset
70 $label = check_plain($search_page['label']);
015d06b10d37 initial
dwinter
parents:
diff changeset
71 // Is this row our default environment?
015d06b10d37 initial
dwinter
parents:
diff changeset
72 if ($search_page['page_id'] == $default_search_page) {
015d06b10d37 initial
dwinter
parents:
diff changeset
73 $label = t('!search_page <em>(Default)</em>', array('!search_page' => $label));
015d06b10d37 initial
dwinter
parents:
diff changeset
74 }
015d06b10d37 initial
dwinter
parents:
diff changeset
75
015d06b10d37 initial
dwinter
parents:
diff changeset
76 $row[] = $label;
015d06b10d37 initial
dwinter
parents:
diff changeset
77 // Add the link
015d06b10d37 initial
dwinter
parents:
diff changeset
78 $row[] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
79 'data' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
80 '#type' => 'link',
015d06b10d37 initial
dwinter
parents:
diff changeset
81 '#title' => $search_page['search_path'],
015d06b10d37 initial
dwinter
parents:
diff changeset
82 '#href' => $search_page['search_path'],
015d06b10d37 initial
dwinter
parents:
diff changeset
83 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
84 );
015d06b10d37 initial
dwinter
parents:
diff changeset
85
015d06b10d37 initial
dwinter
parents:
diff changeset
86 // Add the search environment
015d06b10d37 initial
dwinter
parents:
diff changeset
87 $environment = apachesolr_environment_load($search_page['env_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
88 $row[] = $environment ? check_plain($environment['name']) : check_plain(t('<Disabled>'));
015d06b10d37 initial
dwinter
parents:
diff changeset
89 // Operations
015d06b10d37 initial
dwinter
parents:
diff changeset
90 $row[] = array('data' => l(t('Edit'), 'admin/config/search/apachesolr/search-pages/' . $search_page['page_id'] . '/edit'));
015d06b10d37 initial
dwinter
parents:
diff changeset
91 $row[] = array('data' => l(t('Clone'), 'admin/config/search/apachesolr/search-pages/' . $search_page['page_id'] . '/clone'));
015d06b10d37 initial
dwinter
parents:
diff changeset
92
015d06b10d37 initial
dwinter
parents:
diff changeset
93 // Allow to revert a search page or to delete it
015d06b10d37 initial
dwinter
parents:
diff changeset
94 if (!isset($search_page['settings']['apachesolr_search_not_removable']) && !isset($search_page['in_code_only'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
95 if ((isset($search_page['type']) && $search_page['type'] == 'Overridden')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
96 $row[] = array('data' => l(t('Revert'), 'admin/config/search/apachesolr/search-pages/' . $search_page['page_id'] . '/delete'));
015d06b10d37 initial
dwinter
parents:
diff changeset
97 } else {
015d06b10d37 initial
dwinter
parents:
diff changeset
98 $row[] = array('data' => l(t('Delete'), 'admin/config/search/apachesolr/search-pages/' . $search_page['page_id'] . '/delete'));
015d06b10d37 initial
dwinter
parents:
diff changeset
99 }
015d06b10d37 initial
dwinter
parents:
diff changeset
100 }
015d06b10d37 initial
dwinter
parents:
diff changeset
101 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
102 $row[] = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
103 }
015d06b10d37 initial
dwinter
parents:
diff changeset
104 $rows[$search_page['page_id']] = $row;
015d06b10d37 initial
dwinter
parents:
diff changeset
105 }
015d06b10d37 initial
dwinter
parents:
diff changeset
106
015d06b10d37 initial
dwinter
parents:
diff changeset
107 // Automatically enlarge our header with the operations size
015d06b10d37 initial
dwinter
parents:
diff changeset
108 $header['operations']['colspan'] = count(reset($rows)) - 3;
015d06b10d37 initial
dwinter
parents:
diff changeset
109
015d06b10d37 initial
dwinter
parents:
diff changeset
110 $build['list'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
111 '#prefix' => '<h3>Pages</h3>',
015d06b10d37 initial
dwinter
parents:
diff changeset
112 '#theme' => 'table',
015d06b10d37 initial
dwinter
parents:
diff changeset
113 '#header' => $header,
015d06b10d37 initial
dwinter
parents:
diff changeset
114 '#rows' => array_values($rows),
015d06b10d37 initial
dwinter
parents:
diff changeset
115 '#empty' => t('No available search pages.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
116 );
015d06b10d37 initial
dwinter
parents:
diff changeset
117 $build['pager'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
118 '#theme' => 'pager',
015d06b10d37 initial
dwinter
parents:
diff changeset
119 '#quantity' => 20,
015d06b10d37 initial
dwinter
parents:
diff changeset
120 '#weight' => 10,
015d06b10d37 initial
dwinter
parents:
diff changeset
121 );
015d06b10d37 initial
dwinter
parents:
diff changeset
122
015d06b10d37 initial
dwinter
parents:
diff changeset
123 return $build;
015d06b10d37 initial
dwinter
parents:
diff changeset
124 }
015d06b10d37 initial
dwinter
parents:
diff changeset
125
015d06b10d37 initial
dwinter
parents:
diff changeset
126 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
127 * Listing of all the search blocks
015d06b10d37 initial
dwinter
parents:
diff changeset
128 * @return array $build
015d06b10d37 initial
dwinter
parents:
diff changeset
129 */
015d06b10d37 initial
dwinter
parents:
diff changeset
130 function apachesolr_search_page_list_blocks() {
015d06b10d37 initial
dwinter
parents:
diff changeset
131 $build = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
132 $rows = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
133
015d06b10d37 initial
dwinter
parents:
diff changeset
134 // Build the sortable table header.
015d06b10d37 initial
dwinter
parents:
diff changeset
135 $header = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
136 'label' => array('data' => t('Name'), 'field' => 's.label'),
015d06b10d37 initial
dwinter
parents:
diff changeset
137 'environment' => array('data' => t('Search environment')),
015d06b10d37 initial
dwinter
parents:
diff changeset
138 'operations' => array('data' => t('Operations')),
015d06b10d37 initial
dwinter
parents:
diff changeset
139 );
015d06b10d37 initial
dwinter
parents:
diff changeset
140
015d06b10d37 initial
dwinter
parents:
diff changeset
141 $search_blocks = variable_get('apachesolr_search_mlt_blocks', array());
015d06b10d37 initial
dwinter
parents:
diff changeset
142 foreach ($search_blocks as $search_block_id => $search_block) {
015d06b10d37 initial
dwinter
parents:
diff changeset
143 $row = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
144
015d06b10d37 initial
dwinter
parents:
diff changeset
145 // Add the label
015d06b10d37 initial
dwinter
parents:
diff changeset
146 $label = check_plain($search_block['name']);
015d06b10d37 initial
dwinter
parents:
diff changeset
147 $row[] = $label;
015d06b10d37 initial
dwinter
parents:
diff changeset
148
015d06b10d37 initial
dwinter
parents:
diff changeset
149 // Add the search environment
015d06b10d37 initial
dwinter
parents:
diff changeset
150 $environment = apachesolr_environment_load($search_block['mlt_env_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
151 $row[] = $environment ? check_plain($environment['name']) : check_plain(t('<Disabled>'));
015d06b10d37 initial
dwinter
parents:
diff changeset
152 // Operations
015d06b10d37 initial
dwinter
parents:
diff changeset
153 if (module_exists('block')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
154 $row[] = array('data' => l(t('Configure'), 'admin/structure/block/manage/apachesolr_search/' . $search_block_id . '/configure', array('query' => array('destination' => current_path()))));
015d06b10d37 initial
dwinter
parents:
diff changeset
155 }
015d06b10d37 initial
dwinter
parents:
diff changeset
156 $row[] = array('data' => l(t('Delete'), 'admin/config/search/apachesolr/search-pages/block/' . $search_block_id . '/delete'));
015d06b10d37 initial
dwinter
parents:
diff changeset
157 $rows[$search_block_id] = $row;
015d06b10d37 initial
dwinter
parents:
diff changeset
158 }
015d06b10d37 initial
dwinter
parents:
diff changeset
159
015d06b10d37 initial
dwinter
parents:
diff changeset
160 // Automatically enlarge our header with the operations size
015d06b10d37 initial
dwinter
parents:
diff changeset
161 $header['operations']['colspan'] = count(reset($rows)) - 2;
015d06b10d37 initial
dwinter
parents:
diff changeset
162
015d06b10d37 initial
dwinter
parents:
diff changeset
163 $build['list'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
164 '#prefix' => '<h3>Blocks "More Like This"</h3>',
015d06b10d37 initial
dwinter
parents:
diff changeset
165 '#theme' => 'table',
015d06b10d37 initial
dwinter
parents:
diff changeset
166 '#header' => $header,
015d06b10d37 initial
dwinter
parents:
diff changeset
167 '#rows' => array_values($rows),
015d06b10d37 initial
dwinter
parents:
diff changeset
168 '#empty' => t('No available search blocks.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
169 );
015d06b10d37 initial
dwinter
parents:
diff changeset
170 $build['pager'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
171 '#theme' => 'pager',
015d06b10d37 initial
dwinter
parents:
diff changeset
172 '#quantity' => 20,
015d06b10d37 initial
dwinter
parents:
diff changeset
173 '#weight' => 10,
015d06b10d37 initial
dwinter
parents:
diff changeset
174 );
015d06b10d37 initial
dwinter
parents:
diff changeset
175
015d06b10d37 initial
dwinter
parents:
diff changeset
176 return $build;
015d06b10d37 initial
dwinter
parents:
diff changeset
177 }
015d06b10d37 initial
dwinter
parents:
diff changeset
178
015d06b10d37 initial
dwinter
parents:
diff changeset
179 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
180 * Menu callback/form-builder for the form to create or edit a search page.
015d06b10d37 initial
dwinter
parents:
diff changeset
181 */
015d06b10d37 initial
dwinter
parents:
diff changeset
182 function apachesolr_search_page_settings_form($form, &$form_state, $search_page = NULL) {
015d06b10d37 initial
dwinter
parents:
diff changeset
183 $environments = apachesolr_load_all_environments();
015d06b10d37 initial
dwinter
parents:
diff changeset
184 $options = array('' => t('<Disabled>'));
015d06b10d37 initial
dwinter
parents:
diff changeset
185 foreach ($environments as $id => $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
186 $options[$id] = $environment['name'];
015d06b10d37 initial
dwinter
parents:
diff changeset
187 }
015d06b10d37 initial
dwinter
parents:
diff changeset
188 // Validate the env_id.
015d06b10d37 initial
dwinter
parents:
diff changeset
189 if (!empty($search_page['env_id']) && !apachesolr_environment_load($search_page['env_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
190 $search_page['env_id'] = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
191 }
015d06b10d37 initial
dwinter
parents:
diff changeset
192
015d06b10d37 initial
dwinter
parents:
diff changeset
193 // Initializes form with common settings.
015d06b10d37 initial
dwinter
parents:
diff changeset
194 $form['search_page'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
195 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
196 '#value' => $search_page,
015d06b10d37 initial
dwinter
parents:
diff changeset
197 );
015d06b10d37 initial
dwinter
parents:
diff changeset
198
015d06b10d37 initial
dwinter
parents:
diff changeset
199 $form['label'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
200 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
201 '#title' => t('Label'),
015d06b10d37 initial
dwinter
parents:
diff changeset
202 '#description' => '',
015d06b10d37 initial
dwinter
parents:
diff changeset
203 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
204 '#size' => 30,
015d06b10d37 initial
dwinter
parents:
diff changeset
205 '#maxlength' => 32,
015d06b10d37 initial
dwinter
parents:
diff changeset
206 '#default_value' => !empty($search_page['label']) ? $search_page['label'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
207 '#description' => t('The human-readable name of the search page configuration.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
208 );
015d06b10d37 initial
dwinter
parents:
diff changeset
209
015d06b10d37 initial
dwinter
parents:
diff changeset
210 $form['page_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
211 '#type' => 'machine_name',
015d06b10d37 initial
dwinter
parents:
diff changeset
212 '#maxlength' => 32,
015d06b10d37 initial
dwinter
parents:
diff changeset
213 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
214 '#machine_name' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
215 'exists' => 'apachesolr_search_page_exists',
015d06b10d37 initial
dwinter
parents:
diff changeset
216 'source' => array('label'),
015d06b10d37 initial
dwinter
parents:
diff changeset
217 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
218 '#description' => '',
015d06b10d37 initial
dwinter
parents:
diff changeset
219 '#default_value' => !empty($search_page['page_id']) ? $search_page['page_id'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
220 '#disabled' => !empty($search_page),
015d06b10d37 initial
dwinter
parents:
diff changeset
221 '#description' => t('A unique machine-readable identifier for the search page configuration. It must only contain lowercase letters, numbers, and underscores.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
222 );
015d06b10d37 initial
dwinter
parents:
diff changeset
223
015d06b10d37 initial
dwinter
parents:
diff changeset
224 $form['description_enable'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
225 '#type' => 'checkbox',
015d06b10d37 initial
dwinter
parents:
diff changeset
226 '#title' => t('Description'),
015d06b10d37 initial
dwinter
parents:
diff changeset
227 '#default_value' => !empty($search_page['description']) ? TRUE : FALSE
015d06b10d37 initial
dwinter
parents:
diff changeset
228 );
015d06b10d37 initial
dwinter
parents:
diff changeset
229
015d06b10d37 initial
dwinter
parents:
diff changeset
230 $form['description'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
231 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
232 '#title' => t('Provide description'),
015d06b10d37 initial
dwinter
parents:
diff changeset
233 '#title_display' => 'invisible',
015d06b10d37 initial
dwinter
parents:
diff changeset
234 '#size' => 64,
015d06b10d37 initial
dwinter
parents:
diff changeset
235 '#default_value' => !empty($search_page['description']) ? $search_page['description'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
236 '#dependency' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
237 'edit-description-enable' => array(1),
015d06b10d37 initial
dwinter
parents:
diff changeset
238 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
239 );
015d06b10d37 initial
dwinter
parents:
diff changeset
240
015d06b10d37 initial
dwinter
parents:
diff changeset
241 $is_default = FALSE;
015d06b10d37 initial
dwinter
parents:
diff changeset
242 if (!empty($search_page)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
243 $is_default = $search_page['page_id'] == apachesolr_search_default_search_page();
015d06b10d37 initial
dwinter
parents:
diff changeset
244 }
015d06b10d37 initial
dwinter
parents:
diff changeset
245 $form['make_default'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
246 '#type' => 'checkbox',
015d06b10d37 initial
dwinter
parents:
diff changeset
247 '#title' => t('Make this Solr Search Page the default'),
015d06b10d37 initial
dwinter
parents:
diff changeset
248 '#description' => t('Useful for eg. making facets to link to this page when they are shown on non-search pages'),
015d06b10d37 initial
dwinter
parents:
diff changeset
249 '#default_value' => $is_default,
015d06b10d37 initial
dwinter
parents:
diff changeset
250 '#disabled' => $is_default,
015d06b10d37 initial
dwinter
parents:
diff changeset
251 );
015d06b10d37 initial
dwinter
parents:
diff changeset
252
015d06b10d37 initial
dwinter
parents:
diff changeset
253 $form['info'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
254 '#title' => t('Search Page Information'),
015d06b10d37 initial
dwinter
parents:
diff changeset
255 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
256 '#collapsible' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
257 '#prefix' => '<div id="dynamic-search-page">',
015d06b10d37 initial
dwinter
parents:
diff changeset
258 '#suffix' => '</div>',
015d06b10d37 initial
dwinter
parents:
diff changeset
259 );
015d06b10d37 initial
dwinter
parents:
diff changeset
260
015d06b10d37 initial
dwinter
parents:
diff changeset
261 $core_search = FALSE;
015d06b10d37 initial
dwinter
parents:
diff changeset
262 if (!empty($search_page['page_id']) && ($search_page['page_id'] == 'core_search')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
263 $core_search = TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
264 }
015d06b10d37 initial
dwinter
parents:
diff changeset
265 if ($core_search) {
015d06b10d37 initial
dwinter
parents:
diff changeset
266 $description = t('This page always uses the current default search environment');
015d06b10d37 initial
dwinter
parents:
diff changeset
267 }
015d06b10d37 initial
dwinter
parents:
diff changeset
268 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
269 $description = t('The environment that is used by this search page. If no environment is selected, this page will be disabled.');
015d06b10d37 initial
dwinter
parents:
diff changeset
270 }
015d06b10d37 initial
dwinter
parents:
diff changeset
271
015d06b10d37 initial
dwinter
parents:
diff changeset
272 $form['info']['env_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
273 '#title' => t('Search environment'),
015d06b10d37 initial
dwinter
parents:
diff changeset
274 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
275 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
276 '#default_value' => !empty($search_page['env_id']) ? $search_page['env_id'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
277 '#disabled' => $core_search,
015d06b10d37 initial
dwinter
parents:
diff changeset
278 '#description' => $description,
015d06b10d37 initial
dwinter
parents:
diff changeset
279 );
015d06b10d37 initial
dwinter
parents:
diff changeset
280
015d06b10d37 initial
dwinter
parents:
diff changeset
281 $form['info']['page_title'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
282 '#title' => t('Title'),
015d06b10d37 initial
dwinter
parents:
diff changeset
283 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
284 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
285 '#maxlength' => 255,
015d06b10d37 initial
dwinter
parents:
diff changeset
286 '#description' => 'You can use %value to place the search term in the title',
015d06b10d37 initial
dwinter
parents:
diff changeset
287 '#default_value' => !empty($search_page['page_title']) ? $search_page['page_title'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
288 );
015d06b10d37 initial
dwinter
parents:
diff changeset
289
015d06b10d37 initial
dwinter
parents:
diff changeset
290 $search_types = apachesolr_search_load_all_search_types();
015d06b10d37 initial
dwinter
parents:
diff changeset
291 $options = array('custom' => t('Custom Field'));
015d06b10d37 initial
dwinter
parents:
diff changeset
292 foreach ($search_types as $id => $search_type) {
015d06b10d37 initial
dwinter
parents:
diff changeset
293 $options[$id] = $search_type['name'];
015d06b10d37 initial
dwinter
parents:
diff changeset
294 }
015d06b10d37 initial
dwinter
parents:
diff changeset
295
015d06b10d37 initial
dwinter
parents:
diff changeset
296 $form['info']['search_type'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
297 '#title' => t('Search Type'),
015d06b10d37 initial
dwinter
parents:
diff changeset
298 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
299 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
300 '#default_value' => !empty($search_page['settings']['apachesolr_search_search_type']) ? $search_page['settings']['apachesolr_search_search_type'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
301 '#access' => !$core_search,
015d06b10d37 initial
dwinter
parents:
diff changeset
302 '#description' => t('Use this only when filtering on a value from the search path.
015d06b10d37 initial
dwinter
parents:
diff changeset
303 For example, select Taxonomy Term to filter on a term ID (search/taxonomy/%).'),
015d06b10d37 initial
dwinter
parents:
diff changeset
304 '#ajax' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
305 'callback' => 'apachesolr_search_ajax_search_page_default',
015d06b10d37 initial
dwinter
parents:
diff changeset
306 'wrapper' => 'dynamic-search-page',
015d06b10d37 initial
dwinter
parents:
diff changeset
307 'method' => 'replace',
015d06b10d37 initial
dwinter
parents:
diff changeset
308 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
309 );
015d06b10d37 initial
dwinter
parents:
diff changeset
310
015d06b10d37 initial
dwinter
parents:
diff changeset
311 // Token element validate is added to validate the specific
015d06b10d37 initial
dwinter
parents:
diff changeset
312 // tokens that are allowed
015d06b10d37 initial
dwinter
parents:
diff changeset
313 $form['info']['search_path'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
314 '#title' => t('Path'),
015d06b10d37 initial
dwinter
parents:
diff changeset
315 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
316 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
317 '#maxlength' => 255,
015d06b10d37 initial
dwinter
parents:
diff changeset
318 '#description' => t('For example: search/my-search-page. Search keywords will appear at the end of the path.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
319 '#default_value' => !empty($search_page['search_path']) ? $search_page['search_path'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
320 );
015d06b10d37 initial
dwinter
parents:
diff changeset
321 if (!$core_search) {
015d06b10d37 initial
dwinter
parents:
diff changeset
322 $form['info']['search_path']['#description'] .= ' ' . t('You can use one % to make the search page dynamic.');
015d06b10d37 initial
dwinter
parents:
diff changeset
323 }
015d06b10d37 initial
dwinter
parents:
diff changeset
324
015d06b10d37 initial
dwinter
parents:
diff changeset
325 $form['info']['custom_filter_enable'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
326 '#type' => 'checkbox',
015d06b10d37 initial
dwinter
parents:
diff changeset
327 '#title' => t('Custom Filter'),
015d06b10d37 initial
dwinter
parents:
diff changeset
328 '#default_value' => !empty($search_page['settings']['apachesolr_search_custom_enable']) ? TRUE : FALSE
015d06b10d37 initial
dwinter
parents:
diff changeset
329 );
015d06b10d37 initial
dwinter
parents:
diff changeset
330
015d06b10d37 initial
dwinter
parents:
diff changeset
331 $form['info']['filters'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
332 '#title' => t('Custom filters'),
015d06b10d37 initial
dwinter
parents:
diff changeset
333 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
334 '#required' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
335 '#maxlength' => 255,
015d06b10d37 initial
dwinter
parents:
diff changeset
336 '#description' => t('A comma-separated list of lucene filter queries to apply by default.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
337 '#default_value' => !empty($search_page['settings']['fq']) ? implode(', ', $search_page['settings']['fq']) : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
338 '#dependency' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
339 'edit-custom-filter-enable' => array(1),
015d06b10d37 initial
dwinter
parents:
diff changeset
340 'edit-search-type' => array('custom'),
015d06b10d37 initial
dwinter
parents:
diff changeset
341 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
342 );
015d06b10d37 initial
dwinter
parents:
diff changeset
343 if (!$core_search) {
015d06b10d37 initial
dwinter
parents:
diff changeset
344 $form['info']['filters']['#description'] .= ' ' . t('E.g. "bundle:blog, is_uid:(1 OR 2 OR %). % will be replaced by the value of % in the path"');
015d06b10d37 initial
dwinter
parents:
diff changeset
345 }
015d06b10d37 initial
dwinter
parents:
diff changeset
346
015d06b10d37 initial
dwinter
parents:
diff changeset
347 $form['advanced'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
348 '#title' => t('Advanced Search Page Options'),
015d06b10d37 initial
dwinter
parents:
diff changeset
349 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
350 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
351 '#collapsed' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
352 '#tree' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
353 );
015d06b10d37 initial
dwinter
parents:
diff changeset
354
015d06b10d37 initial
dwinter
parents:
diff changeset
355 // Results per page per search page
015d06b10d37 initial
dwinter
parents:
diff changeset
356 $default_value = isset($search_page['settings']['apachesolr_search_per_page']) ? $search_page['settings']['apachesolr_search_per_page'] : '10';
015d06b10d37 initial
dwinter
parents:
diff changeset
357 $form['advanced']['apachesolr_search_per_page'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
358 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
359 '#size' => 3,
015d06b10d37 initial
dwinter
parents:
diff changeset
360 '#title' => t('Results per page'),
015d06b10d37 initial
dwinter
parents:
diff changeset
361 '#description' => t('How many items will be displayed on one page of the search result.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
362 '#default_value' => $default_value,
015d06b10d37 initial
dwinter
parents:
diff changeset
363 );
015d06b10d37 initial
dwinter
parents:
diff changeset
364
015d06b10d37 initial
dwinter
parents:
diff changeset
365 // Enable/disable spellcheck on pages
015d06b10d37 initial
dwinter
parents:
diff changeset
366 $default_value = isset($search_page['settings']['apachesolr_search_spellcheck']) ? $search_page['settings']['apachesolr_search_spellcheck'] : TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
367 $form['advanced']['apachesolr_search_spellcheck'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
368 '#type' => 'checkbox',
015d06b10d37 initial
dwinter
parents:
diff changeset
369 '#title' => t('Enable spell check'),
015d06b10d37 initial
dwinter
parents:
diff changeset
370 '#description' => t('Display "Did you mean … ?" above search results.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
371 '#default_value' => $default_value,
015d06b10d37 initial
dwinter
parents:
diff changeset
372 );
015d06b10d37 initial
dwinter
parents:
diff changeset
373
015d06b10d37 initial
dwinter
parents:
diff changeset
374 // Enable/disable search form on search page (replaced by a block perhaps)
015d06b10d37 initial
dwinter
parents:
diff changeset
375 $default_value = isset($search_page['settings']['apachesolr_search_search_box']) ? $search_page['settings']['apachesolr_search_search_box'] : TRUE;
015d06b10d37 initial
dwinter
parents:
diff changeset
376 $form['advanced']['apachesolr_search_search_box'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
377 '#type' => 'checkbox',
015d06b10d37 initial
dwinter
parents:
diff changeset
378 '#title' => t('Enable the search box on the page'),
015d06b10d37 initial
dwinter
parents:
diff changeset
379 '#description' => t('Display a search box on the page.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
380 '#access' => !$core_search,
015d06b10d37 initial
dwinter
parents:
diff changeset
381 '#default_value' => $default_value,
015d06b10d37 initial
dwinter
parents:
diff changeset
382 );
015d06b10d37 initial
dwinter
parents:
diff changeset
383
015d06b10d37 initial
dwinter
parents:
diff changeset
384 // Enable/disable search form on search page (replaced by a block perhaps)
015d06b10d37 initial
dwinter
parents:
diff changeset
385 $default_value = isset($search_page['settings']['apachesolr_search_allow_user_input']) ? $search_page['settings']['apachesolr_search_allow_user_input'] : FALSE;
015d06b10d37 initial
dwinter
parents:
diff changeset
386 $form['advanced']['apachesolr_search_allow_user_input'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
387 '#type' => 'checkbox',
015d06b10d37 initial
dwinter
parents:
diff changeset
388 '#title' => t('Allow user input using the URL'),
015d06b10d37 initial
dwinter
parents:
diff changeset
389 '#description' => t('Allow users to use the URL for manual facetting via fq[] params (e.g. http://example.com/search/site/test?fq[]=uid:1&fq[]=tid:99). This will only work in combination with a keyword search. The recommended value is unchecked'),
015d06b10d37 initial
dwinter
parents:
diff changeset
390 '#default_value' => $default_value,
015d06b10d37 initial
dwinter
parents:
diff changeset
391 );
015d06b10d37 initial
dwinter
parents:
diff changeset
392
015d06b10d37 initial
dwinter
parents:
diff changeset
393 // Use the main search page setting as the default for new pages.
015d06b10d37 initial
dwinter
parents:
diff changeset
394 $default_value = isset($search_page['settings']['apachesolr_search_browse']) ? $search_page['settings']['apachesolr_search_browse'] : 'browse';
015d06b10d37 initial
dwinter
parents:
diff changeset
395 $form['advanced']['apachesolr_search_browse'] = _apachesolr_search_browse_form($default_value);
015d06b10d37 initial
dwinter
parents:
diff changeset
396
015d06b10d37 initial
dwinter
parents:
diff changeset
397 // Button for the corresponding actions
015d06b10d37 initial
dwinter
parents:
diff changeset
398 $form['actions'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
399 '#type' => 'actions',
015d06b10d37 initial
dwinter
parents:
diff changeset
400 );
015d06b10d37 initial
dwinter
parents:
diff changeset
401
015d06b10d37 initial
dwinter
parents:
diff changeset
402 $form['actions']['submit'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
403 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
404 '#redirect' => 'admin/config/search/apachesolr/search-pages',
015d06b10d37 initial
dwinter
parents:
diff changeset
405 '#value' => t('Save'),
015d06b10d37 initial
dwinter
parents:
diff changeset
406 );
015d06b10d37 initial
dwinter
parents:
diff changeset
407 $form['actions']['submit_edit'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
408 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
409 '#value' => t('Save and edit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
410 );
015d06b10d37 initial
dwinter
parents:
diff changeset
411
015d06b10d37 initial
dwinter
parents:
diff changeset
412 $form['actions']['cancel'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
413 '#type' => 'link',
015d06b10d37 initial
dwinter
parents:
diff changeset
414 '#title' => t('Cancel'),
015d06b10d37 initial
dwinter
parents:
diff changeset
415 '#href' => 'admin/config/search/apachesolr/search-pages',
015d06b10d37 initial
dwinter
parents:
diff changeset
416 );
015d06b10d37 initial
dwinter
parents:
diff changeset
417
015d06b10d37 initial
dwinter
parents:
diff changeset
418 $form['#submit'][] = 'apachesolr_search_page_settings_form_submit';
015d06b10d37 initial
dwinter
parents:
diff changeset
419
015d06b10d37 initial
dwinter
parents:
diff changeset
420 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
421 }
015d06b10d37 initial
dwinter
parents:
diff changeset
422
015d06b10d37 initial
dwinter
parents:
diff changeset
423 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
424 * Callback element needs only select the portion of the form to be updated.
015d06b10d37 initial
dwinter
parents:
diff changeset
425 * Since #ajax['callback'] return can be HTML or a renderable array (or an
015d06b10d37 initial
dwinter
parents:
diff changeset
426 * array of commands), we can just return a piece of the form.
015d06b10d37 initial
dwinter
parents:
diff changeset
427 */
015d06b10d37 initial
dwinter
parents:
diff changeset
428 function apachesolr_search_ajax_search_page_default($form, $form_state, $search_page = NULL) {
015d06b10d37 initial
dwinter
parents:
diff changeset
429
015d06b10d37 initial
dwinter
parents:
diff changeset
430 $search_page = $form_state['values']['search_page'];
015d06b10d37 initial
dwinter
parents:
diff changeset
431 $search_types = apachesolr_search_load_all_search_types();
015d06b10d37 initial
dwinter
parents:
diff changeset
432
015d06b10d37 initial
dwinter
parents:
diff changeset
433 // Helping with sensible defaults for the search path
015d06b10d37 initial
dwinter
parents:
diff changeset
434 $default_search_path = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
435 if (!empty($form_state['values']['search_type']) && $form_state['values']['search_type'] != 'custom') {
015d06b10d37 initial
dwinter
parents:
diff changeset
436 $default_search_path = $search_types[$form_state['values']['search_type']]['default menu'];
015d06b10d37 initial
dwinter
parents:
diff changeset
437 $form['info']['search_path']['#value'] = $default_search_path;
015d06b10d37 initial
dwinter
parents:
diff changeset
438 }
015d06b10d37 initial
dwinter
parents:
diff changeset
439
015d06b10d37 initial
dwinter
parents:
diff changeset
440 // Helping with sensible defaults for the search title
015d06b10d37 initial
dwinter
parents:
diff changeset
441 $default_search_title = '';
015d06b10d37 initial
dwinter
parents:
diff changeset
442
015d06b10d37 initial
dwinter
parents:
diff changeset
443 if (empty($form_state['values']['page_title']) && $form_state['values']['search_type'] != 'custom') {
015d06b10d37 initial
dwinter
parents:
diff changeset
444 $default_search_title_callback = $search_types[$form_state['values']['search_type']]['title callback'];
015d06b10d37 initial
dwinter
parents:
diff changeset
445 $default_search_title = $default_search_title_callback();
015d06b10d37 initial
dwinter
parents:
diff changeset
446 $form['info']['page_title']['#value'] = $default_search_title;
015d06b10d37 initial
dwinter
parents:
diff changeset
447 }
015d06b10d37 initial
dwinter
parents:
diff changeset
448 return $form['info'];
015d06b10d37 initial
dwinter
parents:
diff changeset
449 }
015d06b10d37 initial
dwinter
parents:
diff changeset
450
015d06b10d37 initial
dwinter
parents:
diff changeset
451 function apachesolr_search_page_settings_form_validate($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
452 // Performs basic validation of the menu path.
015d06b10d37 initial
dwinter
parents:
diff changeset
453 if (url_is_external($form_state['values']['search_path'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
454 form_set_error('search_path', t('Path must be local.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
455 }
015d06b10d37 initial
dwinter
parents:
diff changeset
456 $form_state['values']['search_path'] = trim($form_state['values']['search_path'], '/');
015d06b10d37 initial
dwinter
parents:
diff changeset
457 if (empty($form_state['values']['search_path'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
458 form_set_error('search_path', t('Path required.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
459 }
015d06b10d37 initial
dwinter
parents:
diff changeset
460 if (!is_numeric($form_state['values']['advanced']['apachesolr_search_per_page'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
461 form_set_error('advanced][apachesolr_search_per_page', t('The amount of search results must be an integer.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
462 }
015d06b10d37 initial
dwinter
parents:
diff changeset
463 $form_state['values']['advanced']['apachesolr_search_per_page'] = (int) $form_state['values']['advanced']['apachesolr_search_per_page'];
015d06b10d37 initial
dwinter
parents:
diff changeset
464 if (empty($form_state['values']['advanced']['apachesolr_search_per_page'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
465 form_set_error('advanced][apachesolr_search_per_page', t('The amount of search results cannot be empty.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
466 }
015d06b10d37 initial
dwinter
parents:
diff changeset
467 if ($form_state['values']['page_id'] == 'core_search') {
015d06b10d37 initial
dwinter
parents:
diff changeset
468 if (!preg_match('@^search/[^/%]+$@', $form_state['values']['search_path'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
469 form_set_error('search_path', t('The core Search page path must start with search/ and only have one /'));
015d06b10d37 initial
dwinter
parents:
diff changeset
470 }
015d06b10d37 initial
dwinter
parents:
diff changeset
471 }
015d06b10d37 initial
dwinter
parents:
diff changeset
472 elseif (count(explode('%', $form_state['values']['search_path'])) > 2) {
015d06b10d37 initial
dwinter
parents:
diff changeset
473 form_set_error('search_path', t('Only one % placeholder is allowed.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
474 }
015d06b10d37 initial
dwinter
parents:
diff changeset
475 }
015d06b10d37 initial
dwinter
parents:
diff changeset
476
015d06b10d37 initial
dwinter
parents:
diff changeset
477 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
478 * Processes apachesolr_search_page_settings_form form submissions.
015d06b10d37 initial
dwinter
parents:
diff changeset
479 */
015d06b10d37 initial
dwinter
parents:
diff changeset
480 function apachesolr_search_page_settings_form_submit($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
481 $settings = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
482 $settings['fq'] = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
483 if ($form_state['values']['filters']) {
015d06b10d37 initial
dwinter
parents:
diff changeset
484 foreach (explode(',', $form_state['values']['filters']) as $string) {
015d06b10d37 initial
dwinter
parents:
diff changeset
485 $string = trim($string);
015d06b10d37 initial
dwinter
parents:
diff changeset
486 // Minimal validation. ':' must exist and can't be the 1st char..
015d06b10d37 initial
dwinter
parents:
diff changeset
487 if (strpos($string, ':')) {
015d06b10d37 initial
dwinter
parents:
diff changeset
488 $settings['fq'][] = $string;
015d06b10d37 initial
dwinter
parents:
diff changeset
489 }
015d06b10d37 initial
dwinter
parents:
diff changeset
490 }
015d06b10d37 initial
dwinter
parents:
diff changeset
491 }
015d06b10d37 initial
dwinter
parents:
diff changeset
492 $settings['apachesolr_search_custom_enable'] = $form_state['values']['custom_filter_enable'];
015d06b10d37 initial
dwinter
parents:
diff changeset
493 $settings['apachesolr_search_search_type'] = $form_state['values']['search_type'];
015d06b10d37 initial
dwinter
parents:
diff changeset
494 // Add all advanced settings.
015d06b10d37 initial
dwinter
parents:
diff changeset
495 $settings += $form_state['values']['advanced'];
015d06b10d37 initial
dwinter
parents:
diff changeset
496
015d06b10d37 initial
dwinter
parents:
diff changeset
497 // Set the default search page settings
015d06b10d37 initial
dwinter
parents:
diff changeset
498 if (!empty($form_state['values']['make_default']) && isset($form_state['values']['page_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
499 variable_set('apachesolr_search_default_search_page', $form_state['values']['page_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
500 }
015d06b10d37 initial
dwinter
parents:
diff changeset
501
015d06b10d37 initial
dwinter
parents:
diff changeset
502 $search_page = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
503 $search_page['page_id'] = $form_state['values']['page_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
504 $search_page['label'] = $form_state['values']['label'];
015d06b10d37 initial
dwinter
parents:
diff changeset
505 $search_page['description'] = $form_state['values']['description'];
015d06b10d37 initial
dwinter
parents:
diff changeset
506 $search_page['env_id'] = $form_state['values']['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
507 $search_page['search_path'] = $form_state['values']['search_path'];
015d06b10d37 initial
dwinter
parents:
diff changeset
508 $search_page['page_title'] = $form_state['values']['page_title'];
015d06b10d37 initial
dwinter
parents:
diff changeset
509 $search_page['settings'] = $settings;
015d06b10d37 initial
dwinter
parents:
diff changeset
510 apachesolr_search_page_save($search_page);
015d06b10d37 initial
dwinter
parents:
diff changeset
511
015d06b10d37 initial
dwinter
parents:
diff changeset
512 // Saves our values in the database, sets redirect path on success.
015d06b10d37 initial
dwinter
parents:
diff changeset
513 drupal_set_message(t('The configuration options have been saved for %page.', array('%page' => $form_state['values']['label'])));
015d06b10d37 initial
dwinter
parents:
diff changeset
514 if (isset($form_state['clicked_button']['#redirect'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
515 $form_state['redirect'] = $form_state['clicked_button']['#redirect'];
015d06b10d37 initial
dwinter
parents:
diff changeset
516 }
015d06b10d37 initial
dwinter
parents:
diff changeset
517 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
518 $form_state['redirect'] = current_path();
015d06b10d37 initial
dwinter
parents:
diff changeset
519 }
015d06b10d37 initial
dwinter
parents:
diff changeset
520 // Regardlessly of the destination parameter we want to go to another page
015d06b10d37 initial
dwinter
parents:
diff changeset
521 unset($_GET['destination']);
015d06b10d37 initial
dwinter
parents:
diff changeset
522 drupal_static_reset('drupal_get_destination');
015d06b10d37 initial
dwinter
parents:
diff changeset
523 drupal_get_destination();
015d06b10d37 initial
dwinter
parents:
diff changeset
524 // Menu rebuild needed to pick up search path.
015d06b10d37 initial
dwinter
parents:
diff changeset
525 menu_rebuild();
015d06b10d37 initial
dwinter
parents:
diff changeset
526 }
015d06b10d37 initial
dwinter
parents:
diff changeset
527
015d06b10d37 initial
dwinter
parents:
diff changeset
528 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
529 * Deletes a single search page configuration.
015d06b10d37 initial
dwinter
parents:
diff changeset
530 */
015d06b10d37 initial
dwinter
parents:
diff changeset
531 function apachesolr_search_delete_search_page_confirm($form, &$form_state, $search_page) {
015d06b10d37 initial
dwinter
parents:
diff changeset
532
015d06b10d37 initial
dwinter
parents:
diff changeset
533 // Sets values required for deletion.
015d06b10d37 initial
dwinter
parents:
diff changeset
534 $form['page_id'] = array('#type' => 'value', '#value' => $search_page['page_id']);
015d06b10d37 initial
dwinter
parents:
diff changeset
535 $form['label'] = array('#type' => 'value', '#value' => $search_page['label']);
015d06b10d37 initial
dwinter
parents:
diff changeset
536
015d06b10d37 initial
dwinter
parents:
diff changeset
537 if (isset($search_page['export_type']) && $search_page['export_type'] == '3') {
015d06b10d37 initial
dwinter
parents:
diff changeset
538 $verb = t('Revert');
015d06b10d37 initial
dwinter
parents:
diff changeset
539 }
015d06b10d37 initial
dwinter
parents:
diff changeset
540 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
541 $verb = t('Delete');
015d06b10d37 initial
dwinter
parents:
diff changeset
542 }
015d06b10d37 initial
dwinter
parents:
diff changeset
543
015d06b10d37 initial
dwinter
parents:
diff changeset
544 // Sets the message, or the title of the page.
015d06b10d37 initial
dwinter
parents:
diff changeset
545 $message = t(
015d06b10d37 initial
dwinter
parents:
diff changeset
546 'Are you sure you want to !verb the %label search page configuration?',
015d06b10d37 initial
dwinter
parents:
diff changeset
547 array('%label' => $form['label']['#value'], '!verb' => strtolower($verb))
015d06b10d37 initial
dwinter
parents:
diff changeset
548 );
015d06b10d37 initial
dwinter
parents:
diff changeset
549
015d06b10d37 initial
dwinter
parents:
diff changeset
550
015d06b10d37 initial
dwinter
parents:
diff changeset
551 // Builds caption.
015d06b10d37 initial
dwinter
parents:
diff changeset
552 $caption = '<p>';
015d06b10d37 initial
dwinter
parents:
diff changeset
553 $caption .= t(
015d06b10d37 initial
dwinter
parents:
diff changeset
554 'The %label search page configuration will be deleted.',
015d06b10d37 initial
dwinter
parents:
diff changeset
555 array('%label' => $form['label']['#value'])
015d06b10d37 initial
dwinter
parents:
diff changeset
556 );
015d06b10d37 initial
dwinter
parents:
diff changeset
557 $caption .= '</p>';
015d06b10d37 initial
dwinter
parents:
diff changeset
558 $caption .= '<p><strong>' . t('This action cannot be undone.') . '</strong></p>';
015d06b10d37 initial
dwinter
parents:
diff changeset
559
015d06b10d37 initial
dwinter
parents:
diff changeset
560 // Finalizes and returns the confirmation form.
015d06b10d37 initial
dwinter
parents:
diff changeset
561 $return_path = 'admin/config/search/apachesolr/search-pages';
015d06b10d37 initial
dwinter
parents:
diff changeset
562 $button_text = $verb;
015d06b10d37 initial
dwinter
parents:
diff changeset
563 if (!isset($search_page['settings']['apachesolr_search_not_removable'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
564 return confirm_form($form, filter_xss($message), $return_path, filter_xss($caption), check_plain($button_text));
015d06b10d37 initial
dwinter
parents:
diff changeset
565 }
015d06b10d37 initial
dwinter
parents:
diff changeset
566 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
567 // Maybe this should be solved somehow else
015d06b10d37 initial
dwinter
parents:
diff changeset
568 drupal_access_denied();
015d06b10d37 initial
dwinter
parents:
diff changeset
569 }
015d06b10d37 initial
dwinter
parents:
diff changeset
570 }
015d06b10d37 initial
dwinter
parents:
diff changeset
571
015d06b10d37 initial
dwinter
parents:
diff changeset
572 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
573 * Process content type delete confirm submissions.
015d06b10d37 initial
dwinter
parents:
diff changeset
574 */
015d06b10d37 initial
dwinter
parents:
diff changeset
575 function apachesolr_search_delete_search_page_confirm_submit($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
576 // Deletes the index configuration settings.
015d06b10d37 initial
dwinter
parents:
diff changeset
577 // @todo Invoke a hook that allows backends and indexers to delete their stuff.
015d06b10d37 initial
dwinter
parents:
diff changeset
578 db_delete('apachesolr_search_page')
015d06b10d37 initial
dwinter
parents:
diff changeset
579 ->condition('page_id', $form_state['values']['page_id'])
015d06b10d37 initial
dwinter
parents:
diff changeset
580 ->execute();
015d06b10d37 initial
dwinter
parents:
diff changeset
581
015d06b10d37 initial
dwinter
parents:
diff changeset
582 // Sets message, logs action.
015d06b10d37 initial
dwinter
parents:
diff changeset
583 drupal_set_message(t(
015d06b10d37 initial
dwinter
parents:
diff changeset
584 'The %label search page configuration has been deleted.',
015d06b10d37 initial
dwinter
parents:
diff changeset
585 array('%label' => $form_state['values']['label'])
015d06b10d37 initial
dwinter
parents:
diff changeset
586 ));
015d06b10d37 initial
dwinter
parents:
diff changeset
587 watchdog('apachesolr_search', 'Deleted search page configuration "@page_id".', array('@page_id' => $form_state['values']['page_id']), WATCHDOG_NOTICE);
015d06b10d37 initial
dwinter
parents:
diff changeset
588
015d06b10d37 initial
dwinter
parents:
diff changeset
589 // Rebuilds the menu cache.
015d06b10d37 initial
dwinter
parents:
diff changeset
590 menu_rebuild();
015d06b10d37 initial
dwinter
parents:
diff changeset
591
015d06b10d37 initial
dwinter
parents:
diff changeset
592 // Returns back to search page list page.
015d06b10d37 initial
dwinter
parents:
diff changeset
593 $form_state['redirect'] = 'admin/config/search/apachesolr/search-pages';
015d06b10d37 initial
dwinter
parents:
diff changeset
594 }
015d06b10d37 initial
dwinter
parents:
diff changeset
595
015d06b10d37 initial
dwinter
parents:
diff changeset
596 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
597 * Clones a single search page configuration
015d06b10d37 initial
dwinter
parents:
diff changeset
598 * @param $search_page
015d06b10d37 initial
dwinter
parents:
diff changeset
599 * The search page that needs to be cloned
015d06b10d37 initial
dwinter
parents:
diff changeset
600 */
015d06b10d37 initial
dwinter
parents:
diff changeset
601 function apachesolr_search_clone_search_page_confirm($form, &$form_state, $search_page) {
015d06b10d37 initial
dwinter
parents:
diff changeset
602 $form['page_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
603 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
604 '#value' => $search_page['page_id'],
015d06b10d37 initial
dwinter
parents:
diff changeset
605 );
015d06b10d37 initial
dwinter
parents:
diff changeset
606 return confirm_form(
015d06b10d37 initial
dwinter
parents:
diff changeset
607 $form,
015d06b10d37 initial
dwinter
parents:
diff changeset
608 t('Are you sure you want to clone search page %name?', array('%name' => $search_page['label'])),
015d06b10d37 initial
dwinter
parents:
diff changeset
609 'admin/config/search/apachesolr',
015d06b10d37 initial
dwinter
parents:
diff changeset
610 '',
015d06b10d37 initial
dwinter
parents:
diff changeset
611 t('Clone'),
015d06b10d37 initial
dwinter
parents:
diff changeset
612 t('Cancel')
015d06b10d37 initial
dwinter
parents:
diff changeset
613 );
015d06b10d37 initial
dwinter
parents:
diff changeset
614 }
015d06b10d37 initial
dwinter
parents:
diff changeset
615
015d06b10d37 initial
dwinter
parents:
diff changeset
616 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
617 * Submits the confirmations of the cloning of a search page
015d06b10d37 initial
dwinter
parents:
diff changeset
618 */
015d06b10d37 initial
dwinter
parents:
diff changeset
619 function apachesolr_search_clone_search_page_confirm_submit($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
620 if (apachesolr_search_page_clone($form_state['values']['page_id'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
621 drupal_set_message(t('The search page was cloned'));
015d06b10d37 initial
dwinter
parents:
diff changeset
622 }
015d06b10d37 initial
dwinter
parents:
diff changeset
623 $form_state['redirect'] = 'admin/config/search/apachesolr/search-pages';
015d06b10d37 initial
dwinter
parents:
diff changeset
624 }
015d06b10d37 initial
dwinter
parents:
diff changeset
625
015d06b10d37 initial
dwinter
parents:
diff changeset
626 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
627 * Menu callback - the settings form.
015d06b10d37 initial
dwinter
parents:
diff changeset
628 */
015d06b10d37 initial
dwinter
parents:
diff changeset
629 function apachesolr_search_get_fields($environment = NULL) {
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 $environment = apachesolr_environment_load($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
633 }
015d06b10d37 initial
dwinter
parents:
diff changeset
634 $env_id = $environment['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
635
015d06b10d37 initial
dwinter
parents:
diff changeset
636 // Try to fetch the schema fields.
015d06b10d37 initial
dwinter
parents:
diff changeset
637 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
638 $solr = apachesolr_get_solr($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
639 $fields = $solr->getFields();
015d06b10d37 initial
dwinter
parents:
diff changeset
640 return $fields;
015d06b10d37 initial
dwinter
parents:
diff changeset
641 }
015d06b10d37 initial
dwinter
parents:
diff changeset
642 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
643 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
644 drupal_set_message(nl2br(check_plain($e->getMessage())), 'warning');
015d06b10d37 initial
dwinter
parents:
diff changeset
645 drupal_set_message(t('Cannot get information about the fields in the index.'), 'warning');
015d06b10d37 initial
dwinter
parents:
diff changeset
646 }
015d06b10d37 initial
dwinter
parents:
diff changeset
647 }
015d06b10d37 initial
dwinter
parents:
diff changeset
648
015d06b10d37 initial
dwinter
parents:
diff changeset
649 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
650 * Menu callback - Bias settings form.
015d06b10d37 initial
dwinter
parents:
diff changeset
651 */
015d06b10d37 initial
dwinter
parents:
diff changeset
652 function apachesolr_bias_settings_page($environment = NULL) {
015d06b10d37 initial
dwinter
parents:
diff changeset
653 if (empty($environment)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
654 $env_id = apachesolr_default_environment();
015d06b10d37 initial
dwinter
parents:
diff changeset
655 $environment = apachesolr_environment_load($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
656 }
015d06b10d37 initial
dwinter
parents:
diff changeset
657 $env_id = $environment['env_id'];
015d06b10d37 initial
dwinter
parents:
diff changeset
658
015d06b10d37 initial
dwinter
parents:
diff changeset
659 // Initializes output with information about which environment's setting we are
015d06b10d37 initial
dwinter
parents:
diff changeset
660 // editing, as it is otherwise not transparent to the end user.
015d06b10d37 initial
dwinter
parents:
diff changeset
661 $output = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
662 'apachesolr_environment' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
663 '#theme' => 'apachesolr_settings_title',
015d06b10d37 initial
dwinter
parents:
diff changeset
664 '#env_id' => $env_id,
015d06b10d37 initial
dwinter
parents:
diff changeset
665 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
666 );
015d06b10d37 initial
dwinter
parents:
diff changeset
667
015d06b10d37 initial
dwinter
parents:
diff changeset
668 // Adds content bias and type boost forms.
015d06b10d37 initial
dwinter
parents:
diff changeset
669 $fields = apachesolr_search_get_fields($environment);
015d06b10d37 initial
dwinter
parents:
diff changeset
670 $form = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
671 $form = drupal_get_form('apachesolr_search_bias_form', $env_id, $fields);
015d06b10d37 initial
dwinter
parents:
diff changeset
672 $output['bias_forms'] = $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
673 return $output;
015d06b10d37 initial
dwinter
parents:
diff changeset
674 }
015d06b10d37 initial
dwinter
parents:
diff changeset
675
015d06b10d37 initial
dwinter
parents:
diff changeset
676 function apachesolr_search_bias_form($form, &$form_state, $env_id, $fields) {
015d06b10d37 initial
dwinter
parents:
diff changeset
677 $form['#env_id'] = $env_id;
015d06b10d37 initial
dwinter
parents:
diff changeset
678 $form['bias_tabs'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
679 '#type' => 'vertical_tabs',
015d06b10d37 initial
dwinter
parents:
diff changeset
680 );
015d06b10d37 initial
dwinter
parents:
diff changeset
681 $form['actions']['#type'] = 'actions';
015d06b10d37 initial
dwinter
parents:
diff changeset
682 $form['actions']['submit'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
683 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
684 '#value' => t('Save configuration'),
015d06b10d37 initial
dwinter
parents:
diff changeset
685 '#submit' => array('apachesolr_search_bias_form_submit'),
015d06b10d37 initial
dwinter
parents:
diff changeset
686 );
015d06b10d37 initial
dwinter
parents:
diff changeset
687 $form['actions']['reset'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
688 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
689 '#value' => t('Reset to defaults'),
015d06b10d37 initial
dwinter
parents:
diff changeset
690 '#submit' => array('apachesolr_search_bias_form_reset'),
015d06b10d37 initial
dwinter
parents:
diff changeset
691 );
015d06b10d37 initial
dwinter
parents:
diff changeset
692 $form += apachesolr_search_result_bias_form($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
693 $form += apachesolr_search_type_boost_form($env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
694 $form += apachesolr_search_field_bias_form($fields, $env_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
695 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
696 }
015d06b10d37 initial
dwinter
parents:
diff changeset
697
015d06b10d37 initial
dwinter
parents:
diff changeset
698 function apachesolr_search_bias_form_submit(&$form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
699 // Exclude unnecessary elements.
015d06b10d37 initial
dwinter
parents:
diff changeset
700 form_state_values_clean($form_state);
015d06b10d37 initial
dwinter
parents:
diff changeset
701 foreach ($form_state['values'] as $key => $value) {
015d06b10d37 initial
dwinter
parents:
diff changeset
702 if (is_array($value) && isset($form_state['values']['array_filter'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
703 $value = array_keys(array_filter($value));
015d06b10d37 initial
dwinter
parents:
diff changeset
704 }
015d06b10d37 initial
dwinter
parents:
diff changeset
705 // There is no need to set default variable values.
015d06b10d37 initial
dwinter
parents:
diff changeset
706 if (!isset($form[$key]['#default_value']) || $form[$key]['#default_value'] != $value) {
015d06b10d37 initial
dwinter
parents:
diff changeset
707 switch ($key) {
015d06b10d37 initial
dwinter
parents:
diff changeset
708 case 'apachesolr_search_sticky_boost' :
015d06b10d37 initial
dwinter
parents:
diff changeset
709 case 'apachesolr_search_promote_boost' :
015d06b10d37 initial
dwinter
parents:
diff changeset
710 case 'apachesolr_search_date_boost' :
015d06b10d37 initial
dwinter
parents:
diff changeset
711 case 'apachesolr_search_comment_boost' :
015d06b10d37 initial
dwinter
parents:
diff changeset
712 case 'apachesolr_search_changed_boost' :
015d06b10d37 initial
dwinter
parents:
diff changeset
713 case 'apachesolr_search_type_boosts' :
015d06b10d37 initial
dwinter
parents:
diff changeset
714 case 'field_bias' :
015d06b10d37 initial
dwinter
parents:
diff changeset
715 apachesolr_environment_variable_set($form['#env_id'], $key, $value);
015d06b10d37 initial
dwinter
parents:
diff changeset
716 }
015d06b10d37 initial
dwinter
parents:
diff changeset
717 }
015d06b10d37 initial
dwinter
parents:
diff changeset
718 }
015d06b10d37 initial
dwinter
parents:
diff changeset
719 drupal_set_message(t('The configuration options have been saved.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
720 }
015d06b10d37 initial
dwinter
parents:
diff changeset
721
015d06b10d37 initial
dwinter
parents:
diff changeset
722 function apachesolr_search_bias_form_reset($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
723 // Exclude unnecessary elements.
015d06b10d37 initial
dwinter
parents:
diff changeset
724 form_state_values_clean($form_state);
015d06b10d37 initial
dwinter
parents:
diff changeset
725
015d06b10d37 initial
dwinter
parents:
diff changeset
726 foreach ($form_state['values'] as $key => $value) {
015d06b10d37 initial
dwinter
parents:
diff changeset
727 apachesolr_environment_variable_del($form['#env_id'], $key);
015d06b10d37 initial
dwinter
parents:
diff changeset
728 }
015d06b10d37 initial
dwinter
parents:
diff changeset
729 drupal_set_message(t('The configuration options have been reset to their default values.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
730 }
015d06b10d37 initial
dwinter
parents:
diff changeset
731
015d06b10d37 initial
dwinter
parents:
diff changeset
732 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
733 * Form builder function to set date, comment, etc biases.
015d06b10d37 initial
dwinter
parents:
diff changeset
734 */
015d06b10d37 initial
dwinter
parents:
diff changeset
735 function apachesolr_search_result_bias_form($env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
736
015d06b10d37 initial
dwinter
parents:
diff changeset
737 $date_settings = apachesolr_environment_variable_get($env_id, 'apachesolr_search_date_boost', '0:0');
015d06b10d37 initial
dwinter
parents:
diff changeset
738 $comment_settings = apachesolr_environment_variable_get($env_id, 'apachesolr_search_comment_boost', '0:0');
015d06b10d37 initial
dwinter
parents:
diff changeset
739 $changed_settings = apachesolr_environment_variable_get($env_id, 'apachesolr_search_changed_boost', '0:0');
015d06b10d37 initial
dwinter
parents:
diff changeset
740 $sticky_boost = apachesolr_environment_variable_get($env_id, 'apachesolr_search_sticky_boost', '0');
015d06b10d37 initial
dwinter
parents:
diff changeset
741 $promote_boost = apachesolr_environment_variable_get($env_id, 'apachesolr_search_promote_boost', '0');
015d06b10d37 initial
dwinter
parents:
diff changeset
742
015d06b10d37 initial
dwinter
parents:
diff changeset
743 $options = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
744 '10:2000.0' => '10',
015d06b10d37 initial
dwinter
parents:
diff changeset
745 '8:1000.0' => '9',
015d06b10d37 initial
dwinter
parents:
diff changeset
746 '8:700.0' => '8',
015d06b10d37 initial
dwinter
parents:
diff changeset
747 '8:500.0' => '7',
015d06b10d37 initial
dwinter
parents:
diff changeset
748 '4:300.0' => '6',
015d06b10d37 initial
dwinter
parents:
diff changeset
749 '4:200.0' => '5',
015d06b10d37 initial
dwinter
parents:
diff changeset
750 '4:150.0' => '4',
015d06b10d37 initial
dwinter
parents:
diff changeset
751 '2:150.0' => '3',
015d06b10d37 initial
dwinter
parents:
diff changeset
752 '2:100.0' => '2',
015d06b10d37 initial
dwinter
parents:
diff changeset
753 '1:100.0' => '1',
015d06b10d37 initial
dwinter
parents:
diff changeset
754 '0:0' => t('Ignore'),
015d06b10d37 initial
dwinter
parents:
diff changeset
755 );
015d06b10d37 initial
dwinter
parents:
diff changeset
756
015d06b10d37 initial
dwinter
parents:
diff changeset
757 $weights = drupal_map_assoc(array('21.0', '13.0', '8.0', '5.0', '3.0', '2.0', '1.0', '0.8', '0.5', '0.3', '0.2', '0.1'));
015d06b10d37 initial
dwinter
parents:
diff changeset
758 $weights['0'] = t('Ignore');
015d06b10d37 initial
dwinter
parents:
diff changeset
759
015d06b10d37 initial
dwinter
parents:
diff changeset
760 $form = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
761 $form['result_bias'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
762 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
763 '#title' => t('Result biasing'),
015d06b10d37 initial
dwinter
parents:
diff changeset
764 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
765 '#collapsed' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
766 '#description' => t('Give bias to certain properties when ordering the search results. Any value except <em>Ignore</em> will increase the score of the given type in search results. Choose <em>Ignore</em> to ignore any given property.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
767 '#group' => 'bias_tabs',
015d06b10d37 initial
dwinter
parents:
diff changeset
768 );
015d06b10d37 initial
dwinter
parents:
diff changeset
769 $form['result_bias']['apachesolr_search_sticky_boost'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
770 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
771 '#options' => $weights,
015d06b10d37 initial
dwinter
parents:
diff changeset
772 '#title' => t("Sticky at top of lists"),
015d06b10d37 initial
dwinter
parents:
diff changeset
773 '#default_value' => $sticky_boost,
015d06b10d37 initial
dwinter
parents:
diff changeset
774 '#description' => t("Select additional bias to give to nodes that are set to be 'Sticky at top of lists'."),
015d06b10d37 initial
dwinter
parents:
diff changeset
775 );
015d06b10d37 initial
dwinter
parents:
diff changeset
776 $form['result_bias']['apachesolr_search_promote_boost'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
777 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
778 '#options' => $weights,
015d06b10d37 initial
dwinter
parents:
diff changeset
779 '#title' => t("Promoted to home page"),
015d06b10d37 initial
dwinter
parents:
diff changeset
780 '#default_value' => $promote_boost,
015d06b10d37 initial
dwinter
parents:
diff changeset
781 '#description' => t("Select additional bias to give to nodes that are set to be 'Promoted to home page'."),
015d06b10d37 initial
dwinter
parents:
diff changeset
782 );
015d06b10d37 initial
dwinter
parents:
diff changeset
783 $form['result_bias']['apachesolr_search_date_boost'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
784 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
785 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
786 '#title' => t("More recently created"),
015d06b10d37 initial
dwinter
parents:
diff changeset
787 '#default_value' => $date_settings,
015d06b10d37 initial
dwinter
parents:
diff changeset
788 '#description' => t('This setting will change the result scoring so that nodes created more recently may appear before those with higher keyword matching.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
789 );
015d06b10d37 initial
dwinter
parents:
diff changeset
790 $form['result_bias']['apachesolr_search_comment_boost'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
791 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
792 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
793 '#title' => t("More comments"),
015d06b10d37 initial
dwinter
parents:
diff changeset
794 '#default_value' => $comment_settings,
015d06b10d37 initial
dwinter
parents:
diff changeset
795 '#description' => t('This setting will change the result scoring so that nodes with more comments may appear before those with higher keyword matching.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
796 );
015d06b10d37 initial
dwinter
parents:
diff changeset
797 $form['result_bias']['apachesolr_search_changed_boost'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
798 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
799 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
800 '#title' => t("More recent comments"),
015d06b10d37 initial
dwinter
parents:
diff changeset
801 '#default_value' => $changed_settings,
015d06b10d37 initial
dwinter
parents:
diff changeset
802 '#description' => t('This setting will change the result scoring so that nodes with the most recent comments (or most recent updates to the node itself) may appear before those with higher keyword matching.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
803 );
015d06b10d37 initial
dwinter
parents:
diff changeset
804 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
805 }
015d06b10d37 initial
dwinter
parents:
diff changeset
806
015d06b10d37 initial
dwinter
parents:
diff changeset
807 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
808 * Form builder function to set query field weights.
015d06b10d37 initial
dwinter
parents:
diff changeset
809 */
015d06b10d37 initial
dwinter
parents:
diff changeset
810 function apachesolr_search_field_bias_form($fields, $env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
811 $form = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
812 // get the current weights
015d06b10d37 initial
dwinter
parents:
diff changeset
813 $defaults = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
814 'content' => '1.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
815 'ts_comments' => '0.5',
015d06b10d37 initial
dwinter
parents:
diff changeset
816 'tos_content_extra' => '0.1',
015d06b10d37 initial
dwinter
parents:
diff changeset
817 'label' => '5.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
818 'tos_name' => '3.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
819 'taxonomy_names' => '2.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
820 'tags_h1' => '5.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
821 'tags_h2_h3' => '3.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
822 'tags_h4_h5_h6' => '2.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
823 'tags_inline' => '1.0',
015d06b10d37 initial
dwinter
parents:
diff changeset
824 'tags_a' => '0',
015d06b10d37 initial
dwinter
parents:
diff changeset
825 );
015d06b10d37 initial
dwinter
parents:
diff changeset
826 $qf = apachesolr_environment_variable_get($env_id, 'field_bias', $defaults);
015d06b10d37 initial
dwinter
parents:
diff changeset
827 $weights = drupal_map_assoc(array('21.0', '13.0', '8.0', '5.0', '3.0', '2.0', '1.0', '0.8', '0.5', '0.3', '0.2', '0.1'));
015d06b10d37 initial
dwinter
parents:
diff changeset
828 $weights['0'] = t('Omit');
015d06b10d37 initial
dwinter
parents:
diff changeset
829 if (!$qf) {
015d06b10d37 initial
dwinter
parents:
diff changeset
830 $qf = $defaults;
015d06b10d37 initial
dwinter
parents:
diff changeset
831 }
015d06b10d37 initial
dwinter
parents:
diff changeset
832 if ($fields) {
015d06b10d37 initial
dwinter
parents:
diff changeset
833 $form['field_bias'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
834 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
835 '#title' => t('Field biases'),
015d06b10d37 initial
dwinter
parents:
diff changeset
836 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
837 '#collapsed' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
838 '#tree' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
839 '#description' => t('Specify here which fields are more important when searching. Give a field a greater numeric value to make it more important. If you omit a field, it will not be searched.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
840 '#group' => 'bias_tabs',
015d06b10d37 initial
dwinter
parents:
diff changeset
841 );
015d06b10d37 initial
dwinter
parents:
diff changeset
842 foreach ($fields as $field_name => $field) {
015d06b10d37 initial
dwinter
parents:
diff changeset
843 // Only indexed feids are searchable.
015d06b10d37 initial
dwinter
parents:
diff changeset
844 if ($field->schema{0} == 'I') {
015d06b10d37 initial
dwinter
parents:
diff changeset
845 // By default we only show text fields. Use hook_form_alter to change.
015d06b10d37 initial
dwinter
parents:
diff changeset
846 // We use filter_xss to make sure links are allowed
015d06b10d37 initial
dwinter
parents:
diff changeset
847 $form['field_bias'][$field_name] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
848 '#access' => ($field->type == 'text' || $field->type == 'text_und'),
015d06b10d37 initial
dwinter
parents:
diff changeset
849 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
850 '#options' => $weights,
015d06b10d37 initial
dwinter
parents:
diff changeset
851 '#title' => filter_xss(apachesolr_field_name_map($field_name)),
015d06b10d37 initial
dwinter
parents:
diff changeset
852 '#default_value' => isset($qf[$field_name]) ? $qf[$field_name] : '0',
015d06b10d37 initial
dwinter
parents:
diff changeset
853 );
015d06b10d37 initial
dwinter
parents:
diff changeset
854 }
015d06b10d37 initial
dwinter
parents:
diff changeset
855 }
015d06b10d37 initial
dwinter
parents:
diff changeset
856
015d06b10d37 initial
dwinter
parents:
diff changeset
857 // Make sure all the default fields are included, even if they have
015d06b10d37 initial
dwinter
parents:
diff changeset
858 // no indexed content.
015d06b10d37 initial
dwinter
parents:
diff changeset
859 foreach ($defaults as $field_name => $weight) {
015d06b10d37 initial
dwinter
parents:
diff changeset
860 $form['field_bias'][$field_name] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
861 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
862 '#options' => $weights,
015d06b10d37 initial
dwinter
parents:
diff changeset
863 '#title' => check_plain(apachesolr_field_name_map($field_name)),
015d06b10d37 initial
dwinter
parents:
diff changeset
864 '#default_value' => isset($qf[$field_name]) ? $qf[$field_name] : $defaults[$field_name],
015d06b10d37 initial
dwinter
parents:
diff changeset
865 );
015d06b10d37 initial
dwinter
parents:
diff changeset
866 }
015d06b10d37 initial
dwinter
parents:
diff changeset
867
015d06b10d37 initial
dwinter
parents:
diff changeset
868 ksort($form['field_bias']);
015d06b10d37 initial
dwinter
parents:
diff changeset
869 }
015d06b10d37 initial
dwinter
parents:
diff changeset
870 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
871 }
015d06b10d37 initial
dwinter
parents:
diff changeset
872
015d06b10d37 initial
dwinter
parents:
diff changeset
873 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
874 * Form builder function to set query type weights.
015d06b10d37 initial
dwinter
parents:
diff changeset
875 */
015d06b10d37 initial
dwinter
parents:
diff changeset
876 function apachesolr_search_type_boost_form($env_id) {
015d06b10d37 initial
dwinter
parents:
diff changeset
877
015d06b10d37 initial
dwinter
parents:
diff changeset
878 $form['type_boost'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
879 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
880 '#title' => t('Type biasing'),
015d06b10d37 initial
dwinter
parents:
diff changeset
881 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
882 '#collapsed' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
883 '#group' => 'bias_tabs',
015d06b10d37 initial
dwinter
parents:
diff changeset
884 );
015d06b10d37 initial
dwinter
parents:
diff changeset
885 $form['type_boost']['apachesolr_search_type_boosts'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
886 '#type' => 'item',
015d06b10d37 initial
dwinter
parents:
diff changeset
887 '#description' => t("Specify here which node types should get a higher relevancy score in searches. Any value except <em>Ignore</em> will increase the score of the given type in search results."),
015d06b10d37 initial
dwinter
parents:
diff changeset
888 '#tree' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
889 );
015d06b10d37 initial
dwinter
parents:
diff changeset
890
015d06b10d37 initial
dwinter
parents:
diff changeset
891 $weights = drupal_map_assoc(array('21.0', '13.0', '8.0', '5.0', '3.0', '2.0', '1.0', '0.8', '0.5', '0.3', '0.2', '0.1'));
015d06b10d37 initial
dwinter
parents:
diff changeset
892 $weights['0'] = t('Ignore');
015d06b10d37 initial
dwinter
parents:
diff changeset
893
015d06b10d37 initial
dwinter
parents:
diff changeset
894 // Get the current boost values.
015d06b10d37 initial
dwinter
parents:
diff changeset
895 $type_boosts = apachesolr_environment_variable_get($env_id, 'apachesolr_search_type_boosts', array());
015d06b10d37 initial
dwinter
parents:
diff changeset
896 $names = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
897 foreach (entity_get_info() as $entity_type => $entity_info) {
015d06b10d37 initial
dwinter
parents:
diff changeset
898 if (!empty($entity_info['apachesolr']['indexable'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
899 foreach ($entity_info['bundles'] as $key => $info) {
015d06b10d37 initial
dwinter
parents:
diff changeset
900 $names[$key] = $info['label'];
015d06b10d37 initial
dwinter
parents:
diff changeset
901 }
015d06b10d37 initial
dwinter
parents:
diff changeset
902 }
015d06b10d37 initial
dwinter
parents:
diff changeset
903 }
015d06b10d37 initial
dwinter
parents:
diff changeset
904 asort($names);
015d06b10d37 initial
dwinter
parents:
diff changeset
905
015d06b10d37 initial
dwinter
parents:
diff changeset
906 foreach ($names as $type => $name) {
015d06b10d37 initial
dwinter
parents:
diff changeset
907 $form['type_boost']['apachesolr_search_type_boosts'][$type] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
908 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
909 '#title' => t('%type type content bias', array('%type' => $name)),
015d06b10d37 initial
dwinter
parents:
diff changeset
910 '#options' => $weights,
015d06b10d37 initial
dwinter
parents:
diff changeset
911 '#default_value' => isset($type_boosts[$type]) ? $type_boosts[$type] : 0,
015d06b10d37 initial
dwinter
parents:
diff changeset
912 );
015d06b10d37 initial
dwinter
parents:
diff changeset
913 }
015d06b10d37 initial
dwinter
parents:
diff changeset
914
015d06b10d37 initial
dwinter
parents:
diff changeset
915 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
916 }
015d06b10d37 initial
dwinter
parents:
diff changeset
917
015d06b10d37 initial
dwinter
parents:
diff changeset
918 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
919 * MoreLikeThis administration and utility functions.
015d06b10d37 initial
dwinter
parents:
diff changeset
920 */
015d06b10d37 initial
dwinter
parents:
diff changeset
921 function apachesolr_search_mlt_add_block_form() {
015d06b10d37 initial
dwinter
parents:
diff changeset
922 $form = apachesolr_search_mlt_block_form();
015d06b10d37 initial
dwinter
parents:
diff changeset
923 $form['submit'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
924 '#type' => 'submit',
015d06b10d37 initial
dwinter
parents:
diff changeset
925 '#value' => t('Save'),
015d06b10d37 initial
dwinter
parents:
diff changeset
926 '#weight' => '5',
015d06b10d37 initial
dwinter
parents:
diff changeset
927 );
015d06b10d37 initial
dwinter
parents:
diff changeset
928 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
929 }
015d06b10d37 initial
dwinter
parents:
diff changeset
930
015d06b10d37 initial
dwinter
parents:
diff changeset
931 function apachesolr_search_mlt_add_block_form_submit($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
932 apachesolr_search_mlt_save_block($form_state['values']);
015d06b10d37 initial
dwinter
parents:
diff changeset
933 $block_message = t('New More like this block created. <a href="!configure">Configure</a> this block in the Block administration', array('!configure' => url('admin/structure/block')));
015d06b10d37 initial
dwinter
parents:
diff changeset
934 drupal_set_message($block_message);
015d06b10d37 initial
dwinter
parents:
diff changeset
935 $form_state['redirect'] = 'admin/config/search/apachesolr/search-pages';
015d06b10d37 initial
dwinter
parents:
diff changeset
936 }
015d06b10d37 initial
dwinter
parents:
diff changeset
937
015d06b10d37 initial
dwinter
parents:
diff changeset
938 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
939 * Merge supplied settings with the standard defaults..
015d06b10d37 initial
dwinter
parents:
diff changeset
940 */
015d06b10d37 initial
dwinter
parents:
diff changeset
941 function apachesolr_search_mlt_block_defaults($block = array()) {
015d06b10d37 initial
dwinter
parents:
diff changeset
942 return $block + array(
015d06b10d37 initial
dwinter
parents:
diff changeset
943 'name' => '',
015d06b10d37 initial
dwinter
parents:
diff changeset
944 'num_results' => '5',
015d06b10d37 initial
dwinter
parents:
diff changeset
945 'mlt_fl' => array(
015d06b10d37 initial
dwinter
parents:
diff changeset
946 'label' => 'label',
015d06b10d37 initial
dwinter
parents:
diff changeset
947 'taxonomy_names' => 'taxonomy_names',
015d06b10d37 initial
dwinter
parents:
diff changeset
948 ),
015d06b10d37 initial
dwinter
parents:
diff changeset
949 'mlt_env_id' => 'solr',
015d06b10d37 initial
dwinter
parents:
diff changeset
950 'mlt_mintf' => '1',
015d06b10d37 initial
dwinter
parents:
diff changeset
951 'mlt_mindf' => '1',
015d06b10d37 initial
dwinter
parents:
diff changeset
952 'mlt_minwl' => '3',
015d06b10d37 initial
dwinter
parents:
diff changeset
953 'mlt_maxwl' => '15',
015d06b10d37 initial
dwinter
parents:
diff changeset
954 'mlt_maxqt' => '20',
015d06b10d37 initial
dwinter
parents:
diff changeset
955 'mlt_type_filters' => array(),
015d06b10d37 initial
dwinter
parents:
diff changeset
956 'mlt_custom_filters' => '',
015d06b10d37 initial
dwinter
parents:
diff changeset
957 );
015d06b10d37 initial
dwinter
parents:
diff changeset
958 }
015d06b10d37 initial
dwinter
parents:
diff changeset
959
015d06b10d37 initial
dwinter
parents:
diff changeset
960 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
961 * Constructs a list of field names used on the settings form.
015d06b10d37 initial
dwinter
parents:
diff changeset
962 *
015d06b10d37 initial
dwinter
parents:
diff changeset
963 * @return array An array containing a the fields in the solr instance.
015d06b10d37 initial
dwinter
parents:
diff changeset
964 */
015d06b10d37 initial
dwinter
parents:
diff changeset
965 function apachesolr_search_mlt_get_fields() {
015d06b10d37 initial
dwinter
parents:
diff changeset
966 $rows = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
967
015d06b10d37 initial
dwinter
parents:
diff changeset
968 try {
015d06b10d37 initial
dwinter
parents:
diff changeset
969 $solr = apachesolr_get_solr();
015d06b10d37 initial
dwinter
parents:
diff changeset
970 $fields = $solr->getFields();
015d06b10d37 initial
dwinter
parents:
diff changeset
971 foreach ($fields as $field_name => $field) {
015d06b10d37 initial
dwinter
parents:
diff changeset
972 if ($field->schema{4} == 'V') {
015d06b10d37 initial
dwinter
parents:
diff changeset
973 $rows[$field_name] = apachesolr_field_name_map($field_name);
015d06b10d37 initial
dwinter
parents:
diff changeset
974 }
015d06b10d37 initial
dwinter
parents:
diff changeset
975 }
015d06b10d37 initial
dwinter
parents:
diff changeset
976 ksort($rows);
015d06b10d37 initial
dwinter
parents:
diff changeset
977 }
015d06b10d37 initial
dwinter
parents:
diff changeset
978 catch (Exception $e) {
015d06b10d37 initial
dwinter
parents:
diff changeset
979 watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
015d06b10d37 initial
dwinter
parents:
diff changeset
980 }
015d06b10d37 initial
dwinter
parents:
diff changeset
981
015d06b10d37 initial
dwinter
parents:
diff changeset
982 return $rows;
015d06b10d37 initial
dwinter
parents:
diff changeset
983 }
015d06b10d37 initial
dwinter
parents:
diff changeset
984
015d06b10d37 initial
dwinter
parents:
diff changeset
985 /**
015d06b10d37 initial
dwinter
parents:
diff changeset
986 * A helper function to save MLT block data.
015d06b10d37 initial
dwinter
parents:
diff changeset
987 *
015d06b10d37 initial
dwinter
parents:
diff changeset
988 * If passed a block delta, the function will update block settings. If it is
015d06b10d37 initial
dwinter
parents:
diff changeset
989 * not passed a block delta, the function will create a new block.
015d06b10d37 initial
dwinter
parents:
diff changeset
990 *
015d06b10d37 initial
dwinter
parents:
diff changeset
991 * @param array $block_settings An array containing the settings required to form
015d06b10d37 initial
dwinter
parents:
diff changeset
992 * a moreLikeThis request.
015d06b10d37 initial
dwinter
parents:
diff changeset
993 *
015d06b10d37 initial
dwinter
parents:
diff changeset
994 * @param int $delta The id of the block you wish to update.
015d06b10d37 initial
dwinter
parents:
diff changeset
995 */
015d06b10d37 initial
dwinter
parents:
diff changeset
996 function apachesolr_search_mlt_save_block($block_settings = array(), $delta = NULL) {
015d06b10d37 initial
dwinter
parents:
diff changeset
997 $blocks = variable_get('apachesolr_search_mlt_blocks', array());
015d06b10d37 initial
dwinter
parents:
diff changeset
998 if (is_null($delta)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
999 $count = 0;
015d06b10d37 initial
dwinter
parents:
diff changeset
1000 ksort($blocks);
015d06b10d37 initial
dwinter
parents:
diff changeset
1001 // Construct a new array key.
015d06b10d37 initial
dwinter
parents:
diff changeset
1002 if (end($blocks)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1003 list(, $count) = explode('-', key($blocks));
015d06b10d37 initial
dwinter
parents:
diff changeset
1004 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1005 $delta = sprintf('mlt-%03d', 1 + $count);
015d06b10d37 initial
dwinter
parents:
diff changeset
1006 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1007 $defaults = apachesolr_search_mlt_block_defaults();
015d06b10d37 initial
dwinter
parents:
diff changeset
1008 // Remove stray form values.
015d06b10d37 initial
dwinter
parents:
diff changeset
1009 $blocks[$delta] = array_intersect_key($block_settings, $defaults) + $defaults;
015d06b10d37 initial
dwinter
parents:
diff changeset
1010 // Eliminate non-selected fields.
015d06b10d37 initial
dwinter
parents:
diff changeset
1011 $blocks[$delta]['mlt_fl'] = array_filter($blocks[$delta]['mlt_fl']);
015d06b10d37 initial
dwinter
parents:
diff changeset
1012 $blocks[$delta]['delta'] = $delta;
015d06b10d37 initial
dwinter
parents:
diff changeset
1013 $blocks[$delta]['mlt_type_filters'] = array_filter($blocks[$delta]['mlt_type_filters']);
015d06b10d37 initial
dwinter
parents:
diff changeset
1014 $blocks[$delta]['mlt_custom_filters'] = trim($blocks[$delta]['mlt_custom_filters']);
015d06b10d37 initial
dwinter
parents:
diff changeset
1015 variable_set('apachesolr_search_mlt_blocks', $blocks);
015d06b10d37 initial
dwinter
parents:
diff changeset
1016 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1017
015d06b10d37 initial
dwinter
parents:
diff changeset
1018 function apachesolr_search_mlt_delete_block_form($form, &$form_state, $block) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1019 if ($block) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1020 // Backwards compatibility for the block deltas
015d06b10d37 initial
dwinter
parents:
diff changeset
1021 if (isset($block['delta'])) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1022 $delta = $block['delta'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1023 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1024 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1025 $delta = arg(6);
015d06b10d37 initial
dwinter
parents:
diff changeset
1026 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1027 // Add our delta to the delete form
015d06b10d37 initial
dwinter
parents:
diff changeset
1028 $form['delta'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1029 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
1030 '#value' => $delta,
015d06b10d37 initial
dwinter
parents:
diff changeset
1031 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1032 $question = t('Are you sure you want to delete the "More Like this" block %name?', array('%name' => $block['name']));
015d06b10d37 initial
dwinter
parents:
diff changeset
1033 $path = 'admin/structure/block';
015d06b10d37 initial
dwinter
parents:
diff changeset
1034 $description = t('The block will be deleted. This action cannot be undone.');
015d06b10d37 initial
dwinter
parents:
diff changeset
1035 $yes = t('Delete');
015d06b10d37 initial
dwinter
parents:
diff changeset
1036 $no = t('Cancel');
015d06b10d37 initial
dwinter
parents:
diff changeset
1037 return confirm_form($form, filter_xss($question), $path, $description, $yes, $no);
015d06b10d37 initial
dwinter
parents:
diff changeset
1038 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1039 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1040
015d06b10d37 initial
dwinter
parents:
diff changeset
1041 function apachesolr_search_mlt_delete_block_form_submit($form, &$form_state) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1042 $blocks = apachesolr_search_load_all_mlt_blocks();
015d06b10d37 initial
dwinter
parents:
diff changeset
1043
015d06b10d37 initial
dwinter
parents:
diff changeset
1044 unset($blocks[$form_state['values']['delta']]);
015d06b10d37 initial
dwinter
parents:
diff changeset
1045 variable_set('apachesolr_search_mlt_blocks', $blocks);
015d06b10d37 initial
dwinter
parents:
diff changeset
1046 drupal_set_message(t('The block has been deleted.'));
015d06b10d37 initial
dwinter
parents:
diff changeset
1047 $form_state['redirect'] = 'admin/config/search/apachesolr/search-pages';
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 to edit moreLikeThis block settings.
015d06b10d37 initial
dwinter
parents:
diff changeset
1052 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1053 * @param int $delta If editing, the id of the block to edit.
015d06b10d37 initial
dwinter
parents:
diff changeset
1054 *
015d06b10d37 initial
dwinter
parents:
diff changeset
1055 * @return array The form used for editing.
015d06b10d37 initial
dwinter
parents:
diff changeset
1056 * @todo Add term boost settings.
015d06b10d37 initial
dwinter
parents:
diff changeset
1057 * @todo Enable the user to specify a query, rather then forcing suggestions
015d06b10d37 initial
dwinter
parents:
diff changeset
1058 * based on the node id.
015d06b10d37 initial
dwinter
parents:
diff changeset
1059 */
015d06b10d37 initial
dwinter
parents:
diff changeset
1060 function apachesolr_search_mlt_block_form($block_id = NULL) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1061 if (!empty($block_id)) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1062 $block = apachesolr_search_mlt_block_load($block_id);
015d06b10d37 initial
dwinter
parents:
diff changeset
1063 if (!$block) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1064 return array();
015d06b10d37 initial
dwinter
parents:
diff changeset
1065 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1066 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1067 else {
015d06b10d37 initial
dwinter
parents:
diff changeset
1068 $block = apachesolr_search_mlt_block_defaults();
015d06b10d37 initial
dwinter
parents:
diff changeset
1069 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1070
015d06b10d37 initial
dwinter
parents:
diff changeset
1071 $form['delta'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1072 '#type' => 'value',
015d06b10d37 initial
dwinter
parents:
diff changeset
1073 '#default_value' => isset($block['delta']) ? $block['delta'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1074 '#weight' => '-2',
015d06b10d37 initial
dwinter
parents:
diff changeset
1075 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1076
015d06b10d37 initial
dwinter
parents:
diff changeset
1077 $form['name'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1078 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
1079 '#title' => t('Block name'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1080 '#description' => t('The block name displayed to site users.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1081 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1082 '#default_value' => isset($block['name']) ? $block['name'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1083 '#weight' => '-2',
015d06b10d37 initial
dwinter
parents:
diff changeset
1084 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1085
015d06b10d37 initial
dwinter
parents:
diff changeset
1086 $environments = apachesolr_load_all_environments();
015d06b10d37 initial
dwinter
parents:
diff changeset
1087 $options = array('' => t('<Disabled>'));
015d06b10d37 initial
dwinter
parents:
diff changeset
1088 foreach ($environments as $id => $environment) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1089 $options[$id] = $environment['name'];
015d06b10d37 initial
dwinter
parents:
diff changeset
1090 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1091 $form['mlt_env_id'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1092 '#title' => t('Search environment'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1093 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
1094 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
1095 '#default_value' => isset($block['mlt_env_id']) ? $block['mlt_env_id'] : apachesolr_default_environment(),
015d06b10d37 initial
dwinter
parents:
diff changeset
1096 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1097
015d06b10d37 initial
dwinter
parents:
diff changeset
1098 $form['num_results'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1099 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
1100 '#title' => t('Maximum number of related items to display'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1101 '#default_value' => isset($block['num_results']) ? $block['num_results'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1102 '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)),
015d06b10d37 initial
dwinter
parents:
diff changeset
1103 '#weight' => -1,
015d06b10d37 initial
dwinter
parents:
diff changeset
1104
015d06b10d37 initial
dwinter
parents:
diff changeset
1105 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1106 $form['mlt_fl'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1107 '#type' => 'checkboxes',
015d06b10d37 initial
dwinter
parents:
diff changeset
1108 '#title' => t('Fields for finding related content'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1109 '#description' => t('Choose the fields to be used in calculating similarity. The default combination of %taxonomy_names and %title will provide relevant results for typical sites.', array("%taxonomy_names" => apachesolr_field_name_map("taxonomy_names"), "%title" => apachesolr_field_name_map("label"))),
015d06b10d37 initial
dwinter
parents:
diff changeset
1110 '#options' => apachesolr_search_mlt_get_fields(),
015d06b10d37 initial
dwinter
parents:
diff changeset
1111 '#required' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1112 '#default_value' => isset($block['mlt_fl']) ? $block['mlt_fl'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1113 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1114 $form['advanced'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1115 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
1116 '#title' => t('Advanced configuration'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1117 '#weight' => '1',
015d06b10d37 initial
dwinter
parents:
diff changeset
1118 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1119 '#collapsed' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1120 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1121 $options = drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7));
015d06b10d37 initial
dwinter
parents:
diff changeset
1122 $form['advanced']['mlt_mintf'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1123 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
1124 '#title' => t('Minimum term frequency'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1125 '#description' => t('A word must appear this many times in any given document before the document is considered relevant for comparison.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1126 '#default_value' => isset($block['mlt_mintf']) ? $block['mlt_mintf'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1127 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
1128 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1129 $form['advanced']['mlt_mindf'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1130 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
1131 '#title' => t('Minimum document frequency'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1132 '#description' => t('A word must occur in at least this many documents before it will be used for similarity comparison.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1133 '#default_value' => isset($block['mlt_mindf']) ? $block['mlt_mindf'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1134 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
1135 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1136 $form['advanced']['mlt_minwl'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1137 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
1138 '#title' => t('Minimum word length'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1139 '#description' => 'You can use this to eliminate short words such as "the" and "it" from similarity comparisons. Words must be at least this number of characters or they will be ignored.',
015d06b10d37 initial
dwinter
parents:
diff changeset
1140 '#default_value' => isset($block['mlt_minwl']) ? $block['mlt_minwl'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1141 '#options' => $options,
015d06b10d37 initial
dwinter
parents:
diff changeset
1142 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1143 $form['advanced']['mlt_maxwl'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1144 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
1145 '#title' => t('Maximum word length'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1146 '#description' => t('You can use this to eliminate very long words from similarity comparisons. Words of more than this number of characters will be ignored.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1147 '#default_value' => isset($block['mlt_maxwl']) ? $block['mlt_maxwl'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1148 '#options' => drupal_map_assoc(array(8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)),
015d06b10d37 initial
dwinter
parents:
diff changeset
1149 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1150 $form['advanced']['mlt_maxqt'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1151 '#type' => 'select',
015d06b10d37 initial
dwinter
parents:
diff changeset
1152 '#title' => t('Maximum number of query terms'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1153 '#description' => t('The maximum number of query terms that will be included in any query. Lower numbers will result in fewer recommendations but will get results faster. If a content recommendation is not returning any recommendations, you can either check more "Comparison fields" checkboxes or increase the maximum number of query terms here.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1154 '#options' => drupal_map_assoc(array(3, 5, 7, 10, 12, 15, 20, 25, 30, 35, 40)),
015d06b10d37 initial
dwinter
parents:
diff changeset
1155 '#default_value' => isset($block['mlt_maxqt']) ? $block['mlt_maxqt'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1156 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1157
015d06b10d37 initial
dwinter
parents:
diff changeset
1158 $form['restrictions'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1159 '#type' => 'fieldset',
015d06b10d37 initial
dwinter
parents:
diff changeset
1160 '#title' => t('Filters'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1161 '#weight' => '1',
015d06b10d37 initial
dwinter
parents:
diff changeset
1162 '#collapsible' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1163 '#collapsed' => TRUE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1164 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1165
015d06b10d37 initial
dwinter
parents:
diff changeset
1166 $type_options = array();
015d06b10d37 initial
dwinter
parents:
diff changeset
1167 foreach (node_type_get_types() as $key => $type) {
015d06b10d37 initial
dwinter
parents:
diff changeset
1168 $type_options[$key] = $type->name;
015d06b10d37 initial
dwinter
parents:
diff changeset
1169 }
015d06b10d37 initial
dwinter
parents:
diff changeset
1170
015d06b10d37 initial
dwinter
parents:
diff changeset
1171 $form['restrictions']['mlt_type_filters'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1172 '#type' => 'checkboxes',
015d06b10d37 initial
dwinter
parents:
diff changeset
1173 '#title' => t('Content Types'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1174 '#default_value' => is_array($block['mlt_type_filters']) ? $block['mlt_type_filters'] : array(),
015d06b10d37 initial
dwinter
parents:
diff changeset
1175 '#options' => $type_options,
015d06b10d37 initial
dwinter
parents:
diff changeset
1176 '#description' => t('Select the content types that similarity suggestions should be restricted to. Multiple types are joined with an OR query, so selecting more types results in more recommendations. If none are selected, no filter will be applied.'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1177 '#weight' => '-2',
015d06b10d37 initial
dwinter
parents:
diff changeset
1178 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1179
015d06b10d37 initial
dwinter
parents:
diff changeset
1180 $form['restrictions']['mlt_custom_filters'] = array(
015d06b10d37 initial
dwinter
parents:
diff changeset
1181 '#type' => 'textfield',
015d06b10d37 initial
dwinter
parents:
diff changeset
1182 '#title' => t('Additional Query'),
015d06b10d37 initial
dwinter
parents:
diff changeset
1183 '#description' => t("A query, in Lucene syntax, which will further filter the similarity suggestions. For example, 'label:strategy' will filter related content further to only those with strategy in the title. Here are some more examples:") .
015d06b10d37 initial
dwinter
parents:
diff changeset
1184 '<ul>
015d06b10d37 initial
dwinter
parents:
diff changeset
1185 <li>ss_language:fr</li>
015d06b10d37 initial
dwinter
parents:
diff changeset
1186 <li>tid:(5 OR 7)</li>
015d06b10d37 initial
dwinter
parents:
diff changeset
1187 <li>ds_created:[2009-05-01T23:59:59Z TO 2009-07-28T12:30:00Z]</li>
015d06b10d37 initial
dwinter
parents:
diff changeset
1188 <li>-is_uid:0, -is_uid:1</li>
015d06b10d37 initial
dwinter
parents:
diff changeset
1189 </ul>',
015d06b10d37 initial
dwinter
parents:
diff changeset
1190 '#required' => FALSE,
015d06b10d37 initial
dwinter
parents:
diff changeset
1191 '#default_value' => isset($block['mlt_custom_filters']) ? $block['mlt_custom_filters'] : '',
015d06b10d37 initial
dwinter
parents:
diff changeset
1192 '#weight' => '-1',
015d06b10d37 initial
dwinter
parents:
diff changeset
1193 );
015d06b10d37 initial
dwinter
parents:
diff changeset
1194
015d06b10d37 initial
dwinter
parents:
diff changeset
1195 return $form;
015d06b10d37 initial
dwinter
parents:
diff changeset
1196 }