1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-31 05:50:42 +02:00

[ticket/11698] Moving all autoloadable files to phpbb/

PHPBB3-11698
This commit is contained in:
Nils Adermann
2013-07-14 01:32:34 -04:00
parent 4186c05bb4
commit 7030578bbe
273 changed files with 37 additions and 52 deletions

View File

@@ -0,0 +1,24 @@
<?php
/**
*
* @package controller
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Controller exception class
* @package phpBB3
*/
class phpbb_controller_exception extends RuntimeException
{
}

View File

@@ -0,0 +1,139 @@
<?php
/**
*
* @package controller
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\HttpFoundation\Response;
/**
* Controller helper class, contains methods that do things for controllers
* @package phpBB3
*/
class phpbb_controller_helper
{
/**
* Template object
* @var phpbb_template
*/
protected $template;
/**
* User object
* @var phpbb_user
*/
protected $user;
/**
* phpBB root path
* @var string
*/
protected $phpbb_root_path;
/**
* PHP extension
* @var string
*/
protected $php_ext;
/**
* Constructor
*
* @param phpbb_template $template Template object
* @param phpbb_user $user User object
* @param string $phpbb_root_path phpBB root path
* @param string $php_ext PHP extension
*/
public function __construct(phpbb_template $template, phpbb_user $user, $phpbb_root_path, $php_ext)
{
$this->template = $template;
$this->user = $user;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
}
/**
* Automate setting up the page and creating the response object.
*
* @param string $handle 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
* @return Response object containing rendered page
*/
public function render($template_file, $page_title = '', $status_code = 200)
{
page_header($page_title);
$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
*
* @param string $route The route to travel
* @param mixed $params String or array of additional url parameters
* @param bool $is_amp Is url using &amp; (true) or & (false)
* @param string $session_id Possibility to use a custom session id instead of the global one
* @return string The URL already passed through append_sid()
*/
public function url($route, $params = false, $is_amp = true, $session_id = false)
{
$route_params = '';
if (($route_delim = strpos($route, '?')) !== false)
{
$route_params = substr($route, $route_delim);
$route = substr($route, 0, $route_delim);
}
if (is_array($params) && !empty($params))
{
$params = array_merge(array(
'controller' => $route,
), $params);
}
else if (is_string($params) && $params)
{
$params = 'controller=' . $route . (($is_amp) ? '&amp;' : '&') . $params;
}
else
{
$params = array('controller' => $route);
}
return append_sid($this->phpbb_root_path . 'app.' . $this->php_ext . $route_params, $params, $is_amp, $session_id);
}
/**
* Output an error, effectively the same thing as trigger_error
*
* @param string $message The error message
* @param string $code The error code (e.g. 404, 500, 503, etc.)
* @return Response A Reponse 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);
}
}

View File

@@ -0,0 +1,82 @@
<?php
/**
*
* @package controller
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
/**
* Controller interface
* @package phpBB3
*/
class phpbb_controller_provider
{
/**
* YAML file(s) containing route information
* @var array
*/
protected $routing_paths;
/**
* Construct method
*
* @param array() $routing_paths Array of strings containing paths
* to YAML files holding route information
*/
public function __construct($routing_paths = array())
{
$this->routing_paths = $routing_paths;
}
/**
* Locate paths containing routing files
* This sets an internal property but does not return the paths.
*
* @return The current instance of this object for method chaining
*/
public function import_paths_from_finder(phpbb_extension_finder $finder)
{
// We hardcode the path to the core config directory
// because the finder cannot find it
$this->routing_paths = array_merge(array('config'), array_map('dirname', array_keys($finder
->directory('config')
->prefix('routing')
->suffix('yml')
->find()
)));
return $this;
}
/**
* Get a list of controllers and return it
*
* @param string $base_path Base path to prepend to file paths
* @return array Array of controllers and their route information
*/
public function find($base_path = '')
{
$routes = new RouteCollection;
foreach ($this->routing_paths as $path)
{
$loader = new YamlFileLoader(new FileLocator($base_path . $path));
$routes->addCollection($loader->load('routing.yml'));
}
return $routes;
}
}

View File

@@ -0,0 +1,154 @@
<?php
/**
*
* @package controller
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
/**
* Controller manager class
* @package phpBB3
*/
class phpbb_controller_resolver implements ControllerResolverInterface
{
/**
* User object
* @var phpbb_user
*/
protected $user;
/**
* ContainerInterface object
* @var ContainerInterface
*/
protected $container;
/**
* phpbb_style object
* @var phpbb_style
*/
protected $style;
/**
* Construct method
*
* @param phpbb_user $user User Object
* @param ContainerInterface $container ContainerInterface object
* @param phpbb_style $style
*/
public function __construct(phpbb_user $user, ContainerInterface $container, phpbb_style $style = null)
{
$this->user = $user;
$this->container = $container;
$this->style = $style;
}
/**
* Load a controller callable
*
* @param Symfony\Component\HttpFoundation\Request $request Symfony Request object
* @return bool|Callable Callable or false
* @throws phpbb_controller_exception
*/
public function getController(Request $request)
{
$controller = $request->attributes->get('_controller');
if (!$controller)
{
throw new phpbb_controller_exception($this->user->lang['CONTROLLER_NOT_SPECIFIED']);
}
// Require a method name along with the service name
if (stripos($controller, ':') === false)
{
throw new phpbb_controller_exception($this->user->lang['CONTROLLER_METHOD_NOT_SPECIFIED']);
}
list($service, $method) = explode(':', $controller);
if (!$this->container->has($service))
{
throw new phpbb_controller_exception($this->user->lang('CONTROLLER_SERVICE_UNDEFINED', $service));
}
$controller_object = $this->container->get($service);
/*
* If this is an extension controller, we'll try to automatically set
* the style paths for the extension (the ext author can change them
* if necessary).
*/
$controller_dir = explode('_', get_class($controller_object));
// 0 phpbb, 1 ext, 2 vendor, 3 extension name, ...
if (!is_null($this->style) && isset($controller_dir[3]) && $controller_dir[1] === 'ext')
{
$controller_style_dir = 'ext/' . $controller_dir[2] . '/' . $controller_dir[3] . '/styles';
if (is_dir($controller_style_dir))
{
$this->style->set_style(array($controller_style_dir, 'styles'));
}
}
return array($controller_object, $method);
}
/**
* Dependencies should be specified in the service definition and can be
* then accessed in __construct(). Arguments are sent through the URL path
* and should match the parameters of the method you are using as your
* controller.
*
* @param Symfony\Component\HttpFoundation\Request $request Symfony Request object
* @param mixed $controller A callable (controller class, method)
* @return bool False
* @throws phpbb_controller_exception
*/
public function getArguments(Request $request, $controller)
{
// At this point, $controller contains the object and method name
list($object, $method) = $controller;
$mirror = new ReflectionMethod($object, $method);
$arguments = array();
$parameters = $mirror->getParameters();
$attributes = $request->attributes->all();
foreach ($parameters as $param)
{
if (array_key_exists($param->name, $attributes))
{
$arguments[] = $attributes[$param->name];
}
else if ($param->getClass() && $param->getClass()->isInstance($request))
{
$arguments[] = $request;
}
else if ($param->isDefaultValueAvailable())
{
$arguments[] = $param->getDefaultValue();
}
else
{
throw new phpbb_controller_exception($this->user->lang('CONTROLLER_ARGUMENT_VALUE_MISSING', $param->getPosition() + 1, get_class($object) . ':' . $method, $param->name));
}
}
return $arguments;
}
}