diff options
Diffstat (limited to 'apps/files_versions')
-rw-r--r-- | apps/files_versions/l10n/tr.js | 3 | ||||
-rw-r--r-- | apps/files_versions/l10n/tr.json | 3 | ||||
-rw-r--r-- | apps/files_versions/lib/Listener/FileEventsListener.php | 29 | ||||
-rw-r--r-- | apps/files_versions/tests/VersioningTest.php | 18 |
4 files changed, 37 insertions, 16 deletions
diff --git a/apps/files_versions/l10n/tr.js b/apps/files_versions/l10n/tr.js index 968a662dfd0..f73c10ecf45 100644 --- a/apps/files_versions/l10n/tr.js +++ b/apps/files_versions/l10n/tr.js @@ -23,6 +23,7 @@ OC.L10N.register( "Version restored" : "Sürüm geri yüklendi", "Could not restore version" : "Sürüm geri yüklenemedi", "Could not set version label" : "Sürüm etiketi ayarlanamadı", - "Could not delete version" : "Sürüm silinemedi" + "Could not delete version" : "Sürüm silinemedi", + "File versions" : "Dosya sürümleri" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_versions/l10n/tr.json b/apps/files_versions/l10n/tr.json index 303dbcf8bae..814e9ea7a97 100644 --- a/apps/files_versions/l10n/tr.json +++ b/apps/files_versions/l10n/tr.json @@ -21,6 +21,7 @@ "Version restored" : "Sürüm geri yüklendi", "Could not restore version" : "Sürüm geri yüklenemedi", "Could not set version label" : "Sürüm etiketi ayarlanamadı", - "Could not delete version" : "Sürüm silinemedi" + "Could not delete version" : "Sürüm silinemedi", + "File versions" : "Dosya sürümleri" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php index 49150f4e726..d847c60ec64 100644 --- a/apps/files_versions/lib/Listener/FileEventsListener.php +++ b/apps/files_versions/lib/Listener/FileEventsListener.php @@ -196,8 +196,8 @@ class FileEventsListener implements IEventListener { } if ( - $writeHookInfo['versionCreated'] && - $node->getMTime() !== $writeHookInfo['previousNode']->getMTime() + $writeHookInfo['versionCreated'] + && $node->getMTime() !== $writeHookInfo['previousNode']->getMTime() ) { // If a new version was created, insert a version in the DB for the current content. // If both versions have the same mtime, it means the latest version file simply got overrode, @@ -218,6 +218,15 @@ class FileEventsListener implements IEventListener { ], ); } + } catch (DoesNotExistException $e) { + // This happens if the versions app was not enabled while the file was created or updated the last time. + // meaning there is no such revision and we need to create this file. + if ($writeHookInfo['versionCreated']) { + $this->created($node); + } else { + // Normally this should not happen so we re-throw the exception to not hide any potential issues. + throw $e; + } } catch (Exception $e) { $this->logger->error('Failed to update existing version for ' . $node->getPath(), [ 'exception' => $e, @@ -323,11 +332,19 @@ class FileEventsListener implements IEventListener { return; } - // if we rename a movable mount point, then the versions don't have - // to be renamed + // if we rename a movable mount point, then the versions don't have to be renamed $oldPath = $this->getPathForNode($source); $newPath = $this->getPathForNode($target); - $absOldPath = Filesystem::normalizePath('/' . \OC_User::getUser() . '/files' . $oldPath); + if ($oldPath === null || $newPath === null) { + return; + } + + $user = $this->userSession->getUser()?->getUID(); + if ($user === null) { + return; + } + + $absOldPath = Filesystem::normalizePath('/' . $user . '/files' . $oldPath); $manager = Filesystem::getMountManager(); $mount = $manager->find($absOldPath); $internalPath = $mount->getInternalPath($absOldPath); @@ -335,7 +352,7 @@ class FileEventsListener implements IEventListener { return; } - $view = new View(\OC_User::getUser() . '/files'); + $view = new View($user . '/files'); if ($view->file_exists($newPath)) { Storage::store($newPath); } else { diff --git a/apps/files_versions/tests/VersioningTest.php b/apps/files_versions/tests/VersioningTest.php index 13ea133097f..f294390a593 100644 --- a/apps/files_versions/tests/VersioningTest.php +++ b/apps/files_versions/tests/VersioningTest.php @@ -16,9 +16,11 @@ use OC\User\NoUserException; use OCA\Files_Sharing\AppInfo\Application; use OCA\Files_Versions\Db\VersionEntity; use OCA\Files_Versions\Db\VersionsMapper; +use OCA\Files_Versions\Events\VersionRestoredEvent; use OCA\Files_Versions\Storage; use OCA\Files_Versions\Versions\IVersionManager; use OCP\Constants; +use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\IMimeTypeLoader; use OCP\IConfig; use OCP\IUser; @@ -804,8 +806,13 @@ class VersioningTest extends \Test\TestCase { $this->assertEquals('test file', $this->rootView->file_get_contents($filePath)); $info1 = $this->rootView->getFileInfo($filePath); - $params = []; - $this->connectMockHooks('rollback', $params); + $eventDispatcher = Server::get(IEventDispatcher::class); + $eventFired = false; + $eventDispatcher->addListener(VersionRestoredEvent::class, function ($event) use (&$eventFired, $t2) { + $eventFired = true; + $this->assertEquals('/sub/test.txt', $event->getVersion()->getVersionPath()); + $this->assertTrue($event->getVersion()->getRevisionId() > 0); + }); $versionManager = Server::get(IVersionManager::class); $versions = $versionManager->getVersionsForFile($this->user1, $info1); @@ -813,13 +820,8 @@ class VersioningTest extends \Test\TestCase { return $version->getRevisionId() === $t2; }); $this->assertTrue($versionManager->rollback(current($version))); - $expectedParams = [ - 'path' => '/sub/test.txt', - ]; - $this->assertEquals($expectedParams['path'], $params['path']); - $this->assertTrue(array_key_exists('revision', $params)); - $this->assertTrue($params['revision'] > 0); + $this->assertTrue($eventFired, 'VersionRestoredEvent was not fired'); $this->assertEquals('version2', $this->rootView->file_get_contents($filePath)); $info2 = $this->rootView->getFileInfo($filePath); |