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

class XenForo_ControllerPublic_Misc extends XenForo_ControllerPublic_Abstract
{
    
/**
     * Displays a form to change the visitor's style, or changes it if a style_id is present.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionStyle()
    {
        
$visitor XenForo_Visitor::getInstance();

        if (
$this->_input->inRequest('style_id')
            && 
$this->_checkCsrfFromToken($this->_input->filterSingle('_xfToken'XenForo_Input::STRING), false)
        )
        {
            
$styleId $this->_input->filterSingle('style_id'XenForo_Input::UINT);

            if (
$styleId)
            {
                
$styles = (XenForo_Application::isRegistered('styles')
                    ? 
XenForo_Application::get('styles')
                    : 
XenForo_Model::create('XenForo_Model_Style')->getAllStyles()
                );
                if (!isset(
$styles[$styleId])
                    || (!
$styles[$styleId]['user_selectable'] && !$visitor['is_admin'])
                )
                {
                    
$styleId 0;
                }
            }

            if (
$visitor['user_id'])
            {
                
$dw XenForo_DataWriter::create('XenForo_DataWriter_User');
                
$dw->setExistingData($visitor['user_id']);
                
$dw->set('style_id'$styleId);
                
$dw->save();

                
XenForo_Helper_Cookie::deleteCookie('style_id');
            }
            else
            {
                
XenForo_Helper_Cookie::setCookie('style_id'$styleId86400 365);
            }

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
$this->getDynamicRedirect(falsefalse)
            );
        }
        else
        {
            
$styles $this->getModelFromCache('XenForo_Model_Style')->getAllStylesAsFlattenedTree();

            
$styleId $this->_input->filterSingle('style_id'XenForo_Input::UINT);
            if (
$styleId && !empty($styles[$styleId]['user_selectable']))
            {
                
$style $styles[$styleId];
            }
            else
            {
                
$style false;
            }

            
$viewParams = array(
                
'styles' => $styles,
                
'targetStyle' => $style,
                
'redirect' => $this->_input->filterSingle('redirect'XenForo_Input::STRING)
            );
            return 
$this->responseView('XenForo_ViewPublic_Misc_Style''style_chooser'$viewParams);
        }
    }

    
/**
     * Displays a form to change the visitor's language, or changes it if a language_id is present.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionLanguage()
    {
        
$visitor XenForo_Visitor::getInstance();

        if (
$this->_input->inRequest('language_id'))
        {
            
$this->_checkCsrfFromToken($this->_input->filterSingle('_xfToken'XenForo_Input::STRING));

            
$languageId $this->_input->filterSingle('language_id'XenForo_Input::UINT);

            if (
$languageId)
            {
                
$languages = (XenForo_Application::isRegistered('languages')
                    ? 
XenForo_Application::get('languages')
                    : 
XenForo_Model::create('XenForo_Model_Language')->getAllLanguagesForCache()
                );
                if (!isset(
$languages[$languageId]))
                {
                    
$languageId 0;
                }
            }

            if (
$visitor['user_id'])
            {
                
$dw XenForo_DataWriter::create('XenForo_DataWriter_User');
                
$dw->setExistingData($visitor['user_id']);
                
$dw->set('language_id'$languageId);
                
$dw->save();

                
XenForo_Helper_Cookie::deleteCookie('language_id');
            }
            else
            {
                
XenForo_Helper_Cookie::setCookie('language_id'$languageId86400 365);
            }

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
$this->getDynamicRedirect(falsefalse)
            );
        }
        else
        {
            
$languages = (XenForo_Application::isRegistered('languages')
                ? 
XenForo_Application::get('languages')
                : 
XenForo_Model::create('XenForo_Model_Language')->getAllLanguagesForCache()
            );

            
$viewParams = array(
                
'languages' => $this->getModelFromCache('XenForo_Model_Language')->getAllLanguages(),
                
'redirect' => $this->_input->filterSingle('redirect'XenForo_Input::STRING)
            );
            return 
$this->responseView('XenForo_ViewPublic_Misc_Language''language_chooser'$viewParams);
        }
    }

    public function 
actionContact()
    {
        
$options XenForo_Application::get('options');

        if (
$options->contactUrl['type'] == 'custom')
        {
            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL,
                
$options->contactUrl['custom']
            );
        }
        else if (!
$options->contactUrl['type'])
        {
            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL,
                
XenForo_Link::buildPublicLink('index')
            );
        }

        if (
$this->_request->isPost())
        {
            if (!
XenForo_Captcha_Abstract::validateDefault($this->_input))
            {
                return 
$this->responseCaptchaFailed();
            }

            
$user XenForo_Visitor::getInstance()->toArray();

            if (!
$user['user_id'])
            {
                
$user['email'] = $this->_input->filterSingle('email'XenForo_Input::STRING);

                if (!
XenForo_Helper_Email::isEmailValid($user['email']))
                {
                    return 
$this->responseError(new XenForo_Phrase('please_enter_valid_email'));
                }
            }

            
$input $this->_input->filter(array(
                
'subject' => XenForo_Input::STRING,
                
'message' => XenForo_Input::STRING
            
));

            if (!
$user['username'] || !$input['subject'] || !$input['message'])
            {
                return 
$this->responseError(new XenForo_Phrase('please_complete_required_fields'));
            }

            
$this->assertNotFlooding('contact');

            
$mailParams = array(
                
'user' => $user,
                
'subject' => $input['subject'],
                
'message' => $input['message']
            );

            
$mail XenForo_Mail::create('contact'$mailParams0);
            
$mail->send(
                
XenForo_Application::get('options')->contactEmailAddress'', array(
                    
'Sender' => XenForo_Application::get('options')->contactEmailAddress
                
),
                
$user['email'], $user['username']
            );

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
$this->getDynamicRedirect(),
                new 
XenForo_Phrase('your_message_has_been_sent')
            );
        }
        else
        {
            
$viewParams = array(
                
'redirect' => $this->getDynamicRedirect(),

                
'captcha' => XenForo_Captcha_Abstract::createDefault()
            );

            return 
$this->responseView('XenForo_ViewPublic_Misc_Contact''contact'$viewParams);
        }
    }

    public function 
actionResetPermissions()
    {
        
$session XenForo_Application::get('session');
        
$visitor XenForo_Visitor::getInstance();

        if (!
$session->get('permissionTest') || !$visitor['is_admin'])
        {
            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
$this->getDynamicRedirect()
            );
        }

        if (
$this->_request->isPost())
        {
            
$session->set('permissionTest'false);

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
$this->getDynamicRedirect()
            );
        }
        else
        {
            return 
$this->responseView('XenForo_ViewPublic_Misc_ResetPermissions''reset_permissions');
        }
    }

    
/**
     * Provides data to build the site jump menu (forum jump etc.)
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionQuickNavigationMenu()
    {
        
$route $this->_input->filterSingle('route'XenForo_Input::STRING);

        
/* @var $nodeModel XenForo_Model_Node */
        
$nodeModel $this->getModelFromCache('XenForo_Model_Node');

        
$nodes $nodeModel->getViewableNodeList(nulltrue);
        
$nodeTypes $nodeModel->getAllNodeTypes();

        
$quickNavMenuNodeTypes XenForo_Application::get('options')->quickNavMenuNodeTypes;

