From d738365acb9ab28ea540d470f6aaa8dda01d5abe Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Thu, 5 Sep 2019 09:25:57 +0200 Subject: [PATCH] OO-4222: delete metadata after the list of revisions if needed --- .../vfs/ui/version/DeletedFileListController.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java b/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java index c39d526962a..62b3800d9a0 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java +++ b/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java @@ -60,6 +60,7 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.gui.media.MediaResource; import org.olat.core.util.vfs.VFSContainer; +import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.vfs.callbacks.VFSSecurityCallback; import org.olat.user.UserManager; @@ -247,6 +248,19 @@ public class DeletedFileListController extends FormBasicController { revisionsToDelete.addAll(rowRevisions); } vfsRepositoryService.deleteRevisions(getIdentity(), revisionsToDelete); + for(DeletedFileRow rowToDelete:rowsToDelete) { + List<VFSRevision> revisions = new ArrayList<>(rowToDelete.getRevisions()); + revisions.removeAll(revisionsToDelete); + if(revisions.isEmpty()) { + // double check if the real file is really deleted + VFSItem item = vfsRepositoryService.getItemFor(rowToDelete.getMetadata()); + if(item == null || !item.exists()) { + VFSMetadata orphanMeta = vfsRepositoryService.getMetadata(rowToDelete); + vfsRepositoryService.deleteMetadata(orphanMeta); + } + } + } + status = FolderCommandStatus.STATUS_SUCCESS; } -- GitLab