Файл: 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', $styleId, 86400 * 365);
}
return $this->responseRedirect(
XenForo_ControllerResponse_Redirect::SUCCESS,
$this->getDynamicRedirect(false, false)
);
}
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', $languageId, 86400 * 365);
}
return $this->responseRedirect(
XenForo_ControllerResponse_Redirect::SUCCESS,
$this->getDynamicRedirect(false, false)
);
}
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', $mailParams, 0);
$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(null, true);
$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);
}
}
}