Fix directories check in Installer on Windows (#1489576)
Added rcube_utils::is_absolute_path() method
| | |
| | | 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) |
| | | |
| | |
| | | $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; |
| | |
| | | $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) . '/'; |
| | | } |
| | |
| | | public function resolve_paths($file, $use_env = true) |
| | | { |
| | | $files = array(); |
| | | $abs_path = $this->_is_absolute($file); |
| | | $abs_path = rcube_utils::is_absolute_path($file); |
| | | |
| | | foreach ($this->paths as $basepath) { |
| | | $realpath = $abs_path ? $file : realpath($basepath . '/' . $file); |
| | |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | foreach ($test as $input => $output) { |
| | | $result = rcube_utils::normalize_string($input); |
| | | $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); |
| | | } |
| | | } |