summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.htaccess1
-rw-r--r--Bugzilla/Quantum/Plugin/Hostage.pm2
-rw-r--r--Bugzilla/User/Setting.pm8
-rw-r--r--Bugzilla/UserAgent.pm1
-rw-r--r--Bugzilla/WebService/Server/REST.pm8
-rw-r--r--Dockerfile37
-rwxr-xr-xMakefile.PL16
-rw-r--r--extensions/BugModal/template/en/default/bug_modal/edit.html.tmpl9
-rw-r--r--extensions/BugModal/template/en/default/bug_modal/field.html.tmpl12
-rw-r--r--extensions/ComponentWatching/web/js/overlay.js7
-rw-r--r--extensions/OpenGraph/template/en/default/hook/robots-end.txt.tmpl4
-rw-r--r--extensions/PhabBugz/lib/User.pm6
-rw-r--r--extensions/PhabBugz/lib/Util.pm18
-rw-r--r--extensions/REMO/template/en/default/bug/create/comment-remo-it.txt.tmpl67
-rw-r--r--extensions/REMO/template/en/default/bug/create/create-remo-it.html.tmpl263
-rw-r--r--extensions/SiteMapIndex/template/en/default/hook/robots-end.txt.tmpl3
-rwxr-xr-xrest.cgi1
-rw-r--r--skins/standard/global.css5
-rw-r--r--template/en/default/list/list.html.tmpl2
-rw-r--r--template/en/default/robots.txt.tmpl2
20 files changed, 79 insertions, 393 deletions
diff --git a/.htaccess b/.htaccess
index 06690e2c6..9e29dcc1c 100644
--- a/.htaccess
+++ b/.htaccess
@@ -51,7 +51,6 @@ RewriteRule ^form[\.:]mozpr$ enter_bug.cgi?product=Mozilla+PR&format=mozpr [QSA]
RewriteRule ^form[\.:]reps[\.:]mentorship$ enter_bug.cgi?product=Mozilla+Reps&format=mozreps [QSA]
RewriteRule ^form[\.:]reps[\.:]budget$ enter_bug.cgi?product=Mozilla+Reps&format=remo-budget [QSA]
RewriteRule ^form[\.:]reps[\.:]swag$ enter_bug.cgi?product=Mozilla+Reps&format=remo-swag [QSA]
-RewriteRule ^form[\.:]reps[\.:]it$ enter_bug.cgi?product=Mozilla+Reps&format=remo-it [QSA]
RewriteRule ^form[\.:]reps[\.:]payment$ page.cgi?id=remo-form-payment.html [QSA]
RewriteRule ^form[\.:]csa[\.:]discourse$ enter_bug.cgi?product=Infrastructure+\%26\+Operations&format=csa-discourse [QSA]
RewriteRule ^form[\.:]employee[\.\-:]incident$ enter_bug.cgi?product=mozilla.org&format=employee-incident [QSA]
diff --git a/Bugzilla/Quantum/Plugin/Hostage.pm b/Bugzilla/Quantum/Plugin/Hostage.pm
index 42a05a910..418b09a0c 100644
--- a/Bugzilla/Quantum/Plugin/Hostage.pm
+++ b/Bugzilla/Quantum/Plugin/Hostage.pm
@@ -77,4 +77,4 @@ sub _before_routes {
}
}
-1; \ No newline at end of file
+1;
diff --git a/Bugzilla/User/Setting.pm b/Bugzilla/User/Setting.pm
index a0b079ec7..ac53fbb32 100644
--- a/Bugzilla/User/Setting.pm
+++ b/Bugzilla/User/Setting.pm
@@ -13,8 +13,6 @@ use strict;
use warnings;
use base qw(Exporter);
-
-
# Module stuff
@Bugzilla::User::Setting::EXPORT = qw(
get_all_settings
@@ -25,6 +23,7 @@ use base qw(Exporter);
use Bugzilla::Error;
use Bugzilla::Util qw(trick_taint get_text);
+use Module::Runtime qw(require_module);
###############################
### Module Initialization ###
@@ -104,9 +103,8 @@ sub new {
$self->{'category'} = shift;
}
if ($subclass) {
- eval('require ' . $class . '::' . $subclass);
- $@ && ThrowCodeError('setting_subclass_invalid',
- {'subclass' => $subclass});
+ eval { require_module( $class . '::' . $subclass ) }
+ || ThrowCodeError( 'setting_subclass_invalid', { 'subclass' => $subclass } );
$class = $class . '::' . $subclass;
}
bless($self, $class);
diff --git a/Bugzilla/UserAgent.pm b/Bugzilla/UserAgent.pm
index 0db6de808..bd31a2a13 100644
--- a/Bugzilla/UserAgent.pm
+++ b/Bugzilla/UserAgent.pm
@@ -26,6 +26,7 @@ use constant PLATFORMS_MAP => (
qr/\(.*[ix0-9]86 (?:on |\()x86_64.*\)/ => ["IA32", "x86", "PC"],
qr/\(.*amd64.*\)/ => ["AMD64", "x86_64", "PC"],
qr/\(.*x86_64.*\)/ => ["AMD64", "x86_64", "PC"],
+ qr/\(.*Intel Mac OS X.*\)/ => ["x86_64"],
# Intel IA64
qr/\(.*IA64.*\)/ => ["IA64", "PC"],
# Intel x86
diff --git a/Bugzilla/WebService/Server/REST.pm b/Bugzilla/WebService/Server/REST.pm
index b8884b753..13896b248 100644
--- a/Bugzilla/WebService/Server/REST.pm
+++ b/Bugzilla/WebService/Server/REST.pm
@@ -34,6 +34,7 @@ use Bugzilla::WebService::Server::REST::Resources::Elastic;
use List::MoreUtils qw(uniq);
use Scalar::Util qw(blessed reftype);
use MIME::Base64 qw(decode_base64);
+use Module::Runtime qw(require_module);
###########################
# Public Method Overrides #
@@ -392,6 +393,10 @@ sub _retrieve_json_params {
return $params;
}
+sub preload {
+ require_module($_) for values %{ WS_DISPATCH() };
+}
+
sub _find_resource {
my ($self, $path) = @_;
@@ -399,13 +404,12 @@ sub _find_resource {
# $module->rest_resources to get the resources array ref.
my $resources = {};
foreach my $module (values %{ $self->{dispatch_path} }) {
- eval("require $module") || die $@;
next if !$module->can('rest_resources');
$resources->{$module} = $module->rest_resources;
}
Bugzilla::Hook::process('webservice_rest_resources',
- { rpc => $self, resources => $resources });
+ { rpc => $self, resources => $resources }) if Bugzilla::request_cache->{bzapi};
# Use the resources hash from each module loaded earlier to determine
# which handler to use based on a regex match of the CGI path.
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index 1e5c521ee..000000000
--- a/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-FROM bugzilla/harmony-slim:20180318.1
-
-ARG CI
-ARG CIRCLE_SHA1
-ARG CIRCLE_BUILD_URL
-
-ENV CI=${CI}
-ENV CIRCLE_BUILD_URL=${CIRCLE_BUILD_URL}
-ENV CIRCLE_SHA1=${CIRCLE_SHA1}
-
-ENV LOG4PERL_CONFIG_FILE=log4perl-json.conf
-
-ENV PORT=8000
-
-# we run a loopback logging server on this TCP port.
-ENV LOGGING_PORT=5880
-
-WORKDIR /app
-COPY . .
-
-RUN mv /opt/bmo/local /app && \
- chown -R app:app /app && \
- perl -I/app -I/app/local/lib/perl5 -c -E 'use Bugzilla; BEGIN { Bugzilla->extensions }' && \
- perl -c /app/scripts/entrypoint.pl && \
- setcap 'cap_net_bind_service=+ep' /usr/sbin/httpd && \
- setcap 'cap_net_bind_service=+ep' /usr/bin/perl
-
-USER app
-
-RUN perl checksetup.pl --no-database --default-localconfig && \
- rm -rf /app/data /app/localconfig && \
- mkdir /app/data
-
-EXPOSE $PORT
-
-ENTRYPOINT ["/app/scripts/entrypoint.pl"]
-CMD ["httpd"]
diff --git a/Makefile.PL b/Makefile.PL
index 9452438ee..b0f7e88ce 100755
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -351,6 +351,22 @@ my %optional_features = (
},
},
},
+ sentry => {
+ description => 'Sentry Support',
+ prereqs => {
+ runtime => {
+ requires => { 'Log::Log4perl::Appender::Raven' => '0.006' },
+ },
+ },
+ },
+ datadog => {
+ description => 'Data Dog support',
+ prereqs => {
+ runtime => {
+ requires => { 'DataDog::DogStatsd' => '0.05' },
+ },
+ },
+ },
);
for my $file ( glob 'extensions/*/Config.pm' ) {
diff --git a/extensions/BugModal/template/en/default/bug_modal/edit.html.tmpl b/extensions/BugModal/template/en/default/bug_modal/edit.html.tmpl
index 4e740e35d..5d38d8340 100644
--- a/extensions/BugModal/template/en/default/bug_modal/edit.html.tmpl
+++ b/extensions/BugModal/template/en/default/bug_modal/edit.html.tmpl
@@ -463,17 +463,18 @@
container = 1
hide_on_view = bug.priority == "--" && bug.bug_severity == "normal"
help = "https://wiki.mozilla.org/BMO/UserGuide/BugFields#priority"
- label_for = "priority"
%]
[% INCLUDE bug_modal/field.html.tmpl
field = bug_fields.priority
field_type = constants.FIELD_TYPE_SINGLE_SELECT
+ aria_label = bug_fields.priority.description
no_indent = 1
inline = 1
%]
[% INCLUDE bug_modal/field.html.tmpl
field = bug_fields.bug_severity
field_type = constants.FIELD_TYPE_SINGLE_SELECT
+ aria_label = bug_fields.bug_severity.description
inline = 1
%]
[% UNLESS cf_hidden_in_product('cf_rank', bug.product, bug.component, bug) %]
@@ -497,7 +498,6 @@
label = "Status"
hide_on_edit = 1
help = "https://wiki.mozilla.org/BMO/UserGuide/BugStatuses"
- label_for = "bug_status"
%]
[% bug.bug_status FILTER html %]
[%+ bug.resolution FILTER html IF bug.resolution %]
@@ -549,6 +549,7 @@
prefix = prefix
field = bug_fields.bug_status
field_type = constants.FIELD_TYPE_SINGLE_SELECT
+ aria_label = bug_fields.bug_status.description
editable = bug.choices.bug_status.size > 1
values = bug.choices.bug_status
inline = 1
@@ -559,6 +560,7 @@
prefix = prefix
field = bug_fields.resolution
field_type = constants.FIELD_TYPE_SINGLE_SELECT
+ aria_label = bug_fields.resolution.description
editable = bug.choices.resolution.size > (bug.resolution == "" ? 0 : 1)
values = bug.choices.resolution
inline = 1
@@ -838,17 +840,18 @@
hide_on_view = (bug.rep_platform == 'All' && bug.op_sys == 'All')
|| (bug.rep_platform == 'Unspecified' && bug.op_sys == 'Unspecified')
help = "https://wiki.mozilla.org/BMO/UserGuide/BugFields#rep_platform"
- label_for = "rep_platform"
%]
[% INCLUDE bug_modal/field.html.tmpl
field = bug_fields.rep_platform
field_type = constants.FIELD_TYPE_SINGLE_SELECT
+ aria_label = bug_fields.rep_platform.description
inline = 1
no_indent = 1
%]
[% INCLUDE bug_modal/field.html.tmpl
field = bug_fields.op_sys
field_type = constants.FIELD_TYPE_SINGLE_SELECT
+ aria_label = bug_fields.op_sys.description
inline = 1
%]
[% WRAPPER bug_modal/field.html.tmpl
diff --git a/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl b/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl
index 38bde1d01..6726df409 100644
--- a/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl
+++ b/extensions/BugModal/template/en/default/bug_modal/field.html.tmpl
@@ -11,6 +11,7 @@
# field_type: (const) constants.FIELD_TYPE_*
# no_label: (boolean) don't output label
# label: (string) field label text (default: field_descs.${$field.name}
+ # aria_label: (string) invisible aria-label attribute
# view_only: (boolean) don't allow editing (default: determined from bug.check_can_change_field)
# edit_only: (boolean) always render the edit ui
# container: (boolean) output just a label and the content (eg. for multiple fields next to one label)
@@ -34,7 +35,6 @@
# class: (string) optional button class
# caption: (string) button caption
# hidden: (boolean) don't show the button (default: false)
- # label_for: (string) optional label for identifier
#%]
[%
@@ -109,19 +109,17 @@ END;
[% aria_labelledby_id = "${name}-help-link" %]
[% aria_labelledby_html = BLOCK %]aria-labelledby="[% aria_labelledby_id FILTER html %]"[% END %]
[% END %]
- [%~ IF label_for %]
- <label for="[% label_for FILTER html %]">
- [% END %]
[%~ label _ ":" FILTER html IF label %]
- [%~ IF label_for %]
- </label>
- [% END ~%]
[%~ IF help.defined %]
</a>
[% END %]
</div>
[% END %]
+ [% IF aria_label.defined %]
+ [% aria_labelledby_html = BLOCK %]aria-label="[% aria_label FILTER html %]"[% END %]
+ [% END %]
+
[%# read-only html %]
[% UNLESS edit_only %]
<div class="[% "value" IF !container %][% " edit-hide" IF editable %][% " container" IF container %]">
diff --git a/extensions/ComponentWatching/web/js/overlay.js b/extensions/ComponentWatching/web/js/overlay.js
index c0c540257..622749852 100644
--- a/extensions/ComponentWatching/web/js/overlay.js
+++ b/extensions/ComponentWatching/web/js/overlay.js
@@ -22,7 +22,12 @@ Bugzilla.ComponentWatching = class ComponentWatching {
constructor() {
this.buttons = document.querySelectorAll('button.component-watching');
- this.init();
+ // Check if the user is logged in and the API key is available. If not, remove the Watch buttons.
+ if (BUGZILLA.api_token) {
+ this.init();
+ } else {
+ this.buttons.forEach($button => $button.remove());
+ }
}
/**
diff --git a/extensions/OpenGraph/template/en/default/hook/robots-end.txt.tmpl b/extensions/OpenGraph/template/en/default/hook/robots-end.txt.tmpl
new file mode 100644
index 000000000..217924001
--- /dev/null
+++ b/extensions/OpenGraph/template/en/default/hook/robots-end.txt.tmpl
@@ -0,0 +1,4 @@
+[%# comment lines are required to produce line breaks %]
+#
+Allow: /extensions/OpenGraph/web/
+#
diff --git a/extensions/PhabBugz/lib/User.pm b/extensions/PhabBugz/lib/User.pm
index 1bf1a842d..da573be37 100644
--- a/extensions/PhabBugz/lib/User.pm
+++ b/extensions/PhabBugz/lib/User.pm
@@ -135,9 +135,9 @@ sub match {
my $phab_users = [];
my $result;
do {
- $result = request( 'user.search', $data );
- if ( exists $result->{result}{data} && @{ $result->{result}{data} } ) {
- foreach my $user ( @{ $result->{result}{data} } ) {
+ $result = request( 'user.search', $data )->{result};
+ if ( exists $result->{data} && @{ $result->{data} } ) {
+ foreach my $user ( @{ $result->{data} } ) {
push @$phab_users, $class->new($user);
}
}
diff --git a/extensions/PhabBugz/lib/Util.pm b/extensions/PhabBugz/lib/Util.pm
index 091475718..5ad8a5207 100644
--- a/extensions/PhabBugz/lib/Util.pm
+++ b/extensions/PhabBugz/lib/Util.pm
@@ -267,15 +267,27 @@ sub get_needs_review {
},
constraints => {
reviewerPHIDs => [$phab_user->phid],
- statuses => [qw( needs-review )],
+ statuses => ["open()"],
},
- order => 'newest',
+ order => 'newest',
}
);
ThrowCodeError('phabricator_api_error', { reason => 'Malformed Response' })
unless exists $diffs->{result}{data};
- return $diffs->{result}{data};
+ my @revisions;
+ foreach my $revision ( @{ $diffs->{result}{data} } ) {
+ foreach my $reviewer ( @{ $revision->{attachments}->{reviewers}->{reviewers} } ) {
+ if ( $reviewer->{reviewerPHID} eq $phab_user->phid
+ && $reviewer->{status} =~ /^(?:added|blocking)$/ )
+ {
+ push @revisions, $revision;
+ last;
+ }
+ }
+ }
+
+ return \@revisions;
}
1;
diff --git a/extensions/REMO/template/en/default/bug/create/comment-remo-it.txt.tmpl b/extensions/REMO/template/en/default/bug/create/comment-remo-it.txt.tmpl
deleted file mode 100644
index b95e05184..000000000
--- a/extensions/REMO/template/en/default/bug/create/comment-remo-it.txt.tmpl
+++ /dev/null
@@ -1,67 +0,0 @@
-[%# This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- #
- # This Source Code Form is "Incompatible With Secondary Licenses", as
- # defined by the Mozilla Public License, v. 2.0.
- #%]
-
-[% USE Bugzilla %]
-[% cgi = Bugzilla.cgi %]
-
-Name:
-[%+ cgi.param('name') %]
-
-Mozillians.org Profile:
-[%+ cgi.param('mozillian') %]
-
-Reps Profile:
-[%+ cgi.param('reps') || "-" %]
-
-Community Name:
-[%+ cgi.param('community') %]
-
-[% FOREACH item = cgi.param('items') %]
-[% IF item == "apps_email" || item == "domain" || item == "ssl" %]
-[% IF item == "apps_email" %]
-[% domain_title = domain_title _ ":: Google Apps Emails\n" %]
-[% END %]
-[% IF item == "domain" %]
-[% domain_title = domain_title _ ":: Domain Name\n" %]
-[% END %]
-[% IF item == "ssl" %]
-[% domain_title = domain_title _ ":: SSL\n" %]
-[% END %]
-[% END %]
-[% END %]
-
-[% FOREACH item = cgi.param('items') %]
-[% IF item == "hosting" %]
-:: Hosting
-
-Expected visits per month:
-[%+ cgi.param('hosting_visits') %]
-
-What will run on the hosting:
-[%+ cgi.param('hosting_running') %]
-
-Hosting data:
-[%+ cgi.param('hosting_data') || "-" %]
-
-[% ELSIF (item == "apps_email" || item == "domain" || item == "ssl")
- && domain_title %]
-[% domain_title FILTER html %]
-[% domain_title = "" %]
-Domain Name:
-[%+ cgi.param('domain_name') %]
-
-[% ELSIF item == "other" %]
-:: Other
-
-[%+ cgi.param('other_value') %]
-
-[% END %]
-[% END %]
-
-Comments:
-[%+ cgi.param('comments') || "-" %]
diff --git a/extensions/REMO/template/en/default/bug/create/create-remo-it.html.tmpl b/extensions/REMO/template/en/default/bug/create/create-remo-it.html.tmpl
deleted file mode 100644
index af3db60bc..000000000
--- a/extensions/REMO/template/en/default/bug/create/create-remo-it.html.tmpl
+++ /dev/null
@@ -1,263 +0,0 @@
-[%# This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- #
- # This Source Code Form is "Incompatible With Secondary Licenses", as
- # defined by the Mozilla Public License, v. 2.0.
- #%]
-
-[% PROCESS global/variables.none.tmpl %]
-
-[% PROCESS global/header.html.tmpl
- onload = "init()"
- title = "Community IT Request"
- style_urls = [ "extensions/REMO/web/styles/moz_reps.css" ]
-%]
-
-[% USE Bugzilla %]
-[% mandatory = '<span class="mandatory" title="Required">*</span>' %]
-
-<script [% script_nonce FILTER none %]>
-var Dom = YAHOO.util.Dom;
-
-function mandatory(elements) {
- result = true;
- for (i in elements) {
- element = elements[i];
-
- if (typeof(element) == "object") {
- missing = true;
- for (j = 0; j < element.length; j++) {
- if (element[j].checked) {
- missing = false;
- break;
- }
- }
-
- if (missing) {
- Dom.addClass(element[0].name, 'missing');
- } else {
- Dom.removeClass(element[0].name, 'missing');
- }
- } else {
- el = Dom.get(element);
- value = el.value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
- el.value = value;
-
- if (value == '') {
- Dom.addClass(element, 'missing');
- result = false;
- } else {
- Dom.removeClass(element, 'missing');
- }
- }
- }
- return result;
-}
-
-function submitForm() {
- fields = [ 'name', 'mozillian', 'community', document.forms.f.items ];
- if (Dom.get('item_hosting').checked) {
- fields.push('hosting_visits');
- fields.push('hosting_running');
- }
- if (Dom.get('item_domain').checked
- || Dom.get('item_apps_email').checked
- || Dom.get('item_ssl').checked
- ) {
- fields.push('domain_name');
- }
- if (Dom.get('item_other').checked) {
- fields.push('other_value');
- }
-
- if (!mandatory(fields)) {
- alert('Please enter all the required fields.');
- return false;
- }
-
- Dom.get('short_desc').value =
- "IT Request: " + Dom.get('community').value + ' (' + Dom.get('name').value + ')';
- return true;
-}
-
-function setItemVisibility() {
- if (Dom.get('item_hosting').checked) {
- Dom.removeClass('hosting', 'bz_default_hidden');
- } else {
- Dom.addClass('hosting', 'bz_default_hidden');
- }
- if (Dom.get('item_domain').checked
- || Dom.get('item_apps_email').checked
- || Dom.get('item_ssl').checked
- ) {
- var title = [];
- if (Dom.get('item_apps_email').checked)
- title.push('Google Apps Email');
- if (Dom.get('item_domain').checked)
- title.push('Domain');
- if (Dom.get('item_ssl').checked)
- title.push('SSL');
- Dom.get('domain_title').innerHTML = title.join(', ');
- Dom.removeClass('domain', 'bz_default_hidden');
- } else {
- Dom.addClass('domain', 'bz_default_hidden');
- }
- if (Dom.get('item_other').checked) {
- Dom.removeClass('other', 'bz_default_hidden');
- } else {
- Dom.addClass('other', 'bz_default_hidden');
- }
-}
-
-function init() {
- items = document.forms.f.items;
- for (i = 0; i < items.length; i++) {
- YAHOO.util.Event.on(items[i], 'click', setItemVisibility);
- }
- setItemVisibility();
-}
-
-</script>
-
-<noscript>
-<h1>Javascript is required to use this form.</h1>
-</noscript>
-
-<h1>Community IT Request</h1>
-
-<form method="post" action="post_bug.cgi" id="tmRequestForm" name="f">
-<input type="hidden" name="product" value="Mozilla Reps">
-<input type="hidden" name="component" value="Community IT Requests">
-<input type="hidden" name="bug_severity" value="normal">
-<input type="hidden" name="rep_platform" value="All">
-<input type="hidden" name="priority" value="--">
-<input type="hidden" name="op_sys" value="Other">
-<input type="hidden" name="version" value="unspecified">
-<input type="hidden" name="groups" value="mozilla-reps">
-<input type="hidden" name="format" value="[% format FILTER html %]">
-<input type="hidden" name="comment" id="comment" value="">
-<input type="hidden" name="short_desc" id="short_desc" value="">
-<input type="hidden" name="token" value="[% token FILTER html %]">
-
-<table id="reps-form">
-
-<tr class="odd">
- <th>Your Name:[% mandatory FILTER none %]</th>
- <td><input id="name" name="name" size="40" value="[% user.name FILTER html %]"></td>
-</tr>
-
-<tr class="even">
- <th>Mozillians.org Profile:[% mandatory FILTER none %]</th>
- <td><input id="mozillian" name="mozillian" size="40"></td>
-</tr>
-
-<tr class="odd">
- <th>Reps Profile (if applicable):</th>
- <td><input id="reps" name="reps" size="40"></td>
-</tr>
-
-<tr class="even">
- <th>Your Community's Name:[% mandatory FILTER none %]</th>
- <td><input id="community" name="community" size="40"></td>
-</tr>
-
-<tr class="odd">
- <th>
- Items Requesting:[% mandatory FILTER none %]
- </th>
- <td>
- <div id="items">
- <div>
- <input type="checkbox" name="items" value="hosting" id="item_hosting">
- <label for="item_hosting">Hosting</label>
- </div>
- <div>
- <input type="checkbox" name="items" value="apps_email" id="item_apps_email">
- <label for="item_apps_email">Google Apps Emails</label>
- </div>
- <div>
- <input type="checkbox" name="items" value="domain" id="item_domain">
- <label for="item_domain">Domain</label>
- </div>
- <div>
- <input type="checkbox" name="items" value="ssl" id="item_ssl">
- <label for="item_ssl">SSL</label>
- </div>
- <div>
- <input type="checkbox" name="items" value="other" id="item_other">
- <label for="item_other">Other</label>
- </div>
- </div>
- </td>
-</tr>
-
-<tbody id="hosting">
-<tr class="even">
- <th colspan="2">Hosting</th>
-</tr>
-<tr class="odd">
- <th>Expected visits per month:[% mandatory FILTER none %]</th>
- <td><input id="hosting_visits" name="hosting_visits" size="40"></td>
-</tr>
-<tr class="odd">
- <th>What will run on the hosting?:[% mandatory FILTER none %]</th>
- <td><textarea id="hosting_running" name="hosting_running" class="small"></textarea></td>
-</tr>
-<tr class="odd">
- <th>Data:</td>
- <td>
- Any data we can use to help choose the best solution (traffic graphs etc).<br>
- <textarea id="hosting_data" name="hosting_data" class="small"></textarea>
- </td>
-</tr>
-</tbody>
-
-<tbody id="domain">
-<tr class="even">
- <th colspan="2" id="domain_title">Domain</th>
-</tr>
-<tr class="odd">
- <th>Domain Name:[% mandatory FILTER none %]</th>
- <td><input id="domain_name" name="domain_name" size="40"></td>
-</tr>
-</tbody>
-
-<tbody id="other">
-<tr class="even">
- <th colspan="2">Other Item</th>
-</tr>
-<tr class="odd">
- <th>Other:[% mandatory FILTER none %]</th>
- <td><input id="other_value" name="other_value" size="40"></td>
-</tr>
-</tbody>
-
-<tr class="even">
- <th colspan="2">
- Other Comments
- </th>
-</tr>
-<tr class="even">
- <td colspan="2">
- Please explain why you'd like the hosting, and anything else this form does not include.<br>
- <textarea id="comments" name="comments" rows="4"></textarea>
- </td>
-</tr>
-
-<tr class="even">
- <td colspan="2">
- <input id="submit" type="submit" value="Submit" onclick="return submitForm()">
- </td>
-</tr>
-
-<tr class="even">
- <td width="35%">&nbsp;</td>
- <td width="65%">&nbsp;</td>
-</tr>
-
-</table>
-
-</form>
-
-[% PROCESS global/footer.html.tmpl %]
diff --git a/extensions/SiteMapIndex/template/en/default/hook/robots-end.txt.tmpl b/extensions/SiteMapIndex/template/en/default/hook/robots-end.txt.tmpl
index 818afb151..8805de0aa 100644
--- a/extensions/SiteMapIndex/template/en/default/hook/robots-end.txt.tmpl
+++ b/extensions/SiteMapIndex/template/en/default/hook/robots-end.txt.tmpl
@@ -1,2 +1,5 @@
+[%# comment lines are required to produce line breaks %]
+#
Allow: /data/SiteMapIndex/sitemap*.xml.gz
Sitemap: [% SITEMAP_URL %]
+#
diff --git a/rest.cgi b/rest.cgi
index 2df7e50bb..b64a6e6a3 100755
--- a/rest.cgi
+++ b/rest.cgi
@@ -24,6 +24,7 @@ BEGIN {
}
}
use Bugzilla::WebService::Server::REST;
+
Bugzilla->usage_mode(USAGE_MODE_REST);
local @INC = (bz_locations()->{extensionsdir}, @INC);
my $server = new Bugzilla::WebService::Server::REST;
diff --git a/skins/standard/global.css b/skins/standard/global.css
index d004f3fbe..e7028f892 100644
--- a/skins/standard/global.css
+++ b/skins/standard/global.css
@@ -1923,8 +1923,13 @@ a.controller {
}
.dropdown-panel .notifications label {
+ display: -webkit-box;
overflow: hidden;
max-height: 40px;
+ white-space: normal;
+ text-overflow: ellipsis;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
}
.dropdown-panel .notifications strong {
diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl
index 8fcb8a7ac..09a6c3601 100644
--- a/template/en/default/list/list.html.tmpl
+++ b/template/en/default/list/list.html.tmpl
@@ -144,6 +144,8 @@
[% PROCESS num_results %]
[% IF bugs.size == 0 %]
+ <p>We couldn't find any [% terms.bugs %] matching your search terms.
+ You could try searching with fewer or different terms.</p>
<ul class="zero_result_links">
<li>[% PROCESS enter_bug_link %]</li>
[% IF one_product.defined %]
diff --git a/template/en/default/robots.txt.tmpl b/template/en/default/robots.txt.tmpl
index 7ef83c0f1..a4f8aed24 100644
--- a/template/en/default/robots.txt.tmpl
+++ b/template/en/default/robots.txt.tmpl
@@ -19,6 +19,8 @@ Disallow: /show_bug.cgi*format=multiple*
Allow: /describecomponents.cgi
Allow: /describekeywords.cgi
+[% FILTER remove('#.*') %]
[% Hook.process("end") %]
+[% END %]
[% END %]