From 2e9be79491101360d82727e9cae7b3bf1dcf73d0 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 1 Sep 2016 09:54:38 +0200 Subject: [PATCH] OO-2057:set portfolio v2 as default --- .../admin/version/VersionSettingsForm.java | 2 +- .../core/_i18n/LocalStrings_de.properties | 1 + .../core/_i18n/LocalStrings_en.properties | 1 + .../core/_i18n/LocalStrings_fr.properties | 1 + .../gui/control/OlatTopNavController.java | 7 +- .../gui/control/UserToolsMenuController.java | 20 +-- .../ui/_i18n/LocalStrings_fr.properties | 6 +- .../olat/portfolio/PortfolioExtension.java | 16 +++ .../org/olat/portfolio/PortfolioModule.java | 2 +- .../portfolio/manager/EPArtefactManager.java | 12 ++ .../portfolio/manager/EPFrontendManager.java | 4 + .../portfolio/manager/EPStructureManager.java | 15 +++ .../ui/PortfolioAdminController.java | 120 +++++++++--------- .../portfolio/ui/_content/adminconfig.html | 4 +- .../ui/_i18n/LocalStrings_de.properties | 93 +++++--------- .../ui/_i18n/LocalStrings_en.properties | 25 +--- .../ui/_i18n/LocalStrings_fr.properties | 3 +- .../repository/handlers/PortfolioHandler.java | 2 +- .../org/olat/upgrade/OLATUpgrade_11_0_0.java | 64 ++++++++++ ...olioTest.java => PortfolioTestLegacy.java} | 24 ++-- 20 files changed, 250 insertions(+), 172 deletions(-) rename src/test/java/org/olat/selenium/{PortfolioTest.java => PortfolioTestLegacy.java} (98%) diff --git a/src/main/java/org/olat/admin/version/VersionSettingsForm.java b/src/main/java/org/olat/admin/version/VersionSettingsForm.java index 02d329509cc..3661dbf25fc 100644 --- a/src/main/java/org/olat/admin/version/VersionSettingsForm.java +++ b/src/main/java/org/olat/admin/version/VersionSettingsForm.java @@ -120,7 +120,7 @@ public class VersionSettingsForm extends FormBasicController { try { int maxNumber = Integer.parseInt(num); setNumOfVersions(maxNumber); - getWindowControl().setInfo("saved"); + showInfo("save.admin.settings"); } catch (NumberFormatException e) { showError("version.notANumber"); } diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties index f5d3c34df44..ccf07e9280c 100644 --- a/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties @@ -71,6 +71,7 @@ reset=Reset save=Speichern save.close=Speichern und schliessen savesas=Speichern unter +save.admin.settings=Konfiguration wurde gespeichert search=Suchen quick.search=Simple search extsearch=Erweiterte Suche diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties index 8a7a6391df8..d6ee7d250d4 100644 --- a/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties @@ -71,6 +71,7 @@ rating.5.5=Excellent rating.explanation=Click here to make assessments reset=Reset save=Save +save.admin.settings=The configuration is saved save.close=Save and close savesas=Save as search=Search diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties index fde228249ee..1b562409b52 100644 --- a/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties @@ -71,6 +71,7 @@ rating.5.5=Excellent rating.explanation=Cliquez pour l'\u00E9valuation reset=Mettre \u00E0 z\u00E9ro save=Enregistrer +save.admin.settings=La configuration a \u00E9t\u00E9 sauv\u00E9e. save.close=Enregistrer et fermer savesas=Enregistrer sous search=Chercher diff --git a/src/main/java/org/olat/gui/control/OlatTopNavController.java b/src/main/java/org/olat/gui/control/OlatTopNavController.java index a85f496e993..54f6b93d1d3 100644 --- a/src/main/java/org/olat/gui/control/OlatTopNavController.java +++ b/src/main/java/org/olat/gui/control/OlatTopNavController.java @@ -142,10 +142,9 @@ public class OlatTopNavController extends BasicController implements LockableCon List<UserToolExtension> toolExtensions = userToolsModule.getUserToolExtensions(ureq); for (UserToolExtension toolExtension : toolExtensions) { // check for sites - UserTool tool = toolExtension.createUserTool(ureq, getWindowControl(), getLocale()); - if(tool != null) { - boolean shortCutOnly = toolExtension.isShortCutOnly(); - if(shortCutOnly || selectedToolSet.contains(toolExtension.getUniqueExtensionID())) { + if(toolExtension.isShortCutOnly() || selectedToolSet.contains(toolExtension.getUniqueExtensionID())) { + UserTool tool = toolExtension.createUserTool(ureq, getWindowControl(), getLocale()); + if(tool != null) { Component cmp = tool.getMenuComponent(ureq, topNavVC); String cssId = toolExtension.getShortCutCssId(); String cssClass = toolExtension.getShortCutCssClass(); diff --git a/src/main/java/org/olat/gui/control/UserToolsMenuController.java b/src/main/java/org/olat/gui/control/UserToolsMenuController.java index 520103e343e..f668e59d4ac 100644 --- a/src/main/java/org/olat/gui/control/UserToolsMenuController.java +++ b/src/main/java/org/olat/gui/control/UserToolsMenuController.java @@ -38,6 +38,7 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.util.StringHelper; +import org.olat.core.util.UserSession; import org.olat.core.util.prefs.Preferences; import org.springframework.beans.factory.annotation.Autowired; @@ -62,11 +63,14 @@ public class UserToolsMenuController extends BasicController implements Lockable menuVC = createVelocityContainer("menu"); menuVC.setDomReplacementWrapperRequired(false); - if(ureq.getIdentity() != null && ureq.getUserSession() != null && ureq.getUserSession().getRoles() != null) { - boolean isGuest = ureq.getUserSession().getRoles().isGuestOnly(); - boolean isInvitee = ureq.getUserSession().getRoles().isInvitee(); - if(!isGuest && !isInvitee) { - loadPersonalTools(ureq); + if(ureq.getIdentity() != null) { + UserSession usess = ureq.getUserSession(); + if(usess != null && ureq.getUserSession().getRoles() != null) { + boolean isGuest = usess.getRoles().isGuestOnly(); + boolean isInvitee = usess.getRoles().isInvitee(); + if(!isGuest && !isInvitee) { + loadPersonalTools(ureq); + } } } putInitialPanel(menuVC); @@ -74,9 +78,9 @@ public class UserToolsMenuController extends BasicController implements Lockable private void loadPersonalTools(UserRequest ureq) { List<String> linksName = new ArrayList<String>(); - List<String> configLinksName = new ArrayList<String>(); - List<String> searchLinksName = new ArrayList<String>(); - List<String> systemLinksName = new ArrayList<String>(); + List<String> configLinksName = new ArrayList<>(); + List<String> searchLinksName = new ArrayList<>(); + List<String> systemLinksName = new ArrayList<>(); Preferences prefs = ureq.getUserSession().getGuiPreferences(); String selectedTools = userToolsModule.getUserTools(prefs); diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties index d6c00f975e3..ce37f69e0ec 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties @@ -1,4 +1,4 @@ -#Sun Aug 28 14:22:58 CEST 2016 +#Thu Sep 01 09:36:44 CEST 2016 access=Acc\u00E8s access.rights=Ajouter un droit d'acc\u00E8s access.rights.coach=Coach @@ -20,7 +20,7 @@ add.media=Ajouter un \u00E9l\u00E9ment multim\u00E9dia add.member=Ajouter un membre add.text=Ajouter un texte add.video=Ajouter une vid\u00E9o -allow.new.entries=Les utilisateurs sont autoris\u00E9s à cr\u00E9er des nouvelles contributions +allow.new.entries=Les utilisateurs sont autoris\u00E9s \u00E0 cr\u00E9er des nouvelles contributions artefact.EfficiencyStatement=Attestation de performance artefact.FileResource.BLOG=Billet d'un blogue artefact.FileResource.WIKI=Page wiki @@ -95,6 +95,7 @@ delete.page.confirm.descr=Voulez-vous vraiment enlever cette contribution "{0}"? delete.page.confirm.title=Enlever la contribution deleted.entries=Poubelle deleted.pages.breadcrump=Poubelle +down=<i class\='o_icon o_icon o_icon-lg o_icon_move_down'> </i> edit.access.rights=Editer les droits d'acc\u00E8s edit.assignment=Editer le devoir edit.binder.metadata=Editer les m\u00E9ta-donn\u00E9es @@ -285,6 +286,7 @@ table.header.section=Section table.header.status=Status table.header.title=Titre table.header.type=Type +table.header.up=<i class\='o_icon o_icon o_icon-lg o_icon_move_up'> </i> table.of.contents=Sommaire table.user.login=Nom d'utilisateur teaser=Image de titre diff --git a/src/main/java/org/olat/portfolio/PortfolioExtension.java b/src/main/java/org/olat/portfolio/PortfolioExtension.java index f7f8e0694f5..5336657ec05 100644 --- a/src/main/java/org/olat/portfolio/PortfolioExtension.java +++ b/src/main/java/org/olat/portfolio/PortfolioExtension.java @@ -19,8 +19,14 @@ */ package org.olat.portfolio; +import java.util.Locale; + +import org.olat.admin.user.tools.UserTool; import org.olat.admin.user.tools.UserToolExtension; import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.WindowControl; +import org.olat.portfolio.manager.EPFrontendManager; /** * @@ -35,4 +41,14 @@ public class PortfolioExtension extends UserToolExtension { PortfolioModule module = CoreSpringFactory.getImpl(PortfolioModule.class); return module.isEnabled() && super.isEnabled(); } + + @Override + public UserTool createUserTool(UserRequest ureq, WindowControl wControl, Locale locale) { + EPFrontendManager epMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); + boolean hasMapOrArtefact = epMgr.hasMapOrArtefact(ureq.getIdentity()); + if(hasMapOrArtefact) { + return super.createUserTool(ureq, wControl, locale); + } + return null; + } } \ No newline at end of file diff --git a/src/main/java/org/olat/portfolio/PortfolioModule.java b/src/main/java/org/olat/portfolio/PortfolioModule.java index 25f5b1e61c8..634f166481f 100755 --- a/src/main/java/org/olat/portfolio/PortfolioModule.java +++ b/src/main/java/org/olat/portfolio/PortfolioModule.java @@ -57,7 +57,7 @@ public class PortfolioModule extends AbstractSpringModule implements ConfigOnOff private static final OLog log = Tracing.createLoggerFor(PortfolioModule.class); - @Value("${portfolio.enabled:true}") + @Value("${portfolio.enabled:false}") private boolean enabled; private VFSContainer portfolioRoot; @Value("${portfolio.map.styles}") diff --git a/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java b/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java index 19f127b8f8f..ec19bf3339c 100755 --- a/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java @@ -141,6 +141,18 @@ public class EPArtefactManager extends BasicManager { Number count = (Number)query.uniqueResult(); return count.intValue() > 0; } + + protected boolean hasArtefactPool(IdentityRef ident) { + StringBuilder sb = new StringBuilder(); + sb.append("select artefact.key from ").append(AbstractArtefact.class.getName()).append(" artefact").append(" where author.key=:authorKey"); + List<Long> firstKey = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Long.class) + .setParameter("authorKey", ident.getKey()) + .setFirstResult(0) + .setMaxResults(1) + .getResultList(); + return firstKey != null && firstKey.size() > 0 && firstKey.get(0) != null && firstKey.get(0).longValue() >= 0; + } protected List<AbstractArtefact> getArtefactPoolForUser(Identity ident) { long start = System.currentTimeMillis(); diff --git a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java index c6d7f062d55..696c55b5a41 100755 --- a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java @@ -127,6 +127,10 @@ public class EPFrontendManager implements UserDataDeletable, DeletableGroupData private AssessmentService assessmentService; + public boolean hasMapOrArtefact(Identity identity) { + return artefactManager.hasArtefactPool(identity) || structureManager.hasMap(identity); + } + /** * Create and persist an artefact of the given type * diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java index 4dbfb52f043..026fea03ee5 100755 --- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java @@ -144,6 +144,21 @@ public class EPStructureManager { } */ + protected boolean hasMap(IdentityRef identity) { + StringBuilder sb = new StringBuilder(); + sb.append("select stEl.key from ").append(EPStructureElement.class.getName()).append(" stEl ") + .append(" inner join stEl.groups as relGroup on relGroup.defaultGroup=true") + .append(" inner join relGroup.group as baseGroup") + .append(" inner join baseGroup.members as membership on (membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("')"); + + List<Long> count = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class) + .setParameter("identityKey", identity.getKey()) + .setFirstResult(0) + .setMaxResults(1) + .getResultList(); + return count != null && count.size() > 0 && count.get(0) != null && count.get(0) >= 0; + } + protected List<PortfolioStructureMap> getOpenStructuredMapAfterDeadline() { StringBuilder sb = new StringBuilder(); sb.append("select map from ").append(EPStructuredMap.class.getName()).append(" as map"); diff --git a/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java b/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java index b54fcd465a2..8b4ed471cb9 100644 --- a/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java +++ b/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.List; import org.olat.collaboration.CollaborationToolsFactory; -import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -34,9 +33,11 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.translator.Translator; +import org.olat.modules.portfolio.PortfolioV2Module; import org.olat.portfolio.EPArtefactHandler; import org.olat.portfolio.PortfolioModule; import org.olat.portfolio.ui.filter.PortfolioFilterController; +import org.springframework.beans.factory.annotation.Autowired; /** * * Description:<br> @@ -48,71 +49,68 @@ import org.olat.portfolio.ui.filter.PortfolioFilterController; */ public class PortfolioAdminController extends FormBasicController { - private PortfolioModule portfolioModule; - - private MultipleSelectionElement portfolioEnabled; - private final List<MultipleSelectionElement> handlersEnabled = new ArrayList<MultipleSelectionElement>(); - - private static String[] enabledKeys = new String[]{"on"}; - private String[] enabledValues; + private static String[] enabledKeys = new String[]{ "on" }; + private static String[] enabledPortfolioKeys = new String[]{ "on", "legacy"}; - private MultipleSelectionElement copyrightStepCB; + private FormLayoutContainer wizardFlc; + private MultipleSelectionElement portfoliosEnabled; + private final List<MultipleSelectionElement> handlersEnabled = new ArrayList<>(); + private MultipleSelectionElement copyrightStepCB, reflexionStepCB; - private MultipleSelectionElement reflexionStepCB; + @Autowired + private PortfolioModule portfolioModule; + @Autowired + private PortfolioV2Module portfolioV2Module; public PortfolioAdminController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl, "adminconfig"); - - portfolioModule = (PortfolioModule)CoreSpringFactory.getBean("portfolioModule"); - enabledValues = new String[] { - translate("enabled") - }; - initForm(ureq); } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - if(formLayout instanceof FormLayoutContainer) { - FormLayoutContainer layoutContainer = (FormLayoutContainer)formLayout; - - //module configuration - FormLayoutContainer moduleFlc = FormLayoutContainer.createDefaultFormLayout("flc_module", getTranslator()); - layoutContainer.add(moduleFlc); + //module configuration + FormLayoutContainer moduleFlc = FormLayoutContainer.createDefaultFormLayout("flc_module", getTranslator()); + formLayout.add(moduleFlc); - portfolioEnabled = uifactory.addCheckboxesHorizontal("portfolio.module.enabled", moduleFlc, enabledKeys, enabledValues); - portfolioEnabled.select(enabledKeys[0], portfolioModule.isEnabled()); - portfolioEnabled.addActionListener(FormEvent.ONCHANGE); - - //handlers configuration - FormLayoutContainer handlersFlc = FormLayoutContainer.createDefaultFormLayout("flc_handlers", getTranslator()); - layoutContainer.add(handlersFlc); + String[] enabledPortfolioValues = new String[] { translate("enabled"), translate("portfolio.v1.module.enabled") }; + portfoliosEnabled = uifactory.addCheckboxesVertical("portfolio.module.enabled", moduleFlc, enabledPortfolioKeys, enabledPortfolioValues, 1); + if(portfolioModule.isEnabled() || portfolioV2Module.isEnabled()) { + portfoliosEnabled.select(enabledPortfolioKeys[0], true); + } + if(portfolioModule.isEnabled()) { + portfoliosEnabled.select(enabledPortfolioKeys[1], true); + } + portfoliosEnabled.addActionListener(FormEvent.ONCHANGE); - List<EPArtefactHandler<?>> handlers = portfolioModule.getAllAvailableArtefactHandlers(); - for(EPArtefactHandler<?> handler:handlers) { - Translator handlerTrans = handler.getHandlerTranslator(getTranslator()); - handlersFlc.setTranslator(handlerTrans); - String handlerClass = PortfolioFilterController.HANDLER_PREFIX + handler.getClass().getSimpleName() + PortfolioFilterController.HANDLER_TITLE_SUFFIX; - MultipleSelectionElement handlerEnabled = uifactory.addCheckboxesHorizontal(handlerClass, handlersFlc, enabledKeys, enabledValues); - handlerEnabled.select(enabledKeys[0], handler.isEnabled()); - handlerEnabled.setUserObject(handler); - handlerEnabled.addActionListener(FormEvent.ONCHANGE); - handlersEnabled.add(handlerEnabled); - } - - // configure steps in artefact collection wizard - FormLayoutContainer wizardFlc = FormLayoutContainer.createDefaultFormLayout("flc_wizard", getTranslator()); - layoutContainer.add(wizardFlc); - copyrightStepCB = uifactory.addCheckboxesHorizontal("wizard.step.copyright", wizardFlc, enabledKeys, enabledValues); - copyrightStepCB.select(enabledKeys[0], portfolioModule.isCopyrightStepEnabled()); - copyrightStepCB.addActionListener(FormEvent.ONCHANGE); - - reflexionStepCB = uifactory.addCheckboxesHorizontal("wizard.step.reflexion", wizardFlc, enabledKeys, enabledValues); - reflexionStepCB.select(enabledKeys[0], portfolioModule.isReflexionStepEnabled()); - reflexionStepCB.addActionListener(FormEvent.ONCHANGE); - - + String[] enabledValues = new String[] { translate("enabled")}; + //handlers configuration + FormLayoutContainer handlersFlc = FormLayoutContainer.createDefaultFormLayout("flc_handlers", getTranslator()); + formLayout.add(handlersFlc); + + List<EPArtefactHandler<?>> handlers = portfolioModule.getAllAvailableArtefactHandlers(); + for(EPArtefactHandler<?> handler:handlers) { + Translator handlerTrans = handler.getHandlerTranslator(getTranslator()); + handlersFlc.setTranslator(handlerTrans); + String handlerClass = PortfolioFilterController.HANDLER_PREFIX + handler.getClass().getSimpleName() + PortfolioFilterController.HANDLER_TITLE_SUFFIX; + MultipleSelectionElement handlerEnabled = uifactory.addCheckboxesHorizontal(handlerClass, handlersFlc, enabledKeys, enabledValues); + handlerEnabled.select(enabledKeys[0], handler.isEnabled()); + handlerEnabled.setUserObject(handler); + handlerEnabled.addActionListener(FormEvent.ONCHANGE); + handlersEnabled.add(handlerEnabled); } + + // configure steps in artefact collection wizard + wizardFlc = FormLayoutContainer.createDefaultFormLayout("flc_wizard", getTranslator()); + formLayout.add(wizardFlc); + copyrightStepCB = uifactory.addCheckboxesHorizontal("wizard.step.copyright", wizardFlc, enabledKeys, enabledValues); + copyrightStepCB.select(enabledKeys[0], portfolioModule.isCopyrightStepEnabled()); + copyrightStepCB.addActionListener(FormEvent.ONCHANGE); + + reflexionStepCB = uifactory.addCheckboxesHorizontal("wizard.step.reflexion", wizardFlc, enabledKeys, enabledValues); + reflexionStepCB.select(enabledKeys[0], portfolioModule.isReflexionStepEnabled()); + reflexionStepCB.addActionListener(FormEvent.ONCHANGE); + wizardFlc.setVisible(portfoliosEnabled.isSelected(1)); } @Override @@ -128,12 +126,20 @@ public class PortfolioAdminController extends FormBasicController { @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { super.formInnerEvent(ureq, source, event); - if(source == portfolioEnabled) { - boolean enabled = portfolioEnabled.isSelected(0); - portfolioModule.setEnabled(enabled); + if(source == portfoliosEnabled) { + boolean enabled = portfoliosEnabled.isSelected(0); + if(enabled) { + portfolioModule.setEnabled(portfoliosEnabled.isSelected(1)); + portfolioV2Module.setEnabled(true); + } else { + portfolioModule.setEnabled(false); + portfolioV2Module.setEnabled(false); + } // update collaboration tools list + + wizardFlc.setVisible(portfoliosEnabled.isSelected(1)); CollaborationToolsFactory.getInstance().initAvailableTools(); - showWarning("portfolio.module.change.warning"); + showInfo("save.admin.settings"); } else if(handlersEnabled.contains(source)) { EPArtefactHandler<?> handler = (EPArtefactHandler<?>)source.getUserObject(); boolean enabled = ((MultipleSelectionElement)source).isSelected(0); diff --git a/src/main/java/org/olat/portfolio/ui/_content/adminconfig.html b/src/main/java/org/olat/portfolio/ui/_content/adminconfig.html index b88b8a8db0e..94bb8b3e928 100644 --- a/src/main/java/org/olat/portfolio/ui/_content/adminconfig.html +++ b/src/main/java/org/olat/portfolio/ui/_content/adminconfig.html @@ -12,8 +12,10 @@ $r.render("flc_handlers") </fieldset> +#if($r.available("flc_wizard") && $r.visible("flc_wizard")) <fieldset> <legend>$r.translate("wizard.title")</legend> <p>$r.translate("wizard.intro")</p> $r.render("flc_wizard") -</fieldset> \ No newline at end of file +</fieldset> +#end \ No newline at end of file diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties index 3df735cc29d..9108605012f 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties @@ -1,82 +1,51 @@ -#Mon Mar 02 09:54:04 CET 2009 +#Thu Sep 01 08:35:10 CEST 2016 +EPStructuredMapTemplate=Portfoliovorlage admin.menu.title=ePortfolio admin.menu.title.alt=ePortfolio konfigurieren -portfolio.title=$\:admin.menu.title -portfolio.intro=Hiermit kann die gesamte ePortfolio-Funktionalität in OLAT ein-, resp. ausgeschaltet werden. -portfolio.module.enabled=ePortfolio einschalten -portfolio.module.change.warning=Damit Ihre Änderung überall aktiv wird, muss OLAT neu gestartet werden. +choose.artefact.intro=W\u00E4hlen Sie das Artefakt, welches Ihrer Sammelmappe hinzugef\u00FCgt werden soll oder f\u00FCgen Sie ein Neues hinzu. +choose.artefact.intro.v2=W\u00E4hlen Sie aus welche Artefakte Sie vom alten Portfoliowerkzeug in das neue Portfoliomanagement importieren wollen. +create.map=Mappe erstellen +create.map.default=Sammelmappe erstellen +create.map.fromTemplate=Mappe aus Vorlage erstellen +create.map.intro=W\u00E4hlen Sie die Art von Sammelmappe, welche Sie erstellen m\u00F6chten. +create.map.selectTemplate=Vorlage ausw\u00E4hlen enabled=Ein +eportfolio.menu.title=ePortfolio +eportfolio.menu.title.alt=ePortfolio mit Artefakten und Sammelmappen +handlers.intro=W\u00E4hlen Sie die verf\u00FCgbaren Artefakt-Typen. Ausgeschaltete Artefakte werden angezeigt, k\u00F6nnen aber nicht mehr gesammelt werden. handlers.title=Artefakt-Typen -handlers.intro=Wählen Sie die verfügbaren Artefakt-Typen. Ausgeschaltete Artefakte werden angezeigt, können aber nicht mehr gesammelt werden. -wizard.title=Artefakt-Sammelwerkzeug -wizard.intro=Das Artefakt-Sammelwerkzeug enthält verschiedene Schritte in einem Wizard. Einige der Schritte können Sie je nach Bedarf aktivieren oder deaktivieren. -wizard.step.reflexion=Reflexion erfassen -wizard.step.copyright=Urheberschaft vom Benutzer bestätigen lassen - - - - - - - - - - - - - - - - - - - - - - - - - -EPStructuredMapTemplate=Portfoliovorlage - +myartefacts.intro=Sie k\u00F6nnen Ihre gesammelten Artefakte bearbeiten oder l\u00F6schen, sowie neue hinzuf\u00FCgen. myartefacts.menu.title=Meine Artefakte myartefacts.menu.title.alt=Alle Artefakte anzeigen und verwalten myartefacts.title=$\:admin.menu.title - $\:myartefacts.menu.title -myartefacts.intro=Sie können Ihre gesammelten Artefakte bearbeiten oder löschen, sowie neue hinzufügen. -choose.artefact.intro=Wählen Sie das Artefakt, welches Ihrer Sammelmappe hinzugefügt werden soll oder fügen Sie ein Neues hinzu. -choose.artefact.intro.v2=Wählen Sie aus welche Artefakte Sie vom alten Portfoliowerkzeug in das neue Portfoliomanagement importieren wollen. - +mymaps.intro=$\:mymaps.menu.title.alt mymaps.menu.title=Meine Sammelmappen mymaps.menu.title.alt=Alle meine Sammelmappen anzeigen und verwalten mymaps.title=$\:admin.menu.title - $\:mymaps.menu.title -mymaps.intro=$\:mymaps.menu.title.alt -create.map=Mappe erstellen -create.map.intro=Wählen Sie die Art von Sammelmappe, welche Sie erstellen möchten. -create.map.default=Sammelmappe erstellen -create.map.fromTemplate=Mappe aus Vorlage erstellen -create.map.selectTemplate=Vorlage auswählen +mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt mystructuredmaps.menu.title=Meine Portfolioaufgaben mystructuredmaps.menu.title.alt=Alle meine Sammelmappen aus einer Portfolioaufgabe anzeigen und verwalten mystructuredmaps.title=$\:admin.menu.title - $\:mystructuredmaps.menu.title -mystructuredmaps.intro=$\:mystructuredmaps.menu.title.alt - -eportfolio.menu.title=ePortfolio -eportfolio.menu.title.alt=ePortfolio mit Artefakten und Sammelmappen - +othermap.intro=$\:othermaps.menu.title.alt +othermap.title=$\:admin.menu.title - Mappe +othermaps.intro=$\:othermaps.menu.title.alt othermaps.menu.title=Freigegebene Sammelmappen -othermaps.menu.title.alt=Von anderen Benutzern für mich freigegebene Sammelmappen +othermaps.menu.title.alt=Von anderen Benutzern f\u00FCr mich freigegebene Sammelmappen othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title -othermaps.intro=$\:othermaps.menu.title.alt - -othermap.title=$\:admin.menu.title - Mappe -othermap.intro=$\:othermaps.menu.title.alt +portfolio.intro=Hiermit kann die gesamte ePortfolio-Funktionalit\u00E4t in OLAT ein-, resp. ausgeschaltet werden. +portfolio.module.change.warning=Damit Ihre \u00C4nderung \u00FCberall aktiv wird, muss OLAT neu gestartet werden. +portfolio.module.enabled=ePortfolio einschalten +portfolio.title=$\:admin.menu.title +portfolio.v1.module.enabled=Alte ePortfolio v1 w\u00E4hrend \u00DCbergangszeit aktivieren site.title=$\:admin.menu.title site.title.alt=$\:admin.menu.title +view.mode=Ansicht\: +view.mode.details=Details +view.mode.table=Tabelle viewTab.all=Artefakte viewTab.browse=Tag-Browser viewTab.search=Suche - -view.mode=Ansicht: -view.mode.details=Details -view.mode.table=Tabelle - +wizard.intro=Das Artefakt-Sammelwerkzeug enth\u00E4lt verschiedene Schritte in einem Wizard. Einige der Schritte k\u00F6nnen Sie je nach Bedarf aktivieren oder deaktivieren. +wizard.step.copyright=Urheberschaft vom Benutzer best\u00E4tigen lassen +wizard.step.reflexion=Reflexion erfassen +wizard.title=Artefakt-Sammelwerkzeug diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties index 673a0914056..02a8847ca83 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties @@ -1,29 +1,9 @@ -#Tue Apr 10 10:28:36 CEST 2012 +#Thu Sep 01 08:34:56 CEST 2016 EPStructuredMapTemplate=Portfolio template admin.menu.title=ePortfolio admin.menu.title.alt=Configure ePortfolio - - - - - - - - - - - - - - - - - - - choose.artefact.intro=Please select an artefact to be added to your binder. You could also create a new one. choose.artefact.intro.v2=Select the artefacts you wish to import from the old portfolio module into the new portfolio management. - create.map=Create folder create.map.default=Create binder create.map.fromTemplate=Create folder from template @@ -34,8 +14,6 @@ eportfolio.menu.title=ePortfolio eportfolio.menu.title.alt=ePortfolio along with artefacts and binders handlers.intro=Please select all available artefact types. Deactivated artefacts will be displayed; however, you can no longer collect them. handlers.title=Artefact types - - myartefacts.intro=You can edit and delete collected artefacts, or add new ones. myartefacts.menu.title=My artefacts myartefacts.menu.title.alt=Show and manage all artefacts @@ -58,6 +36,7 @@ portfolio.intro=With this you can (de)activate the entire ePortfolio functionali portfolio.module.change.warning=OLAT needs to be restarted to activate your changes throughout the system. portfolio.module.enabled=Activate ePortfolio portfolio.title=$\:admin.menu.title +portfolio.v1.module.enabled=Enable legacy ePortfolio v1 during transition period site.title=$\:admin.menu.title site.title.alt=$\:admin.menu.title view.mode=View\: diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties index c2fd656bd84..a94d7a7d304 100644 --- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties @@ -1,4 +1,4 @@ -#Sat Aug 27 17:40:09 CEST 2016 +#Thu Sep 01 09:37:13 CEST 2016 EPStructuredMapTemplate=Mod\u00E8le de portfolio admin.menu.title=ePortfolio admin.menu.title.alt=Configurer ePortfolio @@ -36,6 +36,7 @@ portfolio.intro=Toutes les fonctions de l'ePortfolio peuvent \u00EAtre activ\u00 portfolio.module.change.warning=Afin que les changements soient activ\u00E9s, vous devez red\u00E9marrer OpenOLAT. portfolio.module.enabled=Activer ePortfolio portfolio.title=$\:admin.menu.title +portfolio.v1.module.enabled=Activ\u00E9 ePortfolio v1 pendant la p\u00E9riode de transition site.title=$\:admin.menu.title site.title.alt=$\:admin.menu.title view.mode=Affichage\: diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java index 0fa6333f86d..64c9a127880 100644 --- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java +++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java @@ -85,7 +85,7 @@ public class PortfolioHandler implements RepositoryHandler { @Override public boolean isCreate() { - return true; + return false; } @Override diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java index df1c438553a..1c73d9be78e 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java @@ -103,9 +103,12 @@ import org.olat.ims.qti.process.FilePersister; import org.olat.modules.assessment.AssessmentEntry; import org.olat.modules.assessment.model.AssessmentEntryImpl; import org.olat.modules.assessment.model.AssessmentEntryStatus; +import org.olat.modules.portfolio.PortfolioV2Module; import org.olat.modules.scorm.assessment.CmiData; import org.olat.modules.scorm.assessment.ScormAssessmentManager; +import org.olat.portfolio.PortfolioModule; import org.olat.portfolio.manager.EPFrontendManager; +import org.olat.portfolio.model.structel.EPStructureElement; import org.olat.portfolio.model.structel.PortfolioStructureMap; import org.olat.portfolio.model.structel.StructureStatusEnum; import org.olat.properties.Property; @@ -129,6 +132,7 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade { private static final int BATCH_SIZE = 50; private static final String ASSESSMENT_DATAS = "ASSESSMENT PROPERTY TABLE"; private static final String EFFICIENCY_STATEMENT_DATAS = "EFFICIENCY STATEMENT TABLE"; + private static final String PORTFOLIO_SETTINGS = "PORTFOLIO SETTINGS"; private static final String VERSION = "OLAT_11.0.0"; private final Map<Long,Boolean> qtiEssayMap = new HashMap<>(); @@ -147,6 +151,12 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade { private RepositoryManager repositoryManager; @Autowired private BusinessGroupService businessGroupService; + + + @Autowired + private PortfolioModule portfolioModule; + @Autowired + private PortfolioV2Module portfolioV2Module; public OLATUpgrade_11_0_0() { super(); @@ -175,6 +185,7 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade { boolean allOk = true; allOk &= upgradeEfficiencyStatementTable(upgradeManager, uhd); allOk &= upgradeAssessmentPropertyTable(upgradeManager, uhd); + allOk &= upgradePortfolioSettings(upgradeManager, uhd); uhd.setInstallationComplete(allOk); upgradeManager.setUpgradesHistory(uhd, VERSION); @@ -185,6 +196,59 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade { } return allOk; } + + + private boolean upgradePortfolioSettings(UpgradeManager upgradeManager, UpgradeHistoryData uhd) { + boolean allOk = true; + if (!uhd.getBooleanDataValue(PORTFOLIO_SETTINGS)) { + if(portfolioModule.isEnabled()) { + portfolioV2Module.setEnabled(true); + + boolean hasMaps = hasMap(); + if(!hasMaps) { + portfolioModule.setEnabled(false); + } + } else { + boolean hasBinder = hasBinder(); + if(!hasBinder) { + portfolioV2Module.setEnabled(false); + } + } + uhd.setBooleanDataValue(PORTFOLIO_SETTINGS, allOk); + upgradeManager.setUpgradesHistory(uhd, VERSION); + } + return allOk; + } + + private boolean hasMap() { + try { + StringBuilder sb = new StringBuilder(); + sb.append("select stEl.key from ").append(EPStructureElement.class.getName()).append(" stEl "); + List<Long> count = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class) + .setFirstResult(0) + .setMaxResults(1) + .getResultList(); + return count != null && count.size() > 0 && count.get(0) != null && count.get(0) >= 0; + } catch (Exception e) { + log.error("", e); + return true; + } + } + + private boolean hasBinder() { + try { + StringBuilder sb = new StringBuilder(); + sb.append("select binder.key from pfbinder as binder"); + List<Long> count = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class) + .setFirstResult(0) + .setMaxResults(1) + .getResultList(); + return count != null && count.size() > 0 && count.get(0) != null && count.get(0) >= 0; + } catch (Exception e) { + log.error("", e); + return true; + } + } private boolean upgradeEfficiencyStatementTable(UpgradeManager upgradeManager, UpgradeHistoryData uhd) { boolean allOk = true; diff --git a/src/test/java/org/olat/selenium/PortfolioTest.java b/src/test/java/org/olat/selenium/PortfolioTestLegacy.java similarity index 98% rename from src/test/java/org/olat/selenium/PortfolioTest.java rename to src/test/java/org/olat/selenium/PortfolioTestLegacy.java index db70fbd2689..47c3782edf9 100644 --- a/src/test/java/org/olat/selenium/PortfolioTest.java +++ b/src/test/java/org/olat/selenium/PortfolioTestLegacy.java @@ -37,6 +37,7 @@ import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Assume; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.olat.selenium.page.LoginPage; @@ -69,12 +70,13 @@ import org.openqa.selenium.firefox.FirefoxDriver; * */ @RunWith(Arquillian.class) -public class PortfolioTest { +public class PortfolioTestLegacy { @Deployment(testable = false) public static WebArchive createDeployment() { Map<String,String> propertyPortfolioV1 = new HashMap<>(); propertyPortfolioV1.put("portfoliov2.enabled", "false"); + propertyPortfolioV1.put("portfolio.enabled", "true"); return ArquillianDeployments.createDeployment(propertyPortfolioV1); } @@ -95,7 +97,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void collectForumArtefactInCourse(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -184,7 +186,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void collectWikiArtefactInWikiResource(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -266,7 +268,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void collectBlogPostInCourse(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -364,7 +366,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void addTextArtefact(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -431,7 +433,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void addTextArtefact_withinMap(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -497,7 +499,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void addLearningJournal(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -577,7 +579,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void addLearningJournal_withinMap(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -655,7 +657,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void addFileArtefact(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -731,7 +733,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void addFileArtefact_withinMap(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { @@ -807,7 +809,7 @@ public class PortfolioTest { * @throws IOException * @throws URISyntaxException */ - @Test + @Ignore @Test @RunAsClient public void createPortfolioTemplate_inCourse(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { -- GitLab