~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/acp/acp_search.php

  • Committer: dcoles
  • Date: 2008-02-13 04:10:55 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:443
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
*
 
4
* @package acp
 
5
* @version $Id: acp_search.php,v 1.38 2007/10/05 14:36:32 acydburn Exp $
 
6
* @copyright (c) 2005 phpBB Group
 
7
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
 
8
*
 
9
*/
 
10
 
 
11
/**
 
12
* @ignore
 
13
*/
 
14
if (!defined('IN_PHPBB'))
 
15
{
 
16
        exit;
 
17
}
 
18
 
 
19
/**
 
20
* @package acp
 
21
*/
 
22
class acp_search
 
23
{
 
24
        var $u_action;
 
25
        var $state;
 
26
        var $search;
 
27
        var $max_post_id;
 
28
        var $batch_size = 100;
 
29
 
 
30
        function main($id, $mode)
 
31
        {
 
32
                global $user;
 
33
 
 
34
                $user->add_lang('acp/search');
 
35
 
 
36
                // For some this may be of help...
 
37
                @ini_set('memory_limit', '128M');
 
38
 
 
39
                switch ($mode)
 
40
                {
 
41
                        case 'settings':
 
42
                                $this->settings($id, $mode);
 
43
                        break;
 
44
 
 
45
                        case 'index':
 
46
                                $this->index($id, $mode);
 
47
                        break;
 
48
                }
 
49
        }
 
50
 
 
51
        function settings($id, $mode)
 
52
        {
 
53
                global $db, $user, $auth, $template, $cache;
 
54
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
 
55
 
 
56
                $submit = (isset($_POST['submit'])) ? true : false;
 
57
 
 
58
                $search_types = $this->get_search_types();
 
59
 
 
60
                $settings = array(
 
61
                        'search_interval'                       => 'float',
 
62
                        'search_anonymous_interval'     => 'float',
 
63
                        'load_search'                           => 'bool',
 
64
                        'limit_search_load'                     => 'float',
 
65
                        'min_search_author_chars'       => 'integer',
 
66
                        'search_store_results'          => 'integer',
 
67
                );
 
68
 
 
69
                $search = null;
 
70
                $error = false;
 
71
                $search_options = '';
 
72
                foreach ($search_types as $type)
 
73
                {
 
74
                        if ($this->init_search($type, $search, $error))
 
75
                        {
 
76
                                continue;
 
77
                        }
 
78
 
 
79
                        $name = ucfirst(strtolower(str_replace('_', ' ', $type)));
 
80
                        $selected = ($config['search_type'] == $type) ? ' selected="selected"' : '';
 
81
                        $search_options .= '<option value="' . $type . '"' . $selected . '>' . $name . '</option>';
 
82
 
 
83
                        if (method_exists($search, 'acp'))
 
84
                        {
 
85
                                $vars = $search->acp();
 
86
 
 
87
                                if (!$submit)
 
88
                                {
 
89
                                        $template->assign_block_vars('backend', array(
 
90
                                                'NAME'          => $name,
 
91
                                                'SETTINGS'      => $vars['tpl'])
 
92
                                        );
 
93
                                }
 
94
                                else if (is_array($vars['config']))
 
95
                                {
 
96
                                        $settings = array_merge($settings, $vars['config']);
 
97
                                }
 
98
                        }
 
99
                }
 
100
                unset($search);
 
101
                unset($error);
 
102
 
 
103
                $cfg_array = (isset($_REQUEST['config'])) ? request_var('config', array('' => ''), true) : array();
 
104
                $updated = request_var('updated', false);
 
105
 
 
106
                foreach ($settings as $config_name => $var_type)
 
107
                {
 
108
                        if (!isset($cfg_array[$config_name]))
 
109
                        {
 
110
                                continue;
 
111
                        }
 
112
 
 
113
                        // e.g. integer:4:12 (min 4, max 12)
 
114
                        $var_type = explode(':', $var_type);
 
115
 
 
116
                        $config_value = $cfg_array[$config_name];
 
117
                        settype($config_value, $var_type[0]);
 
118
 
 
119
                        if (isset($var_type[1]))
 
120
                        {
 
121
                                $config_value = max($var_type[1], $config_value);
 
122
                        }
 
123
 
 
124
                        if (isset($var_type[2]))
 
125
                        {
 
126
                                $config_value = min($var_type[2], $config_value);
 
127
                        }
 
128
 
 
129
                        // only change config if anything was actually changed
 
130
                        if ($submit && ($config[$config_name] != $config_value))
 
131
                        {
 
132
                                set_config($config_name, $config_value);
 
133
                                $updated = true;
 
134
                        }
 
135
                }
 
136
 
 
137
                if ($submit)
 
138
                {
 
139
                        $extra_message = '';
 
140
                        if ($updated)
 
141
                        {
 
142
                                add_log('admin', 'LOG_CONFIG_SEARCH');
 
143
                        }
 
144
 
 
145
                        if (isset($cfg_array['search_type']) && in_array($cfg_array['search_type'], $search_types, true) && ($cfg_array['search_type'] != $config['search_type']))
 
146
                        {
 
147
                                $search = null;
 
148
                                $error = false;
 
149
 
 
150
                                if (!$this->init_search($cfg_array['search_type'], $search, $error))
 
151
                                {
 
152
                                        if (confirm_box(true))
 
153
                                        {
 
154
                                                if (!method_exists($search, 'init') || !($error = $search->init()))
 
155
                                                {
 
156
                                                        set_config('search_type', $cfg_array['search_type']);
 
157
 
 
158
                                                        if (!$updated)
 
159
                                                        {
 
160
                                                                add_log('admin', 'LOG_CONFIG_SEARCH');
 
161
                                                        }
 
162
                                                        $extra_message = '<br />' . $user->lang['SWITCHED_SEARCH_BACKEND'] . '<br /><a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=search&amp;mode=index') . '">&raquo; ' . $user->lang['GO_TO_SEARCH_INDEX'] . '</a>';
 
163
                                                }
 
164
                                                else
 
165
                                                {
 
166
                                                        trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
 
167
                                                }
 
168
                                        }
 
169
                                        else
 
170
                                        {
 
171
                                                confirm_box(false, $user->lang['CONFIRM_SEARCH_BACKEND'], build_hidden_fields(array(
 
172
                                                        'i'                     => $id,
 
173
                                                        'mode'          => $mode,
 
174
                                                        'submit'        => true,
 
175
                                                        'updated'       => $updated,
 
176
                                                        'config'        => array('search_type' => $cfg_array['search_type']),
 
177
                                                )));
 
178
                                        }
 
179
                                }
 
180
                                else
 
181
                                {
 
182
                                        trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
 
183
                                }
 
184
                        }
 
185
 
 
186
                        trigger_error($user->lang['CONFIG_UPDATED'] . $extra_message . adm_back_link($this->u_action));
 
187
                }
 
188
                unset($cfg_array);
 
189
 
 
190
                $this->tpl_name = 'acp_search';
 
191
                $this->page_title = 'ACP_SEARCH_SETTINGS';
 
192
 
 
193
                $template->assign_vars(array(
 
194
                        'LIMIT_SEARCH_LOAD'             => (float) $config['limit_search_load'],
 
195
                        'MIN_SEARCH_AUTHOR_CHARS'       => (int) $config['min_search_author_chars'],
 
196
                        'SEARCH_INTERVAL'               => (float) $config['search_interval'],
 
197
                        'SEARCH_GUEST_INTERVAL' => (float) $config['search_anonymous_interval'],
 
198
                        'SEARCH_STORE_RESULTS'  => (int) $config['search_store_results'],
 
199
 
 
200
                        'S_SEARCH_TYPES'                => $search_options,
 
201
                        'S_YES_SEARCH'                  => (bool) $config['load_search'],
 
202
                        'S_SETTINGS'                    => true,
 
203
 
 
204
                        'U_ACTION'                              => $this->u_action)
 
205
                );
 
206
        }
 
