danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * @file
|
danielebarchiesi@4
|
5 * This file is used to install/update/delete the module tables in database
|
danielebarchiesi@4
|
6 *
|
danielebarchiesi@4
|
7 * @authors
|
danielebarchiesi@4
|
8 * Miroslav Talenberg (Dominique CLAUSE) <http://www.axiomcafe.fr/contact>
|
danielebarchiesi@4
|
9 *
|
danielebarchiesi@4
|
10 * Sponsored by:
|
danielebarchiesi@4
|
11 * www.axiomcafe.fr
|
danielebarchiesi@4
|
12 */
|
danielebarchiesi@4
|
13
|
danielebarchiesi@4
|
14 // -----------------------------------------------------------------------------------------------
|
danielebarchiesi@4
|
15 /**
|
danielebarchiesi@4
|
16 * Implements hook_schema().
|
danielebarchiesi@4
|
17 * Set the schema of database
|
danielebarchiesi@4
|
18 * @return the schema for of the table to create
|
danielebarchiesi@4
|
19 */
|
danielebarchiesi@4
|
20 function search_autocomplete_schema() {
|
danielebarchiesi@4
|
21 // schema for search_autocomplete database
|
danielebarchiesi@4
|
22 $schema['search_autocomplete_forms'] = array(
|
danielebarchiesi@4
|
23 'description' => t('Store the forms to autocomplete using Search Autocomplete.'),
|
danielebarchiesi@4
|
24 'fields' => array(
|
danielebarchiesi@4
|
25 'fid' => array(
|
danielebarchiesi@4
|
26 'type' => 'serial',
|
danielebarchiesi@4
|
27 'unsigned' => TRUE,
|
danielebarchiesi@4
|
28 'not null' => TRUE,
|
danielebarchiesi@4
|
29 ),
|
danielebarchiesi@4
|
30 'title' => array(
|
danielebarchiesi@4
|
31 'description' => 'Human readable name for the form',
|
danielebarchiesi@4
|
32 'type' => 'varchar',
|
danielebarchiesi@4
|
33 'length' => 255,
|
danielebarchiesi@4
|
34 'not null' => TRUE,
|
danielebarchiesi@4
|
35 'default' => '',
|
danielebarchiesi@4
|
36 ),
|
danielebarchiesi@4
|
37 'selector' => array(
|
danielebarchiesi@4
|
38 'description' => 'Reference id selector of the the form in drupal',
|
danielebarchiesi@4
|
39 'type' => 'varchar',
|
danielebarchiesi@4
|
40 'length' => 255,
|
danielebarchiesi@4
|
41 'not null' => TRUE,
|
danielebarchiesi@4
|
42 'default' => '',
|
danielebarchiesi@4
|
43 ),
|
danielebarchiesi@4
|
44 'weight' => array(
|
danielebarchiesi@4
|
45 'description' => 'Form weight in table',
|
danielebarchiesi@4
|
46 'type' => 'int',
|
danielebarchiesi@4
|
47 'not null' => TRUE,
|
danielebarchiesi@4
|
48 'default' => 0,
|
danielebarchiesi@4
|
49 ),
|
danielebarchiesi@4
|
50 'enabled' => array(
|
danielebarchiesi@4
|
51 'description' => 'Define if autocomplete is activated or not',
|
danielebarchiesi@4
|
52 'type' => 'int',
|
danielebarchiesi@4
|
53 'not null' => TRUE,
|
danielebarchiesi@4
|
54 'default' => 0,
|
danielebarchiesi@4
|
55 ),
|
danielebarchiesi@4
|
56 'parent_fid' => array(
|
danielebarchiesi@4
|
57 'description' => 'Define if the from follows the configuration of another one',
|
danielebarchiesi@4
|
58 'type' => 'int',
|
danielebarchiesi@4
|
59 'not null' => TRUE,
|
danielebarchiesi@4
|
60 'default' => 0,
|
danielebarchiesi@4
|
61 ),
|
danielebarchiesi@4
|
62 'min_char' => array(
|
danielebarchiesi@4
|
63 'description' => 'Minimum of character before triggering suggestions',
|
danielebarchiesi@4
|
64 'type' => 'int',
|
danielebarchiesi@4
|
65 'not null' => TRUE,
|
danielebarchiesi@4
|
66 'default' => 3,
|
danielebarchiesi@4
|
67 ),
|
danielebarchiesi@4
|
68 'max_sug' => array(
|
danielebarchiesi@4
|
69 'description' => 'Maximum number of suggestions',
|
danielebarchiesi@4
|
70 'type' => 'int',
|
danielebarchiesi@4
|
71 'not null' => TRUE,
|
danielebarchiesi@4
|
72 'default' => 10,
|
danielebarchiesi@4
|
73 ),
|
danielebarchiesi@4
|
74 'no_results' => array(
|
danielebarchiesi@4
|
75 'description' => 'Maximum number of suggestions',
|
danielebarchiesi@4
|
76 'type' => 'varchar',
|
danielebarchiesi@4
|
77 'length' => 50,
|
danielebarchiesi@4
|
78 'not null' => FALSE,
|
danielebarchiesi@4
|
79 'default' => '-- no results --',
|
danielebarchiesi@4
|
80 ),
|
danielebarchiesi@4
|
81 'auto_submit' => array(
|
danielebarchiesi@4
|
82 'description' => 'Define if form should be autosubmitted when suggestion is choosen',
|
danielebarchiesi@4
|
83 'type' => 'int',
|
danielebarchiesi@4
|
84 'not null' => TRUE,
|
danielebarchiesi@4
|
85 'default' => 1,
|
danielebarchiesi@4
|
86 ),
|
danielebarchiesi@4
|
87 'auto_redirect' => array(
|
danielebarchiesi@4
|
88 'description' => 'Define if user should be redirected to suggestion directly',
|
danielebarchiesi@4
|
89 'type' => 'int',
|
danielebarchiesi@4
|
90 'not null' => TRUE,
|
danielebarchiesi@4
|
91 'default' => 1,
|
danielebarchiesi@4
|
92 ),
|
danielebarchiesi@4
|
93 'translite' => array(
|
danielebarchiesi@4
|
94 'description' => 'Define if suggestion searches should be translited',
|
danielebarchiesi@4
|
95 'type' => 'int',
|
danielebarchiesi@4
|
96 'not null' => TRUE,
|
danielebarchiesi@4
|
97 'default' => 1,
|
danielebarchiesi@4
|
98 ),
|
danielebarchiesi@4
|
99 'data_source' => array(
|
danielebarchiesi@4
|
100 'description' => 'Should data come from callback or from static resource',
|
danielebarchiesi@4
|
101 'type' => 'int',
|
danielebarchiesi@4
|
102 'not null' => TRUE,
|
danielebarchiesi@4
|
103 'default' => 1,
|
danielebarchiesi@4
|
104 ),
|
danielebarchiesi@4
|
105 'data_callback' => array(
|
danielebarchiesi@4
|
106 'description' => 'Callback URL for data source',
|
danielebarchiesi@4
|
107 'type' => 'varchar',
|
danielebarchiesi@4
|
108 'length' => 255,
|
danielebarchiesi@4
|
109 'default' => '',
|
danielebarchiesi@4
|
110 ),
|
danielebarchiesi@4
|
111 'data_static' => array(
|
danielebarchiesi@4
|
112 'description' => 'Static text as a data',
|
danielebarchiesi@4
|
113 'type' => 'text',
|
danielebarchiesi@4
|
114 'size' => 'big',
|
danielebarchiesi@4
|
115 ),
|
danielebarchiesi@4
|
116 'theme' => array(
|
danielebarchiesi@4
|
117 'description' => 'Theme to use with this form',
|
danielebarchiesi@4
|
118 'type' => 'varchar',
|
danielebarchiesi@4
|
119 'length' => 255,
|
danielebarchiesi@4
|
120 'not null' => TRUE,
|
danielebarchiesi@4
|
121 'default' => 'lightness',
|
danielebarchiesi@4
|
122 ),
|
danielebarchiesi@4
|
123 ),
|
danielebarchiesi@4
|
124 'primary key' => array('fid'),
|
danielebarchiesi@4
|
125 );
|
danielebarchiesi@4
|
126
|
danielebarchiesi@4
|
127 return $schema;
|
danielebarchiesi@4
|
128 } // function search_autocomplete_schema
|
danielebarchiesi@4
|
129
|
danielebarchiesi@4
|
130 //-----------------------------------------------------------------------------------------------
|
danielebarchiesi@4
|
131 /**
|
danielebarchiesi@4
|
132 * Implements hook_install().
|
danielebarchiesi@4
|
133 */
|
danielebarchiesi@4
|
134 function search_autocomplete_install() {
|
danielebarchiesi@4
|
135 global $base_url;
|
danielebarchiesi@4
|
136
|
danielebarchiesi@4
|
137 $limit = variable_get('search_autocomplete_limit', 10);
|
danielebarchiesi@4
|
138 $trigger = variable_get('search_autocomplete_trigger', 3);
|
danielebarchiesi@4
|
139 $enabled = 1;
|
danielebarchiesi@4
|
140
|
danielebarchiesi@4
|
141 // ----------------
|
danielebarchiesi@4
|
142 // declare insertion statement
|
danielebarchiesi@4
|
143 $insert = db_insert('search_autocomplete_forms')
|
danielebarchiesi@4
|
144 ->fields(array('title', 'selector', 'weight', 'enabled', 'min_char', 'max_sug', 'auto_submit', 'auto_redirect', 'data_source', 'data_callback', 'data_static', 'theme'));
|
danielebarchiesi@4
|
145 $insert->values(array(
|
danielebarchiesi@4
|
146 'title' => st('Search page - Node Tab') . " (search/node/%)",
|
danielebarchiesi@4
|
147 'selector' => '#search-form[action="/search/node"] #edit-keys',
|
danielebarchiesi@4
|
148 'weight' => 0,
|
danielebarchiesi@4
|
149 'enabled' => $enabled,
|
danielebarchiesi@4
|
150 'min_char' => $trigger,
|
danielebarchiesi@4
|
151 'max_sug' => $limit,
|
danielebarchiesi@4
|
152 'translite' => 1,
|
danielebarchiesi@4
|
153 'auto_submit' => 1,
|
danielebarchiesi@4
|
154 'auto_redirect' => 1,
|
danielebarchiesi@4
|
155 'data_source' => 1,
|
danielebarchiesi@4
|
156 'data_callback' => 'autocomplete-nodes?filter=',
|
danielebarchiesi@4
|
157 'data_static' => '',
|
danielebarchiesi@4
|
158 'theme' => 'classic.css'
|
danielebarchiesi@4
|
159 ));
|
danielebarchiesi@4
|
160 $insert->values(array(
|
danielebarchiesi@4
|
161 'title' => st('Search page - User Tab') . " (search/user/%)",
|
danielebarchiesi@4
|
162 'selector' => '#search-form[action="/search/user"] #edit-keys',
|
danielebarchiesi@4
|
163 'weight' => 1,
|
danielebarchiesi@4
|
164 'enabled' => $enabled,
|
danielebarchiesi@4
|
165 'min_char' => $trigger,
|
danielebarchiesi@4
|
166 'max_sug' => $limit,
|
danielebarchiesi@4
|
167 'translite' => 1,
|
danielebarchiesi@4
|
168 'auto_submit' => 1,
|
danielebarchiesi@4
|
169 'auto_redirect' => 1,
|
danielebarchiesi@4
|
170 'data_source' => 1,
|
danielebarchiesi@4
|
171 'data_callback' => 'autocomplete-users?filter=',
|
danielebarchiesi@4
|
172 'data_static' => '',
|
danielebarchiesi@4
|
173 'theme' => 'classic.css'
|
danielebarchiesi@4
|
174 ));
|
danielebarchiesi@4
|
175 $insert->values(array(
|
danielebarchiesi@4
|
176 'title' => st('Search Block'),
|
danielebarchiesi@4
|
177 'selector' => "#edit-search-block-form--2",
|
danielebarchiesi@4
|
178 'weight' => 0,
|
danielebarchiesi@4
|
179 'enabled' => $enabled,
|
danielebarchiesi@4
|
180 'min_char' => $trigger,
|
danielebarchiesi@4
|
181 'max_sug' => $limit,
|
danielebarchiesi@4
|
182 'translite' => 1,
|
danielebarchiesi@4
|
183 'auto_submit' => 1,
|
danielebarchiesi@4
|
184 'auto_redirect' => 1,
|
danielebarchiesi@4
|
185 'data_source' => 1,
|
danielebarchiesi@4
|
186 'data_callback' => 'autocomplete-nodes?filter=',
|
danielebarchiesi@4
|
187 'data_static' => '',
|
danielebarchiesi@4
|
188 'theme' => 'classic.css'
|
danielebarchiesi@4
|
189 ));
|
danielebarchiesi@4
|
190 $insert->execute();
|
danielebarchiesi@4
|
191
|
danielebarchiesi@4
|
192 drupal_set_message(st('Search Autocomplete is now correctly installed!') . "<br/>" . st('If you see some functionalities missing or broken, please post an issue here:') . ' <a href="http://drupal.org/project/issues/search_autocomplete">http://drupal.org/project/issues/search_autocomplete</a>');
|
danielebarchiesi@4
|
193
|
danielebarchiesi@4
|
194
|
danielebarchiesi@4
|
195 } // function search_autocomplete_install
|
danielebarchiesi@4
|
196
|
danielebarchiesi@4
|
197 /**
|
danielebarchiesi@4
|
198 * Permission fix for update process from 6.x
|
danielebarchiesi@4
|
199 */
|
danielebarchiesi@4
|
200 function search_autocomplete_update_7000() {
|
danielebarchiesi@4
|
201 $t = get_t();
|
danielebarchiesi@4
|
202 // In Drupal 6 the permissions were wrapped in t(), but in Drupal 7 they are
|
danielebarchiesi@4
|
203 // not. So we want to make sure the database is storing the untranslated
|
danielebarchiesi@4
|
204 // permission or we could run into issues on upgraded Drupal 7 sites.
|
danielebarchiesi@4
|
205 db_update('role_permission')
|
danielebarchiesi@4
|
206 ->fields(array(
|
danielebarchiesi@4
|
207 'permission' => 'administer Search Autocomplete',
|
danielebarchiesi@4
|
208 ))
|
danielebarchiesi@4
|
209 ->condition('permission', $t('administer Search Autocomplete'))
|
danielebarchiesi@4
|
210 ->execute();
|
danielebarchiesi@4
|
211
|
danielebarchiesi@4
|
212 db_update('role_permission')
|
danielebarchiesi@4
|
213 ->fields(array(
|
danielebarchiesi@4
|
214 'permission' => 'use Search Autocomplete',
|
danielebarchiesi@4
|
215 ))
|
danielebarchiesi@4
|
216 ->condition('permission', $t('use Search Autocomplete'))
|
danielebarchiesi@4
|
217 ->execute();
|
danielebarchiesi@4
|
218 }
|
danielebarchiesi@4
|
219
|
danielebarchiesi@4
|
220 /**
|
danielebarchiesi@4
|
221 * Get ready for Search Autocomplete 7.3-x
|
danielebarchiesi@4
|
222 */
|
danielebarchiesi@4
|
223 function search_autocomplete_update_7300(&$sandbox) {
|
danielebarchiesi@4
|
224 $ret = array();
|
danielebarchiesi@4
|
225
|
danielebarchiesi@4
|
226 $num_deleted = db_drop_table('search_autocomplete_forms');
|
danielebarchiesi@4
|
227 $num_deleted &= db_drop_table('search_autocomplete_suggestions');
|
danielebarchiesi@4
|
228
|
danielebarchiesi@4
|
229 db_create_table('search_autocomplete_forms', drupal_get_schema('search_autocomplete_forms', TRUE));
|
danielebarchiesi@4
|
230 search_autocomplete_install();
|
danielebarchiesi@4
|
231
|
danielebarchiesi@4
|
232 return t('The update process is successfull.');
|
danielebarchiesi@4
|
233
|
danielebarchiesi@4
|
234 // In case of an error, simply throw an exception with an error message.
|
danielebarchiesi@4
|
235 throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
|
danielebarchiesi@4
|
236 return $ret;
|
danielebarchiesi@4
|
237 }
|
danielebarchiesi@4
|
238 /**
|
danielebarchiesi@4
|
239 * Get ready for Search Autocomplete 7.x-3.0-rc2
|
danielebarchiesi@4
|
240 */
|
danielebarchiesi@4
|
241 function search_autocomplete_update_7301(&$sandbox) {
|
danielebarchiesi@4
|
242 global $base_url;
|
danielebarchiesi@4
|
243 $ret = array();
|
danielebarchiesi@4
|
244
|
danielebarchiesi@4
|
245 $result = db_select('search_autocomplete_forms', 'f')
|
danielebarchiesi@4
|
246 ->fields('f', array('fid', 'data_callback'))
|
danielebarchiesi@4
|
247 ->execute()
|
danielebarchiesi@4
|
248 ->fetchAll();
|
danielebarchiesi@4
|
249
|
danielebarchiesi@4
|
250 foreach ($result as $item) {
|
danielebarchiesi@4
|
251 db_update('search_autocomplete_forms')
|
danielebarchiesi@4
|
252 ->fields(array(
|
danielebarchiesi@4
|
253 'data_callback' => str_replace($base_url . "/", "", $item->data_callback)
|
danielebarchiesi@4
|
254 ))
|
danielebarchiesi@4
|
255 ->condition('fid', $item->fid)
|
danielebarchiesi@4
|
256 ->execute();
|
danielebarchiesi@4
|
257 }
|
danielebarchiesi@4
|
258 drupal_clear_js_cache();
|
danielebarchiesi@4
|
259
|
danielebarchiesi@4
|
260 return t('Update has:<br/>- change internal callback URL from absolute to relative.<br/>- clear JS cache.<br/> Done with success.');
|
danielebarchiesi@4
|
261
|
danielebarchiesi@4
|
262 // In case of an error, simply throw an exception with an error message.
|
danielebarchiesi@4
|
263 throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
|
danielebarchiesi@4
|
264 return $ret;
|
danielebarchiesi@4
|
265 }
|
danielebarchiesi@4
|
266
|
danielebarchiesi@4
|
267 /**
|
danielebarchiesi@4
|
268 * Get ready for Search Autocomplete 7.x-3.0-rc3
|
danielebarchiesi@4
|
269 */
|
danielebarchiesi@4
|
270 function search_autocomplete_update_7302(&$sandbox) {
|
danielebarchiesi@4
|
271 $ret = array();
|
danielebarchiesi@4
|
272 cache_clear_all();
|
danielebarchiesi@4
|
273 return $ret;
|
danielebarchiesi@4
|
274 }
|
danielebarchiesi@4
|
275 /**
|
danielebarchiesi@4
|
276 * Get ready for Search Autocomplete 7.x-3.1
|
danielebarchiesi@4
|
277 */
|
danielebarchiesi@4
|
278 function search_autocomplete_update_7310(&$sandbox) {
|
danielebarchiesi@4
|
279 $ret = array();
|
danielebarchiesi@4
|
280
|
danielebarchiesi@4
|
281 $translite_field = array(
|
danielebarchiesi@4
|
282 'description' => 'Define if suggestion searches should be translited',
|
danielebarchiesi@4
|
283 'type' => 'int',
|
danielebarchiesi@4
|
284 'not null' => TRUE,
|
danielebarchiesi@4
|
285 'default' => 1,
|
danielebarchiesi@4
|
286 );
|
danielebarchiesi@4
|
287 db_add_field( 'search_autocomplete_forms', 'translite', $translite_field);
|
danielebarchiesi@4
|
288 $no_results_field = array(
|
danielebarchiesi@4
|
289 'description' => 'Maximum number of suggestions',
|
danielebarchiesi@4
|
290 'type' => 'varchar',
|
danielebarchiesi@4
|
291 'length' => 50,
|
danielebarchiesi@4
|
292 'not null' => FALSE,
|
danielebarchiesi@4
|
293 'default' => '-- no results --',
|
danielebarchiesi@4
|
294 );
|
danielebarchiesi@4
|
295 db_add_field( 'search_autocomplete_forms', 'no_results', $no_results_field);
|
danielebarchiesi@4
|
296
|
danielebarchiesi@4
|
297 drupal_clear_js_cache();
|
danielebarchiesi@4
|
298 return t('Update has:<br/>- add a column "translite" in the search autocomplete database.<br/>- add a column "no_results" in the search autocomplete database.<br/> Done with success.');
|
danielebarchiesi@4
|
299
|
danielebarchiesi@4
|
300 // In case of an error, simply throw an exception with an error message.
|
danielebarchiesi@4
|
301 throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
|
danielebarchiesi@4
|
302 return $ret;
|
danielebarchiesi@4
|
303 }
|
danielebarchiesi@4
|
304 // -----------------------------------------------------------------------------------------------
|
danielebarchiesi@4
|
305
|
danielebarchiesi@4
|
306 /**
|
danielebarchiesi@4
|
307 * Get ready for Search Autocomplete 7.x-3.2
|
danielebarchiesi@4
|
308 */
|
danielebarchiesi@4
|
309 function search_autocomplete_update_7320(&$sandbox) {
|
danielebarchiesi@4
|
310 // Create the definition for the field
|
danielebarchiesi@4
|
311 $new_field = array(
|
danielebarchiesi@4
|
312 'description' => 'Static text as a data',
|
danielebarchiesi@4
|
313 'type' => 'text',
|
danielebarchiesi@4
|
314 'size' => 'big',
|
danielebarchiesi@4
|
315 );
|
danielebarchiesi@4
|
316 db_change_field('search_autocomplete_forms', 'data_static', 'data_static', $new_field);
|
danielebarchiesi@4
|
317
|
danielebarchiesi@4
|
318 // Select data_callbacks of
|
danielebarchiesi@4
|
319 $result = db_select('search_autocomplete_forms', 'f')
|
danielebarchiesi@4
|
320 ->fields('f', array('fid', 'data_callback'))
|
danielebarchiesi@4
|
321 ->execute()
|
danielebarchiesi@4
|
322 ->fetchAll();
|
danielebarchiesi@4
|
323 foreach ($result as $item) {
|
danielebarchiesi@4
|
324 db_update('search_autocomplete_forms')
|
danielebarchiesi@4
|
325 ->fields(array(
|
danielebarchiesi@4
|
326 'data_callback' => $item->data_callback . '?filter=')
|
danielebarchiesi@4
|
327 )
|
danielebarchiesi@4
|
328 ->condition('data_callback', array('autocomplete-nodes', 'autocomplete-users'), 'IN')
|
danielebarchiesi@4
|
329 ->execute();
|
danielebarchiesi@4
|
330 }
|
danielebarchiesi@4
|
331
|
danielebarchiesi@4
|
332 return (t('Update has:') . '<br/>' . t('- changed column type "data_static" from TEXT to LONGTEXT.')
|
danielebarchiesi@4
|
333 . '<br/>' . t('- Add filter to VIEWS callback for performance improvement.'));
|
danielebarchiesi@4
|
334
|
danielebarchiesi@4
|
335 // In case of an error, simply throw an exception with an error message.
|
danielebarchiesi@4
|
336 throw new DrupalUpdateException('Something went wrong. Please uninstall and install the module again.');
|
danielebarchiesi@4
|
337 return $ret;
|
danielebarchiesi@4
|
338 } |