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

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

// Under certain circumstances it is possible that this file
// is included twice. (Bug #62660)
if (!class_exists('database_cleaner'))
{
    class 
database_cleaner
    
{
        
/**
        * @var Array An array that is used to link step numbers with the action. Used to call the correct methods
        */
        
var $step_to_action = array(
            
'introduction',
            
'tables',
            
'columns',
            
'config',
            
'extension_groups',
            
'extensions',
            
'permissions',
            
'groups',
            
'roles',
            
'role_data',
            
'modules',
            
'bots',
            
'report_reasons',
            
'final_step',
        );

        
/**
        * @var database_cleaner_data The database cleaner data object
        */
        
var $data = null;

        
/**
        * @var mixed Contains the views or controller object, depending on what is going on
        */
        
var $object = null;

        
/**
        * @var String phpBB version number
        */
        
var $phpbb_version = '';

        
/**
        * @var Integer The step that is being ran
        */
        
var $step = 0;

        
/**
        * Do we have a datafile for this version?
        */
        
function tool_active()
        {
            global 
$config;

            
// Correctly format the version number. Only RC releases are in uppercase
            
$this->phpbb_version = str_replace(array('.', '-', 'rc'), array('_', '_', 'RC'), strtolower(PHPBB_VERSION_NUMBER));

            
// Unstable versions can only be used when debugging
            
$matches = array();
            if (
preg_match('#^([0-9_]+)_(a|b|dev|RC([0-9]*))$#i', $this->phpbb_version, $matches))
            {
                if (!
defined('DEBUG'))
                {
                    return 
'UNSTABLE_DEBUG_ONLY';
                }
                else if (!empty(
$matches[1]))
                {
                    
// Get rid of any unstable identifiers
                    
$this->phpbb_version = $matches[1];
                }
            }

            
// Data file exists?
            
if (file_exists(STK_ROOT_PATH . 'includes/database_cleaner/data/' . $this->phpbb_version . '.' . PHP_EXT) === false)
            {
                return 
'DATAFILE_NOT_FOUND';
            }

            return 
true;
        }

        
/**
        * Correctly setup the database cleaner
        */
        
function _setup()
        {
            global 
$db;

            
// Get the step.
            // If the step is outside the $this->step_to_action range set it to 0
            
$this->step = request_var('step', 0);
            if (
$this->step < 0 || $this->step > sizeof($this->step_to_action))
            {
                
$this->step = 0;
            }

            
// include the required file for this version
            
if (!function_exists('fetch_cleaner_data'))
            {
                include 
STK_ROOT_PATH . 'includes/database_cleaner/functions_database_cleaner.' . PHP_EXT;
            }

            if (!
class_exists('database_cleaner_data'))
            {
                include 
STK_ROOT_PATH . 'includes/database_cleaner/database_cleaner_data.' . PHP_EXT;
            }

            if (!
class_exists('phpbb_db_tools'))
            {
                include 
PHPBB_ROOT_PATH . 'includes/db/db_tools.' . PHP_EXT;
            }
            
$db_tools = new phpbb_db_tools($db);

            
// Load all data for this version
            
$this->data = new database_cleaner_data($db_tools);
            
fetch_cleaner_data($this->data, $this->phpbb_version);
        }

        
/**
        * Display the correct confirmation screen
        */
        
function display_options()
        {
            global 
$template, $user;

            
// Setup
            
$this->_setup();
            
$user->add_lang('acp/common');

            
// Setup $this->object
            
if (!class_exists('database_cleaner_views'))
            {
                include 
STK_ROOT_PATH . 'includes/database_cleaner/database_cleaner_views.' . PHP_EXT;
            }
            
$this->object = new database_cleaner_views($this);

            
// Call the correct view method
            
call_user_func(array($this->object, $this->step_to_action[$this->step]));

            
// Output the page
            
$this->object->display();
        }

        
/**
        * Perform the right actions
        * @param Array $error An array that will be filled with error messages that might occure
        * @return void
        */
        
function run_tool(&$error)
        {
            
// Setup
            
$this->_setup();

            
$selected = request_var('items', array('' => ''));

            if (
$this->step > 0 && !check_form_key('database_cleaner'))
            {
                
// Kick them if bad form key
                
$error[] = 'FORM_INVALID';
                return;
            }

            
// Setup $this->object
            
if (!class_exists('database_cleaner_controller'))
            {
                include 
STK_ROOT_PATH . 'includes/database_cleaner/database_cleaner_controller.' . PHP_EXT;
            }
            
$this->object = new database_cleaner_controller($this);

            
// Call the correct method
            
$error = call_user_func(array($this->object, $this->step_to_action[$this->step]), $error, $selected);

            
// Error?
            
if (!empty($error))
            {
                return;
            }

            
// Confirm boxes
            
$did_run = true;
            if (!isset(
$_POST['yes']))
            {
                
$did_run = false;
            }

            
// Redirect to the next step
            
redirect(append_sid(STK_INDEX, array('c' => 'support', 't' => 'database_cleaner', 'step' => $this->step + 1, 'did_run' => $did_run)));
        }
    }
}
Онлайн: 3
Реклама