From 4ebb9c06d162bfd9d7a5cb706441782caba8c40d Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 3 Nov 2014 11:59:21 +0100 Subject: [PATCH] OO-1263: add upgrader for system-wide and personal settings --- .../admin/user/tools/UserToolsModule.java | 35 +++++ .../gui/control/OlatTopNavController.java | 3 +- .../gui/control/UserToolsMenuController.java | 3 +- .../org/olat/gui/control/_content/menu.html | 28 ++-- .../org/olat/upgrade/OLATUpgrade_10_1_0.java | 134 ++++++++++++++++++ .../olat/upgrade/_spring/upgradeContext.xml | 1 + .../org/olat/user/ToolsPrefsController.java | 6 +- 7 files changed, 191 insertions(+), 19 deletions(-) create mode 100644 src/main/java/org/olat/upgrade/OLATUpgrade_10_1_0.java diff --git a/src/main/java/org/olat/admin/user/tools/UserToolsModule.java b/src/main/java/org/olat/admin/user/tools/UserToolsModule.java index dfc698d28d7..ae2c823ed5d 100644 --- a/src/main/java/org/olat/admin/user/tools/UserToolsModule.java +++ b/src/main/java/org/olat/admin/user/tools/UserToolsModule.java @@ -29,8 +29,10 @@ import org.olat.core.extensions.ExtManager; import org.olat.core.extensions.Extension; import org.olat.core.extensions.ExtensionElement; import org.olat.core.gui.UserRequest; +import org.olat.core.gui.WindowManager; import org.olat.core.util.StringHelper; import org.olat.core.util.coordinate.CoordinatorManager; +import org.olat.core.util.prefs.Preferences; import org.olat.home.HomeMainController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -76,6 +78,39 @@ public class UserToolsModule extends AbstractSpringModule { init(); } + public String getUserTools(Preferences prefs) { + String selectedToolV2s = (String)prefs.get(WindowManager.class, "user-tools-v2"); + if(!StringHelper.containsNonWhitespace(selectedToolV2s)) { + String selectedTools = (String)prefs.get(WindowManager.class, "user-tools"); + if(StringHelper.containsNonWhitespace(selectedTools)) { + //upgrade + + StringBuilder selectedToolSb = new StringBuilder(selectedTools); + String[] newPresets = new String[]{ + "org.olat.home.HomeMainController:org.olat.gui.control.PrintUserToolExtension", + "org.olat.home.HomeMainController:org.olat.gui.control.HelpUserToolExtension", + "org.olat.home.HomeMainController:org.olat.instantMessaging.ui.ImpressumMainController" + }; + + for(String newPreset:newPresets) { + if(selectedToolSb.indexOf(newPreset) < 0) { + if(selectedToolSb.length() > 0) selectedToolSb.append(","); + selectedToolSb.append(newPreset); + } + } + prefs.put(WindowManager.class, "user-tools-v2", selectedToolSb.toString()); + prefs.save(); + selectedToolV2s = selectedToolSb.toString(); + } + } + return selectedToolV2s; + } + + public void setUserTools(Preferences prefs, String settings) { + prefs.put(WindowManager.class, "user-tools-v2", settings); + prefs.save(); + } + public List<UserToolExtension> getUserToolExtensions(UserRequest ureq) { List<UserToolExtension> tools = new ArrayList<>(); if(!isUserToolsDisabled()) { diff --git a/src/main/java/org/olat/gui/control/OlatTopNavController.java b/src/main/java/org/olat/gui/control/OlatTopNavController.java index a3cf622d8c6..d7e99327bc1 100644 --- a/src/main/java/org/olat/gui/control/OlatTopNavController.java +++ b/src/main/java/org/olat/gui/control/OlatTopNavController.java @@ -30,7 +30,6 @@ import org.olat.admin.user.tools.UserToolsModule; import org.olat.core.dispatcher.DispatcherModule; import org.olat.core.extensions.ExtManager; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.WindowManager; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; @@ -121,7 +120,7 @@ public class OlatTopNavController extends BasicController { List<Tool> toolSetLinksName = new ArrayList<Tool>(); Preferences prefs = ureq.getUserSession().getGuiPreferences(); - String selectedTools = (String)prefs.get(WindowManager.class, "user-tools"); + String selectedTools = userToolsModule.getUserTools(prefs); if(!StringHelper.containsNonWhitespace(selectedTools)) { selectedTools = userToolsModule.getDefaultPresetOfUserTools(); } diff --git a/src/main/java/org/olat/gui/control/UserToolsMenuController.java b/src/main/java/org/olat/gui/control/UserToolsMenuController.java index 8f252f40201..61e48d9f253 100644 --- a/src/main/java/org/olat/gui/control/UserToolsMenuController.java +++ b/src/main/java/org/olat/gui/control/UserToolsMenuController.java @@ -30,7 +30,6 @@ import org.olat.admin.user.tools.UserToolExtension; import org.olat.admin.user.tools.UserToolsModule; import org.olat.basesecurity.AuthHelper; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.WindowManager; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Disposable; @@ -79,7 +78,7 @@ public class UserToolsMenuController extends BasicController { List<String> systemLinksName = new ArrayList<String>(); Preferences prefs = ureq.getUserSession().getGuiPreferences(); - String selectedTools = (String)prefs.get(WindowManager.class, "user-tools"); + String selectedTools = userToolsModule.getUserTools(prefs); if(!StringHelper.containsNonWhitespace(selectedTools)) { selectedTools = userToolsModule.getDefaultPresetOfUserTools(); } diff --git a/src/main/java/org/olat/gui/control/_content/menu.html b/src/main/java/org/olat/gui/control/_content/menu.html index 844aa364400..1a1856dce9c 100644 --- a/src/main/java/org/olat/gui/control/_content/menu.html +++ b/src/main/java/org/olat/gui/control/_content/menu.html @@ -3,19 +3,25 @@ #foreach($search in $searchs) <li>$r.render($search)</li> #end - <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.tools")</li> - #foreach($personalTool in $personalTools) - <li>$r.render($personalTool)</li> + #if($personalTools.size() > 0) + <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.tools")</li> + #foreach($personalTool in $personalTools) + <li>$r.render($personalTool)</li> + #end #end - <li role="presentation" class="divider"></li> - <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.configurations")</li> - #foreach($config in $configs) - <li>$r.render($config)</li> + #if($configs.size() > 0) + <li role="presentation" class="divider"></li> + <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.configurations")</li> + #foreach($config in $configs) + <li>$r.render($config)</li> + #end #end - <li role="presentation" class="divider"></li> - <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.systems")</li> - #foreach($system in $systems) - <li>$r.render($system)</li> + #if($systems.size() > 0) + <li role="presentation" class="divider"></li> + <li role="presentation" class="dropdown-header">$r.translate("topnav.my.menu.systems")</li> + #foreach($system in $systems) + <li>$r.render($system)</li> + #end #end <li role="presentation" class="divider"></li> <li> diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_10_1_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_10_1_0.java new file mode 100644 index 00000000000..362b86f9207 --- /dev/null +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_10_1_0.java @@ -0,0 +1,134 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.upgrade; + +import org.olat.admin.user.tools.UserToolsModule; +import org.olat.core.commons.persistence.DB; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Initial date: 27.02.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class OLATUpgrade_10_1_0 extends OLATUpgrade { + + private static final String TASK_USER_TOOLS = "Upgrade user tools"; + private static final String VERSION = "OLAT_10.1.0"; + + @Autowired + private DB dbInstance; + @Autowired + private UserToolsModule userToolsModule; + + + public OLATUpgrade_10_1_0() { + super(); + } + + @Override + public String getVersion() { + return VERSION; + } + + @Override + public boolean doPreSystemInitUpgrade(UpgradeManager upgradeManager) { + return false; + } + + @Override + public boolean doPostSystemInitUpgrade(UpgradeManager upgradeManager) { + UpgradeHistoryData uhd = upgradeManager.getUpgradesHistory(VERSION); + if (uhd == null) { + // has never been called, initialize + uhd = new UpgradeHistoryData(); + } else if (uhd.isInstallationComplete()) { + return false; + } + + boolean allOk = true; + allOk &= upgradeUserTools(upgradeManager, uhd); + + + uhd.setInstallationComplete(allOk); + upgradeManager.setUpgradesHistory(uhd, VERSION); + if(allOk) { + log.audit("Finished OLATUpgrade_10_1_0 successfully!"); + } else { + log.audit("OLATUpgrade_10_1_0 not finished, try to restart OpenOLAT!"); + } + return allOk; + } + + /** + * Add the static tools to the configurable ones. + * + * @param upgradeManager + * @param uhd + * @return + */ + private boolean upgradeUserTools(UpgradeManager upgradeManager, UpgradeHistoryData uhd) { + if (!uhd.getBooleanDataValue(TASK_USER_TOOLS)) { + try { + String tools = userToolsModule.getAvailableUserTools(); + StringBuilder toolsSb = new StringBuilder(tools); + String[] defaultUserTools = new String[]{ + "org.olat.home.HomeMainController:org.olat.gui.control.PrintUserToolExtension", + "org.olat.home.HomeMainController:org.olat.gui.control.SearchUserToolExtension", + "org.olat.home.HomeMainController:org.olat.gui.control.HelpUserToolExtension", + "org.olat.home.HomeMainController:org.olat.instantMessaging.ui.ImpressumMainController", + "org.olat.home.HomeMainController:org.olat.instantMessaging.ui.InstantMessagingMainController" + }; + + for(String defaultUserTool:defaultUserTools) { + if(toolsSb.indexOf(defaultUserTool) < 0) { + if(toolsSb.length() > 0) toolsSb.append(","); + toolsSb.append(defaultUserTool); + } + } + userToolsModule.setAvailableUserTools(toolsSb.toString()); + + String defPreset = userToolsModule.getDefaultPresetOfUserTools(); + StringBuilder defPresetSb = new StringBuilder(defPreset); + String[] defaultPresets = new String[]{ + "org.olat.home.HomeMainController:org.olat.gui.control.PrintUserToolExtension", + "org.olat.home.HomeMainController:org.olat.gui.control.HelpUserToolExtension", + "org.olat.home.HomeMainController:org.olat.instantMessaging.ui.ImpressumMainController" + }; + + for(String defaultPreset:defaultPresets) { + if(defPresetSb.indexOf(defaultPreset) < 0) { + if(defPresetSb.length() > 0) defPresetSb.append(","); + defPresetSb.append(defaultPreset); + } + } + userToolsModule.setDefaultPresetOfUserTools(defPresetSb.toString()); + + uhd.setBooleanDataValue(TASK_USER_TOOLS, false); + upgradeManager.setUpgradesHistory(uhd, VERSION); + } catch (Exception e) { + log.error("", e); + return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml index 6aca92e0cda..1114906de85 100644 --- a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml +++ b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml @@ -42,6 +42,7 @@ <bean id="upgrade_9_4_0" class="org.olat.upgrade.OLATUpgrade_9_4_0"/> <bean id="upgrade_10_0_0" class="org.olat.upgrade.OLATUpgrade_10_0_0"/> <bean id="upgrade_10_0_3" class="org.olat.upgrade.OLATUpgrade_10_0_3"/> + <bean id="upgrade_10_1_0" class="org.olat.upgrade.OLATUpgrade_10_1_0"/> </list> </property> </bean> diff --git a/src/main/java/org/olat/user/ToolsPrefsController.java b/src/main/java/org/olat/user/ToolsPrefsController.java index dedb09eabf4..efe020d08d0 100644 --- a/src/main/java/org/olat/user/ToolsPrefsController.java +++ b/src/main/java/org/olat/user/ToolsPrefsController.java @@ -28,7 +28,6 @@ import org.olat.admin.user.tools.UserToolExtension; import org.olat.admin.user.tools.UserToolsModule; import org.olat.core.extensions.ExtManager; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.WindowManager; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; @@ -153,7 +152,7 @@ public class ToolsPrefsController extends FormBasicController { } private void initPresetElementUserData() { - String selectedTools = (String)prefs.get(WindowManager.class, "user-tools"); + String selectedTools = userToolsModule.getUserTools(prefs); if(!StringHelper.containsNonWhitespace(selectedTools)) { // use presets when user has not yet any values selectedTools = userToolsModule.getDefaultPresetOfUserTools(); @@ -184,7 +183,6 @@ public class ToolsPrefsController extends FormBasicController { } else { sb.append("none"); } - prefs.put(WindowManager.class, "user-tools", sb.toString()); - prefs.save(); + userToolsModule.setUserTools(prefs, sb.toString()); } } -- GitLab