From d18713e1ad49f61aa7aa7beba92a2dcde2dd3c63 Mon Sep 17 00:00:00 2001 From: gnaegi <none@none> Date: Fri, 21 Jul 2017 10:11:11 +0200 Subject: [PATCH] OO-2830 rename userproperty context on upgrade --- .../manager/MembersExportManager.java | 4 +- .../ui/MembersDisplayRunController.java | 3 +- .../org/olat/upgrade/OLATUpgrade_12_0_0.java | 77 ++++++++++++++++++- 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/olat/commons/memberlist/manager/MembersExportManager.java b/src/main/java/org/olat/commons/memberlist/manager/MembersExportManager.java index d33b004e60f..efb5025e93f 100644 --- a/src/main/java/org/olat/commons/memberlist/manager/MembersExportManager.java +++ b/src/main/java/org/olat/commons/memberlist/manager/MembersExportManager.java @@ -25,12 +25,12 @@ import java.util.List; import java.util.Map; import org.olat.basesecurity.BaseSecurity; +import org.olat.commons.memberlist.ui.MembersTableController; import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.util.Util; import org.olat.course.nodes.members.Member; -import org.olat.course.nodes.members.MembersCourseNodeRunController; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupMembership; import org.olat.group.BusinessGroupService; @@ -51,7 +51,7 @@ import org.springframework.stereotype.Service; @Service public class MembersExportManager { - public static final String USER_PROPS_ID = MembersCourseNodeRunController.class.getName(); + public static final String USER_PROPS_ID = MembersTableController.class.getName(); public static final int USER_PROPS_OFFSET = 500; diff --git a/src/main/java/org/olat/commons/memberlist/ui/MembersDisplayRunController.java b/src/main/java/org/olat/commons/memberlist/ui/MembersDisplayRunController.java index 492f3b67eb7..bb2759ff1bf 100644 --- a/src/main/java/org/olat/commons/memberlist/ui/MembersDisplayRunController.java +++ b/src/main/java/org/olat/commons/memberlist/ui/MembersDisplayRunController.java @@ -33,7 +33,6 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.util.prefs.Preferences; -import org.olat.course.nodes.members.MembersCourseNodeRunController; import org.olat.course.run.environment.CourseEnvironment; import org.olat.group.BusinessGroup; @@ -44,7 +43,7 @@ import org.olat.group.BusinessGroup; public class MembersDisplayRunController extends BasicController { // User property context ID's used in all the child controllers defined here static final String USER_PROPS_LIST_ID = MembersTableController.class.getName(); - static final String USER_PROPS_PRINT_ID = MembersCourseNodeRunController.class.getName(); //MembersPrintController.class.getName(); //MembersCourseNodeRunController + static final String USER_PROPS_PRINT_ID = MembersPrintController.class.getName(); static final String USER_PROPS_AVATAR_ID = MembersAvatarDisplayRunController.class.getName(); private static final String GUIPREF_KEY_GROUPMEMBER = "groupmemberdisplay"; diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_12_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_12_0_0.java index be32cc7b32c..ce7fa7090f3 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_12_0_0.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_12_0_0.java @@ -19,10 +19,18 @@ */ package org.olat.upgrade; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Paths; import java.util.Arrays; import java.util.List; +import java.util.Properties; import org.olat.core.commons.persistence.DB; +import org.olat.core.util.WebappHelper; import org.olat.fileresource.types.BlogFileResource; import org.olat.fileresource.types.PodcastFileResource; import org.olat.modules.webFeed.manager.FeedManager; @@ -40,6 +48,7 @@ public class OLATUpgrade_12_0_0 extends OLATUpgrade { private static final String VERSION = "OLAT_12.0.0"; private static final String FEED_XML_TO_DB = "FEED XML TO DB"; + private static final String USER_PROPERTY_CONTEXT_RENAME = "USER PROPERTY CONTEXT RENAME"; @Autowired private DB dbInstance; @@ -71,8 +80,11 @@ public class OLATUpgrade_12_0_0 extends OLATUpgrade { } boolean allOk = true; + // migrate all blogs and podcasts from xml to database data structure allOk &= upgradeBlogXmlToDb(upgradeManager, uhd); - + // rename a user property context name to a more suitable name + allOk &= changeUserPropertyContextName(upgradeManager, uhd); + uhd.setInstallationComplete(allOk); upgradeManager.setUpgradesHistory(uhd, VERSION); if(allOk) { @@ -106,5 +118,68 @@ public class OLATUpgrade_12_0_0 extends OLATUpgrade { } return allOk; } + + /** + * Copy existing user property configuration to the new user property + * context handler name. The handler was renamed because it is now not only + * used in the course but also in the group. + * + * @param upgradeManager + * @param uhd + * @return + */ + private boolean changeUserPropertyContextName(UpgradeManager upgradeManager, UpgradeHistoryData uhd) { + boolean allOk = true; + if (!uhd.getBooleanDataValue(USER_PROPERTY_CONTEXT_RENAME)) { + // Load configured properties from properties file + String userDataDirectory = WebappHelper.getUserDataRoot(); + File configurationPropertiesFile = Paths.get(userDataDirectory, "system", "configuration", "com.frentix.olat.admin.userproperties.UsrPropCfgManager.properties").toFile(); + if (configurationPropertiesFile.exists()) { + InputStream is = null; + OutputStream fileStream = null; + try { + is = new FileInputStream(configurationPropertiesFile); + Properties configuredProperties = new Properties(); + configuredProperties.load(is); + is.close(); + boolean dirty = false; + // list of possible user property appendices + List<String> appendices = Arrays.asList("", "_hndl_", "_hndl_mandatory", "_hndl_usrreadonly", "_hndl_adminonly"); + for (String appendix : appendices) { + String oldKey = "org.olat.course.nodes.members.MembersCourseNodeRunController" + appendix; + String existingConfig = configuredProperties.getProperty(oldKey); + String newKey = "org.olat.commons.memberlist.ui.MembersPrintController" + appendix; + String existingNewConfig = configuredProperties.getProperty(newKey); + if (existingConfig != null && existingNewConfig == null) { + configuredProperties.setProperty("org.olat.commons.memberlist.ui.MembersPrintController" + appendix, existingConfig); + dirty = true; + log.info("Migrated user property context handler config from::" + oldKey + " to::" + newKey); + } + } + if (dirty) { + fileStream = new FileOutputStream(configurationPropertiesFile); + configuredProperties.store(fileStream, null); + // Flush and close before sending events to other nodes to make changes appear on other node + fileStream.flush(); + } + } catch (Exception e) { + log.error("Error when reading / writing user properties config file from path::" + configurationPropertiesFile.getAbsolutePath(), e); + allOk &= false; + } finally { + try { + if (is != null ) is.close(); + if (fileStream != null ) fileStream.close(); + } catch (Exception e) { + log.error("Could not close stream after storing config to file::" + configurationPropertiesFile.getAbsolutePath(), e); + allOk &= false; + } + } + } + + uhd.setBooleanDataValue(USER_PROPERTY_CONTEXT_RENAME, allOk); + upgradeManager.setUpgradesHistory(uhd, VERSION); + } + return allOk; + } } -- GitLab