From 326707f1a7a01d494a4360caaac0dde08706c005 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 3 Mar 2016 14:37:38 +0000 Subject: [PATCH] CCM NG: UserDetails view git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3904 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/ui/admin/AdminServlet.java | 6 +- .../ui/admin/usersgroupsroles/UserAdmin.java | 69 ++++++++---- .../admin/usersgroupsroles/UserDetails.java | 60 +++++++++++ .../UserPropertySheetModel.java | 102 ++++++++++++++++++ .../UserPropertySheetModelBuilder.java | 63 +++++++++++ .../ui/admin/usersgroupsroles/UsersTable.java | 71 ++++++------ .../ui/admin/AdminResources.properties | 11 ++ .../ui/admin/AdminResources_de.properties | 11 ++ .../ui/admin/AdminResources_en.properties | 11 ++ .../ui/admin/AdminResources_fr.properties | 11 ++ 10 files changed, 361 insertions(+), 54 deletions(-) create mode 100644 ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserDetails.java create mode 100644 ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java create mode 100644 ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java index 399ca36df..0bd7fb101 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java @@ -100,9 +100,9 @@ public class AdminServlet // addPage("/index.jsp", buildIndexPage()); // index page at address ~/ds adminPage = PageFactory.buildPage("admin", "LibreCCM NG Admin"); - adminPage.addGlobalStateParam(USER_ID_PARAM); - adminPage.addGlobalStateParam(GROUP_ID_PARAM); - adminPage.addGlobalStateParam(APPLICATIONS_ID_PARAM); +// adminPage.addGlobalStateParam(USER_ID_PARAM); +// adminPage.addGlobalStateParam(GROUP_ID_PARAM); +// adminPage.addGlobalStateParam(APPLICATIONS_ID_PARAM); adminPage.add(new UserBanner()); adminPage.add(new SiteBanner()); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java index 55e7de3b0..e49aaf6a7 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserAdmin.java @@ -21,6 +21,7 @@ package com.arsdigita.ui.admin.usersgroupsroles; import com.arsdigita.bebop.ActionLink; import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.Form; +import com.arsdigita.bebop.Page; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.ParameterSingleSelectionModel; import com.arsdigita.bebop.Text; @@ -38,44 +39,76 @@ import static com.arsdigita.ui.admin.AdminUiConstants.*; */ public class UserAdmin extends BoxPanel { + private final LongParameter userIdParameter; private final ParameterSingleSelectionModel selectedUserId; private final TextField usersTableFilter; + final BoxPanel usersTablePanel; + private final UsersTable usersTable; + private final UserDetails userDetails; public UserAdmin() { super(); - //add(new Label("User Admin class")); + usersTablePanel = new BoxPanel(); + final Form filterForm = new Form("usersTableFilterForm"); usersTableFilter = new TextField("usersTableFilter"); usersTableFilter.setLabel(new GlobalizedMessage( - "ui.admin.users.table.filter.term", ADMIN_BUNDLE)); + "ui.admin.users.table.filter.term", ADMIN_BUNDLE)); filterForm.add(usersTableFilter); filterForm.add(new Submit(new GlobalizedMessage( - "ui.admin.users.table.filter.submit", ADMIN_BUNDLE))); + "ui.admin.users.table.filter.submit", ADMIN_BUNDLE))); final ActionLink clearLink = new ActionLink(new GlobalizedMessage( - "ui.admin.users.table.filter.clear", ADMIN_BUNDLE)); + "ui.admin.users.table.filter.clear", ADMIN_BUNDLE)); clearLink.addActionListener((e) -> { final PageState state = e.getPageState(); usersTableFilter.setValue(state, null); }); filterForm.add(clearLink); - add(filterForm); + usersTablePanel.add(filterForm); - selectedUserId = new ParameterSingleSelectionModel<>(USER_ID_PARAM); + userIdParameter = new LongParameter("selected_user_id"); + selectedUserId = new ParameterSingleSelectionModel<>(userIdParameter); + //selectedUserId = new ParameterSingleSelectionModel<>(USER_ID_PARAM); - final UsersTable usersTable = new UsersTable(usersTableFilter, - selectedUserId); - add(usersTable); + usersTable = new UsersTable(this, usersTableFilter, selectedUserId); + usersTablePanel.add(usersTable); - final Text text = new Text(); - text.setPrintListener((final PrintEvent e) -> { - final Text target = (Text) e.getTarget(); - final PageState state = e.getPageState(); - if (selectedUserId.isSelected(state)) { - target.setText(selectedUserId.getSelectedKey(state)); - } - }); - add(text); + add(usersTablePanel); + +// final Text text = new Text(); +// text.setPrintListener((final PrintEvent e) -> { +// final Text target = (Text) e.getTarget(); +// final PageState state = e.getPageState(); +// if (selectedUserId.isSelected(state)) { +// target.setText(selectedUserId.getSelectedKey(state)); +// } +// }); +// add(text); + + userDetails = new UserDetails(this, selectedUserId); + add(new UserDetails(this, selectedUserId)); + } + + @Override + public void register(final Page page) { + super.register(page); + + page.addGlobalStateParam(userIdParameter); + + page.setVisibleDefault(usersTablePanel, true); + page.setVisibleDefault(userDetails, false); + } + + protected void showUserDetails(final PageState state) { + usersTablePanel.setVisible(state, false); + userDetails.setVisible(state, true); + } + + protected void closeUserDetails(final PageState state) { + selectedUserId.clearSelection(state); + usersTablePanel.setVisible(state, true); + userDetails.setVisible(state, false); } } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserDetails.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserDetails.java new file mode 100644 index 000000000..611c2cda5 --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserDetails.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.ui.admin.usersgroupsroles; + +import com.arsdigita.bebop.ActionLink; +import com.arsdigita.bebop.BoxPanel; +import com.arsdigita.bebop.ParameterSingleSelectionModel; +import com.arsdigita.bebop.PropertySheet; +import com.arsdigita.globalization.GlobalizedMessage; + +import static com.arsdigita.ui.admin.AdminUiConstants.*; + +/** + * + * @author Jens Pelzetter + */ +public class UserDetails extends BoxPanel { + +// private final UserAdmin parent; +// private final ParameterSingleSelectionModel selectedUserId; + private final ActionLink backLink; +// private final PropertySheet userProperties; + + public UserDetails( + final UserAdmin parent, + final ParameterSingleSelectionModel selectedUserId) { + super(); + +// this.parent = parent; +// this.selectedUserId = selectedUserId; + + backLink = new ActionLink(new GlobalizedMessage( + "ui.admin.user_details.back", ADMIN_BUNDLE)); + backLink.addActionListener(e -> { + parent.closeUserDetails(e.getPageState()); + }); + add(backLink); + + final PropertySheet userProperties = new PropertySheet(new UserPropertySheetModelBuilder( + parent, selectedUserId)); + add(userProperties); + } + +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java new file mode 100644 index 000000000..f45eebcbc --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModel.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.ui.admin.usersgroupsroles; + +import com.arsdigita.bebop.PropertySheetModel; +import com.arsdigita.globalization.GlobalizedMessage; +import java.util.Arrays; +import java.util.Iterator; +import org.libreccm.security.User; + +import static com.arsdigita.ui.admin.AdminUiConstants.*; + +/** + * + * @author Jens Pelzetter + */ +public class UserPropertySheetModel implements PropertySheetModel { + + private static enum UserProperty { + USER_NAME, + FAMILY_NAME, + GIVEN_NAME, + BANNED, + PASSWORD_RESET_REQUIRED, + } + + private final User selectedUser; + private final Iterator propertyIterator; + private UserProperty currentProperty; + + public UserPropertySheetModel(final User selectedUser) { + this.selectedUser = selectedUser; + propertyIterator = Arrays.asList(UserProperty.values()).iterator(); + } + + @Override + public boolean nextRow() { + if (selectedUser == null) { + return false; + } + + if (propertyIterator.hasNext()) { + currentProperty = propertyIterator.next(); + return true; + } else { + return false; + } + } + + @Override + public String getLabel() { + return currentProperty.toString(); + } + + @Override + public GlobalizedMessage getGlobalizedLabel() { + return generateGlobalizedLabel(currentProperty); + } + + private GlobalizedMessage generateGlobalizedLabel( + final UserProperty property) { + return new GlobalizedMessage( + String.join("ui.admin.user.property_sheet.", + property.toString().toLowerCase()), + ADMIN_BUNDLE); + } + + @Override + public String getValue() { + switch (currentProperty) { + case USER_NAME: + return selectedUser.getName(); + case FAMILY_NAME: + return selectedUser.getFamilyName(); + case GIVEN_NAME: + return selectedUser.getGivenName(); + case BANNED: + return Boolean.toString(selectedUser.isBanned()); + case PASSWORD_RESET_REQUIRED: + return Boolean.toString(selectedUser.isPasswordResetRequired()); + default: + return ""; + } + } + +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java new file mode 100644 index 000000000..09ce0363e --- /dev/null +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UserPropertySheetModelBuilder.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.ui.admin.usersgroupsroles; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.ParameterSingleSelectionModel; +import com.arsdigita.bebop.PropertySheet; +import com.arsdigita.bebop.PropertySheetModel; +import com.arsdigita.bebop.PropertySheetModelBuilder; +import com.arsdigita.util.LockableImpl; +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.security.User; +import org.libreccm.security.UserRepository; + +/** + * + * @author Jens Pelzetter + */ +public class UserPropertySheetModelBuilder + extends LockableImpl implements PropertySheetModelBuilder { + + private final ParameterSingleSelectionModel selectedUserId; + + public UserPropertySheetModelBuilder( + final UserAdmin parent, + final ParameterSingleSelectionModel selectedUserId) { + this.selectedUserId = selectedUserId; + } + + @Override + public PropertySheetModel makeModel(final PropertySheet sheet, + final PageState state) { + final String userIdStr = selectedUserId.getSelectedKey(state); + final User selectedUser; + if (userIdStr == null || userIdStr.isEmpty()) { + selectedUser = null; + } else { + final UserRepository userRepository = CdiUtil.createCdiUtil(). + findBean( + UserRepository.class); + final long userId = Long.parseLong(userIdStr); + selectedUser = userRepository.findById(userId); + } + + return new UserPropertySheetModel(selectedUser); + } +} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UsersTable.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UsersTable.java index 2f4e79a66..c8374d445 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UsersTable.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/UsersTable.java @@ -24,7 +24,6 @@ import com.arsdigita.bebop.Label; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.ParameterSingleSelectionModel; import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.event.TableActionAdapter; import com.arsdigita.bebop.event.TableActionEvent; import com.arsdigita.bebop.event.TableActionListener; import com.arsdigita.bebop.form.TextField; @@ -63,7 +62,8 @@ public class UsersTable extends Table { private final TextField usersTableFilter; private final ParameterSingleSelectionModel selectedUserId; - public UsersTable(final TextField usersTableFilter, + public UsersTable(final UserAdmin parent, + final TextField usersTableFilter, final ParameterSingleSelectionModel selectedUserId) { super(); @@ -71,51 +71,56 @@ public class UsersTable extends Table { this.selectedUserId = selectedUserId; setEmptyView(new Label(new GlobalizedMessage( - "ui.admin.users.table.no_users", ADMIN_BUNDLE))); + "ui.admin.users.table.no_users", ADMIN_BUNDLE))); final TableColumnModel columnModel = getColumnModel(); columnModel.add(new TableColumn( - COL_SCREEN_NAME, - new Label(new GlobalizedMessage("ui.admin.users.table.screenname", - ADMIN_BUNDLE)))); + COL_SCREEN_NAME, + new Label(new GlobalizedMessage( + "ui.admin.users.table.screenname", + ADMIN_BUNDLE)))); columnModel.add(new TableColumn( - COL_GIVEN_NAME, - new Label(new GlobalizedMessage("ui.admin.users.table.givenname", - ADMIN_BUNDLE)))); + COL_GIVEN_NAME, + new Label( + new GlobalizedMessage("ui.admin.users.table.givenname", + ADMIN_BUNDLE)))); columnModel.add(new TableColumn( - COL_FAMILY_NAME, - new Label(new GlobalizedMessage("ui.admin.users.table.familyname", - ADMIN_BUNDLE)))); + COL_FAMILY_NAME, + new Label(new GlobalizedMessage( + "ui.admin.users.table.familyname", + ADMIN_BUNDLE)))); columnModel.add(new TableColumn( - COL_PRIMARY_EMAIL, - new Label(new GlobalizedMessage( - "ui.admin.users.table.primary_email", ADMIN_BUNDLE)))); + COL_PRIMARY_EMAIL, + new Label(new GlobalizedMessage( + "ui.admin.users.table.primary_email", ADMIN_BUNDLE)))); columnModel.add(new TableColumn( - COL_BANNED, - new Label(new GlobalizedMessage( - "ui.admin.users.table.banned", ADMIN_BUNDLE)))); - - columnModel.get(COL_SCREEN_NAME).setCellRenderer(new TableCellRenderer() { + COL_BANNED, + new Label(new GlobalizedMessage( + "ui.admin.users.table.banned", ADMIN_BUNDLE)))); + + columnModel.get(COL_SCREEN_NAME).setCellRenderer( + new TableCellRenderer() { @Override - public Component getComponent(final Table table, + public Component getComponent(final Table table, final PageState state, - final Object value, + final Object value, final boolean isSelected, - final Object key, - final int row, + final Object key, + final int row, final int column) { return new ControlLink((String) value); } }); - + addTableActionListener(new TableActionListener() { @Override public void cellSelected(final TableActionEvent event) { + final PageState state = event.getPageState(); final String key = (String) event.getRowKey(); - - selectedUserId.setSelectedKey(event.getPageState(), key); + selectedUserId.setSelectedKey(state, key); + parent.showUserDetails(state); } @Override @@ -123,12 +128,12 @@ public class UsersTable extends Table { //Nothing } }); - + setModelBuilder(new UsersTableModelBuilder()); } private class UsersTableModelBuilder extends LockableImpl - implements TableModelBuilder { + implements TableModelBuilder { @Override public TableModel makeModel(final Table table, final PageState state) { @@ -147,17 +152,17 @@ public class UsersTable extends Table { public UsersTableModel(final PageState state) { LOGGER.debug("Creating UsersTableModel..."); final String filterTerm = (String) usersTableFilter - .getValue(state); + .getValue(state); LOGGER.debug("Value of filter is: \"{}\"", filterTerm); final UserRepository userRepository = CdiUtil.createCdiUtil() - .findBean(UserRepository.class); + .findBean(UserRepository.class); if (filterTerm == null || filterTerm.isEmpty()) { users = userRepository.findAll(); LOGGER.debug("Found {} users in database.", users.size()); } else { users = userRepository.filtered(filterTerm); LOGGER.debug("Found {} users in database which match the " - + "filter \"{}\".", + + "filter \"{}\".", users.size(), filterTerm); } @@ -198,7 +203,7 @@ public class UsersTable extends Table { return user.getName(); default: throw new IllegalArgumentException( - "No a valid column index."); + "No a valid column index."); } } diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties index 17d321d1f..d5c0d1ec0 100644 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties @@ -169,3 +169,14 @@ ui.admin.users.table.filter.term=Filter users ui.admin.users.table.filter.submit=Apply ui.admin.users.table.no_users=No users matching users found. ui.admin.users.table.filter.clear=Clear filter +ui.admin.user.property_sheet.username=User name +ui.admin.user.property_sheet.primary_email=Primary email address +ui.admin.user.property_sheet.additional_emails=Additional email addresses +ui.admin.user.property_sheet.banned=Banned? +ui.admin.user.property_sheet.password_reset_required=Password reset required? +ui.admin.user.property_sheet.groups=Groups +ui.admin.user.property_sheet.direct_roles=Assigned roles +ui.admin.user.property_sheet.all_roles=Roles +ui.admin.user.property_sheet.family_name=Family name +ui.admin.user.property_sheet.given_name=Given name +ui.admin.user_details.back=Back to users table diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties index 0f803f74b..974699461 100644 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties @@ -169,3 +169,14 @@ ui.admin.users.table.filter.term=Benutzer filtern ui.admin.users.table.filter.submit=Anwenden ui.admin.users.table.no_users=Keine auf den aktuellen Filter passenden Benutzer gefunden. ui.admin.users.table.filter.clear=Filter zur\u00fccksetzen +ui.admin.user.property_sheet.username=Benutzername +ui.admin.user.property_sheet.primary_email=Prim\u00e4re E-Mail-Adresse +ui.admin.user.property_sheet.additional_emails=Weitere E-Mail-Adressen +ui.admin.user.property_sheet.banned=Gesperrt? +ui.admin.user.property_sheet.password_reset_required=Neues Passwort erforderlich? +ui.admin.user.property_sheet.groups=Gruppen +ui.admin.user.property_sheet.direct_roles=Zugewiesene Rollen +ui.admin.user.property_sheet.all_roles=Rollen +ui.admin.user.property_sheet.family_name=Familienname +ui.admin.user.property_sheet.given_name=Vorname +ui.admin.user_details.back=Zur\u00fcck zur Benutzer\u00fcbersicht diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties index 9554553b6..5db0124d8 100755 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties @@ -142,3 +142,14 @@ ui.admin.users.table.filter.term=Filter users ui.admin.users.table.filter.submit=Apply ui.admin.users.table.no_users=No users matching users found. ui.admin.users.table.filter.clear=Clear filter +ui.admin.user.property_sheet.username=User name +ui.admin.user.property_sheet.primary_email=Primary email address +ui.admin.user.property_sheet.additional_emails=Additional emails addresses +ui.admin.user.property_sheet.banned=Banned? +ui.admin.user.property_sheet.password_reset_required=Password reset required +ui.admin.user.property_sheet.groups=Groups +ui.admin.user.property_sheet.direct_roles=Assigned roles +ui.admin.user.property_sheet.all_roles=Roles +ui.admin.user.property_sheet.family_name=Family name +ui.admin.user.property_sheet.given_name=Given name +ui.admin.user_details.back=Back to users table diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties index bba06e6db..18506a0fd 100755 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties @@ -133,3 +133,14 @@ ui.admin.users.table.filter.term=Filter users ui.admin.users.table.filter.submit=Apply ui.admin.users.table.no_users=No users matching users found. ui.admin.users.table.filter.clear=Clear filter +ui.admin.user.property_sheet.username=User name +ui.admin.user.property_sheet.primary_email=Primary email address +ui.admin.user.property_sheet.additional_emails=Additional email addresses +ui.admin.user.property_sheet.banned=Banned? +ui.admin.user.property_sheet.password_reset_required=Password reset required? +ui.admin.user.property_sheet.groups=Groups +ui.admin.user.property_sheet.direct_roles=Assigned roles +ui.admin.user.property_sheet.all_roles=Roles +ui.admin.user.property_sheet.family_name=Family name +ui.admin.user.property_sheet.given_name=Given name +ui.admin.user_details.back=Back to users table