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

class XenForo_ControllerAdmin_Tools extends XenForo_ControllerAdmin_Abstract
{
    public function 
actionIndex()
    {
        
$visitor = XenForo_Visitor::getInstance();

        
$viewParams = array(
            
'canManageCron' => $visitor->hasAdminPermission('cron'),
            
'canImport' => $visitor->hasAdminPermission('import'),
            
'canCaptcha' => $visitor->hasAdminPermission('option'),
            
'canViewLogs' => $visitor->hasAdminPermission('viewLogs'),
            
'canRebuildCache' => $visitor->hasAdminPermission('rebuildCache'),
        );

        return 
$this->responseView('XenForo_ViewAdmin_Tools_Splash', 'tools_splash', $viewParams);
    }

    public function 
actionRebuild()
    {
        
$this->assertAdminPermission('rebuildCache');

        
/* @var $searchModel XenForo_Model_Search */
        
$searchModel = XenForo_Model::create('XenForo_Model_Search');

        
$searchContentTypeOptions = array();
        foreach (
$searchModel->getSearchDataHandlers() AS $contentType => $handler)
        {
            
$searchContentTypeOptions[$contentType] = $handler->getSearchContentTypePhrase();
        }

        
$viewParams = array(
            
'searchContentTypes' => $searchContentTypeOptions,
            
'success' => $this->_input->filterSingle('success', XenForo_Input::BOOLEAN)
        );
        
$containerParams = array(
            
'hasManualDeferred' => $this->getModelFromCache('XenForo_Model_Deferred')->countRunnableDeferreds(true)
        );

        return 
$this->responseView('XenForo_ViewAdmin_Tools_Rebuild', 'tools_rebuild', $viewParams, $containerParams);
    }

    
/**
     * General purpose cache rebuilder system.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionCacheRebuild()
    {
        
$input = $this->_input->filter(array(
            
'caches' => XenForo_Input::JSON_ARRAY,
            
'position' => XenForo_Input::UINT,

            
'cache' => XenForo_Input::STRING,
            
'options' => XenForo_Input::ARRAY_SIMPLE,

            
'process' => XenForo_Input::UINT
        
));

        if (
$input['cache'])
        {
            
$input['caches'][] = array($input['cache'], $input['options']);
        }

        
$doRebuild = ($this->_request->isPost() && $input['process']);

        if (
$doRebuild)
        {
            
$redirect = $this->getDynamicRedirect(false, false);
        }
        else
        {
            
$redirect = $this->getDynamicRedirect(false);
        }

        
$caches = $input['caches'];
        
$position = $input['position'];

        
$output = $this->getHelper('CacheRebuild')->rebuildCache(
            
$input, $redirect, XenForo_Link::buildAdminLink('tools/cache-rebuild'), $doRebuild
        
);

        if (
$output instanceof XenForo_ControllerResponse_Abstract)
        {
            return 
$output;
        }
        else
        {
            
$viewParams = $output;

            
$containerParams = array(
                
'containerTemplate' => 'PAGE_CONTAINER_SIMPLE'
            
);

            return 
$this->responseView('XenForo_ViewAdmin_Tools_CacheRebuild', 'tools_cache_rebuild', $viewParams, $containerParams);
        }
    }

    public function 
actionTriggerDeferred()
    {
        
$this->_assertPostOnly();
        
$this->assertAdminPermission('rebuildCache');

        
$input = $this->_input->filter(array(
            
'cache' => XenForo_Input::STRING,
            
'options' => XenForo_Input::ARRAY_SIMPLE,
        ));

        if (
$input['cache'])
        {
            
$obj = XenForo_Deferred_Abstract::create($input['cache']);
            if (
$obj && $obj->canTriggerManually())
            {
                switch (
get_class($obj))
                {
                    case 
'XenForo_Deferred_Atomic':
                    case 
'XenForo_Deferred_ThreadAction':
                    case 
'XenForo_Deferred_ThreadDelete':
                    case 
'XenForo_Deferred_UserAction':
                    case 
'XenForo_Deferred_UserGroupDelete':
                    case 
'XenForo_Deferred_UserRevertMessageEdit':
                        break;

                    default:
                        
XenForo_Application::defer($input['cache'], $input['options'], 'Rebuild' . $input['cache'], true);
                }
            }
        }

        
$this->_request->setParam('redirect',
            
XenForo_Link::buildAdminLink('tools/rebuild', false, array('success' => 1))
        );

        return 
$this->responseReroute(__CLASS__, 'runDeferred');
    }

    public function 
actionRunDeferred()
    {
        
$redirect = $this->getDynamicRedirectIfNot(XenForo_Link::buildAdminLink('tools/run-deferred'));

        
$input = $this->_input->filter(array(
            
'execute' => XenForo_Input::UINT,
        ));

        
/* @var $deferModel XenForo_Model_Deferred */
        
$deferModel = $this->getModelFromCache('XenForo_Model_Deferred');
        
$status = '';
        
$canCancel = false;

