Вход Регистрация
Файл: 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(falsefalse);
        }
        else
        {
            
$redirect $this->getDynamicRedirect(false);
        }

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

        
$output $this->getHelper('CacheRebuild')->rebuildCache(
            
$input$redirectXenForo_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(truenull$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($accessTokennull$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();
    }
}
Онлайн: 0
Реклама