]> source.dussan.org Git - nextcloud-server.git/commitdiff
adding extension to slugified physical path
authorThomas Mueller <thomas.mueller@tmit.eu>
Tue, 19 Mar 2013 15:53:37 +0000 (16:53 +0100)
committerThomas Mueller <thomas.mueller@tmit.eu>
Tue, 19 Mar 2013 15:53:37 +0000 (16:53 +0100)
lib/files/mapper.php
tests/lib/files/mapper.php [new file with mode: 0644]

index 179e28e5e765a8f385310df10d74e1aa2c1dd3e7..2b6890472e31b105ff61e3979dcd1c2bc82a7567 100644 (file)
@@ -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 (file)
index 0000000..36221f8
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2012 Robin Appelman icewind@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() {
+               $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'));
+       }
+}