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