diff options
author | Robin McCorkell <rmccorkell@karoshi.org.uk> | 2014-08-27 10:28:31 +0100 |
---|---|---|
committer | Robin McCorkell <rmccorkell@karoshi.org.uk> | 2014-09-11 15:45:42 +0100 |
commit | 99d41bec5d04fbdf5d457584cd4d22fef65ece25 (patch) | |
tree | 079ee19291f919a90ad7b1ca2595555050d25b7a /apps/files_trashbin/lib | |
parent | 712addac683110c44527cbb9dfe9133821712241 (diff) | |
download | nextcloud-server-99d41bec5d04fbdf5d457584cd4d22fef65ece25.tar.gz nextcloud-server-99d41bec5d04fbdf5d457584cd4d22fef65ece25.zip |
Show original path information in trashbin and sharing views
Path will only be shown if in subdirectory, not in root.
Diffstat (limited to 'apps/files_trashbin/lib')
-rw-r--r-- | apps/files_trashbin/lib/helper.php | 11 | ||||
-rw-r--r-- | apps/files_trashbin/lib/trashbin.php | 47 |
2 files changed, 53 insertions, 5 deletions
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) || |