        if (
XenForo_Helper_Cookie::getCookie('cancel_defer'))
        {
            
$deferModel->cancelFirstRunnableDeferred();
            
XenForo_Helper_Cookie::deleteCookie('cancel_defer');
        }

        if (
$input['execute'] && $this->_request->isPost())
        {
            
$continued = $deferModel->run(true, null, $status, $canCancel);
            if (!
$continued)
            {
                return 
$this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
            }
        }

        
$viewParams = array(
            
'status' => $status,
            
'canCancel' => $canCancel,
            
'redirect' => $redirect
        
);

        
$containerParams = array(
            
'containerTemplate' => 'PAGE_CONTAINER_SIMPLE',
            
'allowManualDeferredRun' => false
        
);

        return 
$this->responseView('XenForo_ViewAdmin_Tools_RunDeferred', 'tools_run_deferred', $viewParams, $containerParams);
    }

    public function 
actionCleanUpPermissions()
    {
        
$this->_assertPostOnly();
        
$this->assertAdminPermission('rebuildCache');

        
/** @var $permissionModel XenForo_Model_Permission */
        
$permissionModel = $this->getModelFromCache('XenForo_Model_Permission');

        
$permissionModel->deleteUnusedPermissionCombinations();

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink('tools/rebuild', false, array('success' => 1))
        );
    }

    public function 
actionTestFacebook()
    {
        if (!
XenForo_Application::get('options')->facebookAppId)
        {
            
$group = $this->getModelFromCache('XenForo_Model_Option')->getOptionGroupById('facebook');
            
$url = XenForo_Link::buildAdminLink('options/list', $group);
            return 
$this->responseError(new XenForo_Phrase('to_test_facebook_integration_must_enter_application_info', array('url' => $url)));
        }

        
$fbRedirectUri = XenForo_Link::buildAdminLink('canonical:tools/test-facebook', false, array('x' => '?/&=', 'y' => 2));

        if (
$this->_input->filterSingle('test', XenForo_Input::UINT))
        {
            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL,
                
XenForo_Helper_Facebook::getFacebookRequestUrl($fbRedirectUri)
            );
        }

        
$info = false;
        
$userToken = false;

        
$code = $this->_input->filterSingle('code', XenForo_Input::STRING);
        if (
$code)
        {
            
$token = XenForo_Helper_Facebook::getAccessTokenFromCode($code, $fbRedirectUri);
            
$fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($token, 'access_token');
            if (
$fbError)
            {
                return 
$this->responseError($fbError);
            }

            
$userToken = $token['access_token'];

            
$info = XenForo_Helper_Facebook::getUserInfo($userToken);
            
$fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($info, 'id');
            if (
$fbError)
            {
                return 
$this->responseError($fbError);
            }
        }

        
$viewParams = array(
            
'fbInfo' => $info,
            
'userToken' => $userToken
        
);

        return 
$this->responseView('XenForo_ViewAdmin_Tools_TestFacebook', 'tools_test_facebook', $viewParams);
    }

    public function 
actionTestTwitter()
    {
        
$oauth = XenForo_Helper_Twitter::getOauthConsumer(
            
XenForo_Link::buildAdminLink('canonical:tools/test-twitter')
        );

        if (!
$oauth)
        {
            
$group = $this->getModelFromCache('XenForo_Model_Option')->getOptionGroupById('twitter');
            
$url = XenForo_Link::buildAdminLink('options/list', $group);
            return 
$this->responseError(new XenForo_Phrase('to_test_twitter_integration_must_enter_application_info', array('url' => $url)));
        }

        
$session = XenForo_Application::getSession();

        if (
$this->_input->filterSingle('test', XenForo_Input::UINT))
        {
            try
            {
                
$requestToken = $oauth->getRequestToken();
            }
            catch (
Exception $e)
            {
                return 
$this->responseError(
                    new 
XenForo_Phrase('twitter_returned_following_error_x', array('error' => $e->getMessage()))
                );
            }

            
$session->set('twitterRequestToken', serialize($requestToken));

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL,
                
$oauth->getRedirectUrl()
            );
        }

        if (
$this->_input->filterSingle('denied', XenForo_Input::STRING))
        {
            return 
$this->responseError(
                new 
XenForo_Phrase('twitter_returned_following_error_x', array('error' => 'denied'))
            );
        }

        
