source: trunk/web/punbb/admin_maintenance.php @ 3

Last change on this file since 3 was 1, checked in by dj3c1t, 13 years ago

import initial

File size: 8.6 KB
RevLine 
[1]1<?php
2
3/***********************************************************************
4
5  Copyright (C) 2002-2005  Rickard Andersson (rickard@punbb.org)
6
7  This file is part of PunBB.
8
9  PunBB is free software; you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published
11  by the Free Software Foundation; either version 2 of the License,
12  or (at your option) any later version.
13
14  PunBB is distributed in the hope that it will be useful, but
15  WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with this program; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
22  MA  02111-1307  USA
23
24************************************************************************/
25
26
27// Tell header.php to use the admin template
28define('PUN_ADMIN_CONSOLE', 1);
29// Tell common.php that we don't want output buffering
30define('PUN_DISABLE_BUFFERING', 1);
31
32define('PUN_ROOT', './');
33require PUN_ROOT.'include/common.php';
34require PUN_ROOT.'include/common_admin.php';
35
36if ($pun_user['g_id'] > PUN_ADMIN)
37        message($lang_common['No permission']);
38
39if (isset($_GET['i_per_page']) && isset($_GET['i_start_at']))
40{
41
42        $per_page = intval($_GET['i_per_page']);
43        $start_at = intval($_GET['i_start_at']);
44        if ($per_page < 1 || $start_at < 1)
45                message($lang_common['Bad request']);
46
47        @set_time_limit(0);
48
49        // If this is the first cycle of posts we empty the search index before we proceed
50        if (isset($_GET['i_empty_index']))
51        {
52                // This is the only potentially "dangerous" thing we can do here, so we check the referer
53                confirm_referrer('admin_maintenance.php');
54
55                $truncate_sql = ($db_type != 'sqlite') ? 'TRUNCATE TABLE ' : 'DELETE FROM ';
56                $db->query($truncate_sql.$db->prefix.'search_matches') or error('Impossible de vider la table search index match', __FILE__, __LINE__, $db->error());
57                $db->query($truncate_sql.$db->prefix.'search_words') or error('Impossible de vider la table search index words', __FILE__, __LINE__, $db->error());
58
59                // Reset the sequence for the search words (not needed for SQLite)
60                switch ($db_type)
61                {
62                        case 'mysql':
63                        case 'mysqli':
64                                $result = $db->query('ALTER TABLE '.$db->prefix.'search_words auto_increment=1') or error('Impossible de modifier l\'auto-incrémentation', __FILE__, __LINE__, $db->error());
65                                break;
66
67                        case 'pgsql';
68                                $result = $db->query('SELECT setval(\'search_words_id_seq\', 1, false)') or error('Impossible de modifier la séquence', __FILE__, __LINE__, $db->error());
69                }
70        }
71
72        $end_at = $start_at + $per_page;
73
74?>
75<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
76
77<html>
78<head>
79<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
80<title><?php echo pun_htmlspecialchars($pun_config['o_board_title']) ?> / Reconstruction des index de recherches ...</title>
81<style type="text/css">
82body {
83        font: 10px Verdana, Arial, Helvetica, sans-serif;
84        color: #333333;
85        background-color: #FFFFFF
86}
87</style>
88</head>
89<body>
90
91Reconstruction des index ... C'est peut être le bon moment pour aller prendre un café :-)<br /><br />
92
93<?php
94
95        require PUN_ROOT.'include/search_idx.php';
96
97        // Fetch posts to process
98        $result = $db->query('SELECT DISTINCT t.id, p.id, p.message FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id WHERE t.id>='.$start_at.' AND t.id<'.$end_at.' ORDER BY t.id') or error('Impossible de retrouver les informations des discussions et des messages', __FILE__, __LINE__, $db->error());
99
100        $cur_topic = 0;
101        while ($cur_post = $db->fetch_row($result))
102        {
103                if ($cur_post[0] <> $cur_topic)
104                {
105                        // Fetch subject and ID of first post in topic
106                        $result2 = $db->query('SELECT p.id, t.subject, MIN(p.posted) AS first FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id WHERE t.id='.$cur_post[0].' GROUP BY p.id, t.subject ORDER BY first LIMIT 1') or error('Impossible de retrouver les informations des discussions', __FILE__, __LINE__, $db->error());
107                        list($first_post, $subject) = $db->fetch_row($result2);
108
109                        $cur_topic = $cur_post[0];
110                }
111
112                echo 'Traitement du message <strong>'.$cur_post[1].'</strong> de la discussion <strong>'.$cur_post[0].'</strong><br />'."\n";
113
114                if ($cur_post[1] == $first_post)        // This is the "topic post" so we have to index the subject as well
115                        update_search_index('post', $cur_post[1], $cur_post[2], $subject);
116                else
117                        update_search_index('post', $cur_post[1], $cur_post[2]);
118        }
119
120        // Check if there is more work to do
121        $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE id>'.$end_at) or error('Impossible de retrouver les informations de discussions', __FILE__, __LINE__, $db->error());
122
123        $query_str = ($db->num_rows($result)) ? '?i_per_page='.$per_page.'&i_start_at='.$end_at : '';
124
125        $db->end_transaction();
126        $db->close();
127
128        exit('<script type="text/javascript">window.location="admin_maintenance.php'.$query_str.'"</script><br />La redirection javaScript a échouée. <a href="admin_maintenance.php'.$query_str.'">Cliquez ici</a> pour continuer.');
129}
130
131
132// Get the first post ID from the db
133$result = $db->query('SELECT id FROM '.$db->prefix.'topics ORDER BY id LIMIT 1') or error('Impossible de retrouver les informations de discussions', __FILE__, __LINE__, $db->error());
134if ($db->num_rows($result))
135        $first_id = $db->result($result);
136
137$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Maintenance';
138require PUN_ROOT.'header.php';
139
140generate_admin_menu('maintenance');
141
142?>
143        <div class="blockform">
144                <h2><span>Maintenance des Forums</span></h2>
145                <div class="box">
146                        <form method="get" action="admin_maintenance.php">
147                                <div class="inform">
148                                        <fieldset>
149                                                <legend>Reconstruction des index de recherches</legend>
150                                                <div class="infldset">
151                                                        <p>Si vous avez ajouté, modifié ou supprimé manuellement des messages dans la base de données ou si vous avez des problÚmes avec la  recherche vous devriez reconstruire les index de recherche (supprime les mots inutiles). Pour de meilleures performances, pendant la reconstruction des index, vous devriez mettre vos forums en mode maintenance. <strong>La reconstruction des index de recherches peut prendre beaucoup de temps et augmenter considérablement la charge serveur au cours du processus de reconstruction&#160;!</strong></p>
152                                                        <table class="aligntop" cellspacing="0">
153                                                                <tr>
154                                                                        <th scope="row">Discussions par cycle</th>
155                                                                        <td>
156                                                                                <input type="text" name="i_per_page" size="7" maxlength="7" value="100" tabindex="1" />
157                                                                                <span>Le nombre de discussions à traiter par cycle. Si vous saisissez 100, une centaine de discussions sera traitée et ensuite la page sera actualisée. Cela permet d'éviter que le script n'atteigne le temps limite d'exécution pendant le processus de recontruction.</span>
158                                                                        </td>
159                                                                </tr>
160                                                                <tr>
161                                                                        <th scope="row">ID de la discussion de départ</th>
162                                                                        <td>
163                                                                                <input type="text" name="i_start_at" size="7" maxlength="7" value="<?php echo (isset($first_id)) ? $first_id : 0 ?>" tabindex="2" />
164                                                                                <span>L'ID de discussion de laquelle vous souhaitez lancer la reconstruction. La valeur par défaut est le premier ID diponible dans la base de données. Normalement vous ne devriez pas avoir à changer ceci.</span>
165                                                                        </td>
166                                                                </tr>
167                                                                <tr>
168                                                                        <th scope="row">Vider index</th>
169                                                                        <td class="inputadmin">
170                                                                                <span><input type="checkbox" name="i_empty_index" value="1" tabindex="3" checked="checked" />&#160;&#160;Cochez cette option si vous souhaitez que les index de recherches soient vidés avant la reconstruction (voir ci-dessous).</span>
171                                                                        </td>
172                                                                </tr>
173                                                        </table>
174                                                        <p class="topspace">Lorsque le processus sera terminé vous serez redirigé sur cette page. Il est fortement recommandé que Javascript soit activé sur votre navigateur pour effectuer la reconstruction (pour une redirection automatique lorsqu'un cycle est achevé). Si vous êtes obligé d'abandonner le processus de reconstruction, notez l'ID du dernier sujet traité et saisissez cet ID+1 dans le champ "ID de la discussion de départ" quand/si vous reprennez le processus  ("Vider index" ne doit pas être coché).</p>
175                                                        <div class="fsetsubmit"><input type="submit" name="rebuild_index" value=" Reconstruire index " tabindex="4" /></div>
176                                                </div>
177                                        </fieldset>
178                                </div>
179                        </form>
180                </div>
181        </div>
182        <div class="clearer"></div>
183</div>
184<?php
185
186require PUN_ROOT.'footer.php';
Note: See TracBrowser for help on using the repository browser.