207
 
 
208
        function index($id, $mode)
 
209
        {
 
210
                global $db, $user, $auth, $template, $cache;
 
211
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
 
212
 
 
213
                if (isset($_REQUEST['action']) && is_array($_REQUEST['action']))
 
214
                {
 
215
                        $action = request_var('action', array('' => false));
 
216
                        $action = key($action);
 
217
                }
 
218
                else
 
219
                {
 
220
                        $action = request_var('action', '');
 
221
                }
 
222
                $this->state = explode(',', $config['search_indexing_state']);
 
223
 
 
224
                if (isset($_POST['cancel']))
 
225
                {
 
226
                        $action = '';
 
227
                        $this->state = array();
 
228
                        $this->save_state();
 
229
                }
 
230
 
 
231
                if ($action)
 
232
                {
 
233
                        switch ($action)
 
234
                        {
 
235
                                case 'progress_bar':
 
236
                                        $type = request_var('type', '');
 
237
                                        $this->display_progress_bar($type);
 
238
                                break;
 
239
 
 
240
                                case 'delete':
 
241
                                        $this->state[1] = 'delete';
 
242
                                break;
 
243
 
 
244
                                case 'create':
 
245
                                        $this->state[1] = 'create';
 
246
                                break;
 
247
 
 
248
                                default:
 
249
                                        trigger_error('NO_ACTION', E_USER_ERROR);
 
250
                                break;
 
251
                        }
 
252
 
 
253
                        if (empty($this->state[0]))
 
254
                        {
 
255
                                $this->state[0] = request_var('search_type', '');
 
256
                        }
 
257
 
 
258
                        $this->search = null;
 
259
                        $error = false;
 
260
                        if ($this->init_search($this->state[0], $this->search, $error))
 
261
                        {
 
262
                                trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
 
263
                        }
 
264
                        $name = ucfirst(strtolower(str_replace('_', ' ', $this->state[0])));
 
265
 
 
266
                        $action = &$this->state[1];
 
267
 
 
268
                        $this->max_post_id = $this->get_max_post_id();
 
269
 
 
270
                        $post_counter = (isset($this->state[2])) ? $this->state[2] : 0;
 
271
                        $this->state[2] = &$post_counter;
 
272
                        $this->save_state();
 
273
 
 
274
                        switch ($action)
 
275
                        {
 
276
                                case 'delete':
 
277
                                        if (method_exists($this->search, 'delete_index'))
 
278
                                        {
 
279
                                                // pass a reference to myself so the $search object can make use of save_state() and attributes
 
280
                                                if ($error = $this->search->delete_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=delete", false)))
 
281
                                                {
 
282
                                                        $this->state = array('');
 
283
                                                        $this->save_state();
 
284
                                                        trigger_error($error . adm_back_link($this->u_action) . $this->close_popup_js(), E_USER_WARNING);
 
285
                                                }
 
286
                                        }
 
287
                                        else
 
288
                                        {
 
289
                                                $starttime = explode(' ', microtime());
 
290
                                                $starttime = $starttime[1] + $starttime[0];
 
291
                                                $row_count = 0;
 
292
                                                while (still_on_time() && $post_counter <= $this->max_post_id)
 
293
                                                {
 
294
                                                        $sql = 'SELECT post_id, poster_id, forum_id
 
295
                                                                FROM ' . POSTS_TABLE . '
 
296
                                                                WHERE post_id >= ' . (int) ($post_counter + 1) . '
 
297
                                                                        AND post_id <= ' . (int) ($post_counter + $this->batch_size);
 
298
                                                        $result = $db->sql_query($sql);
 
299
 
 
300
                                                        $ids = $posters = $forum_ids = array();
 
301
                                                        while ($row = $db->sql_fetchrow($result))
 
302
                                                        {
 
303
                                                                $ids[] = $row['post_id'];
 
304
                                                                $posters[] = $row['poster_id'];
 
305
                                                                $forum_ids[] = $row['forum_id'];
 
306
                                                        }
 
307
                                                        $db->sql_freeresult($result);
 
308
                                                        $row_count += sizeof($ids);
 
309
 
 
310
                                                        if (sizeof($ids))
 
311
                                                        {
 
312
                                                                $this->search->index_remove($ids, $posters, $forum_ids);
 
313
                                                        }
 
314
 
 
315
                                                        $post_counter += $this->batch_size;
 
316
                                                }
 
317
                                                // save the current state
 
318
                                                $this->save_state();
 
319
 
 
320
                                                if ($post_counter <= $this->max_post_id)
 
321
                                                {
 
322
                                                        $mtime = explode(' ', microtime());
 
323
                                                        $totaltime = $mtime[0] + $mtime[1] - $starttime;
 
324
                                                        $rows_per_second = $row_count / $totaltime;
 
325
                                                        meta_refresh(1, append_sid($this->u_action . '&amp;action=delete&amp;skip_rows=' . $post_counter));
 
326
                                                        trigger_error(sprintf($user->lang['SEARCH_INDEX_DELETE_REDIRECT'], $post_counter, $row_count, $rows_per_second));
 
327
                                                }
 
328
                                        }
 
329
 
 
330
                                        $this->search->tidy();
 
331
 
 
332
                                        $this->state = array('');
 
333
                                        $this->save_state();
 
334
 
 
335
                                        add_log('admin', 'LOG_SEARCH_INDEX_REMOVED', $name);
 
336
                                        trigger_error($user->lang['SEARCH_INDEX_REMOVED'] . adm_back_link($this->u_action) . $this->close_popup_js());
 
337
                                break;
 
338
 
 
339
                                case 'create':
 
340
                                        if (method_exists($this->search, 'create_index'))
 
341
                                        {
 
342
                                                // pass a reference to acp_search so the $search object can make use of save_state() and attributes
 
343
                                                if ($error = $this->search->create_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=create", false)))
 
344
                                                {
 
345
                                                        $this->state = array('');
 
346
                                                        $this->save_state();
 
347
                                                        trigger_error($error . adm_back_link($this->u_action) . $this->close_popup_js(), E_USER_WARNING);
 
348
                                                }
 
349
                                        }
 
350
                                        else
 
351
                                        {
 
352
                                                $sql = 'SELECT forum_id, enable_indexing
 
353
                                                        FROM ' . FORUMS_TABLE;
 
354
                                                $result = $db->sql_query($sql, 3600);
 
355
 
 
356
                                                while ($row = $db->sql_fetchrow($result))
 
357
                                                {
 
358
                                                        $forums[$row['forum_id']] = (bool) $row['enable_indexing'];
 
359
                                                }
 
360
                                                $db->sql_freeresult($result);
 
361
 
 
362
                                                $starttime = explode(' ', microtime());
 
363
                                                $starttime = $starttime[1] + $starttime[0];
 
364
                                                $row_count = 0;
 
365
                                                while (still_on_time() && $post_counter <= $this->max_post_id)
 
366
                                                {
 
367
                                                        $sql = 'SELECT post_id, post_subject, post_text, poster_id, forum_id
 
368
                                                                FROM ' . POSTS_TABLE . '
 
369
                                                                WHERE post_id >= ' . (int) ($post_counter + 1) . '
 
370
                                                                        AND post_id <= ' . (int) ($post_counter + $this->batch_size);
 
371
                                                        $result = $db->sql_query($sql);
 
372
 
 
373
                                                        while ($row = $db->sql_fetchrow($result))
 
374
                                                        {
 
375
                                                                // Indexing enabled for this forum or global announcement?
 
376
                                                                // Global announcements get indexed by default.
 
377
                                                                if (!$row['forum_id'] || (isset($forums[$row['forum_id']]) && $forums[$row['forum_id']]))
 
378
                                                                {
 
379
                                                                        $this->search->index('post', $row['post_id'], $row['post_text'], $row['post_subject'], $row['poster_id'], $row['forum_id']);
 
380
                                                                }
 
381
                                                                $row_count++;
 
382
                                                        }
 
383
                                                        $db->sql_freeresult($result);
 
384
 
 
385
                                                        $post_counter += $this->batch_size;
 
386
                                                }
 
387
                                                // save the current state
 
388
                                                $this->save_state();
 
389
 
 
390
                                                // pretend the number of posts was as big as the number of ids we indexed so far
 
391
                                                // just an estimation as it includes deleted posts
 
392
                                                $num_posts = $config['num_posts'];
 
393
                                                $config['num_posts'] = min($config['num_posts'], $post_counter);
 
394
                                                $this->search->tidy();
 
395
                                                $config['num_posts'] = $num_posts;
 
396
 
 
397
                                                if ($post_counter <= $this->max_post_id)
 
398
                                                {
 
399
                                                        $mtime = explode(' ', microtime());
 
400
                                                        $totaltime = $mtime[0] + $mtime[1] - $starttime;
 
401
                                                        $rows_per_second = $row_count / $totaltime;
 
402
                                                        meta_refresh(1, append_sid($this->u_action . '&amp;action=create&amp;skip_rows=' . $post_counter));
 
403
                                                        trigger_error(sprintf($user->lang['SEARCH_INDEX_CREATE_REDIRECT'], $post_counter, $row_count, $rows_per_second));
 
404
                                                }
 
405
                                        }
 
406
 
 
407
                                        $this->search->tidy();
 
408
 
 
409
                                        $this->state = array('');
 
410
                                        $this->save_state();
 
411
 
 
412
                                        add_log('admin', 'LOG_SEARCH_INDEX_CREATED', $name);
 
413
                                        trigger_error($user->lang['SEARCH_INDEX_CREATED'] . adm_back_link($this->u_action) . $this->close_popup_js());
 
414
                                break;
 
415
                        }
 
416
                }
 
417
 
 
418
                $search_types = $this->get_search_types();
 
419
 
 
420
                $search = null;
 
421
                $error = false;
 
422
                $search_options = '';
 
423
                foreach ($search_types as $type)
 
424
                {
 
425
                        if ($this->init_search($type, $search, $error) || !method_exists($search, 'index_created'))
 
426
                        {
 
427
                                continue;
 
428
                        }
 
429
 
 
430
                        $name = ucfirst(strtolower(str_replace('_', ' ', $type)));
 
431
 
 
432
                        $data = array();
 
433
                        if (method_exists($search, 'index_stats'))
 
434
                        {
 
435
                                $data = $search->index_stats();
 
436
                        }
 
437
 
 
438
                        $statistics = array();
 
439
                        foreach ($data as $statistic => $value)
 
440
                        {
 
441
                                $n = sizeof($statistics);
 
442
                                if ($n && sizeof($statistics[$n - 1]) < 3)
 
443
                                {
 
444
                                        $statistics[$n - 1] += array('statistic_2' => $statistic, 'value_2' => $value);
 
445
                                }
 
446
                                else
 
447
                                {
 
448
                                        $statistics[] = array('statistic_1' => $statistic, 'value_1' => $value);
 
449
                                }
 
450
                        }
 
451
 
 
452
                        $template->assign_block_vars('backend', array(
 
453
                                'L_NAME'                        => $name,
 
454
                                'NAME'                          => $type,
 
455
 
 
456
                                'S_ACTIVE'                      => ($type == $config['search_type']) ? true : false,
 
457
                                'S_HIDDEN_FIELDS'       => build_hidden_fields(array('search_type' => $type)),
 
458
                                'S_INDEXED'                     => (bool) $search->index_created(),
 
459
                                'S_STATS'                       => (bool) sizeof($statistics))
 
460
                        );
 
461
 
 
462
                        foreach ($statistics as $statistic)
 
463
                        {
 
464
                                $template->assign_block_vars('backend.data', array(
 
465
                                        'STATISTIC_1'   => $statistic['statistic_1'],
 
466
                                        'VALUE_1'               => $statistic['value_1'],
 
467
                                        'STATISTIC_2'   => (isset($statistic['statistic_2'])) ? $statistic['statistic_2'] : '',
 
468
                                        'VALUE_2'               => (isset($statistic['value_2'])) ? $statistic['value_2'] : '')
 
469
                                );
 
470
                        }
 
471
                }
 
472
                unset($search);
 
473
                unset($error);
 
474
                unset($statistics);
 
475
                unset($data);
 
476
 
 
477
                $this->tpl_name = 'acp_search';
 
478
                $this->page_title = 'ACP_SEARCH_INDEX';
 
479
 
 
480
                $template->assign_vars(array(
 
481
                        'S_INDEX'                               => true,
 
482
                        'U_ACTION'                              => $this->u_action,
 
483
                        'U_PROGRESS_BAR'                => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;mode=$mode&amp;action=progress_bar"),
 
484
                        'UA_PROGRESS_BAR'               => addslashes(append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;mode=$mode&amp;action=progress_bar")),
 
485
                ));
 
486
 
 
487
                if (isset($this->state[1]))
 
488
                {
 
489
                        $template->assign_vars(array(
 
490
                                'S_CONTINUE_INDEXING'   => $this->state[1],
 
491
                                'U_CONTINUE_INDEXING'   => $this->u_action . '&amp;action=' . $this->state[1],
 
492
                                'L_CONTINUE'                    => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING'] : $user->lang['CONTINUE_DELETING_INDEX'],
 
493
                                'L_CONTINUE_EXPLAIN'    => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING_EXPLAIN'] : $user->lang['CONTINUE_DELETING_INDEX_EXPLAIN'])
 
494
                        );
 
495
                }
 
496
        }
 
497
 
 
498
        function display_progress_bar($type)
 
499
        {
 
500
                global $template, $user;
 
501
 
 
502
                $l_type = ($type == 'create') ? 'INDEXING_IN_PROGRESS' : 'DELETING_INDEX_IN_PROGRESS';
 
503
 
 
504
                adm_page_header($user->lang[$l_type]);
 
505
 
 
506
                $template->set_filenames(array(
 
507
                        'body'  => 'progress_bar.html')
 
508
                );
 
509
 
 
510
                $template->assign_vars(array(
 
511
                        'L_PROGRESS'                    => $user->lang[$l_type],
 
512
                        'L_PROGRESS_EXPLAIN'    => $user->lang[$l_type . '_EXPLAIN'])
 
513
                );
 
514
 
 
515
                adm_page_footer();
 
516
        }
 
517
 
 
518
        function close_popup_js()
 
519
        {
 
520
                return "<script type=\"text/javascript\">\n" .
 
521
                        "<!--\n" .
 
522
                        "       close_waitscreen = 1;\n" .
 
523
                        "//-->\n" .
 
524
                        "</script>\n";
 
525
        }
 
526
 
 
527
        function get_search_types()
 
528
        {
 
529
                global $phpbb_root_path, $phpEx;
 
530
 
 
531
                $search_types = array();
 
532
 
 
533
                $dp = @opendir($phpbb_root_path . 'includes/search');
 
534
 
 
535
                if ($dp)
 
536
                {
 
537
                        while (($file = readdir($dp)) !== false)
 
538
                        {
 
539
                                if ((preg_match('#\.' . $phpEx . '$#', $file)) && ($file != "search.$phpEx"))
 
540
                                {
 
541
                                        $search_types[] = preg_replace('#^(.*?)\.' . $phpEx . '$#', '\1', $file);
 
542
                                }
 
543
                        }
 
544
                        closedir($dp);
 
545
 
 
546
                        sort($search_types);
 
547
                }
 
548
 
 
549
                return $search_types;
 
550
        }
 
551
 
 
552
        function get_max_post_id()
 
553
        {
 
554
                global $db;
 
555
 
 
556
                $sql = 'SELECT MAX(post_id) as max_post_id
 
557
                        FROM '. POSTS_TABLE;
 
558
                $result = $db->sql_query($sql);
 
559
                $max_post_id = (int) $db->sql_fetchfield('max_post_id');
 
560
                $db->sql_freeresult($result);
 
561
 
 
562
                return $max_post_id;
 
563
        }
 
564
 
 
565
        function save_state($state = false)
 
566
        {
 
567
                if ($state)
 
568
                {
 
569
                        $this->state = $state;
 
570
                }
 
571
 
 
572
                ksort($this->state);
 
573
 
 
574
                set_config('search_indexing_state', implode(',', $this->state));
 
575
        }
 
576
 
 
577
        /**
 
578
        * Initialises a search backend object
 
579
        *
 
580
        * @return false if no error occurred else an error message
 
581
        */
 
582
        function init_search($type, &$search, &$error)
 
583
        {
 
584
                global $phpbb_root_path, $phpEx, $user;
 
585
 
 
586
                if (!preg_match('#^\w+$#', $type) || !file_exists("{$phpbb_root_path}includes/search/$type.$phpEx"))
 
587
                {
 
588
                        $error = $user->lang['NO_SUCH_SEARCH_MODULE'];
 
589
                        return $error;
 
590
                }
 
591
 
 
592
                include_once("{$phpbb_root_path}includes/search/$type.$phpEx");
 
593
 
 
594
                if (!class_exists($type))
 
595
                {
 
596
                        $error = $user->lang['NO_SUCH_SEARCH_MODULE'];
 
597
                        return $error;
 
598
                }
 
599
 
 
600
                $error = false;
 
601
                $search = new $type($error);
 
602
 
 
603
                return $error;
 
604
        }
 
605
}
 
606
 
 
607
?>
 
 
b'\\ No newline at end of file'