]> source.dussan.org Git - nextcloud-server.git/commitdiff
Show original path information in trashbin and sharing views
authorRobin McCorkell <rmccorkell@karoshi.org.uk>
Wed, 27 Aug 2014 09:28:31 +0000 (10:28 +0100)
committerRobin McCorkell <rmccorkell@karoshi.org.uk>
Thu, 11 Sep 2014 14:45:42 +0000 (15:45 +0100)
Path will only be shown if in subdirectory, not in root.

apps/files/js/filelist.js
apps/files/lib/helper.php
apps/files_sharing/js/sharedfilelist.js
apps/files_trashbin/lib/helper.php
apps/files_trashbin/lib/trashbin.php
core/css/styles.css
core/js/js.js

index 522ff627529fb447cf2a62734efe8636aa7c9d09..7c49c540d85615739251d900dde20bdf00402b96 100644 (file)
                        if (extension) {
                                nameSpan.append($('<span></span>').addClass('extension').text(extension));
                        }
+                       if (fileData.extraData) {
+                               if (fileData.extraData.charAt(0) === '/') {
+                                       fileData.extraData = fileData.extraData.substr(1);
+                               }
+                               nameSpan.addClass('extra-data').attr('title', fileData.extraData);
+                       }
                        // dirs can show the number of uploaded files
                        if (type === 'dir') {
                                linkElem.append($('<span></span>').attr({
index 50b4e8338a85bd2ccce023e1803a9da1ddf1e70f..a0c0aa4952eca4bd0817be146b6cd7c92e6393ac 100644 (file)
@@ -138,6 +138,9 @@ class Helper
                        }
                        $entry['mountType'] = $mountType;
                }
+               if (isset($i['extraData'])) {
+                       $entry['extraData'] = $i['extraData'];
+               }
                return $entry;
        }
 
index d29285dc1de7a21fdd8b4febdd14cfc4598eb90c..b99611f9bf048c31fc7d4af06dc4af51bea57439 100644 (file)
                                                file.name = OC.basename(share.file_target);
                                                file.path = OC.dirname(share.file_target);
                                                file.permissions = share.permissions;
+                                               if (file.path) {
+                                                       file.extraData = share.file_target;
+                                               }
                                        }
                                        else {
                                                if (share.share_type !== OC.Share.SHARE_TYPE_LINK) {
                                                file.name = OC.basename(share.path);
                                                file.path = OC.dirname(share.path);
                                                file.permissions = OC.PERMISSION_ALL;
+                                               if (file.path) {
+                                                       file.extraData = share.path;
+                                               }
                                        }
                                        return file;
                                })
index d0ca5fb153039a84816feb73fad208f11bde8ab3..c2b81e3dbc8b2cc7a2b3a358d01603c1fcb9d644 100644 (file)
@@ -35,6 +35,7 @@ class Helper
                $absoluteDir = $view->getAbsolutePath($dir);
 
                if (is_resource($dirContent)) {
+                       $originalLocations = \OCA\Files_Trashbin\Trashbin::getLocations($user);
                        while (($entryName = readdir($dirContent)) !== false) {
                                if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
                                        $id = $entryName;
@@ -47,6 +48,13 @@ class Helper
                                                $parts = explode('/', ltrim($dir, '/'));
                                                $timestamp = substr(pathinfo($parts[0], PATHINFO_EXTENSION), 1);
                                        }
+                                       $originalPath = '';
+                                       if (isset($originalLocations[$id][$timestamp])) {
+                                               $originalPath = $originalLocations[$id][$timestamp];
+                                               if (substr($originalPath, -1) === '/') {
+                                                       $originalPath = substr($originalPath, 0, -1);
+                                               }
+                                       }
                                        $i = array(
                                                'name' => $id,
                                                'mtime' => $timestamp,
@@ -54,6 +62,9 @@ class Helper
                                                'type' => $view->is_dir($dir . '/' . $entryName) ? 'dir' : 'file',
                                                'directory' => ($dir === '/') ? '' : $dir,
                                        );
+                                       if ($originalPath) {
+                                               $i['extraData'] = $originalPath.'/'.$id;
+                                       }
                                        $result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i);
                                }
                        }
