@@ -37,7 +37,7 @@ foreach ($list as $file) { | |||
$timestamp = null; | |||
} | |||
OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp); | |||
OCA\Files_Trashbin\Trashbin::delete($filename, \OCP\User::getUser(), $timestamp); | |||
if (OCA\Files_Trashbin\Trashbin::file_exists($filename, $timestamp)) { | |||
$error[] = $filename; | |||
OC_Log::write('trashbin','can\'t delete ' . $filename . ' permanently.', OC_Log::ERROR); |
@@ -10,7 +10,7 @@ $data = array(); | |||
// make filelist | |||
try { | |||
$files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir, $sortAttribute, $sortDirection); | |||
$files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir, \OCP\User::getUser(), $sortAttribute, $sortDirection); | |||
} catch (Exception $e) { | |||
header("HTTP/1.0 404 Not Found"); | |||
exit(); |
@@ -16,7 +16,7 @@ if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true') { | |||
if ($dir === '' || $dir === '/') { | |||
$dirListing = false; | |||
} | |||
foreach (OCA\Files_Trashbin\Helper::getTrashFiles($dir) as $file) { | |||
foreach (OCA\Files_Trashbin\Helper::getTrashFiles($dir, \OCP\User::getUser()) as $file) { | |||
$fileName = $file['name']; | |||
if (!$dirListing) { | |||
$fileName .= '.d' . $file['mtime']; |
@@ -11,14 +11,14 @@ class Helper | |||
* | |||
* @param string $dir path to the directory inside the trashbin | |||
* or empty to retrieve the root of the trashbin | |||
* @param string $user | |||
* @param string $sortAttribute attribute to sort on or empty to disable sorting | |||
* @param bool $sortDescending true for descending sort, false otherwise | |||
* @return \OCP\Files\FileInfo[] | |||
*/ | |||
public static function getTrashFiles($dir, $sortAttribute = '', $sortDescending = false){ | |||
public static function getTrashFiles($dir, $user, $sortAttribute = '', $sortDescending = false){ | |||
$result = array(); | |||
$timestamp = null; | |||
$user = \OCP\User::getUser(); | |||
$view = new \OC\Files\View('/' . $user . '/files_trashbin/files'); | |||
@@ -540,12 +540,12 @@ class Trashbin { | |||
* delete file from trash bin permanently | |||
* | |||
* @param string $filename path to the file | |||
* @param string $user | |||
* @param int $timestamp of deletion time | |||
* | |||
* @return int size of deleted files | |||
*/ | |||
public static function delete($filename, $timestamp = null) { | |||
$user = \OCP\User::getUser(); | |||
public static function delete($filename, $user, $timestamp = null) { | |||
$view = new \OC\Files\View('/' . $user); | |||
$size = 0; | |||
@@ -667,11 +667,11 @@ class Trashbin { | |||
* calculate remaining free space for trash bin | |||
* | |||
* @param integer $trashbinSize current size of the trash bin | |||
* @param string $user | |||
* @return int available free space for trash bin | |||
*/ | |||
private static function calculateFreeSpace($trashbinSize) { | |||
private static function calculateFreeSpace($trashbinSize, $user) { | |||
$softQuota = true; | |||
$user = \OCP\User::getUser(); | |||
$quota = \OC_Preferences::getValue($user, 'files', 'quota'); | |||
$view = new \OC\Files\View('/' . $user); | |||
if ($quota === null || $quota === 'default') { | |||
@@ -709,7 +709,7 @@ class Trashbin { | |||
$size = self::getTrashbinSize($user); | |||
$freeSpace = self::calculateFreeSpace($size); | |||
$freeSpace = self::calculateFreeSpace($size, $user); | |||
if ($freeSpace < 0) { | |||
self::expire($size, $user); | |||
@@ -731,24 +731,23 @@ class Trashbin { | |||
return 0; | |||
} | |||
$user = \OCP\User::getUser(); | |||
$availableSpace = self::calculateFreeSpace($trashbinSize); | |||
$availableSpace = self::calculateFreeSpace($trashbinSize, $user); | |||
$size = 0; | |||
$retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION); | |||
$limit = time() - ($retention_obligation * 86400); | |||
$dirContent = Helper::getTrashFiles('/', 'mtime'); | |||
$dirContent = Helper::getTrashFiles('/', $user, 'mtime'); | |||
// delete all files older then $retention_obligation | |||
list($delSize, $count) = self::deleteExpiredFiles($dirContent, $limit, $retention_obligation); | |||
list($delSize, $count) = self::deleteExpiredFiles($dirContent, $user, $limit, $retention_obligation); | |||
$size += $delSize; | |||
$availableSpace += $size; | |||
// delete files from trash until we meet the trash bin size limit again | |||
$size += self::deleteFiles(array_slice($dirContent, $count), $availableSpace); | |||
$size += self::deleteFiles(array_slice($dirContent, $count), $user, $availableSpace); | |||
return $size; | |||
} | |||
@@ -757,16 +756,17 @@ class Trashbin { | |||
* if the size limit for the trash bin is reached, we delete the oldest | |||
* files in the trash bin until we meet the limit again | |||
* @param array $files | |||
* @param init $availableSpace available disc space | |||
* @param string $user | |||
* @param int $availableSpace available disc space | |||
* @return int size of deleted files | |||
*/ | |||
protected function deleteFiles($files, $availableSpace) { | |||
protected function deleteFiles($files, $user, $availableSpace) { | |||
$size = 0; | |||
if ($availableSpace < 0) { | |||
foreach ($files as $file) { | |||
if ($availableSpace < 0) { | |||
$tmp = self::delete($file['name'], $file['mtime']); | |||
$tmp = self::delete($file['name'], $user, $file['mtime']); | |||
\OC_Log::write('files_trashbin', 'remove "' . $file['name'] . '" (' . $tmp . 'B) to meet the limit of trash bin size (50% of available quota)', \OC_log::INFO); | |||
$availableSpace += $tmp; | |||
$size += $tmp; | |||
@@ -782,11 +782,12 @@ class Trashbin { | |||
* delete files older then max storage time | |||
* | |||
* @param array $files list of files sorted by mtime | |||
* @param string $user | |||
* @param int $limit files older then limit should be deleted | |||
* @param int $retention_obligation max age of file in days | |||
* @return array size of deleted files and number of deleted files | |||
*/ | |||
protected static function deleteExpiredFiles($files, $limit, $retention_obligation) { | |||
protected static function deleteExpiredFiles($files, $user, $limit, $retention_obligation) { | |||
$size = 0; | |||
$count = 0; | |||
foreach ($files as $file) { | |||
@@ -794,7 +795,7 @@ class Trashbin { | |||
$filename = $file['name']; | |||
if ($timestamp < $limit) { | |||
$count++; | |||
$size += self::delete($filename, $timestamp); | |||
$size += self::delete($filename, $user, $timestamp); | |||
\OC_Log::write('files_trashbin', 'remove "' . $filename . '" from trash bin because it is older than ' . $retention_obligation, \OC_log::INFO); | |||
} else { | |||
break; |
@@ -88,7 +88,7 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase { | |||
\OC\Files\Filesystem::unlink('file3.txt'); | |||
//make sure that files are in the trash bin | |||
$filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/'); | |||
$filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1); | |||
$this->assertSame(3, count($filesInTrash)); | |||
$manipulatedList = $this->manipulateDeleteTime($filesInTrash, $expiredDate); | |||
@@ -106,7 +106,7 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase { | |||
$this->assertSame('file2.txt', $remainingFile['name']); | |||
// check that file1.txt and file3.txt was really deleted | |||
$newTrashContent = OCA\Files_Trashbin\Helper::getTrashFiles('/'); | |||
$newTrashContent = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1); | |||
$this->assertSame(1, count($newTrashContent)); | |||
$element = reset($newTrashContent); | |||
$this->assertSame('file2.txt', $element['name']); | |||
@@ -147,7 +147,7 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase { | |||
\OC\Files\Filesystem::unlink('file1.txt'); | |||
//make sure that files are in the trash bin | |||
$filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/', 'mtime'); | |||
$filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1, 'mtime'); | |||
$this->assertSame(3, count($filesInTrash)); | |||
$testClass = new TrashbinForTesting(); | |||
@@ -156,7 +156,7 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase { | |||
// the two oldest files (file3.txt and file2.txt) should be deleted | |||
$this->assertSame(10, $sizeOfDeletedFiles); | |||
$newTrashContent = OCA\Files_Trashbin\Helper::getTrashFiles('/'); | |||
$newTrashContent = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1); | |||
$this->assertSame(1, count($newTrashContent)); | |||
$element = reset($newTrashContent); | |||
$this->assertSame('file1.txt', $element['name']); | |||
@@ -189,10 +189,10 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase { | |||
class TrashbinForTesting extends Files_Trashbin\Trashbin { | |||
public function dummyDeleteExpiredFiles($files, $limit) { | |||
// dummy value for $retention_obligation because it is not needed here | |||
return parent::deleteExpiredFiles($files, $limit, 0); | |||
return parent::deleteExpiredFiles($files, \Test_Trashbin::TEST_TRASHBIN_USER1, $limit, 0); | |||
} | |||
public function dummyDeleteFiles($files, $availableSpace) { | |||
return parent::deleteFiles($files, $availableSpace); | |||
return parent::deleteFiles($files, \Test_Trashbin::TEST_TRASHBIN_USER1, $availableSpace); | |||
} | |||
} |