From: Robin McCorkell Date: Wed, 27 Aug 2014 09:28:31 +0000 (+0100) Subject: Show original path information in trashbin and sharing views X-Git-Tag: v8.0.0alpha1~689^2~2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=99d41bec5d04fbdf5d457584cd4d22fef65ece25;p=nextcloud-server.git Show original path information in trashbin and sharing views Path will only be shown if in subdirectory, not in root. --- diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 522ff627529..7c49c540d85 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -674,6 +674,12 @@ if (extension) { nameSpan.append($('').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($('').attr({ diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php index 50b4e8338a8..a0c0aa4952e 100644 --- a/apps/files/lib/helper.php +++ b/apps/files/lib/helper.php @@ -138,6 +138,9 @@ class Helper } $entry['mountType'] = $mountType; } + if (isset($i['extraData'])) { + $entry['extraData'] = $i['extraData']; + } return $entry; } diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js index d29285dc1de..b99611f9bf0 100644 --- a/apps/files_sharing/js/sharedfilelist.js +++ b/apps/files_sharing/js/sharedfilelist.js @@ -181,6 +181,9 @@ 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) { @@ -189,6 +192,9 @@ 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; }) diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php index d0ca5fb1530..c2b81e3dbc8 100644 --- a/apps/files_trashbin/lib/helper.php +++ b/apps/files_trashbin/lib/helper.php @@ -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); } } diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php index 69eef09d1e9..12bf6a78114 100644 --- a/apps/files_trashbin/lib/trashbin.php +++ b/apps/files_trashbin/lib/trashbin.php @@ -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) || diff --git a/core/css/styles.css b/core/css/styles.css index d4d16db743c..4022936a5a6 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -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; diff --git a/core/js/js.js b/core/js/js.js index 89682e3013f..f35a3a1e2be 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -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) {