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) {
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({

View file

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

View file

@ -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;
})

View 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);
}
}

View 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) ||

View file

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

View 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) {