summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-03-23 05:34:25 -0700
committerBernhard Posselt <nukeawhale@gmail.com>2013-03-23 05:34:25 -0700
commitbbeb657c03f5e036aaa31c4c843bdf3865974dfa (patch)
treec754970112210570e19561c26f2ec1541650ecf1
parent3d2acb53897d18d9f4c05f956f2e9511d126ad33 (diff)
parenta0ec2d23ef48b8e78cb0dd0e96ac63ae73045729 (diff)
downloadnextcloud-server-bbeb657c03f5e036aaa31c4c843bdf3865974dfa.tar.gz
nextcloud-server-bbeb657c03f5e036aaa31c4c843bdf3865974dfa.zip
Merge pull request #2454 from owncloud/fixing-file-mapper-ext-master
Fixing file mapper ext master
-rw-r--r--lib/files/mapper.php23
-rw-r--r--tests/lib/files/mapper.php52
2 files changed, 68 insertions, 7 deletions
diff --git a/lib/files/mapper.php b/lib/files/mapper.php
index 179e28e5e76..15f5f0628b5 100644
--- a/lib/files/mapper.php
+++ b/lib/files/mapper.php
@@ -167,31 +167,40 @@ 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);
+ $last= array_pop($sluggedElements);
array_push($sluggedElements, $last.'-'.$index);
}
+ // add back the extension
+ if (isset($parts['extension'])) {
+ $last= array_pop($sluggedElements);
+ array_push($sluggedElements, $last.'.'.$parts['extension']);
+ }
+
$sluggedPath = $this->unchangedPhysicalRoot.implode('/', $sluggedElements);
return $this->stripLast($sluggedPath);
}
diff --git a/tests/lib/files/mapper.php b/tests/lib/files/mapper.php
new file mode 100644
index 00000000000..e3859bc0f23
--- /dev/null
+++ b/tests/lib/files/mapper.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @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
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+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() {
+ // 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'));
+ }
+}