diff options
| -rw-r--r-- | phpBB/phpbb/template/twig/twig.php | 32 | ||||
| -rw-r--r-- | tests/template/ext/include/css/styles/all/theme/child_only.css | 0 | ||||
| -rw-r--r-- | tests/template/ext/include/css/styles/all/theme/test.css | 0 | ||||
| -rw-r--r-- | tests/template/template_includecss_test.php | 86 | ||||
| -rw-r--r-- | tests/template/templates/includecss.html | 11 | 
5 files changed, 116 insertions, 13 deletions
diff --git a/phpBB/phpbb/template/twig/twig.php b/phpBB/phpbb/template/twig/twig.php index 2a8fb76b90..4962d14aef 100644 --- a/phpBB/phpbb/template/twig/twig.php +++ b/phpBB/phpbb/template/twig/twig.php @@ -170,13 +170,24 @@ class twig extends \phpbb\template\base  			{  				$path = $this->phpbb_root_path . trim($directory, '/') . "/{$name}/";  				$template_path = $path . 'template/'; +				$theme_path = $path . 'theme/'; +				$is_valid_dir = false;  				if (is_dir($template_path))  				{ +					$is_valid_dir = true; +					$paths[] = $template_path; +				} +				if (is_dir($theme_path)) +				{ +					$is_valid_dir = true; +					$paths[] = $theme_path; +				} + +				if ($is_valid_dir) +				{  					// Add the base style directory as a safe directory  					$this->twig->getLoader()->addSafeDirectory($path); - -					$paths[] = $template_path;  				}  			}  		} @@ -234,25 +245,38 @@ class twig extends \phpbb\template\base  						{  							$ext_style_template_path = $ext_path . $template_dir['ext_path'];  							$ext_style_path = dirname($ext_style_template_path); +							$ext_style_theme_path = $ext_style_path . 'theme/';  						}  						else  						{  							$ext_style_path = $ext_path . 'styles/' . $template_dir['name'] . '/';  							$ext_style_template_path = $ext_style_path . 'template/'; +							$ext_style_theme_path = $ext_style_path . 'theme/';  						}  					}  					else  					{  						$ext_style_path = $ext_path . 'styles/' . $template_dir . '/';  						$ext_style_template_path = $ext_style_path . 'template/'; +						$ext_style_theme_path = $ext_style_path . 'theme/';  					} +					$ok = false;  					if (is_dir($ext_style_template_path))  					{ +						$ok = true; +						$paths[] = $ext_style_template_path; +					} +					if (is_dir($ext_style_theme_path)) +					{ +						$ok = true; +						$paths[] = $ext_style_theme_path; +					} + +					if ($ok) +					{  						// Add the base style directory as a safe directory  						$this->twig->getLoader()->addSafeDirectory($ext_style_path); - -						$paths[] = $ext_style_template_path;  					}  				} diff --git a/tests/template/ext/include/css/styles/all/theme/child_only.css b/tests/template/ext/include/css/styles/all/theme/child_only.css new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template/ext/include/css/styles/all/theme/child_only.css diff --git a/tests/template/ext/include/css/styles/all/theme/test.css b/tests/template/ext/include/css/styles/all/theme/test.css new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template/ext/include/css/styles/all/theme/test.css diff --git a/tests/template/template_includecss_test.php b/tests/template/template_includecss_test.php index ab91dd7a49..49bd9dec8b 100644 --- a/tests/template/template_includecss_test.php +++ b/tests/template/template_includecss_test.php @@ -15,18 +15,90 @@ require_once dirname(__FILE__) . '/template_test_case_with_tree.php';  class phpbb_template_template_includecss_test extends phpbb_template_template_test_case_with_tree  { -	public function test_includecss_compilation() +	protected function setup_engine(array $new_config = array()) +	{ +		global $phpbb_root_path, $phpEx, $user; + +		$defaults = $this->config_defaults(); +		$config = new \phpbb\config\config(array_merge($defaults, $new_config)); + +		$this->phpbb_path_helper = new \phpbb\path_helper( +			new \phpbb\symfony_request( +				new phpbb_mock_request() +			), +			new \phpbb\filesystem(), +			$this->getMock('\phpbb\request\request'), +			$phpbb_root_path, +			$phpEx +		); + +		$this->template_path = $this->test_path . '/templates'; +		$this->parent_template_path = $this->test_path . '/parent_templates'; +		$this->template = new phpbb\template\twig\twig( +			$this->phpbb_path_helper, +			$config, +			$user, +			new phpbb\template\context(), +			new phpbb_mock_extension_manager( +				dirname(__FILE__) . '/', +				array( +					'include/css' => array( +						'ext_name' => 'include/css', +						'ext_active' => '1', +						'ext_path' => 'ext/include/css/', +					), +				) +			) +		); +		$this->template->set_custom_style('tests', array($this->template_path, $this->parent_template_path)); +	} + +	public function template_data() +	{ +		$url_base = explode('/', dirname(__FILE__)); +		foreach ($url_base as &$dir) +		{ +			$dir = rawurlencode($dir); +		} +		$url_base = implode('/', $url_base); + +		return array( +			/* +			array( +				// vars +				// expected +			), +			*/ +			array( +				array('TEST' => 1), +				'<link href="tests/template/templates/child_only.css?assets_version=1" rel="stylesheet" type="text/css" media="screen, projection" />', +			), +			array( +				array('TEST' => 2), +				'<link href="tests/template/parent_templates/parent_only.css?assets_version=1" rel="stylesheet" type="text/css" media="screen, projection" />', +			), +			array( +				array('TEST' => 3), +				'<link href="' . $url_base . '/ext/include/css/styles/all/theme/test.css?assets_version=1" rel="stylesheet" type="text/css" media="screen, projection" />', +			), +			array( +				array('TEST' => 4), +				'<link href="' . $url_base . '/ext/include/css/styles/all/theme/child_only.css?assets_version=1" rel="stylesheet" type="text/css" media="screen, projection" />', +			), +		); +	} + +	/** +	 * @dataProvider template_data +	 */ +	public function test_includecss_compilation($vars, $expected)  	{  		// Reset the engine state  		$this->setup_engine(array('assets_version' => 1)); -		// Prepare correct result -		$scripts = array( -			'<link href="tests/template/templates/child_only.css?assets_version=1" rel="stylesheet" type="text/css" media="screen, projection" />', -			'<link href="tests/template/parent_templates/parent_only.css?assets_version=1" rel="stylesheet" type="text/css" media="screen, projection" />', -		); +		$this->template->assign_vars($vars);  		// Run test -		$this->run_template('includecss.html', array(), array(), array(), implode('', $scripts)); +		$this->run_template('includecss.html', array(), array(), array(), $expected);  	}  } diff --git a/tests/template/templates/includecss.html b/tests/template/templates/includecss.html index a09e44f240..23e3c426d7 100644 --- a/tests/template/templates/includecss.html +++ b/tests/template/templates/includecss.html @@ -1,3 +1,10 @@ -<!-- INCLUDECSS child_only.css --> -<!-- INCLUDECSS parent_only.css --> +<!-- IF TEST === 1 --> +	<!-- INCLUDECSS child_only.css --> +<!-- ELSEIF TEST === 2 --> +	<!-- INCLUDECSS parent_only.css --> +<!-- ELSEIF TEST === 3 --> +	<!-- INCLUDECSS @include_css/test.css --> +<!-- ELSEIF TEST === 4 --> +	<!-- INCLUDECSS @include_css/child_only.css --> +<!-- ENDIF -->  {$STYLESHEETS}  | 
