Merge "Allow configuring the Report Bug URL"
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index cf32d88..523823d 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -1110,6 +1110,13 @@
 by the system administrator, and might not even be running on the
 same host as Gerrit.
 
+[[gerrit.reportBugUrl]]gerrit.reportBugUrl::
++
+URL to direct users to when they need to report a bug about the
+Gerrit service. By default this links to the upstream Gerrit
+Code Review's own bug tracker but could be directed to the system
+administrator's ticket queue.
+
 [[gitweb]]Section gitweb
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/GerritConfig.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/GerritConfig.java
index 89de3b4..8436456 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/GerritConfig.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/GerritConfig.java
@@ -28,6 +28,7 @@
 public class GerritConfig implements Cloneable {
   protected String registerUrl;
   protected String httpPasswordUrl;
+  protected String reportBugUrl;
   protected String openIdSsoUrl;
   protected List<OpenIdProviderPattern> allowedOpenIDs;
 
@@ -57,6 +58,14 @@
     registerUrl = u;
   }
 
+  public String getReportBugUrl() {
+    return reportBugUrl;
+  }
+
+  public void setReportBugUrl(String u) {
+    reportBugUrl = u;
+  }
+
   public String getEditFullNameUrl() {
     return editFullNameUrl;
   }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
index be74428..5fd0d39 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
@@ -58,8 +58,8 @@
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Grid;
-import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
+import com.google.gwt.user.client.ui.InlineHTML;
 import com.google.gwt.user.client.ui.InlineLabel;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.RootPanel;
@@ -447,9 +447,19 @@
       vs = "dev";
     }
 
-    final HTML version = new HTML(M.poweredBy(vs));
-    version.setStyleName(RESOURCES.css().version());
-    btmmenu.add(version);
+    FlowPanel poweredBy = new FlowPanel();
+    poweredBy.setStyleName(RESOURCES.css().version());
+    poweredBy.add(new InlineHTML(M.poweredBy(vs)));
+    if (getConfig().getReportBugUrl() != null) {
+      poweredBy.add(new InlineLabel(" | "));
+      Anchor a = new Anchor(
+          C.reportBug(),
+          getConfig().getReportBugUrl());
+      a.setTarget("_blank");
+      a.setStyleName("");
+      poweredBy.add(a);
+    }
+    btmmenu.add(poweredBy);
   }
 
   private void onModuleLoad2() {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java
index c47c789..ced2202 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java
@@ -21,6 +21,7 @@
   String menuSignOut();
   String menuRegister();
   String menuSettings();
+  String reportBug();
 
   String signInDialogTitle();
   String signInDialogClose();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
index 67ebe2a..e2d048b 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
@@ -2,6 +2,7 @@
 menuSignOut = Sign Out
 menuRegister = Register
 menuSettings = Settings
+reportBug = Report Bug
 
 signInDialogTitle = Code Review - Sign In
 signInDialogClose = Close
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties
index a91df3c..79772bd 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties
@@ -1,7 +1,6 @@
 windowTitle1 = {0} Code Review
 windowTitle2 = {0} | {1} Code Review
-poweredBy = Powered by <a href="http://code.google.com/p/gerrit/" target="_blank">Gerrit Code Review</a> ({0}) \
-| <a href="http://code.google.com/p/gerrit/issues/list" target="_blank">Report Bug</a>
+poweredBy = Powered by <a href="http://code.google.com/p/gerrit/" target="_blank">Gerrit Code Review</a> ({0})
 
 noSuchAccountMessage = {0} is not a registered user.
 
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java
index 72bb0c2..2f09380 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java
@@ -121,6 +121,13 @@
         "test", false));
     config.setAnonymousCowardName(anonymousCowardName);
 
+    config.setReportBugUrl(cfg.getString("gerrit", null, "reportBugUrl"));
+    if (config.getReportBugUrl() == null) {
+      config.setReportBugUrl("http://code.google.com/p/gerrit/issues/list");
+    } else if (config.getReportBugUrl().isEmpty()) {
+      config.setReportBugUrl(null);
+    }
+
     final Set<Account.FieldName> fields = new HashSet<Account.FieldName>();
     for (final Account.FieldName n : Account.FieldName.values()) {
       if (realm.allowsEdit(n)) {