1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-13 20:24:08 +02:00

[ticket/11628] Remove phpbb_style (move methods to phpbb_template)

PHPBB3-11628
This commit is contained in:
Nathaniel Guse
2013-07-24 12:24:35 -05:00
parent 44a82dd083
commit 5d1afb4532
19 changed files with 161 additions and 218 deletions

View File

@@ -38,23 +38,23 @@ class phpbb_controller_resolver implements ControllerResolverInterface
protected $container;
/**
* phpbb_style object
* @var phpbb_style
* phpbb_template object
* @var phpbb_template
*/
protected $style;
protected $template;
/**
* Construct method
*
* @param phpbb_user $user User Object
* @param ContainerInterface $container ContainerInterface object
* @param phpbb_style $style
* @param phpbb_template_interface $template
*/
public function __construct(phpbb_user $user, ContainerInterface $container, phpbb_style $style = null)
public function __construct(phpbb_user $user, ContainerInterface $container, phpbb_template $template = null)
{
$this->user = $user;
$this->container = $container;
$this->style = $style;
$this->template = $template;
}
/**
@@ -96,13 +96,13 @@ class phpbb_controller_resolver implements ControllerResolverInterface
$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')
if (!is_null($this->template) && 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'));
$this->template->set_style(array($controller_style_dir, 'styles'));
}
}

View File

@@ -1,175 +0,0 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2005 phpBB Group, sections (c) 2001 ispi of Lincoln Inc
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Base Style class.
* @package phpBB3
*/
class phpbb_style
{
/**
* Template class.
* Handles everything related to templates.
* @var phpbb_template
*/
private $template;
/**
* phpBB root path
* @var string
*/
private $phpbb_root_path;
/**
* PHP file extension
* @var string
*/
private $php_ext;
/**
* phpBB config instance
* @var phpbb_config
*/
private $config;
/**
* Current user
* @var phpbb_user
*/
private $user;
/**
* Constructor.
*
* @param string $phpbb_root_path phpBB root path
* @param user $user current user
* @param phpbb_template $template template
*/
public function __construct($phpbb_root_path, $php_ext, $config, $user, phpbb_template $template)
{
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
$this->config = $config;
$this->user = $user;
$this->template = $template;
}
/**
* Get the style tree of the style preferred by the current user
*
* @return array Style tree, most specific first
*/
public function get_user_style()
{
$style_list = array(
$this->user->style['style_path'],
);
if ($this->user->style['style_parent_id'])
{
$style_list = array_merge($style_list, array_reverse(explode('/', $this->user->style['style_parent_tree'])));
}
return $style_list;
}
/**
* Set style location based on (current) user's chosen style.
*
* @param array $style_directories The directories to add style paths for
* E.g. array('ext/foo/bar/styles', 'styles')
* Default: array('styles') (phpBB's style directory)
* @return bool true
*/
public function set_style($style_directories = array('styles'))
{
$this->names = $this->get_user_style();
$paths = array();
foreach ($style_directories as $directory)
{
foreach ($this->names as $name)
{
$path = $this->get_style_path($name, $directory);
if (is_dir($path))
{
$paths[] = $path;
}
}
}
$new_paths = array();
foreach ($paths as $path)
{
$new_paths[] = $path . '/template/';
}
$this->template->set_style_names($this->names, $new_paths, ($style_directories === array('styles')));
return true;
}
/**
* Set custom style location (able to use directory outside of phpBB).
*
* Note: Templates are still compiled to phpBB's cache directory.
*
* @param string $name Name of style, used for cache prefix. Examples: "admin", "prosilver"
* @param array or string $paths Array of style paths, relative to current root directory
* @param array $names Array of names of templates in inheritance tree order, used by extensions. If empty, $name will be used.
* @param string $template_path Path to templates, relative to style directory. False if path should be set to default (templates/).
* @return bool true
*/
public function set_custom_style($name, $paths, $names = array(), $template_path = false)
{
if (is_string($paths))
{
$paths = array($paths);
}
if (empty($names))
{
$names = array($name);
}
$this->names = $names;
$new_paths = array();
foreach ($paths as $path)
{
$new_paths[] = $path . '/' . (($template_path !== false) ? $template_path : 'template/');
}
$this->template->set_style_names($names, $new_paths);
return true;
}
/**
* Get location of style directory for specific style_path
*
* @param string $path Style path, such as "prosilver"
* @param string $style_base_directory The base directory the style is in
* E.g. 'styles', 'ext/foo/bar/styles'
* Default: 'styles'
* @return string Path to style directory, relative to current path
*/
public function get_style_path($path, $style_base_directory = 'styles')
{
return $this->phpbb_root_path . trim($style_base_directory, '/') . '/' . $path;
}
}

View File

