Merge remote-tracking branch 'origin/dev'

This commit is contained in:
CORP\phedor 2018-02-16 12:12:17 +03:00
commit caa7819598

View file

@ -23,7 +23,15 @@ class Path
if (isset($this->url['path'])) { if (isset($this->url['path'])) {
$path = $this->url['path']; $path = $this->url['path'];
// $path = preg_replace('/\/{2,}/', '/', $path); // $path = preg_replace('/\/{2,}/', '/', $path);
$this->path = self::optimize($this->fromString($path)); $list = self::listFromString($path);
if (isset($this->url['scheme']) && !isset($this->url['host'])) {
$this->absolute = false;
} else if ($list[0] == '' && count($list) > 1) {
$this->absolute = true;
}
$this->path = self::optimize($list);
} }
} }
@ -111,22 +119,18 @@ class Path
/** /**
* Преобразует строку путя в массив * Часть конструктора
* Преобразует строку пути в массив
* *
* @param string $path Путь * @param string $path Путь
* *
* @return array * @return array
*/ */
public function fromString ($path) public static function listFromString ($path)
{ {
assert(is_string($path)); assert(is_string($path));
$list = preg_split('#\\\\|/#s', $path); $list = preg_split('#\\\\|/#s', $path);
if (isset($this->url['scheme']) && !isset($this->url['host'])) {
$this->absolute = false;
} else if ($list[0] == '' && count($list) > 1) {
$this->absolute = true;
}
return $list; return $list;
} }
@ -268,14 +272,12 @@ class Path
return self::join($base, $path); return self::join($base, $path);
} }
/** /**
* Обьединяет строки в путь соединяя необходимым разделителем * Обьединяет строки в Path соединяя необходимым разделителем
* fixme не обрабатывает параметры урла, решение Path::join(SITE_WWW_PATH) . '?param=pampam' * fixme не обрабатывает параметры урла, решение Path::join(SITE_WWW_PATH) . '?param=pampam'
* @return string * @return string
*/ */
static function join($_rest) static function fromJoin($_rest) {
{
$args = func_get_args(); $args = func_get_args();
$result = array(); $result = array();
$parts0 = new Path(array_shift($args)); $parts0 = new Path(array_shift($args));
@ -287,7 +289,19 @@ class Path
// При обьединении ссылок можно обьеденить path, query, fragment // При обьединении ссылок можно обьеденить path, query, fragment
$path = implode(self::SEPARATOR, call_user_func_array('array_merge', $result)); $path = implode(self::SEPARATOR, call_user_func_array('array_merge', $result));
$parts0->url['path'] = ($parts0->isAbsolute()) ? '/' . $path : $path; $parts0->url['path'] = ($parts0->isAbsolute()) ? '/' . $path : $path;
return self::makeUrl($parts0->url); return $parts0;
}
/**
* Обьединяет строки в строку пути соединяя необходимым разделителем
* fixme не обрабатывает параметры урла, решение Path::join(SITE_WWW_PATH) . '?param=pampam'
* @return string
*/
static function join($_rest)
{
$args = func_get_args();
$path = call_user_func_array("self::fromJoin", $args);
return self::makeUrl($path->url);
} }
// Проверка структуры имени файла // Проверка структуры имени файла
@ -440,7 +454,7 @@ class Path
*/ */
static function updateRelativePathOnFileMove($relativePath, $srcFile, $dstFile) { static function updateRelativePathOnFileMove($relativePath, $srcFile, $dstFile) {
$srcToDst = self::relative($srcFile, $dstFile); $srcToDst = self::relative($srcFile, $dstFile);
return self::join($srcToDst, $relativePath); return self::normalize(self::join($srcToDst, $relativePath));
} }
/** /**