index 69eef09d1e90006b691f1abae0e4fdeda6d7d9b2..12bf6a781140fef9c3df954fcb78b88ed6175c9b 100644 (file)
@@ -41,6 +41,46 @@ class Trashbin {
                return array($uid, $filename);
        }
 
+       /**
+        * get original location of files for user
+        *
+        * @param string $user
+        * @return array (filename => array (timestamp => original location))
+        */
+       public static function getLocations($user) {
+               $query = \OC_DB::prepare('SELECT `id`, `timestamp`, `location`'
+                       . ' FROM `*PREFIX*files_trash` WHERE `user`=?');
+               $result = $query->execute(array($user));
+               $array = array();
+               while ($row = $result->fetchRow()) {
+                       if (isset($array[$row['id']])) {
+                               $array[$row['id']][$row['timestamp']] = $row['location'];
+                       } else {
+                               $array[$row['id']] = array($row['timestamp'] => $row['location']);
+                       }
+               }
+               return $array;
+       }
+
+       /**
+        * get original location of file
+        *
+        * @param string $user
+        * @param string $filename
+        * @param string $timestamp
+        * @return string original location
+        */
+       public static function getLocation($user, $filename, $timestamp) {
+               $query = \OC_DB::prepare('SELECT `location` FROM `*PREFIX*files_trash`'
+                       . ' WHERE `user`=? AND `id`=? AND `timestamp`=?');
+               $result = $query->execute(array($user, $filename, $timestamp))->fetchAll();
+               if (isset($result[0]['location'])) {
+                       return $result[0]['location'];
+               } else {
+                       return false;
+               }
+       }
+
        private static function setUpTrash($user) {
                $view = new \OC\Files\View('/' . $user);
                if (!$view->is_dir('files_trashbin')) {
@@ -318,13 +358,10 @@ class Trashbin {
 
                $location = '';
                if ($timestamp) {
-                       $query = \OC_DB::prepare('SELECT `location` FROM `*PREFIX*files_trash`'
-                               . ' WHERE `user`=? AND `id`=? AND `timestamp`=?');
-                       $result = $query->execute(array($user, $filename, $timestamp))->fetchAll();
-                       if (count($result) !== 1) {
+                       $location = self::getLocation($user, $filename, $timestamp);
+                       if ($location === false) {
                                \OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR);
                        } else {
-                               $location = $result[0]['location'];
                                // if location no longer exists, restore file in the root directory
                                if ($location !== '/' &&
                                        (!$view->is_dir('files' . $location) ||
index d4d16db743c6facf863d5c66da1ee30cb9e29a45..4022936a5a6bca4e8edc6f8dd0f861ac1f4ae515 100644 (file)
@@ -811,6 +811,11 @@ span.ui-icon {float: left; margin: 3px 7px 30px 0;}
        height: 16px;
 }
 
+/* ---- TOOLTIPS ---- */
+.extra-data {
+       padding-right: 5px !important;
+}
+
 /* ---- TAGS ---- */
 #tagsdialog .content {
        width: 100%; height: 280px;
index 89682e3013f4fa7ebcee40df3957c13586899cfc..f35a3a1e2bee6d28ef6950bddee1008d5d3d75ce 100644 (file)
@@ -1097,6 +1097,7 @@ function initCore() {
        $('td .modified').tipsy({gravity:'s', fade:true, live:true});
        $('td.lastLogin').tipsy({gravity:'s', fade:true, html:true});
        $('input').tipsy({gravity:'w', fade:true});
+       $('.extra-data').tipsy({gravity:'w', fade:true, live:true});
 
        // toggle for menus
        $(document).on('mouseup.closemenus', function(event) {