From 3f63e8b83b17151a8c28fcedd18b644edd9b7a1a Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Thu, 13 Jul 2006 07:21:02 +0000 Subject: [PATCH] . First cut of User Settings page - will contain useful things like User Info (which can be changed e.g. name and email), Change Password, View Settings etc. - Added Change Password page implementation . Preferences Service for web-client - handles and hides away the retrieving and storing properties from the configurable aspect on the current Person - simple use case such as: PreferencesService.getPreferences().setValue(name, value); . Moved Admin Console to title area in main UI page . Fixed various Admin Console actions to use dialog framework navigation git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3315 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/messages/webclient.properties | 13 ++ config/alfresco/web-client-config.xml | 5 +- .../alfresco/web/bean/UserShortcutsBean.java | 33 +-- .../web/bean/repository/Preferences.java | 99 +++++++++ .../bean/repository/PreferencesService.java | 63 ++++++ .../alfresco/web/bean/repository/User.java | 110 +++++----- .../alfresco/web/bean/users/UsersBean.java | 55 ++++- .../web/WEB-INF/faces-config-navigation.xml | 17 +- source/web/images/icons/user_console.gif | Bin 0 -> 1042 bytes .../web/images/icons/user_console_large.gif | Bin 0 -> 1558 bytes source/web/jsp/admin/admin-console.jsp | 12 +- source/web/jsp/browse/browse.jsp | 5 - source/web/jsp/categories/categories.jsp | 2 +- source/web/jsp/dialog/system-info.jsp | 2 +- source/web/jsp/groups/groups.jsp | 2 +- source/web/jsp/parts/titlebar.jsp | 20 +- source/web/jsp/users/change-my-password.jsp | 205 ++++++++++++++++++ source/web/jsp/users/change-password.jsp | 2 +- source/web/jsp/users/delete-user.jsp | 2 +- source/web/jsp/users/user-console.jsp | 188 ++++++++++++++++ source/web/jsp/users/users.jsp | 6 +- 21 files changed, 737 insertions(+), 104 deletions(-) create mode 100644 source/java/org/alfresco/web/bean/repository/Preferences.java create mode 100644 source/java/org/alfresco/web/bean/repository/PreferencesService.java create mode 100644 source/web/images/icons/user_console.gif create mode 100644 source/web/images/icons/user_console_large.gif create mode 100644 source/web/jsp/users/change-my-password.jsp create mode 100644 source/web/jsp/users/user-console.jsp diff --git a/config/alfresco/messages/webclient.properties b/config/alfresco/messages/webclient.properties index d300015928..0828398478 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 552561aba3..b771e92be1 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 7934624a19..b4a04080ab 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 0000000000..71ad18778e --- /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 0000000000..84796a9bd9 --- /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 c6f794649c..cfcb58a2bb 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 e6f906cfc3..83efa06abe 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 e9dcf7a6c3..edb423807e 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 0000000000000000000000000000000000000000..39a7969d3c6695cc6eb21496a0739699150878cb GIT binary patch literal 1042 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 literal 0 HcmV?d00001 diff --git a/source/web/jsp/admin/admin-console.jsp b/source/web/jsp/admin/admin-console.jsp index 963009709d..1afb36f029 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 dd66b092c5..9427e5a3bc 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 952eb2df95..c6d550745b 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 d17ca33fe1..4632eee183 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 51db3f6dc4..9e7a81989d 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 93b64eaaad..1b905a3cfd 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 0000000000..dd2a470e92 --- /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 87f9164f93..a2f5dc6e35 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 b4cdf4ca4d..7030d0a549 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 0000000000..877c84bf6d --- /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 cec237c38e..28839341af 100644 --- a/source/web/jsp/users/users.jsp +++ b/source/web/jsp/users/users.jsp @@ -189,11 +189,11 @@ - + - + @@ -211,7 +211,7 @@
- +