Merge pull request #10663 from owncloud/files_trashbin_original_path

Show original path information in trashbin and for shares
This commit is contained in:
Morris Jobke 2014-09-16 12:49:17 +02:00
commit 61b040cbe8
7 changed files with 79 additions and 5 deletions

View file

@ -674,6 +674,12 @@
if (extension) { if (extension) {
nameSpan.append($('<span></span>').addClass('extension').text(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 // dirs can show the number of uploaded files
if (type === 'dir') { if (type === 'dir') {
linkElem.append($('<span></span>').attr({ linkElem.append($('<span></span>').attr({

View file

@ -138,6 +138,9 @@ class Helper
} }
$entry['mountType'] = $mountType; $entry['mountType'] = $mountType;
} }
if (isset($i['extraData'])) {
$entry['extraData'] = $i['extraData'];
}
return $entry; return $entry;
} }

View file

@ -181,6 +181,9 @@
file.name = OC.basename(share.file_target); file.name = OC.basename(share.file_target);
file.path = OC.dirname(share.file_target); file.path = OC.dirname(share.file_target);
file.permissions = share.permissions; file.permissions = share.permissions;
if (file.path) {
file.extraData = share.file_target;
}
} }
else { else {
if (share.share_type !== OC.Share.SHARE_TYPE_LINK) { if (share.share_type !== OC.Share.SHARE_TYPE_LINK) {
@ -189,6 +192,9 @@
file.name = OC.basename(share.path); file.name = OC.basename(share.path);
file.path = OC.dirname(share.path); file.path = OC.dirname(share.path);
file.permissions = OC.PERMISSION_ALL; file.permissions = OC.PERMISSION_ALL;
if (file.path) {
file.extraData = share.path;
}
} }
return file; return file;
}) })

View file

@ -35,6 +35,7 @@ class Helper
$absoluteDir = $view->getAbsolutePath($dir); $absoluteDir = $view->getAbsolutePath($dir);
if (is_resource($dirContent)) { if (is_resource($dirContent)) {
$originalLocations = \OCA\Files_Trashbin\Trashbin::getLocations($user);
while (($entryName = readdir($dirContent)) !== false) { while (($entryName = readdir($dirContent)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) { if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
$id = $entryName; $id = $entryName;
@ -47,6 +48,13 @@ class Helper
$parts = explode('/', ltrim($dir, '/')); $parts = explode('/', ltrim($dir, '/'));
$timestamp = substr(pathinfo($parts[0], PATHINFO_EXTENSION), 1); $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( $i = array(
'name' => $id, 'name' => $id,
'mtime' => $timestamp, 'mtime' => $timestamp,
@ -54,6 +62,9 @@ class Helper
'type' => $view->is_dir($dir . '/' . $entryName) ? 'dir' : 'file', 'type' => $view->is_dir($dir . '/' . $entryName) ? 'dir' : 'file',
'directory' => ($dir === '/') ? '' : $dir, 'directory' => ($dir === '/') ? '' : $dir,
); );
if ($originalPath) {
$i['extraData'] = $originalPath.'/'.$id;
}
$result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i); $result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i);
} }
} }

View file

@ -41,6 +41,46 @@ class Trashbin {
return array($uid, $filename); 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) { private static function setUpTrash($user) {
$view = new \OC\Files\View('/' . $user); $view = new \OC\Files\View('/' . $user);
if (!$view->is_dir('files_trashbin')) { if (!$view->is_dir('files_trashbin')) {
@ -318,13 +358,10 @@ class Trashbin {
$location = ''; $location = '';
if ($timestamp) { if ($timestamp) {
$query = \OC_DB::prepare('SELECT `location` FROM `*PREFIX*files_trash`' $location = self::getLocation($user, $filename, $timestamp);
. ' WHERE `user`=? AND `id`=? AND `timestamp`=?'); if ($location === false) {
$result = $query->execute(array($user, $filename, $timestamp))->fetchAll();
if (count($result) !== 1) {
\OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR); \OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR);
} else { } else {
$location = $result[0]['location'];
// if location no longer exists, restore file in the root directory // if location no longer exists, restore file in the root directory
if ($location !== '/' && if ($location !== '/' &&
(!$view->is_dir('files' . $location) || (!$view->is_dir('files' . $location) ||

View file

@ -813,6 +813,16 @@ span.ui-icon {float: left; margin: 3px 7px 30px 0;}
height: 16px; height: 16px;
} }
/* ---- TOOLTIPS ---- */
.extra-data {
padding-right: 5px !important;
}
.tipsy-inner {
max-width: 400px !important;
overflow: hidden;
text-overflow: ellipsis;
}
/* ---- TAGS ---- */ /* ---- TAGS ---- */
#tagsdialog .content { #tagsdialog .content {
width: 100%; height: 280px; width: 100%; height: 280px;

View file

@ -1097,6 +1097,7 @@ function initCore() {
$('td .modified').tipsy({gravity:'s', fade:true, live:true}); $('td .modified').tipsy({gravity:'s', fade:true, live:true});
$('td.lastLogin').tipsy({gravity:'s', fade:true, html:true}); $('td.lastLogin').tipsy({gravity:'s', fade:true, html:true});
$('input').tipsy({gravity:'w', fade:true}); $('input').tipsy({gravity:'w', fade:true});
$('.extra-data').tipsy({gravity:'w', fade:true, live:true});
// toggle for menus // toggle for menus
$(document).on('mouseup.closemenus', function(event) { $(document).on('mouseup.closemenus', function(event) {