Merge remote-tracking branch 'origin/dev'

This commit is contained in:
CORP\phedor 2018-02-16 18:23:30 +03:00
commit 86a180123b

View file

@ -458,16 +458,41 @@ class Path
}
/**
* Обновить относительную ссылку при переносе папки
* Обновить относительную ссылку в файле при переносе папки
*
* @param String $relativePath - относительная ссылка до переноса
* @param String $file - абсолютный путь к файлу содержащему ссылку до переноса
* @param String $srcDir - абсолютный путь к переносимой папке до переноса
* @param String $dstDir - абсолютный путь к переносимой папке после переноса
* @param String $fileDir - абсолютный путь к директории файла содержащего ссылку до переноса
* @param String $srcDir - абсолютный путь к переносимой директории до переноса
* @param String $dstDir - абсолютный путь к переносимой директории после переноса
*
* @return
*/
static function updateRelativePathOnDirectoryMove($relativePath, $file, $srcDir = NULL , $dstFile = NULL) {
static function updateRelativePathOnDirectoryMove($relativePath, $fileDir, $srcDir, $dstDir) {
$relativePath = self::normalize($relativePath);
$fileDir = self::normalize($fileDir);
$srcDir = self::normalize($srcDir);
$dstDir = self::normalize($dstDir);
$stepsUpTotal = 0;
$relativePathParts = self::listFromString($relativePath);
foreach ($relativePathParts as $part) {
$stepsUpTotal += ($part==".."?1:0);
}
$fileDepthInFolder = count(self::listFromString($fileDir)) - count(self::listFromString($srcDir));
//проверка того, что путь выходит за пределы переносимой папки
if($stepsUpTotal <= $fileDepthInFolder) {
//возврат изначального пути если не выходит
return $relativePath;
} else {
//если выходит
//путь от корня к файлу, на который указывает ссылка
$oldAbsoluteLinkDstPath = self::normalize(self::join($fileDir, $relativePath));
$pathFromDir = self::relative($fileDir, $srcDir);
$newAbsoluteLinkSrcPath = self::normalize(self::join($dstDir, $pathFromDir));
return self::relative($oldAbsoluteLinkDstPath, $newAbsoluteLinkSrcPath);
}
}
}