Вход Регистрация
Файл: phpbb/controller/helper.php
Строк: 228
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

namespace phpbbcontroller;

use 
SymfonyComponentHttpFoundationResponse;
use 
SymfonyComponentRoutingGeneratorUrlGenerator;
use 
SymfonyComponentRoutingGeneratorUrlGeneratorInterface;
use 
SymfonyComponentRoutingRequestContext;

/**
* Controller helper class, contains methods that do things for controllers
*/
class helper
{
    
/**
    * Template object
    * @var phpbbtemplatetemplate
    */
    
protected $template;

    
/**
    * User object
    * @var phpbbuser
    */
    
protected $user;

    
/**
    * config object
    * @var phpbbconfigconfig
    */
    
protected $config;

    
/* @var phpbbsymfony_request */
    
protected $symfony_request;

    
/**
    * @var phpbbfilesystem The filesystem object
    */
    
protected $filesystem;

    
/**
    * phpBB root path
    * @var string
    */
    
protected $phpbb_root_path;

    
/**
    * PHP file extension
    * @var string
    */
    
protected $php_ext;

    
/**
    * Constructor
    *
    * @param phpbbtemplatetemplate $template Template object
    * @param phpbbuser $user User object
    * @param phpbbconfigconfig $config Config object
    * @param phpbbcontrollerprovider $provider Path provider
    * @param phpbbextensionmanager $manager Extension manager object
    * @param phpbbsymfony_request $symfony_request Symfony Request object
    * @param phpbbfilesystem $filesystem The filesystem object
    * @param string $phpbb_root_path phpBB root path
    * @param string $php_ext PHP file extension
    */
    
public function __construct(phpbbtemplatetemplate $template, phpbbuser $user, phpbbconfigconfig $config, phpbbcontrollerprovider $provider, phpbbextensionmanager $manager, phpbbsymfony_request $symfony_request, phpbbfilesystem $filesystem, $phpbb_root_path, $php_ext)
    {
        
$this->template = $template;
        
$this->user = $user;
        
$this->config = $config;
        
$this->symfony_request = $symfony_request;
        
$this->filesystem = $filesystem;
        
$this->phpbb_root_path = $phpbb_root_path;
        
$this->php_ext = $php_ext;
        
$provider->find_routing_files($manager->get_finder());
        
$this->route_collection = $provider->find($phpbb_root_path)->get_routes();
    }

    
/**
    * Automate setting up the page and creating the response object.
    *
    * @param string $template_file The template handle to render
    * @param string $page_title The title of the page to output
    * @param int $status_code The status code to be sent to the page header
    * @param bool $display_online_list Do we display online users list
    *
    * @return Response object containing rendered page
    */
    
public function render($template_file, $page_title = '', $status_code = 200, $display_online_list = false)
    {
        
page_header($page_title, $display_online_list);

        
$this->template->set_filenames(array(
            
'body'    => $template_file,
        ));

        
page_footer(true, false, false);

        return new 
Response($this->template->assign_display('body'), $status_code);
    }

    
/**
    * Generate a URL to a route
    *
    * @param string    $route        Name of the route to travel
    * @param array    $params        String or array of additional url parameters
    * @param bool    $is_amp        Is url using &amp; (true) or & (false)
    * @param string|bool        $session_id    Possibility to use a custom session id instead of the global one
    * @param bool|string        $reference_type The type of reference to be generated (one of the constants)
    * @return string The URL already passed through append_sid()
    */
    
public function route($route, array $params = array(), $is_amp = true, $session_id = false, $reference_type = UrlGeneratorInterface::ABSOLUTE_PATH)
    {
        
$anchor = '';
        if (isset(
$params['#']))
        {
            
$anchor = '#' . $params['#'];
            unset(
$params['#']);
        }

        
$context = new RequestContext();
        
$context->fromRequest($this->symfony_request);

        
$script_name = $this->symfony_request->getScriptName();
        
$page_name = substr($script_name, -1, 1) == '/' ? '' : utf8_basename($script_name);

        
$base_url = $context->getBaseUrl();

        
// If enable_mod_rewrite is false we need to replace the current front-end by app.php, otherwise we need to remove it.
        
$base_url = str_replace('/' . $page_name, empty($this->config['enable_mod_rewrite']) ? '/app.' . $this->php_ext : '', $base_url);

        
// We need to update the base url to move to the directory of the app.php file if the current script is not app.php
        
if ($page_name !== 'app.php')
        {
            if (empty(
$this->config['enable_mod_rewrite']))
            {
                
$base_url = str_replace('/app.' . $this->php_ext, '/' . $this->phpbb_root_path . 'app.' . $this->php_ext, $base_url);
            }
            else
            {
                
$base_url .= preg_replace(get_preg_expression('path_remove_dot_trailing_slash'), '$2', $this->phpbb_root_path);
            }
        }

        
$base_url = $this->filesystem->clean_path($base_url);

        
$context->setBaseUrl($base_url);

        
$url_generator = new UrlGenerator($this->route_collection, $context);
        
$route_url = $url_generator->generate($route, $params, $reference_type);

        if (
$is_amp)
        {
            
$route_url = str_replace(array('&amp;', '&'), array('&', '&amp;'), $route_url);
        }

        if (
$reference_type === UrlGeneratorInterface::RELATIVE_PATH && empty($this->config['enable_mod_rewrite']))
        {
            
$route_url = 'app.' . $this->php_ext . '/' . $route_url;
        }

        return 
append_sid($route_url . $anchor, false, $is_amp, $session_id, true);
    }

    
/**
    * Output an error, effectively the same thing as trigger_error
    *
    * @param string $message The error message
    * @param int $code The error code (e.g. 404, 500, 503, etc.)
    * @return Response A Response instance
    */
    
public function error($message, $code = 500)
    {
        
$this->template->assign_vars(array(
            
'MESSAGE_TEXT'    => $message,
            
'MESSAGE_TITLE'    => $this->user->lang('INFORMATION'),
        ));

        return 
$this->render('message_body.html', $this->user->lang('INFORMATION'), $code);
    }

    
/**
    * Return the current url
    *
    * @return string
    */
    
public function get_current_url()
    {
        return 
generate_board_url(true) . $this->symfony_request->getRequestUri();
    }
}
Онлайн: 1
Реклама