From 3a989bf00fdfd0856a070c91c14bc26450b3bed4 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 13 Feb 2012 11:42:49 +0100 Subject: [PATCH] OO-111: update business path in e-portfolio, improve back suppport, reenable full text search with jump to the right menu item in home, enable jump from notifications to the right menu item in home... refactor slightly the ContextEntry to enable rewrite of the business path before the jump --- .../java/org/olat/NewControllerFactory.java | 31 +++--- ...serAdminContextEntryControllerCreator.java | 10 +- .../gui/components/table/TableController.java | 16 +++ .../ContextEntryControllerCreator.java | 23 ++-- .../DefaultContextEntryControllerCreator.java | 56 ++++++++++ .../SiteContextEntryControllerCreator.java | 8 +- ...ontrollerCreator2.java => TabContext.java} | 45 +++++++- .../olat/core/util/mail/MailBoxExtension.java | 8 +- ...essGroupContextEntryControllerCreator.java | 14 +-- .../GuestHomeCEControllerCreator.java | 8 +- ...LiveBlogContextEntryControllerCreator.java | 8 +- .../portfolio/EPArtefactPoolExtension.java | 38 ++++--- .../org/olat/portfolio/EPMapExtension.java | 105 ++++++++++++++++++ .../portfolio/EPMapOnInvitationExtension.java | 8 +- .../org/olat/portfolio/EPMyMapsExtension.java | 8 +- .../EPMyStructuredMapsExtension.java | 8 +- .../olat/portfolio/EPOtherMapsExtension.java | 8 +- .../portfolio/_spring/portfolioContext.xml | 8 +- .../portfolio/manager/EPFrontendManager.java | 13 +++ .../manager/EPNotificationsHandler.java | 3 +- .../manager/EPNotificationsHelper.java | 14 ++- .../portfolio/manager/EPStructureManager.java | 17 +++ .../ui/EPArtefactPoolRunController.java | 15 ++- .../view/EPMultiArtefactsController.java | 3 +- .../EPMultipleArtefactPreviewController.java | 24 ++++ ...rtefactSmallReadOnlyPreviewController.java | 19 ++++ .../EPMultipleArtefactsAsTableController.java | 24 ++++ .../ui/structel/EPMapViewController.java | 4 + .../ui/structel/EPMultipleMapController.java | 20 +++- .../CatalogContextEntryControllerCreator.java | 8 +- ...positoryContextEntryControllerCreator.java | 10 +- ...IdentityContextEntryControllerCreator.java | 17 +-- 32 files changed, 469 insertions(+), 132 deletions(-) create mode 100644 src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java rename src/main/java/org/olat/core/id/context/{ContextEntryControllerCreator2.java => TabContext.java} (51%) create mode 100644 src/main/java/org/olat/portfolio/EPMapExtension.java diff --git a/src/main/java/org/olat/NewControllerFactory.java b/src/main/java/org/olat/NewControllerFactory.java index 1998c8bdadb..d5c8aa14617 100644 --- a/src/main/java/org/olat/NewControllerFactory.java +++ b/src/main/java/org/olat/NewControllerFactory.java @@ -45,7 +45,7 @@ import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; -import org.olat.core.id.context.ContextEntryControllerCreator2; +import org.olat.core.id.context.TabContext; import org.olat.core.logging.AssertException; import org.olat.core.logging.LogDelegator; import org.olat.core.util.resource.OresHelper; @@ -177,12 +177,7 @@ public class NewControllerFactory extends LogDelegator { } //fxdiff BAKS-7 Resume function - String siteClassName; - if(typeHandler instanceof ContextEntryControllerCreator2) { - siteClassName = ((ContextEntryControllerCreator2)typeHandler).getSiteClassName(ureq, mainCe); - } else { - siteClassName = typeHandler.getSiteClassName(mainCe); - } + String siteClassName = typeHandler.getSiteClassName(mainCe, ureq); // open in existing site if (siteClassName != null) { @@ -218,23 +213,23 @@ public class NewControllerFactory extends LogDelegator { } } } - dts.activateStatic(ureq, siteClassName, viewIdentifyer, entries); + + TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries); + dts.activateStatic(ureq, siteClassName, viewIdentifyer, context.getContext()); } else { List<ContextEntry> entries = new ArrayList<ContextEntry>(); + while(bc.hasContextEntry()) { + entries.add(bc.popLauncherContextEntry()); + } + TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries); // or create new tab - String tabName = typeHandler.getTabName(mainCe); + //String tabName = typeHandler.getTabName(mainCe, ureq); // create and add Tab - dt = dts.createDTab(ores, re, tabName); + dt = dts.createDTab(context.getTabResource(), re, context.getName()); if (dt == null) { - // tabs are full: TODO - // user error message is generated in BaseFullWebappController, nothing - // to do here + // user error message is generated in BaseFullWebappController, nothing to do here } else { - while(bc.hasContextEntry()) { - entries.add(bc.popLauncherContextEntry()); - } - WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, dt.getWindowControl()); Controller launchC = typeHandler.createController(mainCe, ureq, bwControl); if (launchC == null) { @@ -244,7 +239,7 @@ public class NewControllerFactory extends LogDelegator { dt.setController(launchC); dts.addDTab(dt); - dts.activate(ureq, dt, null, entries); // null: do not activate to a certain view + dts.activate(ureq, dt, null, context.getContext()); // null: do not activate to a certain view } } } diff --git a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java index be416451358..4180151f2cf 100644 --- a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java +++ b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; /** * Description:<br> @@ -35,7 +35,7 @@ import org.olat.core.id.context.ContextEntryControllerCreator; * * @author srosse */ -public class UserAdminContextEntryControllerCreator implements ContextEntryControllerCreator { +public class UserAdminContextEntryControllerCreator extends DefaultContextEntryControllerCreator { /** * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, @@ -49,7 +49,8 @@ public class UserAdminContextEntryControllerCreator implements ContextEntryContr /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) */ - public String getSiteClassName(ContextEntry ce) { + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { // opened as site not tab return UserAdminSite.class.getName(); } @@ -57,7 +58,8 @@ public class UserAdminContextEntryControllerCreator implements ContextEntryContr /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/core/gui/components/table/TableController.java b/src/main/java/org/olat/core/gui/components/table/TableController.java index ed8c00b8846..51ebae905c1 100644 --- a/src/main/java/org/olat/core/gui/components/table/TableController.java +++ b/src/main/java/org/olat/core/gui/components/table/TableController.java @@ -647,6 +647,22 @@ public class TableController extends BasicController { public void setSelectedRowId(final int selectedRowId) { table.setSelectedRowId(selectedRowId); } + + /** + * Set the page viewed if pageing is enabled + * @param pageNr + */ + public void setPage(Integer pageNr) { + table.updatePageing(pageNr); + } + + /** + * Return the number of items per page if pageing is enable + * @return + */ + public int getPageSize() { + return table.getResultsPerPage(); + } /** * Sets the sortColumn to a specific colun id. Check if the column can be accessed diff --git a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java index b2de3cfd2f9..45a27882660 100644 --- a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java +++ b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java @@ -28,9 +28,12 @@ */ package org.olat.core.id.context; +import java.util.List; + import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.OLATResourceable; /** * Description:<br> @@ -61,16 +64,6 @@ public interface ContextEntryControllerCreator { */ public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl); - /** - * The name of the dynamic tab if such a tab should be created or NULL if - * opened as Site - * - * @param ce - * @return Return tab name for certain context entry or NULL if the target is - * the opeing of an existing site - */ - public String getTabName(ContextEntry ce); - /** * The class name of the site that must be activated or NULL if opened as dTab * @@ -78,7 +71,7 @@ public interface ContextEntryControllerCreator { * @return Return the class name that is used to activate an existing site or * NULL if the target is a new dtab */ - public String getSiteClassName(ContextEntry ce); + public String getSiteClassName(ContextEntry ce, UserRequest ureq); /** * @@ -88,4 +81,12 @@ public interface ContextEntryControllerCreator { * @return true, if this contextentry can be launched */ public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl); + + /** + * Allow to rewrite the business path + * @param ureq + * @param entries + * @return + */ + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries); } diff --git a/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java new file mode 100644 index 00000000000..ef132378678 --- /dev/null +++ b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java @@ -0,0 +1,56 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.id.context; + +import java.util.List; + +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.OLATResourceable; + +/** + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class DefaultContextEntryControllerCreator implements ContextEntryControllerCreator { + + public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return null; + } + + public String getTabName(ContextEntry ce, UserRequest ureq) { + return null; + } + + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + return null; + } + + public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return true; + } + + @Override + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) { + return new TabContext(getTabName(mainEntry, ureq), ores, entries); + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java index 866bf605f4b..ab8766a54be 100644 --- a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java +++ b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java @@ -34,7 +34,7 @@ import org.olat.core.gui.control.navigation.SiteInstance; * * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ -public class SiteContextEntryControllerCreator implements ContextEntryControllerCreator { +public class SiteContextEntryControllerCreator extends DefaultContextEntryControllerCreator { private final Class<? extends SiteInstance> site; public SiteContextEntryControllerCreator(Class<? extends SiteInstance> site) { @@ -45,11 +45,13 @@ public class SiteContextEntryControllerCreator implements ContextEntryController return null; } - public String getSiteClassName(ContextEntry ce) { + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return site.getName(); } - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator2.java b/src/main/java/org/olat/core/id/context/TabContext.java similarity index 51% rename from src/main/java/org/olat/core/id/context/ContextEntryControllerCreator2.java rename to src/main/java/org/olat/core/id/context/TabContext.java index d91775a6e51..1aa6cd21236 100644 --- a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator2.java +++ b/src/main/java/org/olat/core/id/context/TabContext.java @@ -19,11 +19,46 @@ */ package org.olat.core.id.context; -import org.olat.core.gui.UserRequest; +import java.util.List; -//fxdiff BAKS-7 Resume function -public interface ContextEntryControllerCreator2 extends ContextEntryControllerCreator { +import org.olat.core.id.OLATResourceable; +/** + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class TabContext { + + private final String name; + private final OLATResourceable resource; + private final List<ContextEntry> contextEntries; + + public TabContext (String name, OLATResourceable resource, List<ContextEntry> contextEntries) { + this.name = name; + this.resource = resource; + this.contextEntries = contextEntries; + } + + /** + * The name of the tab + * @return + */ + public String getName() { + return name; + } + + /** + * The resource which identified the tab + * @return + */ + public OLATResourceable getTabResource() { + return resource; + } - public String getSiteClassName(UserRequest ureq, ContextEntry ce); -} + /** + * + * @return + */ + public List<ContextEntry> getContext() { + return contextEntries; + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java index 70939502e10..1eefcd7c719 100644 --- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java +++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java @@ -32,7 +32,7 @@ import org.olat.core.id.Identity; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.manager.BasicManager; @@ -67,20 +67,20 @@ public class MailBoxExtension extends BasicManager implements MailContextResolve } public void init() { - NewControllerFactory.getInstance().addContextEntryControllerCreator("Inbox", new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator("Inbox", new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { return null; } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java index 81d6f4da56b..2acab2c2c8f 100644 --- a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java +++ b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java @@ -27,7 +27,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.group.ui.BGControllerFactory; import org.olat.resource.OLATResource; import org.olat.resource.OLATResourceManager; @@ -44,7 +44,7 @@ import org.olat.resource.accesscontrol.manager.ACFrontendManager; * * @author gnaegi, gnaegi@frentix.com, www.frentix.com */ -public class BusinessGroupContextEntryControllerCreator implements ContextEntryControllerCreator { +public class BusinessGroupContextEntryControllerCreator extends DefaultContextEntryControllerCreator { /** * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, @@ -71,7 +71,8 @@ public class BusinessGroupContextEntryControllerCreator implements ContextEntryC /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { OLATResourceable ores = ce.getOLATResourceable(); Long gKey = ores.getResourceableId(); BusinessGroupManager bman = BusinessGroupManagerImpl.getInstance(); @@ -79,13 +80,6 @@ public class BusinessGroupContextEntryControllerCreator implements ContextEntryC return bgroup.getName(); } - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) - */ - public String getSiteClassName(ContextEntry ce) { - return null; - } - @Override public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { OLATResourceable ores = ce.getOLATResourceable(); diff --git a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java index 7eba1fe6a43..8505c16671c 100644 --- a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java +++ b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java @@ -23,7 +23,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; /** @@ -35,7 +35,7 @@ import org.olat.home.HomeSite; * Initial Date: 15 juil. 2011 <br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ -public class GuestHomeCEControllerCreator implements ContextEntryControllerCreator { +public class GuestHomeCEControllerCreator extends DefaultContextEntryControllerCreator { public GuestHomeCEControllerCreator() { @@ -45,11 +45,11 @@ public class GuestHomeCEControllerCreator implements ContextEntryControllerCrea return null; } - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java index e6fd7a69387..dee63e8550c 100644 --- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java +++ b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java @@ -28,7 +28,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.modules.webFeed.FeedResourceSecurityCallback; @@ -53,7 +53,7 @@ public class LiveBlogContextEntryControllerCreator { public LiveBlogContextEntryControllerCreator(final FeedManager feedManager) { - NewControllerFactory.getInstance().addContextEntryControllerCreator("LiveBlog", new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator("LiveBlog", new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -67,14 +67,14 @@ public class LiveBlogContextEntryControllerCreator { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { OLATResourceable ores = ce.getOLATResourceable(); Feed feed = feedManager.getFeed(ores); return feed.getTitle(); } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java index 0c75197a983..8612c380d36 100644 --- a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java +++ b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java @@ -19,12 +19,19 @@ */ package org.olat.portfolio; +import java.util.ArrayList; +import java.util.List; + import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; +import org.olat.core.id.context.TabContext; +import org.olat.core.util.resource.OresHelper; import org.olat.home.HomeSite; import org.olat.portfolio.model.artefacts.AbstractArtefact; @@ -41,29 +48,30 @@ public class EPArtefactPoolExtension { public EPArtefactPoolExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator(AbstractArtefact.class.getSimpleName(), new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator(AbstractArtefact.class.getSimpleName(), new DefaultContextEntryControllerCreator(){ @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + return HomeSite.class.getName(); } @Override - public String getTabName(ContextEntry ce) { - // opens in home-tab - return null; + public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return true; } @Override - public String getSiteClassName(ContextEntry ce) { - return HomeSite.class.getName(); - } + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) { + Identity identity = ureq.getIdentity(); - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; + OLATResourceable mapsRes = OresHelper.createOLATResourceableType("EPArtefacts"); + ContextEntry mapsEntry = BusinessControlFactory.getInstance().createContextEntry(mapsRes); + List<ContextEntry> rewritedEntries = new ArrayList<ContextEntry>(); + rewritedEntries.add(mapsEntry);//Menu node + rewritedEntries.add(mainEntry);//Map + OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey()); + return new TabContext("", homeRes, rewritedEntries); } - }); } } diff --git a/src/main/java/org/olat/portfolio/EPMapExtension.java b/src/main/java/org/olat/portfolio/EPMapExtension.java new file mode 100644 index 00000000000..1621c8c37af --- /dev/null +++ b/src/main/java/org/olat/portfolio/EPMapExtension.java @@ -0,0 +1,105 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.portfolio; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.olat.NewControllerFactory; +import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; +import org.olat.core.id.context.TabContext; +import org.olat.core.util.resource.OresHelper; +import org.olat.home.HomeSite; +import org.olat.portfolio.manager.EPFrontendManager; +import org.olat.portfolio.model.structel.EPDefaultMap; +import org.olat.resource.OLATResource; + +/** + * Rewrite the business path to map + * @author srosse + * + */ +public class EPMapExtension { + + public EPMapExtension() { + NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new MapContextEntryControllerCreator()); + } + + private class MapContextEntryControllerCreator extends DefaultContextEntryControllerCreator { + + @Override + public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return true; + } + + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + return HomeSite.class.getName(); + } + + @Override + public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) { + Identity identity = ureq.getIdentity(); + EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class); + + String nodeTypeName = null; + OLATResource mapOres = ePFMgr.loadOlatResourceFromByKey(mainEntry.getOLATResourceable().getResourceableId()); + if(mapOres == null) { + //nothing to do; + } else if(ePFMgr.isMapOwner(identity, mapOres)) { + if("EPStructuredMap".equals(mapOres.getResourceableTypeName())) { + nodeTypeName = "EPStructuredMaps"; + } else { + nodeTypeName = "EPMaps"; + } + } else if(ePFMgr.isMapVisible(ureq.getIdentity(), mapOres)) { + //go to the shared pane + if(ePFMgr.isMapShared(mapOres)) { + nodeTypeName = "EPSharedMaps"; + } + } + + if(nodeTypeName == null) { + OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey()); + return new TabContext("", homeRes, Collections.<ContextEntry>emptyList()); + } + + OLATResourceable mapsRes = OresHelper.createOLATResourceableType(nodeTypeName); + ContextEntry mapsEntry = BusinessControlFactory.getInstance().createContextEntry(mapsRes); + List<ContextEntry> rewritedEntries = new ArrayList<ContextEntry>(); + rewritedEntries.add(mapsEntry);//Menu node + rewritedEntries.add(mainEntry);//Map + if(entries != null && !entries.isEmpty()) { + rewritedEntries.addAll(entries);//more details + } + // -> HomeSite + OLATResourceable homeRes = OresHelper.createOLATResourceableInstance("HomeSite", identity.getKey()); + return new TabContext("", homeRes, rewritedEntries); + } + } +} diff --git a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java index 3b80a6fe5bb..1b095e4518a 100644 --- a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java +++ b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java @@ -26,7 +26,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.portfolio.manager.EPFrontendManager; import org.olat.portfolio.model.structel.PortfolioStructureMap; @@ -45,7 +45,7 @@ public class EPMapOnInvitationExtension { public EPMapOnInvitationExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator("MapInvitation", new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator("MapInvitation", new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -64,13 +64,13 @@ public class EPMapOnInvitationExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { PortfolioStructureMap map = getMapFromContext(ce); return map.getTitle(); } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java index aff9ce29378..7a2848de5c3 100644 --- a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; import org.olat.portfolio.model.structel.EPDefaultMap; @@ -43,7 +43,7 @@ public class EPMyMapsExtension { public EPMyMapsExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator(EPDefaultMap.class.getSimpleName(), new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -51,13 +51,13 @@ public class EPMyMapsExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java index 2f3d3f12a50..add40d4c965 100644 --- a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; import org.olat.portfolio.model.structel.EPStructuredMap; @@ -41,7 +41,7 @@ public class EPMyStructuredMapsExtension { public EPMyStructuredMapsExtension() { - NewControllerFactory.getInstance().addContextEntryControllerCreator(EPStructuredMap.class.getSimpleName(), new ContextEntryControllerCreator(){ + NewControllerFactory.getInstance().addContextEntryControllerCreator(EPStructuredMap.class.getSimpleName(), new DefaultContextEntryControllerCreator(){ @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -49,13 +49,13 @@ public class EPMyStructuredMapsExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java index b9a88dd15e0..5d5bcf3c06d 100644 --- a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.home.HomeSite; /** @@ -43,7 +43,7 @@ public class EPOtherMapsExtension { public EPOtherMapsExtension() { NewControllerFactory.getInstance().addContextEntryControllerCreator("Map", - new ContextEntryControllerCreator() { + new DefaultContextEntryControllerCreator() { @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -51,13 +51,13 @@ public class EPOtherMapsExtension { } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { // opens in home-tab return null; } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml b/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml index 33d6c7f72dc..98f870f9720 100644 --- a/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml +++ b/src/main/java/org/olat/portfolio/_spring/portfolioContext.xml @@ -77,16 +77,10 @@ <bean class="org.olat.portfolio.EPArtefactPoolExtension"/> <!-- Portfolio map view in users Home --> - <bean class="org.olat.portfolio.EPMyMapsExtension"/> + <bean class="org.olat.portfolio.EPMapExtension"/> <!-- Portfolio map view for invitee --> <bean class="org.olat.portfolio.EPMapOnInvitationExtension"/> - - <!-- Portfolio map view in users Home --> - <bean class="org.olat.portfolio.EPMyStructuredMapsExtension"/> - - <!-- Portfolio map view in users Home --> - <bean class="org.olat.portfolio.EPOtherMapsExtension"/> <bean name="epArtefactManager" class="org.olat.portfolio.manager.EPArtefactManager"> <property name="dbInstance" ref="database"/> diff --git a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java index f4fbccbe067..fd7aadee845 100755 --- a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java @@ -926,6 +926,15 @@ public class EPFrontendManager extends BasicManager { return structureManager.loadPortfolioStructureByKey(key); } + /** + * Load the OLAT resource with the primary of the structure element + * @param key cannot be null + * @return The resource or null if not found + */ + public OLATResource loadOlatResourceFromByKey(Long key) { + return structureManager.loadOlatResourceFromStructureElByKey(key); + } + /** * Retrieve the parent of the structure * @param structure @@ -1033,6 +1042,10 @@ public class EPFrontendManager extends BasicManager { public boolean isMapShared(PortfolioStructureMap map) { OLATResource resource = map.getOlatResource(); + return isMapShared(resource); + } + + public boolean isMapShared(OLATResourceable resource) { List<Policy> policies = securityManager.getPoliciesOfResource(resource, null); for(Policy policy:policies) { if(policy.getPermission().contains(Constants.PERMISSION_READ)) { diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java b/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java index ed54fc4a7f0..473487fd20a 100644 --- a/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java +++ b/src/main/java/org/olat/portfolio/manager/EPNotificationsHandler.java @@ -66,7 +66,8 @@ public class EPNotificationsHandler implements NotificationsHandler { // only do that if a map was found. // init the helper; - EPNotificationsHelper helper = new EPNotificationsHelper(p.getBusinessPath(), locale, subscriber.getIdentity()); + String businessPath = "[EPDefaultMap:" + amap.getKey() + "]"; + EPNotificationsHelper helper = new EPNotificationsHelper(businessPath, locale, subscriber.getIdentity()); // gather all changes for the current map if (NotificationsManager.getInstance().isPublisherValid(p)) { diff --git a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java b/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java index 67a95897014..be78f41a909 100644 --- a/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java +++ b/src/main/java/org/olat/portfolio/manager/EPNotificationsHelper.java @@ -115,8 +115,14 @@ public class EPNotificationsHelper { allItems.add(new SubscriptionListItem(translator.translate("li.newpage", new String[] { childPage.getTitle() }), urlToSend, structLink .getCreationDate(), "b_ep_page_icon")); } else { + String urlToSend = ""; + if(structLink.getParent() instanceof EPPage) { + EPPage childPage = (EPPage) structLink.getParent(); + String businessPath = rootBusinessPath + "[EPPage:" + childPage.getKey() + "]"; + urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath); + } allItems.add(new SubscriptionListItem(translator.translate("li.newstruct", new String[] { structLink.getChild().getTitle() }), - "", structLink.getCreationDate(), "b_ep_struct_icon")); + urlToSend, structLink.getCreationDate(), "b_ep_struct_icon")); } } } @@ -129,8 +135,9 @@ public class EPNotificationsHelper { } for (AbstractArtefact artfc : allAs) { if (artfc.getCollectionDate().after(compareDate)) { + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(rootBusinessPath); allItems.add(new SubscriptionListItem(translator.translate("li.newartefact", new String[] { getFullNameFromUser(artfc.getAuthor() - .getUser()) }), "", artfc.getCollectionDate(), "b_eportfolio_link")); + .getUser()) }), urlToSend, artfc.getCollectionDate(), "b_eportfolio_link")); } } @@ -172,8 +179,9 @@ public class EPNotificationsHelper { } for (AbstractArtefact artfc : allAs) { if (artfc.getCollectionDate().after(compareDate)) { + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(rootBusinessPath); allItems.add(new SubscriptionListItem( - translator.translate("li.newartefact", new String[] { getFullNameFromUser(artfc.getAuthor()) }), "", artfc + translator.translate("li.newartefact", new String[] { getFullNameFromUser(artfc.getAuthor()) }), urlToSend, artfc .getCollectionDate(), "b_eportfolio_link")); } } diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java index 6345033db8a..160b87c350e 100755 --- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java @@ -1530,6 +1530,23 @@ public class EPStructureManager extends BasicManager { if (resources.isEmpty()) return null; return resources.get(0); } + + public OLATResource loadOlatResourceFromStructureElByKey(Long key) { + if (key == null) throw new NullPointerException(); + + StringBuilder sb = new StringBuilder(); + sb.append("select element.olatResource from ").append(EPStructureElement.class.getName()).append(" element") + .append(" where element.key=:key or element.olatResource.resId=:key "); + + DBQuery query = dbInstance.createQuery(sb.toString()); + query.setLong("key", key); + + @SuppressWarnings("unchecked") + List<OLATResource> resources = query.list(); + // if not found, it is an empty list + if (resources.isEmpty()) return null; + return resources.get(0); + } /** * Create a basic structure element diff --git a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java index 66a2652997c..1310f4d8791 100755 --- a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java +++ b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java @@ -35,6 +35,10 @@ import org.olat.core.gui.control.Controller; 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.gui.control.generic.dtabs.Activateable2; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.EPSecurityCallback; import org.olat.portfolio.EPSecurityCallbackImpl; import org.olat.portfolio.PortfolioModule; @@ -61,7 +65,7 @@ import org.olat.portfolio.ui.filter.PortfolioFilterEditEvent; * * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com */ -public class EPArtefactPoolRunController extends BasicController { +public class EPArtefactPoolRunController extends BasicController implements Activateable2 { private VelocityContainer vC; private EPFrontendManager ePFMgr; @@ -290,6 +294,15 @@ public class EPArtefactPoolRunController extends BasicController { } } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + if(artCtrl != null) { + artCtrl.activate(ureq, entries, state); + } + } + private enum Filter { read_only, tags, diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java index f83b1ce64ac..d253301b03b 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultiArtefactsController.java @@ -23,6 +23,7 @@ import java.util.List; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.portfolio.model.artefacts.AbstractArtefact; /** @@ -34,7 +35,7 @@ import org.olat.portfolio.model.artefacts.AbstractArtefact; * Initial Date: 16.11.2010 <br> * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com */ -public interface EPMultiArtefactsController extends Controller { +public interface EPMultiArtefactsController extends Controller, Activateable2 { /** * signal the controller to refresh its childs or artefact-representations diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java index 3d6314f234d..2955e02c744 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactPreviewController.java @@ -40,6 +40,9 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController; import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.manager.EPFrontendManager; import org.olat.portfolio.model.artefacts.AbstractArtefact; @@ -228,6 +231,27 @@ public class EPMultipleArtefactPreviewController extends BasicController impleme } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + OLATResourceable ores = entries.get(0).getOLATResourceable(); + if("AbstractArtefact".equals(ores.getResourceableTypeName())) { + Long resId = ores.getResourceableId(); + + int index = 0; + for(AbstractArtefact artefact: artefactsFullList) { + if(artefact.getKey().equals(resId) || artefact.getResourceableId().equals(resId)) { + int rest = (index % artefactsPerPage); + int page = (index - rest) / artefactsPerPage; + preparePaging(ureq, page + 1); + break; + } + index++; + } + } + } + private Map<String, Boolean> getArtefactAttributeDisplayConfig(Identity ident) { if (artAttribConfig == null) { artAttribConfig = ePFMgr.getArtefactAttributeConfig(ident); diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java index 39f9429538b..e3a98f3ddaf 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactSmallReadOnlyPreviewController.java @@ -32,6 +32,9 @@ import org.olat.core.gui.control.Controller; 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.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.EPArtefactHandler; import org.olat.portfolio.EPSecurityCallback; import org.olat.portfolio.PortfolioModule; @@ -180,6 +183,22 @@ public class EPMultipleArtefactSmallReadOnlyPreviewController extends BasicContr super.event(ureq, source, event); fireEvent(ureq, event); // pass to others } + + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + OLATResourceable ores = entries.get(0).getOLATResourceable(); + if("AbstractArtefact".equals(ores.getResourceableTypeName())) { + Long resId = ores.getResourceableId(); + for(AbstractArtefact artefact: artefacts) { + if(artefact.getKey().equals(resId) || artefact.getResourceableId().equals(resId)) { + System.out.println("Match"); + } + } + } + + } /** * @see org.olat.core.gui.control.DefaultController#doDispose() diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java index 9360667fe9b..1c327b24cb1 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java @@ -40,6 +40,9 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalWindowWra import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.gui.translator.Translator; +import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.portfolio.EPArtefactHandler; import org.olat.portfolio.EPSecurityCallback; import org.olat.portfolio.EPUIFactory; @@ -259,6 +262,27 @@ public class EPMultipleArtefactsAsTableController extends BasicController implem super.event(ureq, source, event); } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + OLATResourceable ores = entries.get(0).getOLATResourceable(); + if("AbstractArtefact".equals(ores.getResourceableTypeName())) { + Long resId = ores.getResourceableId(); + ArtefactTableDataModel model = (ArtefactTableDataModel) artefactListTblCtrl.getTableDataModel(); + for(int i=0; i< model.getRowCount(); i++) { + AbstractArtefact artefact = (AbstractArtefact)model.getObject(i); + if(artefact.getKey().equals(resId)) { + int artefactsPerPage = artefactListTblCtrl.getPageSize(); + int rest = (i % artefactsPerPage); + int page = (i - rest) / artefactsPerPage; + artefactListTblCtrl.setPage(new Integer(page + 1)); + break; + } + } + } + } + private void showMoveTree(UserRequest ureq, AbstractArtefact artefact){ moveTreeCtrl = new EPCollectStepForm04(ureq, getWindowControl(), artefact, struct); listenTo(moveTreeCtrl); diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java b/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java index 7653dec3806..cbb2f851208 100644 --- a/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java +++ b/src/main/java/org/olat/portfolio/ui/structel/EPMapViewController.java @@ -232,6 +232,10 @@ public class EPMapViewController extends BasicController implements Activateable pageCtrl.activate(ureq, entries, state); } + public PortfolioStructureMap getMap() { + return map; + } + private EPPage getSelectedPage(PortfolioStructure structure) { PortfolioStructure current = structure; diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java b/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java index 1f89a093bf8..9519a636d20 100644 --- a/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java +++ b/src/main/java/org/olat/portfolio/ui/structel/EPMultipleMapController.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.Windows; @@ -44,11 +43,9 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; -import org.olat.core.id.UserConstants; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; -import org.olat.core.util.StringHelper; import org.olat.core.util.resource.OresHelper; import org.olat.home.HomeSite; import org.olat.portfolio.EPLoggingAction; @@ -480,14 +477,29 @@ public class EPMultipleMapController extends BasicController implements Activate private void activateMap(UserRequest ureq, Long mapKey) { if(mapKey == null) return; - // we have a key, find the corresponding map + boolean foundTheMap = false; + // we have a key, find the corresponding map with the current option (restrcited view or not) for(PortfolioStructureMap map: userMaps) { if(map.getKey().equals(mapKey) || (map.getResourceableId().equals(mapKey))) { activateMap(ureq, map); fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, map)); + foundTheMap = true; break; } } + + if(!foundTheMap) { + // map not found, switch the option and retry to found the map + restrictShareView = !restrictShareView; + initOrUpdateMaps(ureq); + for(PortfolioStructureMap map: userMaps) { + if(map.getKey().equals(mapKey) || (map.getResourceableId().equals(mapKey))) { + activateMap(ureq, map); + fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, map)); + break; + } + } + } } public void activateMap(UserRequest ureq, PortfolioStructureMap struct){ diff --git a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java index 0a4fd9b0c68..6f1a58b3745 100644 --- a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java +++ b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java @@ -24,7 +24,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.repository.site.RepositorySite; /** @@ -34,7 +34,7 @@ import org.olat.repository.site.RepositorySite; * Initial Date: 11 fev. 2010 <br> * @author srosse, stephane.rosse@frentix.com */ -public class CatalogContextEntryControllerCreator implements ContextEntryControllerCreator { +public class CatalogContextEntryControllerCreator extends DefaultContextEntryControllerCreator { @Override public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { @@ -42,12 +42,12 @@ public class CatalogContextEntryControllerCreator implements ContextEntryControl } @Override - public String getSiteClassName(ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return RepositorySite.class.getName(); } @Override - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java index 643caf2e19a..f09e8d5cc07 100644 --- a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java +++ b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java @@ -24,7 +24,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; /** * <h3>Description:</h3> @@ -36,7 +36,7 @@ import org.olat.core.id.context.ContextEntryControllerCreator; * * @author gnaegi, gnaegi@frentix.com, www.frentix.com */ -public class RepositoryContextEntryControllerCreator implements ContextEntryControllerCreator { +public class RepositoryContextEntryControllerCreator extends DefaultContextEntryControllerCreator { /** * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, @@ -56,7 +56,8 @@ public class RepositoryContextEntryControllerCreator implements ContextEntryCont /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + @Override + public String getTabName(ContextEntry ce, UserRequest ureq) { OLATResourceable ores = ce.getOLATResourceable(); RepositoryManager repom = RepositoryManager.getInstance(); @@ -67,7 +68,8 @@ public class RepositoryContextEntryControllerCreator implements ContextEntryCont /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) */ - public String getSiteClassName(ContextEntry ce) { + @Override + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java index 35ac132fa70..eac01605c6e 100644 --- a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java +++ b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java @@ -26,10 +26,9 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator2; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; - import org.olat.home.HomeSite; /** @@ -42,7 +41,7 @@ import org.olat.home.HomeSite; * * @author gnaegi, gnaegi@frentix.com, www.frentix.com */ -public class IdentityContextEntryControllerCreator implements ContextEntryControllerCreator2 { +public class IdentityContextEntryControllerCreator extends DefaultContextEntryControllerCreator { private static final OLog log = Tracing.createLoggerFor(IdentityContextEntryControllerCreator.class); /** @@ -57,17 +56,9 @@ public class IdentityContextEntryControllerCreator implements ContextEntryContro return uimc; } - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) - */ - public String getSiteClassName(ContextEntry ce) { - // opened as tab not site - return null; - } - @Override //fxdiff BAKS-7 Resume function - public String getSiteClassName(UserRequest ureq, ContextEntry ce) { + public String getSiteClassName(ContextEntry ce, UserRequest ureq) { Long resId = ce.getOLATResourceable().getResourceableId(); if(resId != null && resId.equals(ureq.getIdentity().getKey())) { return HomeSite.class.getName(); @@ -78,7 +69,7 @@ public class IdentityContextEntryControllerCreator implements ContextEntryContro /** * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) */ - public String getTabName(ContextEntry ce) { + public String getTabName(ContextEntry ce, UserRequest ureq) { Identity identity = extractIdentity(ce); if (identity == null) return null; return identity.getName(); -- GitLab