Вход Регистрация
Файл: library/XenForo/ControllerAdmin/Import.php
Строк: 358
<?php

class XenForo_ControllerAdmin_Import extends XenForo_ControllerAdmin_Abstract
{
    protected function 
_preDispatch($action)
    {
        
$this->assertAdminPermission('import');
    }

    public function 
actionIndex()
    {
        
$importModel $this->_getImportModel();
        
$session = new XenForo_ImportSession();

        if (
$this->_request->isPost() && $this->_input->filterSingle('reset'XenForo_Input::UINT))
        {
            
$session->delete();
        }

        if (
$session->isRunning())
        {
            
$viewParams = array(
                
'name' => $importModel->getImporterName($session->getImporterKey())
            );
            return 
$this->responseView('XenForo_ViewAdmin_Import_Restart''import_restart'$viewParams);
        }
        else
        {
            
$viewParams = array(
                
'importers' => $importModel->getImporterList(),
                
'hasImportedData' => $importModel->hasImportedData()
            );
            return 
$this->responseView('XenForo_ViewAdmin_Import_Choose''import_choose'$viewParams);
        }
    }

    public function 
actionConfig()
    {
        
$importerKey $this->_input->filterSingle('importer'XenForo_Input::STRING);
        if (!
$importerKey)
        {
            return 
$this->responseReroute(__CLASS__'index');
        }

        
$importer $this->_getImportModel()->getImporter($importerKey);
        if (!
$importer)
        {
            return 
$this->responseError(new XenForo_Phrase('importer_not_found_cannot_continue'));
        }

        if (
$this->_request->isPost())
        {
            
$config $this->_input->filterSingle('config'XenForo_Input::ARRAY_SIMPLE);
        }
        else
        {
            
$config = array();
        }

        if (!
$config)
        {
            
$input $this->_input->filter(array(
                
'archive' => XenForo_Input::UINT,
                
'table' => XenForo_Input::STRING
            
));

            if (
$input['archive'] && $input['table'])
            {
                if (!
$this->_getImportModel()->archiveImportLog($input['table'], $error))
                {
                    return 
$this->responseError($error);
                }
            }
        }

        
$response $importer->configure($this$config);
        if (
$response === true)
        {
            
$session = new XenForo_ImportSession(true);
            
$session->start($importerKey$config);
            
$session->save();

            if (!empty(
$config['retain_keys']))
            {
                
$importer->retainKeysReset();
            }

            
$this->_getImportModel()->resetImportLog();

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
XenForo_Link::buildAdminLink('import/import')
            );
        }
        else
        {
            
$response->params['retainKeys'] = $this->_input->filterSingle('retain_keys'XenForo_Input::UINT);
            
$response->params['name'] = $importer->getName();
            
$response->params['importer'] = $importerKey;

            return 
$response;
        }
    }

    public function 
actionImport()
    {
        
$importModel $this->_getImportModel();

        
$session = new XenForo_ImportSession();
        if (!
$session->getImporterKey())
        {
            return 
$this->responseReroute(__CLASS__'index');
        }

        
$stepInfo $session->getStepInfo();

        
$importer $importModel->getImporter($session->getImporterKey());
        if (!
$importer)
        {
            return 
$this->responseError(new XenForo_Phrase('importer_not_found_cannot_continue'));
        }

        
$showList $this->_input->filterSingle('list'XenForo_Input::UINT);
        if (!
$stepInfo['step'] || $showList)
        {
            
$runStep false;
        }
        else
        {
            
$runStep = ($stepInfo['stepStart'] || $this->_request->isPost());
        }

        if (
$runStep)
        {
            
$response $this->_runStep($importer$session$stepInfo['step'], $stepInfo['stepStart'], $stepInfo['stepOptions']);
            return 
$response;
        }
        else
        {
            
$steps $importModel->addImportStateToSteps($importer->getSteps(), $session->getRunSteps());
            
$viewParams = array(
                
'steps' => $steps,
                
'importerName' => $importer->getName()
            );

            return 
$this->responseView('XenForo_ViewAdmin_Import_Steps''import_steps'$viewParams);
        }
    }

    public function 
