aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2015-05-05 18:17:14 +0200
committerJoas Schilling <nickvergessen@gmx.de>2015-05-05 18:17:14 +0200
commitde687f32ed8df438cb798d98f1a5dda7a5ac76dc (patch)
tree346e51469449521e40a25d875bcc3f7b8d7846f7
parentba53901ffb734995b42626a71a81a5abaa55f85d (diff)
parent51376a43919cba7a5037edb7cc31f18b5950437b (diff)
downloadforums-de687f32ed8df438cb798d98f1a5dda7a5ac76dc.tar
forums-de687f32ed8df438cb798d98f1a5dda7a5ac76dc.tar.gz
forums-de687f32ed8df438cb798d98f1a5dda7a5ac76dc.tar.bz2
forums-de687f32ed8df438cb798d98f1a5dda7a5ac76dc.tar.xz
forums-de687f32ed8df438cb798d98f1a5dda7a5ac76dc.zip
Merge pull request #3432 from Nicofuma/ticket/13638
[ticket/13638] Prepend the assets path phpbb root
-rw-r--r--phpBB/config/default/container/services_twig.yml1
-rw-r--r--phpBB/includes/bbcode.php1
-rw-r--r--phpBB/includes/functions_messenger.php1
-rw-r--r--phpBB/install/index.php1
-rw-r--r--phpBB/phpbb/template/asset.php27
-rw-r--r--phpBB/phpbb/template/twig/environment.php25
-rw-r--r--phpBB/phpbb/template/twig/node/includeasset.php2
-rw-r--r--tests/controller/common_helper_route.php1
-rw-r--r--tests/extension/metadata_manager_test.php6
-rw-r--r--tests/template/asset_test.php49
-rw-r--r--tests/template/template_allfolder_test.php5
-rw-r--r--tests/template/template_events_test.php3
-rw-r--r--tests/template/template_includecss_test.php5
-rw-r--r--tests/template/template_test_case.php5
-rw-r--r--tests/template/template_test_case_with_tree.php5
15 files changed, 120 insertions, 17 deletions
diff --git a/phpBB/config/default/container/services_twig.yml b/phpBB/config/default/container/services_twig.yml
index 6b54311f41..9ab004731e 100644
--- a/phpBB/config/default/container/services_twig.yml
+++ b/phpBB/config/default/container/services_twig.yml
@@ -6,6 +6,7 @@ services:
class: phpbb\template\twig\environment
arguments:
- @config
+ - @filesystem
- @path_helper
- @service_container
- %core.template.cache_path%
diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php
index 53675637a0..150157e275 100644
--- a/phpBB/includes/bbcode.php
+++ b/phpBB/includes/bbcode.php
@@ -142,6 +142,7 @@ class bbcode
new \phpbb\template\context(),
new \phpbb\template\twig\environment(
$phpbb_container->get('config'),
+ $phpbb_container->get('filesystem'),
$phpbb_container->get('path_helper'),
$phpbb_container,
$phpbb_container->getParameter('core.root_path') . 'cache/',
diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php
index b0861585ba..4cbe1eb425 100644
--- a/phpBB/includes/functions_messenger.php
+++ b/phpBB/includes/functions_messenger.php
@@ -637,6 +637,7 @@ class messenger
new \phpbb\template\context(),
new \phpbb\template\twig\environment(
$phpbb_container->get('config'),
+ $phpbb_container->get('filesystem'),
$phpbb_container->get('path_helper'),
$phpbb_container,
$phpbb_container->getParameter('core.root_path') . 'cache/',
diff --git a/phpBB/install/index.php b/phpBB/install/index.php
index df1229c9f2..657825ca39 100644
--- a/phpBB/install/index.php
+++ b/phpBB/install/index.php
@@ -280,6 +280,7 @@ $cache_path = $phpbb_root_path . 'cache/';
$twig_environment = new \phpbb\template\twig\environment(
$config,
+ $phpbb_filesystem,
$phpbb_path_helper,
$phpbb_container,
$cache_path,
diff --git a/phpBB/phpbb/template/asset.php b/phpBB/phpbb/template/asset.php
index 4729685459..cb00f16549 100644
--- a/phpBB/phpbb/template/asset.php
+++ b/phpBB/phpbb/template/asset.php
@@ -20,15 +20,20 @@ class asset
/** @var \phpbb\path_helper **/
protected $path_helper;
+ /** @var \phpbb\filesystem\filesystem */
+ protected $filesystem;
+
/**
* Constructor
*
* @param string $url URL
* @param \phpbb\path_helper $path_helper Path helper object
+ * @param \phpbb\filesystem\filesystem $filesystem
*/
- public function __construct($url, \phpbb\path_helper $path_helper)
+ public function __construct($url, \phpbb\path_helper $path_helper, \phpbb\filesystem\filesystem $filesystem)
{
$this->path_helper = $path_helper;
+ $this->filesystem = $filesystem;
$this->set_url($url);
}
@@ -152,10 +157,22 @@ class asset
*/
public function set_path($path, $urlencode = false)
{
- // Since 1.7.0 Twig returns the real path of the file. We need it to be relative to the working directory.
- $real_root_path = realpath('.') . DIRECTORY_SEPARATOR;
- if ($real_root_path && substr($path . DIRECTORY_SEPARATOR, 0, strlen($real_root_path)) === $real_root_path) {
- $path = str_replace('\\', '/', substr($path, strlen($real_root_path)));
+ // Since 1.7.0 Twig returns the real path of the file. We need it to be relative.
+ $real_root_path = $this->filesystem->realpath($this->path_helper->get_phpbb_root_path()) . DIRECTORY_SEPARATOR;
+
+ // If the asset is under the phpBB root path we need to remove its path and then prepend $phpbb_root_path
+ if ($real_root_path && substr($path . DIRECTORY_SEPARATOR, 0, strlen($real_root_path)) === $real_root_path)
+ {
+ $path = $this->path_helper->get_phpbb_root_path() . str_replace('\\', '/', substr($path, strlen($real_root_path)));
+ }
+ else
+ {
+ // Else we make the path relative to the current working directory
+ $real_root_path = $this->filesystem->realpath('.') . DIRECTORY_SEPARATOR;
+ if ($real_root_path && substr($path . DIRECTORY_SEPARATOR, 0, strlen($real_root_path)) === $real_root_path)
+ {
+ $path = str_replace('\\', '/', substr($path, strlen($real_root_path)));
+ }
}
if ($urlencode)
diff --git a/phpBB/phpbb/template/twig/environment.php b/phpBB/phpbb/template/twig/environment.php
index 0ba7a265e4..e7b8aeab89 100644
--- a/phpBB/phpbb/template/twig/environment.php
+++ b/phpBB/phpbb/template/twig/environment.php
@@ -18,6 +18,9 @@ class environment extends \Twig_Environment
/** @var \phpbb\config\config */
protected $phpbb_config;
+ /** @var \phpbb\filesystem\filesystem */
+ protected $filesystem;
+
/** @var \phpbb\path_helper */
protected $phpbb_path_helper;
@@ -40,6 +43,7 @@ class environment extends \Twig_Environment
* Constructor
*
* @param \phpbb\config\config $phpbb_config The phpBB configuration
+ * @param \phpbb\filesystem\filesystem $filesystem
* @param \phpbb\path_helper $path_helper phpBB path helper
* @param \Symfony\Component\DependencyInjection\ContainerInterface $container The dependency injection container
* @param string $cache_path The path to the cache directory
@@ -47,10 +51,11 @@ class environment extends \Twig_Environment
* @param \Twig_LoaderInterface $loader Twig loader interface
* @param array $options Array of options to pass to Twig
*/
- public function __construct($phpbb_config, \phpbb\path_helper $path_helper, \Symfony\Component\DependencyInjection\ContainerInterface $container, $cache_path, \phpbb\extension\manager $extension_manager = null, \Twig_LoaderInterface $loader = null, $options = array())
+ public function __construct(\phpbb\config\config $phpbb_config, \phpbb\filesystem\filesystem $filesystem, \phpbb\path_helper $path_helper, \Symfony\Component\DependencyInjection\ContainerInterface $container, $cache_path, \phpbb\extension\manager $extension_manager = null, \Twig_LoaderInterface $loader = null, $options = array())
{
$this->phpbb_config = $phpbb_config;
+ $this->filesystem = $filesystem;
$this->phpbb_path_helper = $path_helper;
$this->extension_manager = $extension_manager;
$this->container = $container;
@@ -106,16 +111,26 @@ class environment extends \Twig_Environment
}
/**
- * Get the phpBB root path
- *
- * @return string
- */
+ * Get the phpBB root path
+ *
+ * @return string
+ */
public function get_phpbb_root_path()
{
return $this->phpbb_root_path;
}
/**
+ * Get the filesystem object
+ *
+ * @return \phpbb\filesystem\filesystem
+ */
+ public function get_filesystem()
+ {
+ return $this->filesystem;
+ }
+
+ /**
* Get the web root path
*
* @return string
diff --git a/phpBB/phpbb/template/twig/node/includeasset.php b/phpBB/phpbb/template/twig/node/includeasset.php
index 15195a226b..324823b8d7 100644
--- a/phpBB/phpbb/template/twig/node/includeasset.php
+++ b/phpBB/phpbb/template/twig/node/includeasset.php
@@ -39,7 +39,7 @@ abstract class includeasset extends \Twig_Node
->write("\$asset_file = ")
->subcompile($this->getNode('expr'))
->raw(";\n")
- ->write("\$asset = new \phpbb\\template\\asset(\$asset_file, \$this->getEnvironment()->get_path_helper());\n")
+ ->write("\$asset = new \phpbb\\template\\asset(\$asset_file, \$this->getEnvironment()->get_path_helper(), \$this->getEnvironment()->get_filesystem());\n")
->write("if (substr(\$asset_file, 0, 2) !== './' && \$asset->is_relative()) {\n")
->indent()
->write("\$asset_path = \$asset->get_path();")
diff --git a/tests/controller/common_helper_route.php b/tests/controller/common_helper_route.php
index 3e4b5fd38d..b01241e105 100644
--- a/tests/controller/common_helper_route.php
+++ b/tests/controller/common_helper_route.php
@@ -94,6 +94,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
$loader = new \phpbb\template\twig\loader($this->filesystem, '');
$twig = new \phpbb\template\twig\environment(
$this->config,
+ $this->filesystem,
$this->phpbb_path_helper,
$container,
$cache_path,
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 101ab8616c..aaaee3b2e5 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -51,17 +51,19 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
$cache_path = $this->phpbb_root_path . 'cache/twig';
$context = new \phpbb\template\context();
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
- $phpbb_path_helper =new \phpbb\path_helper(
+ $filesystem = new \phpbb\filesystem\filesystem();
+ $phpbb_path_helper = new \phpbb\path_helper(
new \phpbb\symfony_request(
new phpbb_mock_request()
),
- new \phpbb\filesystem\filesystem(),
+ $filesystem,
$this->getMock('\phpbb\request\request'),
$this->phpbb_root_path,
$this->phpEx
);
$twig = new \phpbb\template\twig\environment(
$this->config,
+ $filesystem,
$phpbb_path_helper,
$container,
$cache_path,
diff --git a/tests/template/asset_test.php b/tests/template/asset_test.php
new file mode 100644
index 0000000000..f6ce0fe241
--- /dev/null
+++ b/tests/template/asset_test.php
@@ -0,0 +1,49 @@
+<?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.
+*
+*/
+
+use phpbb\template\asset;
+
+class phpbb_template_asset_test extends phpbb_test_case
+{
+ public function set_path_data()
+ {
+ return array(
+ // array(phpbb_root_path, given path, expected path),
+ array('.', 'foo/bar', 'foo/bar'),
+ array('../', 'foo/bar', 'foo/bar'),
+ array('./phpBB/', 'foo/bar', 'foo/bar'),
+ array('../', __DIR__ . '/foo/bar', '../phpbb/tests/template/foo/bar'),
+ array('./', __DIR__ . '/foo/bar', './tests/template/foo/bar'),
+ array('./phpBB/', __DIR__ . '/foo/bar', 'tests/template/foo/bar'),
+ );
+ }
+
+ /**
+ * @dataProvider set_path_data
+ */
+ public function test_set_path($phpbb_root_path, $path, $expected)
+ {
+ $path_helper = $this->getMockBuilder('\phpbb\path_helper')
+ ->disableOriginalConstructor()
+ ->setMethods(array())
+ ->getMock();
+
+ $path_helper->method('get_phpbb_root_path')
+ ->willReturn($phpbb_root_path);
+
+ $asset = new asset('', $path_helper, new phpbb\filesystem\filesystem());
+
+ $asset->set_path($path, true);
+ $this->assertEquals($expected, $asset->get_path());
+ }
+}
diff --git a/tests/template/template_allfolder_test.php b/tests/template/template_allfolder_test.php
index 63f35bc758..14a8e9d463 100644
--- a/tests/template/template_allfolder_test.php
+++ b/tests/template/template_allfolder_test.php
@@ -33,11 +33,13 @@ class phpbb_template_allfolder_test extends phpbb_template_template_test_case
$user = new \phpbb\user($lang, '\phpbb\datetime');
$this->user = $user;
+ $filesystem = new \phpbb\filesystem\filesystem();
+
$path_helper = new \phpbb\path_helper(
new \phpbb\symfony_request(
new phpbb_mock_request()
),
- new \phpbb\filesystem\filesystem(),
+ $filesystem,
$this->getMock('\phpbb\request\request'),
$phpbb_root_path,
$phpEx
@@ -60,6 +62,7 @@ class phpbb_template_allfolder_test extends phpbb_template_template_test_case
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
$twig = new \phpbb\template\twig\environment(
$config,
+ $filesystem,
$path_helper,
$container,
$cache_path,
diff --git a/tests/template/template_events_test.php b/tests/template/template_events_test.php
index 6d1b7253e3..285e82188b 100644
--- a/tests/template/template_events_test.php
+++ b/tests/template/template_events_test.php
@@ -138,6 +138,8 @@ Zeta test event in all',
$this->extension_manager = new phpbb_mock_filesystem_extension_manager(
dirname(__FILE__) . "/datasets/$dataset/"
);
+
+ $filesystem = new \phpbb\filesystem\filesystem();
$path_helper = new \phpbb\path_helper(
new \phpbb\symfony_request(
new phpbb_mock_request()
@@ -154,6 +156,7 @@ Zeta test event in all',
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
$twig = new \phpbb\template\twig\environment(
$config,
+ $filesystem,
$path_helper,
$container,
$cache_path,
diff --git a/tests/template/template_includecss_test.php b/tests/template/template_includecss_test.php
index 7a73d1f888..8c398d992b 100644
--- a/tests/template/template_includecss_test.php
+++ b/tests/template/template_includecss_test.php
@@ -28,11 +28,13 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te
$defaults = $this->config_defaults();
$config = new \phpbb\config\config(array_merge($defaults, $new_config));
+ $filesystem = new \phpbb\filesystem\filesystem();
+
$this->phpbb_path_helper = new \phpbb\path_helper(
new \phpbb\symfony_request(
new phpbb_mock_request()
),
- new \phpbb\filesystem\filesystem(),
+ $filesystem,
$this->getMock('\phpbb\request\request'),
$phpbb_root_path,
$phpEx
@@ -46,6 +48,7 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
$twig = new \phpbb\template\twig\environment(
$config,
+ $filesystem,
$this->phpbb_path_helper,
$container,
$cache_path,
diff --git a/tests/template/template_test_case.php b/tests/template/template_test_case.php
index 7e2020ba09..b1826571af 100644
--- a/tests/template/template_test_case.php
+++ b/tests/template/template_test_case.php
@@ -82,11 +82,13 @@ class phpbb_template_template_test_case extends phpbb_test_case
$user = new \phpbb\user($lang, '\phpbb\datetime');
$this->user = $user;
+ $filesystem = new \phpbb\filesystem\filesystem();
+
$path_helper = new \phpbb\path_helper(
new \phpbb\symfony_request(
new phpbb_mock_request()
),
- new \phpbb\filesystem\filesystem(),
+ $filesystem,
$this->getMock('\phpbb\request\request'),
$phpbb_root_path,
$phpEx
@@ -100,6 +102,7 @@ class phpbb_template_template_test_case extends phpbb_test_case
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
$twig = new \phpbb\template\twig\environment(
$config,
+ $filesystem,
$path_helper,
$container,
$cache_path,
diff --git a/tests/template/template_test_case_with_tree.php b/tests/template/template_test_case_with_tree.php
index eab83f379a..d0c49006fd 100644
--- a/tests/template/template_test_case_with_tree.php
+++ b/tests/template/template_test_case_with_tree.php
@@ -22,11 +22,13 @@ class phpbb_template_template_test_case_with_tree extends phpbb_template_templat
$defaults = $this->config_defaults();
$config = new \phpbb\config\config(array_merge($defaults, $new_config));
+ $filesystem = new \phpbb\filesystem\filesystem();
+
$this->phpbb_path_helper = new \phpbb\path_helper(
new \phpbb\symfony_request(
new phpbb_mock_request()
),
- new \phpbb\filesystem\filesystem(),
+ $filesystem,
$this->getMock('\phpbb\request\request'),
$phpbb_root_path,
$phpEx
@@ -41,6 +43,7 @@ class phpbb_template_template_test_case_with_tree extends phpbb_template_templat
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
$twig = new \phpbb\template\twig\environment(
$config,
+ $filesystem,
$this->phpbb_path_helper,
$container,
$cache_path,