diff --git a/src/main/java/org/olat/admin/AdminModule.java b/src/main/java/org/olat/admin/AdminModule.java index 858985a12ff948988de4cdd2f6b1cff5c6a1555c..4ee6f59e2a0c1c4f51771b04f7775320f2cdcf00 100644 --- a/src/main/java/org/olat/admin/AdminModule.java +++ b/src/main/java/org/olat/admin/AdminModule.java @@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.RandomStringUtils; import org.olat.NewControllerFactory; +import org.olat.admin.site.AdminSite; import org.olat.admin.user.UserAdminContextEntryControllerCreator; import org.olat.basesecurity.AuthHelper; import org.olat.core.commons.fullWebApp.util.GlobalStickyMessage; @@ -37,6 +38,7 @@ import org.olat.core.commons.persistence.DBFactory; import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; import org.olat.core.id.User; +import org.olat.core.id.context.SiteContextEntryControllerCreator; import org.olat.core.logging.Tracing; import org.olat.core.util.UserSession; import org.olat.instantMessaging.rosterandchat.ChangePresenceJob; @@ -234,6 +236,9 @@ public class AdminModule extends AbstractOLATModule { new UserAdminContextEntryControllerCreator()); NewControllerFactory.getInstance().addContextEntryControllerCreator("NewIdentityCreated", new UserAdminContextEntryControllerCreator()); + NewControllerFactory.getInstance().addContextEntryControllerCreator(AdminSite.class.getSimpleName(), + new SiteContextEntryControllerCreator(AdminSite.class)); + } @Override diff --git a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java index 78c654cc32e1011577ff9951db2f2291906f969a..691d7d27dd45d68312171ae7b927820d5c167ec1 100644 --- a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java +++ b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java @@ -28,11 +28,11 @@ import org.olat.commons.calendar.model.KalendarEvent; import org.olat.commons.calendar.ui.CalendarController; import org.olat.core.gui.translator.Translator; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.LogDelegator; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; import org.olat.core.util.Util; -import org.olat.core.util.notifications.NotificationHelper; import org.olat.core.util.notifications.NotificationsHandler; import org.olat.core.util.notifications.NotificationsManager; import org.olat.core.util.notifications.Publisher; @@ -145,7 +145,7 @@ public class CalendarNotificationHandler extends LogDelegator implements Notific } String desc = translator.translate("cal.notifications.entry", new String[] { subject, dateStr, location, author }); String businessPath = bPath + "[path=" + kalendarEvent.getID() + ":0]"; - String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath); + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath); SubscriptionListItem subListItem = new SubscriptionListItem(desc, urlToSend, modDate, CSS_CLASS_CALENDAR_ICON); si.addSubscriptionListItem(subListItem); } diff --git a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java index 31102722d5fd055afb42b417dc8f32edd69986ab..8aa5091115280219b4b966d2f1d8982a522117fd 100644 --- a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java +++ b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java @@ -58,9 +58,13 @@ 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.closablewrapper.CloseableModalController; +import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.id.UserConstants; +import org.olat.core.id.context.BusinessControlFactory; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.core.logging.activity.ILoggingAction; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.CodeHelper; @@ -75,7 +79,7 @@ import org.olat.util.logging.activity.LoggingResourceable; import de.bps.olat.util.notifications.SubscriptionProvider; import de.bps.olat.util.notifications.SubscriptionProviderImpl; -public class WeeklyCalendarController extends BasicController implements CalendarController, GenericEventListener { +public class WeeklyCalendarController extends BasicController implements Activateable2, CalendarController, GenericEventListener { private static final String CMD_PREVIOUS_WEEK = "pw"; private static final String CMD_NEXT_WEEK = "nw"; @@ -505,6 +509,20 @@ public class WeeklyCalendarController extends BasicController implements Calenda } } } + + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + String dateEntry = entries.get(0).getOLATResourceable().getResourceableTypeName(); + if(dateEntry.startsWith("date")) { + Date gotoDate = BusinessControlFactory.getInstance().getDateFromContextEntry(entries.get(0)); + if(gotoDate != null) { + weeklyCalendar.setDate(gotoDate); + setWeekYearInVelocityPage(vcMain, weeklyCalendar); + } + } + } /** * @param ureq diff --git a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java index 08981e68f515107e60ff9dccedd3cc9cc7376800..f26e083438058df0c6e389fe271fdecd3a41e2b4 100644 --- a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java +++ b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java @@ -28,6 +28,7 @@ import org.olat.commons.info.manager.InfoMessageManager; import org.olat.commons.info.model.InfoMessage; import org.olat.core.gui.translator.Translator; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.LogDelegator; import org.olat.core.util.Util; import org.olat.core.util.notifications.NotificationHelper; @@ -87,7 +88,7 @@ public class InfoMessageNotificationHandler extends LogDelegator implements Noti String desc = info.getTitle(); String tooltip = info.getMessage(); String infoBusinessPath = info.getBusinessPath() + "[InfoMessage:" + info.getKey() + "]"; - String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, infoBusinessPath); + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(infoBusinessPath); Date dateInfo = info.getModificationDate() == null ? info.getCreationDate() : info.getModificationDate(); SubscriptionListItem subListItem = new SubscriptionListItem(desc, tooltip, urlToSend, dateInfo, CSS_CLASS_ICON); si.addSubscriptionListItem(subListItem); diff --git a/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java b/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java index 65c59b53df29c13b1e0e9171d3248c8059de2f73..bb3a756637a16d054dd2e664175210559f465b7a 100644 --- a/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java +++ b/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java @@ -19,8 +19,6 @@ */ package org.olat.commons.info.portlet; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -194,14 +192,13 @@ public class InfoMessagePortletRunController extends AbstractPortletRunControlle @Override protected void event(UserRequest ureq, Component source, Event event) { if(source == showAllLink) { - DateFormat format = new SimpleDateFormat("yyyyMMdd"); Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.MONTH, -1); // fxdiff activate homes tab in top navigation and activate the correct // menu item String resourceUrl = "[HomeSite:" + ureq.getIdentity().getKey() + "][notifications:0][type=" + InfoMessage.class.getSimpleName() - + ":0][date=" + format.format(cal.getTime()) + ":0]"; + + ":0]" + BusinessControlFactory.getInstance().getContextEntryStringForDate(cal.getTime()); BusinessControl bc = BusinessControlFactory.getInstance().createFromString(resourceUrl); WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl()); NewControllerFactory.getInstance().launch(ureq, bwControl); diff --git a/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java b/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java index 87a2b9b930d7d7760435fe864fb8a8f35527a522..82193108d66021a419db4dbf47a8786350eba7ff 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java +++ b/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java @@ -37,6 +37,7 @@ import org.olat.core.commons.modules.bc.meta.MetaInfo; import org.olat.core.gui.translator.Translator; import org.olat.core.gui.util.CSSHelper; import org.olat.core.id.Identity; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.Util; @@ -109,7 +110,7 @@ public class FolderNotificationsHandler implements NotificationsHandler { String desc = translator.translate("notifications.entry", new String[] { title, NotificationHelper.getFormatedName(ident) }); String urlToSend = null; if(p.getBusinessPath() != null) { - urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath + fi.getRelPath() + "]"); + urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath + fi.getRelPath() + "]"); } subListItem = new SubscriptionListItem(desc, urlToSend, modDate, iconCssClass); si.addSubscriptionListItem(subListItem); diff --git a/src/main/java/org/olat/core/extensions/ExtManager.java b/src/main/java/org/olat/core/extensions/ExtManager.java index ca2938e648586c0e0e39dd0c1ed0717a2a79b2e7..787fa310187e30c355bca09cb25e319349554992 100644 --- a/src/main/java/org/olat/core/extensions/ExtManager.java +++ b/src/main/java/org/olat/core/extensions/ExtManager.java @@ -56,7 +56,7 @@ public class ExtManager extends LogDelegator { private Map<Long,Extension> idExtensionlookup; - private Map<String,GenericActionExtension> navKeyGAExtensionlookup; + private Map<ExtensionPointKeyPair,GenericActionExtension> navKeyGAExtensionlookup; /** * @return the instance @@ -112,8 +112,11 @@ public class ExtManager extends LogDelegator { * @param navKey * @return the GenericActionExtension or null */ - public GenericActionExtension getActionExtensioByNavigationKey(String navKey) { - if (navKeyGAExtensionlookup.containsKey(navKey)) return navKeyGAExtensionlookup.get(navKey); + public GenericActionExtension getActionExtensioByNavigationKey(String extensionPoint, String navKey) { + ExtensionPointKeyPair key = new ExtensionPointKeyPair(extensionPoint, navKey); + if (navKeyGAExtensionlookup.containsKey(key)) { + return navKeyGAExtensionlookup.get(key); + } return null; } @@ -138,21 +141,12 @@ public class ExtManager extends LogDelegator { public long getTimeOfExtensionStartup() { return timeOfExtensionStartup; } - - /** - * @param extensionPoint - * @param anExt - * @param addInfo additional info to log - */ - public void inform(Class extensionPoint, Extension anExt, String addInfo) { - //Tracing.logAudit(this.getClass(), info: "+addInfo); // TODO Auto-generated method stub - } private void initExtentions() { logInfo("****** start loading extensions *********"); Map<Integer, Extension> orderKeys = new HashMap<Integer, Extension>(); idExtensionlookup = new HashMap<Long, Extension>(); - navKeyGAExtensionlookup = new HashMap<String, GenericActionExtension>(); + navKeyGAExtensionlookup = new HashMap<ExtensionPointKeyPair, GenericActionExtension>(); extensions = new ArrayList<Extension>(); Map<String, Object> extensionMap = CoreSpringFactory.getBeansOfType(CoreBeanTypes.extension); @@ -194,14 +188,18 @@ public class ExtManager extends LogDelegator { idExtensionlookup.put(uid, extension); if (extension instanceof GenericActionExtension) { GenericActionExtension gAE = (GenericActionExtension) extension; - if (StringHelper.containsNonWhitespace(gAE.getNavigationKey())) { - if (!navKeyGAExtensionlookup.containsKey(gAE.getNavigationKey())) { - navKeyGAExtensionlookup.put(gAE.getNavigationKey(), gAE); - } else { - count_duplnavkey++; - logInfo( + if (StringHelper.containsNonWhitespace(gAE.getNavigationKey()) && gAE.getExtensionPoints() != null) { + List<String>extensionPoints = gAE.getExtensionPoints(); + for(String extensionPoint:extensionPoints) { + ExtensionPointKeyPair key = new ExtensionPointKeyPair(extensionPoint, gAE.getNavigationKey()); + if (navKeyGAExtensionlookup.containsKey(key)) { + count_duplnavkey++; + logInfo( "Devel-Info :: duplicate navigation-key for extension :: " + gAE.getNavigationKey() + " [ [" + idExtensionlookup.get(uid) - + "] and [" + extension + "] ]", null); + + "] and [" + extension + "] ]", null); + } else { + navKeyGAExtensionlookup.put(key, gAE); + } } } } @@ -211,5 +209,33 @@ public class ExtManager extends LogDelegator { logInfo("Devel-Info :: initExtensions done. :: "+count_disabled+" disabled Extensions, "+count_duplid+" extensions with duplicate ids, "+count_duplnavkey+ " extensions with duplicate navigationKeys"); Collections.sort(extensions); } + + private class ExtensionPointKeyPair { + private String extensionPoint; + private String navigationKey; + + public ExtensionPointKeyPair(String extensionPoint, String navigationKey) { + this.extensionPoint = extensionPoint; + this.navigationKey = navigationKey; + } + @Override + public int hashCode() { + return (extensionPoint == null ? 9967811 : extensionPoint.hashCode()) + + (navigationKey == null ? 8544 : navigationKey.hashCode()); + } + @Override + public boolean equals(Object obj) { + if(this == obj) { + return true; + } + if(obj instanceof ExtensionPointKeyPair) { + ExtensionPointKeyPair pair = (ExtensionPointKeyPair)obj; + return extensionPoint != null && extensionPoint.equals(pair.extensionPoint) + && navigationKey != null && navigationKey.equals(pair.navigationKey); + } + + return false; + } + } } diff --git a/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java b/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java index f5cd585d6e7ebf75f36d51a3f4a105bdc9201229..36bd09815be82250c5841e8c3411f15ad4577b19 100644 --- a/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java +++ b/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java @@ -201,6 +201,10 @@ public class GenericActionExtension extends AbstractExtension implements ActionE public void setNavigationKey(String navKey) { this.navigationKey = navKey; } + + public List<String> getExtensionPoints() { + return extensionPoints; + } public void setExtensionPoints(List<String> extensionPoints) { this.extensionPoints = extensionPoints; diff --git a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java index 38c19e5b5512a0a0c340523bb8a89732395357dd..c14e2d7c9cde02ec771ee67ff4876190d1d746d4 100644 --- a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java +++ b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java @@ -51,7 +51,6 @@ import org.olat.core.id.context.StateEntry; import org.olat.core.logging.AssertException; import org.olat.core.util.CodeHelper; import org.olat.core.util.StringHelper; -import org.olat.core.util.nodes.INode; import org.olat.core.util.resource.OresHelper; /** @@ -400,7 +399,7 @@ public abstract class GenericMainController extends MainLayoutBasicController { if(vwindex >= 0){ naviKey = viewIdentifier.substring(0,viewIdentifier.indexOf(':')); } - ae = ExtManager.getInstance().getActionExtensioByNavigationKey(naviKey); + ae = ExtManager.getInstance().getActionExtensioByNavigationKey(className, naviKey); if(ae == null){ // this happens, if someone uses a navigation key, that no actionExtension uses... logWarn("couldn't find an ActionExtension for navigationKey '"+naviKey+"' . I suggest adjusting spring configuration for GenericMainController.." , null); @@ -450,7 +449,7 @@ public abstract class GenericMainController extends MainLayoutBasicController { } } else { // maybe the node is a GAE-NavigationKey ? - GenericActionExtension gAE = ExtManager.getInstance().getActionExtensioByNavigationKey(node); + GenericActionExtension gAE = ExtManager.getInstance().getActionExtensioByNavigationKey(className, node); if (gAE != null) { activateTreeNodeByActionExtension(ureq, gAE); if (entries.size() >= 1) { diff --git a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java index c942b2c572ad27b472cb1fa36dd5af611dce6aa2..ebd288063d42ec27b553d4b2191d6de70226218b 100644 --- a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java +++ b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java @@ -30,8 +30,12 @@ package org.olat.core.id.context; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -42,7 +46,9 @@ import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; +import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.StringHelper; import org.olat.core.util.resource.OresHelper; import org.olat.core.util.servlets.URLEncoder; @@ -57,10 +63,13 @@ import org.olat.core.util.servlets.URLEncoder; */ public class BusinessControlFactory { + private static final OLog log = Tracing.createLoggerFor(BusinessControlFactory.class); + private static final BusinessControlFactory INSTANCE = new BusinessControlFactory(); final BusinessControl EMPTY; // for performance private static final Pattern PAT_CE = Pattern.compile("\\[([^\\]]*)\\]"); + private static final DateFormat ceDateFormat = new SimpleDateFormat("yyyyMMdd"); private BusinessControlFactory() { // singleton @@ -93,10 +102,6 @@ public class BusinessControlFactory { return false; } - public int getStackedCount() { - return 0; - } - @Override public ContextEntry getCurrentContextEntry() { return null; @@ -231,10 +236,8 @@ public class BusinessControlFactory { public BusinessControl createFromString(String businessControlString) { final List<ContextEntry> ces = createCEListFromString(businessControlString); - - ContextEntry rootEntry = null; - if (ces.isEmpty() || ((rootEntry = ces.get(0))==null)) { - Tracing.logWarn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty. string is "+businessControlString, new Exception("stacktrace"), getClass()); + if (ces.isEmpty() || ces.get(0) ==null) { + log.warn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty. string is "+businessControlString, new Exception("stacktrace")); } return createFromContextEntries(ces); } @@ -243,7 +246,7 @@ public class BusinessControlFactory { public BusinessControl createFromContextEntries(final List<ContextEntry> ces) { ContextEntry rootEntry = null; if (ces.isEmpty() || ((rootEntry = ces.get(0))==null)) { - Tracing.logWarn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty.", new Exception("stacktrace"), getClass()); + log.warn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty.", new Exception("stacktrace")); } //Root businessControl with RootContextEntry which must be defined (i.e. not null) @@ -294,7 +297,7 @@ public class BusinessControlFactory { Long key = Long.parseLong(keyS); ores = OresHelper.createOLATResourceableInstanceWithoutCheck(type, key); } catch (NumberFormatException e) { - Tracing.logWarn("Cannot parse business path:" + businessControlString, e, BusinessControlFactory.class); + log.warn("Cannot parse business path:" + businessControlString, e); return Collections.emptyList(); } } @@ -356,6 +359,41 @@ public class BusinessControlFactory { return retVal.substring(0, retVal.length()-1); } + /** + * Return the standard format for date: [date=20120223:0] + * @param date + * @return + */ + public String getContextEntryStringForDate(Date date) { + StringBuilder sb = new StringBuilder("[date="); + synchronized(ceDateFormat) {//DateFormat isn't thread safe but costly to create, we reuse it + sb.append(ceDateFormat.format(date)); + } + sb.append(":0]"); + return sb.toString(); + } + + public Date getDateFromContextEntry(ContextEntry entry) { + String dateEntry = entry.getOLATResourceable().getResourceableTypeName(); + + Date date = null; + if(dateEntry.startsWith("date=")) { + try { + int sepIndex = dateEntry.indexOf(':'); + int lastIndex = (sepIndex > 0 ? sepIndex : dateEntry.length()); + if(lastIndex > 0) { + String dateStr = dateEntry.substring("date=".length(), lastIndex); + synchronized(ceDateFormat) {//DateFormat isn't thread safe but costly to create, we reuse it + date = ceDateFormat.parse(dateStr); + } + } + } catch (ParseException e) { + log.warn("Error parsing the date after activate: " + dateEntry, e); + } + } + return date; + } + //fxdiff BAKS-7 Resume function public String getPath(ContextEntry entry) { String path = entry.getOLATResourceable().getResourceableTypeName(); @@ -374,7 +412,6 @@ public class BusinessControlFactory { if(ceStr.startsWith("[path")) { //the %2F make a problem on browsers. //make the change only for path which is generally used - //TODO: find a better method or a better separator as | ceStr = ceStr.replace("%2F", "~~"); } ceStr = ceStr.replace(':', '/'); @@ -385,6 +422,23 @@ public class BusinessControlFactory { return retVal.substring(0, retVal.length()-1); } + public String getURLFromBusinessPathString(String bPathString){ + if(!StringHelper.containsNonWhitespace(bPathString)) { + return null; + } + + try { + BusinessControlFactory bCF = BusinessControlFactory.getInstance(); + List<ContextEntry> ceList = bCF.createCEListFromString(bPathString); + String busPath = getBusinessPathAsURIFromCEList(ceList); + + return Settings.getServerContextPathURI()+"/url/"+busPath; + } catch(Exception e) { + log.error("Error with business path: " + bPathString, e); + return null; + } + } + public String formatFromURI(String restPart) { try { restPart = URLDecoder.decode(restPart, "UTF8"); diff --git a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..866bf605f4b3d90cf8d44282dd7365c46082b908 --- /dev/null +++ b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java @@ -0,0 +1,60 @@ +/** + * <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 org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.navigation.SiteInstance; + +/** + * + * Description:<br> + * + * <P> + * Initial Date: 18 janv. 2012 <br> + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class SiteContextEntryControllerCreator implements ContextEntryControllerCreator { + private final Class<? extends SiteInstance> site; + + public SiteContextEntryControllerCreator(Class<? extends SiteInstance> site) { + this.site = site; + } + + public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return null; + } + + public String getSiteClassName(ContextEntry ce) { + return site.getName(); + } + + public String getTabName(ContextEntry ce) { + return null; + } + + @Override + public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + return true; + } +} diff --git a/src/main/java/org/olat/core/util/mail/manager/MailNotificationsHandler.java b/src/main/java/org/olat/core/util/mail/manager/MailNotificationsHandler.java index c49a871ce52c5e1fd5fd9e439e44ca8c2a28dba8..046ff6b81077a9c8d19d54c1cfad461bdf239ce8 100644 --- a/src/main/java/org/olat/core/util/mail/manager/MailNotificationsHandler.java +++ b/src/main/java/org/olat/core/util/mail/manager/MailNotificationsHandler.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Locale; import org.olat.core.gui.translator.Translator; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.LogDelegator; import org.olat.core.util.StringHelper; import org.olat.core.util.Util; @@ -97,7 +98,7 @@ public class MailNotificationsHandler extends LogDelegator implements Notificati for (DBMail mail : inbox) { String subject = mail.getSubject(); String businessPath = "[Inbox:" + mail.getKey() + "]"; - String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath); + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath); SubscriptionListItem subListItem = new SubscriptionListItem(subject, urlToSend, mail.getCreationDate(), "o_co_icon"); si.addSubscriptionListItem(subListItem); } diff --git a/src/main/java/org/olat/core/util/notifications/NotificationHelper.java b/src/main/java/org/olat/core/util/notifications/NotificationHelper.java index 7cb9b303c2a6603c50b08647f6b9f268e98a04c1..1324d1c36d24a75cf32c824aa68ffd9bb98dc4b6 100644 --- a/src/main/java/org/olat/core/util/notifications/NotificationHelper.java +++ b/src/main/java/org/olat/core/util/notifications/NotificationHelper.java @@ -93,45 +93,6 @@ public class NotificationHelper { return subToSubInfo; } - public static String getURLFromBusinessPathString(Publisher p, String bPathString){ - if(!StringHelper.containsNonWhitespace(bPathString)) { - log.error("Publisher without businesspath: " + p.getKey() + " resName:" + p.getResName() + " subidentifier:" + p.getSubidentifier() + " data:" + p.getData()); - return null;//TODO remove after the upgrade - } - - try { - BusinessControlFactory bCF = BusinessControlFactory.getInstance(); - List<ContextEntry> ceList = bCF.createCEListFromString(bPathString); - String busPath = getBusPathStringAsURIFromCEList(ceList); - - return Settings.getServerContextPathURI()+"/url/"+busPath; - } catch(Exception e) { - log.error("Error with publisher: " + p.getKey() + " resName:" + p.getResName() + " subidentifier:" + p.getSubidentifier() + " data:" + p.getData() + " businessPath:" + p.getBusinessPath(), e); - return null; - } - } - - public static String getBusPathStringAsURIFromCEList(List<ContextEntry> ceList){ - if(ceList == null || ceList.isEmpty()) return ""; - - StringBuilder retVal = new StringBuilder(); - //see code in JumpInManager, cannot be used, as it needs BusinessControl-Elements, not the path - for (ContextEntry contextEntry : ceList) { - String ceStr = contextEntry != null ? contextEntry.toString() : "NULL_ENTRY"; - if(ceStr.startsWith("[path")) { - //the %2F make a problem on browsers. - //make the change only for path which is generally used - //TODO: find a better method or a better separator as | - ceStr = ceStr.replace("%2F", "~~"); - } - ceStr = ceStr.replace(':', '/'); - ceStr = ceStr.replaceFirst("\\]", "/"); - ceStr= ceStr.replaceFirst("\\[", ""); - retVal.append(ceStr); - } - return retVal.substring(0, retVal.length()-1); - } - /** * returns "firstname lastname" or a translated "user unknown" for a given * identity diff --git a/src/main/java/org/olat/course/archiver/ArchiverMainController.java b/src/main/java/org/olat/course/archiver/ArchiverMainController.java index 4549c577d830e37cb6e67e346c3ab97303fe2649..d7571bfb380d19aefc5429e4c1848b2118c04fb0 100644 --- a/src/main/java/org/olat/course/archiver/ArchiverMainController.java +++ b/src/main/java/org/olat/course/archiver/ArchiverMainController.java @@ -260,7 +260,6 @@ public class ArchiverMainController extends MainLayoutBasicController { // inform only once if (!extensionLogged) { extensionLogged = true; - extm.inform(extensionPointMenu, anExt, "added menu entry (for locale " + locale.toString() + " '" + menuText + "'"); } } } diff --git a/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java b/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java index ace22b95c2afee58adc9217d69a81d4d0f6b6ae0..aca32be118ca72b4ccf62a2cfda54177b852f1df 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java +++ b/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java @@ -39,6 +39,7 @@ import org.olat.basesecurity.Constants; import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -381,7 +382,7 @@ public class AssessmentNotificationsHandler implements NotificationsHandler { String urlToSend = null; if(p.getBusinessPath() != null) { String businessPath = p.getBusinessPath() + "[assessmentTool:0][Identity:" + assessedIdentity.getKey() + "][CourseNode:" + test.getIdent() + "]"; - urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath); + urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath); } SubscriptionListItem subListItem = new SubscriptionListItem(desc, urlToSend, modDate, CSS_CLASS_USER_ICON); diff --git a/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java b/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java index cc418635fbba1f24af221f1fe075dc4b05725e88..a3013443d524f101e7538a6e4e286a1453d65ecc 100644 --- a/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java +++ b/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java @@ -31,7 +31,6 @@ import org.olat.core.helpers.Settings; import org.olat.core.id.UserConstants; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; -import org.olat.core.util.notifications.NotificationHelper; /** * @@ -69,7 +68,7 @@ public class SendMailFormatterForCourse implements MailFormatter { public String getBody(InfoMessage msg) { BusinessControlFactory bCF = BusinessControlFactory.getInstance(); List<ContextEntry> ceList = bCF.createCEListFromString(businessPath); - String busPath = NotificationHelper.getBusPathStringAsURIFromCEList(ceList); + String busPath = BusinessControlFactory.getInstance().getBusinessPathAsURIFromCEList(ceList); String author = msg.getAuthor().getUser().getProperty(UserConstants.FIRSTNAME, null) + " " + msg.getAuthor().getUser().getProperty(UserConstants.LASTNAME, null); String date = DateFormat.getDateInstance(DateFormat.MEDIUM, translator.getLocale()).format(msg.getCreationDate()); diff --git a/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java b/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java index 3e31c79683ded15a1aed3e0e6d72bc0b6d2b9968..8a46581080c1a6f962f96e90b40ffe016c7b01ad 100644 --- a/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java +++ b/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java @@ -38,6 +38,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.LogDelegator; import org.olat.core.logging.OLog; import org.olat.core.util.Util; @@ -99,7 +100,7 @@ public abstract class AbstractTaskNotificationHandler extends LogDelegator { Date modDate = fi.getLastModified(); String desc = translator.translate(getNotificationEntryKey(), new String[] { filePath, fullUserName }); - String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, p.getBusinessPath()); + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(p.getBusinessPath()); String iconCssClass = null; if (metaInfo != null) { diff --git a/src/main/java/org/olat/group/BusinessGroupModule.java b/src/main/java/org/olat/group/BusinessGroupModule.java index 7d459876b876a2de6d5fe9f676e1f528e5d65bb7..4a1e0a3d3c119bcd347359fad9227bdbc630d78b 100644 --- a/src/main/java/org/olat/group/BusinessGroupModule.java +++ b/src/main/java/org/olat/group/BusinessGroupModule.java @@ -22,6 +22,9 @@ package org.olat.group; import org.olat.NewControllerFactory; import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; +import org.olat.core.id.context.SiteContextEntryControllerCreator; +import org.olat.group.site.GroupsManagementSite; +import org.olat.group.site.GroupsSite; /** * Description:<br> @@ -49,6 +52,11 @@ public class BusinessGroupModule extends AbstractOLATModule { // Add controller factory extension point to launch groups NewControllerFactory.getInstance().addContextEntryControllerCreator(BusinessGroup.class.getSimpleName(), new BusinessGroupContextEntryControllerCreator()); + NewControllerFactory.getInstance().addContextEntryControllerCreator(GroupsSite.class.getSimpleName(), + new SiteContextEntryControllerCreator(GroupsSite.class)); + NewControllerFactory.getInstance().addContextEntryControllerCreator(GroupsManagementSite.class.getSimpleName(), + new SiteContextEntryControllerCreator(GroupsManagementSite.class)); + } /** diff --git a/src/main/java/org/olat/home/HomeCalendarController.java b/src/main/java/org/olat/home/HomeCalendarController.java index 86fc57b1e366e13874102d319ef20575f6164b0e..343ab005a2f929ccaaba5e897d1391be7de957d3 100644 --- a/src/main/java/org/olat/home/HomeCalendarController.java +++ b/src/main/java/org/olat/home/HomeCalendarController.java @@ -47,7 +47,10 @@ 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.Activateable; +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.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.UserSession; @@ -67,7 +70,7 @@ import org.olat.group.BusinessGroupManagerImpl; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; -public class HomeCalendarController extends BasicController implements Activateable, GenericEventListener { +public class HomeCalendarController extends BasicController implements Activateable, Activateable2, GenericEventListener { OLog log = Tracing.createLoggerFor(this.getClass()); @@ -105,6 +108,13 @@ public class HomeCalendarController extends BasicController implements Activatea calendarController.setFocus(cal.getTime()); } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries != null && !entries.isEmpty() && calendarController instanceof Activateable2) { + ((Activateable2)calendarController).activate(ureq, entries, state); + } + } + public static List<KalendarRenderWrapper> getListOfCalendarWrappers(UserRequest ureq, WindowControl wControl) { List<KalendarRenderWrapper> calendars = new ArrayList<KalendarRenderWrapper>(); diff --git a/src/main/java/org/olat/home/HomeModule.java b/src/main/java/org/olat/home/HomeModule.java new file mode 100644 index 0000000000000000000000000000000000000000..c5bf96d56521fb408484afa868f261f77659ed08 --- /dev/null +++ b/src/main/java/org/olat/home/HomeModule.java @@ -0,0 +1,65 @@ +/** + * <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.home; + +import org.olat.NewControllerFactory; +import org.olat.core.configuration.AbstractOLATModule; +import org.olat.core.configuration.PersistedProperties; +import org.olat.core.id.context.SiteContextEntryControllerCreator; +import org.olat.home.controllerCreators.GuestHomeCEControllerCreator; + +/** + * + * Description:<br> + * + * <P> + * Initial Date: 18 janv. 2012 <br> + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class HomeModule extends AbstractOLATModule { + + @Override + public void init() { + NewControllerFactory.getInstance().addContextEntryControllerCreator(HomeSite.class.getSimpleName(), + new SiteContextEntryControllerCreator(HomeSite.class)); + + NewControllerFactory.getInstance().addContextEntryControllerCreator("Guest", + new GuestHomeCEControllerCreator()); + + } + + @Override + protected void initDefaultProperties() { + // + } + + @Override + protected void initFromChangedProperties() { + // + } + + @Override + public void setPersistedProperties(PersistedProperties persistedProperties) { + this.moduleConfigProperties = persistedProperties; + } + +} diff --git a/src/main/java/org/olat/home/_spring/homeContext.xml b/src/main/java/org/olat/home/_spring/homeContext.xml index 42d34b7a8b79a666658359d0684fc065be7c0795..547edd99b3d8fb27782c94a857fabd8dadefd908 100644 --- a/src/main/java/org/olat/home/_spring/homeContext.xml +++ b/src/main/java/org/olat/home/_spring/homeContext.xml @@ -3,6 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> + + + <bean class="org.olat.home.HomeModule" init-method="init"/> <!-- The Default Home-tab (navigation-tree) Setting --> <!-- the "portal" (notifications + subscriptions + news ) --> diff --git a/src/main/java/org/olat/login/AuthBFWCParts.java b/src/main/java/org/olat/login/AuthBFWCParts.java index 8949a0adbfcb45bc3c660721400876485f1528a8..3f33befde14346f83b53ab6efbd12d88c807a988 100644 --- a/src/main/java/org/olat/login/AuthBFWCParts.java +++ b/src/main/java/org/olat/login/AuthBFWCParts.java @@ -123,7 +123,6 @@ public class AuthBFWCParts implements BaseFullWebappControllerParts { SiteDefinition sdef = (SiteDefinition) it_extsites.next(); SiteInstance si = sdef.createSite(ureq, wControl); sites.add(si); - extm.inform(extensionPointSites, anExt, "added sitedefinition " + sdef.getClass().getName()); } } } diff --git a/src/main/java/org/olat/login/GuestBFWCParts.java b/src/main/java/org/olat/login/GuestBFWCParts.java index 0bf744340a63985171f8493f404101a0a5b9cf5a..e2a58527eeb373f480a26dd7c8032c94b9f17ec2 100644 --- a/src/main/java/org/olat/login/GuestBFWCParts.java +++ b/src/main/java/org/olat/login/GuestBFWCParts.java @@ -136,7 +136,6 @@ public class GuestBFWCParts implements BaseFullWebappControllerParts { SiteDefinition sdef = (SiteDefinition) it_extsites.next(); SiteInstance si = sdef.createSite(ureq, wControl); sites.add(si); - extm.inform(extensionPointSites, anExt, "added sitedefinition " + sdef.getClass().getName()); } } } diff --git a/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java b/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java index c45dae0411401ff47ad103492c17f3ef5c968351..66c1625ebd0893c6cc4d194efb67947a8d506599 100644 --- a/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java +++ b/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java @@ -33,6 +33,7 @@ import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.gui.translator.Translator; import org.olat.core.gui.util.CSSHelper; import org.olat.core.id.Identity; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.Util; @@ -98,7 +99,7 @@ public class FileUploadNotificationHandler implements NotificationsHandler { Date modDate = element.getDate(); String desc = translator.translate("notifications.entry", new String[] { filename, NotificationHelper.getFormatedName(ident) }); - String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, p.getBusinessPath()); + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(p.getBusinessPath()); String cssClass = CSSHelper.createFiletypeIconCssClassFor(filename); subListItem = new SubscriptionListItem(desc, urlToSend, modDate, cssClass); diff --git a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java index b86d4cbab17a343d927644870f76ee25bd306628..b04894f60fea34ec69ed1aac5a8827aa03fd0e89 100644 --- a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java +++ b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java @@ -31,6 +31,7 @@ import java.util.Locale; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.LogDelegator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -103,7 +104,7 @@ public class ForumNotificationsHandler extends LogDelegator implements Notificat final String desc = translator.translate(descKey, new String[] { title, name }); String urlToSend = null; if(p.getBusinessPath() != null) { - urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessControlString + mInfo.getKey().toString() + "]"); + urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessControlString + mInfo.getKey().toString() + "]"); } SubscriptionListItem subListItem = new SubscriptionListItem(desc, urlToSend, modDate, ForumHelper.CSS_ICON_CLASS_MESSAGE); diff --git a/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java b/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java index 8fe0a26b21cfd7c04cb98d3f3155193d81625c16..d659461c30de52260dd1d8d732b35a970f320858 100644 --- a/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java +++ b/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java @@ -34,6 +34,7 @@ import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.LogDelegator; import org.olat.core.util.Util; import org.olat.core.util.notifications.NotificationHelper; @@ -143,7 +144,7 @@ public class WikiPageChangeOrCreateNotificationHandler extends LogDelegator impl String bControlString = businessControlString + element.getPageName() + "]"; String urlToSend = null; if(p.getBusinessPath() != null) { - urlToSend = NotificationHelper.getURLFromBusinessPathString(p, bControlString); + urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(bControlString); } // string[] gets filled into translation key by adding {0...n} to diff --git a/src/main/java/org/olat/notifications/NotificationNewsController.java b/src/main/java/org/olat/notifications/NotificationNewsController.java index cfa5cba8b2f70716f50b5db783fa6c371c281c1e..f16b85e179f70456a8b93c2984d1bf0a8734489c 100644 --- a/src/main/java/org/olat/notifications/NotificationNewsController.java +++ b/src/main/java/org/olat/notifications/NotificationNewsController.java @@ -164,7 +164,7 @@ class NotificationNewsController extends BasicController implements Activateable } /** - * Can set type and date of the controller: identifier in the ofrm of [type=Type:0][date=yyyymmdd:0] + * Can set type and date of the controller: identifier in the ofrm of [type=Type:0][date=yyyyMMdd:0] * @see org.olat.core.gui.control.generic.dtabs.Activateable#activate(org.olat.core.gui.UserRequest, java.lang.String) */ @Override diff --git a/src/main/java/org/olat/notifications/NotificationsManagerImpl.java b/src/main/java/org/olat/notifications/NotificationsManagerImpl.java index 2676ee44ae2761959f3e626a4e2bdc10dc98b176..70bb4acdfb5d625b9ff256fbecaf10514203e1c5 100644 --- a/src/main/java/org/olat/notifications/NotificationsManagerImpl.java +++ b/src/main/java/org/olat/notifications/NotificationsManagerImpl.java @@ -49,6 +49,7 @@ import org.olat.core.commons.persistence.DBQuery; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -1024,7 +1025,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us itemLink = subsInfo.getCustomUrl(); } if(itemLink == null && pub.getBusinessPath() != null) { - itemLink = NotificationHelper.getURLFromBusinessPathString(pub, pub.getBusinessPath()); + itemLink = BusinessControlFactory.getInstance().getURLFromBusinessPathString(pub.getBusinessPath()); } String description = subsInfo.getSpecificInfo(mimeTypeContent, locale); diff --git a/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java b/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java index d2c9d57b0b14e0108847220994c2571dc090657f..01f5efc053eb3022739b52d1b4c568f571b98e16 100644 --- a/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java +++ b/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java @@ -26,7 +26,6 @@ package org.olat.portal.calendar; import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -40,7 +39,6 @@ import org.olat.commons.calendar.CalendarUtils; import org.olat.commons.calendar.model.KalendarEvent; import org.olat.commons.calendar.ui.components.KalendarRenderWrapper; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.Windows; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; @@ -57,12 +55,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.DTabs; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.OLATRuntimeException; import org.olat.home.HomeCalendarController; -import org.olat.home.HomeSite; /** * @@ -184,11 +180,12 @@ public class CalendarPortletRunController extends BasicController { if (actionid.equals(CMD_LAUNCH)) { int rowid = te.getRowId(); KalendarEvent kalendarEvent = (KalendarEvent)((DefaultTableDataModel)tableController.getTableDataModel()).getObject(rowid); - Date startDate = kalendarEvent.getBegin(); - String activationCmd = "cal." + new SimpleDateFormat("yyyy.MM.dd").format(startDate); - DTabs dts = (DTabs)Windows.getWindows(ureq).getWindow(ureq).getAttribute("DTabs"); - //was brasato:: getWindowControl().getDTabs().activateStatic(ureq, HomeSite.class.getName(), activationCmd); - dts.activateStatic(ureq, HomeSite.class.getName(), activationCmd); + String resourceUrl = "[HomeSite:" + ureq.getIdentity().getKey() + "][calendar:0]" + + BusinessControlFactory.getInstance().getContextEntryStringForDate(kalendarEvent.getBegin()); + BusinessControl bc = BusinessControlFactory.getInstance().createFromString(resourceUrl); + WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl()); + NewControllerFactory.getInstance().launch(ureq, bwControl); + } } } diff --git a/src/main/java/org/olat/repository/RepositoryModule.java b/src/main/java/org/olat/repository/RepositoryModule.java index 7501f575ce7d97150b4c829efa4b86fe7dbb31b7..9d7fb9bf8962c58f0203019700e97c597fbdc686 100644 --- a/src/main/java/org/olat/repository/RepositoryModule.java +++ b/src/main/java/org/olat/repository/RepositoryModule.java @@ -23,6 +23,8 @@ import org.olat.NewControllerFactory; import org.olat.catalog.CatalogEntry; import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; +import org.olat.core.id.context.SiteContextEntryControllerCreator; +import org.olat.repository.site.RepositorySite; /** * Description:<br> @@ -45,6 +47,10 @@ public class RepositoryModule extends AbstractOLATModule { NewControllerFactory.getInstance().addContextEntryControllerCreator(CatalogEntry.class.getSimpleName(), new CatalogContextEntryControllerCreator()); + + NewControllerFactory.getInstance().addContextEntryControllerCreator(RepositorySite.class.getSimpleName(), + new SiteContextEntryControllerCreator(RepositorySite.class)); + } /** diff --git a/src/main/java/org/olat/user/UserModule.java b/src/main/java/org/olat/user/UserModule.java index 1d8503125b3067c244b91bafe137e45c519745f2..4a041715c6012846722ef1664510a2a77bde855a 100644 --- a/src/main/java/org/olat/user/UserModule.java +++ b/src/main/java/org/olat/user/UserModule.java @@ -32,6 +32,8 @@ import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import org.olat.NewControllerFactory; +import org.olat.admin.site.UserAdminSite; +import org.olat.admin.user.UserAdminContextEntryControllerCreator; import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.Constants; @@ -186,6 +188,11 @@ public class UserModule extends AbstractOLATModule { // Add controller factory extension point to launch user profile controller NewControllerFactory.getInstance().addContextEntryControllerCreator(Identity.class.getSimpleName(), new IdentityContextEntryControllerCreator()); + NewControllerFactory.getInstance().addContextEntryControllerCreator(User.class.getSimpleName(), + new UserAdminContextEntryControllerCreator()); + NewControllerFactory.getInstance().addContextEntryControllerCreator(UserAdminSite.class.getSimpleName(), + new UserAdminContextEntryControllerCreator()); + // Append AfterLoginControllers if any configured if (afterLoginConfig != null) { diff --git a/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java b/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java index 6fbc924700c386f15c0a7f4507a2d1765204aea6..5b885fee89c4523a9a4b4ca5accb905d2618c37f 100644 --- a/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java +++ b/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java @@ -26,6 +26,7 @@ import java.util.Locale; import org.olat.core.gui.translator.Translator; import org.olat.core.gui.util.CSSHelper; import org.olat.core.id.Identity; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.Util; @@ -72,7 +73,7 @@ public class NewUsersNotificationHandler implements NotificationsHandler { for (Identity newUser : identities) { String desc = translator.translate("notifications.entry", new String[] { NotificationHelper.getFormatedName(newUser) }); String businessPath = "[Identity:" + newUser.getKey() + "]"; - String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath); + String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath); Date modDate = newUser.getCreationDate(); subListItem = new SubscriptionListItem(desc, urlToSend, modDate, CSSHelper.CSS_CLASS_USER); si.addSubscriptionListItem(subListItem);