@@ -33,6 +33,36 @@ interface phpbb_template
*/
public function set_filenames(array $filename_array);
/**
* Get the style tree of the style preferred by the current user
*
* @return array Style tree, most specific first
*/
public function get_user_style();
/**
* Set style location based on (current) user's chosen style.
*
* @param array $style_directories The directories to add style paths for
* E.g. array('ext/foo/bar/styles', 'styles')
* Default: array('styles') (phpBB's style directory)
* @return bool true
*/
public function set_style($style_directories = array('styles'));
/**
* Set custom style location (able to use directory outside of phpBB).
*
* Note: Templates are still compiled to phpBB's cache directory.
*
* @param string $name Name of style, used for cache prefix. Examples: "admin", "prosilver"
* @param array or string $paths Array of style paths, relative to current root directory
* @param array $names Array of names of templates in inheritance tree order, used by extensions. If empty, $name will be used.
* @param string $template_path Path to templates, relative to style directory. False if path should be set to default (templates/).
* @return bool true
*/
public function set_custom_style($name, $paths, $names = array(), $template_path = false);
/**
* Sets the style names/paths corresponding to style hierarchy being compiled
* and/or rendered.

View File

@@ -177,6 +177,97 @@ class phpbb_template_twig implements phpbb_template
return $this;
}
/**
* Get the style tree of the style preferred by the current user
*
* @return array Style tree, most specific first
*/
public function get_user_style()
{
$style_list = array(
$this->user->style['style_path'],
);
if ($this->user->style['style_parent_id'])
{
$style_list = array_merge($style_list, array_reverse(explode('/', $this->user->style['style_parent_tree'])));
}
return $style_list;
}
/**
* Set style location based on (current) user's chosen style.
*
* @param array $style_directories The directories to add style paths for
* E.g. array('ext/foo/bar/styles', 'styles')
* Default: array('styles') (phpBB's style directory)
* @return bool true
*/
public function set_style($style_directories = array('styles'))
{
$this->names = $this->get_user_style();
$paths = array();
foreach ($style_directories as $directory)
{
foreach ($this->names as $name)
{
$path = $this->get_style_path($name, $directory);
if (is_dir($path))
{
$paths[] = $path;
}
}
}
$new_paths = array();
foreach ($paths as $path)
{
$new_paths[] = $path . '/template/';
}
$this->set_style_names($this->names, $new_paths, ($style_directories === array('styles')));
return true;
}
/**
* Set custom style location (able to use directory outside of phpBB).
*
* Note: Templates are still compiled to phpBB's cache directory.
*
* @param string $name Name of style, used for cache prefix. Examples: "admin", "prosilver"
* @param array or string $paths Array of style paths, relative to current root directory
* @param array $names Array of names of templates in inheritance tree order, used by extensions. If empty, $name will be used.
* @param string $template_path Path to templates, relative to style directory. False if path should be set to default (templates/).
* @return bool true
*/
public function set_custom_style($name, $paths, $names = array(), $template_path = false)
{
if (is_string($paths))
{
$paths = array($paths);
}
if (empty($names))
{
$names = array($name);
}
$this->names = $names;
$new_paths = array();
foreach ($paths as $path)
{
$new_paths[] = $path . '/' . (($template_path !== false) ? $template_path : 'template/');
}
$this->set_style_names($names, $new_paths);
return true;
}
/**
* Sets the style names/paths corresponding to style hierarchy being compiled
* and/or rendered.
@@ -194,7 +285,7 @@ class phpbb_template_twig implements phpbb_template
// Set as __main__ namespace
$this->twig->getLoader()->setPaths($style_paths);
// Core style namespace from phpbb_style::set_style()
// Core style namespace from this::set_style()
if ($is_core)
{
$this->twig->getLoader()->setPaths($style_paths, 'core');
@@ -462,4 +553,18 @@ class phpbb_template_twig implements phpbb_template
{
return $this->twig->getLoader()->getCacheKey($this->get_filename_from_handle($handle));
}
/**
* Get location of style directory for specific style_path
*
* @param string $path Style path, such as "prosilver"
* @param string $style_base_directory The base directory the style is in
* E.g. 'styles', 'ext/foo/bar/styles'
* Default: 'styles'
* @return string Path to style directory, relative to current path
*/
protected function get_style_path($path, $style_base_directory = 'styles')
{
return $this->phpbb_root_path . trim($style_base_directory, '/') . '/' . $path;
}
}

View File

@@ -75,7 +75,7 @@ class phpbb_user extends phpbb_session
*/
function setup($lang_set = false, $style_id = false)
{
global $db, $phpbb_style, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;
global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;
global $phpbb_dispatcher;
if ($this->data['user_id'] != ANONYMOUS)
@@ -236,7 +236,7 @@ class phpbb_user extends phpbb_session
}
}
$phpbb_style->set_style();
$template->set_style();
$this->img_lang = $this->lang_name;