From 7d7775d094adde328488edf6adcfb949486f8daa Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 6 Jan 2017 10:23:42 +0100 Subject: [PATCH] OO-2431: delete assessment data (entry, QTI session), filter in assessment tool --- .../delete/service/UserDeletionManager.java | 48 +++++++++++-------- .../service/UserFileDeletionManager.java | 4 +- .../ICalFileCalendarUserDeleteManager.java | 4 +- .../notifications/NotificationsManager.java | 5 -- .../manager/NotificationsManagerImpl.java | 4 +- .../coordinate/DBPersistentLockManager.java | 14 +++--- .../olat/core/util/mail/MailBoxExtension.java | 3 +- .../manager/AssessmentToolManagerImpl.java | 2 +- .../manager/EfficiencyStatementManager.java | 10 +++- .../manager/BusinessGroupServiceImpl.java | 2 +- .../org/olat/ims/qti/QTIResultManager.java | 4 +- .../manager/AssessmentTestSessionDAO.java | 13 ++++- .../ims/qti21/manager/QTI21ServiceImpl.java | 18 ++++++- .../manager/AssessmentEntryDAO.java | 13 +++-- .../manager/AssessmentServiceImpl.java | 9 +++- .../java/org/olat/modules/iq/IQManager.java | 3 +- .../manager/OpenMeetingsManagerImpl.java | 2 +- .../modules/vitero/manager/ViteroManager.java | 2 +- src/main/java/org/olat/note/NoteManager.java | 3 +- .../portfolio/manager/EPFrontendManager.java | 3 +- .../org/olat/properties/PropertyManager.java | 3 +- .../repository/manager/CatalogManager.java | 2 +- .../manager/RepositoryDeletionManager.java | 3 +- .../org/olat/user/DisplayPortraitManager.java | 2 +- .../olat/user/HomePageConfigManagerImpl.java | 2 +- .../org/olat/user/PersonalFolderManager.java | 6 ++- .../java/org/olat/user/UserDataDeletable.java | 9 +++- .../util/mail/manager/MailManagerTest.java | 16 +++---- .../assessment/AssessmentManagerTest.java | 2 +- .../EfficiencyStatementManagerTest.java | 2 +- .../org/olat/properties/PropertyTest.java | 2 +- 31 files changed, 142 insertions(+), 73 deletions(-) diff --git a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java index a261b2f8442..914715f89d6 100644 --- a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java +++ b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java @@ -28,7 +28,9 @@ package org.olat.admin.user.delete.service; import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Calendar; +import java.util.Comparator; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -39,12 +41,12 @@ import javax.persistence.TemporalType; import org.olat.admin.user.delete.SelectionController; import org.olat.basesecurity.Authentication; import org.olat.basesecurity.BaseSecurity; -import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.IdentityImpl; import org.olat.basesecurity.SecurityGroup; import org.olat.basesecurity.manager.GroupDAO; import org.olat.commons.lifecycle.LifeCycleManager; import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.persistence.DBQuery; import org.olat.core.gui.translator.Translator; @@ -59,7 +61,6 @@ import org.olat.core.util.mail.MailBundle; import org.olat.core.util.mail.MailManager; import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.mail.MailerResult; -import org.olat.course.assessment.manager.EfficiencyStatementManager; import org.olat.properties.Property; import org.olat.properties.PropertyManager; import org.olat.registration.RegistrationManager; @@ -71,6 +72,8 @@ import org.olat.user.propertyhandlers.UserPropertyHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import edu.emory.mathcs.backport.java.util.Collections; + /** * Manager for user-deletion. @@ -108,6 +111,8 @@ public class UserDeletionManager extends BasicManager { private MailManager mailManager; @Autowired private GroupDAO groupDao; + @Autowired + private DB dbInstance; /** * [used by spring] @@ -192,7 +197,7 @@ public class UserDeletionManager extends BasicManager { sb.append("select ident from ").append(IdentityImpl.class.getName()).append(" as ident") .append(" inner join fetch ident.user as user") .append(" where ident.status=").append(Identity.STATUS_ACTIV).append(" and (ident.lastLogin = null or ident.lastLogin < :lastLogin)"); - List<Identity> identities = DBFactory.getInstance().getCurrentEntityManager() + List<Identity> identities = dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), Identity.class) .setParameter("lastLogin", lastLoginLimit.getTime(), TemporalType.TIMESTAMP) .getResultList(); @@ -261,27 +266,23 @@ public class UserDeletionManager extends BasicManager { logInfo("Start deleteIdentity for identity=" + identity); String newName = getBackupStringWithDate(identity.getName()); - - - // TODO: chg: Workaround: instances each manager which implements UaserDataDeletable interface - // Each manager register themself as deletable - // Should be better with new config concept - - logInfo("Start EfficiencyStatementManager.archiveUserData for identity=" + identity); - CoreSpringFactory.getImpl(EfficiencyStatementManager.class).archiveUserData(identity, getArchivFilePath(identity) ); logInfo("Start Deleting user=" + identity); - Map<String,UserDataDeletable> userDataDeletableResources = CoreSpringFactory.getBeansOfType(UserDataDeletable.class); - for (UserDataDeletable element : userDataDeletableResources.values()) { + File archiveFilePath = getArchivFilePath(identity); + Map<String,UserDataDeletable> userDataDeletableResourcesMap = CoreSpringFactory.getBeansOfType(UserDataDeletable.class); + List<UserDataDeletable> userDataDeletableResources = new ArrayList<>(userDataDeletableResourcesMap.values()); + Collections.sort(userDataDeletableResources, new UserDataDeletableComparator()); + System.out.println(""); + for (UserDataDeletable element : userDataDeletableResources) { logInfo("UserDataDeletable-Loop element=" + element); - element.deleteUserData(identity, newName); + element.deleteUserData(identity, newName, archiveFilePath); } + // Delete all authentications for certain identity List<Authentication> authentications = securityManager.getAuthentications(identity); - for (Iterator<Authentication> iter = authentications.iterator(); iter.hasNext();) { - Authentication auth = iter.next(); + for (Authentication auth:authentications) { logInfo("deleteAuthentication auth=" + auth); - BaseSecurityManager.getInstance().deleteAuthentication(auth); + securityManager.deleteAuthentication(auth); logDebug("Delete auth=" + auth + " of identity=" + identity); } @@ -326,7 +327,7 @@ public class UserDeletionManager extends BasicManager { UserManager.getInstance().updateUserFromIdentity(identity); logInfo("deleteUserProperties user=" + persistedUser); - DBFactory.getInstance().commit(); + dbInstance.commit(); identity = securityManager.loadIdentityByKey(identity.getKey()); //keep email only -> change login-name if (!keepUserEmailAfterDeletion) { @@ -340,7 +341,6 @@ public class UserDeletionManager extends BasicManager { LifeCycleManager.createInstanceFor(identity).deleteTimestampFor(SEND_DELETE_EMAIL_ACTION); LifeCycleManager.createInstanceFor(identity).markTimestampFor(USER_DELETED_ACTION, createLifeCycleLogDataFor(identity)); - // TODO: chg: ev. logAudit at another place logAudit("User-Deletion: Delete all userdata for identity=" + identity); } @@ -447,5 +447,13 @@ public class UserDeletionManager extends BasicManager { public static boolean isKeepUserLoginAfterDeletion() { return keepUserLoginAfterDeletion; } - + + public static class UserDataDeletableComparator implements Comparator<UserDataDeletable> { + @Override + public int compare(UserDataDeletable o1, UserDataDeletable o2) { + int p1 = o1.deleteUserDataPriority(); + int p2 = o2.deleteUserDataPriority(); + return -Integer.compare(p1, p2); + } + } } diff --git a/src/main/java/org/olat/admin/user/delete/service/UserFileDeletionManager.java b/src/main/java/org/olat/admin/user/delete/service/UserFileDeletionManager.java index c46bfcd0f3e..91ae05e23c1 100644 --- a/src/main/java/org/olat/admin/user/delete/service/UserFileDeletionManager.java +++ b/src/main/java/org/olat/admin/user/delete/service/UserFileDeletionManager.java @@ -25,6 +25,8 @@ package org.olat.admin.user.delete.service; +import java.io.File; + import org.olat.core.commons.services.taskexecutor.TaskExecutorManager; import org.olat.core.id.Identity; import org.olat.user.UserDataDeletable; @@ -44,7 +46,7 @@ public class UserFileDeletionManager implements UserDataDeletable { private TaskExecutorManager taskExecutorManager; @Override - public void deleteUserData(final Identity identity, final String newDeletedUserName) { + public void deleteUserData(final Identity identity, final String newDeletedUserName, File archivePath) { taskExecutorManager.execute(new DeleteUserDataTask(identity.getKey(), identity.getName())); } } diff --git a/src/main/java/org/olat/commons/calendar/manager/ICalFileCalendarUserDeleteManager.java b/src/main/java/org/olat/commons/calendar/manager/ICalFileCalendarUserDeleteManager.java index a2b775fcf6b..eaf82a91bb7 100644 --- a/src/main/java/org/olat/commons/calendar/manager/ICalFileCalendarUserDeleteManager.java +++ b/src/main/java/org/olat/commons/calendar/manager/ICalFileCalendarUserDeleteManager.java @@ -19,6 +19,8 @@ */ package org.olat.commons.calendar.manager; +import java.io.File; + import org.olat.commons.calendar.CalendarManager; import org.olat.core.id.Identity; import org.olat.core.logging.OLog; @@ -42,7 +44,7 @@ public class ICalFileCalendarUserDeleteManager implements UserDataDeletable { private CalendarManager calendarManager; @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { calendarManager.deletePersonalCalendar(identity); log.debug("Personal calendar deleted for identity=" + identity); } diff --git a/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java b/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java index dd08b127cf2..0bbb0f85e87 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java +++ b/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java @@ -262,11 +262,6 @@ public abstract class NotificationsManager extends BasicManager { public abstract SubscriptionInfo getNoSubscriptionInfo(); - /** - * Delete all subscribers for certain identity. - * @param identity - */ - public abstract void deleteUserData(Identity identity, String newDeletedUserName); /** * subscribers for ONE person (e.g. subscribed to 5 forums -> 5 subscribers diff --git a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java index cf07db61650..ff4c67ca9d0 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java +++ b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java @@ -25,6 +25,7 @@ package org.olat.core.commons.services.notifications.manager; +import java.io.File; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; @@ -1209,7 +1210,8 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us * Delete all subscribers for certain identity. * @param identity */ - public void deleteUserData(Identity identity, String newDeletedUserName) { + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { List<Subscriber> subscribers = getSubscribers(identity); for (Iterator<Subscriber> iter = subscribers.iterator(); iter.hasNext();) { deleteSubscriber( iter.next() ); diff --git a/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java b/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java index 3253425cdee..fff5639dc5a 100644 --- a/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java +++ b/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java @@ -24,6 +24,8 @@ */ package org.olat.core.util.coordinate; +import java.io.File; + import org.hibernate.type.StandardBasicTypes; import org.hibernate.type.Type; import org.olat.basesecurity.BaseSecurityManager; @@ -51,18 +53,12 @@ public class DBPersistentLockManager implements PersistentLockManager, UserDataD private static final OLog log = Tracing.createLoggerFor(DBPersistentLockManager.class); private static final String CATEGORY_PERSISTENTLOCK = "o_lock"; - /** - * [used by spring] - * @param userDeletionManager - */ - private DBPersistentLockManager() { - // - } /** * @see org.olat.core.util.locks.PersistentLockManager#aquirePersistentLock(org.olat.core.id.OLATResourceable, * org.olat.core.id.Identity, java.lang.String) */ + @Override public LockResult aquirePersistentLock(OLATResourceable ores, Identity ident, String locksubkey) { //synchronisation is solved in the LockManager LockResult lres; @@ -109,6 +105,7 @@ public class DBPersistentLockManager implements PersistentLockManager, UserDataD /** * @see org.olat.core.util.locks.PersistentLockManager#releasePersistentLock(org.olat.core.util.locks.LockEntry) */ + @Override public void releasePersistentLock(LockResult le) { //synchronisation is solved in the LockManager String derivedLockString = ((LockResultImpl)le).getLockEntry().getKey(); @@ -126,7 +123,8 @@ public class DBPersistentLockManager implements PersistentLockManager, UserDataD * Delete all persisting-locks for certain identity. * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ - public void deleteUserData(Identity identity, String newDeletedUserName) { + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { String query = "from v in class org.olat.properties.Property where v.category = ? and v.longValue = ?"; DBFactory.getInstance().delete(query, new Object[] { CATEGORY_PERSISTENTLOCK, identity.getKey() }, new Type[] { StandardBasicTypes.STRING, StandardBasicTypes.LONG }); diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java index 5d0e681930e..648970272bf 100644 --- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java +++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java @@ -19,6 +19,7 @@ */ package org.olat.core.util.mail; +import java.io.File; import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -75,7 +76,7 @@ public class MailBoxExtension implements MailContextResolver, UserDataDeletable, } @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { //set as deleted all recipients log.info("Delete intern messages"); diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java index dced06eca94..bfc8e3bd908 100644 --- a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java @@ -332,7 +332,7 @@ public class AssessmentToolManagerImpl implements AssessmentToolManager { sb.append("count(ident.key)").append(" from ").append(IdentityImpl.class.getName()).append(" as ident ") .append(" inner join ident.user user "); } - sb.append(" where "); + sb.append(" where ident.status<").append(Identity.STATUS_DELETED).append(" and"); if(params.getBusinessGroupKeys() != null && params.getBusinessGroupKeys().size() > 0) { sb.append(" ident.key in (select participant.identity.key from repoentrytogroup as rel, businessgroup bgi, bgroupmember as participant") .append(" where rel.entry.key=:repoEntryKey and rel.group=bgi.baseGroup and rel.group=participant.group and bgi.key in (:businessGroupKeys) ") diff --git a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java index e21c54fb5ca..6dc72a23526 100644 --- a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java +++ b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java @@ -710,11 +710,17 @@ public class EfficiencyStatementManager implements UserDataDeletable { } /** - * Delete all efficiency-statements for certain identity. + * Archive efficiency statement and than delete them for the specified identity. + * * @param identity Delete data for this identity. */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { + archiveUserData(identity, archivePath); + deleteEfficientyStatement(identity); + } + + public void deleteEfficientyStatement(Identity identity) { try { StringBuilder sb = new StringBuilder(); sb.append("delete from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ") diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java index ff562a682a8..5cef78b7fa8 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java @@ -168,7 +168,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD private DB dbInstance; @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { // remove as Participant List<BusinessGroup> attendedGroups = findBusinessGroupsAttendedBy(identity); for (Iterator<BusinessGroup> iter = attendedGroups.iterator(); iter.hasNext();) { diff --git a/src/main/java/org/olat/ims/qti/QTIResultManager.java b/src/main/java/org/olat/ims/qti/QTIResultManager.java index 0ad0aba96f0..57f3aa97f34 100644 --- a/src/main/java/org/olat/ims/qti/QTIResultManager.java +++ b/src/main/java/org/olat/ims/qti/QTIResultManager.java @@ -25,6 +25,7 @@ package org.olat.ims.qti; +import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -335,7 +336,8 @@ public class QTIResultManager implements UserDataDeletable { * Delete all ResultSet for certain identity. * @param identity */ - public void deleteUserData(Identity identity, String newDeletedUserName) { + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { List<QTIResultSet> qtiResults = findQtiResultSets(identity); for (QTIResultSet set:qtiResults) { deleteResultSet(set); diff --git a/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java b/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java index cde3cd51bc0..053582b7822 100644 --- a/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java +++ b/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java @@ -50,7 +50,6 @@ import org.springframework.stereotype.Service; @Service public class AssessmentTestSessionDAO { - private final DateFormat formater = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); @Autowired @@ -319,6 +318,18 @@ public class AssessmentTestSessionDAO { } return query.getResultList(); } + + public List<AssessmentTestSession> getUserTestSessions(IdentityRef identity) { + StringBuilder sb = new StringBuilder(); + sb.append("select session from qtiassessmenttestsession session") + .append(" left join fetch session.testEntry testEntry") + .append(" left join fetch testEntry.olatResource testResource") + .append(" where session.identity.key=:identityKey ");; + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), AssessmentTestSession.class) + .setParameter("identityKey", identity.getKey()) + .getResultList(); + } public List<AssessmentTestSession> getUserTestSessions(RepositoryEntryRef courseEntry, String courseSubIdent, IdentityRef identity) { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java index 918ee6b3798..07909101ab8 100644 --- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java +++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java @@ -86,6 +86,7 @@ import org.olat.modules.assessment.AssessmentEntry; import org.olat.modules.assessment.manager.AssessmentEntryDAO; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryRef; +import org.olat.user.UserDataDeletable; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; @@ -144,7 +145,7 @@ import uk.ac.ed.ph.qtiworks.mathassess.MathAssessExtensionPackage; * */ @Service -public class QTI21ServiceImpl implements QTI21Service, InitializingBean, DisposableBean { +public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, InitializingBean, DisposableBean { private static final OLog log = Tracing.createLoggerFor(QTI21ServiceImpl.class); @@ -361,7 +362,20 @@ public class QTI21ServiceImpl implements QTI21Service, InitializingBean, Disposa } }); } - + + @Override + public int deleteUserDataPriority() { + return 10; + } + + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { + List<AssessmentTestSession> sessions = testSessionDao.getUserTestSessions(identity); + for(AssessmentTestSession session:sessions) { + testSessionDao.deleteTestSession(session); + } + } + @Override public boolean deleteAssessmentTestSession(List<Identity> identities, RepositoryEntryRef testEntry, RepositoryEntryRef entry, String subIdent) { Set<AssessmentEntry> entries = new HashSet<>(); diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java index b4192c06797..04ec3455b6e 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java @@ -289,11 +289,18 @@ public class AssessmentEntryDAO { * @return */ public int deleteEntryForRepositoryEntry(RepositoryEntryRef entry) { - StringBuilder sb = new StringBuilder(); - sb.append("delete from assessmententry data where data.repositoryEntry.key=:entryKey"); + String query = "delete from assessmententry data where data.repositoryEntry.key=:entryKey"; return dbInstance.getCurrentEntityManager() - .createQuery(sb.toString()) + .createQuery(query) .setParameter("entryKey", entry.getKey()) .executeUpdate(); } + + public int deleteEntryForIdentity(IdentityRef identity) { + String query = "delete from assessmententry data where data.identity.key=:identityKey"; + return dbInstance.getCurrentEntityManager() + .createQuery(query) + .setParameter("identityKey", identity.getKey()) + .executeUpdate(); + } } diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java index c2c654dd74e..267ebcabe64 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java @@ -19,6 +19,7 @@ */ package org.olat.modules.assessment.manager; +import java.io.File; import java.util.Collections; import java.util.List; @@ -30,6 +31,7 @@ import org.olat.modules.assessment.AssessmentService; import org.olat.modules.assessment.model.AssessmentEntryStatus; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryRef; +import org.olat.user.UserDataDeletable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -40,7 +42,7 @@ import org.springframework.stereotype.Service; * */ @Service -public class AssessmentServiceImpl implements AssessmentService { +public class AssessmentServiceImpl implements AssessmentService, UserDataDeletable { @Autowired private DB dbInstance; @@ -110,4 +112,9 @@ public class AssessmentServiceImpl implements AssessmentService { RepositoryEntry referenceEntry, AssessmentEntryStatus status) { return Collections.emptyList(); } + + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { + assessmentEntryDao.deleteEntryForIdentity(identity); + } } diff --git a/src/main/java/org/olat/modules/iq/IQManager.java b/src/main/java/org/olat/modules/iq/IQManager.java index b4929e0231e..e3da8f052c8 100644 --- a/src/main/java/org/olat/modules/iq/IQManager.java +++ b/src/main/java/org/olat/modules/iq/IQManager.java @@ -438,7 +438,8 @@ public class IQManager implements UserDataDeletable { * Delete all qti.ser and qti-resreporting files. * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ - public void deleteUserData(Identity identity, String newDeletedUserName) { + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { FilePersister.deleteUserData(identity); if(log.isDebug()) log.debug("Delete all qti.ser data and qti-resreporting data for identity=" + identity); diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java index a2a105f0585..5ce16dd722c 100644 --- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java +++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java @@ -707,7 +707,7 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel } @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { // } diff --git a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java index 1a5450b6ba6..645998abda0 100644 --- a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java +++ b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java @@ -719,7 +719,7 @@ public class ViteroManager implements UserDataDeletable { } @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { if(!viteroModule.isDeleteVmsUserOnUserDelete()) return; try { diff --git a/src/main/java/org/olat/note/NoteManager.java b/src/main/java/org/olat/note/NoteManager.java index 34034bd2f7a..fe39d28a3fa 100644 --- a/src/main/java/org/olat/note/NoteManager.java +++ b/src/main/java/org/olat/note/NoteManager.java @@ -25,6 +25,7 @@ package org.olat.note; +import java.io.File; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -155,7 +156,7 @@ public class NoteManager implements UserDataDeletable { * @param identity Delete notes for this identity. */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { List<Note> userNotes = listUserNotes(identity); for (Iterator<Note> iter = userNotes.iterator(); iter.hasNext();) { deleteNote( iter.next() ); diff --git a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java index 434744cd21d..846445fd0cc 100755 --- a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java @@ -19,6 +19,7 @@ */ package org.olat.portfolio.manager; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -171,7 +172,7 @@ public class EPFrontendManager implements UserDataDeletable, DeletableGroupData } @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { deleteUsersArtefacts(identity); List<PortfolioStructure> userPersonalMaps = getStructureElementsForUser(identity, ElementType.DEFAULT_MAP, ElementType.STRUCTURED_MAP); diff --git a/src/main/java/org/olat/properties/PropertyManager.java b/src/main/java/org/olat/properties/PropertyManager.java index b2d5375e7fc..0952507d845 100644 --- a/src/main/java/org/olat/properties/PropertyManager.java +++ b/src/main/java/org/olat/properties/PropertyManager.java @@ -25,6 +25,7 @@ package org.olat.properties; +import java.io.File; import java.util.Collections; import java.util.Date; import java.util.Iterator; @@ -726,7 +727,7 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { List<Property> userProperterties = listProperties(identity, null, null, null, null, null); for (Iterator<Property> iter = userProperterties.iterator(); iter.hasNext(); ) { deleteProperty( iter.next()); diff --git a/src/main/java/org/olat/repository/manager/CatalogManager.java b/src/main/java/org/olat/repository/manager/CatalogManager.java index 57764236435..0559f906c21 100644 --- a/src/main/java/org/olat/repository/manager/CatalogManager.java +++ b/src/main/java/org/olat/repository/manager/CatalogManager.java @@ -650,7 +650,7 @@ public class CatalogManager implements UserDataDeletable, InitializingBean { * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { // Remove as owner List<CatalogEntry> catalogEntries = getCatalogEntriesOwnedBy(identity); for (CatalogEntry catalogEntry:catalogEntries) { diff --git a/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java b/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java index bef0547530d..c6d0fd2f86f 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java +++ b/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java @@ -25,6 +25,7 @@ package org.olat.repository.manager; +import java.io.File; import java.util.Iterator; import java.util.List; @@ -73,7 +74,7 @@ public class RepositoryDeletionManager implements UserDataDeletable { * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { // Remove as owner List<RepositoryEntry> repoEntries = RepositoryManager.getInstance().queryByOwner(identity, new String[] {}/*no type limit*/); for (Iterator<RepositoryEntry> iter = repoEntries.iterator(); iter.hasNext();) { diff --git a/src/main/java/org/olat/user/DisplayPortraitManager.java b/src/main/java/org/olat/user/DisplayPortraitManager.java index c49ec2e8778..eb01ca3cf82 100644 --- a/src/main/java/org/olat/user/DisplayPortraitManager.java +++ b/src/main/java/org/olat/user/DisplayPortraitManager.java @@ -275,7 +275,7 @@ public class DisplayPortraitManager extends BasicManager implements UserDataDele * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { String userHomePage = FolderConfig.getCanonicalRoot() + FolderConfig.getUserHomePage(identity.getName()); File portraitDir = new File(userHomePage, "portrait"); if(portraitDir.exists()) { diff --git a/src/main/java/org/olat/user/HomePageConfigManagerImpl.java b/src/main/java/org/olat/user/HomePageConfigManagerImpl.java index 906954d4863..f187cc3af65 100644 --- a/src/main/java/org/olat/user/HomePageConfigManagerImpl.java +++ b/src/main/java/org/olat/user/HomePageConfigManagerImpl.java @@ -151,7 +151,7 @@ public class HomePageConfigManagerImpl extends BasicManager implements HomePageC * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { String pathHomePage = FolderConfig.getCanonicalRoot() + FolderConfig.getUserHomePage(identity.getName()); File userHomePage = new File(pathHomePage); if(userHomePage.exists()) { diff --git a/src/main/java/org/olat/user/PersonalFolderManager.java b/src/main/java/org/olat/user/PersonalFolderManager.java index 5d794074d60..0fff17749cd 100644 --- a/src/main/java/org/olat/user/PersonalFolderManager.java +++ b/src/main/java/org/olat/user/PersonalFolderManager.java @@ -25,6 +25,8 @@ package org.olat.user; +import java.io.File; + import org.olat.core.commons.modules.bc.BriefcaseWebDAVProvider; import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.id.Identity; @@ -34,7 +36,7 @@ import org.olat.core.logging.Tracing; /** * Manager for the personal-folder of a user. */ -public class PersonalFolderManager extends BriefcaseWebDAVProvider implements UserDataDeletable { +public class PersonalFolderManager extends BriefcaseWebDAVProvider implements UserDataDeletable { private static final OLog log = Tracing.createLoggerFor(PersonalFolderManager.class); @@ -59,7 +61,7 @@ public class PersonalFolderManager extends BriefcaseWebDAVProvider implements U * Delete personal-folder homes/<username> (private & public) of an user. */ @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { new OlatRootFolderImpl(getRootPathFor(identity), null).deleteSilently(); log.debug("Personal-folder deleted for identity=" + identity); } diff --git a/src/main/java/org/olat/user/UserDataDeletable.java b/src/main/java/org/olat/user/UserDataDeletable.java index 672780ae328..2ae5711aaf2 100644 --- a/src/main/java/org/olat/user/UserDataDeletable.java +++ b/src/main/java/org/olat/user/UserDataDeletable.java @@ -25,6 +25,8 @@ package org.olat.user; +import java.io.File; + import org.olat.core.id.Identity; @@ -35,9 +37,14 @@ import org.olat.core.id.Identity; * @author Christian Guretzki */ public interface UserDataDeletable { + + default public int deleteUserDataPriority() { + return 0; + } + /** * Delete user data for certain user * @param identity Data for this identity will be deleted */ - public void deleteUserData(Identity identity, String newDeletedUserName); + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath); } \ No newline at end of file diff --git a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java index 3ec0bd08079..152bcb9941b 100644 --- a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java +++ b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java @@ -258,10 +258,10 @@ public class MailManagerTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //delete the 4 users datas - mailBoxExtension.deleteUserData(toId_1, "lalala"); - mailBoxExtension.deleteUserData(toId_2, "lalala"); - mailBoxExtension.deleteUserData(toId_3, "lalala"); - mailBoxExtension.deleteUserData(fromId, "lalala"); + mailBoxExtension.deleteUserData(toId_1, "lalala", null); + mailBoxExtension.deleteUserData(toId_2, "lalala", null); + mailBoxExtension.deleteUserData(toId_3, "lalala", null); + mailBoxExtension.deleteUserData(fromId, "lalala", null); dbInstance.commitAndCloseSession(); //check inbox / outbox @@ -324,10 +324,10 @@ public class MailManagerTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //delete the 4 users datas - mailBoxExtension.deleteUserData(fromId, "lalala"); - mailBoxExtension.deleteUserData(toId_1, "lalala"); - mailBoxExtension.deleteUserData(toId_2, "lalala"); - mailBoxExtension.deleteUserData(toId_3, "lalala"); + mailBoxExtension.deleteUserData(fromId, "lalala", null); + mailBoxExtension.deleteUserData(toId_1, "lalala", null); + mailBoxExtension.deleteUserData(toId_2, "lalala", null); + mailBoxExtension.deleteUserData(toId_3, "lalala", null); dbInstance.commitAndCloseSession(); //check mail by meta id diff --git a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java index 1589a007a7c..851ca4ae359 100644 --- a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java +++ b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java @@ -251,7 +251,7 @@ public class AssessmentManagerTest extends OlatTestCase { efficiencyStatement = checkEfficiencyStatement(courseRepositoryEntry); //delete the efficiencyStatement of the student - efficiencyStatementManager.deleteUserData(student, "deleted_" + student.getName()); + efficiencyStatementManager.deleteEfficientyStatement(student); DBFactory.getInstance().closeSession(); efficiencyStatement = efficiencyStatementManager.getUserEfficiencyStatementByCourseRepositoryEntry(courseRepositoryEntry, student); DBFactory.getInstance().closeSession(); diff --git a/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java b/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java index 75598860459..9f411c6ea30 100644 --- a/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java +++ b/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java @@ -122,7 +122,7 @@ public class EfficiencyStatementManagerTest extends OlatTestCase { Assert.assertEquals(2, statementsLight1.size()); //delete user 1 - effManager.deleteUserData(participant1, "deleted"); + effManager.deleteEfficientyStatement(participant1); dbInstance.commitAndCloseSession(); //check the efficiency statements diff --git a/src/test/java/org/olat/properties/PropertyTest.java b/src/test/java/org/olat/properties/PropertyTest.java index e03e754e887..aef24041b8e 100644 --- a/src/test/java/org/olat/properties/PropertyTest.java +++ b/src/test/java/org/olat/properties/PropertyTest.java @@ -237,7 +237,7 @@ public class PropertyTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //delete user 1 datas - pm.deleteUserData(id1, "del-" + id1.getName()); + pm.deleteUserData(id1, "del-" + id1.getName(), null); dbInstance.commitAndCloseSession(); //check if really deleted -- GitLab