Seditio Source
Root |
./othercms/b2evolution_7.2.3/inc/tools/phpbbimport.ctrl.php
<?php
/**
 * This file implements the UI controller for phpBB importer.
 *
 * b2evolution - {@link http://b2evolution.net/}
 * Released under GNU GPL License - {@link http://b2evolution.net/about/gnu-gpl-license}
 * @copyright (c)2003-2020 by Francois Planque - {@link http://fplanque.com/}
 *
 * @package admin
 * @author fplanque: Francois PLANQUE.
 */
if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );


// Check permission:
check_user_perm( 'admin', 'normal', true );
check_user_perm( 'options', 'edit', true );

load_funcs( 'tools/model/_phpbb.funcs.php' );

param( 'action', 'string' );
$phpbb_version = param( 'ver', 'integer', 2 );
$phpbb_tool_title = ( $phpbb_version == 3 ? 'phpBB 3 Importer' : 'phpBB Importer' );

if( !empty(
$action ) )
{    
// Try to obtain some serious time to do some serious processing (15 minutes)
   
set_max_execution_time( 900 );
   
// Turn off the output buffering to do the correct work of the function flush()
   
@ini_set( 'output_buffering', 'off' );
}

if(
param( 'forum_blog_ID', 'integer', 0 ) > 0 )
{    
// Save last import collection in Session:
   
$Session->set( 'last_import_coll_ID', get_param( 'forum_blog_ID' ) );

   
// Save last used import controller in Session:
   
$Session->set( 'last_import_controller_'.get_param( 'forum_blog_ID' ), ( $phpbb_version == 3 ? 'phpbb3' : 'phpbb' ) );
}

/**
 * @var step
 *
 * values:
 * 1) 'config'
 * 2) 'groups'
 * 3) 'users'
 * 4) 'forums' -> categories
 * 5) 'topics' -> posts
 * 6) 'replies' -> comments
 * 7) 'messages'
 */
$step = param( 'step', 'string', 'config' );


// Initialize the config variables for phpBB
phpbb_init_config();

switch(
$action )
{
    case
'database':    // Action for Step 1
        // Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'phpbb' );

       
$phpbb_db_host = param( 'db_host', 'string', true );
       
$phpbb_db_name = param( 'db_name', 'string', true );
       
$phpbb_db_user = param( 'db_user', 'string', true );
       
$phpbb_db_pass = param( 'db_pass', 'string', true );
       
$phpbb_db_prefix = param( 'db_prefix', 'string', '' );
       
$phpbb_path_avatars = param( 'path_avatars', 'string', '' );
       
$phpbb_path_attachments = param( 'path_attachments', 'string', '' );

       
param_check_not_empty( 'db_host', 'Please enter a database host!' );
       
param_check_not_empty( 'db_name', 'Please enter a database name!' );
       
param_check_not_empty( 'db_user', 'Please enter a username!' );
       
param_check_not_empty( 'db_pass', 'Please enter a password!' );
       
param_check_not_empty( 'forum_blog_ID', 'Please select a collection!' );

        if(
param_errors_detected() )
        {
            break;
        }

       
$phpbb_db_config = array(
               
'user'     => $phpbb_db_user,
               
'password' => $phpbb_db_pass,
               
'name'     => $phpbb_db_name,
               
'host'     => $phpbb_db_host,
               
'prefix'   => $phpbb_db_prefix,
               
'aliases'  => phpbb_tables_aliases( $phpbb_db_prefix ),
               
'use_transactions'   => $db_config['use_transactions'],
               
'table_options'      => $db_config['table_options'],
               
'connection_charset' => $DB->get_connection_charset(),        // Use same charset as main DB connection so that charsets match!
               
'halt_on_error' => false,
               
'show_errors'   => false,
               
'new_link'      => true,

               
'log_queries' => true,
               
'debug_dump_rows' => 20,
            );

       
// Test connect to DB:
       
$phpbb_DB = new DB( $phpbb_db_config );
        unset(
$phpbb_db_config['aliases'] );

        if(
$phpbb_DB->error )
        {
           
$Messages->add( $phpbb_DB->last_error, 'error' );
            break;
        }

       
// Save DB config of phpBB in the session
       
phpbb_set_var( 'db_config', $phpbb_db_config );
       
phpbb_set_var( 'blog_ID', $forum_blog_ID );
       
phpbb_set_var( 'path_avatars', $phpbb_path_avatars );
       
phpbb_set_var( 'path_attachments', $phpbb_path_attachments );

       
$step = 'groups';
        break;

    case
"users":    // Action for Step 2
        // Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'phpbb' );

       
$phpbb_ranks = param( 'phpbb_ranks', 'array:integer', array() );
       
$phpbb_group_default = param( 'phpbb_group_default', 'integer' );
       
$phpbb_group_invalid = param( 'phpbb_group_invalid', 'integer' );

       
param_check_not_empty( 'phpbb_group_default', 'Please select a default group!' );

       
phpbb_set_var( 'ranks', $phpbb_ranks );
       
phpbb_set_var( 'group_default', $phpbb_group_default );
       
phpbb_set_var( 'group_invalid', $phpbb_group_invalid );

       
$phpbb_categories = param( 'phpbb_categories', 'array:integer', array() );
       
$phpbb_forums = param( 'phpbb_forums', 'array:integer', array() );
       
phpbb_set_var( 'import_categories', $phpbb_categories );
       
phpbb_set_var( 'import_forums', $phpbb_forums );

        if( empty(
$phpbb_categories ) && empty( $phpbb_forums ) )
        {
           
$Messages->add( 'Please select at least one forum to import!' );
        }

        if(
param_errors_detected() )
        {
           
$step = 'groups';
            break;
        }

       
// Set this action to complete all processes in the form
       
$flush_action = 'users';

       
$step = 'users';
        break;

    case
'forums':    // Action for Step 3
   
case 'topics':    // Action for Step 4
   
case 'replies':    // Action for Step 5
   
case 'messages':    // Action for Step 6
        // Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'phpbb' );

       
// Set this action to complete all processes in the form
       
$flush_action = $action;

       
$step = $action;
        break;

    case
'finish':    // Action for last step
        // Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'phpbb' );

       
$BlogCache = & get_BlogCache();
       
$Collection = $Blog = & $BlogCache->get_by_ID( phpbb_get_var( 'blog_ID' ) );

       
phpbb_clear_temporary_data();

       
// Redirect to Blog
       
header_redirect( $Blog->get( 'url' ) );
        break;
}


