From 0fff3c9698b036a4295935569db7220068f9883f Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Tue, 19 Mar 2013 16:53:37 +0100 Subject: adding extension to slugified physical path --- lib/files/mapper.php | 23 ++++++++++++++++------- tests/lib/files/mapper.php | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 tests/lib/files/mapper.php diff --git a/lib/files/mapper.php b/lib/files/mapper.php index 179e28e5e76..2b6890472e3 100644 --- a/lib/files/mapper.php +++ b/lib/files/mapper.php @@ -167,29 +167,38 @@ class Mapper $query->execute(array($logicPath, $physicalPath, md5($logicPath), md5($physicalPath))); } - private function slugifyPath($path, $index=null) { + public function slugifyPath($path, $index=null) { $path = $this->stripRootFolder($path, $this->unchangedPhysicalRoot); $pathElements = explode('/', $path); $sluggedElements = array(); + // rip off the extension ext from last element + $last= end($pathElements); + $parts = pathinfo($last); + $filename = $parts['filename']; + array_pop($pathElements); + array_push($pathElements, $filename); + foreach ($pathElements as $pathElement) { // remove empty elements if (empty($pathElement)) { continue; } - // TODO: remove file ext before slugify on last element $sluggedElements[] = self::slugify($pathElement); } - // - // TODO: add the index before the file extension - // + // apply index to file name if ($index !== null) { - $last= end($sluggedElements); array_pop($sluggedElements); - array_push($sluggedElements, $last.'-'.$index); + array_push($sluggedElements, $filename.'-'.$index); + } + + // add back the extension + if (isset($parts['extension'])) { + $last= array_pop($sluggedElements); + array_push($sluggedElements, $last.'.'.$parts['extension']); } $sluggedPath = $this->unchangedPhysicalRoot.implode('/', $sluggedElements); diff --git a/tests/lib/files/mapper.php b/tests/lib/files/mapper.php new file mode 100644 index 00000000000..36221f8bcaa --- /dev/null +++ b/tests/lib/files/mapper.php @@ -0,0 +1,41 @@ +. + * + */ + +namespace Test\Files; + +class Mapper extends \PHPUnit_Framework_TestCase { + + /** + * @var \OC\Files\Mapper + */ + private $mapper = null; + + public function setUp() { + $this->mapper = new \OC\Files\Mapper('D:/'); + } + + public function testSlugifyPath() { + $this->assertEquals('D:/text.txt', $this->mapper->slugifyPath('D:/text.txt')); + $this->assertEquals('D:/text-2.txt', $this->mapper->slugifyPath('D:/text.txt', 2)); + $this->assertEquals('D:/a/b/text.txt', $this->mapper->slugifyPath('D:/a/b/text.txt')); + } +} -- cgit v1.2.3 From 268d4a525dd26e3914134aa73df1172609dea52f Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Tue, 19 Mar 2013 16:57:54 +0100 Subject: some more test cases & fix on file name generation with index --- lib/files/mapper.php | 4 ++-- tests/lib/files/mapper.php | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/files/mapper.php b/lib/files/mapper.php index 2b6890472e3..15f5f0628b5 100644 --- a/lib/files/mapper.php +++ b/lib/files/mapper.php @@ -191,8 +191,8 @@ class Mapper // apply index to file name if ($index !== null) { - array_pop($sluggedElements); - array_push($sluggedElements, $filename.'-'.$index); + $last= array_pop($sluggedElements); + array_push($sluggedElements, $last.'-'.$index); } // add back the extension diff --git a/tests/lib/files/mapper.php b/tests/lib/files/mapper.php index 36221f8bcaa..79005eefdcb 100644 --- a/tests/lib/files/mapper.php +++ b/tests/lib/files/mapper.php @@ -34,8 +34,19 @@ class Mapper extends \PHPUnit_Framework_TestCase { } public function testSlugifyPath() { + // with extension $this->assertEquals('D:/text.txt', $this->mapper->slugifyPath('D:/text.txt')); $this->assertEquals('D:/text-2.txt', $this->mapper->slugifyPath('D:/text.txt', 2)); $this->assertEquals('D:/a/b/text.txt', $this->mapper->slugifyPath('D:/a/b/text.txt')); + + // without extension + $this->assertEquals('D:/text', $this->mapper->slugifyPath('D:/text')); + $this->assertEquals('D:/text-2', $this->mapper->slugifyPath('D:/text', 2)); + $this->assertEquals('D:/a/b/text', $this->mapper->slugifyPath('D:/a/b/text')); + + // with double dot + $this->assertEquals('D:/text-text.txt', $this->mapper->slugifyPath('D:/text.text.txt')); + $this->assertEquals('D:/text-text-2.txt', $this->mapper->slugifyPath('D:/text.text.txt', 2)); + $this->assertEquals('D:/a/b/text-text.txt', $this->mapper->slugifyPath('D:/a/b/text.text.txt')); } } -- cgit v1.2.3 From a0ec2d23ef48b8e78cb0dd0e96ac63ae73045729 Mon Sep 17 00:00:00 2001 From: Thomas Müller Date: Wed, 20 Mar 2013 11:28:18 +0100 Subject: Fixing author and copyright --- tests/lib/files/mapper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/lib/files/mapper.php b/tests/lib/files/mapper.php index 79005eefdcb..e3859bc0f23 100644 --- a/tests/lib/files/mapper.php +++ b/tests/lib/files/mapper.php @@ -2,8 +2,8 @@ /** * ownCloud * - * @author Robin Appelman - * @copyright 2012 Robin Appelman icewind@owncloud.com + * @author Thomas Müller + * @copyright 2013 Thomas Müller thomas.mueller@owncloud.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -- cgit v1.2.3