From 27ae9095639bb228a1b7ff86a3ebe4264abf05be Mon Sep 17 00:00:00 2001
From: mschaefers <mschaefers@scoop-gmbh.de>
Date: Thu, 29 Nov 2012 12:33:09 -0500
Subject: [PATCH] feature: when using LdapUserService one can configure Gitblit to fetch all users from ldap that can possibly login. This allows to see newly generated LDAP users instantly in Gitblit. By now an LDAP user had to log in once to appear in GitBlit.

---
 src/com/gitblit/wicket/panels/RepositoriesPanel.java |   47 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/src/com/gitblit/wicket/panels/RepositoriesPanel.java b/src/com/gitblit/wicket/panels/RepositoriesPanel.java
index 02ebf4f..d3b8ddb 100644
--- a/src/com/gitblit/wicket/panels/RepositoriesPanel.java
+++ b/src/com/gitblit/wicket/panels/RepositoriesPanel.java
@@ -64,7 +64,7 @@
 
 	private static final long serialVersionUID = 1L;
 
-	public RepositoriesPanel(String wicketId, final boolean showAdmin,
+	public RepositoriesPanel(String wicketId, final boolean showAdmin, final boolean showManagement,
 			List<RepositoryModel> models, boolean enableLinks,
 			final Map<AccessRestrictionType, String> accessRestrictionTranslations) {
 		super(wicketId);
@@ -76,19 +76,31 @@
 
 		final IDataProvider<RepositoryModel> dp;
 
-		Fragment adminLinks = new Fragment("adminPanel", "adminLinks", this);
-		adminLinks.add(new Link<Void>("clearCache") {
+		Fragment managementLinks;
+		if (showAdmin) {
+			// user is admin
+			managementLinks = new Fragment("managementPanel", "adminLinks", this);
+			managementLinks.add(new Link<Void>("clearCache") {
 
-			private static final long serialVersionUID = 1L;
+				private static final long serialVersionUID = 1L;
 
-			@Override
-			public void onClick() {
-				GitBlit.self().resetRepositoryListCache();
-				setResponsePage(RepositoriesPage.class);
-			}
-		}.setVisible(GitBlit.getBoolean(Keys.git.cacheRepositoryList, true)));
-		adminLinks.add(new BookmarkablePageLink<Void>("newRepository", EditRepositoryPage.class));
-		add(adminLinks.setVisible(showAdmin));
+				@Override
+				public void onClick() {
+					GitBlit.self().resetRepositoryListCache();
+					setResponsePage(RepositoriesPage.class);
+				}
+			}.setVisible(GitBlit.getBoolean(Keys.git.cacheRepositoryList, true)));
+			managementLinks.add(new BookmarkablePageLink<Void>("newRepository", EditRepositoryPage.class));
+			add(managementLinks);
+		} else if (showManagement && user != null && user.canCreate()) {
+			// user can create personal repositories
+			managementLinks = new Fragment("managementPanel", "personalLinks", this);
+			managementLinks.add(new BookmarkablePageLink<Void>("newRepository", EditRepositoryPage.class));
+			add(managementLinks);
+		} else {
+			// user has no management permissions
+			add (new Label("managementPanel").setVisible(false));
+		}
 
 		if (GitBlit.getString(Keys.web.repositoryListType, "flat").equalsIgnoreCase("grouped")) {
 			List<RepositoryModel> rootRepositories = new ArrayList<RepositoryModel>();
@@ -154,20 +166,21 @@
 			public void populateItem(final Item<RepositoryModel> item) {
 				final RepositoryModel entry = item.getModelObject();
 				if (entry instanceof GroupRepositoryModel) {
+					GroupRepositoryModel groupRow = (GroupRepositoryModel) entry;
 					currGroupName = entry.name;
 					Fragment row = new Fragment("rowContent", "groupRepositoryRow", this);
 					item.add(row);
 					
-					String name = entry.toString();
+					String name = groupRow.name;
 					if (name.charAt(0) == '~') {
 						// user page
 						String username = name.substring(1);
 						UserModel user = GitBlit.self().getUserModel(username);
-						row.add(new LinkPanel("groupName", null, user == null ? username : user.getDisplayName(), UserPage.class, WicketUtils.newUsernameParameter(username)));
+						row.add(new LinkPanel("groupName", null, (user == null ? username : user.getDisplayName()) + " (" + groupRow.count + ")", UserPage.class, WicketUtils.newUsernameParameter(username)));
 						row.add(new Label("groupDescription", getString("gb.personalRepositories")));
 					} else {
 						// project page
-						row.add(new LinkPanel("groupName", null, name, ProjectPage.class, WicketUtils.newProjectParameter(entry.name)));
+						row.add(new LinkPanel("groupName", null, groupRow.toString(), ProjectPage.class, WicketUtils.newProjectParameter(entry.name)));
 						row.add(new Label("groupDescription", entry.description == null ? "":entry.description));
 					}
 					WicketUtils.setCssClass(item, "group");
@@ -297,7 +310,7 @@
 				row.add(lastChangeLabel);
 				WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange));
 
-				boolean showOwner = user != null && user.username.equalsIgnoreCase(entry.owner);
+				boolean showOwner = user != null && entry.isOwner(user.username);
 				boolean myPersonalRepository = showOwner && entry.isUsersPersonalRepository(user.username);
 				if (showAdmin || myPersonalRepository) {
 					Fragment repositoryLinks = new Fragment("repositoryLinks",
@@ -375,7 +388,7 @@
 
 		@Override
 		public String toString() {
-			return StringUtils.isEmpty(title) ? name  : title + " (" + count + ")";
+			return (StringUtils.isEmpty(title) ? name  : title) + " (" + count + ")";
 		}
 	}
 

--
Gitblit v1.9.1