phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_search.php

History | View | Annotate | Download (16.8 kB)

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