diff --git a/config/alfresco/messages/webclient.properties b/config/alfresco/messages/webclient.properties
index 7c58bd50c5..6266c85a09 100644
--- a/config/alfresco/messages/webclient.properties
+++ b/config/alfresco/messages/webclient.properties
@@ -932,6 +932,7 @@ old_password=Old Password
new_password=New Password
edit_user_details=Edit User Details
edit_user_details_description=Use this view to change your user details and email address
+start_location=Start Location
# Delete Space Dialog messages
select_delete_operation=What do you want to delete?
diff --git a/config/alfresco/web-client-config.xml b/config/alfresco/web-client-config.xml
index 5c396fd690..a3c3146465 100644
--- a/config/alfresco/web-client-config.xml
+++ b/config/alfresco/web-client-config.xml
@@ -53,8 +53,8 @@
Consumer
-
- userhome
+
+ myalfrescohttp://www.alfresco.org/help/webclient
@@ -170,7 +170,7 @@
-
+
@@ -186,6 +186,7 @@
+
@@ -203,6 +204,8 @@
+
+ false
diff --git a/source/java/org/alfresco/web/app/servlet/BaseServlet.java b/source/java/org/alfresco/web/app/servlet/BaseServlet.java
index 90b4c7c687..42dde0bf53 100644
--- a/source/java/org/alfresco/web/app/servlet/BaseServlet.java
+++ b/source/java/org/alfresco/web/app/servlet/BaseServlet.java
@@ -77,7 +77,6 @@ public abstract class BaseServlet extends HttpServlet
validRedirectJSPs.add("/jsp/forums/forums.jsp");
validRedirectJSPs.add("/jsp/users/users.jsp");
validRedirectJSPs.add("/jsp/trashcan/trash-list.jsp");
- validRedirectJSPs.add("/jsp/dashboards/container.jsp");
}
private static Log logger = LogFactory.getLog(BaseServlet.class);
@@ -156,10 +155,15 @@ public abstract class BaseServlet extends HttpServlet
throws IOException
{
// authentication failed - so end servlet execution and redirect to login page
- // also save the full requested URL so the login page knows where to redirect too later
res.sendRedirect(req.getContextPath() + FACES_SERVLET + Application.getLoginPage(sc));
+
+ // save the full requested URL so the login page knows where to redirect too later
String uri = req.getRequestURI();
- String url = uri + (req.getQueryString() != null ? ("?" + req.getQueryString()) : "");
+ String url = uri;
+ if (req.getQueryString() != null && req.getQueryString().length() != 0)
+ {
+ url += "?" + req.getQueryString();
+ }
if (uri.indexOf(req.getContextPath() + FACES_SERVLET) != -1)
{
// if we find a JSF servlet reference in the URI then we need to check if the rest of the
diff --git a/source/java/org/alfresco/web/bean/LoginBean.java b/source/java/org/alfresco/web/bean/LoginBean.java
index 17274e42b9..406f26b039 100644
--- a/source/java/org/alfresco/web/bean/LoginBean.java
+++ b/source/java/org/alfresco/web/bean/LoginBean.java
@@ -91,13 +91,21 @@ public class LoginBean
}
/**
- * @param navigator The NavigationBean to set.
+ * @param navigator The NavigationBean to set.
*/
public void setNavigator(NavigationBean navigator)
{
this.navigator = navigator;
}
+ /**
+ * @param preferences The UserPreferencesBean to set
+ */
+ public void setUserPreferencesBean(UserPreferencesBean preferences)
+ {
+ this.preferences = preferences;
+ }
+
/**
* @return true if the default Alfresco authentication process is being used, else false
* if an external authorisation mechanism is present.
@@ -329,7 +337,7 @@ public class LoginBean
else
{
// special case to handle jump to My Alfresco page initially
- String location = Application.getClientConfig(FacesContext.getCurrentInstance()).getInitialLocation();
+ String location = this.preferences.getStartLocation();
if (NavigationBean.LOCATION_MYALFRESCO.equals(location))
{
return "myalfresco";
@@ -451,4 +459,7 @@ public class LoginBean
/** The NavigationBean bean reference */
protected NavigationBean navigator;
+
+ /** The user preferences bean reference */
+ protected UserPreferencesBean preferences;
}
diff --git a/source/java/org/alfresco/web/bean/NavigationBean.java b/source/java/org/alfresco/web/bean/NavigationBean.java
index d426a07732..e536007f83 100644
--- a/source/java/org/alfresco/web/bean/NavigationBean.java
+++ b/source/java/org/alfresco/web/bean/NavigationBean.java
@@ -126,6 +126,14 @@ public class NavigationBean
this.contentDiskDriver = contentDiskDriver;
}
+ /**
+ * @param preferences The UserPreferencesBean to set
+ */
+ public void setUserPreferencesBean(UserPreferencesBean preferences)
+ {
+ this.preferences = preferences;
+ }
+
/**
* @return the User object representing the current instance for this user
*/
@@ -507,13 +515,8 @@ public class NavigationBean
{
if (this.location == null)
{
- // get the initial location from the client config
- String initialLocation = clientConfig.getInitialLocation();
- if (initialLocation == null || initialLocation.length() == 0)
- {
- initialLocation = LOCATION_HOME;
- }
- processToolbarLocation(initialLocation, false);
+ // get the initial location from the user preferences
+ processToolbarLocation(this.preferences.getStartLocation(), false);
}
return this.location;
@@ -798,10 +801,10 @@ public class NavigationBean
private static Logger s_logger = Logger.getLogger(NavigationBean.class);
/** constant values used by the toolbar location modelist control */
- static final String LOCATION_COMPANY = "companyhome";
- static final String LOCATION_HOME = "userhome";
- static final String LOCATION_GUEST = "guesthome";
- static final String LOCATION_MYALFRESCO = "myalfresco";
+ public static final String LOCATION_COMPANY = "companyhome";
+ public static final String LOCATION_HOME = "userhome";
+ public static final String LOCATION_GUEST = "guesthome";
+ public static final String LOCATION_MYALFRESCO = "myalfresco";
private static final String MSG_MYALFRESCO = "my_alfresco";
@@ -828,6 +831,9 @@ public class NavigationBean
/** Client configuration object */
protected ClientConfigElement clientConfig = null;
+ /** The user preferences bean reference */
+ protected UserPreferencesBean preferences;
+
/** Cached path to our CIFS server and top level node DIR */
private String cifsServerPath;
diff --git a/source/java/org/alfresco/web/bean/UserPreferencesBean.java b/source/java/org/alfresco/web/bean/UserPreferencesBean.java
new file mode 100644
index 0000000000..692e3dd7e3
--- /dev/null
+++ b/source/java/org/alfresco/web/bean/UserPreferencesBean.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2005 Alfresco, Inc.
+ *
+ * Licensed under the Mozilla Public License version 1.1
+ * with a permitted attribution clause. You may obtain a
+ * copy of the License at
+ *
+ * http://www.alfresco.org/legal/license.txt
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the
+ * License.
+ */
+package org.alfresco.web.bean;
+
+import java.util.ResourceBundle;
+
+import javax.faces.context.FacesContext;
+import javax.faces.model.SelectItem;
+
+import org.alfresco.web.app.Application;
+import org.alfresco.web.bean.repository.PreferencesService;
+
+/**
+ * Simple bean backing the user preferences settings.
+ *
+ * @author Kevin Roast
+ */
+public class UserPreferencesBean
+{
+ private static final String PREF_STARTLOCATION = "start-location";
+ private static final String MSG_MYALFRESCO = "my_alfresco";
+ private static final String MSG_MYHOME = "my_home";
+ private static final String MSG_COMPANYHOME = "company_home";
+ private static final String MSG_GUESTHOME = "guest_home";
+
+
+ public String getStartLocation()
+ {
+ String location = (String)PreferencesService.getPreferences().getValue(PREF_STARTLOCATION);
+ if (location == null)
+ {
+ // default to value from client config
+ location = Application.getClientConfig(FacesContext.getCurrentInstance()).getInitialLocation();
+ }
+ return location;
+ }
+
+ public void setStartLocation(String location)
+ {
+ PreferencesService.getPreferences().setValue(PREF_STARTLOCATION, location);
+ }
+
+ public SelectItem[] getStartLocations()
+ {
+ ResourceBundle msg = Application.getBundle(FacesContext.getCurrentInstance());
+ return new SelectItem[] {
+ new SelectItem(NavigationBean.LOCATION_MYALFRESCO, msg.getString(MSG_MYALFRESCO)),
+ new SelectItem(NavigationBean.LOCATION_HOME, msg.getString(MSG_MYHOME)),
+ new SelectItem(NavigationBean.LOCATION_COMPANY, msg.getString(MSG_COMPANYHOME)),
+ new SelectItem(NavigationBean.LOCATION_GUEST, msg.getString(MSG_GUESTHOME))};
+ }
+}
diff --git a/source/java/org/alfresco/web/bean/dashboard/DashboardWizard.java b/source/java/org/alfresco/web/bean/dashboard/DashboardWizard.java
index 615570d480..4ff8d46793 100644
--- a/source/java/org/alfresco/web/bean/dashboard/DashboardWizard.java
+++ b/source/java/org/alfresco/web/bean/dashboard/DashboardWizard.java
@@ -125,6 +125,14 @@ public class DashboardWizard extends BaseWizardBean
// ------------------------------------------------------------------------------
// Dashboard Wizard bean getters
+ /**
+ * @return true to allow the Guest user to configure the dashboard, false otherwise
+ */
+ public boolean getAllowGuestConfig()
+ {
+ return DashboardManager.getDashboardConfig().getAllowGuestConfig();
+ }
+
/**
* @return The currently selected layout ID - used by the Dynamic Description component
*/
diff --git a/source/java/org/alfresco/web/config/ClientConfigElement.java b/source/java/org/alfresco/web/config/ClientConfigElement.java
index 0f6a3e216e..b151b3b0fe 100644
--- a/source/java/org/alfresco/web/config/ClientConfigElement.java
+++ b/source/java/org/alfresco/web/config/ClientConfigElement.java
@@ -40,7 +40,7 @@ public class ClientConfigElement extends ConfigElementAdapter
private String editLinkType = "http";
private String homeSpacePermission = null;
private boolean ajaxEnabled = false;
- private String initialLocation = null;
+ private String initialLocation = "myalfresco";
/**
* Default Constructor
diff --git a/source/java/org/alfresco/web/config/DashboardsConfigElement.java b/source/java/org/alfresco/web/config/DashboardsConfigElement.java
index 83ed1a8039..d5e19db865 100644
--- a/source/java/org/alfresco/web/config/DashboardsConfigElement.java
+++ b/source/java/org/alfresco/web/config/DashboardsConfigElement.java
@@ -37,6 +37,7 @@ public class DashboardsConfigElement extends ConfigElementAdapter
private Map layoutDefs = new LinkedHashMap(4, 1.0f);
private Map dashletDefs = new LinkedHashMap(8, 1.0f);
+ private boolean allowGuestConfig = false;
/**
* Default constructor
@@ -77,9 +78,24 @@ public class DashboardsConfigElement extends ConfigElementAdapter
combinedElement.layoutDefs.putAll(this.layoutDefs);
combinedElement.layoutDefs.putAll(newElement.layoutDefs);
+ if (newElement.allowGuestConfig != combinedElement.allowGuestConfig)
+ {
+ combinedElement.allowGuestConfig = newElement.allowGuestConfig;
+ }
+
return combinedElement;
}
+ /*package*/ void setAllowGuestConfig(boolean allow)
+ {
+ this.allowGuestConfig = allow;
+ }
+
+ public boolean getAllowGuestConfig()
+ {
+ return this.allowGuestConfig;
+ }
+
/*package*/ void addLayoutDefinition(LayoutDefinition def)
{
this.layoutDefs.put(def.Id, def);
diff --git a/source/java/org/alfresco/web/config/DashboardsElementReader.java b/source/java/org/alfresco/web/config/DashboardsElementReader.java
index e532ec8486..e599251f71 100644
--- a/source/java/org/alfresco/web/config/DashboardsElementReader.java
+++ b/source/java/org/alfresco/web/config/DashboardsElementReader.java
@@ -37,6 +37,7 @@ public class DashboardsElementReader implements ConfigElementReader
public static final String ELEMENT_LAYOUT = "layout";
public static final String ELEMENT_DASHLETS = "dashlets";
public static final String ELEMENT_DASHLET = "dashlet";
+ public static final String ELEMENT_GUESTCONFIG = "allow-guest-config";
public static final String ATTR_ID = "id";
public static final String ATTR_COLUMNS = "columns";
public static final String ATTR_COLUMNLENGTH = "column-length";
@@ -85,6 +86,13 @@ public class DashboardsElementReader implements ConfigElementReader
configElement.addDashletDefinition(dashletDef);
}
}
+
+ Element guestConfigElement = element.element(ELEMENT_GUESTCONFIG);
+ if (guestConfigElement != null)
+ {
+ boolean allow = Boolean.parseBoolean(guestConfigElement.getTextTrim());
+ configElement.setAllowGuestConfig(allow);
+ }
}
return configElement;
diff --git a/source/web/WEB-INF/faces-config-beans.xml b/source/web/WEB-INF/faces-config-beans.xml
index e342a8fd21..c4a2a92530 100644
--- a/source/web/WEB-INF/faces-config-beans.xml
+++ b/source/web/WEB-INF/faces-config-beans.xml
@@ -31,6 +31,10 @@
browseBean#{BrowseBean}
+
+ userPreferencesBean
+ #{UserPreferencesBean}
+
@@ -60,6 +64,10 @@
ruleService#{RuleService}
+
+ userPreferencesBean
+ #{UserPreferencesBean}
+
@@ -1993,6 +2001,15 @@
+
+
+ The bean that backs up the User Preferences page
+
+ UserPreferencesBean
+ org.alfresco.web.bean.UserPreferencesBean
+ session
+
+
diff --git a/source/web/index.jsp b/source/web/index.jsp
index 8916281a16..699051315b 100644
--- a/source/web/index.jsp
+++ b/source/web/index.jsp
@@ -1,21 +1,51 @@
<%--
- Copyright (C) 2005 Alfresco, Inc.
-
- Licensed under the Mozilla Public License version 1.1
- with a permitted attribution clause. You may obtain a
- copy of the License at
-
- http://www.alfresco.org/legal/license.txt
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- either express or implied. See the License for the specific
- language governing permissions and limitations under the
- License.
---%>
-
-<%-- redirect to the web application's start page --%>
-<%
-response.sendRedirect(request.getContextPath() + "/faces/jsp/browse/browse.jsp");
-%>
\ No newline at end of file
+Copyright (C) 2005 Alfresco, Inc.
+
+Licensed under the Mozilla Public License version 1.1
+with a permitted attribution clause. You may obtain a
+copy of the License at
+
+http://www.alfresco.org/legal/license.txt
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+either express or implied. See the License for the specific
+language governing permissions and limitations under the
+License.
+--%>
+
+<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %>
+<%@ page import="org.alfresco.config.ConfigService" %>
+<%@ page import="org.alfresco.web.app.servlet.AuthenticationHelper" %>
+<%@ page import="org.alfresco.web.bean.NavigationBean" %>
+<%@ page import="org.alfresco.web.bean.repository.User" %>
+<%@ page import="org.alfresco.web.bean.repository.PreferencesService" %>
+<%@ page import="org.alfresco.web.config.ClientConfigElement" %>
+
+<%-- redirect to the web application's appropriate start page --%>
+<%
+// get the start location as configured by the web-client config
+ConfigService configService = (ConfigService)WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext()).getBean("webClientConfigService");
+ClientConfigElement configElement = (ClientConfigElement)configService.getGlobalConfig().getConfigElement("client");
+String location = configElement.getInitialLocation();
+
+// override with the users preference if they have one
+User user = (User)session.getAttribute(AuthenticationHelper.AUTHENTICATION_USER);
+if (user != null)
+{
+ String preference = (String)PreferencesService.getPreferences(user).getValue("start-location");
+ if (preference != null)
+ {
+ location = preference;
+ }
+}
+if (NavigationBean.LOCATION_MYALFRESCO.equals(location))
+{
+ response.sendRedirect(request.getContextPath() + "/faces/jsp/dashboards/container.jsp");
+}
+else
+{
+ response.sendRedirect(request.getContextPath() + "/faces/jsp/browse/browse.jsp");
+}
+%>
diff --git a/source/web/jsp/dashboards/container.jsp b/source/web/jsp/dashboards/container.jsp
index adc53b82af..8a1e21eef4 100644
--- a/source/web/jsp/dashboards/container.jsp
+++ b/source/web/jsp/dashboards/container.jsp
@@ -74,7 +74,7 @@