Fix directories check in Installer on Windows (#1489576)

Added rcube_utils::is_absolute_path() method
pull/167/head
Aleksander Machniak 11 years ago
parent e8dd47fb94
commit 517c9f9a8d

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix directories check in Installer on Windows (#1489576)
- Fix issue when default_addressbook option is set to integer value (#1489407)
- Fix Opera > 15 detection (#1489562)

@ -91,7 +91,7 @@ if ($RCI->config['log_driver'] != 'syslog')
$dirs[] = $RCI->config['log_dir'] ? $RCI->config['log_dir'] : 'logs';
foreach ($dirs as $dir) {
$dirpath = $dir[0] == '/' ? $dir : INSTALL_PATH . $dir;
$dirpath = rcube_utils::is_absolute_path($dir) ? $dir : INSTALL_PATH . $dir;
if (is_writable(realpath($dirpath))) {
$RCI->pass($dir);
$pass = true;

@ -63,7 +63,7 @@ class rcube_config
$this->paths = explode(PATH_SEPARATOR, $paths);
// make all paths absolute
foreach ($this->paths as $i => $path) {
if (!$this->_is_absolute($path)) {
if (!rcube_utils::is_absolute_path($path)) {
if ($realpath = realpath(RCUBE_INSTALL_PATH . $path)) {
$this->paths[$i] = unslashify($realpath) . '/';
}
@ -243,8 +243,8 @@ class rcube_config
*/
public function resolve_paths($file, $use_env = true)
{
$files = array();
$abs_path = $this->_is_absolute($file);
$files = array();
$abs_path = rcube_utils::is_absolute_path($file);
foreach ($this->paths as $basepath) {
$realpath = $abs_path ? $file : realpath($basepath . '/' . $file);
@ -269,14 +269,6 @@ class rcube_config
return $files;
}
/**
* Determine whether the given file path is absolute or relative
*/
private function _is_absolute($path)
{
return $path[0] == DIRECTORY_SEPARATOR || preg_match('!^[a-z]:[\\\\/]!i', $path);
}
/**
* Getter for a specific config parameter
*

@ -1045,4 +1045,16 @@ class rcube_utils
return !in_array($str, array('false', '0', 'no', 'off', 'nein', ''), true);
}
/**
* OS-dependent absolute path detection
*/
public static function is_absolute_path($path)
{
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
return (bool) preg_match('!^[a-z]:[\\\\/]!i', $path);
}
else {
return $path[0] == DIRECTORY_SEPARATOR;
}
}
}

@ -320,7 +320,7 @@ class Framework_Utils extends PHPUnit_Framework_TestCase
}
/**
* rcube:utils::normalize _string()
* rcube:utils::normalize_string()
*/
function test_normalize_string()
{
@ -334,4 +334,30 @@ class Framework_Utils extends PHPUnit_Framework_TestCase
$this->assertSame($output, $result);
}
}
/**
* rcube:utils::is_absolute_path()
*/
function test_is_absolute_path()
{
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$test = array(
'' => false,
"C:\\" => true,
'some/path' => false,
);
}
else {
$test = array(
'' => false,
'/path' => true,
'some/path' => false,
);
}
foreach ($test as $input => $output) {
$result = rcube_utils::is_absolute_path($input);
$this->assertSame($output, $result);
}
}
}

Loading…
Cancel
Save