actionStartStep()
    {
        
$this->_assertPostOnly();

        
$input $this->_input->filter(array(
            
'step' => XenForo_Input::STRING,
            
'options' => XenForo_Input::ARRAY_SIMPLE
        
));
        if (!
$input['step'])
        {
            foreach (
$_POST AS $key => $value)
            {
                if (
strpos($key'step_') === 0)
                {
                    
$input['step'] = substr($key5);
                    break;
                }
            }
        }

        
$session = new XenForo_ImportSession();
        if (!
$session->getImporterKey())
        {
            return 
$this->responseReroute(__CLASS__'index');
        }

        
$importer $this->_getImportModel()->getImporter($session->getImporterKey());
        if (!
$importer)
        {
            return 
$this->responseError(new XenForo_Phrase('importer_not_found_cannot_continue'));
        }

        return 
$this->_startStep($importer$session$input['step'], $input['options']);
    }

    protected function 
_runStep(XenForo_Importer_Abstract $importerXenForo_ImportSession $session$step$start, array $options = array())
    {
        
$response $importer->runStep($this$session$step$start$options);
        if (
$response === true)
        {
            
$session->completeStep();
            
$session->save();

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
XenForo_Link::buildAdminLink('import/import')
            );
        }
        else if (
is_string($response) && $response !== '')
        {
            
$session->completeStep();
            return 
$this->_startStep($importer$session$response);
        }
        else if (
is_array($response))
        {
            list(
$start$options$message) = $response;
            
$session->setStepInfo($start$options);
            
$session->save();

            
$viewParams = array(
                
'message' => $message,
                
'importerName' => $this->_getImportModel()->getImporterName($session->getImporterKey()),
                
'stepInfo' => $importer->getStep($step)
            );
            return 
$this->responseView('XenForo_ViewAdmin_Import_StepRun''import_step_run'$viewParams);
        }
        else if (
$response instanceof XenForo_ControllerResponse_Abstract)
        {
            
$session->save();
            return 
$response;
        }
        else
        {
            throw new 
XenForo_Exception('Invalid importer step response: ' print_r($responsetrue));
        }
    }

    protected function 
_startStep(XenForo_Importer_Abstract $importerXenForo_ImportSession $session$step, array $options = array())
    {
        
$configResponse $importer->configStep($this$session$step$options);
        if (
$configResponse)
        {
            
$configResponse->params['step'] = $step;
            
$configResponse->params['importerName'] = $importer->getName();
            return 
$configResponse;
        }

        
$session->startStep($step$options);

        return 
$this->_runStep($importer$session$step0$options);
    }

    public function 
actionComplete()
    {
        if (
$this->_request->isPost())
        {
            
$input $this->_input->filter(array(
                
'archive' => XenForo_Input::UINT,
                
'table' => XenForo_Input::STRING
            
));

            if (
$input['archive'] && $input['table'])
            {
                if (!
$this->_getImportModel()->archiveImportLog($input['table'], $error))
                {
                    return 
$this->responseError($error);
                }
            }

            
$session = new XenForo_ImportSession();
            
$importerKey $session->getImporterKey();
            
$session->delete();

            
XenForo_Application::defer('Atomic',
                array(
'simple' => array('User''Thread''Poll''Forum')),
                
'importRebuild'true
            
);

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
XenForo_Link::buildAdminLink('import/complete'false, array('confirm' => $importerKey))
            );
        }
        else if (
$importerKey $this->_input->filterSingle('confirm'XenForo_Input::STRING))
        {
            
$importer $this->_getImportModel()->getImporter($importerKey);

            
$messages $importer $importer->getImportCompleteMessages() : array();

            return 
$this->responseView('XenForo_ViewAdmin_Import_Complete''import_complete', array('messages' => $messages));
        }
        else
        {
            
$session = new XenForo_ImportSession();
            
$config $session->getConfig();

            if (!
$session->getImporterKey())
            {
                return 
$this->responseView('XenForo_ViewAdmin_Import_Complete''import_complete', array(
                    
'messages' => array()
                ));
            }

            
$viewParams = array(
                
'importerName' => $this->_getImportModel()->getImporterName($session->getImporterKey()),
                
'logSuffix' => $config['db']['dbname']
            );

            return 
$this->responseView('XenForo_ViewAdmin_Import_CompleteConfirm''import_complete_confirm'$viewParams);
        }
    }

    
/**
     * @return XenForo_Model_Import
     */
    
protected function _getImportModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Import');
    }
}
Онлайн: 0
Реклама