        if (!isset(
$nodeTypes['_all']) && !in_array('_all'$quickNavMenuNodeTypes))
        {
            
$nodes $nodeModel->filterNodeTypesInTree($nodes$quickNavMenuNodeTypes);
        }

        
$nodes $nodeModel->filterOrphanNodes($nodes);

        
$selected preg_replace('/[^a-z0-9_-]/i'''$this->_input->filterSingle('selected'XenForo_Input::STRING));

        
$options XenForo_Application::get('options');

        
$viewParams = array(
            
'route' => $route,
            
'nodes' => $nodes,
            
'nodeTypes' => $nodeTypes,
            
'selected' => $selected,

            
'homeLink' => ($options->homePageUrl $options->homePageUrl false)
        );

        return 
$this->responseView('XenForo_ViewPublic_Misc_QuickNavigationMenu''quick_navigation_menu'$viewParams);
    }

    
/**
     * Returns the lightbox template
     *
     * @return XenForo_ControllerResponse_View
     */
    
public function actionLightbox()
    {
        return 
$this->responseView('XenForo_ViewPublic_Misc_Lightbox''lightbox');
    }

    
/**
     * Returns a new CAPTCHA
     *
     * @return XenForo_ControllerResponse_View
     */
    
public function actionCaptcha()
    {
        
$viewParams = array('captcha' => XenForo_Captcha_Abstract::createDefault());

        return 
$this->responseView('XenForo_ViewPublic_Misc_Captcha''captcha'$viewParams);
    }

    
/**
     * Forwards a request for IP address information to the chosen provider site.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionIpInfo()
    {
        
$ip $this->_input->filterSingle('ip'XenForo_Input::STRING);
        if (!
Zend_Validate::is($ip'Ip'))
        {
            return 
$this->responseError(new XenForo_Phrase('specified_ip_invalid'));
        }

        if (
strpos($ip':') === false// IPv4
        
{
            
$url XenForo_Application::get('options')->ipInfoUrl;
            if (
strpos($url'{ip}') === false)
            {
                
$url 'http://whatismyipaddress.com/ip/{ip}/';
            }
        }
        else 
// IPv6
        
{
            
$url XenForo_Application::get('options')->ipv6InfoUrl;
            if (
strpos($url'{ip}') === false)
            {
                
$url 'http://ip-lookup.net/index.php?ip={ip}';
            }
        }

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL_PERMANENT,
            
str_replace('{ip}'urlencode($ip), $url)
        );
    }

    
/**
     * Forwards a request for location information to the chosen provider site.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionLocationInfo()
    {
        
$url XenForo_Application::get('options')->geoLocationUrl;
        if (
strpos($url'{location}') === false)
        {
            
$url 'http://maps.google.com/maps?q={location}';
        }

        
$location $this->_input->filterSingle('location'XenForo_Input::STRING);
        if (
$location == '')
        {
            return 
$this->responseError(new XenForo_Phrase('specified_location_invalid'));
        }

        if (
strpos($url'maps.google.') !== false)
        {
            switch (
strtolower($location))
            {
                case 
'the moon':
                case 
'moon':
                {
                    
$url 'http://maps.google.com/moon/';
                    break;
                }

                case 
'mars':
                {
                    
$url 'http://maps.google.com/mars/';
                    break;
                }
            }
        }

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL_PERMANENT,
            
str_replace('{location}'urlencode($location), $url)
        );
    }

    
/**
     * @see XenForo_ControllerPublic_Abstract::_assertViewingPermissions()
     */
    
protected function _assertViewingPermissions($action)
    {
        if (
strtolower($action) != 'resetpermissions')
        {
            
parent::_assertViewingPermissions($action);
        }
    }
}
Онлайн: 0
Реклама