diff --git a/config/alfresco/messages/webclient.properties b/config/alfresco/messages/webclient.properties index d30001592..082839847 100644 --- a/config/alfresco/messages/webclient.properties +++ b/config/alfresco/messages/webclient.properties @@ -843,6 +843,19 @@ recovery_report_success=The following items were recovered successfully recovery_report_failed=The following items failed to recover recovery_report_reason=Failure Reason +# My Alfresco messages +my_alfresco=My Alfresco +title_user_console=User Options +user_console=User Options +user_console_info=User Options +user_console_description=Use this page to change your options and settings +my_details=My Details +general_pref=General Preferences +change_my_password_description=Use this view to change your password +change_my_password_instructions=Enter your new password. +old_password=Old Password +new_password=New Password + # Admin Console messages title_admin_console=Administration Console admin_console=Administration Console diff --git a/config/alfresco/web-client-config.xml b/config/alfresco/web-client-config.xml index 552561aba..b771e92be 100644 --- a/config/alfresco/web-client-config.xml +++ b/config/alfresco/web-client-config.xml @@ -42,9 +42,8 @@ false - - -1 - + + -1 diff --git a/source/java/org/alfresco/web/bean/UserShortcutsBean.java b/source/java/org/alfresco/web/bean/UserShortcutsBean.java index 7934624a1..b4a04080a 100644 --- a/source/java/org/alfresco/web/bean/UserShortcutsBean.java +++ b/source/java/org/alfresco/web/bean/UserShortcutsBean.java @@ -34,10 +34,9 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QName; import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Node; +import org.alfresco.web.bean.repository.PreferencesService; import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.ui.common.Utils; import org.alfresco.web.ui.common.component.UIActionLink; @@ -65,7 +64,7 @@ public class UserShortcutsBean /** List of shortcut nodes */ private List shortcuts = null; - private QName QNAME_SHORTCUTS = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "shortcuts"); + private String PREF_SHORTCUTS = "shortcuts"; // ------------------------------------------------------------------------------ @@ -113,8 +112,7 @@ public class UserShortcutsBean tx.begin(); // get the shortcuts from the preferences for this user - prefRef = getShortcutsNodeRef(); - shortcuts = (List)this.nodeService.getProperty(prefRef, QNAME_SHORTCUTS); + shortcuts = (List)PreferencesService.getPreferences(context).getValue(PREF_SHORTCUTS); if (shortcuts != null) { // each shortcut node ID is persisted as a list item in a well known property @@ -184,7 +182,7 @@ public class UserShortcutsBean { shortcuts.add(this.shortcuts.get(i).getId()); } - this.nodeService.setProperty(prefRef, QNAME_SHORTCUTS, (Serializable)shortcuts); + PreferencesService.getPreferences().setValue(PREF_SHORTCUTS, (Serializable)shortcuts); } catch (Exception err) { @@ -246,14 +244,13 @@ public class UserShortcutsBean tx = Repository.getUserTransaction(context); tx.begin(); - NodeRef prefRef = getShortcutsNodeRef(); - List shortcuts = (List)this.nodeService.getProperty(prefRef, QNAME_SHORTCUTS); + List shortcuts = (List)PreferencesService.getPreferences(context).getValue(PREF_SHORTCUTS); if (shortcuts == null) { shortcuts = new ArrayList(1); } shortcuts.add(node.getNodeRef().getId()); - this.nodeService.setProperty(prefRef, QNAME_SHORTCUTS, (Serializable)shortcuts); + PreferencesService.getPreferences(context).setValue(PREF_SHORTCUTS, (Serializable)shortcuts); // commit the transaction tx.commit(); @@ -280,14 +277,6 @@ public class UserShortcutsBean } } - /** - * Get the node we need to store our user preferences - */ - private NodeRef getShortcutsNodeRef() - { - return Application.getCurrentUser(FacesContext.getCurrentInstance()).getUserPreferencesRef(); - } - /** * Action handler bound to the user shortcuts Shelf component called when a node is removed */ @@ -303,13 +292,12 @@ public class UserShortcutsBean tx = Repository.getUserTransaction(context); tx.begin(); - NodeRef prefRef = getShortcutsNodeRef(); - List shortcuts = (List)this.nodeService.getProperty(prefRef, QNAME_SHORTCUTS); + List shortcuts = (List)PreferencesService.getPreferences(context).getValue(PREF_SHORTCUTS); if (shortcuts != null && shortcuts.size() > shortcutEvent.Index) { // remove the shortcut from the saved list and persist back shortcuts.remove(shortcutEvent.Index); - this.nodeService.setProperty(prefRef, QNAME_SHORTCUTS, (Serializable)shortcuts); + PreferencesService.getPreferences(context).setValue(PREF_SHORTCUTS, (Serializable)shortcuts); // commit the transaction tx.commit(); @@ -380,13 +368,12 @@ public class UserShortcutsBean tx = Repository.getUserTransaction(context); tx.begin(); - NodeRef prefRef = getShortcutsNodeRef(); - List shortcuts = (List)this.nodeService.getProperty(prefRef, QNAME_SHORTCUTS); + List shortcuts = (List)PreferencesService.getPreferences(context).getValue(PREF_SHORTCUTS); if (shortcuts != null && shortcuts.size() > shortcutEvent.Index) { // remove the shortcut from the saved list and persist back shortcuts.remove(shortcutEvent.Index); - this.nodeService.setProperty(prefRef, QNAME_SHORTCUTS, (Serializable)shortcuts); + PreferencesService.getPreferences(context).setValue(PREF_SHORTCUTS, (Serializable)shortcuts); // commit the transaction tx.commit(); diff --git a/source/java/org/alfresco/web/bean/repository/Preferences.java b/source/java/org/alfresco/web/bean/repository/Preferences.java new file mode 100644 index 000000000..71ad18778 --- /dev/null +++ b/source/java/org/alfresco/web/bean/repository/Preferences.java @@ -0,0 +1,99 @@ +/* + * 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.repository; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import javax.faces.context.FacesContext; + +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; + +/** + * Wraps the notion of preferences and settings for a User. + * Caches values until they are overwritten with a new value. + * + * @author Kevin Roast + */ +public final class Preferences +{ + private NodeRef preferencesRef; + private NodeService nodeService; + private Map cache = new HashMap(16, 1.0f); + + /** + * Package level constructor + */ + Preferences(NodeRef prefRef) + { + if (prefRef == null) + { + throw new IllegalArgumentException("Preferences NodeRef cannot be null."); + } + this.preferencesRef = prefRef; + } + + /** + * Get a serialized preferences value. + * + * @param name Name of the value to retrieve. + * + * @return The value or null if not found/set. + */ + public Serializable getValue(String name) + { + Serializable value = this.cache.get(name); + if (value == null) + { + QName qname = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, name); + value = getNodeService().getProperty(this.preferencesRef, qname); + this.cache.put(name, value); + } + return value; + } + + /** + * Set a serialized preference value. + * + * @param name Name of the value to set. + * @param value Value to set. + */ + public void setValue(String name, Serializable value) + { + QName qname = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, name); + // persist the property to the repo + getNodeService().setProperty(this.preferencesRef, qname, value); + // update the cache + this.cache.put(name, value); + } + + /** + * @return the NodeService instance. + */ + private NodeService getNodeService() + { + if (this.nodeService == null) + { + this.nodeService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getNodeService(); + } + return this.nodeService; + } +} diff --git a/source/java/org/alfresco/web/bean/repository/PreferencesService.java b/source/java/org/alfresco/web/bean/repository/PreferencesService.java new file mode 100644 index 000000000..84796a9bd --- /dev/null +++ b/source/java/org/alfresco/web/bean/repository/PreferencesService.java @@ -0,0 +1,63 @@ +/* + * 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.repository; + +import javax.faces.context.FacesContext; + +import org.alfresco.web.app.Application; + +/** + * Simple client service to retrieve the Preferences object for the current User. + * + * @author Kevin Roast + */ +public final class PreferencesService +{ + /** + * Private constructor + */ + private PreferencesService() + { + } + + /** + * @return The Preferences for the current User instance. + */ + public static Preferences getPreferences() + { + return getPreferences(FacesContext.getCurrentInstance()); + } + + /** + * @param fc FacesContext + * @return The Preferences for the current User instance. + */ + public static Preferences getPreferences(FacesContext fc) + { + User user = Application.getCurrentUser(fc); + return getPreferences(user); + } + + /** + * @param user User instance + * @return The Preferences for the current User instance. + */ + public static Preferences getPreferences(User user) + { + return user.getPreferences(); + } +} diff --git a/source/java/org/alfresco/web/bean/repository/User.java b/source/java/org/alfresco/web/bean/repository/User.java index c6f794649..cfcb58a2b 100644 --- a/source/java/org/alfresco/web/bean/repository/User.java +++ b/source/java/org/alfresco/web/bean/repository/User.java @@ -45,8 +45,7 @@ public final class User private String fullName = null; private Boolean administrator = null; - /** cached ref to our user preferences node */ - private NodeRef preferencesFolderRef = null; + private Preferences preferences = null; /** * Constructor @@ -139,63 +138,70 @@ public final class User return administrator; } + /** + * @return The Preferences for the User + */ + Preferences getPreferences() + { + if (this.preferences == null) + { + this.preferences = new Preferences(getUserPreferencesRef()); + } + return this.preferences; + } + /** * Get or create the node used to store user preferences. * Utilises the 'configurable' aspect on the Person linked to this user. */ - public synchronized NodeRef getUserPreferencesRef() + synchronized NodeRef getUserPreferencesRef() { - if (this.preferencesFolderRef == null) + FacesContext fc = FacesContext.getCurrentInstance(); + ServiceRegistry registry = Repository.getServiceRegistry(fc); + NodeService nodeService = registry.getNodeService(); + SearchService searchService = registry.getSearchService(); + NamespaceService namespaceService = registry.getNamespaceService(); + ConfigurableService configurableService = Repository.getConfigurableService(fc); + + NodeRef person = Application.getCurrentUser(fc).getPerson(); + if (nodeService.hasAspect(person, ContentModel.ASPECT_CONFIGURABLE) == false) { - FacesContext fc = FacesContext.getCurrentInstance(); - ServiceRegistry registry = Repository.getServiceRegistry(fc); - NodeService nodeService = registry.getNodeService(); - SearchService searchService = registry.getSearchService(); - NamespaceService namespaceService = registry.getNamespaceService(); - ConfigurableService configurableService = Repository.getConfigurableService(fc); - - NodeRef person = Application.getCurrentUser(fc).getPerson(); - if (nodeService.hasAspect(person, ContentModel.ASPECT_CONFIGURABLE) == false) - { - // create the configuration folder for this Person node - configurableService.makeConfigurable(person); - } - - // target of the assoc is the configurations folder ref - NodeRef configRef = configurableService.getConfigurationFolder(person); - if (configRef == null) - { - throw new IllegalStateException("Unable to find associated 'configurations' folder for node: " + person); - } - - String xpath = NamespaceService.APP_MODEL_PREFIX + ":" + "preferences"; - List nodes = searchService.selectNodes( - configRef, - xpath, - null, - namespaceService, - false); - - NodeRef prefRef; - if (nodes.size() == 1) - { - prefRef = nodes.get(0); - } - else - { - // create the preferences Node for this user - ChildAssociationRef childRef = nodeService.createNode( - configRef, - ContentModel.ASSOC_CONTAINS, - QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "preferences"), - ContentModel.TYPE_CMOBJECT); - - prefRef = childRef.getChildRef(); - } - - this.preferencesFolderRef = prefRef; + // create the configuration folder for this Person node + configurableService.makeConfigurable(person); } - return this.preferencesFolderRef; + // target of the assoc is the configurations folder ref + NodeRef configRef = configurableService.getConfigurationFolder(person); + if (configRef == null) + { + throw new IllegalStateException("Unable to find associated 'configurations' folder for node: " + person); + } + + String xpath = NamespaceService.APP_MODEL_PREFIX + ":" + "preferences"; + List nodes = searchService.selectNodes( + configRef, + xpath, + null, + namespaceService, + false); + + NodeRef prefRef; + if (nodes.size() == 1) + { + prefRef = nodes.get(0); + } + else + { + // create the preferences Node for this user + ChildAssociationRef childRef = nodeService.createNode( + configRef, + ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "preferences"), + ContentModel.TYPE_CMOBJECT); + + prefRef = childRef.getChildRef(); + } + + return prefRef; } } diff --git a/source/java/org/alfresco/web/bean/users/UsersBean.java b/source/java/org/alfresco/web/bean/users/UsersBean.java index e6f906cfc..83efa06ab 100644 --- a/source/java/org/alfresco/web/bean/users/UsersBean.java +++ b/source/java/org/alfresco/web/bean/users/UsersBean.java @@ -59,6 +59,7 @@ public class UsersBean implements IContextListener private static final String ERROR_USER_DELETE = "error_delete_user_object"; private static final String DEFAULT_OUTCOME = "manageUsers"; + private static final String DIALOG_CLOSE = "dialog:close"; /** NodeService bean reference */ protected NodeService nodeService; @@ -81,6 +82,7 @@ public class UsersBean implements IContextListener private List users = Collections.emptyList(); private String password = null; + private String oldPassword = null; private String confirm = null; private String searchCriteria = null; @@ -208,6 +210,22 @@ public class UsersBean implements IContextListener { this.password = password; } + + /** + * @return Returns the old password. + */ + public String getOldPassword() + { + return this.oldPassword; + } + + /** + * @param oldPassword The old password to set. + */ + public void setOldPassword(String oldPassword) + { + this.oldPassword = oldPassword; + } /** * @return Returns the person context. @@ -313,7 +331,7 @@ public class UsersBean implements IContextListener .getCurrentInstance(), ERROR_DELETE), e.getMessage()), e); } - return DEFAULT_OUTCOME; + return DIALOG_CLOSE; } /** @@ -321,7 +339,7 @@ public class UsersBean implements IContextListener */ public String changePasswordOK() { - String outcome = DEFAULT_OUTCOME; + String outcome = DIALOG_CLOSE; if (this.password != null && this.confirm != null && this.password.equals(this.confirm)) { @@ -346,6 +364,39 @@ public class UsersBean implements IContextListener return outcome; } + + /** + * Action handler called for OK button press on Change My Password screen + * For this screen the user is required to enter their old password - effectively login. + */ + public String changeMyPasswordOK() + { + String outcome = DIALOG_CLOSE; + + if (this.password != null && this.confirm != null && this.password.equals(this.confirm)) + { + try + { + String userName = (String)this.person.getProperties().get(ContentModel.PROP_USERNAME); + this.authenticationService.updateAuthentication(userName, this.oldPassword.toCharArray(), this.password.toCharArray()); + } + catch (Exception e) + { + outcome = null; + Utils.addErrorMessage(MessageFormat.format(Application.getMessage(FacesContext + .getCurrentInstance(), Repository.ERROR_GENERIC), e.getMessage()), e); + } + } + else + { + outcome = null; + Utils.addErrorMessage(Application.getMessage(FacesContext.getCurrentInstance(), + ERROR_PASSWORD_MATCH)); + } + + return outcome; + } + /** * Event handler called when the user wishes to search for a user diff --git a/source/web/WEB-INF/faces-config-navigation.xml b/source/web/WEB-INF/faces-config-navigation.xml index e9dcf7a6c..edb423807 100644 --- a/source/web/WEB-INF/faces-config-navigation.xml +++ b/source/web/WEB-INF/faces-config-navigation.xml @@ -77,13 +77,17 @@ - + /jsp/* - + adminConsole /jsp/admin/admin-console.jsp + + userConsole + /jsp/users/user-console.jsp + @@ -600,6 +604,15 @@ + + + /jsp/users/user-console.jsp + + changePassword + /jsp/users/change-my-password.jsp + + + /jsp/wizard/new-user/* diff --git a/source/web/images/icons/user_console.gif b/source/web/images/icons/user_console.gif new file mode 100644 index 000000000..39a7969d3 Binary files /dev/null and b/source/web/images/icons/user_console.gif differ diff --git a/source/web/images/icons/user_console_large.gif b/source/web/images/icons/user_console_large.gif new file mode 100644 index 000000000..0f0cd2894 Binary files /dev/null and b/source/web/images/icons/user_console_large.gif differ diff --git a/source/web/jsp/admin/admin-console.jsp b/source/web/jsp/admin/admin-console.jsp index 963009709..1afb36f02 100644 --- a/source/web/jsp/admin/admin-console.jsp +++ b/source/web/jsp/admin/admin-console.jsp @@ -98,13 +98,13 @@ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "ballongrey", "#EEEEEE"); %> - + - + - + - + - +
@@ -121,10 +121,10 @@
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "ballongrey"); %> @@ -136,7 +136,7 @@
- +
diff --git a/source/web/jsp/browse/browse.jsp b/source/web/jsp/browse/browse.jsp index dd66b092c..9427e5a3b 100644 --- a/source/web/jsp/browse/browse.jsp +++ b/source/web/jsp/browse/browse.jsp @@ -137,11 +137,6 @@ <%-- More actions menu --%> - - <%-- admin user only actions --%> - - - diff --git a/source/web/jsp/categories/categories.jsp b/source/web/jsp/categories/categories.jsp index 952eb2df9..c6d550745 100644 --- a/source/web/jsp/categories/categories.jsp +++ b/source/web/jsp/categories/categories.jsp @@ -189,7 +189,7 @@
- +
diff --git a/source/web/jsp/dialog/system-info.jsp b/source/web/jsp/dialog/system-info.jsp index d17ca33fe..4632eee18 100644 --- a/source/web/jsp/dialog/system-info.jsp +++ b/source/web/jsp/dialog/system-info.jsp @@ -151,7 +151,7 @@
- +
diff --git a/source/web/jsp/groups/groups.jsp b/source/web/jsp/groups/groups.jsp index 51db3f6dc..9e7a81989 100644 --- a/source/web/jsp/groups/groups.jsp +++ b/source/web/jsp/groups/groups.jsp @@ -270,7 +270,7 @@
- +
diff --git a/source/web/jsp/parts/titlebar.jsp b/source/web/jsp/parts/titlebar.jsp index 93b64eaaa..1b905a3cf 100644 --- a/source/web/jsp/parts/titlebar.jsp +++ b/source/web/jsp/parts/titlebar.jsp @@ -31,6 +31,7 @@ + @@ -42,10 +43,23 @@ - + - - + + + + + diff --git a/source/web/jsp/users/change-my-password.jsp b/source/web/jsp/users/change-my-password.jsp new file mode 100644 index 000000000..dd2a470e9 --- /dev/null +++ b/source/web/jsp/users/change-my-password.jsp @@ -0,0 +1,205 @@ +<%-- + 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. +--%> +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> +<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> + +<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %> +<%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> + + + + + + + + <%-- load a bundle of properties with I18N strings --%> + + + <%-- set the form name here --%> + + + <%-- Main outer table --%> +
+ <%-- admin user only actions --%> + + + +   + <%-- user preferences --%> + + + +       
+ + <%-- Title bar --%> + + + + + <%-- Main area --%> + + <%-- Shelf --%> + + + <%-- Work Area --%> + + +
+ <%@ include file="../parts/titlebar.jsp" %> +
+ <%@ include file="../parts/shelf.jsp" %> + + + <%-- Breadcrumb --%> + <%@ include file="../parts/breadcrumb.jsp" %> + + <%-- Status and Actions --%> + + + + + + + <%-- separator row with gradient shadow --%> + + + + + + + <%-- Details --%> + + + + + + + <%-- separator row with bottom panel graphics --%> + + + + + + +
+ + <%-- Status and Actions inner contents table --%> + <%-- Generally this consists of an icon, textual summary and actions for the current object --%> + + + + + +
+ +
+
+
+ +
+ + + + + + +
+ + + + <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %> + + + + + + + + + + + + + + + + + + + + + +
: + +
: +  * +   +
: +  * +   +
: +  * +   +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %> +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> + + + + + + + + +
+ +
+ +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/source/web/jsp/users/change-password.jsp b/source/web/jsp/users/change-password.jsp index 87f9164f9..a2f5dc6e3 100644 --- a/source/web/jsp/users/change-password.jsp +++ b/source/web/jsp/users/change-password.jsp @@ -162,7 +162,7 @@ - + diff --git a/source/web/jsp/users/delete-user.jsp b/source/web/jsp/users/delete-user.jsp index b4cdf4ca4..7030d0a54 100644 --- a/source/web/jsp/users/delete-user.jsp +++ b/source/web/jsp/users/delete-user.jsp @@ -126,7 +126,7 @@ - + diff --git a/source/web/jsp/users/user-console.jsp b/source/web/jsp/users/user-console.jsp new file mode 100644 index 000000000..877c84bf6 --- /dev/null +++ b/source/web/jsp/users/user-console.jsp @@ -0,0 +1,188 @@ +<%-- + 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. +--%> +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> +<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> + +<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %> +<%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> + + + + + + <%-- load a bundle of properties with I18N strings --%> + + + + + <%-- Main outer table --%> + + + <%-- Title bar --%> + + + + + <%-- Main area --%> + + <%-- Shelf --%> + + + <%-- Work Area --%> + + +
+ <%@ include file="../parts/titlebar.jsp" %> +
+ <%@ include file="../parts/shelf.jsp" %> + + + <%-- Breadcrumb --%> + <%@ include file="../parts/breadcrumb.jsp" %> + + <%-- Status and Actions --%> + + + + + + + <%-- separator row with gradient shadow --%> + + + + + + + <%-- Details --%> + + + + + + + <%-- separator row with bottom panel graphics --%> + + + + + + +
+ + <%-- Status and Actions inner contents table --%> + <%-- Generally this consists of an icon, textual summary and actions for the current object --%> + + + + + +
+ +
+
+
+ +
+ + + + + + + + +
+ <%-- wrapper comment used by the panel to add additional component facets --%> + + + <%----%> + + <%----%> + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+
+ <%-- context for current user is setup on entry to user console --%> + +
+
+ + + + <%----%> + + <%----%> + + + + +
+
+
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> + + + + +
+ +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+ +
+
+ +
+ +
+ +
\ No newline at end of file diff --git a/source/web/jsp/users/users.jsp b/source/web/jsp/users/users.jsp index cec237c38..28839341a 100644 --- a/source/web/jsp/users/users.jsp +++ b/source/web/jsp/users/users.jsp @@ -189,11 +189,11 @@ - + - + @@ -211,7 +211,7 @@
- +