diff --git a/src/main/java/org/olat/modules/portfolio/PortfolioV2Module.java b/src/main/java/org/olat/modules/portfolio/PortfolioV2Module.java index 6e842a122ab93505bad48eb2bbfb91a096f9cbfd..554f63bcb8051bae1377f8b6c30b66b0561759df 100644 --- a/src/main/java/org/olat/modules/portfolio/PortfolioV2Module.java +++ b/src/main/java/org/olat/modules/portfolio/PortfolioV2Module.java @@ -38,14 +38,26 @@ import org.springframework.stereotype.Service; */ @Service("portfolioV2Module") public class PortfolioV2Module extends AbstractSpringModule implements ConfigOnOff { + + public static final String ENTRY_POINT_TOC = "toc"; + public static final String ENTRY_POINT_ENTRIES = "entries"; public static final String PORTFOLIO_ENABLED = "portfoliov2.enabled"; public static final String PORTFOLIO_LEARNER_CAN_CREATE_BINDERS = "portfoliov2.learner.can.create.binders"; + public static final String PORTFOLIO_CAN_CREATE_BINDERS_FROM_TEMPLATE = "portfoliov2.can.create.binders.from.template"; + public static final String PORTFOLIO_CAN_CREATE_BINDERS_FROM_COURSE = "portfoliov2.can.create.binders.from.course"; + public static final String PORTFOLIO_BINDER_ENTRY_POINT = "portfoliov2.binder.entry.point"; @Value("${portfoliov2.enabled:true}") private boolean enabled; @Value("${portfoliov2.learner.can.create.binders:true}") private boolean learnerCanCreateBinders; + @Value("${portfoliov2.can.create.binders.from.template:true}") + private boolean canCreateBindersFromTemplate; + @Value("${portfoliov2.can.create.binders.from.course:true}") + private boolean canCreateBindersFromCourse; + @Value("${portfoliov2.binder.entry.point:toc}") + private String binderEntryPoint; @Autowired public PortfolioV2Module(CoordinatorManager coordinatorManager) { @@ -96,4 +108,31 @@ public class PortfolioV2Module extends AbstractSpringModule implements ConfigOnO this.learnerCanCreateBinders = learnerCanCreateBinders; setStringProperty(PORTFOLIO_LEARNER_CAN_CREATE_BINDERS, Boolean.toString(learnerCanCreateBinders), true); } + + public boolean isCanCreateBindersFromTemplate() { + return canCreateBindersFromTemplate; + } + + public void setCanCreateBindersFromTemplate(boolean canCreateBindersFromTemplate) { + this.canCreateBindersFromTemplate = canCreateBindersFromTemplate; + setStringProperty(PORTFOLIO_CAN_CREATE_BINDERS_FROM_TEMPLATE, Boolean.toString(canCreateBindersFromTemplate), true); + } + + public boolean isCanCreateBindersFromCourse() { + return canCreateBindersFromCourse; + } + + public void setCanCreateBindersFromCourse(boolean canCreateBindersFromCourse) { + this.canCreateBindersFromCourse = canCreateBindersFromCourse; + setStringProperty(PORTFOLIO_CAN_CREATE_BINDERS_FROM_COURSE, Boolean.toString(canCreateBindersFromCourse), true); + } + + public String getBinderEntryPoint() { + return binderEntryPoint; + } + + public void setBinderEntryPoint(String binderEntryPoint) { + this.binderEntryPoint = binderEntryPoint; + setStringProperty(PORTFOLIO_BINDER_ENTRY_POINT, binderEntryPoint, true); + } } diff --git a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java index 13788b4d7a463c69c624e3da66a4d1669234de67..a753d71dab0ac01c040175c90813b07f55f72702 100644 --- a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java +++ b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java @@ -253,7 +253,9 @@ public class BinderDAO { } for(Assignment templateAssignment:templateAssignments) { - assignmentDao.createAssignment(templateAssignment, AssignmentStatus.notStarted, currentSection); + if(templateAssignment != null) { + assignmentDao.createAssignment(templateAssignment, AssignmentStatus.notStarted, currentSection); + } } } diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java index bb23e8326e73b9406e817d9214b3609532e0cca4..e116d15818a652a277d43ae43a4e3a8c7eb98828 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java @@ -48,8 +48,10 @@ import org.olat.core.util.resource.OresHelper; import org.olat.modules.portfolio.Binder; import org.olat.modules.portfolio.BinderConfiguration; import org.olat.modules.portfolio.BinderSecurityCallback; +import org.olat.modules.portfolio.PortfolioV2Module; import org.olat.modules.portfolio.ui.event.SectionSelectionEvent; import org.olat.util.logging.activity.LoggingResourceable; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -76,6 +78,9 @@ public class BinderController extends BasicController implements TooledControlle private Binder binder; private final BinderConfiguration config; private final BinderSecurityCallback secCallback; + + @Autowired + private PortfolioV2Module portfolioModule; public BinderController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel, BinderSecurityCallback secCallback, Binder binder, BinderConfiguration config) { @@ -145,9 +150,11 @@ public class BinderController extends BasicController implements TooledControlle @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) { - BinderPageListController pagesCtrl = doOpenEntries(ureq); - if(pagesCtrl == null || pagesCtrl.getNumOfPages() == 0) { + String ePoint = portfolioModule.getBinderEntryPoint(); + if(PortfolioV2Module.ENTRY_POINT_TOC.equals(ePoint)) { doOpenOverview(ureq); + } else { + doOpenEntries(ureq); } return; } diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java index 849581f57c0430c8acd585aa0a50f47390606c06..eed9f5b6c13bba2509e893db7777bf2269b2938a 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java @@ -167,13 +167,21 @@ public class BinderListController extends FormBasicController mapperThumbnailUrl = registerCacheableMapper(ureq, "binder-list", new ImageMapper(model)); row.contextPut("mapperThumbnailUrl", mapperThumbnailUrl); - if(portfolioModule.isLearnerCanCreateBinders()) { - newBinderDropdown = uifactory.addFormLink("create.binders", "create.new.binder", null, formLayout, Link.BUTTON); - newBinderDropdown.setIconRightCSS("o_icon o_icon_caret"); - row.put("createDropdown", newBinderDropdown.getComponent()); - } else { + if(!portfolioModule.isLearnerCanCreateBinders() && !portfolioModule.isCanCreateBindersFromTemplate() && portfolioModule.isCanCreateBindersFromCourse()) { newBinderFromCourseButton = uifactory.addFormLink("create.binder.from.course", "create.empty.binder.from.course", null, formLayout, Link.BUTTON); row.put("createBinderFromCourse", newBinderFromCourseButton.getComponent()); + } else if(portfolioModule.isLearnerCanCreateBinders() + || portfolioModule.isCanCreateBindersFromTemplate() + || portfolioModule.isCanCreateBindersFromCourse()) { + newBinderDropdown = uifactory.addFormLink("create.binders", "create.new.binder", null, formLayout, Link.BUTTON); + + int count = (portfolioModule.isLearnerCanCreateBinders() ? 1 : 0) + + (portfolioModule.isCanCreateBindersFromTemplate() ? 1 : 0) + + (portfolioModule.isCanCreateBindersFromCourse() ? 1 :0); + if(count > 1) { + newBinderDropdown.setIconRightCSS("o_icon o_icon_caret"); + } + row.put("createDropdown", newBinderDropdown.getComponent()); } } @@ -184,7 +192,9 @@ public class BinderListController extends FormBasicController @Override public void initTools() { - if(portfolioModule.isLearnerCanCreateBinders()) { + if(portfolioModule.isLearnerCanCreateBinders() + || portfolioModule.isCanCreateBindersFromTemplate() + || portfolioModule.isCanCreateBindersFromCourse()) { newBinderLink = LinkFactory.createToolLink("create.new.binder", translate("create.new.binder"), this); newBinderLink.setIconLeftCSS("o_icon o_icon-lg o_icon_new_portfolio"); newBinderLink.setElementCssClass("o_sel_pf_new_binder"); @@ -203,7 +213,11 @@ public class BinderListController extends FormBasicController for(BinderStatistics binderRow:binderRows) { rows.add(forgePortfolioRow(binderRow)); } - rows.add(new BinderRow()); + if(portfolioModule.isLearnerCanCreateBinders() + || portfolioModule.isCanCreateBindersFromTemplate() + || portfolioModule.isCanCreateBindersFromCourse()) { + rows.add(new BinderRow()); + } model.setObjects(rows); tableEl.reset(); tableEl.reloadData(); @@ -237,7 +251,9 @@ public class BinderListController extends FormBasicController @Override public void event(UserRequest ureq, Component source, Event event) { if(newBinderLink == source) { - if(portfolioModule.isLearnerCanCreateBinders()) { + if(portfolioModule.isLearnerCanCreateBinders() + || portfolioModule.isCanCreateBindersFromTemplate() + || portfolioModule.isCanCreateBindersFromCourse()) { doNewBinder(ureq); } } @@ -356,16 +372,23 @@ public class BinderListController extends FormBasicController } private void doNewBinderCallout(UserRequest ureq) { - if(chooseNewBinderTypeCtrl != null) return; - - chooseNewBinderTypeCtrl = new NewBinderCalloutController(ureq, getWindowControl()); - listenTo(chooseNewBinderTypeCtrl); - - newBinderCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), - chooseNewBinderTypeCtrl.getInitialComponent(), newBinderDropdown.getFormDispatchId(), - "", true, "", new CalloutSettings(false)); - listenTo(newBinderCalloutCtrl); - newBinderCalloutCtrl.activate(); + // short cut if only one option is selected + if(portfolioModule.isLearnerCanCreateBinders() && !portfolioModule.isCanCreateBindersFromTemplate() && !portfolioModule.isCanCreateBindersFromCourse()) { + doNewBinder(ureq); + } else if(!portfolioModule.isLearnerCanCreateBinders() && portfolioModule.isCanCreateBindersFromTemplate() && !portfolioModule.isCanCreateBindersFromCourse()) { + doNewBinderFromTemplate(ureq); + } else if(!portfolioModule.isLearnerCanCreateBinders() && !portfolioModule.isCanCreateBindersFromTemplate() && portfolioModule.isCanCreateBindersFromCourse()) { + doNewBinderFromCourse(ureq); + } else if(chooseNewBinderTypeCtrl == null) { + chooseNewBinderTypeCtrl = new NewBinderCalloutController(ureq, getWindowControl()); + listenTo(chooseNewBinderTypeCtrl); + + newBinderCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), + chooseNewBinderTypeCtrl.getInitialComponent(), newBinderDropdown.getFormDispatchId(), + "", true, "", new CalloutSettings(false)); + listenTo(newBinderCalloutCtrl); + newBinderCalloutCtrl.activate(); + } } private void doNewBinder(UserRequest ureq) { diff --git a/src/main/java/org/olat/modules/portfolio/ui/NewBinderCalloutController.java b/src/main/java/org/olat/modules/portfolio/ui/NewBinderCalloutController.java index 3cbfea1af7a629cd5888d989458c89a9fe62032a..fb27fe8d67b771caba6a6120bfa88debd8fb8f0c 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/NewBinderCalloutController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/NewBinderCalloutController.java @@ -27,7 +27,9 @@ import org.olat.core.gui.components.velocity.VelocityContainer; 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.modules.portfolio.PortfolioV2Module; import org.olat.modules.portfolio.ui.event.NewBinderEvent; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -39,18 +41,25 @@ public class NewBinderCalloutController extends BasicController { private Link createBinderLink, createBinderFromTemplateLink, createBinderFromCourseLink; + @Autowired + private PortfolioV2Module portfolioModule; + public NewBinderCalloutController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); VelocityContainer mainVC = createVelocityContainer("new_binder_callout"); - - createBinderLink = LinkFactory.createLink("empty", "create.empty.binder", "new.empty", mainVC, this); - mainVC.put("empty", createBinderLink); - createBinderFromTemplateLink = LinkFactory.createLink("template", "create.empty.binder.from.template", "new.template", mainVC, this); - mainVC.put("template", createBinderFromTemplateLink); - createBinderFromCourseLink = LinkFactory.createLink("course", "create.empty.binder.from.course", "new.course", mainVC, this); - mainVC.put("course", createBinderFromCourseLink); - + if(portfolioModule.isLearnerCanCreateBinders()) { + createBinderLink = LinkFactory.createLink("empty", "create.empty.binder", "new.empty", mainVC, this); + mainVC.put("empty", createBinderLink); + } + if(portfolioModule.isCanCreateBindersFromTemplate()) { + createBinderFromTemplateLink = LinkFactory.createLink("template", "create.empty.binder.from.template", "new.template", mainVC, this); + mainVC.put("template", createBinderFromTemplateLink); + } + if(portfolioModule.isCanCreateBindersFromCourse()) { + createBinderFromCourseLink = LinkFactory.createLink("course", "create.empty.binder.from.course", "new.course", mainVC, this); + mainVC.put("course", createBinderFromCourseLink); + } putInitialPanel(mainVC); } diff --git a/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java b/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java index 4289d34edebc238c6de60626ac4c13c6380dccca..eda6f9c17fb8b7ec442bc826430c9a3994817c46 100644 --- a/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java +++ b/src/main/java/org/olat/portfolio/ui/PortfolioAdminController.java @@ -27,6 +27,7 @@ import org.olat.core.gui.UserRequest; 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; +import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; @@ -52,9 +53,10 @@ public class PortfolioAdminController extends FormBasicController { private static String[] enabledKeys = new String[]{ "on" }; private static String[] enabledPortfolioKeys = new String[]{ "on", "legacy"}; + private SingleSelection entryPointEl; private FormLayoutContainer wizardFlc; private MultipleSelectionElement portfoliosEnabled; - private MultipleSelectionElement userCanCreatePortfolioEnabled; + private MultipleSelectionElement canCreatePortfolioEnabled; private final List<MultipleSelectionElement> handlersEnabled = new ArrayList<>(); private MultipleSelectionElement copyrightStepCB, reflexionStepCB; @@ -73,6 +75,8 @@ public class PortfolioAdminController extends FormBasicController { //module configuration FormLayoutContainer moduleFlc = FormLayoutContainer.createDefaultFormLayout("flc_module", getTranslator()); formLayout.add(moduleFlc); + + String[] enabledValues = new String[] { translate("enabled")}; String[] enabledPortfolioValues = new String[] { translate("enabled"), translate("portfolio.v1.module.enabled") }; portfoliosEnabled = uifactory.addCheckboxesVertical("portfolio.module.enabled", moduleFlc, enabledPortfolioKeys, enabledPortfolioValues, 1); @@ -84,12 +88,39 @@ public class PortfolioAdminController extends FormBasicController { } portfoliosEnabled.addActionListener(FormEvent.ONCHANGE); - String[] enabledValues = new String[] { translate("enabled")}; + String[] createBinderKeys = new String[]{ "learner", "template", "course" }; + String[] createBinderValues = new String[] { + translate("portfolio.user.can.create.binder"), + translate("portfolio.user.can.create.binder.template"), + translate("portfolio.user.can.create.binder.course") + }; + canCreatePortfolioEnabled = uifactory.addCheckboxesVertical("portfolio.user.create.binder", moduleFlc, createBinderKeys, createBinderValues, 1); + if(portfolioV2Module.isLearnerCanCreateBinders()) { + canCreatePortfolioEnabled.select(createBinderKeys[0], portfolioV2Module.isLearnerCanCreateBinders()); + } + if(portfolioV2Module.isCanCreateBindersFromTemplate()) { + canCreatePortfolioEnabled.select(createBinderKeys[1], portfolioV2Module.isCanCreateBindersFromTemplate()); + } + if(portfolioV2Module.isCanCreateBindersFromCourse()) { + canCreatePortfolioEnabled.select(createBinderKeys[2], portfolioV2Module.isCanCreateBindersFromCourse()); + } + canCreatePortfolioEnabled.addActionListener(FormEvent.ONCHANGE); + canCreatePortfolioEnabled.setVisible(portfolioV2Module.isEnabled()); - userCanCreatePortfolioEnabled = uifactory.addCheckboxesHorizontal("portfolio.user.can.create.binder", moduleFlc, enabledKeys, enabledValues); - userCanCreatePortfolioEnabled.select(enabledKeys[0], portfolioV2Module.isLearnerCanCreateBinders()); - userCanCreatePortfolioEnabled.addActionListener(FormEvent.ONCHANGE); - userCanCreatePortfolioEnabled.setVisible(portfolioV2Module.isEnabled()); + String[] entryPointKeys = new String[] { PortfolioV2Module.ENTRY_POINT_TOC, PortfolioV2Module.ENTRY_POINT_ENTRIES }; + String[] entryPointValues = new String[]{ translate("binder.entry.point.toc"), translate("binder.entry.point.entries") }; + entryPointEl = uifactory.addDropdownSingleselect("binder.entry.point", "binder.entry.point", moduleFlc, entryPointKeys, entryPointValues, null); + entryPointEl.addActionListener(FormEvent.ONCHANGE); + entryPointEl.setVisible(portfolioV2Module.isEnabled()); + String entryPoint = portfolioV2Module.getBinderEntryPoint(); + for(String entryPointKey:entryPointKeys) { + if(entryPointKey.equals(entryPoint)) { + entryPointEl.select(entryPointKey, true); + } + } + if(!entryPointEl.isOneSelected()) { + entryPointEl.select(entryPointKeys[0], true); + } //handlers configuration FormLayoutContainer handlersFlc = FormLayoutContainer.createDefaultFormLayout("flc_handlers", getTranslator()); @@ -145,22 +176,36 @@ public class PortfolioAdminController extends FormBasicController { // update collaboration tools list wizardFlc.setVisible(portfoliosEnabled.isSelected(1)); - userCanCreatePortfolioEnabled.setVisible(portfolioV2Module.isEnabled()); + entryPointEl.setVisible(portfolioV2Module.isEnabled()); + canCreatePortfolioEnabled.setVisible(portfolioV2Module.isEnabled()); CollaborationToolsFactory.getInstance().initAvailableTools(); showInfo("save.admin.settings"); } else if(handlersEnabled.contains(source)) { EPArtefactHandler<?> handler = (EPArtefactHandler<?>)source.getUserObject(); boolean enabled = ((MultipleSelectionElement)source).isSelected(0); portfolioModule.setEnableArtefactHandler(handler, enabled); + showInfo("save.admin.settings"); } else if(source == reflexionStepCB){ boolean enabled = reflexionStepCB.isSelected(0); portfolioModule.setReflexionStepEnabled(enabled); + showInfo("save.admin.settings"); } else if(source == copyrightStepCB){ boolean enabled = copyrightStepCB.isSelected(0); portfolioModule.setCopyrightStepEnabled(enabled); - } else if(userCanCreatePortfolioEnabled == source) { - boolean enabled = userCanCreatePortfolioEnabled.isSelected(0); + showInfo("save.admin.settings"); + } else if(canCreatePortfolioEnabled == source) { + boolean enabled = canCreatePortfolioEnabled.isSelected(0); portfolioV2Module.setLearnerCanCreateBinders(enabled); + boolean enabledTemplate = canCreatePortfolioEnabled.isSelected(1); + portfolioV2Module.setCanCreateBindersFromTemplate(enabledTemplate); + boolean enabledCourse = canCreatePortfolioEnabled.isSelected(2); + portfolioV2Module.setCanCreateBindersFromCourse(enabledCourse); + showInfo("save.admin.settings"); + } else if(entryPointEl == source) { + if(entryPointEl.isOneSelected()) { + portfolioV2Module.setBinderEntryPoint(entryPointEl.getSelectedKey()); + showInfo("save.admin.settings"); + } } } } 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 36d7f9bc7f90f833b5303eb97ca105839e3b9efa..b1a4c6373e28f0b8203b6d320ca304642be9cb55 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 @@ -2,6 +2,9 @@ EPStructuredMapTemplate=Portfoliovorlage admin.menu.title=ePortfolio admin.menu.title.alt=ePortfolio konfigurieren +binder.entry.point=Ankunft in Mappe +binder.entry.point.toc=\u00DCberblick +binder.entry.point.entries=Eintr\u00E4ge 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 @@ -37,7 +40,10 @@ portfolio.module.change.warning=Damit Ihre \u00C4nderung \u00FCberall aktiv wird portfolio.module.enabled=ePortfolio einschalten portfolio.title=$\:admin.menu.title portfolio.v1.module.enabled=Alte ePortfolio v1 w\u00E4hrend \u00DCbergangszeit aktivieren +portfolio.user.create.binder=Mappe erstellen portfolio.user.can.create.binder=Lernende d\u00fcrfen Mappe erstellen +portfolio.user.can.create.binder.template=Lernende d\u00fcrfen Mappe von Vorlage erstellen +portfolio.user.can.create.binder.course=Lernende d\u00fcrfen Mappe von Kurse erstellen site.title=$\:admin.menu.title site.title.alt=$\:admin.menu.title view.mode=Ansicht\: 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 b906f7a3df1d3fb1282a8740cbe69fc89c72bdfe..2daf6f460e0f07e6e7364a63a24c15e0f6dcf892 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 @@ -2,6 +2,9 @@ EPStructuredMapTemplate=Portfolio template admin.menu.title=ePortfolio admin.menu.title.alt=Configure ePortfolio +binder.entry.point=landing point in binder +binder.entry.point.toc=Overview +binder.entry.point.entries=Entries 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