// Highlight the requested tab (if valid):
$AdminUI->set_path( 'options', 'misc', 'import' );

$AdminUI->breadcrumbpath_init( false );
$AdminUI->breadcrumbpath_add( 'System', $admin_url.'?ctrl=system' );
$AdminUI->breadcrumbpath_add( 'Maintenance', $admin_url.'?ctrl=tools' );
$AdminUI->breadcrumbpath_add( 'Import', $admin_url.'?ctrl=tools&amp;tab3=import' );
$AdminUI->breadcrumbpath_add( 'phpBB Importer', $admin_url.'?ctrl=phpbbimport' );

// Set an url for manual page:
$AdminUI->set_page_manual_link( 'phpbb-import' );


// Display <html><head>...</head> section! (Note: should be done early if actions do not redirect)
$AdminUI->disp_html_head();

// Display title, menu, messages, etc. (Note: messages MUST be displayed AFTER the actions)
$AdminUI->disp_body_top();

// Begin payload block:
$AdminUI->disp_payload_begin();

switch(
$step )
{
    case
'groups':    // Step 2
       
phpbb_unset_var( 'current_step' );
       
$AdminUI->disp_view( 'tools/views/_phpbb_groups.form.php' );
       
// $phpbb_DB->dump_queries();
       
break;

    case
'users':    // Step 3
       
$AdminUI->disp_view( 'tools/views/_phpbb_users.form.php' );
        break;

    case
'forums':    // Step 4
       
$AdminUI->disp_view( 'tools/views/_phpbb_forums.form.php' );
        break;

    case
'topics':    // Step 5
       
$AdminUI->disp_view( 'tools/views/_phpbb_topics.form.php' );
        break;

    case
'replies':    // Step 6
       
$AdminUI->disp_view( 'tools/views/_phpbb_replies.form.php' );
        break;

    case
'messages':    // Step 7
       
$AdminUI->disp_view( 'tools/views/_phpbb_messages.form.php' );
        break;

    case
'config':    // Step 1
   
default:
       
phpbb_unset_var( 'current_step' );
       
$AdminUI->disp_view( 'tools/views/_phpbb_config.form.php' );
        break;
}


// End payload block:
$AdminUI->disp_payload_end();

// Display body bottom, debug info and close </html>:
$AdminUI->disp_global_footer();

?>