diff options
20 files changed, 79 insertions, 393 deletions
@@ -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%"> </td> - <td width="65%"> </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 %] +# @@ -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 %] |