From 7447d2addda2957692420a40feaa108fd4f54685 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 15 Feb 2019 19:05:12 +0100 Subject: [PATCH] OO-3881: delete drop participant folders and tasks of deleted users --- .../delete/service/DeleteUserDataTask.java | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/olat/admin/user/delete/service/DeleteUserDataTask.java b/src/main/java/org/olat/admin/user/delete/service/DeleteUserDataTask.java index c7329c9b709..f344b6f8648 100644 --- a/src/main/java/org/olat/admin/user/delete/service/DeleteUserDataTask.java +++ b/src/main/java/org/olat/admin/user/delete/service/DeleteUserDataTask.java @@ -35,12 +35,14 @@ import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; +import org.olat.core.util.io.SystemFileFilter; import org.olat.course.CourseFactory; import org.olat.course.ICourse; import org.olat.course.PersistingCourseImpl; import org.olat.course.assessment.manager.CourseAssessmentManagerImpl; import org.olat.course.nodes.ProjectBrokerCourseNode; import org.olat.course.nodes.TACourseNode; +import org.olat.course.nodes.pf.manager.PFManager; import org.olat.course.nodes.ta.DropboxController; import org.olat.course.nodes.ta.ReturnboxController; import org.olat.resource.OLATResource; @@ -91,6 +93,49 @@ public class DeleteUserDataTask implements LowPriorityRunnable { if (courseDir.isDirectory()) { deleteAssessmentDocuments(identity, courseDir); deleteDropboxReturnbox(identity, courseDir); + deleteParticipantFolder(identity, courseDir); + deleteGTasks(identity, courseDir); + } + } + } + + /** + * /coursedir/participantfolder/{node}/{identityKey} + * @param identity + * @param courseDir + */ + private void deleteParticipantFolder(Identity identity, File courseDir) { + File participantFoldersDir = new File(courseDir, PFManager.FILENAME_PARTICIPANTFOLDER); + if(participantFoldersDir.exists()) { + File[] nodeDirs = participantFoldersDir.listFiles(new SystemFileFilter(false, true)); + for(File nodeDir:nodeDirs) { + File userDir = new File(nodeDir, identity.getKey().toString()); + if(userDir.exists()) { + FileUtils.deleteDirsAndFiles(userDir, true, true); + log.audit("User-Deletion: identity=" + identity.getKey() +" : User file data deleted under dir=" + userDir.getAbsolutePath()); + } + } + } + } + + /** + * /coursedir/gtasks/{nodeId}/revisions/person_{identityKey} + * @param identity + * @param courseDir + */ + private void deleteGTasks(Identity identity, File courseDir) { + File gtasksDir = new File(courseDir, "gtasks"); + if(gtasksDir.exists()) { + File[] nodeDirs = gtasksDir.listFiles(new SystemFileFilter(false, true)); + for(File nodeDir:nodeDirs) { + File[] boxes = nodeDir.listFiles(new SystemFileFilter(false, true)); + for(File box:boxes) { + File userDir = new File(box, "person_" + identity.getKey()); + if(userDir.exists()) { + FileUtils.deleteDirsAndFiles(userDir, true, true); + log.audit("User-Deletion: identity=" + identity.getKey() +" : User file data deleted under dir=" + userDir.getAbsolutePath()); + } + } } } } @@ -98,7 +143,7 @@ public class DeleteUserDataTask implements LowPriorityRunnable { private void deleteAssessmentDocuments(Identity identity, File courseDir) { File assessmentDocsDir = new File(courseDir, CourseAssessmentManagerImpl.ASSESSMENT_DOCS_DIR); if(assessmentDocsDir.exists()) { - File[] nodeDirs = assessmentDocsDir.listFiles(); + File[] nodeDirs = assessmentDocsDir.listFiles(new SystemFileFilter(false, true)); for(File nodeDir:nodeDirs) { File userDir = new File(nodeDir, "person_" + identity.getKey()); if(userDir.exists()) { @@ -118,7 +163,7 @@ public class DeleteUserDataTask implements LowPriorityRunnable { for (File dropboxReturnboxDir: dropboxReturnboxDirs) { if(!dropboxReturnboxDir.exists()) continue; - File[] nodeDirs = dropboxReturnboxDir.listFiles(); + File[] nodeDirs = dropboxReturnboxDir.listFiles(new SystemFileFilter(false, true)); // 3. loop over all node-id e.g. 78933379704296 for (File nodeDir:nodeDirs) { String currentNodeId = nodeDir.getName(); @@ -132,7 +177,7 @@ public class DeleteUserDataTask implements LowPriorityRunnable { deleteUserDirectory(identity, nodeDir); } else if (isProjectBrokerNode(currentCourse, currentNodeId)) { // additional loop over project-id - File[] projectDirs = nodeDir.listFiles(); + File[] projectDirs = nodeDir.listFiles(new SystemFileFilter(false, true)); for (File projectDir:projectDirs) { deleteUserDirectory(identity, projectDir); } -- GitLab