Вход Регистрация
Файл: apwa/stk/tools/support/fix_left_right_ids.php
Строк: 55
<?php
/**
*
* @package Support Toolkit - Fix Left/Right ID's
* @version $Id$
* @copyright (c) 2009 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
 * @ignore
 */
if (!defined('IN_PHPBB'))
{
    exit;
}

class 
fix_left_right_ids
{
    
/**
    * Display Options
    *
    * Output the options available
    */
    
function display_options()
    {
        return 
'FIX_LEFT_RIGHT_IDS';
    }

    
/**
    * Run Tool
    *
    * Does the actual stuff we want the tool to do after submission
    */
    
function run_tool()
    {
        global 
$cache$db;

        
$changes_made false;

        
/**
        * Fix Left/Right ID's for the modules table
        */
        // We need to do each module class separately, so we need to get a list of each class available.
        
$result $db->sql_query('SELECT DISTINCT(module_class) FROM ' MODULES_TABLE);
        while (
$row $db->sql_fetchrow($result))
        {
            
// Now start fixing the modules for this class
            
$i 1;
            
$where = array('module_class = '' . $row['module_class'] .''');
            
$changes_made = (($this->fixem($i'module_id'MODULES_TABLE0$where)) || $changes_made) ? true false;
        }
        
$db->sql_freeresult($result);

        
/**
        * Fix the Left/Right ID's for the forums table
        */
        
$i 1;
        
$changes_made = (($this->fixem($i'forum_id'FORUMS_TABLE)) || $changes_made) ? true false;

        
// Purge the cache so the next time a page with modules is viewed it is not getting an old version from the cache
        
$cache->purge();

        if (
$changes_made)
        {
            
trigger_error('LEFT_RIGHT_IDS_FIX_SUCCESS');
        }
        else
        {
            
trigger_error('LEFT_RIGHT_IDS_NO_CHANGE');
        }
    }

    
// I <3 recursion.
    
function fixem(&$i$pkey$table$parent_id 0$where = array())
    {
        global 
$db;

        
$changes_made false;

        
$sql 'SELECT * FROM ' $table '
            WHERE parent_id = ' 
. (int) $parent_id .
            ((!empty(
$where)) ? ' AND ' implode(' AND '$where) : '') . '
            ORDER BY left_id ASC'
;
        
$result $db->sql_query($sql);
        while (
$row $db->sql_fetchrow($result))
        {
            
// First we update the left_id for this module
            
if ($row['left_id'] != $i)
            {
                
$db->sql_query('UPDATE ' $table ' SET ' $db->sql_build_array('UPDATE', array('left_id' => $i)) . " WHERE $pkey = {$row[$pkey]}");
                
$changes_made true;
            }
            
$i++;

            
// Then we go through any children and update their left/right id's
            
$changes_made = (($this->fixem($i$pkey$table$row[$pkey], $where)) || $changes_made) ? true false;

            
// Then we come back and update the right_id for this module
            
if ($row['right_id'] != $i)
            {
                
$db->sql_query('UPDATE ' $table ' SET ' $db->sql_build_array('UPDATE', array('right_id' => $i)) . " WHERE $pkey = {$row[$pkey]}");
                
$changes_made true;
            }
            
$i++;
        }
        
$db->sql_freeresult($result);

        return 
$changes_made;
    }
}
Онлайн: 3
Реклама