Просмотр исходного кода

Fix renaming using parenthesis

tags/v6.0.0alpha2
Bart Visscher 11 лет назад
Родитель
Сommit
22c29eb64b
2 измененных файлов: 48 добавлений и 14 удалений
  1. 21
    5
      lib/helper.php
  2. 27
    9
      tests/lib/helper.php

+ 21
- 5
lib/helper.php Просмотреть файл

@@ -660,11 +660,27 @@ class OC_Helper {
}

$newpath = $path . '/' . $filename;
$counter = 2;
while ($view->file_exists($newpath)) {
$newname = $name . ' (' . $counter . ')' . $ext;
$newpath = $path . '/' . $newname;
$counter++;
if ($view->file_exists($newpath)) {
if(preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
//Replace the last "(number)" with "(number+1)"
$last_match = count($matches[0])-1;
$counter = $matches[1][$last_match][0]+1;
$offset = $matches[0][$last_match][1];
$match_length = strlen($matches[0][$last_match][0]);
} else {
$counter = 2;
$offset = false;
}
do {
if($offset) {
//Replace the last "(number)" with "(number+1)"
$newname = substr_replace($name, '('.$counter.')', $offset, $match_length);
} else {
$newname = $name . ' (' . $counter . ')';
}
$newpath = $path . '/' . $newname . $ext;
$counter++;
} while ($view->file_exists($newpath));
}

return $newpath;

+ 27
- 9
tests/lib/helper.php Просмотреть файл

@@ -154,38 +154,56 @@ class Test_Helper extends PHPUnit_Framework_TestCase {

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true));
->will($this->returnValue(true)); // filename.ext exists
$this->assertEquals('dir/filename (2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename.ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true));
->will($this->returnValue(true)); // filename.ext exists
$viewMock->expects($this->at(1))
->method('file_exists')
->will($this->returnValue(true));
->will($this->returnValue(true)); // filename (2).ext exists
$this->assertEquals('dir/filename (3).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename.ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true));
->will($this->returnValue(true)); // filename (1).ext exists
$this->assertEquals('dir/filename (2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename (1).ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true));
->will($this->returnValue(true)); // filename (2).ext exists
$this->assertEquals('dir/filename (3).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename (2).ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true)); // filename (2).ext exists
$viewMock->expects($this->at(1))
->method('file_exists')
->will($this->returnValue(true));
$this->assertEquals('dir/filename (3).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename (2).ext', $viewMock));
->will($this->returnValue(true)); // filename (3).ext exists
$this->assertEquals('dir/filename (4).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename (2).ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true));
->will($this->returnValue(true)); // filename(1).ext exists
$this->assertEquals('dir/filename(2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename(1).ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true));
->will($this->returnValue(true)); // filename(1) (1).ext exists
$this->assertEquals('dir/filename(1) (2).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename(1) (1).ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true)); // filename(1) (1).ext exists
$viewMock->expects($this->at(1))
->method('file_exists')
->will($this->returnValue(true)); // filename(1) (2).ext exists
$this->assertEquals('dir/filename(1) (3).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename(1) (1).ext', $viewMock));

$viewMock->expects($this->at(0))
->method('file_exists')
->will($this->returnValue(true)); // filename(1) (2) (3).ext exists
$this->assertEquals('dir/filename(1) (2) (4).ext', OC_Helper::buildNotExistingFileNameForView('dir', 'filename(1) (2) (3).ext', $viewMock));
}
}

Загрузка…
Отмена
Сохранить