$error = array(); $success = array(); $i = 0; foreach ($list as $file) { $path = $dir . '/' . $file; if ($dir === '/') { $file = ltrim($file, '/'); $delimiter = strrpos($file, '.d'); $filename = substr($file, 0, $delimiter); $timestamp = substr($file, $delimiter + 2); } else { $path_parts = pathinfo($file); $filename = $path_parts['basename']; $timestamp = null; } if (!OCA\Files_Trashbin\Trashbin::restore($path, $filename, $timestamp)) { $error[] = $filename; \OCP\Util::writeLog('trashbin', 'can\'t restore ' . $filename, \OCP\Util::ERROR); } else { $success[$i]['filename'] = $file; $success[$i]['timestamp'] = $timestamp; $i++; } } if ($error) { $filelist = ''; foreach ($error as $e) { $filelist .= $e . ', '; } $l = OC::$server->getL10N('files_trashbin'); $message = $l->t("Couldn't restore %s", array(rtrim($filelist, ', ')));
/** * Test restoring a file into a read-only folder, will restore * the file to root instead */ public function testRestoreFileIntoReadOnlySourceFolder() { $userFolder = \OC::$server->getUserFolder(); $folder = $userFolder->newFolder('folder'); $file = $folder->newFile('file1.txt'); $file->putContent('foo'); $this->assertTrue($userFolder->nodeExists('folder/file1.txt')); $file->delete(); $this->assertFalse($userFolder->nodeExists('folder/file1.txt')); $filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1, 'mtime'); $this->assertCount(1, $filesInTrash); /** @var \OCP\Files\FileInfo */ $trashedFile = $filesInTrash[0]; // delete source folder list($storage, $internalPath) = $this->rootView->resolvePath('/' . self::TEST_TRASHBIN_USER1 . '/files/folder'); if ($storage instanceof \OC\Files\Storage\Local) { $folderAbsPath = $storage->getSourcePath($internalPath); // make folder read-only chmod($folderAbsPath, 0555); $this->assertTrue(OCA\Files_Trashbin\Trashbin::restore('file1.txt.d' . $trashedFile->getMtime(), $trashedFile->getName(), $trashedFile->getMtime())); $file = $userFolder->get('file1.txt'); $this->assertEquals('foo', $file->getContent()); chmod($folderAbsPath, 0755); } }
<?php /** * @author Björn Schießle <*****@*****.**> * @author Lukas Reschke <*****@*****.**> * @author Morris Jobke <*****@*****.**> * * @copyright Copyright (c) 2016, ownCloud, Inc. * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see <http://www.gnu.org/licenses/> * */ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); \OC::$server->getSession()->close(); $trashStatus = OCA\Files_Trashbin\Trashbin::isEmpty(OCP\User::getUser()); OCP\JSON::success(array("data" => array("isEmpty" => $trashStatus)));
$folder = rtrim($folder, '/') . '/'; $error = array(); $success = array(); $i = 0; foreach ($list as $file) { if ($folder === '/') { $file = ltrim($file, '/'); $delimiter = strrpos($file, '.d'); $filename = substr($file, 0, $delimiter); $timestamp = substr($file, $delimiter + 2); } else { $filename = $folder . '/' . $file; $timestamp = null; } 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); } else { if (!$deleteAll) { $success[$i]['filename'] = $file; $success[$i]['timestamp'] = $timestamp; $i++; } } } if ($error) { $filelist = ''; foreach ($error as $e) { $filelist .= $e . ', '; }
?> <?php if ($file['type'] === 'dir') { ?> style="background-image:url(<?php print_unescaped(OCP\mimetype_icon('dir')); ?> )" <?php } else { ?> <?php if ($file['isPreviewAvailable']) { ?> style="background-image:url(<?php print_unescaped(OCA\Files_Trashbin\Trashbin::preview_icon(!$_['dirlisting'] ? $file['name'] . '.d' . $file['timestamp'] : $file['directory'] . '/' . $file['name'])); ?> )" <?php } else { ?> style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?> )" <?php } ?> <?php } ?>