mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
Merge pull request #4859 from rubencm/ticket/15253
[ticket/15253] Add storage abstraction * github.com:phpbb/phpbb: (26 commits) [ticket/15253] Fix code style [ticket/15253] Fix rebase [ticket/15253] Add create dir method [ticket/15253] Remove delete dir method [ticket/15253] Fix get contents method [ticket/15253] PHP 7.2 compatibility [ticket/15253] Fix method visibility [ticket/15253] Add old tests [ticket/15253] Fix code [ticket/15253] Add missing return [ticket/15253] Make symfony_filesystem variable static [ticket/15253] Fix test for <php7.0 [ticket/15253] Replace realpath with helper [ticket/15253] Update tests [ticket/15253] Update imports [ticket/15253] Add language strings [ticket/15253] Fix code style [ticket/15253] Move storage helper to filesystem [ticket/15253] Move storage helper to filesystem [ticket/15253] Add experimental annotation ...
This commit is contained in:
commit
51d42b2ced
70 changed files with 1203 additions and 409 deletions
|
@ -65,8 +65,7 @@ if (!defined('PHPBB_INSTALLED'))
|
|||
|
||||
// Eliminate . and .. from the path
|
||||
require($phpbb_root_path . 'phpbb/filesystem.' . $phpEx);
|
||||
$phpbb_filesystem = new phpbb\filesystem\filesystem();
|
||||
$script_path = $phpbb_filesystem->clean_path($script_path);
|
||||
$script_path = \phpbb\filesystem\helper::clean_path($script_path);
|
||||
|
||||
$url = (($secure) ? 'https://' : 'http://') . $server_name;
|
||||
|
||||
|
|
|
@ -105,7 +105,6 @@ services:
|
|||
file_locator:
|
||||
class: phpbb\routing\file_locator
|
||||
arguments:
|
||||
- '@filesystem'
|
||||
- '%core.root_path%'
|
||||
|
||||
group_helper:
|
||||
|
@ -129,7 +128,6 @@ services:
|
|||
class: phpbb\path_helper
|
||||
arguments:
|
||||
- '@symfony_request'
|
||||
- '@filesystem'
|
||||
- '@request'
|
||||
- '%core.root_path%'
|
||||
- '%core.php_ext%'
|
||||
|
|
|
@ -68,5 +68,3 @@ services:
|
|||
|
||||
viewonline_helper:
|
||||
class: phpbb\viewonline_helper
|
||||
arguments:
|
||||
- '@filesystem'
|
||||
|
|
|
@ -5,7 +5,6 @@ services:
|
|||
- '@service_container'
|
||||
- '@dbal.conn'
|
||||
- '@config'
|
||||
- '@filesystem'
|
||||
- '%tables.ext%'
|
||||
- '%core.root_path%'
|
||||
- '%core.php_ext%'
|
||||
|
|
|
@ -23,7 +23,6 @@ services:
|
|||
- '@router'
|
||||
- '@symfony_request'
|
||||
- '@request'
|
||||
- '@filesystem'
|
||||
- '%core.root_path%'
|
||||
- '%core.php_ext%'
|
||||
|
||||
|
|
|
@ -24,8 +24,6 @@ services:
|
|||
|
||||
template.twig.loader:
|
||||
class: phpbb\template\twig\loader
|
||||
arguments:
|
||||
- '@filesystem'
|
||||
|
||||
template.twig.extensions.collection:
|
||||
class: phpbb\di\service_collection
|
||||
|
|
|
@ -31,7 +31,6 @@ services:
|
|||
file_locator:
|
||||
class: phpbb\routing\file_locator
|
||||
arguments:
|
||||
- '@filesystem'
|
||||
- '%core.root_path%'
|
||||
|
||||
kernel_exception_subscriber:
|
||||
|
@ -50,7 +49,6 @@ services:
|
|||
class: phpbb\path_helper
|
||||
arguments:
|
||||
- '@symfony_request'
|
||||
- '@filesystem'
|
||||
- '@request'
|
||||
- '%core.root_path%'
|
||||
- '%core.php_ext%'
|
||||
|
|
|
@ -44,7 +44,7 @@ require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
|
|||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
|
||||
$phpbb_class_loader->register();
|
||||
|
||||
$finder = new \phpbb\finder(new \phpbb\filesystem\filesystem(), $phpbb_root_path);
|
||||
$finder = new \phpbb\finder($phpbb_root_path);
|
||||
$classes = $finder->core_path('phpbb/')
|
||||
->directory('/db/migration/data')
|
||||
->get_classes();
|
||||
|
|
|
@ -62,7 +62,7 @@ echo "USE $dbname;$newline$newline";
|
|||
|
||||
@set_time_limit(0);
|
||||
|
||||
$finder = new \phpbb\finder(new \phpbb\filesystem\filesystem(), $phpbb_root_path);
|
||||
$finder = new \phpbb\finder($phpbb_root_path);
|
||||
$classes = $finder->core_path('phpbb/')
|
||||
->directory('/db/migration/data')
|
||||
->get_classes();
|
||||
|
|
|
@ -156,9 +156,7 @@ class bbcode
|
|||
$phpbb_container->get('path_helper'),
|
||||
$phpbb_container->getParameter('core.cache_dir'),
|
||||
$phpbb_container->get('ext.manager'),
|
||||
new \phpbb\template\twig\loader(
|
||||
$phpbb_filesystem
|
||||
)
|
||||
new \phpbb\template\twig\loader()
|
||||
),
|
||||
$phpbb_container->getParameter('core.cache_dir'),
|
||||
$phpbb_container->get('user'),
|
||||
|
|
|
@ -3479,15 +3479,7 @@ function phpbb_filter_root_path($errfile)
|
|||
|
||||
if (empty($root_path))
|
||||
{
|
||||
if ($phpbb_filesystem)
|
||||
{
|
||||
$root_path = $phpbb_filesystem->realpath(dirname(__FILE__) . '/../');
|
||||
}
|
||||
else
|
||||
{
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$root_path = $filesystem->realpath(dirname(__FILE__) . '/../');
|
||||
}
|
||||
$root_path = \phpbb\filesystem\helper::realpath(dirname(__FILE__) . '/../');
|
||||
}
|
||||
|
||||
return str_replace(array($root_path, '\\'), array('[ROOT]', '/'), $errfile);
|
||||
|
|
|
@ -87,7 +87,7 @@ function phpbb_check_hash($password, $hash)
|
|||
/**
|
||||
* Eliminates useless . and .. components from specified path.
|
||||
*
|
||||
* Deprecated, use filesystem class instead
|
||||
* Deprecated, use storage helper class instead
|
||||
*
|
||||
* @param string $path Path to clean
|
||||
* @return string Cleaned path
|
||||
|
@ -96,36 +96,7 @@ function phpbb_check_hash($password, $hash)
|
|||
*/
|
||||
function phpbb_clean_path($path)
|
||||
{
|
||||
global $phpbb_path_helper, $phpbb_container;
|
||||
|
||||
if (!$phpbb_path_helper && $phpbb_container)
|
||||
{
|
||||
/* @var $phpbb_path_helper \phpbb\path_helper */
|
||||
$phpbb_path_helper = $phpbb_container->get('path_helper');
|
||||
}
|
||||
else if (!$phpbb_path_helper)
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
// The container is not yet loaded, use a new instance
|
||||
if (!class_exists('\phpbb\path_helper'))
|
||||
{
|
||||
require($phpbb_root_path . 'phpbb/path_helper.' . $phpEx);
|
||||
}
|
||||
|
||||
$request = new phpbb\request\request();
|
||||
$phpbb_path_helper = new phpbb\path_helper(
|
||||
new phpbb\symfony_request(
|
||||
$request
|
||||
),
|
||||
new phpbb\filesystem\filesystem(),
|
||||
$request,
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
);
|
||||
}
|
||||
|
||||
return $phpbb_path_helper->clean_path($path);
|
||||
return \phpbb\filesystem\helper::clean_path($path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -463,25 +434,21 @@ function phpbb_is_writable($file)
|
|||
* @param string $path Path to check absoluteness of
|
||||
* @return boolean
|
||||
*
|
||||
* @deprecated 3.2.0-dev use \phpbb\filesystem\filesystem::is_absolute_path() instead
|
||||
* @deprecated 3.2.0-dev use \phpbb\filesystem\helper::is_absolute_path() instead
|
||||
*/
|
||||
function phpbb_is_absolute($path)
|
||||
{
|
||||
global $phpbb_filesystem;
|
||||
|
||||
return $phpbb_filesystem->is_absolute_path($path);
|
||||
return \phpbb\filesystem\helper::is_absolute_path($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* A wrapper for realpath
|
||||
*
|
||||
* @deprecated 3.2.0-dev use \phpbb\filesystem\filesystem::realpath() instead
|
||||
* @deprecated 3.2.0-dev use \phpbb\filesystem\helper::realpath() instead
|
||||
*/
|
||||
function phpbb_realpath($path)
|
||||
{
|
||||
global $phpbb_filesystem;
|
||||
|
||||
return $phpbb_filesystem->realpath($path);
|
||||
return \phpbb\filesystem\helper::realpath($path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -699,9 +699,7 @@ class messenger
|
|||
$phpbb_container->get('path_helper'),
|
||||
$phpbb_container->getParameter('core.template.cache_path'),
|
||||
$phpbb_container->get('ext.manager'),
|
||||
new \phpbb\template\twig\loader(
|
||||
$phpbb_container->get('filesystem')
|
||||
),
|
||||
new \phpbb\template\twig\loader(),
|
||||
$phpbb_dispatcher,
|
||||
array()
|
||||
);
|
||||
|
|
|
@ -727,6 +727,15 @@ $lang = array_merge($lang, array(
|
|||
'SUBJECT' => 'Subject',
|
||||
'SUBMIT' => 'Submit',
|
||||
|
||||
'STORAGE_FILE_EXISTS' => 'File already exists.',
|
||||
'STORAGE_FILE_NO_EXIST' => 'File does not exist.',
|
||||
'STORAGE_CANNOT_WRITE_FILE' => 'Can not write to file.',
|
||||
'STORAGE_CANNOT_READ_FILE' => 'Can not read file.',
|
||||
'STORAGE_CANNOT_DELETE' => 'Can not delete file or folder.',
|
||||
'STORAGE_CANNOT_RENAME' => 'Can not rename file or folder.',
|
||||
'STORAGE_CANNOT_COPY' => 'Can not copy file or folder.',
|
||||
'STORAGE_CANNOT_CREATE_DIR' => 'Can not create directory.',
|
||||
|
||||
'TB' => 'TB',
|
||||
'TERMS_USE' => 'Terms of use',
|
||||
'TEST_CONNECTION' => 'Test connection',
|
||||
|
|
|
@ -29,6 +29,7 @@ use phpbb\exception\runtime_exception;
|
|||
use phpbb\filesystem\filesystem;
|
||||
use phpbb\request\request;
|
||||
use Seld\JsonLint\ParsingException;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Class to install packages through composer while freezing core dependencies.
|
||||
|
@ -108,7 +109,7 @@ class installer
|
|||
$this->root_path = $root_path;
|
||||
$this->request = $request;
|
||||
|
||||
putenv('COMPOSER_HOME=' . $filesystem->realpath($root_path) . '/store/composer');
|
||||
putenv('COMPOSER_HOME=' . filesystem_helper::realpath($root_path) . '/store/composer');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
|
||||
namespace phpbb\di;
|
||||
|
||||
use phpbb\filesystem\filesystem;
|
||||
use Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\ProxyDumper;
|
||||
use Symfony\Component\Config\ConfigCache;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
|
@ -25,6 +24,7 @@ use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
|
|||
use Symfony\Component\Filesystem\Exception\IOException;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
class container_builder
|
||||
{
|
||||
|
@ -180,8 +180,7 @@ class container_builder
|
|||
$this->register_ext_compiler_pass();
|
||||
}
|
||||
|
||||
$filesystem = new filesystem();
|
||||
$loader = new YamlFileLoader($this->container, new FileLocator($filesystem->realpath($this->get_config_path())));
|
||||
$loader = new YamlFileLoader($this->container, new FileLocator(filesystem_helper::realpath($this->get_config_path())));
|
||||
$loader->load($this->container->getParameter('core.environment') . '/config.yml');
|
||||
|
||||
$this->inject_custom_parameters();
|
||||
|
|
|
@ -19,6 +19,7 @@ use Symfony\Component\Console\Output\OutputInterface;
|
|||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Container core extension
|
||||
|
@ -53,8 +54,7 @@ class core extends Extension
|
|||
*/
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$loader = new YamlFileLoader($container, new FileLocator($filesystem->realpath($this->config_path)));
|
||||
$loader = new YamlFileLoader($container, new FileLocator(filesystem_helper::realpath($this->config_path)));
|
||||
$loader->load($container->getParameter('core.environment') . '/container/environment.yml');
|
||||
|
||||
$config = $this->getConfiguration($configs, $container);
|
||||
|
|
|
@ -18,6 +18,7 @@ use Symfony\Component\Config\Resource\FileResource;
|
|||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Container core extension
|
||||
|
@ -94,8 +95,7 @@ class extension_base extends Extension
|
|||
|
||||
if ($services_directory && $services_file)
|
||||
{
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$loader = new YamlFileLoader($container, new FileLocator($filesystem->realpath($services_directory)));
|
||||
$loader = new YamlFileLoader($container, new FileLocator(filesystem_helper::realpath($services_directory)));
|
||||
$loader->load($services_file);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,14 +40,13 @@ class manager
|
|||
* @param ContainerInterface $container A container
|
||||
* @param \phpbb\db\driver\driver_interface $db A database connection
|
||||
* @param \phpbb\config\config $config Config object
|
||||
* @param \phpbb\filesystem\filesystem_interface $filesystem
|
||||
* @param string $extension_table The name of the table holding extensions
|
||||
* @param string $phpbb_root_path Path to the phpbb includes directory.
|
||||
* @param string $php_ext php file extension, defaults to php
|
||||
* @param \phpbb\cache\service $cache A cache instance or null
|
||||
* @param string $cache_name The name of the cache variable, defaults to _ext
|
||||
*/
|
||||
public function __construct(ContainerInterface $container, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\filesystem\filesystem_interface $filesystem, $extension_table, $phpbb_root_path, $php_ext = 'php', \phpbb\cache\service $cache = null, $cache_name = '_ext')
|
||||
public function __construct(ContainerInterface $container, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, $extension_table, $phpbb_root_path, $php_ext = 'php', \phpbb\cache\service $cache = null, $cache_name = '_ext')
|
||||
{
|
||||
$this->cache = $cache;
|
||||
$this->cache_name = $cache_name;
|
||||
|
@ -55,7 +54,6 @@ class manager
|
|||
$this->container = $container;
|
||||
$this->db = $db;
|
||||
$this->extension_table = $extension_table;
|
||||
$this->filesystem = $filesystem;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
$this->php_ext = $php_ext;
|
||||
|
||||
|
@ -619,7 +617,7 @@ class manager
|
|||
*/
|
||||
public function get_finder($use_all_available = false)
|
||||
{
|
||||
$finder = new \phpbb\finder($this->filesystem, $this->phpbb_root_path, $this->cache, $this->php_ext, $this->cache_name . '_finder');
|
||||
$finder = new \phpbb\finder($this->phpbb_root_path, $this->cache, $this->php_ext, $this->cache_name . '_finder');
|
||||
if ($use_all_available)
|
||||
{
|
||||
$finder->set_extensions(array_keys($this->all_available()));
|
||||
|
|
|
@ -13,7 +13,9 @@
|
|||
|
||||
namespace phpbb\filesystem\exception;
|
||||
|
||||
class filesystem_exception extends \phpbb\exception\runtime_exception
|
||||
use phpbb\exception\runtime_exception;
|
||||
|
||||
class filesystem_exception extends runtime_exception
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -24,7 +26,7 @@ class filesystem_exception extends \phpbb\exception\runtime_exception
|
|||
* @param \Exception $previous The previous runtime_exception used for the runtime_exception chaining.
|
||||
* @param integer $code The Exception code.
|
||||
*/
|
||||
public function __construct($message = "", $filename = '', $parameters = array(), \Exception $previous = null, $code = 0)
|
||||
public function __construct($message = '', $filename = '', $parameters = array(), \Exception $previous = null, $code = 0)
|
||||
{
|
||||
parent::__construct($message, array_merge(array('filename' => $filename), $parameters), $previous, $code);
|
||||
}
|
||||
|
@ -36,7 +38,7 @@ class filesystem_exception extends \phpbb\exception\runtime_exception
|
|||
*/
|
||||
public function get_filename()
|
||||
{
|
||||
$parameters = parent::get_parameters();
|
||||
$parameters = $this->get_parameters();
|
||||
return $parameters['filename'];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
namespace phpbb\filesystem;
|
||||
|
||||
use Symfony\Component\Filesystem\Exception\IOException;
|
||||
use phpbb\filesystem\exception\filesystem_exception;
|
||||
|
||||
/**
|
||||
|
@ -60,7 +61,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->chgrp($files, $group, $recursive);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
// Try to recover filename
|
||||
// By the time this is written that is at the end of the message
|
||||
|
@ -146,7 +147,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->chown($files, $user, $recursive);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
// Try to recover filename
|
||||
// By the time this is written that is at the end of the message
|
||||
|
@ -162,26 +163,7 @@ class filesystem implements filesystem_interface
|
|||
*/
|
||||
public function clean_path($path)
|
||||
{
|
||||
$exploded = explode('/', $path);
|
||||
$filtered = array();
|
||||
foreach ($exploded as $part)
|
||||
{
|
||||
if ($part === '.' && !empty($filtered))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($part === '..' && !empty($filtered) && $filtered[count($filtered) - 1] !== '.' && $filtered[count($filtered) - 1] !== '..')
|
||||
{
|
||||
array_pop($filtered);
|
||||
}
|
||||
else
|
||||
{
|
||||
$filtered[] = $part;
|
||||
}
|
||||
}
|
||||
$path = implode('/', $filtered);
|
||||
return $path;
|
||||
return helper::clean_path($path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -193,7 +175,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->copy($origin_file, $target_file, $override);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
throw new filesystem_exception('CANNOT_COPY_FILES', '', array(), $e);
|
||||
}
|
||||
|
@ -208,7 +190,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->dumpFile($filename, $content);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
throw new filesystem_exception('CANNOT_DUMP_FILE', $filename, array(), $e);
|
||||
}
|
||||
|
@ -227,7 +209,7 @@ class filesystem implements filesystem_interface
|
|||
*/
|
||||
public function is_absolute_path($path)
|
||||
{
|
||||
return (isset($path[0]) && $path[0] === '/' || preg_match('#^[a-z]:[/\\\]#i', $path)) ? true : false;
|
||||
return helper::is_absolute_path($path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -305,7 +287,7 @@ class filesystem implements filesystem_interface
|
|||
*/
|
||||
public function make_path_relative($end_path, $start_path)
|
||||
{
|
||||
return $this->symfony_filesystem->makePathRelative($end_path, $start_path);
|
||||
return helper::make_path_relative($end_path, $start_path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -317,7 +299,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->mirror($origin_dir, $target_dir, $iterator, $options);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
$msg = $e->getMessage();
|
||||
$filename = substr($msg, strpos($msg, '"'), strrpos($msg, '"'));
|
||||
|
@ -335,7 +317,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->mkdir($dirs, $mode);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
$msg = $e->getMessage();
|
||||
$filename = substr($msg, strpos($msg, '"'), strrpos($msg, '"'));
|
||||
|
@ -486,27 +468,7 @@ class filesystem implements filesystem_interface
|
|||
*/
|
||||
public function realpath($path)
|
||||
{
|
||||
if (!function_exists('realpath'))
|
||||
{
|
||||
return $this->phpbb_own_realpath($path);
|
||||
}
|
||||
|
||||
$realpath = realpath($path);
|
||||
|
||||
// Strangely there are provider not disabling realpath but returning strange values. :o
|
||||
// We at least try to cope with them.
|
||||
if ((!$this->is_absolute_path($path) && $realpath === $path) || $realpath === false)
|
||||
{
|
||||
return $this->phpbb_own_realpath($path);
|
||||
}
|
||||
|
||||
// Check for DIRECTORY_SEPARATOR at the end (and remove it!)
|
||||
if (substr($realpath, -1) === DIRECTORY_SEPARATOR)
|
||||
{
|
||||
$realpath = substr($realpath, 0, -1);
|
||||
}
|
||||
|
||||
return $realpath;
|
||||
return helper::realpath($path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -518,7 +480,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->remove($files);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
// Try to recover filename
|
||||
// By the time this is written that is at the end of the message
|
||||
|
@ -538,7 +500,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->rename($origin, $target, $overwrite);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
$msg = $e->getMessage();
|
||||
$filename = substr($msg, strpos($msg, '"'), strrpos($msg, '"'));
|
||||
|
@ -556,7 +518,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->symlink($origin_dir, $target_dir, $copy_on_windows);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
throw new filesystem_exception('CANNOT_CREATE_SYMLINK', $origin_dir, array(), $e);
|
||||
}
|
||||
|
@ -571,7 +533,7 @@ class filesystem implements filesystem_interface
|
|||
{
|
||||
$this->symfony_filesystem->touch($files, $time, $access_time);
|
||||
}
|
||||
catch (\Symfony\Component\Filesystem\Exception\IOException $e)
|
||||
catch (IOException $e)
|
||||
{
|
||||
// Try to recover filename
|
||||
// By the time this is written that is at the end of the message
|
||||
|
@ -639,6 +601,8 @@ class filesystem implements filesystem_interface
|
|||
/**
|
||||
* Try to resolve real path when PHP's realpath failes to do so
|
||||
*
|
||||
* @deprecated 3.3.0-a1 (To be removed: 4.0.0)
|
||||
*
|
||||
* @param string $path
|
||||
* @return bool|string
|
||||
*/
|
||||
|
@ -764,6 +728,8 @@ class filesystem implements filesystem_interface
|
|||
/**
|
||||
* Try to resolve symlinks in path
|
||||
*
|
||||
* @deprecated 3.3.0-a1 (To be removed: 4.0.0)
|
||||
*
|
||||
* @param string $path The path to resolve
|
||||
* @param string $prefix The path prefix (on windows the drive letter)
|
||||
* @param bool $absolute Whether or not the path is absolute
|
||||
|
@ -774,143 +740,6 @@ class filesystem implements filesystem_interface
|
|||
*/
|
||||
protected function resolve_path($path, $prefix = '', $absolute = false, $return_array = false)
|
||||
{
|
||||
if ($return_array)
|
||||
{
|
||||
$path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
|
||||
}
|
||||
|
||||
trim ($path, '/');
|
||||
$path_parts = explode('/', $path);
|
||||
$resolved = array();
|
||||
$resolved_path = $prefix;
|
||||
$file_found = false;
|
||||
|
||||
foreach ($path_parts as $path_part)
|
||||
{
|
||||
if ($file_found)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($path_part) || ($path_part === '.' && ($absolute || !empty($resolved))))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if ($absolute && $path_part === '..')
|
||||
{
|
||||
if (empty($resolved))
|
||||
{
|
||||
// No directories above root
|
||||
return false;
|
||||
}
|
||||
|
||||
array_pop($resolved);
|
||||
$resolved_path = false;
|
||||
}
|
||||
else if ($path_part === '..' && !empty($resolved) && !in_array($resolved[count($resolved) - 1], array('.', '..')))
|
||||
{
|
||||
array_pop($resolved);
|
||||
$resolved_path = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($resolved_path === false)
|
||||
{
|
||||
if (empty($resolved))
|
||||
{
|
||||
$resolved_path = ($absolute) ? $prefix . '/' . $path_part : $path_part;
|
||||
}
|
||||
else
|
||||
{
|
||||
$tmp_array = $resolved;
|
||||
if ($absolute)
|
||||
{
|
||||
array_unshift($tmp_array, $prefix);
|
||||
}
|
||||
|
||||
$resolved_path = implode('/', $tmp_array);
|
||||
}
|
||||
}
|
||||
|
||||
$current_path = $resolved_path . '/' . $path_part;
|
||||
|
||||
// Resolve symlinks
|
||||
if (is_link($current_path))
|
||||
{
|
||||
if (!function_exists('readlink'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$link = readlink($current_path);
|
||||
|
||||
// Is link has an absolute path in it?
|
||||
if ($this->is_absolute_path($link))
|
||||
{
|
||||
if (defined('PHP_WINDOWS_VERSION_MAJOR'))
|
||||
{
|
||||
$prefix = $link[0] . ':';
|
||||
$link = substr($link, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
$prefix = '';
|
||||
}
|
||||
|
||||
$resolved = $this->resolve_path($link, $prefix, true, true);
|
||||
$absolute = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$resolved = $this->resolve_path($resolved_path . '/' . $link, $prefix, $absolute, true);
|
||||
}
|
||||
|
||||
if (!$resolved)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$resolved_path = false;
|
||||
}
|
||||
else if (is_dir($current_path . '/'))
|
||||
{
|
||||
$resolved[] = $path_part;
|
||||
$resolved_path = $current_path;
|
||||
}
|
||||
else if (is_file($current_path))
|
||||
{
|
||||
$resolved[] = $path_part;
|
||||
$resolved_path = $current_path;
|
||||
$file_found = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If at the end of the path there were a .. or .
|
||||
// we need to build the path again.
|
||||
// Only doing this when a string is expected in return
|
||||
if ($resolved_path === false && $return_array === false)
|
||||
{
|
||||
if (empty($resolved))
|
||||
{
|
||||
$resolved_path = ($absolute) ? $prefix . '/' : './';
|
||||
}
|
||||
else
|
||||
{
|
||||
$tmp_array = $resolved;
|
||||
if ($absolute)
|
||||
{
|
||||
array_unshift($tmp_array, $prefix);
|
||||
}
|
||||
|
||||
$resolved_path = implode('/', $tmp_array);
|
||||
}
|
||||
}
|
||||
|
||||
return ($return_array) ? $resolved : $resolved_path;
|
||||
return helper::resolve_path($path, $prefix, $absolute, $return_array);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -89,6 +89,8 @@ interface filesystem_interface
|
|||
/**
|
||||
* Eliminates useless . and .. components from specified path.
|
||||
*
|
||||
* @deprecated 3.3.0-a1 (To be removed: 4.0.0)
|
||||
*
|
||||
* @param string $path Path to clean
|
||||
*
|
||||
* @return string Cleaned path
|
||||
|
@ -132,6 +134,8 @@ interface filesystem_interface
|
|||
/**
|
||||
* Checks if a path is absolute or not
|
||||
*
|
||||
* @deprecated 3.3.0-a1 (To be removed: 4.0.0)
|
||||
*
|
||||
* @param string $path Path to check
|
||||
*
|
||||
* @return bool true if the path is absolute, false otherwise
|
||||
|
@ -161,6 +165,8 @@ interface filesystem_interface
|
|||
/**
|
||||
* Given an existing path, convert it to a path relative to a given starting path
|
||||
*
|
||||
* @deprecated 3.3.0-a1 (To be removed: 4.0.0)
|
||||
*
|
||||
* @param string $end_path Absolute path of target
|
||||
* @param string $start_path Absolute path where traversal begins
|
||||
*
|
||||
|
@ -228,6 +234,8 @@ interface filesystem_interface
|
|||
/**
|
||||
* A wrapper for PHP's realpath
|
||||
*
|
||||
* @deprecated 3.3.0-a1 (To be removed: 4.0.0)
|
||||
*
|
||||
* Try to resolve realpath when PHP's realpath is not available, or
|
||||
* known to be buggy.
|
||||
*
|
||||
|
|
385
phpBB/phpbb/filesystem/helper.php
Normal file
385
phpBB/phpbb/filesystem/helper.php
Normal file
|
@ -0,0 +1,385 @@
|
|||
<?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 phpbb\filesystem;
|
||||
|
||||
use Symfony\Component\Filesystem\Filesystem as symfony_filesystem;
|
||||
|
||||
class helper
|
||||
{
|
||||
/**
|
||||
* @var \Symfony\Component\Filesystem\Filesystem
|
||||
*/
|
||||
protected static $symfony_filesystem;
|
||||
|
||||
/**
|
||||
* Eliminates useless . and .. components from specified path.
|
||||
*
|
||||
* @param string $path Path to clean
|
||||
*
|
||||
* @return string Cleaned path
|
||||
*/
|
||||
public static function clean_path($path)
|
||||
{
|
||||
$exploded = explode('/', $path);
|
||||
$filtered = array();
|
||||
foreach ($exploded as $part)
|
||||
{
|
||||
if ($part === '.' && !empty($filtered))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($part === '..' && !empty($filtered) && $filtered[count($filtered) - 1] !== '.' && $filtered[count($filtered) - 1] !== '..')
|
||||
{
|
||||
array_pop($filtered);
|
||||
}
|
||||
else
|
||||
{
|
||||
$filtered[] = $part;
|
||||
}
|
||||
}
|
||||
$path = implode('/', $filtered);
|
||||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a path is absolute or not
|
||||
*
|
||||
* @param string $path Path to check
|
||||
*
|
||||
* @return bool true if the path is absolute, false otherwise
|
||||
*/
|
||||
public static function is_absolute_path($path)
|
||||
{
|
||||
return (isset($path[0]) && $path[0] === '/' || preg_match('#^[a-z]:[/\\\]#i', $path)) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to resolve real path when PHP's realpath failes to do so
|
||||
*
|
||||
* @param string $path
|
||||
* @return bool|string
|
||||
*/
|
||||
protected static function phpbb_own_realpath($path)
|
||||
{
|
||||
// Replace all directory separators with '/'
|
||||
$path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
|
||||
|
||||
$is_absolute_path = false;
|
||||
$path_prefix = '';
|
||||
|
||||
if (self::is_absolute_path($path))
|
||||
{
|
||||
$is_absolute_path = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (function_exists('getcwd'))
|
||||
{
|
||||
$working_directory = str_replace(DIRECTORY_SEPARATOR, '/', getcwd());
|
||||
}
|
||||
|
||||
//
|
||||
// From this point on we really just guessing
|
||||
// If chdir were called we screwed
|
||||
//
|
||||
else if (function_exists('debug_backtrace'))
|
||||
{
|
||||
$call_stack = debug_backtrace(0);
|
||||
$working_directory = str_replace(DIRECTORY_SEPARATOR, '/', dirname($call_stack[count($call_stack) - 1]['file']));
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Assuming that the working directory is phpBB root
|
||||
// we could use this as a fallback, when phpBB will use controllers
|
||||
// everywhere this will be a safe assumption
|
||||
//
|
||||
//$dir_parts = explode(DIRECTORY_SEPARATOR, __DIR__);
|
||||
//$namespace_parts = explode('\\', trim(__NAMESPACE__, '\\'));
|
||||
|
||||
//$namespace_part_count = count($namespace_parts);
|
||||
|
||||
// Check if we still loading from root
|
||||
//if (array_slice($dir_parts, -$namespace_part_count) === $namespace_parts)
|
||||
//{
|
||||
// $working_directory = implode('/', array_slice($dir_parts, 0, -$namespace_part_count));
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// $working_directory = false;
|
||||
//}
|
||||
|
||||
$working_directory = false;
|
||||
}
|
||||
|
||||
if ($working_directory !== false)
|
||||
{
|
||||
$is_absolute_path = true;
|
||||
$path = $working_directory . '/' . $path;
|
||||
}
|
||||
}
|
||||
|
||||
if ($is_absolute_path)
|
||||
{
|
||||
if (defined('PHP_WINDOWS_VERSION_MAJOR'))
|
||||
{
|
||||
$path_prefix = $path[0] . ':';
|
||||
$path = substr($path, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
$path_prefix = '';
|
||||
}
|
||||
}
|
||||
|
||||
$resolved_path = self::resolve_path($path, $path_prefix, $is_absolute_path);
|
||||
if ($resolved_path === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!@file_exists($resolved_path) || (!@is_dir($resolved_path . '/') && !is_file($resolved_path)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return OS specific directory separators
|
||||
$resolved = str_replace('/', DIRECTORY_SEPARATOR, $resolved_path);
|
||||
|
||||
// Check for DIRECTORY_SEPARATOR at the end (and remove it!)
|
||||
if (substr($resolved, -1) === DIRECTORY_SEPARATOR)
|
||||
{
|
||||
return substr($resolved, 0, -1);
|
||||
}
|
||||
|
||||
return $resolved;
|
||||
}
|
||||
|
||||
/**
|
||||
* A wrapper for PHP's realpath
|
||||
*
|
||||
* Try to resolve realpath when PHP's realpath is not available, or
|
||||
* known to be buggy.
|
||||
*
|
||||
* @param string $path Path to resolve
|
||||
*
|
||||
* @return string Resolved path
|
||||
*/
|
||||
public static function realpath($path)
|
||||
{
|
||||
if (!function_exists('realpath'))
|
||||
{
|
||||
return self::phpbb_own_realpath($path);
|
||||
}
|
||||
|
||||
$realpath = realpath($path);
|
||||
|
||||
// Strangely there are provider not disabling realpath but returning strange values. :o
|
||||
// We at least try to cope with them.
|
||||
if ((!self::is_absolute_path($path) && $realpath === $path) || $realpath === false)
|
||||
{
|
||||
return self::phpbb_own_realpath($path);
|
||||
}
|
||||
|
||||
// Check for DIRECTORY_SEPARATOR at the end (and remove it!)
|
||||
if (substr($realpath, -1) === DIRECTORY_SEPARATOR)
|
||||
{
|
||||
$realpath = substr($realpath, 0, -1);
|
||||
}
|
||||
|
||||
return $realpath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given an existing path, convert it to a path relative to a given starting path
|
||||
*
|
||||
* @param string $end_path Absolute path of target
|
||||
* @param string $start_path Absolute path where traversal begins
|
||||
*
|
||||
* @return string Path of target relative to starting path
|
||||
*/
|
||||
public static function make_path_relative($end_path, $start_path)
|
||||
{
|
||||
return self::get_symfony_filesystem()->makePathRelative($end_path, $start_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to resolve symlinks in path
|
||||
*
|
||||
* @param string $path The path to resolve
|
||||
* @param string $prefix The path prefix (on windows the drive letter)
|
||||
* @param bool $absolute Whether or not the path is absolute
|
||||
* @param bool $return_array Whether or not to return path parts
|
||||
*
|
||||
* @return string|array|bool returns the resolved path or an array of parts of the path if $return_array is true
|
||||
* or false if path cannot be resolved
|
||||
*/
|
||||
public static function resolve_path($path, $prefix = '', $absolute = false, $return_array = false)
|
||||
{
|
||||
if ($return_array)
|
||||
{
|
||||
$path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
|
||||
}
|
||||
|
||||
trim($path, '/');
|
||||
$path_parts = explode('/', $path);
|
||||
$resolved = array();
|
||||
$resolved_path = $prefix;
|
||||
$file_found = false;
|
||||
|
||||
foreach ($path_parts as $path_part)
|
||||
{
|
||||
if ($file_found)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($path_part) || ($path_part === '.' && ($absolute || !empty($resolved))))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if ($absolute && $path_part === '..')
|
||||
{
|
||||
if (empty($resolved))
|
||||
{
|
||||
// No directories above root
|
||||
return false;
|
||||
}
|
||||
|
||||
array_pop($resolved);
|
||||
$resolved_path = false;
|
||||
}
|
||||
else if ($path_part === '..' && !empty($resolved) && !in_array($resolved[count($resolved) - 1], array('.', '..')))
|
||||
{
|
||||
array_pop($resolved);
|
||||
$resolved_path = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($resolved_path === false)
|
||||
{
|
||||
if (empty($resolved))
|
||||
{
|
||||
$resolved_path = ($absolute) ? $prefix . '/' . $path_part : $path_part;
|
||||
}
|
||||
else
|
||||
{
|
||||
$tmp_array = $resolved;
|
||||
if ($absolute)
|
||||
{
|
||||
array_unshift($tmp_array, $prefix);
|
||||
}
|
||||
|
||||
$resolved_path = implode('/', $tmp_array);
|
||||
}
|
||||
}
|
||||
|
||||
$current_path = $resolved_path . '/' . $path_part;
|
||||
|
||||
// Resolve symlinks
|
||||
if (is_link($current_path))
|
||||
{
|
||||
if (!function_exists('readlink'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$link = readlink($current_path);
|
||||
|
||||
// Is link has an absolute path in it?
|
||||
if (self::is_absolute_path($link))
|
||||
{
|
||||
if (defined('PHP_WINDOWS_VERSION_MAJOR'))
|
||||
{
|
||||
$prefix = $link[0] . ':';
|
||||
$link = substr($link, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
$prefix = '';
|
||||
}
|
||||
|
||||
$resolved = self::resolve_path($link, $prefix, true, true);
|
||||
$absolute = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$resolved = self::resolve_path($resolved_path . '/' . $link, $prefix, $absolute, true);
|
||||
}
|
||||
|
||||
if (!$resolved)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$resolved_path = false;
|
||||
}
|
||||
else if (is_dir($current_path . '/'))
|
||||
{
|
||||
$resolved[] = $path_part;
|
||||
$resolved_path = $current_path;
|
||||
}
|
||||
else if (is_file($current_path))
|
||||
{
|
||||
$resolved[] = $path_part;
|
||||
$resolved_path = $current_path;
|
||||
$file_found = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If at the end of the path there were a .. or .
|
||||
// we need to build the path again.
|
||||
// Only doing this when a string is expected in return
|
||||
if ($resolved_path === false && $return_array === false)
|
||||
{
|
||||
if (empty($resolved))
|
||||
{
|
||||
$resolved_path = ($absolute) ? $prefix . '/' : './';
|
||||
}
|
||||
else
|
||||
{
|
||||
$tmp_array = $resolved;
|
||||
if ($absolute)
|
||||
{
|
||||
array_unshift($tmp_array, $prefix);
|
||||
}
|
||||
|
||||
$resolved_path = implode('/', $tmp_array);
|
||||
}
|
||||
}
|
||||
|
||||
return $return_array ? $resolved : $resolved_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an instance of symfony's filesystem object.
|
||||
*
|
||||
* @return \Symfony\Component\Filesystem\Filesystem Symfony filesystem
|
||||
*/
|
||||
protected static function get_symfony_filesystem()
|
||||
{
|
||||
if (self::$symfony_filesystem === null)
|
||||
{
|
||||
self::$symfony_filesystem = new symfony_filesystem();
|
||||
}
|
||||
|
||||
return self::$symfony_filesystem;
|
||||
}
|
||||
}
|
|
@ -13,13 +13,14 @@
|
|||
|
||||
namespace phpbb;
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* The finder provides a simple way to locate files in the core and a set of extensions
|
||||
*/
|
||||
class finder
|
||||
{
|
||||
protected $extensions;
|
||||
protected $filesystem;
|
||||
protected $phpbb_root_path;
|
||||
protected $cache;
|
||||
protected $php_ext;
|
||||
|
@ -48,16 +49,14 @@ class finder
|
|||
/**
|
||||
* Creates a new finder instance with its dependencies
|
||||
*
|
||||
* @param \phpbb\filesystem\filesystem_interface $filesystem Filesystem instance
|
||||
* @param string $phpbb_root_path Path to the phpbb root directory
|
||||
* @param \phpbb\cache\service $cache A cache instance or null
|
||||
* @param string $php_ext php file extension
|
||||
* @param string $cache_name The name of the cache variable, defaults to
|
||||
* _ext_finder
|
||||
*/
|
||||
public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, $phpbb_root_path = '', \phpbb\cache\service $cache = null, $php_ext = 'php', $cache_name = '_ext_finder')
|
||||
public function __construct($phpbb_root_path = '', \phpbb\cache\service $cache = null, $php_ext = 'php', $cache_name = '_ext_finder')
|
||||
{
|
||||
$this->filesystem = $filesystem;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
$this->cache = $cache;
|
||||
$this->php_ext = $php_ext;
|
||||
|
@ -244,7 +243,7 @@ class finder
|
|||
*/
|
||||
protected function sanitise_directory($directory)
|
||||
{
|
||||
$directory = $this->filesystem->clean_path($directory);
|
||||
$directory = filesystem_helper::clean_path($directory);
|
||||
$dir_len = strlen($directory);
|
||||
|
||||
if ($dir_len > 1 && $directory[$dir_len - 1] === '/')
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
namespace phpbb\install\helper;
|
||||
|
||||
use phpbb\install\exception\invalid_dbms_exception;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Database related general functionality for installer
|
||||
|
@ -329,7 +330,7 @@ class database
|
|||
|
||||
// Make sure we don't have a daft user who thinks having the SQLite database in the forum directory is a good idea
|
||||
if ($dbms_info['SCHEMA'] === 'sqlite'
|
||||
&& stripos($this->filesystem->realpath($dbhost), $this->filesystem->realpath($this->phpbb_root_path) === 0))
|
||||
&& stripos(filesystem_helper::realpath($dbhost), filesystem_helper::realpath($this->phpbb_root_path) === 0))
|
||||
{
|
||||
$errors[] = array(
|
||||
'title' =>'INST_ERR_DB_FORUM_PATH',
|
||||
|
|
|
@ -183,7 +183,7 @@ class create_schema extends \phpbb\install\task_base
|
|||
include ($this->phpbb_root_path . 'includes/constants.' . $this->php_ext);
|
||||
}
|
||||
|
||||
$finder = new \phpbb\finder($this->filesystem, $this->phpbb_root_path, null, $this->php_ext);
|
||||
$finder = new \phpbb\finder($this->phpbb_root_path, null, $this->php_ext);
|
||||
$migrator_classes = $finder->core_path('phpbb/db/migration/data/')->get_classes();
|
||||
$factory = new \phpbb\db\tools\factory();
|
||||
$db_tools = $factory->get($this->db, true);
|
||||
|
|
|
@ -117,7 +117,7 @@ class create_schema_file extends \phpbb\install\task_base
|
|||
include ($this->phpbb_root_path . 'includes/constants.' . $this->php_ext);
|
||||
}
|
||||
|
||||
$finder = new \phpbb\finder($this->filesystem, $this->phpbb_root_path, null, $this->php_ext);
|
||||
$finder = new \phpbb\finder($this->phpbb_root_path, null, $this->php_ext);
|
||||
$migrator_classes = $finder->core_path('phpbb/db/migration/data/')->get_classes();
|
||||
$factory = new \phpbb\db\tools\factory();
|
||||
$db_tools = $factory->get($this->db, true);
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
namespace phpbb;
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* A class with various functions that are related to paths, files and the filesystem
|
||||
*/
|
||||
|
@ -21,9 +23,6 @@ class path_helper
|
|||
/** @var \phpbb\symfony_request */
|
||||
protected $symfony_request;
|
||||
|
||||
/** @var \phpbb\filesystem\filesystem_interface */
|
||||
protected $filesystem;
|
||||
|
||||
/** @var \phpbb\request\request_interface */
|
||||
protected $request;
|
||||
|
||||
|
@ -43,16 +42,14 @@ class path_helper
|
|||
* Constructor
|
||||
*
|
||||
* @param \phpbb\symfony_request $symfony_request
|
||||
* @param \phpbb\filesystem\filesystem_interface $filesystem
|
||||
* @param \phpbb\request\request_interface $request
|
||||
* @param string $phpbb_root_path Relative path to phpBB root
|
||||
* @param string $php_ext PHP file extension
|
||||
* @param mixed $adm_relative_path Relative path admin path to adm/ root
|
||||
*/
|
||||
public function __construct(\phpbb\symfony_request $symfony_request, \phpbb\filesystem\filesystem_interface $filesystem, \phpbb\request\request_interface $request, $phpbb_root_path, $php_ext, $adm_relative_path = null)
|
||||
public function __construct(\phpbb\symfony_request $symfony_request, \phpbb\request\request_interface $request, $phpbb_root_path, $php_ext, $adm_relative_path = null)
|
||||
{
|
||||
$this->symfony_request = $symfony_request;
|
||||
$this->filesystem = $filesystem;
|
||||
$this->request = $request;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
$this->php_ext = $php_ext;
|
||||
|
@ -117,7 +114,7 @@ class path_helper
|
|||
$path = substr($path, 8);
|
||||
}
|
||||
|
||||
return $this->filesystem->clean_path($web_root_path . $path);
|
||||
return filesystem_helper::clean_path($web_root_path . $path);
|
||||
}
|
||||
|
||||
return $path;
|
||||
|
@ -163,7 +160,7 @@ class path_helper
|
|||
|
||||
// We do not need to escape $path_info, $request_uri and $script_name because we can not find their content in the result.
|
||||
// Path info (e.g. /foo/bar)
|
||||
$path_info = $this->filesystem->clean_path($this->symfony_request->getPathInfo());
|
||||
$path_info = filesystem_helper::clean_path($this->symfony_request->getPathInfo());
|
||||
|
||||
// Full request URI (e.g. phpBB/app.php/foo/bar)
|
||||
$request_uri = $this->symfony_request->getRequestUri();
|
||||
|
@ -178,7 +175,7 @@ class path_helper
|
|||
*/
|
||||
if ($path_info === '/' && preg_match('/app\.' . $this->php_ext . '\/$/', $request_uri))
|
||||
{
|
||||
return $this->web_root_path = $this->filesystem->clean_path('./../' . $this->phpbb_root_path);
|
||||
return $this->web_root_path = filesystem_helper::clean_path('./../' . $this->phpbb_root_path);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -235,7 +232,7 @@ class path_helper
|
|||
}
|
||||
|
||||
// Prepend ../ to the phpbb_root_path as many times as / exists in path_info
|
||||
$this->web_root_path = $this->filesystem->clean_path(
|
||||
$this->web_root_path = filesystem_helper::clean_path(
|
||||
'./' . str_repeat('../', $corrections) . $this->phpbb_root_path
|
||||
);
|
||||
return $this->web_root_path;
|
||||
|
@ -326,7 +323,7 @@ class path_helper
|
|||
// Add length of URL delimiter to position
|
||||
$path = substr($url, $delimiter_position + 3);
|
||||
|
||||
return $scheme . $this->filesystem->clean_path($path);
|
||||
return $scheme . filesystem_helper::clean_path($path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,19 +13,19 @@
|
|||
|
||||
namespace phpbb\routing;
|
||||
|
||||
use phpbb\filesystem\filesystem_interface;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
class file_locator extends FileLocator
|
||||
{
|
||||
public function __construct(filesystem_interface $filesystem, $paths = [])
|
||||
public function __construct($paths = [])
|
||||
{
|
||||
$paths = (array) $paths;
|
||||
$absolute_paths = [];
|
||||
|
||||
foreach ($paths as $path)
|
||||
{
|
||||
$absolute_paths[] = $filesystem->realpath($path);
|
||||
$absolute_paths[] = filesystem_helper::realpath($path);
|
||||
}
|
||||
|
||||
parent::__construct($absolute_paths);
|
||||
|
|
|
@ -15,6 +15,7 @@ namespace phpbb\routing;
|
|||
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Symfony\Component\Routing\RequestContext;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Controller helper class, contains methods that do things for controllers
|
||||
|
@ -43,11 +44,6 @@ class helper
|
|||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* @var \phpbb\filesystem The filesystem object
|
||||
*/
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* phpBB root path
|
||||
* @var string
|
||||
|
@ -67,17 +63,15 @@ class helper
|
|||
* @param \phpbb\routing\router $router phpBB router
|
||||
* @param \phpbb\symfony_request $symfony_request Symfony Request object
|
||||
* @param \phpbb\request\request_interface $request phpBB request object
|
||||
* @param \phpbb\filesystem\filesystem $filesystem The filesystem object
|
||||
* @param string $phpbb_root_path phpBB root path
|
||||
* @param string $php_ext PHP file extension
|
||||
*/
|
||||
public function __construct(\phpbb\config\config $config, \phpbb\routing\router $router, \phpbb\symfony_request $symfony_request, \phpbb\request\request_interface $request, \phpbb\filesystem\filesystem $filesystem, $phpbb_root_path, $php_ext)
|
||||
public function __construct(\phpbb\config\config $config, \phpbb\routing\router $router, \phpbb\symfony_request $symfony_request, \phpbb\request\request_interface $request, $phpbb_root_path, $php_ext)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->router = $router;
|
||||
$this->symfony_request = $symfony_request;
|
||||
$this->request = $request;
|
||||
$this->filesystem = $filesystem;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
$this->php_ext = $php_ext;
|
||||
}
|
||||
|
@ -140,7 +134,7 @@ class helper
|
|||
}
|
||||
}
|
||||
|
||||
$base_url = $this->request->escape($this->filesystem->clean_path($base_url), true);
|
||||
$base_url = $this->request->escape(filesystem_helper::clean_path($base_url), true);
|
||||
|
||||
$context->setBaseUrl($base_url);
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
namespace phpbb;
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Session class
|
||||
*/
|
||||
|
@ -38,7 +40,7 @@ class session
|
|||
*/
|
||||
static function extract_current_page($root_path)
|
||||
{
|
||||
global $request, $symfony_request, $phpbb_filesystem;
|
||||
global $request, $symfony_request;
|
||||
|
||||
$page_array = array();
|
||||
|
||||
|
@ -85,15 +87,15 @@ class session
|
|||
$page_name = (substr($script_name, -1, 1) == '/') ? '' : basename($script_name);
|
||||
$page_name = urlencode(htmlspecialchars($page_name));
|
||||
|
||||
$symfony_request_path = $phpbb_filesystem->clean_path($symfony_request->getPathInfo());
|
||||
$symfony_request_path = filesystem_helper::clean_path($symfony_request->getPathInfo());
|
||||
if ($symfony_request_path !== '/')
|
||||
{
|
||||
$page_name .= str_replace('%2F', '/', urlencode($symfony_request_path));
|
||||
}
|
||||
|
||||
// current directory within the phpBB root (for example: adm)
|
||||
$root_dirs = explode('/', str_replace('\\', '/', $phpbb_filesystem->realpath($root_path)));
|
||||
$page_dirs = explode('/', str_replace('\\', '/', $phpbb_filesystem->realpath('./')));
|
||||
$root_dirs = explode('/', str_replace('\\', '/', filesystem_helper::realpath($root_path)));
|
||||
$page_dirs = explode('/', str_replace('\\', '/', filesystem_helper::realpath('./')));
|
||||
$intersection = array_intersect_assoc($root_dirs, $page_dirs);
|
||||
|
||||
$root_dirs = array_diff_assoc($root_dirs, $intersection);
|
||||
|
|
89
phpBB/phpbb/storage/adapter/adapter_interface.php
Normal file
89
phpBB/phpbb/storage/adapter/adapter_interface.php
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?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 phpbb\storage\adapter;
|
||||
|
||||
interface adapter_interface
|
||||
{
|
||||
/**
|
||||
* Dumps content into a file.
|
||||
*
|
||||
* @param string path The file to be written to.
|
||||
* @param string content The data to write into the file.
|
||||
*
|
||||
* @throws \phpbb\storage\exception\exception When the file already exists
|
||||
* When the file cannot be written
|
||||
*/
|
||||
public function put_contents($path, $content);
|
||||
|
||||
/**
|
||||
* Read the contents of a file
|
||||
*
|
||||
* @param string $path The file to read
|
||||
*
|
||||
* @throws \phpbb\storage\exception\exception When the file dont exists
|
||||
* When cannot read file contents
|
||||
* @return string Returns file contents
|
||||
*
|
||||
*/
|
||||
public function get_contents($path);
|
||||
|
||||
/**
|
||||
* Checks the existence of files or directories.
|
||||
*
|
||||
* @param string $path file/directory to check
|
||||
*
|
||||
* @return bool Returns true if all files/directories exist, false otherwise
|
||||
*/
|
||||
public function exists($path);
|
||||
|
||||
/**
|
||||
* Removes files or directories.
|
||||
*
|
||||
* @param string $path file/directory to remove
|
||||
*
|
||||
* @throws \phpbb\storage\exception\exception When removal fails.
|
||||
*/
|
||||
public function delete($path);
|
||||
|
||||
/**
|
||||
* Rename a file or a directory.
|
||||
*
|
||||
* @param string $path_orig The original file/direcotry
|
||||
* @param string $path_dest The target file/directory
|
||||
*
|
||||
* @throws \phpbb\storage\exception\exception When target exists
|
||||
* When file/directory cannot be renamed
|
||||
*/
|
||||
public function rename($path_orig, $path_dest);
|
||||
|
||||
/**
|
||||
* Copies a file.
|
||||
*
|
||||
* @param string $path_orig The original filename
|
||||
* @param string $path_dest The target filename
|
||||
*
|
||||
* @throws \phpbb\storage\exception\exception When target exists
|
||||
* When the file cannot be copied
|
||||
*/
|
||||
public function copy($path_orig, $path_dest);
|
||||
|
||||
/**
|
||||
* Creates a directory recursively.
|
||||
*
|
||||
* @param string $path The directory path
|
||||
*
|
||||
* @throws \phpbb\storage\exception\exception On any directory creation failure
|
||||
*/
|
||||
public function create_dir($path);
|
||||
}
|
158
phpBB/phpbb/storage/adapter/local.php
Normal file
158
phpBB/phpbb/storage/adapter/local.php
Normal file
|
@ -0,0 +1,158 @@
|
|||
<?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 phpbb\storage\adapter;
|
||||
|
||||
use phpbb\storage\exception\exception;
|
||||
use phpbb\filesystem\exception\filesystem_exception;
|
||||
use phpbb\config\config;
|
||||
use phpbb\filesystem\filesystem;
|
||||
|
||||
/**
|
||||
* @internal Experimental
|
||||
*/
|
||||
class local implements adapter_interface
|
||||
{
|
||||
/**
|
||||
* Filesystem component
|
||||
*
|
||||
* @var \phpbb\filesystem\filesystem
|
||||
*/
|
||||
protected $filesystem;
|
||||
|
||||
/** @var string path */
|
||||
protected $root_path;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct(config $config, filesystem $filesystem, $phpbb_root_path, $path_key)
|
||||
{
|
||||
$this->filesystem = $filesystem;
|
||||
$this->root_path = $phpbb_root_path . $config[$path_key];
|
||||
|
||||
if (substr($this->root_path, -1, 1) != DIRECTORY_SEPARATOR)
|
||||
{
|
||||
$this->root_path = $this->root_path . DIRECTORY_SEPARATOR;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function put_contents($path, $content)
|
||||
{
|
||||
if ($this->exists($path))
|
||||
{
|
||||
throw new exception('STORAGE_FILE_EXISTS', $path);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$this->filesystem->dump_file($this->root_path . $path, $content);
|
||||
}
|
||||
catch (filesystem_exception $e)
|
||||
{
|
||||
throw new exception('STORAGE_CANNOT_WRITE_FILE', $path, array(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_contents($path)
|
||||
{
|
||||
if (!$this->exists($path))
|
||||
{
|
||||
throw new exception('STORAGE_FILE_NO_EXIST', $path);
|
||||
}
|
||||
|
||||
$content = @file_get_contents($this->root_path . $path);
|
||||
|
||||
if ($content === false)
|
||||
{
|
||||
throw new exception('STORAGE_CANNOT_READ_FILE', $path);
|
||||
}
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function exists($path)
|
||||
{
|
||||
return $this->filesystem->exists($this->root_path . $path);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function delete($path)
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->filesystem->remove($this->root_path . $path);
|
||||
}
|
||||
catch (filesystem_exception $e)
|
||||
{
|
||||
throw new exception('STORAGE_CANNOT_DELETE', $path, array(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function rename($path_orig, $path_dest)
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->filesystem->rename($this->root_path . $path_orig, $this->root_path . $path_dest, false);
|
||||
}
|
||||
catch (filesystem_exception $e)
|
||||
{
|
||||
throw new exception('STORAGE_CANNOT_RENAME', $path_orig, array(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function copy($path_orig, $path_dest)
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->filesystem->copy($this->root_path . $path_orig, $this->root_path . $path_dest, false);
|
||||
}
|
||||
catch (filesystem_exception $e)
|
||||
{
|
||||
throw new exception('STORAGE_CANNOT_COPY', $path_orig, array(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function create_dir($path)
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->filesystem->mkdir($this->root_path . $path);
|
||||
}
|
||||
catch (filesystem_exception $e)
|
||||
{
|
||||
throw new exception('STORAGE_CANNOT_CREATE_DIR', $path, array(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
44
phpBB/phpbb/storage/exception/exception.php
Normal file
44
phpBB/phpbb/storage/exception/exception.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?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 phpbb\storage\exception;
|
||||
|
||||
use phpbb\exception\runtime_exception;
|
||||
|
||||
class exception extends runtime_exception
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $message The Exception message to throw (must be a language variable).
|
||||
* @param string $filename The file that caused the error.
|
||||
* @param array $parameters The parameters to use with the language var.
|
||||
* @param \Exception $previous The previous runtime_exception used for the runtime_exception chaining.
|
||||
* @param integer $code The Exception code.
|
||||
*/
|
||||
public function __construct($message = '', $filename = '', $parameters = [], \Exception $previous = null, $code = 0)
|
||||
{
|
||||
parent::__construct($message, array_merge(array('filename' => $filename), $parameters), $previous, $code);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the filename that triggered the error
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_filename()
|
||||
{
|
||||
$parameters = $this->get_parameters();
|
||||
return $parameters['filename'];
|
||||
}
|
||||
}
|
19
phpBB/phpbb/storage/exception/not_implemented.php
Normal file
19
phpBB/phpbb/storage/exception/not_implemented.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?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 phpbb\storage\exception;
|
||||
|
||||
class not_implemented extends exception
|
||||
{
|
||||
|
||||
}
|
62
phpBB/phpbb/storage/storage.php
Normal file
62
phpBB/phpbb/storage/storage.php
Normal file
|
@ -0,0 +1,62 @@
|
|||
<?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 phpbb\storage;
|
||||
|
||||
/**
|
||||
* @internal Experimental
|
||||
*/
|
||||
class storage
|
||||
{
|
||||
protected $adapter;
|
||||
|
||||
public function __construct($adapter)
|
||||
{
|
||||
$this->adapter = $adapter;
|
||||
}
|
||||
|
||||
public function put_contents($path, $content)
|
||||
{
|
||||
$this->adapter->put_contents($path, $content);
|
||||
}
|
||||
|
||||
public function get_contents($path)
|
||||
{
|
||||
return $this->adapter->get_contents($path);
|
||||
}
|
||||
|
||||
public function exists($path)
|
||||
{
|
||||
return $this->adapter->exists($path);
|
||||
}
|
||||
|
||||
public function delete($path)
|
||||
{
|
||||
$this->adapter->delete($path);
|
||||
}
|
||||
|
||||
public function rename($path_orig, $path_dest)
|
||||
{
|
||||
$this->adapter->rename($path_orig, $path_dest);
|
||||
}
|
||||
|
||||
public function copy($path_orig, $path_dest)
|
||||
{
|
||||
$this->adapter->copy($path_orig, $path_dest);
|
||||
}
|
||||
|
||||
public function create_dir($path)
|
||||
{
|
||||
$this->adapter->create_dir($path);
|
||||
}
|
||||
}
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
namespace phpbb\template;
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
class asset
|
||||
{
|
||||
protected $components = array();
|
||||
|
@ -20,20 +22,15 @@ 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, \phpbb\filesystem\filesystem $filesystem)
|
||||
public function __construct($url, \phpbb\path_helper $path_helper)
|
||||
{
|
||||
$this->path_helper = $path_helper;
|
||||
$this->filesystem = $filesystem;
|
||||
|
||||
$this->set_url($url);
|
||||
}
|
||||
|
@ -158,7 +155,7 @@ 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.
|
||||
$real_root_path = $this->filesystem->realpath($this->path_helper->get_phpbb_root_path()) . DIRECTORY_SEPARATOR;
|
||||
$real_root_path = filesystem_helper::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)
|
||||
|
@ -168,7 +165,7 @@ class asset
|
|||
else
|
||||
{
|
||||
// Else we make the path relative to the current working directory
|
||||
$real_root_path = $this->filesystem->realpath('.') . DIRECTORY_SEPARATOR;
|
||||
$real_root_path = filesystem_helper::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)));
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
namespace phpbb\template\twig;
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Twig Template loader
|
||||
*/
|
||||
|
@ -20,24 +22,6 @@ class loader extends \Twig_Loader_Filesystem
|
|||
{
|
||||
protected $safe_directories = array();
|
||||
|
||||
/**
|
||||
* @var \phpbb\filesystem\filesystem_interface
|
||||
*/
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \phpbb\filesystem\filesystem_interface $filesystem
|
||||
* @param string|array $paths
|
||||
*/
|
||||
public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, $paths = array())
|
||||
{
|
||||
$this->filesystem = $filesystem;
|
||||
|
||||
parent::__construct($paths, $this->filesystem->realpath(dirname(__FILE__)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set safe directories
|
||||
*
|
||||
|
@ -67,7 +51,7 @@ class loader extends \Twig_Loader_Filesystem
|
|||
*/
|
||||
public function addSafeDirectory($directory)
|
||||
{
|
||||
$directory = $this->filesystem->realpath($directory);
|
||||
$directory = filesystem_helper::realpath($directory);
|
||||
|
||||
if ($directory !== false)
|
||||
{
|
||||
|
@ -107,7 +91,7 @@ class loader extends \Twig_Loader_Filesystem
|
|||
*/
|
||||
public function addPath($path, $namespace = self::MAIN_NAMESPACE)
|
||||
{
|
||||
return parent::addPath($this->filesystem->realpath($path), $namespace);
|
||||
return parent::addPath(filesystem_helper::realpath($path), $namespace);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -147,7 +131,7 @@ class loader extends \Twig_Loader_Filesystem
|
|||
// can now check if we're within a "safe" directory
|
||||
|
||||
// Find the real path of the directory the file is in
|
||||
$directory = $this->filesystem->realpath(dirname($file));
|
||||
$directory = filesystem_helper::realpath(dirname($file));
|
||||
|
||||
if ($directory === false)
|
||||
{
|
||||
|
|
|
@ -13,20 +13,18 @@
|
|||
|
||||
namespace phpbb;
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Class to handle viewonline related tasks
|
||||
*/
|
||||
class viewonline_helper
|
||||
{
|
||||
/** @var \phpbb\filesystem\filesystem_interface */
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* @param \phpbb\filesystem\filesystem_interface $filesystem phpBB's filesystem service
|
||||
*
|
||||
*/
|
||||
public function __construct(\phpbb\filesystem\filesystem_interface $filesystem)
|
||||
public function __construct()
|
||||
{
|
||||
$this->filesystem = $filesystem;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -37,7 +35,7 @@ class viewonline_helper
|
|||
*/
|
||||
public function get_user_page($session_page)
|
||||
{
|
||||
$session_page = $this->filesystem->clean_path($session_page);
|
||||
$session_page = filesystem_helper::clean_path($session_page);
|
||||
if (strpos($session_page, './') === 0)
|
||||
{
|
||||
$session_page = substr($session_page, 2);
|
||||
|
|
|
@ -44,7 +44,6 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
$filesystem,
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
|
|
@ -97,7 +97,6 @@ class phpbb_console_command_cron_list_test extends phpbb_test_case
|
|||
$mock_router,
|
||||
new \phpbb\symfony_request($request),
|
||||
$request,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$phpbb_root_path,
|
||||
$pathEx
|
||||
);
|
||||
|
|
|
@ -73,7 +73,6 @@ class phpbb_console_command_cron_run_test extends phpbb_database_test_case
|
|||
$mock_router,
|
||||
new \phpbb\symfony_request($request),
|
||||
$request,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
);
|
||||
|
@ -147,7 +146,6 @@ class phpbb_console_command_cron_run_test extends phpbb_database_test_case
|
|||
$mock_router,
|
||||
new \phpbb\symfony_request($request),
|
||||
$request,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
);
|
||||
|
@ -188,7 +186,6 @@ class phpbb_console_command_cron_run_test extends phpbb_database_test_case
|
|||
$mock_router,
|
||||
new \phpbb\symfony_request($request),
|
||||
$request,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
);
|
||||
|
|
|
@ -91,7 +91,6 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
$this->filesystem = new \phpbb\filesystem\filesystem();
|
||||
$this->phpbb_path_helper = new \phpbb\path_helper(
|
||||
$this->symfony_request,
|
||||
$this->filesystem,
|
||||
$this->request,
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
@ -106,7 +105,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
$container->setParameter('core.environment', PHPBB_ENVIRONMENT);
|
||||
$cache_path = $phpbb_root_path . 'cache/twig';
|
||||
$context = new \phpbb\template\context();
|
||||
$loader = new \phpbb\template\twig\loader($this->filesystem, '');
|
||||
$loader = new \phpbb\template\twig\loader('');
|
||||
$twig = new \phpbb\template\twig\environment(
|
||||
$this->config,
|
||||
$this->filesystem,
|
||||
|
@ -137,7 +136,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
);
|
||||
|
||||
$loader = new \Symfony\Component\Routing\Loader\YamlFileLoader(
|
||||
new \phpbb\routing\file_locator($this->filesystem, dirname(__FILE__) . '/')
|
||||
new \phpbb\routing\file_locator(dirname(__FILE__) . '/')
|
||||
);
|
||||
$resources_locator = new \phpbb\routing\resources_locator\default_resources_locator(dirname(__FILE__) . '/', PHPBB_ENVIRONMENT, $this->extension_manager);
|
||||
$this->router = new phpbb_mock_router($container, $resources_locator, $loader, dirname(__FILE__) . '/', 'php');
|
||||
|
@ -185,7 +184,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_no_rewrite($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0'));
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id), $description);
|
||||
}
|
||||
|
@ -229,7 +228,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1'));
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id), $description);
|
||||
}
|
||||
|
@ -273,7 +272,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_absolute($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0'));
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id, UrlGeneratorInterface::ABSOLUTE_URL), $description);
|
||||
}
|
||||
|
@ -317,7 +316,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_relative_path($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0'));
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id, UrlGeneratorInterface::RELATIVE_PATH), $description);
|
||||
}
|
||||
|
@ -361,7 +360,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_network($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0'));
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id, UrlGeneratorInterface::NETWORK_PATH), $description);
|
||||
}
|
||||
|
@ -405,7 +404,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_absolute_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1'));
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id, UrlGeneratorInterface::ABSOLUTE_URL), $description);
|
||||
}
|
||||
|
@ -446,7 +445,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_relative_path_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1'));
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id, UrlGeneratorInterface::RELATIVE_PATH), $description);
|
||||
}
|
||||
|
@ -490,7 +489,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
public function test_helper_url_network_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description)
|
||||
{
|
||||
$this->config = new \phpbb\config\config(['enable_mod_rewrite' => '1']);
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route($route, $params, $is_amp, $session_id, UrlGeneratorInterface::NETWORK_PATH), $description);
|
||||
}
|
||||
|
@ -522,7 +521,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
'server_protocol' => $server_protocol,
|
||||
));
|
||||
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->filesystem, $this->root_path, 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $this->symfony_request, $this->request, $this->routing_helper);
|
||||
static::assertEquals($expected, $this->helper->route('controller1', array(), false, false, $type));
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ class phpbb_controller_controller_test extends phpbb_test_case
|
|||
$container->setParameter('core.environment', PHPBB_ENVIRONMENT);
|
||||
|
||||
$loader = new \Symfony\Component\Routing\Loader\YamlFileLoader(
|
||||
new \phpbb\routing\file_locator(new \phpbb\filesystem\filesystem(), dirname(__FILE__) . '/')
|
||||
new \phpbb\routing\file_locator(dirname(__FILE__) . '/')
|
||||
);
|
||||
$resources_locator = new \phpbb\routing\resources_locator\default_resources_locator(dirname(__FILE__) . '/', PHPBB_ENVIRONMENT, $this->extension_manager);
|
||||
$router = new phpbb_mock_router($container, $resources_locator, $loader, dirname(__FILE__) . '/', 'php');
|
||||
|
|
|
@ -97,7 +97,6 @@ class phpbb_cron_manager_test extends \phpbb_test_case
|
|||
$mock_router,
|
||||
new \phpbb\symfony_request($request),
|
||||
$request,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
);
|
||||
|
|
|
@ -67,7 +67,6 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
|
|||
$container,
|
||||
$this->db,
|
||||
$this->config,
|
||||
new phpbb\filesystem\filesystem(),
|
||||
'phpbb_ext',
|
||||
dirname(__FILE__) . '/../../phpBB/',
|
||||
'php',
|
||||
|
|
|
@ -17,6 +17,7 @@ use phpbb\extension\di\extension_base;
|
|||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
/**
|
||||
* Container core extension
|
||||
|
@ -25,8 +26,7 @@ class extension extends extension_base
|
|||
{
|
||||
protected function load_services(ContainerBuilder $container)
|
||||
{
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$loader = new YamlFileLoader($container, new FileLocator($filesystem->realpath($this->ext_path)));
|
||||
$loader = new YamlFileLoader($container, new FileLocator(filesystem_helper::realpath($this->ext_path)));
|
||||
$loader->load('environment.yml');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,6 @@ class phpbb_email_parsing_test extends phpbb_test_case
|
|||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$phpbb_path_helper = new \phpbb\path_helper(
|
||||
$symfony_request,
|
||||
$filesystem,
|
||||
$request,
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
@ -80,7 +79,7 @@ class phpbb_email_parsing_test extends phpbb_test_case
|
|||
$phpbb_path_helper,
|
||||
$cache_path,
|
||||
null,
|
||||
new \phpbb\template\twig\loader($filesystem, ''),
|
||||
new \phpbb\template\twig\loader(''),
|
||||
new \phpbb\event\dispatcher($phpbb_container),
|
||||
array(
|
||||
'cache' => false,
|
||||
|
|
|
@ -243,7 +243,7 @@ class phpbb_extension_finder_test extends phpbb_test_case
|
|||
public function test_get_classes_create_cache()
|
||||
{
|
||||
$cache = new phpbb_mock_cache;
|
||||
$finder = new \phpbb\finder(new \phpbb\filesystem\filesystem(), dirname(__FILE__) . '/', $cache, 'php', '_custom_cache_name');
|
||||
$finder = new \phpbb\finder(dirname(__FILE__) . '/', $cache, 'php', '_custom_cache_name');
|
||||
$finder->set_extensions(array_keys($this->extension_manager->all_enabled()));
|
||||
$files = $finder->suffix('_class.php')->get_files();
|
||||
|
||||
|
@ -283,7 +283,6 @@ class phpbb_extension_finder_test extends phpbb_test_case
|
|||
);
|
||||
|
||||
$finder = new \phpbb\finder(
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
dirname(__FILE__) . '/',
|
||||
new phpbb_mock_cache(array(
|
||||
'_ext_finder' => array(
|
||||
|
|
|
@ -176,7 +176,6 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
|
|||
$container,
|
||||
$db,
|
||||
$config,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
'phpbb_ext',
|
||||
dirname(__FILE__) . '/',
|
||||
$php_ext,
|
||||
|
|
|
@ -52,13 +52,12 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
|||
$container = new phpbb_mock_container_builder();
|
||||
$cache_path = $this->phpbb_root_path . 'cache/twig';
|
||||
$context = new \phpbb\template\context();
|
||||
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
|
||||
$loader = new \phpbb\template\twig\loader('');
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$phpbb_path_helper = new \phpbb\path_helper(
|
||||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
$filesystem,
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$this->phpbb_root_path,
|
||||
$this->phpEx
|
||||
|
@ -97,7 +96,6 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
|||
$container,
|
||||
$this->db,
|
||||
$this->config,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
'phpbb_ext',
|
||||
$this->phpbb_root_path,
|
||||
$this->phpEx,
|
||||
|
|
52
tests/filesystem/helper_clean_path_test.php
Normal file
52
tests/filesystem/helper_clean_path_test.php
Normal file
|
@ -0,0 +1,52 @@
|
|||
<?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\filesystem\helper as filesystem_helper;
|
||||
|
||||
class phpbb_filesystem_helper_clean_path_test extends phpbb_test_case
|
||||
{
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
public function clean_path_data()
|
||||
{
|
||||
yield ['foo', 'foo'];
|
||||
yield ['foo/bar', 'foo/bar'];
|
||||
yield ['foo/bar/', 'foo/bar/'];
|
||||
yield ['foo/./bar', 'foo/bar'];
|
||||
yield ['foo/./././bar', 'foo/bar'];
|
||||
yield ['foo/bar/.', 'foo/bar'];
|
||||
yield ['./foo/bar', './foo/bar'];
|
||||
yield ['../foo/bar', '../foo/bar'];
|
||||
yield ['./../foo/bar', './../foo/bar'];
|
||||
yield ['././../foo/bar', './../foo/bar'];
|
||||
yield ['one/two/three', 'one/two/three'];
|
||||
yield ['one/two/../three', 'one/three'];
|
||||
yield ['one/../two/three', 'two/three'];
|
||||
yield ['one/two/..', 'one'];
|
||||
yield ['one/two/../', 'one/'];
|
||||
yield ['one/two/../three/../four', 'one/four'];
|
||||
yield ['one/two/three/../../four', 'one/four'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider clean_path_data
|
||||
*/
|
||||
public function test_clean_path($input, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, filesystem_helper::clean_path($input));
|
||||
}
|
||||
}
|
64
tests/filesystem/helper_is_absolute_test.php
Normal file
64
tests/filesystem/helper_is_absolute_test.php
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?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\filesystem\helper as filesystem_helper;
|
||||
|
||||
class phpbb_filesystem_helper_is_absolute_test extends phpbb_test_case
|
||||
{
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
static public function is_absolute_data()
|
||||
{
|
||||
// Empty
|
||||
yield ['', false];
|
||||
|
||||
// Absolute unix style
|
||||
yield ['/etc/phpbb', true];
|
||||
// Unix does not support \ so that is not an absolute path
|
||||
yield ['\etc\phpbb', false];
|
||||
|
||||
// Absolute windows style
|
||||
yield ['c:\windows', true];
|
||||
yield ['C:\Windows', true];
|
||||
yield ['c:/windows', true];
|
||||
yield ['C:/Windows', true];
|
||||
|
||||
// Executable
|
||||
yield ['etc/phpbb', false];
|
||||
yield ['explorer.exe', false];
|
||||
|
||||
// Relative subdir
|
||||
yield ['Windows\System32', false];
|
||||
yield ['Windows\System32\explorer.exe', false];
|
||||
yield ['Windows/System32', false];
|
||||
yield ['Windows/System32/explorer.exe', false];
|
||||
|
||||
// Relative updir
|
||||
yield ['..\Windows\System32', false];
|
||||
yield ['..\Windows\System32\explorer.exe', false];
|
||||
yield ['../Windows/System32', false];
|
||||
yield ['../Windows/System32/explorer.exe', false];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider is_absolute_data
|
||||
*/
|
||||
public function test_is_absolute($path, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, filesystem_helper::is_absolute_path($path));
|
||||
}
|
||||
}
|
83
tests/filesystem/helper_realpath_test.php
Normal file
83
tests/filesystem/helper_realpath_test.php
Normal file
|
@ -0,0 +1,83 @@
|
|||
<?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\filesystem\helper as filesystem_helper;
|
||||
|
||||
class phpbb_filesystem_helper_realpath_test extends phpbb_test_case
|
||||
{
|
||||
protected static $filesystem_helper_phpbb_own_realpath;
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
self::$filesystem_helper_phpbb_own_realpath = new ReflectionMethod('\phpbb\filesystem\helper', 'phpbb_own_realpath');
|
||||
self::$filesystem_helper_phpbb_own_realpath->setAccessible(true);
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
public function realpath_resolve_absolute_without_symlinks_data()
|
||||
{
|
||||
// Constant data
|
||||
yield [__DIR__, __DIR__];
|
||||
yield [__DIR__ . '/../filesystem/../filesystem', __DIR__];
|
||||
yield [__DIR__ . '/././', __DIR__];
|
||||
yield [__DIR__ . '/non_existent', false];
|
||||
|
||||
yield [__FILE__, __FILE__];
|
||||
yield [__FILE__ . '../', false];
|
||||
}
|
||||
|
||||
public function realpath_resolve_relative_without_symlinks_data()
|
||||
{
|
||||
if (!function_exists('getcwd'))
|
||||
{
|
||||
yield [];
|
||||
}
|
||||
else
|
||||
{
|
||||
$relative_path = filesystem_helper::make_path_relative(__DIR__, getcwd());
|
||||
|
||||
yield [$relative_path, __DIR__];
|
||||
yield [$relative_path . '../filesystem/../filesystem', __DIR__];
|
||||
yield [$relative_path . '././', __DIR__];
|
||||
|
||||
yield [$relative_path . 'helper_realpath_test.php', __FILE__];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider realpath_resolve_absolute_without_symlinks_data
|
||||
*/
|
||||
public function test_realpath_absolute_without_links($path, $expected)
|
||||
{
|
||||
$this->assertEquals($expected, self::$filesystem_helper_phpbb_own_realpath->invoke(null, $path));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider realpath_resolve_relative_without_symlinks_data
|
||||
*/
|
||||
public function test_realpath_relative_without_links($path, $expected)
|
||||
{
|
||||
if (!function_exists('getcwd'))
|
||||
{
|
||||
$this->markTestSkipped('phpbb_own_realpath() cannot be tested with relative paths: getcwd is not available.');
|
||||
}
|
||||
|
||||
$this->assertEquals($expected, self::$filesystem_helper_phpbb_own_realpath->invoke(null, $path));
|
||||
}
|
||||
}
|
|
@ -27,7 +27,6 @@ class phpbb_build_url_test extends phpbb_test_case
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
'php'
|
||||
|
|
|
@ -39,12 +39,11 @@ class phpbb_pagination_pagination_test extends phpbb_template_template_test_case
|
|||
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1'));
|
||||
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$manager = new phpbb_mock_extension_manager(dirname(__FILE__) . '/', array());
|
||||
|
||||
|
||||
$loader = new \Symfony\Component\Routing\Loader\YamlFileLoader(
|
||||
new \phpbb\routing\file_locator($filesystem, dirname(__FILE__) . '/')
|
||||
new \phpbb\routing\file_locator(dirname(__FILE__) . '/')
|
||||
);
|
||||
$resources_locator = new \phpbb\routing\resources_locator\default_resources_locator(dirname(__FILE__) . '/', PHPBB_ENVIRONMENT, $manager);
|
||||
$router = new phpbb_mock_router(new phpbb_mock_container_builder(), $resources_locator, $loader, dirname(__FILE__) . '/', 'php');
|
||||
|
@ -58,7 +57,7 @@ class phpbb_pagination_pagination_test extends phpbb_template_template_test_case
|
|||
$request
|
||||
);
|
||||
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $router, $symfony_request, $request, $filesystem, '', 'php');
|
||||
$this->routing_helper = new \phpbb\routing\helper($this->config, $router, $symfony_request, $request, '', 'php');
|
||||
$this->helper = new phpbb_mock_controller_helper($this->template, $this->user, $this->config, $symfony_request, $request, $this->routing_helper);
|
||||
$this->pagination = new \phpbb\pagination($this->template, $this->user, $this->helper, $phpbb_dispatcher);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
class phpbb_path_helper_test extends phpbb_test_case
|
||||
{
|
||||
/** @var \phpbb\path_helper */
|
||||
|
@ -21,14 +23,12 @@ class phpbb_path_helper_test extends phpbb_test_case
|
|||
{
|
||||
parent::setUp();
|
||||
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$this->set_phpbb_root_path($filesystem);
|
||||
$this->set_phpbb_root_path();
|
||||
|
||||
$this->path_helper = new \phpbb\path_helper(
|
||||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$this->phpbb_root_path,
|
||||
'php'
|
||||
|
@ -43,9 +43,9 @@ class phpbb_path_helper_test extends phpbb_test_case
|
|||
* any time we wish to use it in one of these functions (and
|
||||
* also in general for everything else)
|
||||
*/
|
||||
public function set_phpbb_root_path($filesystem)
|
||||
public function set_phpbb_root_path()
|
||||
{
|
||||
$this->phpbb_root_path = $filesystem->clean_path(dirname(__FILE__) . '/../../phpBB/');
|
||||
$this->phpbb_root_path = filesystem_helper::clean_path(dirname(__FILE__) . '/../../phpBB/');
|
||||
}
|
||||
|
||||
public function test_get_web_root_path()
|
||||
|
@ -56,8 +56,7 @@ class phpbb_path_helper_test extends phpbb_test_case
|
|||
|
||||
public function basic_update_web_root_path_data()
|
||||
{
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$this->set_phpbb_root_path($filesystem);
|
||||
$this->set_phpbb_root_path();
|
||||
|
||||
return array(
|
||||
array(
|
||||
|
@ -75,7 +74,7 @@ class phpbb_path_helper_test extends phpbb_test_case
|
|||
),
|
||||
array(
|
||||
$this->phpbb_root_path . $this->phpbb_root_path . 'test.php',
|
||||
$filesystem->clean_path($this->phpbb_root_path . $this->phpbb_root_path . 'test.php'),
|
||||
filesystem_helper::clean_path($this->phpbb_root_path . $this->phpbb_root_path . 'test.php'),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -90,7 +89,7 @@ class phpbb_path_helper_test extends phpbb_test_case
|
|||
|
||||
public function update_web_root_path_data()
|
||||
{
|
||||
$this->set_phpbb_root_path(new \phpbb\filesystem\filesystem());
|
||||
$this->set_phpbb_root_path();
|
||||
|
||||
return array(
|
||||
array(
|
||||
|
@ -195,7 +194,6 @@ class phpbb_path_helper_test extends phpbb_test_case
|
|||
|
||||
$path_helper = new \phpbb\path_helper(
|
||||
$symfony_request,
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$this->phpbb_root_path,
|
||||
'php'
|
||||
|
|
|
@ -66,7 +66,6 @@ class phpbb_security_redirect_test extends phpbb_security_test_base
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$this->phpbb_root_path,
|
||||
'php'
|
||||
|
|
102
tests/storage/adapter/local_test.php
Normal file
102
tests/storage/adapter/local_test.php
Normal file
|
@ -0,0 +1,102 @@
|
|||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_storage_adapter_local_test extends phpbb_test_case
|
||||
{
|
||||
protected $adapter;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$config = new \phpbb\config\config(array(
|
||||
'test_path' => '.',
|
||||
));
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$phpbb_root_path = getcwd() . DIRECTORY_SEPARATOR;
|
||||
$path_key = 'test_path';
|
||||
$this->adapter = new \phpbb\storage\adapter\local($config, $filesystem, $phpbb_root_path, $path_key);
|
||||
}
|
||||
|
||||
public function data_test_exists()
|
||||
{
|
||||
yield ['README.md', true];
|
||||
yield ['nonexistent_file.php', false];
|
||||
yield ['phpBB/phpbb', true];
|
||||
yield ['nonexistent/folder', false];
|
||||
}
|
||||
|
||||
public function tearDown()
|
||||
{
|
||||
$this->adapter = null;
|
||||
}
|
||||
|
||||
public function test_put_contents()
|
||||
{
|
||||
$this->adapter->put_contents('file.txt', 'abc');
|
||||
$this->assertTrue(file_exists('file.txt'));
|
||||
$this->assertEquals(file_get_contents('file.txt'), 'abc');
|
||||
unlink('file.txt');
|
||||
}
|
||||
|
||||
public function test_get_contents()
|
||||
{
|
||||
file_put_contents('file.txt', 'abc');
|
||||
$this->assertEquals($this->adapter->get_contents('file.txt'), 'abc');
|
||||
unlink('file.txt');
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider data_test_exists
|
||||
*/
|
||||
public function test_exists($path, $expected)
|
||||
{
|
||||
$this->assertSame($expected, $this->adapter->exists($path));
|
||||
}
|
||||
|
||||
public function test_delete_file()
|
||||
{
|
||||
file_put_contents('file.txt', '');
|
||||
$this->assertTrue(file_exists('file.txt'));
|
||||
$this->adapter->delete('file.txt');
|
||||
$this->assertFalse(file_exists('file.txt'));
|
||||
}
|
||||
|
||||
public function test_delete_folder()
|
||||
{
|
||||
mkdir('path/to/dir', 0777, true);
|
||||
$this->assertTrue(file_exists('path/to/dir'));
|
||||
$this->adapter->delete('path');
|
||||
$this->assertFalse(file_exists('path/to/dir'));
|
||||
}
|
||||
|
||||
public function test_rename()
|
||||
{
|
||||
file_put_contents('file.txt', '');
|
||||
$this->adapter->rename('file.txt', 'file2.txt');
|
||||
$this->assertFalse(file_exists('file.txt'));
|
||||
$this->assertTrue(file_exists('file2.txt'));
|
||||
unlink('file2.txt');
|
||||
}
|
||||
|
||||
public function test_copy()
|
||||
{
|
||||
file_put_contents('file.txt', 'abc');
|
||||
$this->adapter->copy('file.txt', 'file2.txt');
|
||||
$this->assertEquals(file_get_contents('file.txt'), 'abc');
|
||||
$this->assertEquals(file_get_contents('file.txt'), 'abc');
|
||||
unlink('file.txt');
|
||||
unlink('file2.txt');
|
||||
}
|
||||
|
||||
}
|
|
@ -11,6 +11,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
use phpbb\filesystem\helper as filesystem_helper;
|
||||
|
||||
require_once dirname(__FILE__) . '/template_test_case.php';
|
||||
|
||||
class phpbb_template_includephp_test extends phpbb_template_template_test_case
|
||||
|
@ -39,9 +41,8 @@ class phpbb_template_includephp_test extends phpbb_template_template_test_case
|
|||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
$path_to_php = str_replace('\\', '/', dirname(__FILE__)) . '/templates/_dummy_include.php.inc';
|
||||
$this->assertTrue($filesystem->is_absolute_path($path_to_php));
|
||||
$this->assertTrue(filesystem_helper::is_absolute_path($path_to_php));
|
||||
$template_text = "Path is absolute.\n<!-- INCLUDEPHP $path_to_php -->";
|
||||
|
||||
$cache_dir = $phpbb_root_path . 'cache/';
|
||||
|
|
|
@ -39,7 +39,6 @@ class phpbb_template_allfolder_test extends phpbb_template_template_test_case
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
$filesystem,
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
@ -59,7 +58,7 @@ class phpbb_template_allfolder_test extends phpbb_template_template_test_case
|
|||
$container = new phpbb_mock_container_builder();
|
||||
$cache_path = $phpbb_root_path . 'cache/twig';
|
||||
$context = new \phpbb\template\context();
|
||||
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
|
||||
$loader = new \phpbb\template\twig\loader('');
|
||||
$twig = new \phpbb\template\twig\environment(
|
||||
$config,
|
||||
$filesystem,
|
||||
|
|
|
@ -144,7 +144,6 @@ Zeta test event in all',
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
new \phpbb\filesystem\filesystem(),
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
@ -153,7 +152,7 @@ Zeta test event in all',
|
|||
$container = new phpbb_mock_container_builder();
|
||||
$cache_path = $phpbb_root_path . 'cache/twig';
|
||||
$context = new \phpbb\template\context();
|
||||
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
|
||||
$loader = new \phpbb\template\twig\loader('');
|
||||
$twig = new \phpbb\template\twig\environment(
|
||||
$config,
|
||||
$filesystem,
|
||||
|
|
|
@ -34,7 +34,6 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
$filesystem,
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
@ -45,7 +44,7 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te
|
|||
$container = new phpbb_mock_container_builder();
|
||||
$cache_path = $phpbb_root_path . 'cache/twig';
|
||||
$context = new \phpbb\template\context();
|
||||
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
|
||||
$loader = new \phpbb\template\twig\loader('');
|
||||
$twig = new \phpbb\template\twig\environment(
|
||||
$config,
|
||||
$filesystem,
|
||||
|
|
|
@ -86,7 +86,6 @@ class phpbb_template_template_test_case extends phpbb_test_case
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
$filesystem,
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
@ -97,7 +96,7 @@ class phpbb_template_template_test_case extends phpbb_test_case
|
|||
$container = new phpbb_mock_container_builder();
|
||||
$cache_path = $phpbb_root_path . 'cache/twig';
|
||||
$context = new \phpbb\template\context();
|
||||
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
|
||||
$loader = new \phpbb\template\twig\loader('');
|
||||
$twig = new \phpbb\template\twig\environment(
|
||||
$config,
|
||||
$filesystem,
|
||||
|
|
|
@ -28,7 +28,6 @@ class phpbb_template_template_test_case_with_tree extends phpbb_template_templat
|
|||
new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
),
|
||||
$filesystem,
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
@ -40,7 +39,7 @@ class phpbb_template_template_test_case_with_tree extends phpbb_template_templat
|
|||
$container = new phpbb_mock_container_builder();
|
||||
$cache_path = $phpbb_root_path . 'cache/twig';
|
||||
$context = new \phpbb\template\context();
|
||||
$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), '');
|
||||
$loader = new \phpbb\template\twig\loader('');
|
||||
$twig = new \phpbb\template\twig\environment(
|
||||
$config,
|
||||
$filesystem,
|
||||
|
|
|
@ -58,7 +58,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
|||
|
||||
$setup_extensions = static::setup_extensions();
|
||||
|
||||
$finder = new \phpbb\finder(new \phpbb\filesystem\filesystem(), $phpbb_root_path, null, $phpEx);
|
||||
$finder = new \phpbb\finder($phpbb_root_path, null, $phpEx);
|
||||
$finder->core_path('phpbb/db/migration/data/');
|
||||
if (!empty($setup_extensions))
|
||||
{
|
||||
|
|
|
@ -366,7 +366,7 @@ class phpbb_database_test_connection_manager
|
|||
{
|
||||
global $phpbb_root_path, $phpEx, $table_prefix;
|
||||
|
||||
$finder = new \phpbb\finder(new \phpbb\filesystem\filesystem(), $phpbb_root_path, null, $phpEx);
|
||||
$finder = new \phpbb\finder($phpbb_root_path, null, $phpEx);
|
||||
$classes = $finder->core_path('phpbb/db/migration/data/')
|
||||
->get_classes();
|
||||
|
||||
|
|
|
@ -259,7 +259,6 @@ class phpbb_functional_test_case extends phpbb_test_case
|
|||
$container,
|
||||
$db,
|
||||
$config,
|
||||
new phpbb\filesystem\filesystem(),
|
||||
self::$config['table_prefix'] . 'ext',
|
||||
dirname(__FILE__) . '/',
|
||||
$phpEx,
|
||||
|
|
|
@ -29,14 +29,12 @@ abstract class phpbb_session_test_case extends phpbb_database_test_case
|
|||
{
|
||||
parent::setUp();
|
||||
|
||||
global $symfony_request, $phpbb_filesystem, $phpbb_path_helper, $request, $phpbb_root_path, $phpEx;
|
||||
global $symfony_request, $phpbb_path_helper, $request, $phpbb_root_path, $phpEx;
|
||||
$symfony_request = new \phpbb\symfony_request(
|
||||
new phpbb_mock_request()
|
||||
);
|
||||
$phpbb_filesystem = new \phpbb\filesystem\filesystem();
|
||||
$phpbb_path_helper = new \phpbb\path_helper(
|
||||
$symfony_request,
|
||||
$phpbb_filesystem,
|
||||
$this->createMock('\phpbb\request\request'),
|
||||
$phpbb_root_path,
|
||||
$phpEx
|
||||
|
|
|
@ -382,7 +382,6 @@ class phpbb_ui_test_case extends phpbb_test_case
|
|||
$container,
|
||||
$db,
|
||||
$config,
|
||||
new phpbb\filesystem(),
|
||||
$user,
|
||||
self::$config['table_prefix'] . 'ext',
|
||||
dirname(__FILE__) . '/',
|
||||
|
|
Loading…
Add table
Reference in a new issue