Merge pull request #10663 from owncloud/files_trashbin_original_path
Show original path information in trashbin and for shares
This commit is contained in:
commit
61b040cbe8
7 changed files with 79 additions and 5 deletions
|
@ -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({
|
||||||
|
|
|
@ -138,6 +138,9 @@ class Helper
|
||||||
}
|
}
|
||||||
$entry['mountType'] = $mountType;
|
$entry['mountType'] = $mountType;
|
||||||
}
|
}
|
||||||
|
if (isset($i['extraData'])) {
|
||||||
|
$entry['extraData'] = $i['extraData'];
|
||||||
|
}
|
||||||
return $entry;
|
return $entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
})
|
})
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) ||
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue