diff --git a/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java b/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java index 5c502e618aa21a7b90fc4c4870f644a2a493321e..0ff7faa89a98cd67e51f0d2931f65ce028bdcf3f 100644 --- a/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java +++ b/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java @@ -121,7 +121,7 @@ public class DirectDeleteController extends BasicController { } } else if (sourceController == deleteConfirmController) { if (DialogBoxUIFactory.isOkEvent(event)) { - deleteIdentities(toDelete); + boolean success = deleteIdentities(toDelete); if (bdc != null) { bdc.sendMail(); } @@ -129,7 +129,10 @@ public class DirectDeleteController extends BasicController { initializeUserSearchController(ureq); initializeUserListForm(ureq); - showInfo("deleted.users.msg"); + if (success) { + showInfo("deleted.users.msg"); + } + // else error already shown } } else if (sourceController == bdc) { toDelete = bdc.getToDelete(); @@ -171,12 +174,19 @@ public class DirectDeleteController extends BasicController { return buf.toString(); } - private void deleteIdentities(List<Identity> toDeleteIdentities) { + private boolean deleteIdentities(List<Identity> toDeleteIdentities) { + boolean totalSuccess = true; for (int i = 0; i < toDeleteIdentities.size(); i++) { Identity identity = toDeleteIdentities.get(i); - UserDeletionManager.getInstance().deleteIdentity(identity); - DBFactory.getInstance().intermediateCommit(); + boolean success = UserDeletionManager.getInstance().deleteIdentity(identity); + if (success) { + DBFactory.getInstance().intermediateCommit(); + } else { + totalSuccess = false; + showError("error.delete", identity.getName()); + } } + return totalSuccess; } private void initializeUserSearchController(UserRequest ureq) { diff --git a/src/main/java/org/olat/admin/user/delete/ReadyToDeleteController.java b/src/main/java/org/olat/admin/user/delete/ReadyToDeleteController.java index d1520c7ef1ca2bc5d6b1981de5f8434acdc7c9d1..866464fdd0754fa022f6e1abe957c7ff5c146e98 100644 --- a/src/main/java/org/olat/admin/user/delete/ReadyToDeleteController.java +++ b/src/main/java/org/olat/admin/user/delete/ReadyToDeleteController.java @@ -204,17 +204,11 @@ public class ReadyToDeleteController extends BasicController { private void deleteIdentities(List<Identity> identities, List<String> errors) { for (Identity id:identities) { - try { - UserDeletionManager.getInstance().deleteIdentity( id ); - } catch (Exception e) { + boolean success = UserDeletionManager.getInstance().deleteIdentity( id ); + if (success) { + DBFactory.getInstance().intermediateCommit(); + } else { errors.add(id.getName()); - logError("", e); - } finally { - try { - DBFactory.getInstance().intermediateCommit(); - } catch (Exception e) { - logError("", e); - } } } } 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 5e999f2a4ff05cbc9bd03cbd1a56a780fd9ff7e9..8c93a2ce335dcd8d3c4a0bd853ac0e790793491e 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 @@ -26,13 +26,10 @@ 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.Collections; import java.util.Comparator; -import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -40,11 +37,8 @@ import java.util.Map; 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.IdentityImpl; -import org.olat.basesecurity.SecurityGroup; -import org.olat.basesecurity.manager.AuthenticationHistoryDAO; import org.olat.basesecurity.manager.GroupDAO; import org.olat.commons.lifecycle.LifeCycleManager; import org.olat.core.CoreSpringFactory; @@ -53,10 +47,8 @@ import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.persistence.DBQuery; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; -import org.olat.core.id.User; import org.olat.core.id.UserConstants; import org.olat.core.manager.BasicManager; -import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.core.util.i18n.I18nManager; import org.olat.core.util.mail.MailBundle; @@ -66,25 +58,24 @@ import org.olat.core.util.mail.MailerResult; import org.olat.core.util.session.UserSessionManager; import org.olat.properties.Property; import org.olat.properties.PropertyManager; -import org.olat.registration.RegistrationManager; -import org.olat.registration.TemporaryKey; import org.olat.repository.RepositoryDeletionModule; import org.olat.user.UserDataDeletable; -import org.olat.user.UserManager; -import org.olat.user.propertyhandlers.UserPropertyHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** - * Manager for user-deletion. + * Manager for user-deletion. <br /> + * User deletion works by implementing the UserDataDeletable interface and + * setting an optional delete priority. Use a high priority (890 - 510) to + * delete things first. The default priority is 500. Use a low priority (110 - + * 490) to delete at the. * * @author Christian Guretzki */ @Service("userDeletionManager") public class UserDeletionManager extends BasicManager { - public static final String DELETED_USER_DELIMITER = "_bkp_"; /** Default value for last-login duration in month. */ private static final int DEFAULT_LAST_LOGIN_DURATION = 24; /** Default value for delete-email duration in days. */ @@ -97,24 +88,18 @@ public class UserDeletionManager extends BasicManager { public static final String SEND_DELETE_EMAIL_ACTION = "sendDeleteEmail"; private static final String USER_ARCHIVE_DIR = "archive_deleted_users"; private static final String USER_DELETED_ACTION = "userdeleted"; - private static boolean keepUserLoginAfterDeletion; - private static boolean keepUserEmailAfterDeletion; // Flag used in user-delete to indicate that all deletable managers are initialized @Autowired private RepositoryDeletionModule deletionModule; @Autowired - private RegistrationManager registrationManager; - @Autowired private BaseSecurity securityManager; @Autowired private MailManager mailManager; @Autowired private UserSessionManager userSessionManager; @Autowired - private AuthenticationHistoryDAO suthenticationHistoryDao; - @Autowired private GroupDAO groupDao; @Autowired private DB dbInstance; @@ -264,111 +249,67 @@ public class UserDeletionManager extends BasicManager { /** * Delete all user-data in registered deleteable resources. + * * @param identity - * @return true + * @return true: delete was successfull; false: delete could not finish */ - public void deleteIdentity(Identity identity) { - logInfo("Start deleteIdentity for identity=" + identity); - - //logout + public boolean deleteIdentity(Identity identity) { + logInfo("Start deleteIdentity for identity=" + identity); + if(Identity.STATUS_PERMANENT.equals(identity.getStatus())) { + logInfo("Aborted deletion of identity=" + identity + ", identity is flagged as PERMANENT"); + return false; + } + // Logout user and start with delete process userSessionManager.signOffAndClearAll(identity); - - String newName = getBackupStringWithDate(identity.getName()); - - logInfo("Start Deleting user=" + identity); + + // Delete data of modules that implement the user data deletable + String anonymisedIdentityName = identity.getKey() + ""; File archiveFilePath = getArchivFilePath(identity); Map<String,UserDataDeletable> userDataDeletableResourcesMap = CoreSpringFactory.getBeansOfType(UserDataDeletable.class); List<UserDataDeletable> userDataDeletableResources = new ArrayList<>(userDataDeletableResourcesMap.values()); + // Start with high priorities (900: user manager), then continue with + // others. Default priority is 500. End with low priorities (100: base + // security) Collections.sort(userDataDeletableResources, new UserDataDeletableComparator()); for (UserDataDeletable element : userDataDeletableResources) { - logInfo("UserDataDeletable-Loop element=" + element); - element.deleteUserData(identity, newName, archiveFilePath); - } - - // Delete all authentications for certain identity - List<Authentication> authentications = securityManager.getAuthentications(identity); - for (Authentication auth:authentications) { - logInfo("deleteAuthentication auth=" + auth); - securityManager.deleteAuthentication(auth); - logDebug("Delete auth=" + auth + " of identity=" + identity); - } - // delete the authentication history - suthenticationHistoryDao.deleteAuthenticationHistory(identity); - - //remove identity from its security groups - List<SecurityGroup> securityGroups = securityManager.getSecurityGroupsForIdentity(identity); - for (SecurityGroup secGroup : securityGroups) { - securityManager.removeIdentityFromSecurityGroup(identity, secGroup); - logInfo("Removing user=" + identity + " from security group=" + secGroup.toString()); - } - //remove identity from groups - groupDao.removeMemberships(identity); - - String key = identity.getUser().getProperty("emchangeKey", null); - TemporaryKey tempKey = registrationManager.loadTemporaryKeyByRegistrationKey(key); - if (tempKey != null) { - registrationManager.deleteTemporaryKey(tempKey); - } - - - identity = securityManager.loadIdentityByKey(identity.getKey()); - //keep login-name only -> change email - - User persistedUser = identity.getUser(); - List<UserPropertyHandler> userPropertyHandlers = UserManager.getInstance().getAllUserPropertyHandlers(); - for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) { - String actualProperty = userPropertyHandler.getName(); - if (userPropertyHandler.isDeletable() - && !(keepUserEmailAfterDeletion && UserConstants.EMAIL.equals(actualProperty))) { - persistedUser.setProperty(actualProperty, null); - } - - if((!keepUserEmailAfterDeletion && UserConstants.EMAIL.equals(actualProperty))) { - String oldEmail = userPropertyHandler.getUserProperty(persistedUser, null); - String newEmail = ""; - if (StringHelper.containsNonWhitespace(oldEmail)){ - newEmail = getBackupStringWithDate(oldEmail); - } - logInfo("Update user-property user=" + persistedUser); - userPropertyHandler.setUserProperty(persistedUser, newEmail); + try { + logInfo("UserDataDeletable-Loop for identity::" + identity.getKey() + " and element::" + element.getClass().getSimpleName()); + element.deleteUserData(identity, anonymisedIdentityName, archiveFilePath); + } catch (Exception e) { + logError("Error while deleting identity::" + identity.getKey() + " data for and element::" + + element.getClass().getSimpleName() + + ". Aboring delete process, user partially deleted, but not yet marked as deleted", e); + dbInstance.rollbackAndCloseSession(); + return false; } } - UserManager.getInstance().updateUserFromIdentity(identity); - logInfo("deleteUserProperties user=" + persistedUser); + // Done with all modules that keep user data, now finish delete process dbInstance.commit(); - identity = securityManager.loadIdentityByKey(identity.getKey()); - //keep email only -> change login-name - if (!keepUserEmailAfterDeletion) { - identity = securityManager.saveIdentityName(identity, newName, null); - } - - //keep everything, change identity.status to deleted - logInfo("Change stater identity=" + identity); - identity = securityManager.saveIdentityStatus(identity, Identity.STATUS_DELETED); + + // Remove identity from all remaining groups and remove roles + int count = groupDao.removeMemberships(identity); + logInfo("Delete " + count + " group memberships/roles for identity::" + identity.getKey()); + // Cleanup lifecycle data + LifeCycleManager.createInstanceFor(identity).markTimestampFor(USER_DELETED_ACTION, null); LifeCycleManager.createInstanceFor(identity).deleteTimestampFor(SEND_DELETE_EMAIL_ACTION); - LifeCycleManager.createInstanceFor(identity).markTimestampFor(USER_DELETED_ACTION, createLifeCycleLogDataFor(identity)); - logAudit("User-Deletion: Delete all userdata for identity=" + identity); - } + // Anonymise identity to conform with data privacy law. The username is removed + // by default and replaced with an anonymous database key. The identity + // object itself must remain in the database since there are referenced + // objects such as undeletable forum entries linked to it + identity = securityManager.saveIdentityName(identity, anonymisedIdentityName, null); + logInfo("Replaced username with database key for identity::" + identity.getKey()); - public String getBackupStringWithDate(String original){ - DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm"); - String dateStamp = dateFormat.format(new Date()); - return dateStamp + DELETED_USER_DELIMITER + original; - } + // Finally mark user as deleted and we are done + identity = securityManager.saveIdentityStatus(identity, Identity.STATUS_DELETED); + logInfo("Data of identity deleted and state of identity::" + identity.getKey() + " changed to 'deleted'"); - private String createLifeCycleLogDataFor(Identity identity) { - StringBuilder buf = new StringBuilder(); - buf.append("<identity>"); - buf.append("<username>").append(identity.getName()).append("</username>"); - buf.append("<lastname>").append(identity.getName()).append("</lastname>"); - buf.append("<firstname>").append(identity.getName()).append("</firstname>"); - buf.append("<email>").append(identity.getName()).append("</email>"); - buf.append("</identity>"); - return buf.toString(); - } + dbInstance.commit(); + logAudit("User-Deletion: Deleted identity::" + identity.getKey()); + return true; + } /** * Re-activate an identity, lastLogin = now, reset deleteemaildate = null. @@ -436,27 +377,7 @@ public class UserDeletionManager extends BasicManager { } return archiveIdentityRootDir; } - - /** - * Setter method used by spring - * @param keepUserLoginAfterDeletion The keepUserLoginAfterDeletion to set. - */ - public void setKeepUserLoginAfterDeletion(boolean keepUserLoginAfterDeletion) { - UserDeletionManager.keepUserLoginAfterDeletion = keepUserLoginAfterDeletion; - } - - /** - * Setter method used by spring - * @param keepUserEmailAfterDeletion The keepUserEmailAfterDeletion to set. - */ - public void setKeepUserEmailAfterDeletion(boolean keepUserEmailAfterDeletion) { - UserDeletionManager.keepUserEmailAfterDeletion = keepUserEmailAfterDeletion; - } - - public static boolean isKeepUserLoginAfterDeletion() { - return keepUserLoginAfterDeletion; - } - + public static class UserDataDeletableComparator implements Comparator<UserDataDeletable> { @Override public int compare(UserDataDeletable o1, UserDataDeletable o2) { diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java index bb335b3793eb43d5924d1eab0d334d59cfa3df89..1b6dbed1d3d1b438d75d1199dfda4c74f329d4cf 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java @@ -26,6 +26,7 @@ package org.olat.basesecurity; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -76,6 +77,7 @@ import org.olat.portfolio.manager.InvitationDAO; import org.olat.resource.OLATResource; import org.olat.resource.OLATResourceManager; import org.olat.user.ChangePasswordController; +import org.olat.user.UserDataDeletable; import org.olat.user.UserImpl; import org.olat.user.UserManager; @@ -88,7 +90,7 @@ import org.olat.user.UserManager; * * @author Felix Jost, Florian Gnaegi */ -public class BaseSecurityManager implements BaseSecurity { +public class BaseSecurityManager implements BaseSecurity, UserDataDeletable { private static final OLog log = Tracing.createLoggerFor(BaseSecurityManager.class); @@ -2166,5 +2168,34 @@ public class BaseSecurityManager implements BaseSecurity { guestIdentity = dbInstance.getCurrentEntityManager().merge(guestIdentity); } return guestIdentity; + } + + @Override + public int deleteUserDataPriority() { + // delete with low priority at the end of the deletion process + return 10; + } + + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { + // 1) delete all authentication tokens + List<Authentication> authentications = getAuthentications(identity); + for (Authentication auth:authentications) { + deleteAuthentication(auth); + log.info("Delete authentication provider::" + auth.getProvider() + " of identity=" + identity); + } + + // 2) Delete the authentication history + authenticationHistoryDao.deleteAuthenticationHistory(identity); + + // 3) Remove legacy security group memberships + List<SecurityGroup> securityGroups = getSecurityGroupsForIdentity(identity); + for (SecurityGroup secGroup : securityGroups) { + removeIdentityFromSecurityGroup(identity, secGroup); + log.info("Removing identity::" + identity.getKey() + " from security group::" + secGroup.getKey() + + ", resourceableTypeName::" + secGroup.getResourceableTypeName() + ", resourceableId" + + secGroup.getResourceableId()); + } + // new security groups / memberships are deleted in UserDeletionManager } } \ No newline at end of file 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 dabf13d491fdddccb944f55bc4f940ae047a028e..1d3c50aa1611e3aecec481c7fcd83f55b2d87632 100644 --- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java +++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java @@ -416,7 +416,8 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia @Override public int deleteUserDataPriority() { - return 10; + // delete with high priority + return 850; } @Override diff --git a/src/main/java/org/olat/properties/PropertyManager.java b/src/main/java/org/olat/properties/PropertyManager.java index 88eb175318540a77420931f039402fc41684a92a..dc9148b5767edd0085a27548357d245302ab7561 100644 --- a/src/main/java/org/olat/properties/PropertyManager.java +++ b/src/main/java/org/olat/properties/PropertyManager.java @@ -28,7 +28,6 @@ package org.olat.properties; import java.io.File; import java.util.Collections; import java.util.Date; -import java.util.Iterator; import java.util.List; import javax.persistence.Query; @@ -753,16 +752,18 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { return DBFactory.getInstance().getCurrentEntityManager().createQuery(sb.toString(), String.class).getResultList(); } + @Override + public int deleteUserDataPriority() { + // delete with low priority + return 110; + } /** * Delete all properties of a certain identity. * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity) */ @Override 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()); - } + deleteProperties(identity, null, null, null, null); if(isLogDebugEnabled()) { logDebug("All properties deleted for identity=" + identity); } diff --git a/src/main/java/org/olat/registration/RegistrationManager.java b/src/main/java/org/olat/registration/RegistrationManager.java index 59b5d03f620dc9972afb98348c9d4a8e32632f16..ee4f6890854d1ddeea3dc2f0de21ec0f3026f2b8 100644 --- a/src/main/java/org/olat/registration/RegistrationManager.java +++ b/src/main/java/org/olat/registration/RegistrationManager.java @@ -25,6 +25,7 @@ package org.olat.registration; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -58,6 +59,7 @@ import org.olat.core.util.mail.MailerResult; import org.olat.core.util.xml.XStreamHelper; import org.olat.properties.Property; import org.olat.properties.PropertyManager; +import org.olat.user.UserDataDeletable; import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -70,7 +72,7 @@ import com.thoughtworks.xstream.XStream; * @author Sabina Jeger */ @Service("selfRegistrationManager") -public class RegistrationManager { +public class RegistrationManager implements UserDataDeletable { private static final OLog log = Tracing.createLoggerFor(RegistrationManager.class); @@ -278,6 +280,15 @@ public class RegistrationManager { .executeUpdate(); } + private void deleteAllTemporaryKeys(Long identityKey) { + if (identityKey == null) return; + dbInstance.getCurrentEntityManager() + .createNamedQuery("deleteTemporaryKeyByIdentity") + .setParameter("identityKey", identityKey) + .executeUpdate(); + } + + /** * returns an existing TemporaryKey by a given email address or null if none * found @@ -438,4 +449,10 @@ public class RegistrationManager { String random = UUID.randomUUID().toString(); return Encoder.md5hash(email + ip + random); } + + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { + // Delete temporary keys used in change email or password workflow + deleteAllTemporaryKeys(identity.getKey()); + } } \ No newline at end of file diff --git a/src/main/java/org/olat/registration/TemporaryKeyImpl.java b/src/main/java/org/olat/registration/TemporaryKeyImpl.java index e51fc362311aeca743a3f3c67f64805f4ba86d26..6a136cc025deab83f10c4951c6a37b8c2c4f27a2 100644 --- a/src/main/java/org/olat/registration/TemporaryKeyImpl.java +++ b/src/main/java/org/olat/registration/TemporaryKeyImpl.java @@ -56,7 +56,8 @@ import org.olat.core.id.Persistable; @NamedQuery(name="loadTemporaryKeyByRegKey", query="select r from otemporarykey r where r.registrationKey=:regkey"), @NamedQuery(name="loadTemporaryKeyByEmailAddress", query="select r from otemporarykey r where r.emailAddress=:email"), @NamedQuery(name="loadTemporaryKeyByIdentity", query="select r from otemporarykey r where r.identityKey=:identityKey and action=:action"), - @NamedQuery(name="deleteTemporaryKeyByIdentityAndAction", query="delete from otemporarykey r where r.identityKey=:identityKey and action=:action") + @NamedQuery(name="deleteTemporaryKeyByIdentityAndAction", query="delete from otemporarykey r where r.identityKey=:identityKey and action=:action"), + @NamedQuery(name="deleteTemporaryKeyByIdentity", query="delete from otemporarykey r where r.identityKey=:identityKey") }) public class TemporaryKeyImpl implements Persistable, CreateInfo, TemporaryKey { diff --git a/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java b/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java index c6d0fd2f86f3cd6eda205934ba40beac687f2cce..72fd48f1e097b63b5c3b171597c7ee290c4df5b6 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java +++ b/src/main/java/org/olat/repository/manager/RepositoryDeletionManager.java @@ -92,6 +92,7 @@ public class RepositoryDeletionManager implements UserDataDeletable { for (Iterator<RepositoryEntry> iter = repoEntries.iterator(); iter.hasNext();) { RepositoryEntry repositoryEntry = iter.next(); repositoryEntry.setInitialAuthor(deletionModule.getAdminUserIdentity().getName()); + //FIXME DSGVO log.info("Delete user-data, add Administrator-identity as initial-author of repositoryEntry=" + repositoryEntry.getDisplayname()); } log.debug("All owner and initial-author entries in repository deleted for identity=" + identity); diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_8_4_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_8_4_0.java index 99679036ea5df47ccac8152a64401a1c883ad56a..b49c4f01d644a28f9e78bceaf8f0920ba4091d2e 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_8_4_0.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_8_4_0.java @@ -236,13 +236,8 @@ public class OLATUpgrade_8_4_0 extends OLATUpgrade { private boolean processDeletedIdentityEmail(User deletedUser, String property) { String email = deletedUser.getProperty(property, null); if(StringHelper.containsNonWhitespace(email)) { - int indexHat = email.indexOf('@'); - int indexMark = email.indexOf(UserDeletionManager.DELETED_USER_DELIMITER); - if(indexHat > 0 && (indexMark < 0 || indexMark > indexHat)) { - String newEmail = userDeletionManager.getBackupStringWithDate(email); - deletedUser.setProperty(property, newEmail); - return true; - } + deletedUser.setProperty(property, null); + return true; } return false; } diff --git a/src/main/java/org/olat/user/AbstractUserPropertyHandler.java b/src/main/java/org/olat/user/AbstractUserPropertyHandler.java index 2bdb7322c11c6f8b169cbbf3e2b6236bc5c29fc5..ac779bfcd8056797269074a133513aa36580ab0e 100644 --- a/src/main/java/org/olat/user/AbstractUserPropertyHandler.java +++ b/src/main/java/org/olat/user/AbstractUserPropertyHandler.java @@ -51,7 +51,6 @@ public abstract class AbstractUserPropertyHandler implements UserPropertyHandler private String name; private String group; - private boolean deletable = true; // default private String databaseColumnName; /** @@ -130,14 +129,6 @@ public abstract class AbstractUserPropertyHandler implements UserPropertyHandler return new DefaultColumnDescriptor(i18nColumnDescriptorLabelKey(), position, action, locale); } - /** - * @see org.olat.user.propertyhandlers.UserPropertyHandler#isDeletable() - */ - @Override - public boolean isDeletable() { - return deletable; - } - /** * @return The non-i18-ified raw value from the database */ @@ -192,14 +183,6 @@ public abstract class AbstractUserPropertyHandler implements UserPropertyHandler this.group = group; } - /** - * Spring setter - * @param isDeletable - */ - public void setDeletable(boolean deletable) { - this.deletable = deletable; - } - /** * Spring setter * @param name diff --git a/src/main/java/org/olat/user/UserDataDeletable.java b/src/main/java/org/olat/user/UserDataDeletable.java index 2ae5711aaf2008b4ea596a30064816d91d5533be..7a2f953046418f61d3ed2999e4de8322f130f286 100644 --- a/src/main/java/org/olat/user/UserDataDeletable.java +++ b/src/main/java/org/olat/user/UserDataDeletable.java @@ -39,7 +39,8 @@ import org.olat.core.id.Identity; public interface UserDataDeletable { default public int deleteUserDataPriority() { - return 0; + // default is to delete with medium priority (0=very low, 1000=very high) + return 500; } /** diff --git a/src/main/java/org/olat/user/UserManagerImpl.java b/src/main/java/org/olat/user/UserManagerImpl.java index d29f965cbd1a66276bdd4ce26864ee24974c24ba..80828bb9dd1b486a813fb0453916261d39a4e58f 100644 --- a/src/main/java/org/olat/user/UserManagerImpl.java +++ b/src/main/java/org/olat/user/UserManagerImpl.java @@ -19,6 +19,7 @@ */ package org.olat.user; +import java.io.File; import java.io.Serializable; import java.nio.charset.Charset; import java.util.ArrayList; @@ -59,6 +60,7 @@ import org.olat.login.auth.AuthenticationProvider; import org.olat.properties.Property; import org.olat.properties.PropertyManager; import org.olat.registration.RegistrationManager; +import org.olat.user.propertyhandlers.UserPropertyHandler; import org.springframework.beans.factory.annotation.Autowired; /** @@ -70,7 +72,7 @@ import org.springframework.beans.factory.annotation.Autowired; * * @author Florian Gnaegi, frentix GmbH, http://www.frentix.com */ -public class UserManagerImpl extends UserManager { +public class UserManagerImpl extends UserManager implements UserDataDeletable { // used to save user data in the properties table private static final String CHARSET = "charset"; private UserDisplayNameCreator userDisplayNameCreator; @@ -553,4 +555,29 @@ public class UserManagerImpl extends UserManager { return domain; } + @Override + public int deleteUserDataPriority() { + // delete with high priority + return 100; + } + + @Override + public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { + identity = securityManager.loadIdentityByKey(identity.getKey()); + User persistedUser = identity.getUser(); + List<UserPropertyHandler> userPropertyHandlers = this.getAllUserPropertyHandlers(); + for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) { + String actualProperty = userPropertyHandler.getName(); + if (UserConstants.USERNAME.equals(actualProperty)) { + // Skip, user name will be anonymised by BaseSecurityManager + } else { + persistedUser.setProperty(actualProperty, null); + logDebug("Deleted user-property::" + actualProperty + " for identity::+" + identity.getKey()); + } + } + this.updateUserFromIdentity(identity); + logInfo("deleteUserProperties user::" + persistedUser.getKey() + " from identity::" + identity.getKey()); + dbInstance.commit(); + } + } diff --git a/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java b/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java index 7e0e016131d88605d35dfdc283da9dd66483054a..d58b3d54aed5a76c91251ce24a591bfde7038af5 100644 --- a/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java +++ b/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java @@ -21,21 +21,16 @@ package org.olat.user.propertyhandlers; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.olat.core.configuration.Initializable; import org.olat.core.gui.translator.PackageTranslator; import org.olat.core.gui.translator.Translator; import org.olat.core.logging.OLATRuntimeException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.core.logging.activity.LogModule; import org.olat.user.UserPropertiesConfig; /** @@ -46,9 +41,8 @@ import org.olat.user.UserPropertiesConfig; * * @author Florian Gnaegi, frentix GmbH, http://www.frentix.com */ -public class UserPropertiesConfigImpl implements UserPropertiesConfig, Initializable { +public class UserPropertiesConfigImpl implements UserPropertiesConfig { private static final OLog log = Tracing.createLoggerFor(UserPropertiesConfigImpl.class); - private static final String USER_PROPERTY_LOG_CONFIGURATION = "userPropertyLogConfiguration"; public static final String PACKAGE = UserPropertiesConfigImpl.class.getPackage().getName(); @@ -60,16 +54,6 @@ public class UserPropertiesConfigImpl implements UserPropertiesConfig, Initializ private int maxNumOfInterests; - @Override - public void init() { - List<UserPropertyHandler> userPropHandlers = getUserPropertyHandlersFor(USER_PROPERTY_LOG_CONFIGURATION, false); - Set<String> userProperties = new LinkedHashSet<String>(); - for (Iterator<UserPropertyHandler> iterator = userPropHandlers.iterator(); iterator.hasNext();) { - userProperties.add(iterator.next().getName()); - } - LogModule.setUserProperties(userProperties); - } - @Override public int getMaxNumOfInterests() { return maxNumOfInterests; diff --git a/src/main/java/org/olat/user/propertyhandlers/UserPropertyHandler.java b/src/main/java/org/olat/user/propertyhandlers/UserPropertyHandler.java index 91edd4d1326b3463458f1d4ecc6d415025008511..ea49be830663aac35596fe9202712465bd81d9e8 100644 --- a/src/main/java/org/olat/user/propertyhandlers/UserPropertyHandler.java +++ b/src/main/java/org/olat/user/propertyhandlers/UserPropertyHandler.java @@ -215,11 +215,4 @@ public interface UserPropertyHandler { * @return The i18n key for the UserPropertyHandler column label */ public String i18nColumnDescriptorLabelKey(); - - /** - * @return true: this field can be deleted when deleting a user; false: this - * field should be archived when deleting a user - */ - public boolean isDeletable(); - } diff --git a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml index 47a6a47ec50f0e35da83619cb59a9ef2bb4ad265..654c90666c4b8329333659ecc0d536641b90041e 100644 --- a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml +++ b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml @@ -11,7 +11,7 @@ <!-- Configure the users properties, forms and tables --> - <bean id="org.olat.user.UserPropertiesConfig" class="org.olat.user.propertyhandlers.UserPropertiesConfigImpl" init-method="init"> + <bean id="org.olat.user.UserPropertiesConfig" class="org.olat.user.propertyhandlers.UserPropertiesConfigImpl"> <property name="maxNumOfInterests" value="${user.interests.max.number:5}" /> <property name="userPropertyHandlers"> <list> diff --git a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertriesHandlersContext.xml b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertriesHandlersContext.xml index 6253742f8ecdcb99cdc641c2ca6efa17f1022957..c1845fe56c55cd5e3f447faada40126a809d3283 100644 --- a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertriesHandlersContext.xml +++ b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertriesHandlersContext.xml @@ -12,37 +12,31 @@ <bean id="userPropertyUserName" class="org.olat.user.propertyhandlers.UserNameReadOnlyPropertyHandler"> <property name="name" value="userName" /> <property name="group" value="account" /> - <property name="deletable" value="false" /> </bean> <bean id="userPropertyFirstName" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="firstName" /> <property name="group" value="account" /> - <property name="deletable" value="false" /> </bean> <bean id="userPropertyLastName" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="lastName" /> <property name="group" value="account" /> - <property name="deletable" value="false" /> </bean> <bean id="userPropertyEmail" class="org.olat.user.propertyhandlers.EmailProperty"> <property name="name" value="email" /> <property name="group" value="account" /> - <property name="deletable" value="false" /> </bean> <bean id="userPropertyBirthDay" class="org.olat.user.propertyhandlers.PastDatePropertyHandler"> <property name="name" value="birthDay" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericYear" class="org.olat.user.propertyhandlers.YearPropertyHandler"> <property name="name" value="graduation" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> <property name="HandlerConfigFactory" > <ref bean="UsrPropHandlerCfgFactory" /> </property> @@ -51,169 +45,141 @@ <bean id="userPropertyGender" class="org.olat.user.propertyhandlers.GenderPropertyHandler"> <property name="name" value="gender" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyTelPrivate" class="org.olat.user.propertyhandlers.PhonePropertyHandler"> <property name="name" value="telPrivate" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyTelMobile" class="org.olat.user.propertyhandlers.PhonePropertyHandler"> <property name="name" value="telMobile" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertySmsTelMobile" class="org.olat.user.propertyhandlers.SmsPhonePropertyHandler"> <property name="name" value="smsTelMobile" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyTelOffice" class="org.olat.user.propertyhandlers.PhonePropertyHandler"> <property name="name" value="telOffice" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertySkype" class="org.olat.user.propertyhandlers.SkypePropertyHandler"> <property name="name" value="skype" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyMSN" class="org.olat.user.propertyhandlers.MSNPropertyHandler"> <property name="name" value="msn" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyXing" class="org.olat.user.propertyhandlers.XingPropertyHandler"> <property name="name" value="xing" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyICQ" class="org.olat.user.propertyhandlers.ICQPropertyHandler"> <property name="name" value="icq" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyHomepage" class="org.olat.user.propertyhandlers.URLPropertyHandler"> <property name="name" value="homepage" /> <property name="group" value="contact" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyStreet" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="street" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyExtendedAddress" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="extendedAddress" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyPoBox" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="poBox" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyZipCode" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="zipCode" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyRegion" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="region" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyCity" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="city" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyCountry" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="country" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyCountryCode" class="org.olat.user.propertyhandlers.CountryCodePropertyHandler"> <property name="name" value="countryCode" /> <property name="group" value="address" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyInstitutionalName" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="institutionalName" /> <property name="group" value="institute" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyInstitutionalUserIdentifier" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="institutionalUserIdentifier" /> <property name="group" value="institute" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyInstitutionalEmail" class="org.olat.user.propertyhandlers.EmailProperty"> <property name="name" value="institutionalEmail" /> <property name="group" value="institute" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyOrgUnit" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="orgUnit" /> <property name="group" value="institute" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyStudySubject" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="studySubject" /> <property name="group" value="institute" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyEmailChangedKey" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="emchangeKey" /> <property name="group" value="account" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyEmailDisabled" class="org.olat.user.propertyhandlers.GenericCheckboxPropertyHandler"> <property name="name" value="emailDisabled" /> <property name="group" value="account" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyTypeOfUser" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="typeOfUser" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertySocialSecurityNumber" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="socialSecurityNumber" /> <property name="group" value="institute" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericSelect" class="org.olat.user.propertyhandlers.GenericSelectionPropertyHandler" depends-on="UsrPropHandlerCfgFactory" > <property name="name" value="genericSelectionProperty" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> <property name="HandlerConfigFactory" > <ref bean="UsrPropHandlerCfgFactory" /> </property> @@ -221,7 +187,6 @@ <bean id="userPropertyGenericSelect2" class="org.olat.user.propertyhandlers.GenericSelectionPropertyHandler" depends-on="UsrPropHandlerCfgFactory" > <property name="name" value="genericSelectionProperty2" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> <property name="HandlerConfigFactory" > <ref bean="UsrPropHandlerCfgFactory" /> </property> @@ -229,7 +194,6 @@ <bean id="userPropertyGenericSelect3" class="org.olat.user.propertyhandlers.GenericSelectionPropertyHandler" depends-on="UsrPropHandlerCfgFactory" > <property name="name" value="genericSelectionProperty3" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> <property name="HandlerConfigFactory" > <ref bean="UsrPropHandlerCfgFactory" /> </property> @@ -238,161 +202,133 @@ <bean id="userPropertyGenericText" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="genericTextProperty" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericText2" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="genericTextProperty2" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericText3" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="genericTextProperty3" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericText4" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="genericTextProperty4" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericText5" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="genericTextProperty5" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericUniqueText" class="org.olat.user.propertyhandlers.GenericUnique127CharTextPropertyHandler"> <property name="name" value="genericUniqueTextProperty" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericUniqueText2" class="org.olat.user.propertyhandlers.GenericUnique127CharTextPropertyHandler"> <property name="name" value="genericUniqueTextProperty2" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericUniqueText3" class="org.olat.user.propertyhandlers.GenericUnique127CharTextPropertyHandler"> <property name="name" value="genericUniqueTextProperty3" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericEmail" class="org.olat.user.propertyhandlers.EmailProperty"> <property name="name" value="genericEmailProperty1" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericCheckbox" class="org.olat.user.propertyhandlers.GenericCheckboxPropertyHandler"> <property name="name" value="genericCheckboxProperty" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericCheckbox2" class="org.olat.user.propertyhandlers.GenericCheckboxPropertyHandler"> <property name="name" value="genericCheckboxProperty2" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyGenericCheckbox3" class="org.olat.user.propertyhandlers.GenericCheckboxPropertyHandler"> <property name="name" value="genericCheckboxProperty3" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyCreationDateDisplay" class="org.olat.user.propertyhandlers.DateDisplayPropertyHandler"> <property name="name" value="creationDateDisplayProperty" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertylastLoginDateDisplay" class="org.olat.user.propertyhandlers.DateDisplayPropertyHandler"> <property name="name" value="lastloginDateDisplayProperty" /> <property name="group" value="person" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyRank" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="rank" /> <property name="group" value="account" /> - <property name="deletable" value="false" /> </bean> <bean id="userPropertyDegree" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="degree" /> <property name="group" value="account" /> - <property name="deletable" value="false" /> </bean> <bean id="userPropertyPosition" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="position" /> <property name="group" value="account" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyUserInterests" class="org.olat.user.propertyhandlers.UserInterestsPropertyHandler"> <property name="name" value="userInterests" /> <property name="group" value="account" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyUserSearchedInterests" class="org.olat.user.propertyhandlers.UserInterestsPropertyHandler"> <property name="name" value="userSearchedInterests" /> <property name="group" value="account" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyOfficeStreet" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="officeStreet" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyExtendedOfficeAddress" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="extendedOfficeAddress" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyOfficePoBox" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="officePoBox" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyOfficeZipCode" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="officeZipCode" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyOfficeCity" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="officeCity" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyOfficeCountry" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="officeCountry" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyOfficeMobilePhone" class="org.olat.user.propertyhandlers.PhonePropertyHandler"> <property name="name" value="officeMobilePhone" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyDepartment" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="department" /> <property name="group" value="officeaddress" /> - <property name="deletable" value="true" /> </bean> <bean id="userPropertyPrivateEmail" class="org.olat.user.propertyhandlers.EmailProperty"> <property name="name" value="privateEmail" /> <property name="group" value="private" /> - <property name="deletable" value="true" /> </bean> @@ -422,63 +358,51 @@ <bean id="usertrackingAttrEduPersonAffiliation" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="eduPersonAffiliation" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrSwissEduHomeOrganisation" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="swissEduPersonHomeOrganization" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrSwissEduPersonStudyLevel" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="swissEduPersonStudyLevel" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrSwissEduPersonHomeOrganisationType" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="swissEduPersonHomeOrganizationType" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrEmployeeNumber" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="employeeNumber" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrSwissEduPersonStaffCategory" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="swissEduPersonStaffCategory" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrOrganizationalUnit" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="organizationalUnit" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrSwissEduPersonStudyBranch1" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="swissEduPersonStudyBranch1" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrSwissEduPersonStudyBranch2" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="swissEduPersonStudyBranch2" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingAttrSwissEduPersonStudyBranch3" class="org.olat.user.propertyhandlers.Generic127CharTextPropertyHandler"> <property name="name" value="swissEduPersonStudyBranch3" /> <property name="group" value="shibbattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingLanguage" class="org.olat.user.propertyhandlers.LanguagePropertyHandler"> <property name="name" value="language" /> <property name="group" value="olatattr" /> - <property name="deletable" value="false" /> </bean> <bean id="usertrackingWebDAV" class="org.olat.user.propertyhandlers.WebDAVPropertyHandler"> <property name="name" value="iswebdav" /> <property name="group" value="olatattr" /> - <property name="deletable" value="false" /> </bean> <!-- fxdiff: FXOLAT-239 UserPropertyConfigHandler Configuration --> diff --git a/src/main/java/org/olat/user/restapi/UserWebService.java b/src/main/java/org/olat/user/restapi/UserWebService.java index b7795a4ffa2f184be34c158c88bc95c284e7764c..71328bb387f04f426a0d383d0f2571f27a80c091 100644 --- a/src/main/java/org/olat/user/restapi/UserWebService.java +++ b/src/main/java/org/olat/user/restapi/UserWebService.java @@ -861,7 +861,8 @@ public class UserWebService { * Delete an user from the system * @response.representation.200.doc The user is removed from the group * @response.representation.401.doc The roles of the authenticated user are not sufficient - * @response.representation.404.doc The identity not found + * @response.representation.404.doc The identity not found + * @response.representation.500.doc Unknown problem while deleting, see olat.log * @param identityKey The user key identifier * @param request The HTTP request * @return <code>Response</code> object. The operation status (success or fail) @@ -877,7 +878,11 @@ public class UserWebService { if(identity == null) { return Response.serverError().status(Status.NOT_FOUND).build(); } - UserDeletionManager.getInstance().deleteIdentity(identity); - return Response.ok().build(); + boolean success = UserDeletionManager.getInstance().deleteIdentity(identity); + if (success) { + return Response.ok().build(); + } else { + return Response.serverError().status(Status.INTERNAL_SERVER_ERROR).build(); + } } } \ No newline at end of file diff --git a/src/main/resources/database/mysql/alter_12_4_x_to_12_5_0.sql b/src/main/resources/database/mysql/alter_12_4_x_to_12_5_0.sql index 0b1f37dbf859faadfbe775ebf060fd3410ccba64..672354a9e018a10058c201e80e25982e098e3f4c 100644 --- a/src/main/resources/database/mysql/alter_12_4_x_to_12_5_0.sql +++ b/src/main/resources/database/mysql/alter_12_4_x_to_12_5_0.sql @@ -1 +1,74 @@ alter table o_loggingtable drop username, drop userproperty1, drop userproperty2, drop userproperty3, drop userproperty4, drop userproperty5, drop userproperty6, drop userproperty7, drop userproperty8, drop userproperty9, drop userproperty10, drop userproperty11, drop userproperty12; + +update o_bs_identity set name=id where status=199; + +update o_user set u_firstname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_lastname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_email=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_birthday=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_graduation=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_gender=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_telprivate=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_telmobile=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_teloffice=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_skype=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_msn=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_xing=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_icq=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_homepage=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_street=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_extendedaddress=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_pobox=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_zipcode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_region=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_city=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_country=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_countrycode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionalname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionaluseridentifier=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionalemail=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_orgunit=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_studysubject=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_emchangekey=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_emaildisabled=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_typeofuser=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_socialsecuritynumber=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty4=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty5=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericemailproperty1=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_rank=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_degree=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_position=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_userinterests=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_usersearchedinterests=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officestreet=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_extendedofficeaddress=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officepobox=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officezipcode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officecity=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officecountry=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officemobilephone=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_department=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_privateemail=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_edupersonaffiliation=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonhomeorg=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudylevel=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonhomeorgtype=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_employeenumber=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstaffcategory=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_organizationalunit=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch1=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch3=null from o_bs_identity where user_id=fk_user_id and status=199; diff --git a/src/main/resources/database/oracle/alter_12_4_x_to_12_5_0.sql b/src/main/resources/database/oracle/alter_12_4_x_to_12_5_0.sql index d5ef7d0dfe8ff73edc836c3ae11f7212b55b4e08..43615f3d53c3cf658eae79fd9ef0f480346f7328 100644 --- a/src/main/resources/database/oracle/alter_12_4_x_to_12_5_0.sql +++ b/src/main/resources/database/oracle/alter_12_4_x_to_12_5_0.sql @@ -1 +1,74 @@ alter table o_loggingtable drop (username, userproperty1, userproperty2, userproperty3, userproperty4, userproperty5, userproperty6, userproperty7, userproperty8, userproperty9, userproperty10, userproperty11, userproperty12); + +update o_bs_identity set name=id where status=199; + +update o_user set u_firstname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_lastname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_email=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_birthday=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_graduation=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_gender=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_telprivate=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_telmobile=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_teloffice=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_skype=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_msn=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_xing=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_icq=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_homepage=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_street=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_extendedaddress=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_pobox=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_zipcode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_region=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_city=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_country=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_countrycode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionalname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionaluseridentifier=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionalemail=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_orgunit=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_studysubject=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_emchangekey=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_emaildisabled=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_typeofuser=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_socialsecuritynumber=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty4=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty5=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericemailproperty1=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_rank=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_degree=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_position=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_userinterests=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_usersearchedinterests=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officestreet=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_extendedofficeaddress=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officepobox=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officezipcode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officecity=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officecountry=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officemobilephone=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_department=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_privateemail=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_edupersonaffiliation=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonhomeorg=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudylevel=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonhomeorgtype=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_employeenumber=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstaffcategory=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_organizationalunit=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch1=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch3=null from o_bs_identity where user_id=fk_user_id and status=199; diff --git a/src/main/resources/database/postgresql/alter_12_4_x_to_12_5_0.sql b/src/main/resources/database/postgresql/alter_12_4_x_to_12_5_0.sql index a2ee9e4e0cdd2121034f155b945785ddbef93458..33b8ab7797c86a6c890eab615f884907dc5ade33 100644 --- a/src/main/resources/database/postgresql/alter_12_4_x_to_12_5_0.sql +++ b/src/main/resources/database/postgresql/alter_12_4_x_to_12_5_0.sql @@ -1 +1,74 @@ alter table o_loggingtable drop column username, drop column userproperty1, drop column userproperty2, drop column userproperty3, drop column userproperty4, drop column userproperty5, drop column userproperty6, drop column userproperty7, drop column userproperty8, drop column userproperty9, drop column userproperty10, drop column userproperty11, drop column userproperty12; + +update o_bs_identity set name=id where status=199; + +update o_user set u_firstname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_lastname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_email=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_birthday=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_graduation=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_gender=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_telprivate=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_telmobile=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_teloffice=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_skype=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_msn=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_xing=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_icq=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_homepage=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_street=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_extendedaddress=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_pobox=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_zipcode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_region=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_city=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_country=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_countrycode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionalname=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionaluseridentifier=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_institutionalemail=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_orgunit=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_studysubject=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_emchangekey=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_emaildisabled=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_typeofuser=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_socialsecuritynumber=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericselectionproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty4=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_generictextproperty5=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericuniquetextproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericemailproperty1=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_genericcheckboxproperty3=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_rank=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_degree=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_position=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_userinterests=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_usersearchedinterests=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officestreet=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_extendedofficeaddress=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officepobox=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officezipcode=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officecity=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officecountry=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_officemobilephone=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_department=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_privateemail=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_edupersonaffiliation=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonhomeorg=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudylevel=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonhomeorgtype=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_employeenumber=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstaffcategory=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_organizationalunit=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch1=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch2=null from o_bs_identity where user_id=fk_user_id and status=199; +update o_user set u_swissedupersonstudybranch3=null from o_bs_identity where user_id=fk_user_id and status=199; diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index 66c9c92a6eeefa72ca5e850048b722a311e57116..333a637b52acd695cc5d4945c3a8c64a313e008c 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -220,12 +220,6 @@ password.max.age.usermanager=${password.max.age} password.max.age.learnresourcemanager=${password.max.age} password.max.age.administrator=${password.max.age} -# default deletion behavior is to retain details (marked as deleted) and -# ensure they cannot be used, otherwise (if false) values will be replaced -# by yyyyMMddHHss_bkp_<originalValue> -keepUserEmailAfterDeletion=false -keepUserLoginAfterDeletion=false - #notifications intervals the user can choose from. Disabled those you do not want by setting them to "false" notification.interval.never=true notification.interval.monthly=true @@ -1135,7 +1129,8 @@ build.identifier=openolat1243a-dev build.repo.revision=local-devel ##### -# OLAT logging +# OpenOLAT user activity logging: anonymous logging will skipp all tracking loggings and only log actions +# of type admin and statistic ##### log.anonymous=false