From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Sat, 30 Apr 2016 04:19:14 -0400 Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates --- src/main/java/com/gitblit/wicket/pages/EditTeamPage.java | 68 ++++++++++++++++++++++++++------- 1 files changed, 53 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java b/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java index 32905c9..a43d8db 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java @@ -18,6 +18,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -28,6 +29,7 @@ import org.apache.wicket.extensions.markup.html.form.palette.Palette; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; +import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; @@ -37,10 +39,13 @@ import org.apache.wicket.model.util.ListModel; import com.gitblit.Constants.RegistrantType; +import com.gitblit.Constants.Role; import com.gitblit.GitBlitException; import com.gitblit.Keys; import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.TeamModel; +import com.gitblit.models.UserChoice; +import com.gitblit.models.UserModel; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.RequiresAdminRole; import com.gitblit.wicket.StringChoiceRenderer; @@ -82,7 +87,7 @@ @Override protected Class<? extends BasePage> getRootNavPageClass() { - return UsersPage.class; + return TeamsPage.class; } protected void setupPage(final TeamModel teamModel) { @@ -97,7 +102,6 @@ List<String> repos = getAccessRestrictedRepositoryList(true, null); List<String> teamUsers = new ArrayList<String>(teamModel.users); - Collections.sort(teamUsers); List<String> preReceiveScripts = new ArrayList<String>(); List<String> postReceiveScripts = new ArrayList<String>(); @@ -105,9 +109,8 @@ final List<RegistrantAccessPermission> permissions = teamModel.getRepositoryPermissions(); // users palette - final Palette<String> users = new Palette<String>("users", new ListModel<String>( - new ArrayList<String>(teamUsers)), new CollectionModel<String>(app().users() - .getAllUsernames()), new StringChoiceRenderer(), 10, false); + final Palette<UserChoice> users = new Palette<UserChoice>("users", new ListModel<UserChoice>( + getTeamUsers(teamUsers)), new CollectionModel<UserChoice>(sortByDisplayName(getTeamUsers(app().users().getAllUsernames()))), new ChoiceRenderer<UserChoice>(null, "userId"), 10, false); // pre-receive palette if (teamModel.preReceiveScripts != null) { @@ -155,10 +158,10 @@ teamModel.setRepositoryPermission(repositoryPermission.registrant, repositoryPermission.permission); } - Iterator<String> selectedUsers = users.getSelectedChoices(); + Iterator<UserChoice> selectedUsers = users.getSelectedChoices(); List<String> members = new ArrayList<String>(); while (selectedUsers.hasNext()) { - members.add(selectedUsers.next().toLowerCase()); + members.add(selectedUsers.next().getUserId().toLowerCase()); } teamModel.users.clear(); teamModel.users.addAll(members); @@ -196,7 +199,11 @@ teamModel.postReceiveScripts.addAll(postReceiveScripts); try { - app().users().updateTeamModel(oldName, teamModel, isCreate); + if (isCreate) { + app().gitblit().addTeam(teamModel); + } else { + app().gitblit().reviseTeam(oldName, teamModel); + } } catch (GitBlitException e) { error(e.getMessage()); return; @@ -208,21 +215,30 @@ teamModel.name)); } // back to users page - setResponsePage(UsersPage.class); + setResponsePage(TeamsPage.class); } }; // do not let the browser pre-populate these fields form.add(new SimpleAttributeModifier("autocomplete", "off")); - // not all user services support manipulating team memberships - boolean editMemberships = app().users().supportsTeamMembershipChanges(null); + // not all user providers support manipulating team memberships + boolean editMemberships = app().authentication().supportsTeamMembershipChanges(teamModel); + + // not all user providers support manipulating the admin role + boolean changeAdminRole = app().authentication().supportsRoleChanges(teamModel, Role.ADMIN); + + // not all user providers support manipulating the create role + boolean changeCreateRole = app().authentication().supportsRoleChanges(teamModel, Role.CREATE); + + // not all user providers support manipulating the fork role + boolean changeForkRole = app().authentication().supportsRoleChanges(teamModel, Role.FORK); // field names reflective match TeamModel fields form.add(new TextField<String>("name")); - form.add(new CheckBox("canAdmin")); - form.add(new CheckBox("canFork").setEnabled(app().settings().getBoolean(Keys.web.allowForking, true))); - form.add(new CheckBox("canCreate")); + form.add(new CheckBox("canAdmin").setEnabled(changeAdminRole)); + form.add(new CheckBox("canFork").setEnabled(app().settings().getBoolean(Keys.web.allowForking, true) && changeForkRole)); + form.add(new CheckBox("canCreate").setEnabled(changeCreateRole)); form.add(users.setEnabled(editMemberships)); mailingLists = new Model<String>(teamModel.mailingLists == null ? "" : StringUtils.flattenStrings(teamModel.mailingLists, " ")); @@ -243,7 +259,7 @@ @Override public void onSubmit() { - setResponsePage(UsersPage.class); + setResponsePage(TeamsPage.class); } }; cancel.setDefaultFormProcessing(false); @@ -251,4 +267,26 @@ add(form); } + + private List<UserChoice> getTeamUsers(List<String> teamUserIds) { + List<UserChoice> teamUsers = new ArrayList<UserChoice>(); + for (String teamUserId : teamUserIds) { + UserModel userModel = app().users().getUserModel(teamUserId); + if (userModel!=null) { + teamUsers.add(new UserChoice(userModel.displayName, userModel.username, userModel.emailAddress)); + } + } + return sortByDisplayName(teamUsers); + } + + private List<UserChoice> sortByDisplayName(List<UserChoice> teamUsers) { + Collections.sort(teamUsers, new Comparator<UserChoice>() { + + @Override + public int compare(UserChoice o1, UserChoice o2) { + return o1.getDisplayNameOrUserId().compareTo(o2.getDisplayNameOrUserId()); + } + }); + return teamUsers; + } } -- Gitblit v1.9.1