$info = false;

        
$twitterInput = $this->_input->filter(array(
            
'oauth_token' => XenForo_Input::STRING,
            
'oauth_verifier' => XenForo_Input::STRING
        
));
        if (
$twitterInput['oauth_token'])
        {
            
$requestToken = @unserialize($session->get('twitterRequestToken'));
            if (!
$requestToken)
            {
                return 
$this->responseError(
                    new 
XenForo_Phrase('twitter_returned_following_error_x', array('error' => 'no_request_token'))
                );
            }

            try
            {
                
$accessToken = $oauth->getAccessToken($twitterInput, $requestToken);
            }
            catch (
Exception $e)
            {
                return 
$this->responseError(
                    new 
XenForo_Phrase('twitter_returned_following_error_x', array('error' => $e->getMessage()))
                );
            }

            
$session->remove('twitterRequestToken');

            
$info = XenForo_Helper_Twitter::getUserFromToken($accessToken, null, $e);
            if (!
$info)
            {
                return 
$this->responseError(
                    new 
XenForo_Phrase('twitter_returned_following_error_x', array(
                        
'error' => $e ? $e->getMessage() : 'unknown'
                    
))
                );
            }
        }

        
$viewParams = array(
            
'twitterInfo' => $info
        
);

        return 
$this->responseView('XenForo_ViewAdmin_Tools_TestTwitter', 'tools_test_twitter', $viewParams);
    }

    public function 
actionTestImageProxy()
    {
        
$url = $this->_input->filterSingle('url', XenForo_Input::STRING);
        if (
$this->isConfirmedPost() && $url && preg_match('#^https?://#i', $url))
        {
            
/** @var XenForo_Model_ImageProxy $proxyModel */
            
$proxyModel = $this->getModelFromCache('XenForo_Model_ImageProxy');
            
$results = $proxyModel->testImageProxyFetch($url);
        }
        else
        {
            
$results = false;
        }

        
$viewParams = array(
            
'url' => $url,
            
'results' => $results
        
);

        return 
$this->responseView('XenForo_ViewAdmin_Tools_TestImageProxy', 'tools_test_image_proxy', $viewParams);
    }

    public function 
actionFileCheck()
    {
        if (
$this->_request->isPost())
        {
            
$hashes = XenForo_Install_Data_FileSums::getHashes();

            
XenForo_CodeEvent::fire('file_health_check', array($this, &$hashes));

            
$errors = XenForo_Helper_Hash::compareHashes($hashes);

            
$viewParams = array(
                
'errors' => $errors,
                
'hashes' => $hashes,
            );
        }
        else
        {
            
$viewParams = array('form' => true);
        }

        return 
$this->responseView('XenForo_ViewAdmin_Tools_FileCheck', 'tools_file_check', $viewParams);
    }

    public function 
actionTransmogrifier()
    {
        return 
$this->responseView(
            
'XenForo_ViewAdmin_Tools_Transmogrifier',
            
'emergency'
        
);
    }

    
/**
     * Resets the transmogrifier - caution!
     */
    
public function actionTransmogrifierReset()
    {
        
$this->_assertPostOnly();

        if (!
$this->_input->filterSingle('transmogrification_confirmation', XenForo_Input::UINT))
        {
            return 
$this->responseError('It is not possible to reset the transmogrifier at this time.');
        }

        
$transmogrificationModel = $this->getModelFromCache('XenForo_Model_Transmogrifier');

        
$viewParams = $transmogrificationModel->resetTransmogrifier();

        return 
$this->responseView(
            
'XenForo_ViewAdmin_Tools_TransmogrifierReset',
            
'emergency_reset',
            
$viewParams
        
);
    }

    public function 
actionPhpinfo()
    {
        
phpinfo();
        die();
    }
}
Онлайн: 2
Реклама