aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_versions')
-rw-r--r--apps/files_versions/l10n/tr.js3
-rw-r--r--apps/files_versions/l10n/tr.json3
-rw-r--r--apps/files_versions/lib/Listener/FileEventsListener.php29
-rw-r--r--apps/files_versions/tests/VersioningTest.php18
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);