Clicky

Naviguer / Recherche

Réorganiser mon forum phpBB3

Que faire lorsque tous mes forums sont mélangés ?

J‘ai voulu modifier quelques forums, les déplacer, changer les permissions, et mon forum s’affiche étrangement, avec des catégories vides, des forums sans message, ou des messages sans forum. Bref, tout est mélangé, et j’ai l’impression que ma base de données est totalement corrompue.

ordinateur

Il n’y a rien de dramatique. En fait votre forum phpBB3 s’est un peu mélangé les pinceaux avec vos titres de forums et de catégories. Heureusement il n’est pas nécessaire d’intervenir manuellement dans la base de données, sans quoi vous y perdriez votre php latin. Il existe pour cela un script qui va régler pour vous ce problème.

• Mise en place du script de ré-arrangement

Copier et coller le code suivant dans un fichier que vous nommerez par exemple fixtree.php

<?php
 /**
 *
 * @package phpBB3
 * @version $Id: index.php,v 1.176 2007/10/05 14:30:06 acydburn Exp $
 * @copyright (c) 2005 phpBB Group
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 */
/**
 */
/**
 * @ignore
 */
 define('IN_PHPBB', true);
 $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
 $phpEx = substr(strrchr(__FILE__, '.'), 1);
 include($phpbb_root_path . 'common.' . $phpEx);
 include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
// Start session management
 $user->session_begin();
 $auth->acl($user->data);
 $user->setup('viewforum');
recalc_btree('forum_id' , FORUMS_TABLE);
 echo "Done";
function recalc_btree($sql_id, $sql_table, $module_class = '')
 {
 global $db;
if (!$sql_id || !$sql_table)
 {
 return;
 }
$sql_where = ($module_class) ? " WHERE module_class = '" . $db->sql_escape($module_class) . "'" : '';
// Reset to minimum possible left and right id
 $sql = "SELECT MIN(left_id) as min_left_id, MIN(right_id) as min_right_id
 FROM $sql_table
 $sql_where";
 $result = $db->sql_query($sql);
 $row = $db->sql_fetchrow($result);
 $db->sql_freeresult($result);
$substract = (int) (min($row['min_left_id'], $row['min_right_id']) - 1);
if ($substract > 0)
 {
 $sql = "UPDATE $sql_table
 SET left_id = left_id - $substract, right_id = right_id - $substract
 $sql_where";
 $db->sql_query($sql);
 }
$sql = "SELECT $sql_id, parent_id, left_id, right_id
 FROM $sql_table
 $sql_where
 ORDER BY left_id ASC, parent_id ASC, $sql_id ASC";
 $f_result = $db->sql_query($sql);
while ($item_data = $db->sql_fetchrow($f_result))
 {
 if ($item_data['parent_id'])
 {
 $sql = "SELECT left_id, right_id
 FROM $sql_table
 $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
 $sql_id = {$item_data['parent_id']}";
 $result = $db->sql_query($sql);
if (!$row = $db->sql_fetchrow($result))
 {
 $sql = "UPDATE $sql_table SET parent_id = 0 WHERE $sql_id = " . $item_data[$sql_id];
 $db->sql_query($sql);
continue;&nbsp; &nbsp;
 }
 $db->sql_freeresult($result);
$sql = "UPDATE $sql_table
 SET left_id = left_id + 2, right_id = right_id + 2
 $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
 left_id > {$row['right_id']}";
 $db->sql_query($sql);
$sql = "UPDATE $sql_table
 SET right_id = right_id + 2
 $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
 {$row['left_id']} BETWEEN left_id AND right_id";
 $db->sql_query($sql);
$item_data['left_id'] = $row['right_id'];
 $item_data['right_id'] = $row['right_id'] + 1;
 }
 else
 {
 $sql = "SELECT MAX(right_id) AS right_id
 FROM $sql_table
 $sql_where";
 $result = $db->sql_query($sql);
 $row = $db->sql_fetchrow($result);
 $db->sql_freeresult($result);
$item_data['left_id'] = $row['right_id'] + 1;
 $item_data['right_id'] = $row['right_id'] + 2;
 }
$sql = "UPDATE $sql_table
 SET left_id = {$item_data['left_id']}, right_id = {$item_data['right_id']}
 WHERE $sql_id = " . $item_data[$sql_id];
 $db->sql_query($sql);
 }
 $db->sql_freeresult($f_result);
 }
?>

 

Puis dans un second temps, uploader ce fichier sur votre ftp, à la racine de votre forum.

• Action !

Appelez depuis votre navigateur habituel votre fichier ainsi créé, par exemple http://votreadresseduforum/fixtree.php
Vous aurez ensuite une nouvelle fenêtre blanche, avec simplement marqué done.
Effacez ensuite le fichier fixtree.php que vous avez placé sur votre serveur.

Vérifiez que votre forum est à nouveau tout bien organisé. Le tour est joué !
Pensez néanmoins à toujours créer une sauvegarde d’une part de vos fichiers placés sur le ftp, mais surtout de votre base de données !

Laissez un commentaire

nom*

Adresse mail* (non publiée)

Site Web

Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.