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) {
|
||||
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({
|
||||
|
|
|
@ -138,6 +138,9 @@ class Helper
|
|||
}
|
||||
$entry['mountType'] = $mountType;
|
||||
}
|
||||
if (isset($i['extraData'])) {
|
||||
$entry['extraData'] = $i['extraData'];
|
||||
}
|
||||
return $entry;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
})
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) ||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue