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