aboutsummaryrefslogtreecommitdiff
path: root/template/en/default/global
diff options
context:
space:
mode:
Diffstat (limited to 'template/en/default/global')
-rw-r--r--template/en/default/global/banner.html.tmpl12
-rw-r--r--template/en/default/global/calendar.js.tmpl33
-rw-r--r--template/en/default/global/choose-classification.html.tmpl54
-rw-r--r--template/en/default/global/choose-product.html.tmpl61
-rw-r--r--template/en/default/global/code-error.html.tmpl463
-rw-r--r--template/en/default/global/common-links.html.tmpl111
-rw-r--r--template/en/default/global/confirm-action.html.tmpl53
-rw-r--r--template/en/default/global/confirm-user-match.html.tmpl191
-rw-r--r--template/en/default/global/docslinks.html.tmpl45
-rw-r--r--template/en/default/global/field-descs.none.tmpl142
-rw-r--r--template/en/default/global/footer.html.tmpl36
-rw-r--r--template/en/default/global/header.html.tmpl313
-rw-r--r--template/en/default/global/hidden-fields.html.tmpl46
-rw-r--r--template/en/default/global/js-products.html.tmpl21
-rw-r--r--template/en/default/global/message.html.tmpl28
-rw-r--r--template/en/default/global/message.txt.tmpl12
-rw-r--r--template/en/default/global/messages.html.tmpl927
-rw-r--r--template/en/default/global/reason-descs.none.tmpl28
-rw-r--r--template/en/default/global/select-menu.html.tmpl52
-rw-r--r--template/en/default/global/setting-descs.none.tmpl49
-rw-r--r--template/en/default/global/site-navigation.html.tmpl75
-rw-r--r--template/en/default/global/tabs.html.tmpl42
-rw-r--r--template/en/default/global/textarea.html.tmpl55
-rw-r--r--template/en/default/global/useful-links.html.tmpl74
-rw-r--r--template/en/default/global/user-error.html.tmpl1964
-rw-r--r--template/en/default/global/user.html.tmpl26
-rw-r--r--template/en/default/global/userselect.html.tmpl99
-rw-r--r--template/en/default/global/value-descs.js.tmpl21
-rw-r--r--template/en/default/global/value-descs.none.tmpl24
-rw-r--r--template/en/default/global/variables.none.tmpl33
30 files changed, 5090 insertions, 0 deletions
diff --git a/template/en/default/global/banner.html.tmpl b/template/en/default/global/banner.html.tmpl
new file mode 100644
index 0000000..37ec8c0
--- /dev/null
+++ b/template/en/default/global/banner.html.tmpl
@@ -0,0 +1,12 @@
+[%# 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.
+ #%]
+
+[%# Migration note: this file corresponds to the old Param 'bannerhtml' %]
+
+ <div id="banner">
+ </div>
diff --git a/template/en/default/global/calendar.js.tmpl b/template/en/default/global/calendar.js.tmpl
new file mode 100644
index 0000000..26f3fa0
--- /dev/null
+++ b/template/en/default/global/calendar.js.tmpl
@@ -0,0 +1,33 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # id: The id of the input field the calendar widget is to be assigned to.
+ #%]
+
+[%# This template exists because createCalendar accepts additional parameters
+ # which allow for localization. Please see the YUI documentation at
+ # http://developer.yahoo.com/yui/calendar/#internationalization for details.
+ # As an example, here's what you'd specify as additional parameters to
+ # localize for German calendars; replace the ellipsis ("...") by the original
+ # parameter (we cannot put it into the example because it'd break this
+ # template comment):
+ #
+ # createCalendar(...
+ # /* The weekday the week begins on; 0 is Sunday,
+ # * 1 is Monday and so on: */
+ # 1,
+ # /* Months, full names; first must be January: */
+ # ['Januar', 'Februar', 'März', 'April',
+ # 'Mai', 'Juni', 'Juli', 'August',
+ # 'September', 'Oktober', 'November', 'Dezember'],
+ # /* Weekdays, two-letter abbreviations; first must be
+ # * Sunday: */
+ # ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']);
+ #%]
+createCalendar('[% id FILTER js %]');
diff --git a/template/en/default/global/choose-classification.html.tmpl b/template/en/default/global/choose-classification.html.tmpl
new file mode 100644
index 0000000..76789a2
--- /dev/null
+++ b/template/en/default/global/choose-classification.html.tmpl
@@ -0,0 +1,54 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # classifications: an array of classification objects containing
+ # at least one product accessible by the user.
+ #%]
+
+[% IF target == "enter_bug.cgi" %]
+ [% title = "Select Classification" %]
+ [% subheader = "Please select the classification." %]
+[% END %]
+
+[% DEFAULT title = "Choose the classification" %]
+[% PROCESS global/header.html.tmpl %]
+
+<table>
+ <tr>
+ <th align="right">
+ <a href="[% target FILTER uri %]?classification=__all
+ [% IF cloned_bug_id %]&amp;cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
+ [%- IF format %]&amp;format=[% format FILTER uri %][% END %]">
+ All</a>:
+ </th>
+
+ <td valign="top">&nbsp;Show all products</td>
+ </tr>
+ <tr>
+ <th colspan="2">&nbsp;</th>
+ </tr>
+
+[% FOREACH class = classifications %]
+ <tr>
+ <th align="right">
+ <a href="[% target FILTER uri %]?classification=[% class.name FILTER uri -%]
+ [%- IF cloned_bug_id %]&amp;cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
+ [%- IF format %]&amp;format=[% format FILTER uri %][% END %]">
+ [% class.name FILTER html %]</a>:
+ </th>
+
+ [% IF class.description %]
+ <td valign="top">&nbsp;[% class.description FILTER html_light %]</td>
+ [% END %]
+ </tr>
+[% END %]
+
+</table>
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/global/choose-product.html.tmpl b/template/en/default/global/choose-product.html.tmpl
new file mode 100644
index 0000000..dfa0b00
--- /dev/null
+++ b/template/en/default/global/choose-product.html.tmpl
@@ -0,0 +1,61 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # classifications: array of hashes, with an 'object' key representing a
+ # classification object and 'products' the list of
+ # product objects the user can enter bugs into.
+ # target: the script that displays this template.
+ # cloned_bug_id: ID of the bug being cloned.
+ # format: the desired format to display the target.
+ #%]
+
+[% IF target == "enter_bug.cgi" %]
+ [% title = "Enter $terms.Bug" %]
+ [% h2 = BLOCK %]First, you must pick a product on which to enter [% terms.abug %]: [% END %]
+[% ELSIF target == "describecomponents.cgi" %]
+ [% title = "Browse" %]
+ [% h2 = "Select a product category to browse:" %]
+[% END %]
+
+[% DEFAULT title = "Choose a Product" %]
+[% PROCESS global/header.html.tmpl %]
+
+<h2>[% h2 FILTER html %]</h2>
+
+<table>
+
+[% FOREACH c = classifications %]
+ [% IF c.object %]
+ <tr>
+ <th colspan="2" align="left">[% c.object.name FILTER html %]:
+ [%+ c.object.description FILTER html_light %]</th>
+ </tr>
+ [% END %]
+
+ [% FOREACH p = c.products %]
+ <tr>
+ <th align="right" valign="top">
+ <a href="[% target %]?product=[% p.name FILTER uri -%]
+ [%- IF cloned_bug_id %]&amp;cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%]
+ [%- IF format %]&amp;format=[% format FILTER uri %][% END %]">
+ [% p.name FILTER html FILTER no_break %]</a>:&nbsp;
+ </th>
+
+ <td valign="top">[% p.description FILTER html_light %]</td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <th colspan="2">&nbsp;</th>
+ </tr>
+[% END %]
+
+</table>
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl
new file mode 100644
index 0000000..086f34a
--- /dev/null
+++ b/template/en/default/global/code-error.html.tmpl
@@ -0,0 +1,463 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # header_done: boolean. True if the header has already been printed.
+ # error: string. The tag of the error.
+ # variables: hash. Useful data about the problem. The keys are the variable
+ # names, and the values the variable values.
+ #%]
+
+[%# This is a list of all the possible code errors. Please keep them in
+ # alphabetical order by error tag, and leave a blank line between errors.
+ #
+ # Note that you must explicitly filter every single template variable
+ # in this file; if you do not wish to change it, use the "none" filter.
+ #%]
+
+[% DEFAULT title = "Internal Error" %]
+
+[% error_message = BLOCK %]
+ [% IF error == "auth_invalid_email" %]
+ [% title = "Invalid Email Address" %]
+ We received an email address (<b>[% addr FILTER html %]</b>)
+ that didn't pass our syntax checking for a legal email address,
+ when trying to create or update your account.
+ [% IF default %]
+ A legal address must contain exactly one '@',
+ and at least one '.' after the @.
+ [% ELSE %]
+ [%+ Param('emailregexpdesc') FILTER html_light %]
+ [% END %]
+ It also must not contain any illegal characters.
+
+ [% ELSIF error == "authres_unhandled" %]
+ The result value of [% value FILTER html %] was not handled by
+ the login code.
+
+ [% ELSIF error == "bad_arg" %]
+ Bad argument <code>[% argument FILTER html %]</code> sent to
+ <code>[% function FILTER html %]</code> function.
+
+ [% ELSIF error == "bug_error" %]
+ Trying to retrieve [% terms.bug %] [%+ bug.bug_id FILTER html %] returned
+ the error [% bug.error FILTER html %].
+
+ [% ELSIF error == "chart_data_not_generated" %]
+ [% admindocslinks = {'extraconfig.html' => 'Setting up Charting'} %]
+ [% IF product %]
+ Charts for the <em>[% product FILTER html %]</em> product are not
+ available yet because no charting data has been collected for it since it
+ was created.
+ [% ELSE %]
+ No charting data has been collected yet.
+ [% END %]
+ Please wait a day and try again.
+ If you're seeing this message after a day, then you should contact
+ <a href="mailto:[% Param('maintainer') %]">[% Param('maintainer') %]</a>
+ and reference this error.
+
+ [% ELSIF error == "chart_datafile_corrupt" %]
+ The chart data file [% file FILTER html %] is corrupt.
+
+ [% ELSIF error == "chart_dir_nonexistent" %]
+ One of the directories <tt>[% dir FILTER html %]</tt> and
+ <tt>[% graph_dir FILTER html %]</tt> does not exist.
+
+ [% ELSIF error == "chart_file_open_fail" %]
+ Unable to open the chart datafile <tt>[% filename FILTER html %]</tt>.
+
+ [% ELSIF error == "column_alter_nonexistent_fk" %]
+ You attempted to modify the foreign key for
+ [%+ table FILTER html %].[% column FILTER html %], but there is
+ no foreign key on that column.
+
+ [% ELSIF error == "column_not_null_without_default" %]
+ Failed adding the column [% name FILTER html %]:
+ You cannot add a NOT NULL column with no default to an existing table
+ unless you specify something for the <code>$init_value</code> argument.
+
+ [% ELSIF error == "column_not_null_no_default_alter" %]
+ You cannot alter the [% name FILTER html %] column to be NOT NULL
+ without specifying a default or something for $set_nulls_to, because
+ there are NULL values currently in it.
+
+ [% ELSIF error == "comment_extra_data_not_allowed" %]
+ You tried to set the <code>extra_data</code> field to
+ '[% extra_data FILTER html %]' but comments of type [% type FILTER html %]
+ do not accept an <code>extra_data</code> argument.
+
+ [% ELSIF error == "comment_extra_data_required" %]
+ Comments of type [% type FILTER html %] require an <code>extra_data</code>
+ argument to be set.
+
+ [% ELSIF error == "comment_extra_data_not_numeric" %]
+ You tried to set the <code>extra_data</code> field to
+ '[% extra_data FILTER html %]' but comments of type [% type FILTER html %]
+ require a numeric <code>extra_data</code> argument.
+
+ [% ELSIF error == "comment_type_invalid" %]
+ '[% type FILTER html %]' is not a valid comment type.
+
+ [% ELSIF error == "db_rename_conflict" %]
+ Name conflict: Cannot rename [% old FILTER html %] to
+ [%+ new FILTER html %] because [% new FILTER html %] already exists.
+
+ [% ELSIF error == "cookies_need_value" %]
+ Every cookie must have a value.
+
+ [% ELSIF error == "env_no_email" %]
+ [% terms.Bugzilla %] did not receive an email address from the
+ environment.
+ [% IF Param("auth_env_email") %]
+ This means that the '[% Param("auth_env_email") FILTER html %]'
+ environment variable was empty or did not exist.
+ [% ELSE %]
+ You need to set the "auth_env_email" parameter to the name of
+ the environment variable that will contain the user's email
+ address.
+ [% END %]
+
+ [% ELSIF error == "extension_must_be_subclass" %]
+ <code>[% package FILTER html %]</code> from
+ <code>[% filename FILTER html %]</code> is not a subclass of
+ <code>[% class FILTER html %]</code>.
+
+ [% ELSIF error == "extension_must_return_name" %]
+ <code>[% extension FILTER html %]</code> returned
+ <code>[% returned FILTER html %]</code>, which is not a valid name
+ for an extension. Extensions must return their name, not <code>1</code>
+ or a number. See the documentation of
+ <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Extension.html">Bugzilla::Extension</a>
+ for details.
+
+ [% ELSIF error == "extension_no_name" %]
+ We did not find a <code>NAME</code> method in
+ <code>[% package FILTER html %]</code> (loaded from
+ <code>[% filename FILTER html %]</code>). This means that
+ the extension has one or more of the following problems:
+
+ <ul>
+ <li><code>[% filename FILTER html %]</code> did not define a
+ <code>[% package FILTER html %]</code> package.</li>
+ <li><code>[% package FILTER html %]</code> did not define a
+ <code>NAME</code> method (or the <code>NAME</code> method
+ returned an empty string).</li>
+ </ul>
+
+ [% ELSIF error == "extern_id_conflict" %]
+ The external ID '[% extern_id FILTER html %]' already exists
+ in the database for '[% username FILTER html %]', but your
+ account source says that '[% extern_user FILTER html %]' has that ID.
+
+ [% ELSIF error == "field_choice_must_use_type" %]
+ When you call a class method on <code>Bugzilla::Field::Choice</code>,
+ you must call <code>Bugzilla::Field::Choice-&gt;type('some_field')</code>
+ to generate the right class (you can't call class methods directly
+ on Bugzilla::Field::Choice).
+
+ [% ELSIF error == "field_not_custom" %]
+ '[% field.description FILTER html %]' ([% field.name FILTER html %])
+ is not a custom field.
+
+ [% ELSIF error == "field_type_not_specified" %]
+ [% title = "Field Type Not Specified" %]
+ You must specify a type when creating a custom field.
+
+ [% ELSIF error == "illegal_field" %]
+ A legal [% field FILTER html %] was not set.
+
+ [% ELSIF error == "invalid_customfield_type" %]
+ [% title = "Invalid Field Type" %]
+ The type <em>[% type FILTER html %]</em> is not a valid field type.
+
+ [% ELSIF error == "invalid_feature" %]
+ [% title = "Invalid Feature Name" %]
+ [% feature FILTER html %] is not a valid feature name. See
+ <code>OPTIONAL_MODULES</code> in
+ <code>Bugzilla::Install::Requirements</code> for valid names.
+
+ [% ELSIF error == "invalid_flag_association" %]
+ [% title = "Invalid Flag Association" %]
+ Some flags do not belong to
+ [% IF attach_id %]
+ attachment [% attach_id FILTER html %].
+ [% ELSE %]
+ [%+ terms.bug %] [%+ bug_id FILTER html %].
+ [% END %]
+
+ [% ELSIF error == "invalid_series_id" %]
+ [% title = "Invalid Series" %]
+ The series_id [% series_id FILTER html %] is not valid. It may be that
+ this series has been deleted.
+
+ [% ELSIF error == "invalid_timestamp" %]
+ The entered timestamp <code>[% timestamp FILTER html %]</code> could not
+ be parsed into a valid date and time.
+
+ [% ELSIF error == "invalid_webservergroup" %]
+ There is no such group: [% group FILTER html %]. Check your $webservergroup
+ setting in [% constants.bz_locations.localconfig FILTER html %].
+
+ [% ELSIF error == "flag_unexpected_object" %]
+ [% title = "Object Not Recognized" %]
+ Flags cannot be set for objects of type [% caller FILTER html %].
+ They can only be set for [% terms.bugs %] and attachments.
+
+ [% ELSIF error == "flag_type_inactive" %]
+ [% title = "Inactive Flag Type" %]
+ The flag type [% type FILTER html %] is inactive and cannot be used
+ to create new flags.
+
+ [% ELSIF error == "flag_type_target_type_invalid" %]
+ The target type was neither <em>[% terms.bug %]</em> nor <em>attachment</em>
+ but rather <em>[% target_type FILTER html %]</em>.
+
+ [% ELSIF error == "invalid_field_name" %]
+ Can't use [% field FILTER html %] as a field name.
+
+ [% ELSIF error == "jobqueue_insert_failed" %]
+ [% title = "Job Queue Failure" %]
+ Inserting a <code>[% job FILTER html %]</code> job into the Job
+ Queue failed with the following error: [% errmsg FILTER html %]
+
+ [% ELSIF error == "jobqueue_no_job_mapping" %]
+ <code>Bugzilla::JobQueue</code> has not been configured to handle
+ the job "[% job FILTER html %]". You need to add this job type
+ to the <code>JOB_MAP</code> constant in <code>Bugzilla::JobQueue</code>,
+ perhaps by using the 'job_map' hook.
+
+ [% ELSIF error == "ldap_bind_failed" %]
+ Failed to bind to the LDAP server. The error message was:
+ <code>[% errstr FILTER html %]</code>
+
+ [% ELSIF error == "ldap_cannot_retreive_attr" %]
+ The specified LDAP attribute [% attr FILTER html %] was not found.
+
+ [% ELSIF error == "ldap_connect_failed" %]
+ Could not connect to the LDAP server(s) <code>[% server FILTER html %]</code>.
+
+ [% ELSIF error == "ldap_start_tls_failed" %]
+ Could not start TLS with LDAP server: <code>[% error FILTER html %]</code>.
+
+ [% ELSIF error == "ldap_search_error" %]
+ An error occurred while trying to search LDAP for
+ &quot;[% username FILTER html %]&quot;:
+ [% IF errstr %]
+ <code>[% errstr FILTER html %]</code>
+ [% ELSE %]
+ Unable to find user in LDAP
+ [% END %]
+
+ [% ELSIF error == "ldap_server_not_defined" %]
+ The LDAP server for authentication has not been defined.
+
+ [% ELSIF error == "mail_send_error" %]
+ There was an error sending mail from '[% mail.header('From') FILTER html %]'
+ to '[% mail.header('To') FILTER html %]':
+ [%+ msg FILTER html %]
+
+ [% ELSIF error == "missing_series_id" %]
+ Having inserted a series into the database, no series_id was returned for
+ it. Series: [% series.category FILTER html %] /
+ [%+ series.subcategory FILTER html %] /
+ [%+ series.name FILTER html %].
+
+ [% ELSIF error == "object_dep_sort_loop" %]
+ There is a loop in VALIDATOR_DEPENDENCIES involving
+ '[%+ field FILTER html %]'. Here are the fields we considered:
+ [%+ considered.join(', ') FILTER html %].
+
+ [% ELSIF error == "param_invalid" %]
+ [% title = "Invalid Parameter" %]
+ <code>[% param FILTER html %]</code> is not a valid parameter
+ for the [% function FILTER html %] function.
+
+ [% ELSIF error == "param_must_be_numeric" %]
+ [% title = "Invalid Parameter" %]
+ Invalid parameter <code>[% param FILTER html %]</code> passed to
+ <code>[% function FILTER html %]</code>: It must be numeric.
+
+ [% ELSIF error == "param_required" %]
+ [% title = "Missing Parameter" %]
+ The function <code>[% function FILTER html %]</code> requires
+ a <code>[% param FILTER html %]</code> argument, and that
+ argument was not set.
+
+ [% ELSIF error == "params_required" %]
+ [% title = "Missing Parameter" %]
+ The function <code>[% function FILTER html %]</code> requires
+ that you set one of the following parameters:
+ <code>[% params.join(', ') FILTER html %]</code>
+
+ [% ELSIF error == "product_empty_group_controls" %]
+ [% title = "Missing Group Controls" %]
+ New settings must be defined to edit group controls for
+ the [% group.name FILTER html %] group.
+
+ [% ELSIF error == "product_illegal_group_control" %]
+ [% title = "Illegal Group Control" %]
+ '[% value FILTER html %]' is not a legal value for
+ the '[% field FILTER html %]' field.
+
+ [% ELSIF error == "protection_violation" %]
+ The function <code>[% function FILTER html %]</code> was called
+
+ [% IF argument %]
+ with the argument <code>[% argument FILTER html %]</code>
+ [% END %]
+
+ from
+
+ [% IF caller %]
+ <code>[%+ caller FILTER html %]</code>, which is
+ [% END %]
+
+ outside the package. This function may only be called from
+ a subclass of <code>[% superclass FILTER html %]</code>.
+
+ [% ELSIF error == "radius_preparation_error" %]
+ An error occurred while preparing for a RADIUS authentication request:
+ <code>[% errstr FILTER html %]</code>.
+
+ [% ELSIF error == "search_cp_without_op" %]
+ Search argument f[% id FILTER html %] is "CP" but there is no
+ matching "OP" before it.
+
+ [% ELSIF error == "search_invalid_joiner" %]
+ '[% joiner FILTER html %]' is not a valid joiner for a search.
+
+ [% ELSIF error == "setting_info_invalid" %]
+ To create a new setting, you must supply a setting name, a list of
+ value/sortindex pairs, and the default value.
+
+ [% ELSIF error == "setting_name_invalid" %]
+ The setting name <em>[% name FILTER html %]</em> is not a valid
+ option. Setting names must begin with a letter, and contain only
+ letters, digits, or the symbols '_', '-', '.', or ':'.
+
+ [% ELSIF error == "setting_subclass_invalid" %]
+ There is no such Setting subclass as
+ <code>[% subclass FILTER html %]</code>.
+
+ [% ELSIF error == "setting_value_invalid" %]
+ The value "<code>[% value FILTER html %]</code>" is not in the list of
+ legal values for the <em>[% name FILTER html %]</em> setting.
+
+ [% ELSIF error == "token_generation_error" %]
+ Something is seriously wrong with the token generation system.
+
+ [% ELSIF error == "cancel_token_does_not_exist" %]
+ The token to be cancelled does not exist.
+
+ [% ELSIF error == "template_error" %]
+ [% template_error_msg FILTER html %]
+
+ [% ELSIF error == "template_invalid" %]
+ Template with invalid file name found in hook call: [% name FILTER html %].
+
+ [% ELSIF error == "unable_to_retrieve_password" %]
+ I was unable to retrieve your old password from the database.
+
+ [% ELSIF error == "undefined_field" %]
+ Form field [% field FILTER html %] was not defined.
+
+ [% ELSIF error == "unknown_method" %]
+ The requested method '[% method FILTER html %]' was not found.
+
+ [% ELSIF error == "usage_mode_invalid" %]
+ '[% invalid_usage_mode FILTER html %]' is not a valid usage mode.
+
+ [% ELSIF error == "must_be_patch" %]
+ [% title = "Attachment Must Be Patch" %]
+ Attachment #[% attach_id FILTER html %] must be a patch.
+
+ [% ELSIF error == "not_in_transaction" %]
+ Attempted to end transaction without starting one first.
+
+ [% ELSIF error == "invalid_post_bug_submit_action" %]
+ Invalid setting for post_bug_submit_action
+
+ [% ELSIF error == "search_field_operator_unsupported" %]
+ [% terms.Bugzilla %] does not support the search type
+ "[% operator FILTER html %]".
+
+ [% ELSE %]
+ [%# Try to find hooked error messages %]
+ [% error_message = Hook.process("errors") %]
+ [% IF NOT error_message %]
+ [% title = "Internal error" %]
+ An internal error has occurred, but [% terms.Bugzilla %] doesn't know
+ what <code>[% error FILTER html %]</code> means.
+
+ If you are a [% terms.Bugzilla %] end-user seeing this message, please save
+ this page and send it to [% Param('maintainer') %].
+ [% ELSE %]
+ [% error_message FILTER none %]
+ [% END %]
+ [% END %]
+[% END %]
+
+[%# We only want HTML error messages for ERROR_MODE_WEBPAGE %]
+[% USE Bugzilla %]
+[% IF Bugzilla.error_mode != constants.ERROR_MODE_WEBPAGE %]
+ [% IF Bugzilla.usage_mode == constants.USAGE_MODE_BROWSER %]
+ [% error_message FILTER none %]
+ [% ELSE %]
+ [% error_message FILTER txt %]
+ [% END %]
+ [% RETURN %]
+[% END %]
+
+[% UNLESS header_done %]
+ [% PROCESS global/header.html.tmpl %]
+[% END %]
+
+[% PROCESS global/docslinks.html.tmpl
+ docslinks = docslinks
+ admindocslinks = admindocslinks
+%]
+
+<p>
+ An unexpected error occurred. This could be a temporary problem, or some code
+ is behaving incorrectly. If this problem persists, please email this page
+ to <a href="mailto:[% Param("maintainer") %]">[% Param("maintainer") %]</a>
+ with details of what you were doing at the time this message appeared.
+</p>
+
+<tt>
+ <script type="text/javascript"> <!--
+ document.write("<p>URL: " +
+ document.location.href.replace(/&/g,"&amp;")
+ .replace(/</g,"&lt;")
+ .replace(/>/g,"&gt;") + "</p>");
+ // -->
+ </script>
+</tt>
+
+<table cellpadding="20">
+ <tr>
+ <td id="error_msg" class="throw_error">
+ [% error_message FILTER none %]
+ </td>
+ </tr>
+</table>
+
+<p>Traceback:</p>
+<pre>[% traceback FILTER html %]</pre>
+
+[% IF variables %]
+ <pre>
+Variables:
+ [% FOREACH key = variables.keys %]
+ [%+ key FILTER html %]: [%+ variables.$key FILTER html %]
+ [% END %]
+ </pre>
+[% END %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/global/common-links.html.tmpl b/template/en/default/global/common-links.html.tmpl
new file mode 100644
index 0000000..800fd59
--- /dev/null
+++ b/template/en/default/global/common-links.html.tmpl
@@ -0,0 +1,111 @@
+[%# 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.
+ #%]
+
+[% DEFAULT qs_suffix = "" %]
+[% USE Bugzilla %]
+
+<ul class="links">
+ <li><a href="./">Home</a></li>
+ <li><span class="separator">| </span><a href="enter_bug.cgi">New</a></li>
+ <li><span class="separator">| </span><a href="describecomponents.cgi">Browse</a></li>
+ <li><span class="separator">| </span><a href="query.cgi">Search</a></li>
+
+ <li class="form">
+ <span class="separator">| </span>
+ <form action="buglist.cgi" method="get"
+ onsubmit="if (this.quicksearch.value == '')
+ { alert('Please enter one or more search terms first.');
+ return false; } return true;">
+ <input type="hidden" id="no_redirect[% qs_suffix FILTER html %]" name="no_redirect" value="0">
+ <script type="text/javascript">
+ if (history && history.replaceState) {
+ var no_redirect = document.getElementById("no_redirect[% qs_suffix FILTER js %]");
+ no_redirect.value = 1;
+ }
+ </script>
+ <input class="txt" type="text" id="quicksearch[% qs_suffix FILTER html %]" name="quicksearch"
+ title="Quick Search" value="[% quicksearch FILTER html %]">
+ <input class="btn" type="submit" value="Search"
+ id="find[% qs_suffix FILTER html %]">
+ [%-# Work around FF bug: keep this on one line %]</form>
+ <a href="page.cgi?id=quicksearch.html" title="Quicksearch Help">[?]</a></li>
+
+ <li><span class="separator">| </span><a href="report.cgi">Reports</a></li>
+
+ <li>
+ [% IF Param('shutdownhtml') || Bugzilla.has_flags %]
+ <span class="separator">| </span>
+ [% IF user.id %]
+ <a href="request.cgi?requester=[% user.login FILTER uri %]&amp;requestee=
+ [% user.login FILTER uri %]&amp;do_union=1&amp;group=type&amp;action=queue">My Requests</a>
+ [% ELSE %]
+ <a href="request.cgi">Requests</a>
+ [% END %]
+ [% END %]
+ [%-# Work around FF bug: keep this on one line %]</li>
+
+ [% IF user.login %]
+ <li><span class="separator">| </span><a href="userprefs.cgi">Preferences</a></li>
+ [% IF user.in_group('tweakparams') || user.in_group('editusers') || user.can_bless
+ || (Param('useclassification') && user.in_group('editclassifications'))
+ || user.in_group('editcomponents') || user.in_group('admin') || user.in_group('creategroups')
+ || user.in_group('editkeywords') || user.in_group('bz_canusewhines')
+ || user.get_products_by_permission("editcomponents").size %]
+ <li><span class="separator">| </span><a href="admin.cgi">Administration</a></li>
+ [% END %]
+
+ [% PROCESS link_to_documentation %]
+
+ <li>
+ <span class="separator">| </span>
+ [% IF user.authorizer.can_logout %]
+ <a href="index.cgi?logout=1">Log&nbsp;out</a>
+ [% ELSE %]
+ Logged&nbsp;in&nbsp;as
+ [% END %]
+ [% IF sudoer %]
+ [%+ sudoer.login FILTER html %] (<b>impersonating
+ [%+ user.login FILTER html %]</b>
+ <a href="relogin.cgi?action=end-sudo">end session</a>)
+ [% ELSE %]
+ [%+ user.login FILTER html %]
+ [% END %]
+ [%-# Work around FF bug: keep this on one line %]</li>
+ [% ELSE %]
+
+ [% PROCESS link_to_documentation %]
+
+ [% IF Param('createemailregexp')
+ && user.authorizer.user_can_create_account %]
+ <li id="new_account_container[% qs_suffix FILTER html %]">
+ <span class="separator">| </span>
+ <a href="createaccount.cgi">New&nbsp;Account</a>
+ </li>
+ [% END %]
+
+ [%# Only display one login form when we're on a LOGIN_REQUIRED page. That
+ # way, we're guaranteed that the user will use the form that has
+ # hidden_fields in it (the center form) instead of this one. Also, it's
+ # less confusing to have one form (as opposed to three) when you're
+ # required to log in.
+ #%]
+ [% IF user.authorizer.can_login && !Bugzilla.page_requires_login %]
+ [% PROCESS "account/auth/login-small.html.tmpl" %]
+ [% END %]
+ [% END %]
+</ul>
+
+[% Hook.process("link-row") %]
+[% BLOCK link_to_documentation %]
+ [% IF doc_section && Param('docs_urlbase') %]
+ <li>
+ <span class="separator">| </span>
+ <a href="[% docs_urlbase _ doc_section FILTER html %]" target="_blank">Help</a>
+ </li>
+ [% END %]
+[% END %]
diff --git a/template/en/default/global/confirm-action.html.tmpl b/template/en/default/global/confirm-action.html.tmpl
new file mode 100644
index 0000000..9d89d8c
--- /dev/null
+++ b/template/en/default/global/confirm-action.html.tmpl
@@ -0,0 +1,53 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # script_name: the script generating this warning.
+ # token: a valid token for the current action.
+ # reason: reason of the failure.
+ #%]
+
+[% PROCESS global/header.html.tmpl title = "Suspicious Action"
+ style_urls = ['skins/standard/global.css'] %]
+
+<div class="throw_error">
+<!--reason=[%reason FILTER html %]-->
+ [% IF reason == "expired_token" %]
+ Your changes have been rejected because you exceeded the time limit
+ of [% constants.MAX_TOKEN_AGE FILTER html %] days before submitting your
+ changes to [% script_name FILTER html %]. Your page may have been displayed
+ for too long, or old changes have been resubmitted by accident.
+
+ [% ELSIF reason == "missing_token" %]
+ It looks like you didn't come from the right page.
+ One reason could be that you entered the URL in the address bar of your
+ web browser directly, which should be safe. Another reason could be that
+ you clicked on a URL which redirected you here <b>without your consent</b>.
+
+ [% ELSIF reason == "invalid_token" %]
+ You submitted changes to [% script_name FILTER html %] with an invalid
+ token, which may indicate that someone tried to abuse you, for instance
+ by making you click on a URL which redirected you here <b>without your
+ consent</b>.
+ [% END %]
+ <p>
+ Are you sure you want to commit these changes?
+ </p>
+</div>
+
+<form name="check" id="check" method="post" action="[% script_name FILTER html %]">
+ [% PROCESS "global/hidden-fields.html.tmpl"
+ exclude="^(Bugzilla_login|Bugzilla_password|token)$" %]
+ <input type="hidden" name="token" value="[% token FILTER html %]">
+ <input type="submit" id="confirm" value="Yes, Confirm Changes">
+</form>
+
+<p><a href="index.cgi">No, throw away these changes</a> (you will be redirected
+to the home page).</p>
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/global/confirm-user-match.html.tmpl b/template/en/default/global/confirm-user-match.html.tmpl
new file mode 100644
index 0000000..c31567a
--- /dev/null
+++ b/template/en/default/global/confirm-user-match.html.tmpl
@@ -0,0 +1,191 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # fields: hash/record; the fields being matched, each of which has:
+ # type: single|multi: whether or not the user can select multiple matches
+ # flag_type: for flag requestee fields, the type of flag being requested
+ # matches: hash; Hierarchical. The levels go like this:
+ # field_name {
+ # pattern_text {
+ # 'users' = @user_list (user objects)
+ # 'status' = success|fail|trunc (result of search.
+ # 'trunc' (truncated) means max was reached)
+ # }
+ # }
+ # script: string; The name of the calling script, used to create a
+ # self-referential URL
+ #%]
+
+[%# This lists fields which use the user auto-completion feature and which
+ # are not listed in field_descs. %]
+[% field_labels = { # Used by editcomponents.cgi
+ "initialcc" => "Default CC List",
+ "initialowner" => "Default Assignee",
+ "initialqacontact" => "Default QA Contact",
+ # Used by process_bug.cgi
+ "masscc" => "CC List",
+ # Used by request.cgi
+ "requester" => "Requester",
+ "requestee" => "Requestee",
+ # Used by userprefs.cgi
+ "new_watchedusers" => "Watch List",
+
+ }
+%]
+[% IF matchsuccess == 1 %]
+ [% PROCESS global/header.html.tmpl title="Confirm Match" %]
+
+ [% USE Bugzilla %]
+
+ <form method="post"
+ [% IF script -%]
+ action="[% script %]"
+ [%- END -%]
+ [% IF Bugzilla.cgi.param("data") %]
+ enctype="multipart/form-data"
+ [% END %]
+ >
+
+ <p>
+ [% IF matchmultiple %]
+ [% terms.Bugzilla %] cannot make a conclusive match for one or more
+ of the names and/or email addresses you entered on the previous page.
+ <br>Please examine the lists of potential matches below and select the
+ ones you want,
+ [% ELSE %]
+ [% terms.Bugzilla %] is configured to require verification whenever
+ you enter a name or partial email address.
+ <br>Below are the names/addresses you entered and the matched accounts.
+ Please confirm that they are correct,
+ [% END %]
+ or go back to the previous page to revise the names you entered.
+ </p>
+[% ELSE %]
+ [% PROCESS global/header.html.tmpl title="Match Failed" %]
+ <p>
+ [% terms.Bugzilla %] was unable to make any match at all for one or more of
+ the names and/or email addresses you entered on the previous page.
+ [% IF !user.id %]
+ <b>Note: You are currently logged out. Only exact matches against e-mail
+ addresses will be performed.</b>
+ [% END %]
+ </p>
+ <p>Please go back and try other names or email addresses.</p>
+[% END %]
+
+ <table border="0">
+ <tr>
+ <td colspan="2">
+ <hr width="100%" size="1">
+ </td>
+ </tr>
+
+ [%# this is messy to allow later expansion %]
+
+ [% FOREACH field = matches %]
+ <tr>
+ <td align="left" valign="top">
+ [% PROCESS field_names field_name=field.key %]:
+ </td>
+ <td align="left" valign="top">
+ [% FOREACH query = field.value %]
+ <div class="user_match">
+ <b>[% query.key FILTER html %]</b>
+ [% IF query.value.users.size %]
+ [% IF query.value.users.size > 1 %]
+ [% IF query.value.status == 'fail' %]
+ <font color="#FF0000">
+ matches multiple users.
+ </font>
+ Please go back and try again with a more specific
+ name/address.
+ [% ELSE %]
+ [% IF query.value.status == 'trunc' %]
+ matched
+ more than the maximum
+ of [% query.value.users.size %] users:<br>
+ [% ELSE %]
+ matched:<br>
+ [% END %]
+ <select name="[% field.key FILTER html %]"
+ id="[% field.key FILTER html %]"
+ [% IF fields.${field.key}.type == 'multi' %]
+ multiple="multiple"
+ [% IF query.value.users.size > 5 %]
+ size="5"
+ [% ELSE %]
+ size="[% query.value.users.size %]"
+ [% END %]
+ [% END %]
+ >
+ [% FOREACH match = query.value.users %]
+ <option value="[% match.login FILTER html %]">
+ [%- match.identity FILTER html -%]
+ </option>
+ [% END %]
+ </select>
+ [% END %]
+ [% ELSE %]
+ matched
+ <b>[% query.value.users.0.identity FILTER html %]</b>
+ [% END %]
+ [% ELSE %]
+ [% IF query.key.length < 3 %]
+ <font color="#FF0000">was too short for substring match
+ (minimum 3 characters)</font>
+ [% ELSE %]
+ <font color="#FF0000">did not match anything</font>
+ [% END %]
+ [% END %]
+ </div>
+ [% END %]
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <hr width="100%" size="1">
+ </td>
+ </tr>
+ [% END %]
+
+ </table>
+
+[% IF matchsuccess == 1 %]
+
+ [% SET exclude_these = ['Bugzilla_login', 'Bugzilla_password'] %]
+ [% FOREACH key IN matches.keys %]
+ [% exclude_these.push(key) IF cgi.param(key) == '' %]
+ [% END %]
+ [% SET exclude = '^' _ exclude_these.join('|') _ '$' %]
+ [% PROCESS "global/hidden-fields.html.tmpl" exclude = exclude %]
+
+ <p>
+ <input type="submit" id="continue" value="Continue">
+ </p>
+
+ </form>
+
+[% END %]
+
+[% PROCESS global/footer.html.tmpl %]
+
+
+[% BLOCK field_names %]
+
+ [% IF field_descs.$field_name %]
+ [% field_descs.$field_name FILTER html %]
+ [% ELSIF field_labels.$field_name %]
+ [% field_labels.$field_name FILTER html %]
+ [% ELSIF field_name.match("^requestee") %]
+ [% fields.${field_name}.flag_type.name FILTER html %] requestee
+ [% ELSE %]
+ [% field_name FILTER html %]
+ [% END %]
+
+[% END %]
diff --git a/template/en/default/global/docslinks.html.tmpl b/template/en/default/global/docslinks.html.tmpl
new file mode 100644
index 0000000..c2cc830
--- /dev/null
+++ b/template/en/default/global/docslinks.html.tmpl
@@ -0,0 +1,45 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # docslinks: hash. Hash keys will be used as text of the documentation links,
+ # hash values will be used as links to the document, relative to
+ # the main Bugzilla documentation directory.
+ # Example: If you want a 'FAQ' link to point to, the "faq-general"
+ # named anchor on faq.html, assign
+ # { 'FAQ' => "faq.html#faq-general" }
+ # to docslinks.
+ # You may only link to sections by their given ID; it is not allowed
+ # to link to a section which is not given an ID (thus getting
+ # assigned an automatically generated ID). Otherwise, the link
+ # would break on a recompilation of the documentation.
+ # admindocslinks: hash. Same as docslinks, but will only be displayed to
+ # members of the admin group.
+ #%]
+
+[% IF Param('docs_urlbase') &&
+ docslinks.keys.size || (admindocslinks.keys.size && user.in_group('admin')) %]
+ <div id="docslinks">
+ <h2>Related documentation</h2>
+ <ul>
+ [% IF user.in_group('admin') %]
+ [% PROCESS docslinkslist docstype = admindocslinks %]
+ [% END %]
+ [% PROCESS docslinkslist docstype = docslinks %]
+ </ul>
+ </div>
+[% END %]
+
+[% BLOCK docslinkslist %]
+ [% FOREACH docslink = docstype.keys %]
+ <li>
+ <a href="[% docs_urlbase FILTER html %]
+ [% docslink FILTER none %]">[% docstype.$docslink FILTER html %]</a>
+ </li>
+ [% END %]
+[% END %]
diff --git a/template/en/default/global/field-descs.none.tmpl b/template/en/default/global/field-descs.none.tmpl
new file mode 100644
index 0000000..f1e0747
--- /dev/null
+++ b/template/en/default/global/field-descs.none.tmpl
@@ -0,0 +1,142 @@
+[%# 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.
+ #%]
+
+[%# Remember to PROCESS rather than INCLUDE this template. %]
+
+[% SET search_descs = {
+ "noop" => "---",
+ "equals" => "is equal to",
+ "notequals" => "is not equal to",
+ "anyexact" => "is equal to any of the strings",
+ "substring" => "contains the string",
+ "casesubstring" => "contains the string (exact case)",
+ "notsubstring" => "does not contain the string",
+ "anywordssubstr" => "contains any of the strings",
+ "allwordssubstr" => "contains all of the strings",
+ "nowordssubstr" => "contains none of the strings",
+ "regexp" => "matches regular expression",
+ "notregexp" => "does not match regular expression",
+ "lessthan" => "is less than",
+ "lessthaneq" => "is less than or equal to",
+ "greaterthan" => "is greater than",
+ "greaterthaneq" => "is greater than or equal to",
+ "anywords" => "contains any of the words",
+ "allwords" => "contains all of the words",
+ "nowords" => "contains none of the words",
+ "changedbefore" => "changed before",
+ "changedafter" => "changed after",
+ "changedfrom" => "changed from",
+ "changedto" => "changed to",
+ "changedby" => "changed by",
+ "matches" => "matches",
+ "notmatches" => "does not match",
+} %]
+
+[% field_types = { ${constants.FIELD_TYPE_UNKNOWN} => "Unknown Type",
+ ${constants.FIELD_TYPE_FREETEXT} => "Free Text",
+ ${constants.FIELD_TYPE_SINGLE_SELECT} => "Drop Down",
+ ${constants.FIELD_TYPE_MULTI_SELECT} => "Multiple-Selection Box",
+ ${constants.FIELD_TYPE_TEXTAREA} => "Large Text Box",
+ ${constants.FIELD_TYPE_DATETIME} => "Date/Time",
+ ${constants.FIELD_TYPE_BUG_ID} => "$terms.Bug ID",
+ } %]
+
+[% IF in_template_var %]
+ [% PROCESS "global/value-descs.none.tmpl" %]
+ [% SET vars.value_descs = value_descs %]
+ [% SET vars.terms = terms %]
+
+ [%# field_descs is loaded as a global template variable and cached
+ # across all templates--see VARIABLES in Bugzilla/Template.pm.
+ #%]
+ [% vars.field_descs = {
+ "[Bug creation]" => "[$terms.Bug creation]",
+ "actual_time" => "Actual Hours",
+ "alias" => "Alias",
+ "assigned_to" => "Assignee",
+ "assigned_to_realname" => "Assignee Real Name",
+ "attach_data.thedata" => "Attachment data",
+ "attachments.description" => "Attachment description",
+ "attachments.filename" => "Attachment filename",
+ "attachments.mimetype" => "Attachment mime type",
+ "attachments.ispatch" => "Attachment is patch",
+ "attachments.isobsolete" => "Attachment is obsolete",
+ "attachments.isprivate" => "Attachment is private",
+ "attachments.submitter" => "Attachment creator",
+ "blocked" => "Blocks",
+ "bug_file_loc" => "URL",
+ "bug_group" => "Group",
+ "bug_id" => "$terms.Bug ID",
+ "bug_severity" => "Severity",
+ "bug_status" => "Status",
+ "changeddate" => "Changed",
+ "cc" => "CC",
+ "classification" => "Classification",
+ "cclist_accessible" => "CC list accessible",
+ "commenter" => "Commenter",
+ "component_id" => "Component ID",
+ "component" => "Component",
+ "content" => "Content",
+ "creation_ts" => "Creation date",
+ "days_elapsed" => "Days since $terms.bug changed",
+ "deadline" => "Deadline",
+ "delta_ts" => "Changed",
+ "dependson" => "Depends on",
+ "dup_id" => "Duplicate",
+ "estimated_time" => "Orig. Est.",
+ "everconfirmed" => "Ever confirmed",
+ "flagtypes.name" => "Flags",
+ "keywords" => "Keywords",
+ "longdesc" => "Comment",
+ "longdescs.count" => "Number of Comments",
+ "longdescs.isprivate" => "Comment is private",
+ "newcc" => "CC",
+ "op_sys" => "OS",
+ "opendate" => "Opened",
+ "owner_idle_time" => "Time Since Assignee Touched",
+ "percentage_complete" => "%Complete",
+ "priority" => "Priority",
+ "product_id" => "Product ID",
+ "product" => "Product",
+ "qa_contact" => "QA Contact",
+ "qa_contact_realname" => "QA Contact Real Name",
+ "remaining_time" => "Hours Left",
+ "rep_platform" => "Hardware",
+ "reporter" => "Reporter",
+ "reporter_accessible" => "Reporter accessible",
+ "reporter_realname" => "Reporter Real Name",
+ "requestees.login_name" => "Flag Requestee",
+ "resolution" => "Resolution",
+ "see_also" => "See Also",
+ "setters.login_name" => "Flag Setter",
+ "setting" => "Setting",
+ "settings" => "Settings",
+ "short_desc" => "Summary",
+ "short_short_desc" => "Summary",
+ "status_whiteboard" => "Whiteboard",
+ "tag" => "Tags",
+ "target_milestone" => "Target Milestone",
+ "version" => "Version",
+ "work_time" => "Hours Worked",
+ } %]
+
+ [%# Also include any custom fields or fields which don't have a
+ Description here, by copying their Description from the
+ database. If you want to override this for your language
+ or your installation, just use a hook. %]
+ [% UNLESS Param('shutdownhtml') %]
+ [% FOREACH bz_field = bug_fields.values %]
+ [% SET vars.field_descs.${bz_field.name} = bz_field.description
+ IF !vars.field_descs.${bz_field.name}.defined %]
+ [% END %]
+ [% END %]
+
+ [% PROCESS "bug/field-help.none.tmpl" %]
+[% END %]
+
+[% Hook.process("end") %]
diff --git a/template/en/default/global/footer.html.tmpl b/template/en/default/global/footer.html.tmpl
new file mode 100644
index 0000000..e161a06
--- /dev/null
+++ b/template/en/default/global/footer.html.tmpl
@@ -0,0 +1,36 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # This template has no interface. However, you must fulfill the interface to
+ # global/useful-links.html.tmpl.
+ #%]
+
+ [% Hook.process('main-end') %]
+</div>
+
+[%# Migration note: below this point, this file corresponds to the old Param
+ # 'footerhtml'
+ #%]
+
+<div id="footer">
+ <div class="intro">[% Hook.process('intro') %]</div>
+
+[%# Migration note: the old param 'blurbhtml' goes here %]
+
+[%# Migration note: useful-links.html.tmpl corresponds to %commandmenu% %]
+
+ [% PROCESS "global/useful-links.html.tmpl" %]
+
+ <div class="outro">[% Hook.process('outro') %]</div>
+</div>
+
+[% Hook.process("end") %]
+
+</body>
+</html>
diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl
new file mode 100644
index 0000000..dceb44d
--- /dev/null
+++ b/template/en/default/global/header.html.tmpl
@@ -0,0 +1,313 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # (All the below interface elements are optional.)
+ # title: string. Page title.
+ # header: string. Main page header.
+ # subheader: string. Page subheader.
+ # header_addl_info: string. Additional header information.
+ # bodyclasses: array of extra CSS classes for the <body>
+ # onload: string. JavaScript code to run when the page finishes loading.
+ # javascript: string. Javascript to go in the header.
+ # javascript_urls: list. List of URLs to Javascript.
+ # style: string. CSS style.
+ # style_urls: list. List of URLs to CSS style sheets.
+ # message: string. A message to display to the user. May contain HTML.
+ # atomlink: Atom link URL, May contain HTML
+ #%]
+
+[% IF message %]
+ [% PROCESS global/messages.html.tmpl %]
+[% END %]
+
+[% DEFAULT
+ subheader = ""
+ header_addl_info = ""
+ onload = ""
+ style_urls = []
+ yui = []
+%]
+
+[% SET yui_css = {
+ autocomplete => 1,
+ calendar => 1,
+ datatable => 1,
+ button => 1,
+} %]
+
+[%# Note: This is simple dependency resolution--you can't have dependencies
+ # that depend on each other. You have to specify all of a module's deps,
+ # if that module is going to be specified in "yui".
+ #%]
+[% SET yui_deps = {
+ autocomplete => ['json', 'connection', 'datasource'],
+ datatable => ['json', 'connection', 'datasource', 'element'],
+} %]
+
+[%# When using certain YUI modules, we need to process certain
+ # extra JS templates.
+ #%]
+[% SET yui_templates = {
+ datatable => ['global/value-descs.js.tmpl'],
+} %]
+
+[%# These are JS URLs that are *always* on the page and come before
+ # every other JS URL.
+ #%]
+[% SET starting_js_urls = [
+ "js/yui/yahoo-dom-event/yahoo-dom-event.js",
+ "js/yui/cookie/cookie-min.js",
+] %]
+
+
+[%# We should be able to set the default value of the header variable
+ # to the value of the title variable using the DEFAULT directive,
+ # but that doesn't work if a caller sets header to the empty string
+ # to avoid header inheriting the value of title, since DEFAULT
+ # mistakenly treats empty strings as undefined and gives header the
+ # value of title anyway. To get around that problem we explicitly
+ # set header's default value here only if it is undefined. %]
+[% IF !header.defined %][% header = title %][% END %]
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+ <head>
+ [% Hook.process("start") %]
+ <title>[% title %]</title>
+
+ [% IF Param('utf8') %]
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ [% END %]
+
+[%# Migration note: contents of the old Param 'headerhtml' would go here %]
+
+ [% PROCESS "global/site-navigation.html.tmpl" %]
+
+ [% PROCESS 'global/setting-descs.none.tmpl' %]
+
+ [% SET yui = yui_resolve_deps(yui, yui_deps) %]
+ [% SET css_sets = css_files(style_urls, yui, yui_css) %]
+
+ [%# CSS cascade, parts 1 & 2: YUI & Standard Bugzilla stylesheet set (persistent).
+ # Always present. %]
+ <link href="[% 'skins/standard/global.css' FILTER mtime FILTER html %]"
+ rel="alternate stylesheet"
+ title="[% setting_descs.standard FILTER html %]">
+ [% FOREACH style_url = css_sets.standard %]
+ [% PROCESS format_css_link css_set_name = 'standard' %]
+ [% END %]
+
+ [%# CSS cascade, part 3: Third-party stylesheet set, per user prefs. %]
+ [% FOREACH style_url = css_sets.skin %]
+ [% PROCESS format_css_link css_set_name = user.settings.skin.value %]
+ [% END %]
+
+ [%# CSS cascade, part 4: page-specific styles. %]
+ [% IF style %]
+ <style type="text/css">
+ [% style %]
+ </style>
+ [% END %]
+
+ [%# CSS cascade, part 5: Custom Bugzilla stylesheet set (persistent).
+ # Always present. Site administrators may override all other style
+ # definitions, including skins, using custom stylesheets.
+ #%]
+ [% FOREACH style_url = css_sets.custom %]
+ [% PROCESS format_css_link css_set_name = 'standard' %]
+ [% END %]
+
+ [%# YUI Scripts %]
+ [% FOREACH yui_name = yui %]
+ [% starting_js_urls.push("js/yui/$yui_name/${yui_name}-min.js") %]
+ [% END %]
+ [% starting_js_urls.push('js/global.js') %]
+
+ [% FOREACH javascript_url = starting_js_urls %]
+ [% PROCESS format_js_link %]
+ [% END %]
+
+ <script type="text/javascript">
+ <!--
+ YAHOO.namespace('bugzilla');
+ YAHOO.util.Event.addListener = function (el, sType, fn, obj, overrideContext) {
+ if ( ("onpagehide" in window || YAHOO.env.ua.gecko) && sType === "unload") { sType = "pagehide"; };
+ var capture = ((sType == "focusin" || sType == "focusout") && !YAHOO.env.ua.ie) ? true : false;
+ return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture);
+ };
+ if ( "onpagehide" in window || YAHOO.env.ua.gecko) {
+ YAHOO.util.Event._simpleRemove(window, "unload",
+ YAHOO.util.Event._unload);
+ }
+ [%# The language selector needs javascript to set its cookie,
+ # so it is hidden in HTML/CSS by the "bz_default_hidden" class.
+ # If the browser can run javascript, it will then "unhide"
+ # the language selector using the following code.
+ #%]
+ function unhide_language_selector() {
+ YAHOO.util.Dom.removeClass(
+ 'lang_links_container', 'bz_default_hidden'
+ );
+ }
+ YAHOO.util.Event.onDOMReady(unhide_language_selector);
+
+ [%# Make some Bugzilla information available to all scripts.
+ # We don't import every parameter and constant because we
+ # don't want to add a lot of uncached JS to every page.
+ #%]
+ var BUGZILLA = {
+ param: {
+ cookiepath: '[% Param('cookiepath') FILTER js %]',
+ maxusermatches: [% Param('maxusermatches') FILTER js %]
+ },
+ constant: {
+ COMMENT_COLS: [% constants.COMMENT_COLS FILTER js %]
+ },
+ string: {
+ [%# Please keep these in alphabetical order. %]
+
+ attach_desc_required:
+ 'You must enter a Description for this attachment.',
+ component_required:
+ 'You must select a Component for this [% terms.bug %].',
+ description_required:
+ 'You must enter a Description for this [% terms.bug %].',
+ short_desc_required:
+ 'You must enter a Summary for this [% terms.bug %].',
+ version_required:
+ 'You must select a Version for this [% terms.bug %].'
+ }
+ };
+
+ [% FOREACH yui_name = yui %]
+ [% FOREACH yui_template = yui_templates.$yui_name %]
+ [% INCLUDE $yui_template %]
+ [% END %]
+ [% END %]
+ [% IF javascript %]
+ [% javascript %]
+ [% END %]
+ // -->
+ </script>
+
+ [% FOREACH javascript_url = javascript_urls %]
+ [% PROCESS format_js_link %]
+ [% END %]
+
+ [%# this puts the live bookmark up on firefox for the Atom feed %]
+ [% IF atomlink %]
+ <link rel="alternate"
+ type="application/atom+xml" title="Atom feed"
+ href="[% atomlink FILTER html %]">
+ [% END %]
+
+ [%# Required for the 'Autodiscovery' feature in Firefox 2 and IE 7. %]
+ <link rel="search" type="application/opensearchdescription+xml"
+ title="[% terms.Bugzilla %]" href="./search_plugin.cgi">
+ <link rel="shortcut icon" href="images/favicon.ico" >
+ [% Hook.process("additional_header") %]
+ </head>
+
+[%# Migration note: contents of the old Param 'bodyhtml' go in the body tag,
+ # but set the onload attribute in the DEFAULT directive above.
+ #%]
+
+ <body onload="[% onload %]"
+ class="[% urlbase.replace('^https?://','').replace('/$','').replace('[-~@:/.]+','-') FILTER css_class_quote %]
+ [% FOREACH class = bodyclasses %]
+ [% ' ' %][% class FILTER css_class_quote %]
+ [% END %] yui-skin-sam">
+
+[%# Migration note: the following file corresponds to the old Param
+ # 'bannerhtml'
+ #%]
+
+<div id="header">
+
+[% INCLUDE global/banner.html.tmpl %]
+
+<table border="0" cellspacing="0" cellpadding="0" id="titles">
+<tr>
+ <td id="title">
+ <p>[% terms.Bugzilla %]
+ [% " &ndash; $header" IF header %]</p>
+ </td>
+
+ [% IF subheader %]
+ <td id="subtitle">
+ <p class="subheader">[% subheader %]</p>
+ </td>
+ [% END %]
+
+ [% IF header_addl_info %]
+ <td id="information">
+ <p class="header_addl_info">[% header_addl_info %]</p>
+ </td>
+ [% END %]
+</tr>
+</table>
+
+<table id="lang_links_container" cellpadding="0" cellspacing="0"
+ class="bz_default_hidden"><tr><td>
+[% IF Bugzilla.languages.size > 1 %]
+ <ul class="links">
+ [% FOREACH lang = Bugzilla.languages.sort %]
+ <li>[% IF NOT loop.first %]<span class="separator"> | </span>[% END %]
+ [% IF lang == current_language %]
+ <span class="lang_current">[% lang FILTER html FILTER upper %]</span>
+ [% ELSE %]
+ <a href="#" onclick="set_language('[% lang FILTER none %]');">
+ [%- lang FILTER html FILTER upper %]</a>
+ [% END %]
+ </li>
+ [% END %]
+ </ul>
+[% END %]
+</td></tr></table>
+
+[% PROCESS "global/common-links.html.tmpl" qs_suffix = "_top" %]
+</div> [%# header %]
+
+<div id="bugzilla-body">
+
+[% IF Param('announcehtml') %]
+[% Param('announcehtml') FILTER none %]
+[% END %]
+
+[% IF message %]
+ <div id="message">[% message %]</div>
+[% END %]
+
+[% BLOCK format_css_link %]
+ [% IF style_url.match('/IE-fixes\.css') %]
+ <!--[if lte IE 7]>
+ [%# Internet Explorer treats [if IE] HTML comments as uncommented.
+ # We use it to import CSS fixes so that Bugzilla looks decent on IE 7
+ # and below.
+ #%]
+ [% END %]
+
+ [% IF css_set_name == 'standard' %]
+ [% SET css_title_link = '' %]
+ [% ELSE %]
+ [% css_title_link = BLOCK ~%]
+ title="[% setting_descs.${user.settings.skin.value} || user.settings.skin.value FILTER html %]"
+ [% END %]
+ [% END %]
+
+ <link href="[% style_url FILTER html %]" rel="stylesheet"
+ type="text/css" [% css_title_link FILTER none %]>
+
+ [% '<![endif]-->' IF style_url.match('/IE-fixes\.css') %]
+[% END %]
+
+[% BLOCK format_js_link %]
+ <script type="text/javascript" src="[% javascript_url FILTER mtime FILTER html %]"></script>
+[% END %]
diff --git a/template/en/default/global/hidden-fields.html.tmpl b/template/en/default/global/hidden-fields.html.tmpl
new file mode 100644
index 0000000..88d2673
--- /dev/null
+++ b/template/en/default/global/hidden-fields.html.tmpl
@@ -0,0 +1,46 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # exclude: string; a regular expression matching fields to exclude
+ # from the list of hidden fields generated by this template
+ #%]
+
+[%# The global Bugzilla->cgi object is used to obtain form variable values. %]
+[% USE Bugzilla %]
+[% cgi = Bugzilla.cgi %]
+
+[%# Generate hidden form fields for non-excluded fields. %]
+[% FOREACH field = cgi.param() %]
+ [% NEXT IF exclude && field.search(exclude) %]
+ [%# The '.slice(0)' bit is here to force the 'param(field)' to be evaluated
+ in a list context, so we can avoid extra code checking for single valued or
+ empty fields %]
+ [% IF field == "data" && cgi.param("data") %]
+ <div class="box">
+ <p>
+ We were unable to store the file you uploaded because of incomplete information
+ in the form you just submitted. Because we are unable to retain the file between
+ form submissions, you must re-attach the file in addition to completing the
+ remaining missing information above.
+ </p>
+ <p>
+ Please re-attach the file <b>[% cgi.param(field) FILTER html %]</b> in
+ the field below:
+ </p>
+ <p>
+ <input type="file" id="data" name="data" size="50">
+ </p>
+ </div>
+ [% ELSE %]
+ [% FOREACH mvalue = cgi.param(field).slice(0) %]
+ <input type="hidden" name="[% field FILTER html %]"
+ value="[% mvalue FILTER html_linebreak %]">
+ [% END %]
+ [% END %]
+[% END %]
diff --git a/template/en/default/global/js-products.html.tmpl b/template/en/default/global/js-products.html.tmpl
new file mode 100644
index 0000000..e40a3e3
--- /dev/null
+++ b/template/en/default/global/js-products.html.tmpl
@@ -0,0 +1,21 @@
+[%# 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.
+ #%]
+
+[%# The javascript block gets used in header.html.tmpl. %]
+[% javascript = BLOCK %]
+ var useclassification = false; // No classification level in use
+ var first_load = true; // Is this the first time we load the page?
+ var last_sel = []; // Caches last selection
+ var cpts = new Array();
+ [% n = 1 %]
+ [% FOREACH prod = products %]
+ cpts['[% n %]'] = [
+ [%- FOREACH comp = prod.components %]'[% comp.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ];
+ [% n = n+1 %]
+ [% END %]
+[% END %]
diff --git a/template/en/default/global/message.html.tmpl b/template/en/default/global/message.html.tmpl
new file mode 100644
index 0000000..949fc1e
--- /dev/null
+++ b/template/en/default/global/message.html.tmpl
@@ -0,0 +1,28 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # url: string. An optional URL to go to.
+ # link: string. The link text for that URL.
+ #%]
+
+[% DEFAULT title = "$terms.Bugzilla Message" %]
+
+[% PROCESS global/header.html.tmpl %]
+
+[%# The "header" template automatically displays a message if it finds one.
+ Note that the global messages list is in messages.html.tmpl. %]
+
+[%# Display a URL if the calling script or message block has included one. %]
+[% IF url && link %]
+ <p>
+ <a href="[% url FILTER html %]">[% link FILTER html %]</a>
+ </p>
+[% END %]
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/global/message.txt.tmpl b/template/en/default/global/message.txt.tmpl
new file mode 100644
index 0000000..44694ee
--- /dev/null
+++ b/template/en/default/global/message.txt.tmpl
@@ -0,0 +1,12 @@
+[%# 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.
+ #%]
+
+[%# Yes, this may show some HTML. But it's the best we
+ # can do at the moment. %]
+[% PROCESS global/messages.html.tmpl %]
+[% message FILTER txt %]
diff --git a/template/en/default/global/messages.html.tmpl b/template/en/default/global/messages.html.tmpl
new file mode 100644
index 0000000..f55ab92
--- /dev/null
+++ b/template/en/default/global/messages.html.tmpl
@@ -0,0 +1,927 @@
+[%# 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.
+ #%]
+
+[%# This is a list of all the possible messages. Please keep them in
+ # alphabetical order by message tag, and leave a blank line between messages.
+ #%]
+
+[% message_tag = message %]
+
+[% message = BLOCK %]
+ [% IF message_tag == "account_created" %]
+ The user account [% otheruser.login FILTER html %] has been created
+ successfully.
+ [% IF groups.size %]
+ You may want to edit the group settings now, using the form below.
+ [% END %]
+
+ [% ELSIF message_tag == "account_creation_canceled" %]
+ [% title = "User Account Creation Canceled" %]
+ The creation of the user account [% account FILTER html %] has been
+ canceled.
+
+ [% ELSIF message_tag == "account_updated" %]
+ [% IF changed_fields.size
+ + groups_added_to.size + groups_removed_from.size
+ + groups_granted_rights_to_bless.size + groups_denied_rights_to_bless.size %]
+ [% title = "User $loginold updated" %]
+ The following changes have been made to the user account
+ [%+ loginold FILTER html %]:
+ <ul>
+ [% FOREACH field = changed_fields %]
+ <li>
+ [% IF field == 'login_name' %]
+ The login is now [% otheruser.login FILTER html %].
+ [% ELSIF field == 'realname' %]
+ The real name has been updated.
+ [% ELSIF field == 'cryptpassword' %]
+ A new password has been set.
+ [% ELSIF field == 'disabledtext' %]
+ The "login disabled" text has been modified.
+ [% ELSIF field == 'is_enabled' %]
+ Logging in with this user account has been [% otheruser.is_enabled ? 'enabled' : 'disabled' %].
+ [% ELSIF field == 'extern_id' %]
+ The user's External Login ID has been modified.
+ [% ELSIF field == 'disable_mail' %]
+ [% IF otheruser.email_disabled %]
+ [% terms.Bug %]mail has been disabled.
+ [% ELSE %]
+ [% terms.Bug %]mail has been enabled.
+ [% END %]
+ [% END %]
+ </li>
+ [% END %]
+ [% IF groups_added_to.size %]
+ <li>
+ The account has been added to the following group[% 's' IF groups_added_to.size > 1 %]:
+ [%+ groups_added_to.join(', ') FILTER html %]
+ </li>
+ [% END %]
+ [% IF groups_removed_from.size %]
+ <li>
+ The account has been removed from the following group[% 's' IF groups_removed_from.size > 1 %]:
+ [%+ groups_removed_from.join(', ') FILTER html %]
+ </li>
+ [% END %]
+ [% IF groups_granted_rights_to_bless.size %]
+ <li>
+ The account has been granted rights to bless the
+ [%+ groups_granted_rights_to_bless.join(', ') FILTER html %]
+ group[% 's' IF groups_granted_rights_to_bless.size > 1 %].
+ </li>
+ [% END %]
+ [% IF groups_denied_rights_to_bless.size %]
+ <li>
+ The account has been denied rights to bless the
+ [%+ groups_denied_rights_to_bless.join(', ') FILTER html %]
+ group[% 's' IF groups_denied_rights_to_bless.size > 1 %].
+ </li>
+ [% END %]
+ </ul>
+ [% ELSE %]
+ [% title = "User $otheruser.login not changed" %]
+ You didn't request any changes to the user's account
+ [%+ otheruser.login FILTER html %].
+ [% END %]
+
+ [% ELSIF message_tag == "account_deleted" %]
+ [% title = "User $otheruser.login deleted" %]
+ The user account [% otheruser.login FILTER html %] has been deleted
+ successfully.
+
+ [% ELSIF message_tag == "account_disabled" %]
+ Logging in with this user account [% account FILTER html %] is disabled, so
+ you cannot change its password.
+
+ [% ELSIF message_tag == "attachment_creation_failed" %]
+ The [% terms.bug %] was created successfully, but attachment creation
+ failed.
+ Please add your attachment by clicking the "Add an Attachment" link
+ below.
+
+ [% ELSIF message_tag == "bug_group_description" %]
+ Access to [% terms.bugs %] in the [% product.name FILTER html %] product
+
+ [% ELSIF message_tag == "buglist_adding_field" %]
+ [% title = "Adding field to search page..." %]
+ [% link = "Click here if the page does not redisplay automatically." %]
+
+ [% ELSIF message_tag == "buglist_updated_named_query" %]
+ [% title = "Search updated" %]
+ Your search named <code><a
+ href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% queryname FILTER uri %]"
+ >[% queryname FILTER html %]</a></code> has been updated.
+
+ [% ELSIF message_tag == "buglist_new_default_query" %]
+ OK, you now have a new default search. You may
+ also bookmark the result of any individual search.
+
+ [% ELSIF message_tag == "buglist_new_named_query" %]
+ [% title = "Search created" %]
+ OK, you have a new search named <code><a
+ href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% queryname FILTER uri %]"
+ >[% queryname FILTER html %]</a></code>.
+
+ [% ELSIF message_tag == "buglist_query_gone" %]
+ [% title = "Search is gone" %]
+ [% link = "Un-forget the search" %]
+ OK, the <b>[% namedcmd FILTER html %]</b> search is gone.
+
+ [% ELSIF message_tag == "buglist_sorted_by_relevance" %]
+ [% terms.Bugs %] on this list are sorted by relevance, with the most
+ relevant [% terms.bugs %] at the top.
+
+ [% ELSIF message_tag == "change_columns" %]
+ [% title = "Change columns" %]
+ Resubmitting your search with new columns...
+ Click <a href="[% redirect_url FILTER html %]">here</a>
+ if the page does not automatically refresh.
+
+ [% ELSIF message_tag == "classification_created" %]
+ [% title = "New Classification Created" %]
+ The <em>[% classification.name FILTER html %]</em> classification has been created.
+
+ [% ELSIF message_tag == "classification_deleted" %]
+ [% title = "Classification Deleted" %]
+ The <em>[% classification.name FILTER html %]</em> classification has been deleted.
+
+ [% ELSIF message_tag == "classification_updated" %]
+ [% title = "Classification Updated" %]
+ [% IF changes.keys.size %]
+ Changes to the <em>[% classification.name FILTER html %]</em> classification
+ have been saved:
+ <ul>
+ [% IF changes.name.defined %]
+ <li>Name updated to '[% classification.name FILTER html %]'</li>
+ [% END %]
+ [% IF changes.description.defined %]
+ [% IF classification.description %]
+ <li>Description updated to '[% classification.description FILTER html %]'</li>
+ [% ELSE %]
+ <li>Description removed</li>
+ [% END %]
+ [% END %]
+ [% IF changes.sortkey.defined %]
+ <li>Sortkey updated to '[% classification.sortkey FILTER html %]'</li>
+ [% END %]
+ [% Hook.process('classification_updated_fields') %]
+ </ul>
+ [% ELSE %]
+ No changes made to <em>[% classification.name FILTER html %]</em>.
+ [% END %]
+
+ [% ELSIF message_tag == "component_created" %]
+ [% title = "Component Created" %]
+ The component <em>[% comp.name FILTER html %]</em> has been created.
+
+ [% ELSIF message_tag == "component_deleted" %]
+ [% title = "Component Deleted" %]
+ The component <em>[% comp.name FILTER html %]</em> has been deleted.
+ [% IF comp.bug_count %]
+ All [% terms.bugs %] being in this component and all references
+ to them have also been deleted.
+ [% END %]
+
+ [% ELSIF message_tag == "component_updated" %]
+ [% title = "Component Updated" %]
+ [% IF changes.keys.size %]
+ Changes to the component <em>[% comp.name FILTER html %]</em> have been saved:
+ <ul>
+ [% IF changes.name.defined %]
+ <li>Name updated to '[% comp.name FILTER html %]'</li>
+ [% END %]
+ [% IF changes.description.defined %]
+ <li>Description updated to '[% comp.description FILTER html_light %]'</li>
+ [% END %]
+ [% IF changes.initialowner.defined %]
+ <li>Default assignee updated to '[% comp.default_assignee.login FILTER html %]'</li>
+ [% END %]
+ [% IF changes.initialqacontact.defined %]
+ [% IF comp.default_qa_contact %]
+ <li>Default QA contact updated to '[% comp.default_qa_contact.login FILTER html %]'</li>
+ [% ELSE %]
+ <li>Default QA contact deleted</li>
+ [% END %]
+ [% END %]
+ [% IF changes.cc_list.defined %]
+ [% IF comp.initial_cc.size %]
+ [% cc_list = [] %]
+ [% FOREACH cc_user = comp.initial_cc %]
+ [% cc_list.push(cc_user.login) %]
+ [% END %]
+ <li>Default CC list updated to [% cc_list.join(", ") FILTER html %]</li>
+ [% ELSE %]
+ <li>Default CC list deleted</li>
+ [% END %]
+ [% END %]
+ [% IF changes.isactive.defined %]
+ <li>[% comp.is_active ? "Enabled" : "Disabled" %] for [% terms.bugs %]</li>
+ [% END %]
+ [% Hook.process('component_updated_fields') %]
+ </ul>
+ [% ELSE %]
+ No changes made to <em>[% comp.name FILTER html %]</em>.
+ [% END %]
+
+ [% ELSIF message_tag == "custom_field_created" %]
+ [% title = "Custom Field Created" %]
+ The new custom field '[% field.name FILTER html %]' has been
+ successfully created.
+
+ [% ELSIF message_tag == "custom_field_deleted" %]
+ [% title = "Custom Field Deleted" %]
+ The custom field '[% field.name FILTER html %]' has been
+ successfully deleted.
+
+ [% ELSIF message_tag == "custom_field_updated" %]
+ [% title = "Custom Field Updated" %]
+ Properties of the '[% field.name FILTER html %]' field have been
+ successfully updated.
+
+ [% ELSIF message_tag == "default_settings_updated" %]
+ [% IF changes_saved %]
+ Changes to default preferences have been saved.
+ [% ELSE %]
+ No changes made.
+ [% END %]
+
+ [% ELSIF message_tag == "emailold_change_canceled" %]
+ [% title = "Cancel Request to Change Email Address" %]
+ The request to change the email address for your account to
+ [%+ new_email FILTER html %] has been canceled.
+
+ [% ELSIF message_tag == "email_change_canceled" %]
+ [% title = "Cancel Request to Change Email Address" %]
+ The request to change the email address for the
+ account [%+ old_email FILTER html %] to
+ [%+ new_email FILTER html %] has been canceled.
+
+ [% ELSIF message_tag == "email_change_canceled_reinstated" %]
+ [% title = "Cancel Request to Change Email Address" %]
+ The request to change the email address for the
+ account [%+ old_email FILTER html %] to
+ [%+ new_email FILTER html %] has been canceled.
+ Your old account settings have been reinstated.
+
+ [% ELSIF message_tag == "extension_created" %]
+ An extension named [% name FILTER html %] has been created
+ in [% path FILTER html %].
+
+ [% ELSIF message_tag == "field_value_created" %]
+ [% title = "New Field Value Created" %]
+ The value <em>[% value.name FILTER html %]</em> has been added as a
+ valid choice for the <em>[% field.description FILTER html %]</em>
+ (<em>[% field.name FILTER html %]</em>) field.
+ [% IF field.name == "bug_status" %]
+ You should now visit the <a href="editworkflow.cgi">status workflow
+ page</a> to include your new [% terms.bug %] status.
+ [% END %]
+
+ [% ELSIF message_tag == "field_value_deleted" %]
+ [% title = "Field Value Deleted" %]
+ The value <em>[% value.name FILTER html %]</em> of the
+ <em>[% field.description FILTER html %]</em>
+ (<em>[% field.name FILTER html %]</em>) field has been deleted.
+
+ [% ELSIF message_tag == "field_value_updated" %]
+ [% title = "Field Value Updated" %]
+ [% IF changes.keys.size %]
+ The <em>[% value_old FILTER html %]</em> value of the
+ <em>[% field.description FILTER html %]</em>
+ (<em>[% field.name FILTER html %]</em>) field has been changed:
+ <ul>
+ [% IF changes.value %]
+ <li>Field value updated to
+ <em>[% changes.value.1 FILTER html %]</em>.
+ [% IF value.is_default %]
+ (Note that this value is the default for this field. All
+ references to the default value will now point to this new value.)
+ [% END %]
+ </li>
+ [% END %]
+ [% IF changes.sortkey %]
+ <li>Sortkey updated to
+ <em>[% changes.sortkey.1 FILTER html %]</em>.</li>
+ [% END %]
+ [% IF changes.visibility_value_id %]
+ [% IF value.visibility_value.defined %]
+ <li>It only appears when
+ [%+ value.field.value_field.description FILTER html %] is set to
+ '[%+ value.visibility_value.name FILTER html %]'.</li>
+ [% ELSE %]
+ <li>It now always appears, no matter what
+ [%+ value.field.value_field.description FILTER html %] is set to.
+ </li>
+ [% END %]
+ [% END %]
+ </ul>
+ [% ELSE %]
+ No changes made to the field value <em>[% value_old FILTER html %]</em>.
+ [% END %]
+
+ [% ELSIF message_tag == "flag_cleared" %]
+ Some flags didn't apply in the new product/component
+ and have been cleared.
+
+ [% ELSIF message_tag == "flag_creation_failed" %]
+ [% title = "Flag Creation Failure" %]
+ An error occured while validating flags:
+ [%+ flag_creation_error FILTER none %]
+
+ [% ELSIF message_tag == "get_field_desc" %]
+ [% field_descs.$field_name FILTER html %]
+
+ [% ELSIF message_tag == "get_resolution" %]
+ [% display_value("resolution", resolution) FILTER html %]
+
+ [% ELSIF message_tag == "get_status" %]
+ [% display_value("bug_status", status) FILTER html %]
+
+ [% ELSIF message_tag == "group_created" %]
+ [% title = "New Group Created" %]
+ The group <em>[% group.name FILTER html %]</em> has been created.
+
+ [% ELSIF message_tag == "group_deleted" %]
+ [% title = "Group Deleted" %]
+ The group <em>[% name FILTER html %]</em> has been deleted.
+
+ [% ELSIF message_tag == "group_membership_removed" %]
+ [% title = "Group Membership Removed" %]
+ [% IF users.size %]
+ Explicit membership to the <em>[% group FILTER html %]</em> group removed
+ [% IF regexp %] for users matching '[% regexp FILTER html %]'[% END %]:
+ [% FOREACH user = users %]
+ [%+ user.login FILTER html %]
+ [% END %]
+ [% ELSE %]
+ No users are being affected by your action.
+ [% END %]
+
+ [% ELSIF message_tag == "group_updated" %]
+ [% IF changes.keys.size %]
+ The following changes have been made to the '[% group.name FILTER html %]'
+ group:
+ <ul>
+ [% FOREACH field = changes.keys.sort %]
+ [% SWITCH field %]
+ [% CASE 'name' %]
+ <li>The name was changed to '[% changes.name.1 FILTER html %]'</li>
+ [% CASE 'description' %]
+ <li>The description was updated.</li>
+ [% CASE 'userregexp' %]
+ <li>The regular expression was updated.</li>
+ [% CASE 'isactive' %]
+ [% IF changes.isactive.1 %]
+ <li>The group will now be used for [% terms.bugs %].</li>
+ [% ELSE %]
+ <li>The group will no longer be used for [% terms.bugs %].</li>
+ [% END %]
+ [% CASE 'icon_url' %]
+ <li>The group icon URL has been updated.</li>
+ [% CASE 'members_add' %]
+ <li>The following groups are now members of this group:
+ [%+ changes.members_add.join(', ') FILTER html %]</li>
+ [% CASE 'members_remove' %]
+ <li>The following groups are no longer members of this group:
+ [%+ changes.members_remove.join(', ') FILTER html %]</li>
+ [% CASE 'member_of_add' %]
+ <li>This group is now a member of the following groups:
+ [%+ changes.member_of_add.join(', ') FILTER html %]</li>
+ [% CASE 'member_of_remove' %]
+ <li>This group is no longer a member of the following groups:
+ [%+ changes.member_of_remove.join(', ') FILTER html %]</li>
+ [% CASE 'bless_from_add' %]
+ <li>The following groups may now add users to this group:
+ [%+ changes.bless_from_add.join(', ') FILTER html %]</li>
+ [% CASE 'bless_from_remove' %]
+ <li>The following groups may no longer add users to this group:
+ [%+ changes.bless_from_remove.join(', ') FILTER html %]</li>
+ [% CASE 'bless_to_add' %]
+ <li>This group may now add users to the following groups:
+ [%+ changes.bless_to_add.join(', ') FILTER html %]</li>
+ [% CASE 'bless_to_remove' %]
+ <li>This group may no longer add users to the following groups:
+ [%+ changes.bless_to_remove.join(', ') FILTER html %]</li>
+ [% CASE 'visible_from_add' %]
+ <li>The following groups can now see users in this group:
+ [%+ changes.visible_from_add.join(', ') FILTER html %]</li>
+ [% CASE 'visible_from_remove' %]
+ <li>The following groups may no longer see users in this group:
+ [%+ changes.visible_from_remove.join(', ') FILTER html %]</li>
+ [% CASE 'visible_to_me_add' %]
+ <li>This group may now see users in the following groups:
+ [%+ changes.visible_to_me_add.join(', ') FILTER html %]</li>
+ [% CASE 'visible_to_me_remove' %]
+ <li>This group may no longer see users in the following groups:
+ [%+ changes.visible_to_me_remove.join(', ') FILTER html %]</li>
+ [% CASE %]
+ [% Hook.process('group_updated_fields') %]
+ [% END %]
+ [% END %]
+ </ul>
+ [% ELSE %]
+ You didn't request any change for the '[% group.name FILTER html %]'
+ group.
+ [% END %]
+
+ [% ELSIF message_tag == "invalid_column_name" %]
+ The custom sort order specified contains one or more invalid
+ column names: <em>[% invalid_fragments.join(', ') FILTER html %]</em>.
+ They have been removed from the sort list.
+
+ [% ELSIF message_tag == "job_queue_depth" %]
+ [% count FILTER html %] jobs in the queue.
+
+ [% ELSIF message_tag == "keyword_created" %]
+ [% title = "New Keyword Created" %]
+ The keyword <em>[% name FILTER html %]</em> has been created.
+
+ [% ELSIF message_tag == "keyword_deleted" %]
+ [% title = "Keyword Deleted" %]
+ The <em>[% keyword.name FILTER html %]</em> keyword has been deleted.
+
+ [% ELSIF message_tag == "keyword_updated" %]
+ [% title = "Keyword Updated" %]
+ [% IF changes.keys.size %]
+ Changes to the <em>[% keyword.name FILTER html %]</em> keyword have
+ been saved:
+ <ul>
+ [% IF changes.name.defined %]
+ <li>Keyword renamed to <em>[% keyword.name FILTER html %]</em>.</li>
+ [% END %]
+ [% IF changes.description.defined %]
+ <li>Description updated to <em>[% keyword.description FILTER html %]</em></li>
+ [% END %]
+ </ul>
+ [% ELSE %]
+ No changes made.
+ [% END %]
+
+ [% ELSIF message_tag == "logged_out" %]
+ [% title = "Logged Out" %]
+ [% url = "index.cgi?GoAheadAndLogIn=1" %]
+ [% link = "Log in again." %]
+ <b>You logged out successfully</b>.
+ The cookie that was remembering your login is now gone. You will be
+ prompted for a login the next time it is required.
+
+ [% ELSIF message_tag == "login_changed" %]
+ [% title = "$terms.Bugzilla Login Changed" %]
+ Your [% terms.Bugzilla %] login has been changed.
+
+ [% ELSIF message_tag == "migrate_component_created" %]
+ Component created: [% comp.name FILTER html %]
+ (in [% product.name FILTER html %])
+
+ [% ELSIF message_tag == "migrate_creating_bugs" %]
+ Creating [% terms.bugs %]...
+
+ [% ELSIF message_tag == "migrate_field_created" %]
+ New custom field: [% field.description FILTER html %]
+ ([% field.name FILTER html %])
+
+ [% ELSIF message_tag == "migrate_product_created" %]
+ Product created: [% created.name FILTER html %]
+
+ [% ELSIF message_tag == "migrate_reading_bugs" %]
+ Reading [% terms.bugs %]...
+
+ [% ELSIF message_tag == "migrate_reading_products" %]
+ Reading products...
+
+ [% ELSIF message_tag == "migrate_reading_users" %]
+ Reading users...
+
+ [% ELSIF message_tag == "migrate_translating_bugs" %]
+ Converting [% terms.bug %] values to be appropriate for
+ [%+ terms.Bugzilla %]...
+
+ [% ELSIF message_tag == "migrate_user_created" %]
+ User created: [% created.email FILTER html %]
+ [% IF password %] Password: [% password FILTER html %][% END %]
+
+ [% ELSIF message_tag == "migrate_value_created" %]
+ [% IF product.defined %]
+ [% product.name FILTER html %]
+ [% END %]
+ [%+ field_descs.${field.name} FILTER html %] value
+ created: [% value FILTER html %]
+
+ [% ELSIF message_tag == "milestone_created" %]
+ [% title = "Milestone Created" %]
+ The milestone <em>[% milestone.name FILTER html %]</em> has been created.
+
+ [% ELSIF message_tag == "milestone_deleted" %]
+ [% title = "Milestone Deleted" %]
+ The milestone <em>[% milestone.name FILTER html %]</em> has been deleted.
+ [% IF milestone.bug_count %]
+ [%+ terms.Bugs %] targetted to this milestone have been retargetted to
+ the default milestone <em>[% product.default_milestone FILTER html %]</em>.
+ [% END %]
+
+ [% ELSIF message_tag == "milestone_updated" %]
+ [% title = "Milestone Updated" %]
+ [% IF changes.size %]
+ Changes to the milestone <em>[% milestone.name FILTER html %]</em>
+ have been saved:
+ <ul>
+ [% IF changes.value.defined %]
+ <li>Milestone name updated to <em>[% milestone.name FILTER html %]</em></li>
+ [% END %]
+ [% IF changes.sortkey.defined %]
+ <li>Sortkey updated to <em>[% milestone.sortkey FILTER html %]</em>
+ [% END %]
+ [% IF changes.isactive.defined %]
+ <li>[% milestone.is_active ? "Enabled" : "Disabled" %] for [% terms.bugs %]</li>
+ [% END %]
+ </ul>
+ [% ELSE %]
+ No changes made to milestone <em>[% milestone.name FILTER html %]</em>.
+ [% END %]
+
+ [% ELSIF message_tag == "parameters_updated" %]
+ [% title = "Parameters Updated" %]
+ [% IF param_changed.size > 0 %]
+ [% FOREACH param = param_changed %]
+ Changed <em>[% param FILTER html %]</em><br>
+ [% IF param == 'utf8' && Param('utf8') %]
+ <strong>You must now re-run <kbd>checksetup.pl</kbd>.</strong><br>
+ [% END %]
+ [% END %]
+ [% ELSE %]
+ No changes made.
+ [% END %]
+
+ [% IF shutdown_is_active == 1 %]
+ <hr>
+ [% terms.Bugzilla %] has now been shut down. To re-enable the system,
+ clear the <em>shutdownhtml</em> field.
+ [% END%]
+
+ [% ELSIF message_tag == "password_change_canceled" %]
+ [% title = "Cancel Request to Change Password" %]
+ Your request has been canceled.
+
+ [% ELSIF message_tag == "password_change_request" %]
+ [% title = "Request to Change Password" %]
+ A token for changing your password has been emailed to you.
+ Follow the instructions in that email to change your password.
+
+ [% ELSIF message_tag == "password_changed" %]
+ [% title = "Password Changed" %]
+ Your password has been changed.
+
+ [% ELSIF message_tag == "flag_type_created" %]
+ [% title = BLOCK %]Flag Type '[% name FILTER html %]' Created[% END %]
+ The flag type <em>[% name FILTER html %]</em> has been created.
+
+ [% ELSIF message_tag == "flag_type_updated" %]
+ [% title = BLOCK %]Flag Type '[% flagtype.name FILTER html %]' Updated[% END %]
+ [% IF changes.size %]
+ Changes to the flag type <em>[% flagtype.name FILTER html %]</em>
+ have been saved:
+ <ul>
+ [% IF changes.is_active.defined %]
+ <li>Flag type is now [% flagtype.is_active ? "active" : "inactive" %]</li>
+ [% END %]
+ [% IF changes.name.defined %]
+ <li>Flag type renamed to <em>[% flagtype.name FILTER html %]</em></li>
+ [% END %]
+ [% IF changes.description.defined %]
+ <li>Description updated to <em>[% flagtype.description FILTER html %]</em></li>
+ [% END %]
+ [% IF changes.cc_list.defined %]
+ [% IF flagtype.cc_list %]
+ <li>CC list updated to <em>[% flagtype.cc_list FILTER html %]</em></li>
+ [% ELSE %]
+ <li>CC list is now empty</li>
+ [% END %]
+ [% END %]
+ [% IF changes.sortkey.defined %]
+ <li>Sortkey updated to <em>[% flagtype.sortkey FILTER html %]</em></li>
+ [% END %]
+ [% IF changes.is_requestable.defined %]
+ <li>Flag type is [% "no longer" UNLESS flagtype.is_requestable %] requestable</li>
+ [% END %]
+ [% IF changes.is_requesteeble.defined AND flagtype.is_requestable %]
+ <li>
+ Flag type is [% "no longer" UNLESS flagtype.is_requesteeble %]
+ specifically requestable
+ </li>
+ [% END %]
+ [% IF changes.is_multiplicable.defined %]
+ <li>Flag type is [% "no longer" UNLESS flagtype.is_multiplicable %] multiplicable</li>
+ [% END %]
+ [% IF changes.grant_group_id.defined %]
+ [% IF flagtype.grant_group_id %]
+ <li>Grant group updated to <em>[% flagtype.grant_group.name FILTER html %]</em></li>
+ [% ELSE %]
+ <li>Grant group deleted</li>
+ [% END %]
+ [% END %]
+ [% IF changes.request_group_id.defined %]
+ [% IF flagtype.request_group_id %]
+ <li>Request group updated to <em>[% flagtype.request_group.name FILTER html %]</em></li>
+ [% ELSE %]
+ <li>Request group deleted</li>
+ [% END %]
+ [% END %]
+ [% IF changes.inclusions.defined || changes.exclusions.defined %]
+ <li>The inclusions and exclusions lists have been updated</li>
+ [% END %]
+ </ul>
+ [% ELSE %]
+ No changes made to flag type <em>[% flagtype.name FILTER html %]</em>.
+ [% END %]
+
+ [% ELSIF message_tag == "flag_type_deleted" %]
+ [% title = BLOCK %]Flag Type '[% name FILTER html %]' Deleted[% END %]
+ The flag type <em>[% name FILTER html %]</em> has been deleted.
+
+ [% ELSIF message_tag == "flag_type_deactivated" %]
+ [% title = BLOCK %]Flag Type '[% flag_type.name FILTER html %]' Deactivated[% END %]
+ The flag type <em>[% flag_type.name FILTER html %]</em> has been deactivated.
+
+ [% ELSIF message_tag == "install_admin_get_email" %]
+ Enter the e-mail address of the administrator:
+
+ [% ELSIF message_tag == "install_admin_get_name" %]
+ Enter the real name of the administrator:
+
+ [% ELSIF message_tag == "install_admin_get_password" %]
+ Enter a password for the administrator account:
+
+ [% ELSIF message_tag == "install_admin_created" %]
+ [% user.login FILTER html %] is now set up as an administrator.
+
+ [% ELSIF message_tag == "install_admin_setup" %]
+ Looks like we don't have an administrator set up yet.
+ Either this is your first time using [% terms.Bugzilla %], or your
+ administrator's privileges might have accidentally been deleted.
+
+ [% ELSIF message_tag == "install_column_add" %]
+ Adding new column '[% column FILTER html %]' to the '[% table FILTER html %]' table...
+
+ [% ELSIF message_tag == "install_column_drop" %]
+ Deleting the '[% column FILTER html %]' column from the '[% table FILTER html %]' table...
+
+ [% ELSIF message_tag == "install_column_rename" %]
+ Renaming column '[% old FILTER html %]' to '[% new FILTER html %]'...
+
+ [% ELSIF message_tag == "install_confirm_password" %]
+ Please retype the password to verify:
+
+ [% ELSIF message_tag == "install_default_classification" %]
+ Creating default classification '[% name FILTER html %]'...
+
+ [% ELSIF message_tag == "install_default_product" %]
+ Creating initial dummy product '[% name FILTER html %]'...
+
+ [% ELSIF message_tag == "install_file_perms_fix" %]
+ Fixing file permissions...
+
+ [% ELSIF message_tag == "install_fk_add" %]
+ Adding foreign key: [% table FILTER html %].[% column FILTER html %] -&gt; [% fk.TABLE FILTER html %].[% fk.COLUMN FILTER html %]...
+
+ [% ELSIF message_tag == "install_fk_drop" %]
+ Dropping foreign key: [% table FILTER html %].[% column FILTER html %] -&gt; [% fk.TABLE FILTER html %].[% fk.COLUMN FILTER html %]...
+
+ [% ELSIF message_tag == "install_fk_invalid" %]
+ ERROR: There are invalid values for the [% column FILTER html %] column in the [% table FILTER html %]
+ table. (These values do not exist in the [% foreign_table FILTER html %] table, in the
+ [%+ foreign_column FILTER html %] column.)
+
+ Before continuing with checksetup, you will need to fix these values,
+ either by deleting these rows from the database, or changing the values
+ of [% column FILTER html %] in [% table FILTER html %] to point to valid values in [% foreign_table FILTER html %].[% foreign_column FILTER html %].
+
+ The bad values from the [% table FILTER html %].[% column FILTER html %] column are:
+ [%+ values.join(', ') FILTER html %]
+
+ [% ELSIF message_tag == "install_fk_invalid_fixed" %]
+ WARNING: There were invalid values in [% table FILTER html %].[% column FILTER html %]
+ that have been [% IF action == 'delete' %]deleted[% ELSE %]set to NULL[% END %]:
+ [%+ values.join(', ') FILTER html %]
+
+ [% ELSIF message_tag == "install_fk_setup" %]
+ Setting up foreign keys...
+
+ [% ELSIF message_tag == "install_group_create" %]
+ Creating group [% name FILTER html %]...
+
+ [% ELSIF message_tag == "install_groups_setup" %]
+ Creating default groups...
+
+ [% ELSIF message_tag == "install_setting_new" %]
+ Adding a new user setting called '[% name FILTER html %]'
+
+ [% ELSIF message_tag == "install_setting_setup" %]
+ Setting up user preferences...
+
+ [% ELSIF message_tag == "install_success" %]
+ checksetup.pl complete.
+
+ [% ELSIF message_tag == "install_table_drop" %]
+ Dropping the '[% name FILTER html %]' table...
+
+ [% ELSIF message_tag == "install_table_rename" %]
+ Renaming the '[% old FILTER html %]' table to '[% new FILTER html %]'...
+
+ [% ELSIF message_tag == "install_urlbase_default" %]
+ Now that you have installed [% terms.Bugzilla %], you should visit the
+ 'Parameters' page (linked in the footer of the Administrator
+ account) to ensure it is set up as you wish - this includes
+ setting the 'urlbase' option to the correct URL.
+
+ [% ELSIF message_tag == "install_reset_password" %]
+ Enter a new password for [% user.login FILTER html %]:
+
+ [% ELSIF message_tag == "install_reset_password_done" %]
+ New password set.
+
+ [% ELSIF message_tag == "install_webservergroup_empty" %]
+ ****************************************************************************
+ WARNING! You have not entered a value for the "webservergroup" parameter
+ in localconfig. This means that certain files and directories which need
+ to be editable by both you and the web server must be world writable, and
+ other files (including the localconfig file which stores your database
+ password) must be world readable. This means that _anyone_ who can obtain
+ local access to this machine can do whatever they want to your
+ [%+ terms.Bugzilla %] installation, and is probably also able to run
+ arbitrary Perl code as the user that the web server runs as.
+
+ You really, really, really need to change this setting.
+ ****************************************************************************
+
+ [% ELSIF message_tag == "install_webservergroup_not_in" %]
+ Warning: you have entered a value for the "webservergroup" parameter in
+ localconfig, but you are not either a) running this script as [% constants.ROOT_USER FILTER html %];
+ or b) a member of this group. This can cause permissions problems and
+ decreased security. If you experience problems running [% terms.Bugzilla %]
+ scripts, log in as [% constants.ROOT_USER FILTER html %] and re-run this script, become a
+ member of the group, or remove the value of the "webservergroup" parameter.
+
+ [% ELSIF message_tag == "install_webservergroup_windows" %]
+ Warning: You have set webservergroup in [% constants.bz_locations.localconfig FILTER html %]
+ Please understand that this does not bring you any security when
+ running under Windows.
+ Verify that the file permissions in your [% terms.Bugzilla %] directory are
+ suitable for your system. Avoid unnecessary write access.
+
+ [% ELSIF message_tag == "install_workflow_init" %]
+ Setting up the default status workflow...
+
+ [% ELSIF message_tag == "product_created" %]
+ [% title = "Product Created" %]
+ The product <em>[% product.name FILTER html %]</em> has been created.
+
+ [% ELSIF message_tag == "product_deleted" %]
+ [% title = "Product Deleted" %]
+ The product <em>[% product.name FILTER html %]</em> and all its versions,
+ components, milestones and group controls have been deleted.
+ [% IF product.bug_count %]
+ All [% terms.bugs %] being in this product and all references
+ to them have also been deleted.
+ [% END %]
+
+ [% ELSIF message_tag == "product_invalid" %]
+ [% title = "$terms.Bugzilla Component Descriptions" %]
+ The product <em>[% product FILTER html %]</em> does not exist
+ or you don't have access to it. The following is a list of the
+ products you can choose from.
+
+ [% ELSIF message_tag == "report_created" %]
+ OK, you have a new saved report named <em>[% reportname FILTER html %]</em>.
+
+ [% ELSIF message_tag == "report_deleted" %]
+ OK, the <em>[% reportname FILTER html %]</em> report is gone.
+
+ [% ELSIF message_tag == "report_updated" %]
+ The saved report <em>[% reportname FILTER html %]</em> has been updated.
+
+ [% ELSIF message_tag == "remaining_time_zeroed" %]
+ The [% field_descs.remaining_time FILTER html %] field has been
+ set to zero automatically as part of closing this [% terms.bug %]
+ or moving it from one closed state to another.
+
+ [% ELSIF message_tag == "sanitycheck" %]
+ [%# We use this way to call sanitycheck-specific messages so that
+ # we can still use get_text(). %]
+ [% PROCESS "admin/sanitycheck/messages.html.tmpl" %]
+
+ [% ELSIF message_tag == "series_all_open" %]
+ All Open
+
+ [% ELSIF message_tag == "series_all_closed" %]
+ All Closed
+
+ [% ELSIF message_tag == "series_subcategory" %]
+ -All-
+
+ [% ELSIF message_tag == "sudo_started" %]
+ [% title = "Sudo session started" %]
+ The sudo session has been started. For the next 6 hours, or until you
+ end the session, everything you do you do as the user you are
+ impersonating ([% target FILTER html %]).
+
+ [% ELSIF message_tag == "sudo_ended" %]
+ [% title = "Sudo session complete" %]
+ Your sudo session has ended. All future actions will be attributed
+ to your own account.
+
+ [% ELSIF message_tag == "series_created" %]
+ [% title = "Series Created" %]
+ The series <em>[% series.category FILTER html %] /
+ [%+ series.subcategory FILTER html %] /
+ [%+ series.name FILTER html %]</em>
+ has been created. Note that you may need to wait up to
+ [%+ series.frequency * 2 %] days before there will be enough data for a
+ chart of this series to be produced.
+
+ [% ELSIF message_tag == "series_deleted" %]
+ [% title = "Series Deleted" %]
+ The series <em>[% series.category FILTER html %] /
+ [%+ series.subcategory FILTER html %] /
+ [%+ series.name FILTER html %]</em>
+ has been deleted.
+
+ [% ELSIF message_tag == "shutdown" %]
+ [% title = "$terms.Bugzilla is Down" %]
+ [% Param("shutdownhtml") %]
+ [% IF userid %]
+ <p>For security reasons, you have been logged out automatically.
+ The cookie that was remembering your login is now gone.
+ [% END %]
+
+ [% ELSIF message_tag == "term" %]
+ [% terms.$term FILTER html %]
+
+ [% ELSIF message_tag == "unexpected_flag_types" %]
+ Some flags could not be set. Please check your changes.
+
+ [% ELSIF message_tag == "user_match_failed" %]
+ You entered a username that did not match any known
+ [% terms.Bugzilla %] users, so we have instead left
+ the [% match_field FILTER html %] field blank.
+
+ [% ELSIF message_tag == "user_match_multiple" %]
+ You entered a username that matched more than one
+ user, so we have instead left the [% match_field FILTER html %]
+ field blank.
+
+ [% ELSIF message_tag == "version_created" %]
+ [% title = "Version Created" %]
+ The version <em>[% version.name FILTER html %]</em> of product
+ <em>[% product.name FILTER html %]</em> has been created.
+
+ [% ELSIF message_tag == "version_deleted" %]
+ [% title = "Version Deleted" %]
+ The version <em>[% version.name FILTER html %]</em> of product
+ <em>[% product.name FILTER html %]</em> has been deleted.
+
+ [% ELSIF message_tag == "version_updated" %]
+ [% title = "Version Updated" %]
+ [% IF changes.size %]
+ Changes to the version <em>[% version.name FILTER html %]</em>
+ have been saved:
+ <ul>
+ [% IF changes.value.defined %]
+ <li>Version renamed to <em>[% version.name FILTER html %]</em></li>
+ [% END %]
+ [% IF changes.isactive.defined %]
+ <li>[% version.is_active ? "Enabled" : "Disabled" %] for [% terms.bugs %]</li>
+ [% END %]
+ </ul>
+ [% ELSE %]
+ No changes made to version <em>[% version.name FILTER html %]</em>.
+ [% END %]
+
+ [% ELSIF message_tag == "whine_query_failed" %]
+ The query '[% query_name FILTER html %]' from [% author.login FILTER html %]
+ failed: [% reason FILTER html %]
+
+ [% ELSIF message_tag == "workflow_updated" %]
+ The workflow has been updated.
+ [% END %]
+[% END %]
+
+[% IF !message %]
+ [% message = Hook.process('messages') %]
+[% END %]
+
+[%# Give sensible error if the message function is used incorrectly. #%]
+[% IF !message %]
+ [% message = BLOCK %]
+ You are using [% terms.Bugzilla %]'s messaging functions incorrectly. You
+ passed in the string '[% message_tag %]'. The correct use is to pass
+ in a tag, and define that tag in the file <kbd>messages.html.tmpl</kbd>.<br>
+ <br>
+ If you are a [% terms.Bugzilla %] end-user seeing this message, please
+ save this page and send it to [% Param('maintainer') %].
+ [% END %]
+[% END %]
diff --git a/template/en/default/global/reason-descs.none.tmpl b/template/en/default/global/reason-descs.none.tmpl
new file mode 100644
index 0000000..ca26b1c
--- /dev/null
+++ b/template/en/default/global/reason-descs.none.tmpl
@@ -0,0 +1,28 @@
+[%# 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.
+ #%]
+
+[% SET reason_descs = {
+ ${constants.REL_ASSIGNEE} => "You are the assignee for the ${terms.bug}.",
+ ${constants.REL_REPORTER} => "You reported the ${terms.bug}.",
+ ${constants.REL_QA} => "You are the QA Contact for the ${terms.bug}.",
+ ${constants.REL_CC} => "You are on the CC list for the ${terms.bug}.",
+ ${constants.REL_GLOBAL_WATCHER} => "You are watching all $terms.bug changes.",
+} %]
+
+[% SET watch_reason_descs => {
+ ${constants.REL_ASSIGNEE} =>
+ "You are watching the assignee of the ${terms.bug}.",
+ ${constants.REL_REPORTER} =>
+ "You are watching the reporter of the ${terms.bug}.",
+ ${constants.REL_QA} =>
+ "You are watching the QA Contact of the ${terms.bug}.",
+ ${constants.REL_CC} =>
+ "You are watching someone on the CC list of the ${terms.bug}.",
+} %]
+
+[% Hook.process('end') %]
diff --git a/template/en/default/global/select-menu.html.tmpl b/template/en/default/global/select-menu.html.tmpl
new file mode 100644
index 0000000..e9f56b7
--- /dev/null
+++ b/template/en/default/global/select-menu.html.tmpl
@@ -0,0 +1,52 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # name: string; the name of the menu.
+ #
+ # multiple: boolean; whether or not the menu is multi-select
+ #
+ # size: integer; the number of items to display at once
+ #
+ # options: array or hash; the items with which to populate the array.
+ # If a hash is passed, the hash keys become the names displayed
+ # to the user while the hash values become the value of the item.
+ #
+ # default: string; the item selected in the menu by default.
+ #
+ # onchange: code; JavaScript to be run when the user changes the value
+ # selected in the menu.
+ #%]
+
+[%# Get the scalar representation of the options reference,
+ # which looks like "ARRAY(0xA352BA3F)" or "HASH(0xA352BA3F)",
+ # so we can figure out whether it is a reference to an array
+ # or a hash.
+ #%]
+[% options_type = BLOCK %][% options %][% END %]
+
+<select name="[% name FILTER html %]"
+ [% IF onchange %]onchange="[% onchange FILTER html %]"[% END %]
+ [% IF multiple %] multiple [% END %]
+ [% IF size %] size="[% size %]" [% END %]>
+ [% IF options_type.search("ARRAY") %]
+ [% FOREACH value = options %]
+ <option value="[% value FILTER html %]"
+ [% " selected" IF value == default %]>
+ [% value FILTER html %]
+ </option>
+ [% END %]
+ [% ELSIF options_type.search("HASH") %]
+ [% FOREACH option = options %]
+ <option value="[% option.value FILTER html %]"
+ [% " selected" IF option.value == default %]>
+ [% option.key FILTER html %]
+ </option>
+ [% END %]
+ [% END %]
+</select>
diff --git a/template/en/default/global/setting-descs.none.tmpl b/template/en/default/global/setting-descs.none.tmpl
new file mode 100644
index 0000000..d200683
--- /dev/null
+++ b/template/en/default/global/setting-descs.none.tmpl
@@ -0,0 +1,49 @@
+[%# 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.
+ #%]
+
+[%# Remember to PROCESS rather than INCLUDE this template. %]
+
+[% setting_descs = {
+ "comment_sort_order" => "When viewing $terms.abug, show comments in this order",
+ "csv_colsepchar" => "Field separator character for CSV files",
+ "display_quips" => "Show a quip at the top of each $terms.bug list",
+ "zoom_textareas" => "Zoom textareas large when in use (requires JavaScript)",
+ "newest_to_oldest" => "Newest to Oldest",
+ "newest_to_oldest_desc_first" => "Newest to Oldest, but keep Description at the top",
+ "off" => "Off",
+ "oldest_to_newest" => "Oldest to Newest",
+ "on" => "On",
+ "post_bug_submit_action" => "After changing $terms.abug",
+ "next_bug" => "Show next $terms.bug in my list",
+ "same_bug" => "Show the updated $terms.bug",
+ "standard" => "Classic",
+ "skin" => "$terms.Bugzilla's general appearance (skin)",
+ "nothing" => "Do Nothing",
+ "state_addselfcc" => "Automatically add me to the CC list of $terms.bugs I change",
+ "always" => "Always",
+ "never" => "Never",
+ "cc_unless_role" => "Only if I have no role on them",
+ "lang" => "Language used in email",
+ "quote_replies" => "Quote the associated comment when you click on its reply link",
+ "quoted_reply" => "Quote the full comment",
+ "simple_reply" => "Reference the comment number only",
+ "comment_box_position" => "Position of the Additional Comments box",
+ "before_comments" => "Before other comments",
+ "after_comments" => "After other comments",
+ "timezone" => "Timezone used to display dates and times",
+ "local" => "Same as the server",
+ "quicksearch_fulltext" => "Include comments when performing quick searches (slower)",
+ "email_format" => "Preferred email format",
+ "html" => "HTML",
+ "text_only" => "Text Only",
+ "requestee_cc" => "Automatically add me to the CC list of $terms.bugs I am requested to review",
+ "bugmail_new_prefix" => "Add 'New:' to subject line of email sent when a new $terms.bug is filed",
+ }
+%]
+
+[% Hook.process('settings') %]
diff --git a/template/en/default/global/site-navigation.html.tmpl b/template/en/default/global/site-navigation.html.tmpl
new file mode 100644
index 0000000..5c68ad7
--- /dev/null
+++ b/template/en/default/global/site-navigation.html.tmpl
@@ -0,0 +1,75 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # bug.bug_id: integer. Number of current bug (for navigation purposes)
+ #%]
+
+[% USE Bugzilla %]
+[% cgi = Bugzilla.cgi %]
+
+[% IF NOT (cgi.user_agent("MSIE [1-6]") OR cgi.user_agent("Mozilla/4")) %]
+ <link rel="Top" href="[% urlbase FILTER html %]">
+
+ [%# *** Attachment *** %]
+ [% IF attachment && attachment.bug_id %]
+ <link rel="Up" href="show_bug.cgi?id=[% attachment.bug_id FILTER none %]">
+ [% END %]
+
+
+ [%# *** Dependencies, Activity, Print-version *** %]
+ [% IF bug %]
+ <link rel="Show" title="Dependency Tree"
+ href="showdependencytree.cgi?id=[% bug.bug_id %]&amp;hide_resolved=1">
+ [% IF Param('webdotbase') %]
+ <link rel="Show" title="Dependency Graph"
+ href="showdependencygraph.cgi?id=[% bug.bug_id %]">
+ [% END %]
+
+ <link rel="Show" title="[% terms.Bug %] Activity"
+ href="show_activity.cgi?id=[% bug.bug_id %]">
+ <link rel="Show" title="Printer-Friendly Version"
+ href="show_bug.cgi?format=multiple&amp;id=[% bug.bug_id %]">
+ [% END %]
+
+
+ [%# *** Saved Searches *** %]
+ [% IF user.showmybugslink %]
+ [% user_login = user.login FILTER uri %]
+ <link rel="Saved&nbsp;Searches" title="My [% terms.Bugs %]"
+ href="[% Param('mybugstemplate').replace('%userid%', user_login) %]">
+ [% END %]
+
+ [% FOREACH q = user.queries_subscribed %]
+ <link rel="Saved&nbsp;Search"
+ title="[% q.name FILTER html %] ([% q.user.login FILTER html %])"
+ href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=
+ [% q.name FILTER uri %]&amp;sharer_id=
+ [% q.user.id FILTER uri %]">
+ [% END %]
+
+ [%# *** Bugzilla Administration Tools *** %]
+ [% IF user.login %]
+ [% '<link rel="Administration" title="Parameters"
+ href="editparams.cgi">' IF user.in_group('tweakparams') %]
+ [% '<link rel="Administration" title="Users"
+ href="editusers.cgi">' IF user.in_group('editusers') %]
+ [% '<link rel="Administration" title="Products" href="editproducts.cgi">'
+ IF user.in_group('editcomponents') || user.get_products_by_permission("editcomponents").size %]
+ [% '<link rel="Administration" title="Flag Types"
+ href="editflagtypes.cgi">' IF user.in_group('editcomponents') %]
+ [% '<link rel="Administration" title="Groups"
+ href="editgroups.cgi">' IF user.in_group('creategroups') %]
+ [% '<link rel="Administration" title="Keywords"
+ href="editkeywords.cgi">' IF user.in_group('editkeywords') %]
+ [% '<link rel="Administration" title="Whining"
+ href="editwhines.cgi">' IF user.in_group('bz_canusewhines') %]
+ [% '<link rel="Administration" title="Sanity Check"
+ href="sanitycheck.cgi">' IF user.in_group('editcomponents') %]
+ [% END %]
+[% END %]
diff --git a/template/en/default/global/tabs.html.tmpl b/template/en/default/global/tabs.html.tmpl
new file mode 100644
index 0000000..4540668
--- /dev/null
+++ b/template/en/default/global/tabs.html.tmpl
@@ -0,0 +1,42 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # tabs: List of hashes. Must have at least one item. Each hash has:
+ # name: string. Name of the tab.
+ # link: string. relative URL to the tab's resource on this installation.
+ # label: string. text displayed in the tab.
+ # current_tab_name: string. name of the currently selected tab
+ #%]
+
+<div class="tabbed">
+ <table class="tabs" cellspacing="0" cellpadding="10" border="0" width="100%">
+ <tr>
+ <td class="spacer">&nbsp;</td>
+
+ [% FOREACH tab = tabs %]
+ [% IF tab.name == current_tab_name %]
+ <td id="tab_[% tab.name FILTER html %]" class="selected">
+ [% tab.label FILTER html %]</td>
+ [% ELSE %]
+ <td id="tab_[% tab.name FILTER html %]" class="clickable_area"
+ onClick="document.location='[% tab.link FILTER html %]'">
+ <a href="[% tab.link FILTER html %]">[% tab.label FILTER html %]</a>
+ </td>
+ [% END %]
+ [% END %]
+
+ <td class="spacer">&nbsp;</td>
+ </tr>
+ </table>
+
+ <div class="tabbody">
+ [% content %]
+ </div>
+
+</div>
diff --git a/template/en/default/global/textarea.html.tmpl b/template/en/default/global/textarea.html.tmpl
new file mode 100644
index 0000000..216f2dd
--- /dev/null
+++ b/template/en/default/global/textarea.html.tmpl
@@ -0,0 +1,55 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ #
+ # id: (optional) The "id"-attribute of the textarea.
+ # name: (optional) The "name"-attribute of the textarea.
+ # accesskey: (optional) The "accesskey"-attribute of the textarea.
+ # style: (optional) The "style"-attribute of the textarea.
+ # classes: (optional) The "class"-attribute of the textarea.
+ # wrap: (deprecated; optional) The "wrap"-attribute of the textarea.
+ # disabled: (optional) Disable the textarea.
+ # readonly: (optional) Prevent the textarea from being edited.
+ # minrows: (required) Number of rows the textarea shall have initially
+ # and when not having focus.
+ # maxrows: (optional) Number of rows the textarea shall have if
+ # maximized (which happens on getting focus). If not given,
+ # the textarea doesn't maximize when getting focus.
+ # defaultrows: (optional) Number of rows the textarea shall have if
+ # the zoom_textareas user preference if off. If not given,
+ # minrows will be used.
+ # cols: (required) Number of columns the textarea shall have.
+ # defaultcontent: (optional) Default content for the textarea.
+ # mandatory: (optional) Boolean specifying whether or not the textarea
+ # is mandatory.
+ #%]
+
+<textarea [% IF name %]name="[% name FILTER html %]"[% END %]
+ [% IF id %] id="[% id FILTER html %]"[% END %]
+ [% IF accesskey %] accesskey="[% accesskey FILTER html %]"[% END %]
+ [% IF style %] style="[% style FILTER html %]"[% END %]
+ [% IF classes %] class="[% classes FILTER html %]"[% END %]
+ [% IF wrap %] wrap="[% wrap FILTER html %]"[% END %]
+ [% IF disabled %] disabled="disabled"[% END %]
+ [% IF readonly %] readonly="readonly"[% END %]
+ [% IF defaultrows && user.settings.zoom_textareas.value == 'off' %]
+ rows="[% defaultrows FILTER html %]"
+ [% ELSE %]
+ rows="[% minrows FILTER html %]"
+ [% END %]
+ cols="[% cols FILTER html %]"
+ [% IF maxrows && user.settings.zoom_textareas.value == 'on' %]
+ onFocus="this.rows=[% maxrows FILTER html %]"
+ [% END %]
+ [% IF mandatory %]
+ aria-required="true"
+ [% END %]
+ [% IF onchange %]
+ onchange="[% onchange FILTER html %]"
+ [% END %]>[% defaultcontent FILTER html %]</textarea>
diff --git a/template/en/default/global/useful-links.html.tmpl b/template/en/default/global/useful-links.html.tmpl
new file mode 100644
index 0000000..5959ab6
--- /dev/null
+++ b/template/en/default/global/useful-links.html.tmpl
@@ -0,0 +1,74 @@
+[%# 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.
+ #%]
+
+[%# Migration note: this whole file corresponds to the old %commandmenu%
+ substitution param in 'footerhtml' %]
+
+<ul id="useful-links">
+ <li id="links-actions">
+ [% PROCESS "global/common-links.html.tmpl" qs_suffix = "_bottom" %]
+ </li>
+
+ [%# Saved searches %]
+
+ [% IF user.showmybugslink OR user.queries.size
+ OR user.queries_subscribed.size
+ %]
+ [% print_pipe = 0 %]
+ <li id="links-saved">
+ <ul class="links">
+ [% IF user.showmybugslink %]
+ [% filtered_username = user.login FILTER uri %]
+ <li><a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">My [% terms.Bugs %]</a></li>
+ [% print_pipe = 1 %]
+ [% END %]
+
+ [% FOREACH q = user.queries %]
+ [% IF q.link_in_footer %]
+ <li>[% '<span class="separator">| </span>' IF print_pipe %]
+ <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% q.name FILTER uri %]">[% q.name FILTER html %]</a></li>
+ [% print_pipe = 1 %]
+ [% END %]
+ [% END %]
+ [% new_line = print_pipe %]
+ [% print_pipe = 0 %]
+ [% FOREACH q = user.queries_subscribed %]
+ [% IF new_line %]
+ <br>
+ [% new_line = 0 %]
+ [% END %]
+ <li>
+ [% '<span class="separator">| </span>' IF print_pipe %]
+ <a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=
+ [% q.name FILTER uri %]&amp;sharer_id=
+ [% q.user.id FILTER uri %]"
+ class="shared"
+ title="Shared by [% q.user.identity FILTER html %]"
+ >[% q.name FILTER html FILTER no_break %]</a></li>
+ [% print_pipe = 1 %]
+ [% END %]
+ </ul>
+ </li>
+ [% END %]
+
+ [% IF user.reports.size %]
+ <li id="reports-saved">
+ <ul class="links">
+ [% FOREACH r = user.reports %]
+ <li>[% '<span class="separator">| </span>' IF print_pipe %]
+ <a href="report.cgi?[% r.query FILTER html %]&amp;saved_report_id=
+ [%~ r.id FILTER uri %]">[% r.name FILTER html %]</a></li>
+ [% print_pipe = 1 %]
+ [% END %]
+ </ul>
+ </li>
+ [% END %]
+
+ [%# Sections of links to more things users can do on this installation. %]
+ [% Hook.process("end") %]
+</ul>
diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl
new file mode 100644
index 0000000..8dbcd45
--- /dev/null
+++ b/template/en/default/global/user-error.html.tmpl
@@ -0,0 +1,1964 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # header_done: boolean. True if the Bugzilla header has already been printed.
+ # error: string. The tag of the error, or the error message to be displayed
+ # (deprecated). May contain HTML if it's an error message.
+ #%]
+
+[%# This is a list of all the possible user errors. Please keep them in
+ # alphabetical order by error tag, and leave a blank line between errors.
+ #
+ # Note that you must explicitly filter every single template variable
+ # in this file; if you do not wish to change it, use the "none" filter.
+ #
+ # Extension- or custom-specific error handling can be easily added
+ # via hooks: just place additional code into
+ # template/en/hook/global/user-error-errors.html.tmpl
+ # Note: be aware of uniqueness of error string parameter value, since
+ # nobody can guarantee the hook files processing order in the future.
+ #%]
+
+[% PROCESS "global/field-descs.none.tmpl" %]
+
+[% DEFAULT title = "Error" %]
+
+[% error_message = BLOCK %]
+ [% IF error == "account_creation_disabled" %]
+ [% title = "Account Creation Disabled" %]
+ User account creation has been disabled.
+ <hr>
+ New accounts must be created by an administrator. The
+ maintainer is [% Param("maintainer") %].
+
+ [% ELSIF error == "account_creation_restricted" %]
+ [% title = "Account Creation Restricted" %]
+ User account creation has been restricted.
+ <hr>
+ Contact your administrator or the maintainer
+ ([% Param("maintainer") %]) for information about
+ creating an account.
+
+ [% ELSIF error == "account_disabled" %]
+ [% title = "Account Disabled" %]
+ [% disabled_reason FILTER none %]
+ <hr>
+ If you believe your account should be restored, please
+ send email to [% Param("maintainer") %] explaining why.
+
+ [% ELSIF error == "account_exists" %]
+ [% title = "Account Already Exists" %]
+ There is already an account with
+ [% IF email %]
+ the login name [% email FILTER html %].
+ [% ELSE %]
+ that login name.
+ [% END %]
+
+ [% ELSIF error == "account_locked" %]
+ [% title = "Account Locked" %]
+ Your IP ([% ip_addr FILTER html %]) has been locked out of this
+ account until [% unlock_at FILTER time %], as you have
+ exceeded the maximum number of login attempts.
+
+ [% ELSIF error == "alias_has_comma_or_space" %]
+ [% title = "Invalid Characters In Alias" %]
+ The alias you entered, <em>[% alias FILTER html %]</em>,
+ contains one or more commas or spaces. Aliases cannot contain
+ commas or spaces because those characters are used to separate
+ aliases from each other in lists. Please choose an alias
+ that does not contain commas and spaces.
+
+ [% ELSIF error == "alias_in_use" %]
+ [% title = "Alias In Use" %]
+ [% IF user.can_see_bug(bug_id) %]
+ [% terms.Bug %] [%+ bug_id FILTER bug_link(bug_id) FILTER none %]
+ [% ELSE %]
+ Another [% terms.bug %]
+ [% END %]
+ has already taken the alias <em>[% alias FILTER html %]</em>.
+ Please choose another alias.
+
+ [% ELSIF error == "alias_is_numeric" %]
+ [% title = "Alias Is Numeric" %]
+ You tried to give this [% terms.bug %] the alias <em>[% alias FILTER html %]</em>,
+ but aliases cannot be merely numbers, since they could
+ then be confused with [% terms.bug %] IDs. Please choose an
+ alias containing at least one letter.
+
+ [% ELSIF error == "alias_too_long" %]
+ [% title = "Alias Too Long" %]
+ [% terms.Bug %] aliases cannot be longer than 20 characters.
+ Please choose a shorter alias.
+
+ [% ELSIF error == "attachment_bug_id_mismatch" %]
+ [% title = "Invalid Attachments" %]
+ You tried to perform an action on attachments from different [% terms.bugs %].
+ This operation requires all attachments to be from the same [% terms.bug %].
+
+ [% ELSIF error == "auth_cant_create_account" %]
+ [% title = "Can't create accounts" %]
+ This site is using an authentication scheme which does not permit
+ account creation. Please contact an administrator to get a new account
+ created.
+
+ [% ELSIF error == "auth_failure" %]
+ [% title = "Authorization Required" %]
+ [% admindocslinks = {'groups.html' => 'Group Security'} %]
+ Sorry,
+ [% IF group %]
+ you aren't a member of the '[% group FILTER html %]' group,
+ [% END %]
+
+ [% IF reason %]
+ [% IF group %] and [% END %]
+ [% IF reason == "cant_bless" %]
+ you don't have permissions to add or remove people from a group,
+ [% ELSIF reason == "not_visible" %]
+ there are visibility restrictions on certain user groups,
+ [% END %]
+ [% END %]
+
+ [% IF group || reason %] and so [% END %] you are not authorized to
+ [% IF action == "access" %]
+ access
+ [% ELSIF action == "add" %]
+ add new
+ [% ELSIF action == "begin" %]
+ begin
+ [% ELSIF action == "modify" %]
+ modify
+ [% ELSIF action == "delete" %]
+ delete
+ [% ELSIF action == "edit" %]
+ add, modify or delete
+ [% ELSIF action == "run" %]
+ run
+ [% ELSIF action == "schedule" %]
+ schedule
+ [% ELSIF action == "search" %]
+ search
+ [% ELSIF action == "use" %]
+ use
+ [% ELSIF action == "approve" %]
+ approve
+ [% ELSE %]
+ [%+ Hook.process('auth_failure_action') %]
+ [% END %]
+
+ [% IF object == "administrative_pages" %]
+ administrative pages
+ [% ELSIF object == "attachment" %]
+ [% IF attach_id %]
+ attachment #[% attach_id FILTER html %]
+ [% ELSE %]
+ this attachment
+ [% END %]
+ [% ELSIF object == "bugs" %]
+ [%+ terms.bugs %]
+ [% ELSIF object == "bug_fields" %]
+ the [% field_descs.$field FILTER html %] field
+ [% ELSIF object == "charts" %]
+ the "New Charts" feature
+ [% ELSIF object == "classifications" %]
+ classifications
+ [% ELSIF object == "components" %]
+ components
+ [% ELSIF object == "custom_fields" %]
+ custom fields
+ [% ELSIF object == "field_values" %]
+ field values
+ [% ELSIF object == "flagtypes" %]
+ flag types
+ [% ELSIF object == "group_access" %]
+ group access
+ [% ELSIF object == "groups" %]
+ groups
+ [% ELSIF object == "keywords" %]
+ keywords
+ [% ELSIF object == "milestones" %]
+ milestones
+ [% ELSIF object == "multiple_bugs" %]
+ multiple [% terms.bugs %] at once
+ [% ELSIF object == "parameters" %]
+ parameters
+ [% ELSIF object == "products" %]
+ products
+ [% ELSIF object == "quips" %]
+ quips
+ [% ELSIF object == "reports" %]
+ whine reports
+ [% ELSIF object == "sanity_check" %]
+ a sanity check
+ [% ELSIF object == "settings" %]
+ settings
+ [% ELSIF object == "sudo_session" %]
+ a sudo session
+ [% ELSIF object == "timetracking_summaries" %]
+ time-tracking summary reports
+ [% ELSIF object == "user" %]
+ the user [% IF userid %] with ID '[% userid FILTER html %]'
+ [% ELSE %]you specified [% END %]
+ [% ELSIF object == "users" %]
+ users
+ [% ELSIF object == "versions" %]
+ versions
+ [% ELSIF object == "workflow" %]
+ the workflow
+ [% ELSE %]
+ [%+ Hook.process('auth_failure_object') %]
+ [% END %].
+
+ [% Hook.process("auth_failure") %]
+
+ [% ELSIF error == "auth_untrusted_request" %]
+ [% title = "Untrusted Authentication Request" %]
+ You tried to log in using the <em>[% login FILTER html %]</em> account,
+ but [% terms.Bugzilla %] is unable to trust your request. Make sure
+ your web browser accepts cookies and that you haven't been redirected
+ here from an external web site.
+ <a href="index.cgi?GoAheadAndLogIn=1">Click here</a> if you really want
+ to log in.
+
+ [% ELSIF error == "attachment_deletion_disabled" %]
+ [% title = "Attachment Deletion Disabled" %]
+ Attachment deletion is disabled on this installation.
+
+ [% ELSIF error == "attachment_removed" %]
+ [% title = "Attachment Removed" %]
+ The attachment you are attempting to access has been removed.
+
+ [% ELSIF error == "bad_page_cgi_id" %]
+ [% title = "Invalid Page ID" %]
+ The ID <code>[% page_id FILTER html %]</code> is not a
+ valid page identifier.
+
+ [% ELSIF error == "bug_access_denied" %]
+ [% title = "Access Denied" %]
+ [% admindocslinks = {'groups.html' => 'Group Security'} %]
+ You are not authorized to access [% terms.bug %] #[% bug_id FILTER html %].
+
+ [% ELSIF error == "bug_access_query" %]
+ [% title = "Access Denied" %]
+ [% docslinks = {'myaccount.html' => 'Creating an account'} %]
+ You are not authorized to access [% terms.bug %] #[% bug_id FILTER html %].
+ To see this [% terms.bug %], you must
+ first <a href="show_bug.cgi?id=
+ [% bug_id FILTER uri %]&amp;GoAheadAndLogIn=1">log
+ in to an account</a> with the appropriate permissions.
+
+ [% ELSIF error == "bug_url_invalid" %]
+ [% title = "Invalid $terms.Bug URL" %]
+ <code>[% url FILTER html %]</code> is not a valid URL to [% terms.abug %].
+ [% IF reason == 'http' %]
+ URLs must start with "http" or "https".
+ [% ELSIF reason == 'path_only' %]
+ You must specify a full URL.
+ [% ELSIF reason == 'id' %]
+ There is no valid [% terms.bug %] id in that URL.
+ [% ELSE %]
+ [%+ field_descs.see_also FILTER html %] URLs should point to one of:
+ <ul>
+ <li><code>show_bug.cgi</code> in a [% terms.Bugzilla %]
+ installation.</li>
+ <li>A b[% %]ug on launchpad.net</li>
+ <li>An issue on code.google.com.</li>
+ <li>A b[% %]ug on b[% %]ugs.debian.org.</li>
+ <li>An issue in a JIRA installation.</li>
+ <li>A ticket in a Trac installation.</li>
+ <li>A b[% %]ug in a MantisBT installation.</li>
+ <li>A b[% %]ug on sourceforge.net.</li>
+ <li>An issue on github.com.</li>
+ [% Hook.process('bug_url_invalid_tracker') %]
+ </ul>
+ [% END %]
+
+ [% ELSIF error == "bug_url_too_long" %]
+ [% title = "Invalid $terms.Bug URL" %]
+ [% terms.Bug %] URLs cannot be longer than
+ [%+ constants.MAX_BUG_URL_LENGTH FILTER none %] characters long.
+ <code>[% url FILTER html %]</code> is too long.
+
+ [% ELSIF error == "buglist_parameters_required" %]
+ [% title = "Parameters Required" %]
+ [% docslinks = {'query.html' => "Searching for $terms.bugs",
+ 'query.html#list' => "$terms.Bug lists"} %]
+ You may not search, or create saved searches, without any search terms.
+
+ [% ELSIF error == "cc_remove_denied" %]
+ [% title = "Change Denied" %]
+ You do not have permission to remove other people from the CC list.
+
+ [% ELSIF error == "chart_too_large" %]
+ [% title = "Chart Too Large" %]
+ Sorry, but 2000 x 2000 is the maximum size for a chart.
+
+ [% ELSIF error == "comment_id_invalid" %]
+ [% id FILTER html %] is not a valid comment id.
+
+ [% ELSIF error == "comment_invalid_isprivate" %]
+ You tried to modify the privacy of comment id [% id FILTER html %],
+ but that is not a valid comment on this [% terms.bug %].
+
+ [% ELSIF error == "comment_is_private" %]
+ Comment id [% id FILTER html %] is private.
+
+ [% ELSIF error == "comment_required" %]
+ [% title = "Comment Required" %]
+ You have to specify a
+ [% IF old.defined && new.defined %]
+ <b>comment</b> when changing the [% field_descs.$field FILTER html %]
+ of [% terms.abug %] from [% (old || "(empty)") FILTER html %]
+ to [% (new || "(empty)") FILTER html %].
+ [% ELSIF new %]
+ description for this [% terms.bug %].
+ [% ELSE %]
+ <b>comment</b> on this change.
+ [% END %]
+
+ [% ELSIF error == "comment_too_long" %]
+ [% title = "Comment Too Long" %]
+ Comments cannot be longer than
+ [%+ constants.MAX_COMMENT_LENGTH FILTER html %] characters.
+
+ [% ELSIF error == "auth_classification_not_enabled" %]
+ [% title = "Classification Not Enabled" %]
+ Sorry, classification is not enabled.
+
+ [% ELSIF error == "classification_name_too_long" %]
+ [% title = "Classification Name Too Long" %]
+ The name of a classification is limited to [% constants.MAX_CLASSIFICATION_SIZE FILTER html %]
+ characters. '[% name FILTER html %]' is too long ([% name.length %] characters).
+
+[% ELSIF error == "classification_not_specified" %]
+ [% title = "You Must Supply A Classification Name" %]
+ You must enter a classification name.
+
+ [% ELSIF error == "classification_already_exists" %]
+ [% title = "Classification Already Exists" %]
+ A classification with the name '[% name FILTER html %]' already exists.
+
+ [% ELSIF error == "classification_invalid_sortkey" %]
+ [% title = "Invalid Sortkey for Classification" %]
+ The sortkey '[% sortkey FILTER html %]' is invalid. It must be an
+ integer between 0 and [% constants.MAX_SMALLINT FILTER html %].
+
+ [% ELSIF error == "classification_not_deletable" %]
+ [% title = "Default Classification Cannot Be Deleted" %]
+ You cannot delete the default classification
+
+ [% ELSIF error == "classification_has_products" %]
+ Sorry, there are products for this classification. You
+ must reassign those products to another classification before you
+ can delete this one.
+
+ [% ELSIF error == "component_already_exists" %]
+ [% title = "Component Already Exists" %]
+ The <em>[% product.name FILTER html %]</em> product already has
+ a component named <em>[% name FILTER html %]</em>.
+
+ [% ELSIF error == "component_blank_description" %]
+ [% title = "Blank Component Description Not Allowed" %]
+ You must enter a non-blank description for this component.
+
+ [% ELSIF error == "component_blank_name" %]
+ [% title = "Blank Component Name Not Allowed" %]
+ You must enter a name for this new component.
+
+ [% ELSIF error == "component_has_bugs" %]
+ [% title = BLOCK %]Component has [% terms.Bugs %][% END %]
+ There are [% nb FILTER html %] [%+ terms.bugs %] entered for this component!
+ You must reassign those [% terms.bugs %] to another component before you
+ can delete this one.
+
+ [% ELSIF error == "component_is_last" %]
+ [% title = BLOCK %]Last Component in this Product[% END %]
+ '[% comp.name FILTER html %]' is the last component of the
+ '[% comp.product.name FILTER html %]' product. You cannot delete it.
+
+ [% ELSIF error == "component_name_too_long" %]
+ [% title = "Component Name Is Too Long" %]
+ The name of a component is limited to [% constants.MAX_COMPONENT_SIZE FILTER html %]
+ characters. '[% name FILTER html %]' is too long ([% name.length %] characters).
+
+ [% ELSIF error == "component_need_initialowner" %]
+ [% title = "Component Requires Default Assignee" %]
+ A default assignee is required for this component.
+
+ [% ELSIF error == "customfield_nonexistent" %]
+ [% title = "Unknown Custom Field" %]
+ There is no custom field with the name '[% name FILTER html %]'.
+
+ [% ELSIF error == "customfield_not_obsolete" %]
+ [% title = "Custom Field Not Obsolete" %]
+ The custom field '[% name FILTER html %]' is not obsolete.
+ Please obsolete a custom field before attempting to delete it.
+
+ [% ELSIF error == "customfield_has_activity" %]
+ [% title = "Custom Field Has Activity" %]
+ The custom field '[% name FILTER html %]' cannot be deleted because
+ it has recorded activity.
+
+ [% ELSIF error == "customfield_has_contents" %]
+ [% title = "Custom Field Has Contents" %]
+ The custom field '[% name FILTER html %]' cannot be deleted because
+ at least one [% terms.bug %] has a non empty value for this field.
+
+ [% ELSIF error == "dependency_loop_multi" %]
+ [% title = "Dependency Loop Detected" %]
+ The following [% terms.bug %](s) would appear on both the "depends on"
+ and "blocks" parts of the dependency tree if these changes
+ are committed:
+ [% FOREACH dep = deps %]
+ [%+ dep FILTER bug_link(dep) FILTER none %]
+ [% END %].
+ This would create a circular dependency, which is not allowed.
+
+ [% ELSIF error == "dependency_loop_single" %]
+ [% title = "Dependency Loop Detected" %]
+ You can't make [% terms.abug %] block itself or depend on itself.
+
+ [% ELSIF error == "dupe_id_required" %]
+ [% title = "Duplicate $terms.Bug Id Required" %]
+ You must specify [% terms.abug %] id to mark this [% terms.bug %]
+ as a duplicate of.
+
+ [% ELSIF error == "dupe_not_allowed" %]
+ [% title = "Cannot mark $terms.bugs as duplicates" %]
+ You cannot mark [% terms.bugs %] as duplicates when
+ changing several [% terms.bugs %] at once.
+
+ [% ELSIF error == "dupe_loop_detected" %]
+ [% title = "Loop detected among duplicates" %]
+ You cannot mark [% terms.bug %] [%+ bug_id FILTER html %] as
+ a duplicate of
+ [% IF dupe_of == bug_id %]
+ itself
+ [% ELSE %]
+ [%+ terms.bug %] [%+ dupe_of FILTER html %], because it
+ would create a duplicate loop
+ [% END %].
+
+ [% ELSIF error == "email_change_in_progress" %]
+ [% title = "Email Change Already In Progress" %]
+ Email change already in progress; please check your email.
+
+ [% ELSIF error == "email_no_body" %]
+ Your message did not contain any text, as far as we could tell.
+
+ [% ELSIF error == "empty_group_description" %]
+ [% title = "The group description cannot be empty" %]
+ You must enter a description for the group.
+
+ [% ELSIF error == "empty_group_name" %]
+ [% title = "The group name cannot be empty" %]
+ You must enter a name for the group.
+
+ [% ELSIF error == "entry_access_denied" %]
+ [% title = "Permission Denied" %]
+ [% admindocslinks = {'groups.html' => 'Group Security'} %]
+ Sorry, either the product <em>[% product FILTER html %]</em>
+ does not exist or you aren't authorized to
+ enter [% terms.abug %] into it.
+
+ [% ELSIF error == "extension_create_no_name" %]
+ You must specify a name for your extension, as an argument to this script.
+
+ [% ELSIF error == "extension_disabled" %]
+ [% title = "Extension Disabled" %]
+ You cannot access this page because the extension '[% name FILTER html %]'
+ is disabled.
+
+ [% ELSIF error == "extension_first_letter_caps" %]
+ The first letter of your extension's name must be a capital letter.
+ (You specified '[% name FILTER html %]'.)
+
+ [% ELSIF error == "feature_disabled" %]
+ The [% install_string("feature_$feature") FILTER html %] feature is not
+ available in this [% terms.Bugzilla %].
+ [% IF user.in_group('admin') %]
+ If you would like to enable this feature, please run
+ <kbd>checksetup.pl</kbd> to see how to install the necessary
+ requirements for this feature.
+ [% END %]
+
+ [% ELSIF error == "field_already_exists" %]
+ [% title = "Field Already Exists" %]
+ The field '[% field.name FILTER html %]'
+ ([% field.description FILTER html %]) already exists. Please
+ choose another name.
+
+ [% ELSIF error == "field_cant_control_self" %]
+ [% title = "Field Can't Control Itself" %]
+ The [% field.description FILTER html %] field can't be set to control
+ itself.
+
+ [% ELSIF error == "field_control_must_be_select" %]
+ [% title = "Invalid Field Type Selected" %]
+ Only drop-down and multi-select fields can be used to control
+ the visibility/values of other fields. [% field.description FILTER html %]
+ is not the right type of field.
+
+ [% ELSIF error == "field_invalid_name" %]
+ [% title = "Invalid Field Name" %]
+ '[% name FILTER html %]' is not a valid name for a field.
+ A name may contain only letters, numbers, and the underscore character.
+
+ [% ELSIF error == "field_invalid_sortkey" %]
+ [% title = "Invalid Sortkey for Field" %]
+ The sortkey [% sortkey FILTER html %] that you have provided for
+ this field is not a valid positive integer.
+
+ [% ELSIF error == "field_missing_description" %]
+ [% title = "Missing Description for Field" %]
+ You must enter a description for this field.
+
+ [% ELSIF error == "field_long_desc_too_long" %]
+ [% title = "Long Description for Field too long" %]
+ The long description you have provided for this field is longer than
+ [% constants.MAX_FIELD_LONG_DESC_LENGTH FILTER html %] characters.
+
+ [% ELSIF error == "field_missing_name" %]
+ [% title = "Missing Name for Field" %]
+ You must enter a name for this field.
+
+ [% ELSIF error == "field_value_control_select_only" %]
+ [% title = "Invalid Value Control Field" %]
+ Only Drop-Down or Multi-Select fields can have a field that
+ controls their values.
+
+ [% ELSIF error == "field_visibility_values_must_be_selected" %]
+ [% title = "Missing visibility field values" %]
+ At least one value must be selected for the visibility field
+ '[% field.name FILTER html %]'.
+
+ [% ELSIF error == "fieldname_invalid" %]
+ [% title = "Specified Field Does Not Exist" %]
+ The field '[% field.name FILTER html %]' does not exist or
+ cannot be edited with this interface.
+
+ [% ELSIF error == "fieldvalue_already_exists" %]
+ [% title = "Field Value Already Exists" %]
+ The value '[% value.name FILTER html %]' already exists for the
+ [%+ field.description FILTER html %] field.
+
+ [% ELSIF error == "fieldvalue_is_controller" %]
+ [% title = "Value Controls Other Fields" %]
+ You cannot delete the [% value.field.description FILTER html %]
+ '[% value.name FILTER html %]' because
+ [% IF fields.size %]
+ it controls the visibility of the following fields:
+ [%+ fields.join(', ') FILTER html %].
+ [% END %]
+ [% ' Also, ' IF fields.size AND vals.size %]
+ [% IF vals.size %]
+ it controls the visibility of the following field values:
+ <ul>
+ [% FOREACH field_name = vals.keys %]
+ [% FOREACH val = vals.${field_name} %]
+ <li>[% val.field.name FILTER html %]:
+ '[% val.name FILTER html %]'</li>
+ [% END %]
+ [% END %]
+ </ul>
+ [% END %]
+
+ [% ELSIF error == "fieldvalue_is_default" %]
+ [% title = "Specified Field Value Is Default" %]
+ '[% value.name FILTER html %]' is the default value for
+ the '[% field.description FILTER html %]' field and cannot be deleted
+ or disabled.
+ [% IF user.in_group('tweakparams') %]
+ You have to <a href="editparams.cgi?section=bugfields#
+ [%- param_name FILTER uri %]">change</a> the default value first.
+ [% END %]
+
+ [% ELSIF error == "fieldvalue_name_too_long" %]
+ [% title = "Field Value Is Too Long" %]
+ The value of a field is limited to
+ [%+ constants.FIELD_VALUE_MAX_SIZE FILTER none %] characters.
+ '[% value FILTER html %]' is too long ([% value.length %] characters).
+
+ [% ELSIF error == "fieldvalue_not_editable" %]
+ [% title = "Field Value Not Editable" %]
+ The value '[% old_value.name FILTER html %]' cannot be renamed because
+ it plays some special role for the '[% field.description FILTER html %]'
+ field.
+
+ [% ELSIF error == "fieldvalue_not_deletable" %]
+ [% title = "Field Value Not Deletable" %]
+ The value '[% value.name FILTER html %]' cannot be removed or
+ disabled, because it plays some special role for the
+ '[% field.description FILTER html %]' field.
+
+ [% ELSIF error == "fieldvalue_reserved_word" %]
+ [% title = "Reserved Word Not Allowed" %]
+ You cannot use the value '[% value FILTER html %]' for the
+ '[% field.description FILTER html %]' field. This value is used internally.
+ Please choose another one.
+
+ [% ELSIF error == "fieldvalue_sortkey_invalid" %]
+ [% title = "Invalid Field Value Sortkey" %]
+ The sortkey '[% sortkey FILTER html %]' for the
+ [%+ field.description FILTER html %] field must be an integer
+ between 0 and [% constants.MAX_SMALLINT FILTER none %].
+
+ [% ELSIF error == "fieldvalue_still_has_bugs" %]
+ [% title = "You Cannot Delete This Field Value" %]
+ You cannot delete the value '[% value.name FILTER html %]' from the
+ [%+ field.description FILTER html %] field, because there are still
+ [%+ value.bug_count FILTER html %] [%+ terms.bugs %] using it.
+
+ [% ELSIF error == "fieldvalue_undefined" %]
+ [% title = "Undefined Value Not Allowed" %]
+ You must specify a value.
+
+ [% ELSIF error == "file_not_specified" %]
+ [% title = "No File Specified" %]
+ You did not specify a file to attach.
+
+ [% ELSIF error == "filename_not_specified" %]
+ [% title = "No Filename Specified" %]
+ You must specify a filename for this attachment.
+
+ [% ELSIF error == "file_too_large" %]
+ [% title = "File Too Large" %]
+ [%# Convert maxlocalattachment from Mb to Kb %]
+ [% max_local = Param('maxlocalattachment') * 1024 %]
+ [% max_limit = [Param('maxattachmentsize'), max_local] %]
+ The file you are trying to attach is [% filesize FILTER html %]
+ kilobytes (KB) in size. Attachments cannot be more than
+ [%# Hack to get the max value between both limits %]
+ [%+ max_limit.nsort.last FILTER html %] KB. <br>
+ We recommend that you store your attachment elsewhere
+ and then paste the URL to this file on the attachment
+ creation page in the appropriate text field, which you can access by
+ clicking the "paste text as attachment" link.
+ <br>Alternately, if your attachment is an image, you could convert
+ it to a compressible format like JPG or PNG and try again.
+
+ [% ELSIF error == "flag_requestee_disabled" %]
+ [% title = "Flag not Requestable from Specific Person" %]
+ You can't ask a specific person for <em>[% type.name FILTER html %]</em>.
+
+ [% ELSIF error == "flag_requestee_needs_privs" %]
+ [% title = "Flag Requestee Needs Privileges" %]
+ [% requestee.identity FILTER html %] does not have permission to set the
+ <em>[% flagtype.name FILTER html %]</em> flag. Please select a user who is
+ a member of the <em>[% flagtype.grant_group.name FILTER html %]</em> group.
+
+ [% ELSIF error == "flag_requestee_unauthorized" %]
+ [% title = "Flag Requestee Not Authorized" %]
+ [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags',
+ 'groups.html' => 'Group Security'} %]
+ [% docslinks = {'flags-overview.html' => 'An overview on Flags',
+ 'flags.html' => 'Using Flags'} %]
+
+ You asked [% requestee.identity FILTER html %]
+ for <code>[% flag_type.name FILTER html %]</code> on [% terms.bug %]
+ [%+ bug_id FILTER html -%]
+ [% IF attach_id && attach_id > 0 %], attachment [% attach_id FILTER html %][% END %],
+ but that [% terms.bug %] has been restricted to users in certain groups,
+ and the user you asked isn't in all the groups to which
+ the [% terms.bug %] has been restricted.
+ Please choose someone else to ask, or make the [% terms.bug %] accessible
+ to users on its CC: list and add that user to the list.
+
+ [% ELSIF error == "flag_requestee_unauthorized_attachment" %]
+ [% title = "Flag Requestee Not Authorized" %]
+ [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags',
+ 'groups.html' => 'Group Security'} %]
+ [% docslinks = {'flags-overview.html' => 'An overview on Flags',
+ 'flags.html' => 'Using Flags'} %]
+
+ You asked [% requestee.identity FILTER html %]
+ for <code>[% flag_type.name FILTER html %]</code> on
+ [%+ terms.bug %] [%+ bug_id FILTER html %],
+ attachment [% attach_id FILTER html %], but that attachment
+ is restricted to users in the [% Param("insidergroup") FILTER html %] group,
+ and the user you asked isn't in that group. Please choose someone else
+ to ask, or ask an administrator to add the user to the group.
+
+ [% ELSIF error == "flag_status_invalid" %]
+ [% title = "Flag Status Invalid" %]
+ The flag status <em>[% status FILTER html %]</em>
+ [% IF id %]
+ for flag ID #[% id FILTER html %]
+ [% END %]
+ is invalid.
+
+ [% ELSIF error == "flag_type_cannot_deactivate" %]
+ [% title = "Cannot Deactivate Flag Type" %]
+ Sorry, but the flag type '[% flagtype.name FILTER html %]' also applies to some
+ products you cannot see, and so you are not allowed to deactivate it.
+
+ [% ELSIF error == "flag_type_cannot_delete" %]
+ [% title = "Flag Type Deletion Not Allowed" %]
+ Sorry, but the flag type '[% flagtype.name FILTER html %]' also applies to some
+ products you cannot see, and so you are not allowed to delete it.
+
+ [% ELSIF error == "flag_type_cc_list_invalid" %]
+ [% title = "Flag Type CC List Invalid" %]
+ [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags'} %]
+ The CC list [% cc_list FILTER html %] must be less than 200 characters long.
+
+ [% ELSIF error == "flag_type_component_without_product" %]
+ [% title = "Product Missing" %]
+ A component was selected without a product being selected.
+
+ [% ELSIF error == "flag_type_description_invalid" %]
+ [% title = "Flag Type Description Invalid" %]
+ [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags'} %]
+ You must enter a description for this flag type.
+
+ [% ELSIF error == "flag_type_name_invalid" %]
+ [% title = "Flag Type Name Invalid" %]
+ [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags'} %]
+ The name <em>[% name FILTER html %]</em> must be 1-50 characters long
+ and must not contain any spaces or commas.
+
+ [% ELSIF error == "flag_type_not_editable" %]
+ [% title = "Flag Type Not Editable" %]
+ You are not allowed to edit properties of the '[% flagtype.name FILTER html %]'
+ flag type, because this flag type is not available for the products you can administer.
+
+ [% ELSIF error == "flag_type_not_multiplicable" %]
+ [% docslinks = {'flags-overview.html' => 'An overview on Flags',
+ 'flags.html' => 'Using Flags'} %]
+ You cannot have several <em>[% type.name FILTER html %]</em> flags
+ for this [% IF attachment %] attachment [% ELSE %] [%+ terms.bug %] [% END %].
+
+ [% ELSIF error == "flag_update_denied" %]
+ [% title = "Flag Modification Denied" %]
+ [% admindocslinks = {'flags-overview.html#flags-admin' => 'Administering Flags',
+ 'groups.html' => 'Group Security'} %]
+ [% docslinks = {'flags-overview.html' => 'An overview on Flags',
+ 'flags.html' => 'Using Flags'} %]
+ You tried to [% IF status == "+" %] grant [% ELSIF status == "-" %] deny
+ [% ELSIF status == "X" %] clear [% ELSE %] request [% END %]
+ <code>[% name FILTER html %]
+ [% IF status == "X" %][% old_status FILTER html %][% END %]</code>.
+
+ Only a user with the required permissions may make this change.
+
+ [% ELSIF error == "format_not_found" %]
+ [% title = "Format Not Found" %]
+ The requested format <em>[% format FILTER html %]</em> does not exist with
+ a content type of <em>[% ctype FILTER html %]</em>.
+ [% IF invalid %]
+ Both parameters must contain letters and hyphens only.
+ [% END %]
+
+ [% ELSIF error == "flag_type_sortkey_invalid" %]
+ [% title = "Flag Type Sort Key Invalid" %]
+ The sort key <em>[% sortkey FILTER html %]</em> must be an integer
+ between 0 and [% constants.MAX_SMALLINT FILTER none %].
+
+ [% ELSIF error == "freetext_too_long" %]
+ [% title = "Text Too Long" %]
+ The text you entered in the [% field_descs.$field FILTER html %]
+ field is too long ([% text.length FILTER html %] characters,
+ above the maximum length allowed of
+ [%+ constants.MAX_FREETEXT_LENGTH FILTER none %] characters).
+
+ [% ELSIF error == "group_cannot_delete" %]
+ [% title = "Cannot Delete Group" %]
+ The <em>[% group.name FILTER html %]</em> group cannot be deleted because
+ there are
+ <a href="editgroups.cgi?action=del&amp;group=
+ [%- group.id FILTER uri %]">records</a>
+ in the database which refer to it. All references to this group must
+ be removed before you can remove it.
+
+ [% ELSIF error == "group_exists" %]
+ [% title = "The group already exists" %]
+ The group [% name FILTER html %] already exists.
+
+ [% ELSIF error == "group_has_special_role" %]
+ [% title = "Group not deletable" %]
+ [% IF groups.size == 1 %]
+ [% attr = "it" %]
+ [% param = "parameter" %]
+ [% ELSE %]
+ [% attr = "them" %]
+ [% param = "parameters" %]
+ [% END %]
+ The group '[% name FILTER html %]' is used by the
+ '[% groups.join("' and '") FILTER html %]' [% param FILTER html %].
+ In order to delete this group, you first have to change the
+ [%+ param FILTER html %] to make [% attr FILTER html %] point to another group.
+
+
+ [% ELSIF error == "group_invalid_removal" %]
+ You tried to remove [% terms.bug %] [%+ bug_id FILTER html %]
+ from the '[% name FILTER html %]' group, but either this group does not exist,
+ or you are not allowed to remove [% terms.bugs %] from this group in the
+ '[% product FILTER html %]' product.
+
+ [% ELSIF error == "group_restriction_not_allowed" %]
+ [% title = "Group Restriction Not Allowed" %]
+ You tried to restrict [% bug_id ? "$terms.bug $bug_id" : terms.abug FILTER html %]
+ to the '[% name FILTER html %]' group, but either this group does not exist,
+ or you are not allowed to restrict [% terms.bugs %] to this group in the
+ '[% product FILTER html %]' product.
+
+ [% ELSIF error == "group_not_specified" %]
+ [% title = "Group not specified" %]
+ No group was specified.
+
+ [% ELSIF error == "group_not_visible" %]
+ [% title = "Group Not Allowed" %]
+ You are not allowed to see members of the [% group.name FILTER html %]
+ group.
+
+ [% ELSIF error == "system_group_not_deletable" %]
+ [% title = "System Groups not deletable" %]
+ <em>[% name FILTER html %]</em> is a system group.
+ This group cannot be deleted.
+
+ [% ELSIF error == "illegal_attachment_edit" %]
+ [% title = "Unauthorized Action" %]
+ You are not authorized to edit attachment [% attach_id FILTER html %].
+
+ [% ELSIF error == "illegal_attachment_edit_bug" %]
+ [% title = "Unauthorized Action" %]
+ You are not authorized to edit attachments on [% terms.bug %]
+ [%+ bug_id FILTER html %].
+
+ [% ELSIF error == "illegal_bug_status_transition" %]
+ [% title = "Illegal $terms.Bug Status Change" %]
+ [% IF old.defined %]
+ You are not allowed to change the [% terms.bug %] status from
+ [%+ old.name FILTER html %] to [% new.name FILTER html %].
+ [% ELSE %]
+ You are not allowed to file new [% terms.bugs %] with the
+ [%+ new.name FILTER html %] status.
+ [% END %]
+
+ [% ELSIF error == "illegal_change" %]
+ [% title = "Not allowed" %]
+ You tried to change the
+ <strong>[% field_descs.$field FILTER html %]</strong> field
+ [% IF oldvalue.defined AND oldvalue != "" %]
+ from <em>[% oldvalue.join(', ') FILTER html %]</em>
+ [% END %]
+ [% IF newvalue.defined AND newvalue != "" %]
+ to <em>[% newvalue.join(', ') FILTER html %]</em>
+ [% END %],
+ but only
+ [% IF privs < constants.PRIVILEGES_REQUIRED_EMPOWERED %]
+ the assignee
+ [% IF privs < constants.PRIVILEGES_REQUIRED_ASSIGNEE %] or reporter [% END %]
+ of the [% terms.bug %], or
+ [% END %]
+ a user with the required permissions may change that field.
+
+ [% ELSIF error == "illegal_change_deps" %]
+ [% title = "Not allowed" %]
+ You tried to change the
+ <strong>[% field_descs.$field FILTER html %]</strong> field
+ but only a user allowed to edit
+ both related [% terms.bugs %] may change that field.
+
+ [% ELSIF error == "illegal_date" %]
+ [% title = "Illegal Date" %]
+ '<tt>[% date FILTER html %]</tt>' is not a legal date.
+ [% IF format %]
+ Please use the format '<tt>[% format FILTER html %]</tt>'.
+ [% END %]
+
+ [% ELSIF error == "illegal_email_address" %]
+ [% title = "Invalid Email Address" %]
+ The e-mail address you entered (<b>[% addr FILTER html %]</b>)
+ didn't pass our syntax checking for a legal email address.
+ [% IF default %]
+ A legal address must contain exactly one '@',
+ and at least one '.' after the @.
+ [% ELSE %]
+ [%+ Param('emailregexpdesc') FILTER html_light %]
+ [% END %]
+ It also must not contain any illegal characters.
+
+ [% ELSIF error == "illegal_frequency" %]
+ [% title = "Too Frequent" %]
+ Unless you are an administrator, you may not create series which are
+ run more often than once every [% minimum FILTER html %] days.
+
+ [% ELSIF error == "illegal_group_control_combination" %]
+ [% title = "Your Group Control Combination Is Illegal" %]
+ [% admindocslinks = {'groups.html' => 'Assigning Group Controls to Products'} %]
+ Your group control combination for group &quot;
+ [% groupname FILTER html %]&quot; is illegal.
+
+ [% ELSIF error == "illegal_query_name" %]
+ [% title = "Illegal Search Name" %]
+ The name of your search cannot contain any of the following characters:
+ &lt;, &gt;, &amp;.
+
+ [% ELSIF error == "illegal_series_creation" %]
+ [% admindocslinks = {'groups.html' => 'Group security'} %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ You are not authorized to create series.
+
+ [% ELSIF error == "illegal_series_edit" %]
+ [% admindocslinks = {'groups.html' => 'Group security'} %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ You are not authorized to edit this series. To do this, you must either
+ be its creator, or an administrator.
+
+ [% ELSIF error == "illegal_time" %]
+ [% title = "Illegal Time" %]
+ '<tt>[% time FILTER html %]</tt>' is not a legal time.
+ [% IF format %]
+ Please use the format '<tt>[% format FILTER html %]</tt>'.
+ [% END %]
+
+ [% ELSIF error == "illegal_regexp" %]
+ [% title = "Illegal Regular Expression" %]
+ The regular expression you provided [% value FILTER html %] is not valid.
+ The error was: [% dberror FILTER html %].
+
+ [% ELSIF error == "insufficient_data_points" %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ We don't have enough data points to make a graph (yet).
+
+ [% ELSIF error == "invalid_attach_id" %]
+ [% title = "Invalid Attachment ID" %]
+ The attachment id [% attach_id FILTER html %] is invalid.
+
+ [% ELSIF error == "bug_id_does_not_exist" %]
+ [% title = BLOCK %]Invalid [% terms.Bug %] ID[% END %]
+ [% terms.Bug %] #[% bug_id FILTER html %] does not exist.
+
+ [% ELSIF error == "improper_bug_id_field_value" %]
+ [% title = BLOCK %]
+ [% IF bug_id %]Invalid [% ELSE %]Missing [% END %] [% terms.Bug %] ID
+ [% END %]
+ [% IF bug_id %]
+ '[% bug_id FILTER html %]' is not a valid [% terms.bug %] number
+ nor an alias to [% terms.abug %].
+ [% ELSE %]
+ [% IF field %]
+ The '[% field_descs.$field FILTER html %]' field
+ cannot be empty.
+ [% END %]
+ You must enter a valid [% terms.bug %] number!
+ [% END %]
+
+ [% ELSIF error == "invalid_changedsince" %]
+ [% title = "Invalid 'Changed Since'" %]
+ The 'changed since' value, '[% changedsince FILTER html %]', must be an
+ integer >= 0.
+
+ [% ELSIF error == "invalid_content_type" %]
+ [% title = "Invalid Content-Type" %]
+ The content type <em>[% contenttype FILTER html %]</em> is invalid.
+ Valid types must be of the form <em>foo/bar</em> where <em>foo</em>
+ is one of <em>[% constants.LEGAL_CONTENT_TYPES.join(', ') FILTER html %]</em>
+ and <em>bar</em> must not contain any special characters (such as "=", "?", ...).
+
+ [% ELSIF error == "invalid_context" %]
+ [% title = "Invalid Context" %]
+ The context [% context FILTER html %] is invalid (must be a number,
+ "file" or "patch").
+
+ [% ELSIF error == "invalid_datasets" %]
+ [% title = "Invalid Datasets" %]
+ Invalid datasets <em>[% datasets.join(":") FILTER html %]</em>. Only digits,
+ letters and colons are allowed.
+
+ [% ELSIF error == "invalid_dimensions" %]
+ [% title = "Invalid Dimensions" %]
+ The width or height specified is not a positive integer.
+
+ [% ELSIF error == "invalid_format" %]
+ [% title = "Invalid Format" %]
+ The format "[% format FILTER html %]" is invalid (must be one of
+ [% FOREACH my_format = formats %]
+ "[% my_format FILTER html %]"
+ [% END %]
+ ).
+
+ [% ELSIF error == "invalid_group_ID" %]
+ [% title = "Invalid group ID" %]
+ The group you specified doesn't exist.
+
+ [% ELSIF error == "invalid_group_name" %]
+ [% title = "Invalid group name" %]
+ The group you specified, [% name FILTER html %], is not valid here.
+
+ [% ELSIF error == "invalid_keyword_id" %]
+ The keyword ID <em>[% id FILTER html %]</em> couldn't be found.
+
+ [% ELSIF error == "invalid_maxrows" %]
+ [% title = "Invalid Max Rows" %]
+ The maximum number of rows, '[% maxrows FILTER html %]', must be
+ a positive integer.
+
+ [% ELSIF error == "invalid_parameter" %]
+ [% title = "Invalid Parameter" %]
+ The new value for [% name FILTER html %] is invalid: [% err FILTER html %].
+
+ [% ELSIF error == "invalid_product_name" %]
+ [% title = "Invalid Product Name" %]
+ The product name '[% product FILTER html %]' is invalid or does not exist.
+
+ [% ELSIF error == "invalid_regexp" %]
+ [% title = "Invalid regular expression" %]
+ The regular expression you entered is invalid.
+
+ [% ELSIF error == "invalid_user" %]
+ [% title = "Invalid User" %]
+ There is no user account
+ [% IF user_id %]
+ with ID <em>[% user_id FILTER html %]</em>.
+ [% ELSIF user_login %]
+ with login name <em>[% user_login FILTER html %]</em>.
+ [% ELSE %]
+ given.
+ [% END %]
+
+ [% ELSIF error == "invalid_user_group" %]
+ [% title = "Invalid User Group" %]
+ [% IF users.size > 1 %] Users [% ELSE %] User [% END %]
+ '[% users.join(', ') FILTER html %]'
+ [% IF users.size > 1 %] are [% ELSE %] is [% END %]
+ not able to edit the
+ [% IF product %]
+ '[% product FILTER html %]'
+ [% END %]
+ [%+ field_descs.product FILTER html %]
+ [% IF bug_id %]
+ for [% terms.bug %] '[% bug_id FILTER html %]'.
+ [% ELSIF new %]
+ and may not be included on a new [% terms.bug %].
+ [% ELSE %]
+ for at least one [% terms.bug %] being changed.
+ [% END %]
+
+ [% ELSIF error == "invalid_username" %]
+ [% title = "Invalid Username" %]
+ The name <tt>[% name FILTER html %]</tt> is not a valid username.
+ Either you misspelled it, or the person has not
+ registered for a [% terms.Bugzilla %] account.
+
+ [% ELSIF error == "invalid_username_or_password" %]
+ [% title = "Invalid Username Or Password" %]
+ The username or password you entered is not valid.
+ [%# People get two login attempts before being warned about
+ # being locked out.
+ #%]
+ [% IF remaining <= 2 %]
+ If you do not enter the correct password after
+ [%+ remaining FILTER html %] more attempt(s), you will be
+ locked out of this account for
+ [%+ constants.LOGIN_LOCKOUT_INTERVAL FILTER html %] minutes.
+ To avoid being locked out, you can reset your password using
+ the "Forgot Password" link.
+ [% END %]
+
+ [% ELSIF error == "json_rpc_get_method_required" %]
+ When using JSON-RPC over GET, you must specify a 'method'
+ parameter. See the documentation at
+ [%+ docs_urlbase FILTER html %]api/Bugzilla/WebService/Server/JSONRPC.html
+
+ [% ELSIF error == "json_rpc_illegal_content_type" %]
+ When using JSON-RPC over POST, you cannot send data as
+ [%+ content_type FILTER html %]. Only application/json and
+ application/json-rpc are allowed.
+
+ [% ELSIF error == "json_rpc_invalid_params" %]
+ Could not parse the 'params' argument as valid JSON.
+ Error: [% err_msg FILTER html %]
+ Value: [% params FILTER html %]
+
+ [% ELSIF error == "json_rpc_invalid_callback" %]
+ You cannot use '[% callback FILTER html %]' as your 'callback' parameter.
+ For security reasons, only letters, numbers, and the following
+ characters are allowed in the 'callback' parameter: <code>[]._</code>
+
+ [% ELSIF error == "json_rpc_post_only" %]
+ For security reasons, you must use HTTP POST to call the
+ '[% method FILTER html %]' method.
+
+ [% ELSIF error == "keyword_already_exists" %]
+ [% title = "Keyword Already Exists" %]
+ A keyword with the name [% name FILTER html %] already exists.
+
+ [% ELSIF error == "keyword_blank_description" %]
+ [% title = "Blank Keyword Description Not Allowed" %]
+ You must enter a non-blank description for the keyword.
+
+ [% ELSIF error == "keyword_blank_name" %]
+ [% title = "Blank Keyword Name Not Allowed" %]
+ You must enter a non-blank name for the keyword.
+
+ [% ELSIF error == "keyword_invalid_name" %]
+ [% title = "Invalid Keyword Name" %]
+ You may not use commas or whitespace in a keyword name.
+
+ [% ELSIF error == "login_needed_for_password_change" %]
+ [% title = "Login Name Required" %]
+ You must enter a login name when requesting to change your password.
+
+ [% ELSIF error == "login_required_for_pronoun" %]
+ [% title = "Login Name Required" %]
+ You can't use %user% without being logged in, because %user% refers
+ to your login name, which we don't know.
+
+ [% ELSIF error == "login_required" %]
+ [%# Used for non-web-based LOGIN_REQUIRED situations. %]
+ You must log in before using this part of [% terms.Bugzilla %].
+
+ [% ELSIF error == "migrate_config_created" %]
+ The file <kbd>[% file FILTER html %]</kbd> contains configuration
+ variables that must be set before continuing with the migration.
+
+ [% ELSIF error == "migrate_from_invalid" %]
+ '[% from FILTER html %]' is not a valid type of [% terms.bug %]-tracker
+ to migrate from. See the contents of the <kbd>B[% %]ugzilla/Migrate/</kbd>
+ directory for a list of valid [% terms.bug %]-trackers.
+
+ [% ELSIF error == "milestone_already_exists" %]
+ [% title = "Milestone Already Exists" %]
+ [% admindocslinks = {'products.html' => 'Administering products',
+ 'milestones.html' => 'About Milestones'} %]
+ The milestone '[% name FILTER html %]' already exists for product '
+ [%- product FILTER html %]'.
+
+ [% ELSIF error == "milestone_blank_name" %]
+ [% title = "Blank Milestone Name Not Allowed" %]
+ You must enter a name for this milestone.
+
+ [% ELSIF error == "milestone_is_default" %]
+ [% title = "Default milestone not deletable" %]
+ [% admindocslinks = {'products.html' => 'Administering products',
+ 'milestones.html' => 'About Milestones'} %]
+ Sorry, but [% milestone.name FILTER html %] is the default milestone
+ for the '[% milestone.product.name FILTER html %]' product, and so
+ it cannot be deleted.
+
+ [% ELSIF error == "milestone_name_too_long" %]
+ [% title = "Milestone Name Is Too Long" %]
+ The name of a milestone is limited to [% constants.MAX_MILESTONE_SIZE FILTER html %]
+ characters. '[% name FILTER html %]' is too long ([% name.length %] characters).
+
+ [% ELSIF error == "milestone_required" %]
+ [% title = "Milestone Required" %]
+ You must select a target milestone for [% terms.bug %]
+ [%+ bug.id FILTER html %]
+ if you are going to accept it. Part of accepting
+ [%+ terms.abug %] is giving an estimate of when it will be fixed.
+
+ [% ELSIF error == "milestone_sortkey_invalid" %]
+ [% title = "Invalid Milestone Sortkey" %]
+ The sortkey '[% sortkey FILTER html %]' is not in the range
+ [%+ constants.MIN_SMALLINT FILTER html %] &le; sortkey &le;
+ [%+ constants.MAX_SMALLINT FILTER html %].
+
+ [% ELSIF error == "misarranged_dates" %]
+ [% title = "Misarranged Dates" %]
+ Your start date ([% datefrom FILTER html %]) is after
+ your end date ([% dateto FILTER html %]).
+
+ [% ELSIF error == "mismatched_bug_ids_on_obsolete" %]
+ Attachment [% attach_id FILTER html %] is attached to another [% terms.bug %],
+ but you tried to flag it as obsolete while creating a new attachment to
+ [%+ terms.bug %] [%+ my_bug_id FILTER html %].
+
+ [% ELSIF error == "missing_attachment_description" %]
+ [% title = "Missing Attachment Description" %]
+ You must enter a description for the attachment.
+
+ [% ELSIF error == "missing_bug_id" %]
+ [% title = "Missing $terms.Bug ID" %]
+ No [% terms.bug %] ID was given.
+
+ [% ELSIF error == "missing_category" %]
+ [% title = "Missing Category" %]
+ You did not specify a category for this series.
+
+ [% ELSIF error == "missing_component" %]
+ [% title = "Missing Component" %]
+ [% admindocslinks = {'products.html' => 'Administering products',
+ 'components.html' => 'Creating a component'} %]
+ Sorry, the product <em>[% product.name FILTER html %]</em>
+ has to have at least one active component in order for you to
+ enter [% terms.abug %] into it.<br>
+ [% IF user.in_group("editcomponents", product.id) %]
+ <a href="editcomponents.cgi?action=add&amp;product=[% product.name FILTER uri %]">Create
+ a new component</a>.
+ [% ELSE %]
+ Please contact [% Param("maintainer") %] and ask them
+ to add a component to this product.
+ [% END %]
+
+ [% ELSIF error == "missing_content_type" %]
+ [% title = "Missing Content-Type" %]
+ You asked [% terms.Bugzilla %] to auto-detect the content type, but
+ your browser did not specify a content type when uploading the file,
+ so you must enter a content type manually.
+
+ [% ELSIF error == "missing_cookie" %]
+ [% title = "Missing Cookie" %]
+ Sorry, I seem to have lost the cookie that recorded
+ the results of your last search. I'm afraid you will have to start
+ again from the <a href="query.cgi">search page</a>.
+
+ [% ELSIF error == "missing_datasets" %]
+ [% title = "No Datasets Selected" %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ You must specify one or more datasets to plot.
+
+ [% ELSIF error == "missing_frequency" %]
+ [% title = "Missing Frequency" %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ You did not specify a valid frequency for this series.
+
+ [% ELSIF error == "missing_name" %]
+ [% title = "Missing Name" %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ You did not specify a name for this series.
+
+ [% ELSIF error == "missing_query" %]
+ [% title = "Missing Search" %]
+ [% docslinks = {'query.html' => "Searching for $terms.bugs",
+ 'query.html#list' => "$terms.Bug lists"} %]
+ The search named <em>[% name FILTER html %]</em>
+ [% IF sharer_id && sharer_id != user.id %]
+ has not been made visible to you.
+ [% ELSE %]
+ does not exist.
+ [% END %]
+
+ [% ELSIF error == "need_quipid" %]
+ [% title = "Missing Quip ID" %]
+ A valid quip ID is needed.
+
+ [% ELSIF error == "missing_resolution" %]
+ [% title = "Resolution Required" %]
+ A valid resolution is required to mark [% terms.bugs %] as
+ [%+ status FILTER upper FILTER html %].
+
+ [% ELSIF error == "missing_subcategory" %]
+ [% title = "Missing Subcategory" %]
+ You did not specify a subcategory for this series.
+
+ [% ELSIF error == "missing_version" %]
+ [% title = "Missing Version" %]
+ [% admindocslinks = {'versions.html' => 'Defining versions'} %]
+ Sorry, the product <em>[% product.name FILTER html %]</em>
+ has to have at least one active version in order for you to
+ enter [% terms.abug %] into it.<br>
+ [% IF user.in_group("editcomponents", product.id) %]
+ <a href="editversions.cgi?action=add&amp;product=[% product.name FILTER uri %]">Create
+ a new version</a>.
+ [% ELSE %]
+ Please contact [% Param("maintainer") %] and ask them
+ to add a version to this product.
+ [% END %]
+
+ [% ELSIF error == "multiple_alias_not_allowed" %]
+ You cannot set aliases when modifying multiple [% terms.bugs %]
+ at once.
+
+ [% ELSIF error == "need_quip" %]
+ [% title = "Quip Required" %]
+ [% docslinks = {'quips.html' => 'About quips'} %]
+ Please enter a quip in the text field.
+
+ [% ELSIF error == "new_password_missing" %]
+ [% title = "New Password Missing" %]
+ You must enter a new password.
+
+ [% ELSIF error == "no_axes_defined" %]
+ [% title = "No Axes Defined" %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ You didn't define any axes to plot.
+
+ [% ELSIF error == "no_bugs_chosen" %]
+ [% title = BLOCK %]No [% terms.Bugs %] Selected[% END %]
+ You apparently didn't choose any [% terms.bugs %]
+ [% IF action == "modify" %]
+ to modify.
+ [% ELSIF action == "view" %]
+ to view.
+ [% END %]
+
+ [% ELSIF error == "no_tag_to_edit" %]
+ [% title = "No Tag Selected" %]
+ You tried to create or remove a tag with no name.
+
+ [% ELSIF error == "no_initial_bug_status" %]
+ [% title = "No Initial $terms.Bug Status" %]
+ No [% terms.bug %] status is available on [% terms.bug %] creation.
+ Please report the problem to [% Param("maintainer") %].
+
+ [% ELSIF error == "no_new_quips" %]
+ [% title = "No New Quips" %]
+ [% admindocslinks = {'quips.html' => 'Controlling quip usage'} %]
+ This site does not permit the addition of new quips.
+
+ [% ELSIF error == "no_page_specified" %]
+ [% title = "No Page Specified" %]
+ You did not specify the id of a page to display.
+
+ [% ELSIF error == "no_products" %]
+ [% title = "No Products" %]
+ [% admindocslinks = {'products.html' => 'Setting up a product',
+ 'components.html' => 'Adding components to products',
+ 'groups.html' => 'Groups security'} %]
+ Either no products have been defined to enter [% terms.bugs %] against or you have not
+ been given access to any.
+
+ [% ELSIF error == "number_not_numeric" %]
+ [% title = "Numeric Value Required" %]
+ The value '[% num FILTER html %]' in the
+ <em>[% field_descs.$field FILTER html %]</em> field
+ is not a numeric value.
+
+ [% ELSIF error == "number_too_large" %]
+ [% title = "Number Too Large" %]
+ The value '[% num FILTER html %]' in the
+ <em>[% field_descs.$field FILTER html %]</em> field
+ is more than the maximum allowable value of '[% max_num FILTER html %]'.
+
+ [% ELSIF error == "number_too_small" %]
+ [% title = "Number Too Small" %]
+ The value '[% num FILTER html %]'
+ in the <em>[% field_descs.$field FILTER html %]</em> field
+ is less than the minimum allowable value of '[% min_num FILTER html %]'.
+
+ [% ELSIF error == "object_not_specified" %]
+ [% type = BLOCK %][% INCLUDE object_name class = class %][% END %]
+ [% title = BLOCK %][% type FILTER ucfirst FILTER html %] Not
+ Specified[% END %]
+ You must select/enter a [% type FILTER html %].
+
+ [% ELSIF error == "object_does_not_exist" %]
+ [% type = BLOCK %][% INCLUDE object_name class = class %][% END %]
+ [% title = BLOCK %]Invalid [% type FILTER ucfirst FILTER html %][% END %]
+ There is no [% type FILTER html %]
+ [% IF id.defined %]
+ with the id '[% id FILTER html %]'
+ [% ELSE %]
+ named '[% name FILTER html %]'
+ [% END %]
+ [% IF product.defined %]
+ in the '[% product.name FILTER html %]' product
+ [% END %].
+ [% IF class == "Bugzilla::User" %]
+ Either you mis-typed the name or that user has not yet registered
+ for a [% terms.Bugzilla %] account.
+ [% ELSIF class == "Bugzilla::Keyword" %]
+ The legal keyword names are <a href="describekeywords.cgi">listed
+ here</a>.
+ [% END %]
+
+ [% ELSIF error == "old_password_incorrect" %]
+ [% title = "Incorrect Password" %]
+ You did not enter your current password correctly.
+
+ [% ELSIF error == "old_password_required" %]
+ [% title = "Old Password Required" %]
+ You must enter your old password to change your email address.
+
+ [% ELSIF error == "password_change_requests_not_allowed" %]
+ [% title = "Password Change Requests Not Allowed" %]
+ The system is not configured to allow password change requests.
+
+ [% ELSIF error == "passwords_dont_match" %]
+ [% title = "Passwords Don't Match" %]
+ The two passwords you entered did not match.
+
+ [% ELSIF error == "password_current_too_short" %]
+ [% title = "New Password Required" %]
+ Your password is currently less than
+ [%+ constants.USER_PASSWORD_MIN_LENGTH FILTER html %] characters long,
+ which is the new minimum length required for passwords.
+ You must <a href="token.cgi?a=reqpw&amp;loginname=[% locked_user.email FILTER uri %]">
+ request a new password</a> in order to log in again.
+
+ [% ELSIF error == "password_too_short" %]
+ [% title = "Password Too Short" %]
+ The password must be at least
+ [%+ constants.USER_PASSWORD_MIN_LENGTH FILTER html %] characters long.
+
+ [% ELSIF error == "password_not_complex" %]
+ [% title = "Password Fails Requirements" %]
+ [% passregex = Param('password_complexity') %]
+ The password must contain at least one:
+ <ul>
+ [% IF passregex == 'letters_numbers_specialchars' %]
+ <li>letter</li>
+ <li>special character</li>
+ [% ELSIF passregex.search('letters') %]
+ <li>UPPERCASE letter</li>
+ <li>lowercase letter</li>
+ [% END %]
+ [% IF passregex.search('numbers') %]
+ <li>digit</li>
+ [% END %]
+ </ul>
+
+ [% ELSIF error == "product_access_denied" %]
+ [% title = "Product Access Denied" %]
+ Either the product
+ [%+ IF id.defined %]
+ with the id [% id FILTER html %]
+ [% ELSE %]
+ '[% name FILTER html %]'
+ [% END %]
+ does not exist or you don't have access to it.
+
+ [% ELSIF error == "product_illegal_group" %]
+ [% title = "Illegal Group" %]
+ [% group.name FILTER html %] is not an active [% terms.bug %] group
+ and so you cannot edit group controls for it.
+
+ [% ELSIF error == "product_name_already_in_use" %]
+ [% title = "Product name already exists" %]
+ [% admindocslinks = {'products.html' => 'Administering products'} %]
+ The product name '[% product FILTER html %]' already exists.
+
+ [% ELSIF error == "product_name_diff_in_case" %]
+ [% title = "Product name differs only in case" %]
+ [% admindocslinks = {'products.html' => 'Administering products'} %]
+ The product name '[% product FILTER html %]' differs from existing
+ product '[% existing_product FILTER html %]' only in case.
+
+ [% ELSIF error == "product_name_too_long" %]
+ [% title = "Product name too long" %]
+ The name of a product is limited to [% constants.MAX_PRODUCT_SIZE FILTER html %]
+ characters. '[% name FILTER html %]' is too long ([% name.length %] characters).
+
+ [% ELSIF error == "product_must_define_defaultmilestone" %]
+ [% title = "Must define new default milestone" %]
+ [% admindocslinks = {'products.html' => 'Administering products',
+ 'milestones.html' => 'About Milestones'} %]
+ You must <a href="editmilestones.cgi?action=add&amp;product=[% product FILTER uri %]">
+ create the milestone '[% milestone FILTER html %]'</a> before
+ it can be made the default milestone for product '[% product FILTER html %]'.
+
+ [% ELSIF error == "product_admin_denied" %]
+ [% title = "Product Access Denied" %]
+ You are not allowed to edit properties of product '[% product FILTER html %]'.
+
+ [% ELSIF error == "product_blank_name" %]
+ [% title = "Blank Product Name Not Allowed" %]
+ [% admindocslinks = {'products.html' => 'Administering products'} %]
+ You must enter a name for the product.
+
+ [% ELSIF error == "product_disabled" %]
+ [% title = BLOCK %]Product closed for [% terms.Bug %] Entry[% END %]
+ [% admindocslinks = {'products.html' => 'Administering products'} %]
+ Sorry, entering [% terms.abug %] into the
+ product <em>[% product.name FILTER html %]</em> has been disabled.
+
+ [% ELSIF error == "product_edit_denied" %]
+ [% title = "Product Edit Access Denied" %]
+ [% admindocslinks = {'products.html' => 'Administering products',
+ 'groups.html' => 'Group security'} %]
+ You are not permitted to edit [% terms.bugs %] in product
+ [%+ product FILTER html %].
+
+ [% ELSIF error == "product_has_bugs" %]
+ [% title = BLOCK %]Product has [% terms.Bugs %][% END %]
+ [% admindocslinks = {'products.html' => 'Administering products'} %]
+ There are [% nb FILTER html %] [%+ terms.bugs %] entered for this product!
+ You must move those [% terms.bugs %] to another product before you
+ can delete this one.
+
+ [% ELSIF error == "product_must_have_description" %]
+ [% title = "Product needs Description" %]
+ [% admindocslinks = {'products.html' => 'Administering products'} %]
+ You must enter a description for this product.
+
+ [% ELSIF error == "product_must_have_version" %]
+ [% title = "Product needs Version" %]
+ [% admindocslinks = {'products.html' => 'Administering products',
+ 'versions.html' => 'Administering versions'} %]
+ You must enter a valid version to create a new product.
+
+ [% ELSIF error == "product_unknown_component" %]
+ [% title = "Unknown Component" %]
+ Product '[% product FILTER html %]' has no component
+ [% IF comp_id %]
+ with ID [% comp_id FILTER html %].
+ [% ELSE %]
+ named '[% comp FILTER html %]'.
+ [% END %]
+
+ [% ELSIF error == "query_name_missing" %]
+ [% title = "No Search Name Specified" %]
+ [% docslinks = {'query.html#list' => "$terms.Bug lists"} %]
+ You must enter a name for your search.
+
+ [% ELSIF error == "query_name_too_long" %]
+ [% title = "Query Name Too Long" %]
+ The name of the query must be less than [% constants.MAX_LEN_QUERY_NAME FILTER html %]
+ characters long.
+
+ [% ELSIF error == "quicksearch_invalid_query" %]
+ [% title = "Invalid Query" %]
+ Your query is invalid.
+ [% IF operators %]
+ The [% operators.shift FILTER html %] operator cannot be followed by
+ [%+ operators.shift FILTER html %].
+ [% ELSE %]
+ A query cannot start with AND or OR, nor can it end with AND, OR or NOT.
+ They are reserved operators and must be quoted if you want to look for
+ these strings.
+ [% END %]
+
+ [% ELSIF error == "quicksearch_unbalanced_quotes" %]
+ [% title = "Badly Formatted Query" %]
+ [% terms.Bugzilla %] is unable to parse your query correctly:
+ <em>[% string FILTER html %]</em>.<br>
+ If you use quotes to enclose strings, make sure both quotes are present.
+ If you really want to look for a quote in a string, type \" instead of ".
+ For instance, <em>"I'm so \"special\", really"</em> (with quotes) will be
+ interpreted as <em>I'm so "special", really</em>.
+
+ [% ELSIF error == "quicksearch_unknown_field" %]
+ [% title = "QuickSearch Error" %]
+ There is a problem with your search:
+ [% FOREACH field = unknown %]
+ <p><code>[% field FILTER html %]</code> is not a valid field name.</p>
+ [% END %]
+ [% FOREACH field = ambiguous.keys %]
+ <p><code>[% field FILTER html %]</code> matches more than one field:
+ [%+ ambiguous.${field}.join(', ') FILTER html %]</p>
+ [% END %]
+
+ [% IF unknown.size %]
+ <p>The legal field names are
+ <a href="page.cgi?id=quicksearch.html#fields">listed here</a>.</p>
+ [% END %]
+
+ [% ELSIF error == "quip_too_long" %]
+ [% title = "Quip Too Long" %]
+ You entered a quip with a length of [% length FILTER none %] characters,
+ but the maximum allowed length is [% constants.MAX_QUIP_LENGTH FILTER none %]
+ characters.
+
+ [% ELSIF error == "reassign_to_empty" %]
+ [% title = "Illegal Reassignment" %]
+ To reassign [% terms.abug %], you must provide an address for
+ the new assignee.
+
+ [% ELSIF error == "report_axis_invalid" %]
+ [% title = "Invalid Axis" %]
+ <em>[% val FILTER html %]</em> is not a valid value for
+ [%+ IF fld == "x" %]the horizontal axis
+ [%+ ELSIF fld == "y" %]the vertical axis
+ [%+ ELSIF fld == "z" %]the multiple tables/images
+ [%+ ELSE %]a report axis[% END %] field.
+
+ [% ELSIF error == "report_name_missing" %]
+ [% title = "No Report Name Specified" %]
+ You must enter a name for your report.
+
+ [% ELSIF error == "report_access_denied" %]
+ [% title = "Report Access Denied" %]
+ You cannot access this report.
+
+ [% ELSIF error == "require_component" %]
+ [% title = "Component Needed" %]
+ To file this [% terms.bug %], you must first choose a component.
+ If necessary, just guess.
+
+ [% ELSIF error == "relationship_loop_single" %]
+ [% title = "Relationship Loop Detected" %]
+ [% field_descs.$field_name FILTER html %]
+ for [% terms.bug %] [%+ bug_id FILTER html %]
+ has a circular dependency on [% terms.bug %] [%+ dep_id FILTER html %].
+
+ [% ELSIF error == "request_queue_group_invalid" %]
+ The group field <em>[% group FILTER html %]</em> is invalid.
+
+ [% ELSIF error == "require_new_password" %]
+ [% title = "New Password Needed" %]
+ You cannot change your password without choosing a new one.
+
+ [% ELSIF error == "required_field" %]
+ [% title = "Field Must Be Set" %]
+ A value must be set for the '[% field_descs.${field.name} FILTER html %]'
+ field.
+
+ [% ELSIF error == "require_summary" %]
+ [% title = "Summary Needed" %]
+ You must enter a summary for this [% terms.bug %].
+
+ [% ELSIF error == "resolution_cant_clear" %]
+ [% terms.Bug %] [%+ bug_id FILTER bug_link(bug_id) FILTER none %] is
+ closed, so you cannot clear its resolution.
+
+ [% ELSIF error == "resolution_not_allowed" %]
+ [% title = "Resolution Not Allowed" %]
+ You cannot set a resolution for open [% terms.bugs %].
+
+ [% ELSIF error == "saved_search_used_by_whines" %]
+ [% title = "Saved Search In Use" %]
+ [% docslinks = {'whining.html' => 'About Whining'} %]
+ The saved search <em>[% search_name FILTER html %]</em> is being used
+ by <a href="editwhines.cgi">Whining events</a> with the following subjects:
+ [%+ subjects FILTER html %]
+
+ [% ELSIF error == "search_content_without_matches" %]
+ [% title = "Illegal Search" %]
+ The "content" field can only be used with "matches" search
+ and the "matches" search can only be used with the "content"
+ field.
+
+ [% ELSIF error == "search_grouped_field_invalid" %]
+ [% terms.Bugzilla %] does not support using the
+ "[%+ field_descs.$field FILTER html %]" ([% field FILTER html %])
+ field with grouped search conditions.
+
+ [% ELSIF error == "search_grouped_invalid_nesting" %]
+ You cannot nest clauses within grouped search conditions.
+
+ [% ELSIF error == "search_grouped_field_mismatch" %]
+ All conditions under a groups search must use the same field.
+
+ [% ELSIF error == "search_field_operator_invalid" %]
+ [% terms.Bugzilla %] does not support using the
+ "[%+ field_descs.$field FILTER html %]" ([% field FILTER html %])
+ field with the "[% search_descs.$operator FILTER html %]"
+ ([% operator FILTER html %]) search type.
+
+ [% ELSIF error == "see_also_self_reference" %]
+ You cannot put this [% terms.bug %] into its own
+ [%+ field_descs.see_also FILTER html %] field.
+
+ [% ELSIF error == "series_already_exists" %]
+ [% title = "Series Already Exists" %]
+ [% docslinks = {'reporting.html' => 'Reporting'} %]
+ A series named <em>[% series.category FILTER html %] /
+ [%+ series.subcategory FILTER html %] /
+ [%+ series.name FILTER html %]</em>
+ already exists.
+
+ [% ELSIF error == "still_unresolved_bugs" %]
+ [% title = "Unresolved Dependencies" %]
+ [% IF bug_id %]
+ [% terms.Bug %] [%+ bug_id FILTER bug_link(bug_id) FILTER none %]
+ [% ELSE %]
+ This [% terms.bug %]
+ [% END %]
+ has [% dep_count FILTER none %] unresolved
+ [% IF dep_count == 1 %]
+ dependency
+ [% ELSE %]
+ dependencies
+ [% END %].
+ They must either be resolved or removed from the
+ "[% field_descs.dependson FILTER html %]" field before you can resolve
+ this [% terms.bug %] as [% display_value("resolution", "FIXED") FILTER html %].
+
+ [% ELSIF error == "sudo_invalid_cookie" %]
+ [% title = "Invalid Sudo Cookie" %]
+ Your sudo cookie is invalid. Either it expired or you didn't start
+ a sudo session correctly. Refresh the page or load another page
+ to continue what you are doing as yourself.
+
+ [% ELSIF error == "sudo_illegal_action" %]
+ [% title = "Impersonation Not Authorized" %]
+ [% IF NOT sudoer.in_group("bz_sudoers") %]
+ You are not allowed to impersonate users.
+ [% ELSIF target_user AND target_user.in_group("bz_sudo_protect") %]
+ You are not allowed to impersonate [% target_user.identity FILTER html %].
+ [% ELSE %]
+ The user you tried to impersonate doesn't exist.
+ [% END %]
+
+ [% ELSIF error == "sudo_in_progress" %]
+ [% title = "Session In Progress" %]
+ A sudo session (impersonating [% target FILTER html %]) is in progress.
+ End that session (using the link in the footer) before starting a new one.
+
+ [% ELSIF error == "sudo_password_required" %]
+ [% title = "Password Required" %]
+ Your [% terms.Bugzilla %] password is required to begin a sudo
+ session. Please <a href="relogin.cgi?action=prepare-sudo&amp;target_login=
+ [%- target_login FILTER uri %]&amp;reason=
+ [%- reason FILTER uri %]">go back</a> and enter your password.
+
+ [% ELSIF error == "sudo_preparation_required" %]
+ [% title = "Preparation Required" %]
+ You may not start a sudo session directly. Please
+ <a href="relogin.cgi?action=prepare-sudo&amp;target_login=
+ [%- target_login FILTER uri %]&amp;reason=
+ [%- reason FILTER uri %]">start your session normally</a>.
+
+ [% ELSIF error == "sudo_protected" %]
+ [% title = "User Protected" %]
+ The user [% login FILTER html %] may not be impersonated by sudoers.
+
+ [% ELSIF error == "tag_name_too_long" %]
+ [% title = "Tag Name Too Long" %]
+ The tag name must be less than [% constants.MAX_LEN_QUERY_NAME FILTER html %]
+ characters long.
+
+ [% ELSIF error == "token_does_not_exist" %]
+ [% title = "Token Does Not Exist" %]
+ The token you submitted does not exist, has expired, or has
+ been canceled.
+
+ [% ELSIF error == "too_soon_for_new_token" %]
+ [% title = "Too Soon For New Token" %]
+ You have requested
+ [% IF type == "password" %]
+ a password
+ [% ELSIF type == "account" %]
+ an account
+ [% END %]
+ token too recently to request another.
+ Please wait [% constants.ACCOUNT_CHANGE_INTERVAL FILTER html %] minutes
+ then try again.
+
+ [% ELSIF error == "unknown_action" %]
+ [% IF action %]
+ Unknown action [% action FILTER html %]!
+ [% ELSE %]
+ I could not figure out what you wanted to do.
+ [% END %]
+
+ [% ELSIF error == "unknown_tab" %]
+ [% title = "Unknown Tab" %]
+ <code>[% current_tab_name FILTER html %]</code> is not a legal tab name.
+
+ [% ELSIF error == "value_inactive" %]
+ [% title = "Value is Not Active" %]
+ [% type = BLOCK %][% INCLUDE object_name class = class %][% END %]
+ The [% type FILTER html %] value '[% value FILTER html %]' is not active.
+
+ [% ELSIF error == "version_already_exists" %]
+ [% title = "Version Already Exists" %]
+ [% admindocslinks = {'versions.html' => 'Administering versions'} %]
+ The version '[% name FILTER html %]' already exists for product '
+ [%- product FILTER html %]'.
+
+ [% ELSIF error == "version_blank_name" %]
+ [% title = "Blank Version Name Not Allowed" %]
+ You must enter a name for this version.
+
+ [% ELSIF error == "version_has_bugs" %]
+ [% title = BLOCK %]Version has [% terms.Bugs %][% END %]
+ There are [% nb FILTER html %] [%+ terms.bugs %] associated with this
+ version! You must reassign those [% terms.bugs %] to another version
+ before you can delete this one.
+
+ [% ELSIF error == "version_is_last" %]
+ [% title = BLOCK %]Last Version in this Product[% END %]
+ '[% version.name FILTER html %]' is the last version of the
+ '[% version.product.name FILTER html %]' product. You cannot delete it.
+
+ [% ELSIF error == "users_deletion_disabled" %]
+ [% title = "Deletion not activated" %]
+ [% admindocslinks = {'useradmin.html' => 'User administration'} %]
+ Sorry, the deletion of user accounts is not allowed.
+
+ [% ELSIF error == "user_has_responsibility" %]
+ [% title = "Can't Delete User Account" %]
+ [% admindocslinks = {'useradmin.html' => 'User administration'} %]
+ The user you want to delete is set up as the default [% terms.bug %]
+ assignee
+ [% IF Param('useqacontact') %]
+ or QA contact
+ [% END %]
+ for at least one component.
+ For this reason, you cannot delete the account at this time.
+
+ [% ELSIF error == "user_access_by_id_denied" %]
+ [% title = "User Access By Id Denied" %]
+ Logged-out users cannot use the "ids" argument to this function
+ to access any user information.
+
+ [% ELSIF error == "user_access_by_match_denied" %]
+ [% title = "User-Matching Denied" %]
+ Logged-out users cannot use the "match" argument to this function
+ to access any user information.
+
+ [% ELSIF error == "user_login_required" %]
+ [% title = "Login Name Required" %]
+ [% admindocslinks = {'useradmin.html' => 'User administration'} %]
+ You must enter a login name for the new user.
+
+ [% ELSIF error == "user_match_failed" %]
+ [% title = "Match Failed" %]
+ <tt>[% name FILTER html %]</tt> does not exist or you are not allowed
+ to see that user.
+
+ [% ELSIF error == "user_match_too_many" %]
+ [% title = "No Conclusive Match" %]
+ [% terms.Bugzilla %] cannot make a conclusive match for one or more
+ of the names and/or email addresses you entered for
+ the [% fields.join(', ') FILTER html %] field(s).
+
+ [% ELSIF error == "user_not_insider" %]
+ [% title = "User Not In Insidergroup" %]
+ Sorry, but you are not allowed to (un)mark comments or attachments
+ as private.
+
+ [% ELSIF error == "wrong_token_for_cancelling_email_change" %]
+ [% title = "Wrong Token" %]
+ That token cannot be used to cancel an email address change.
+
+ [% ELSIF error == "wrong_token_for_changing_passwd" %]
+ [% title = "Wrong Token" %]
+ That token cannot be used to change your password.
+
+ [% ELSIF error == "wrong_token_for_confirming_email_change" %]
+ [% title = "Wrong Token" %]
+ That token cannot be used to change your email address.
+
+ [% ELSIF error == "wrong_token_for_creating_account" %]
+ [% title = "Wrong Token" %]
+ That token cannot be used to create a user account.
+
+ [% ELSIF error == "xmlrpc_invalid_value" %]
+ "[% value FILTER html %]" is not a valid value for a
+ &lt;[% type FILTER html %]&gt; field. (See the XML-RPC specification
+ for details.)
+
+ [% ELSIF error == "xmlrpc_illegal_content_type" %]
+ When using XML-RPC, you cannot send data as
+ [%+ content_type FILTER html %]. Allowed content types
+ are [% constants.XMLRPC_CONTENT_TYPE_WHITELIST.join(', ') FILTER html %].
+
+ [% ELSIF error == "zero_length_file" %]
+ [% title = "File Is Empty" %]
+ The file you are trying to attach is empty, does not exist, or you don't
+ have permission to read it.
+
+ [% ELSIF error == "illegal_user_id" %]
+ [% title = "Illegal User ID" %]
+ User ID '[% userid FILTER html %]' is not valid integer.
+
+ [% ELSIF error == "extern_id_exists" %]
+ [% title = "Account Already Exists" %]
+ There is already an account
+ [% IF existing_login_name %]
+ ([% existing_login_name FILTER html %])
+ [% END %]
+ with the External Login ID "[% extern_id FILTER html %]".
+
+ [% ELSE %]
+
+ [%# Try to find hooked error messages %]
+ [% error_message = Hook.process("errors") %]
+
+ [% IF not error_message %]
+ [% title = "Error string not found" %]
+ The user error string <code>[% error FILTER html %]</code> was not found.
+ Please send email to [% Param("maintainer") %] describing the steps taken
+ to obtain this message.
+ [% ELSE %]
+ [% error_message FILTER none %]
+ [% END %]
+ [% END %]
+[% END %]
+
+[%# We only want HTML error messages for ERROR_MODE_WEBPAGE %]
+[% USE Bugzilla %]
+[% IF Bugzilla.error_mode != constants.ERROR_MODE_WEBPAGE %]
+ [% IF Bugzilla.usage_mode == constants.USAGE_MODE_BROWSER %]
+ [% error_message FILTER none %]
+ [% ELSE %]
+ [% error_message FILTER txt %]
+ [% END %]
+ [% RETURN %]
+[% END %]
+
+[% UNLESS header_done %]
+ [% PROCESS global/header.html.tmpl %]
+[% END %]
+
+[% PROCESS global/docslinks.html.tmpl
+ docslinks = docslinks
+ admindocslinks = admindocslinks
+%]
+
+<table cellpadding="20">
+ <tr>
+ <td id="error_msg" class="throw_error">
+ [% error_message FILTER none %]
+ </td>
+ </tr>
+</table>
+
+<p>
+ Please press <b>Back</b> and try again.
+</p>
+
+[%# If a saved search fails, people want the ability to edit or delete it.
+ # This is the best way of getting information about that possible saved
+ # search from any error call location. %]
+
+[% namedcmd = Bugzilla.cgi.param("namedcmd") %]
+[% sharer_id = Bugzilla.cgi.param("sharer_id") %]
+[% IF namedcmd AND error != "missing_query"
+ AND error != "saved_search_used_by_whines"
+ AND !sharer_id %]
+ <p>
+ Alternatively, you can
+ <a href="buglist.cgi?cmdtype=dorem&amp;remaction=forget&amp;namedcmd=
+ [% namedcmd FILTER uri %]">forget</a>
+
+ [% FOREACH q = Bugzilla.user.queries %]
+ [% IF q.name == namedcmd %]
+ or <a href="query.cgi?[% q.url FILTER html %]">edit</a>
+ [% END %]
+ [% END %]
+
+ the saved search '[% namedcmd FILTER html %]'.
+ </p>
+[% END %]
+
+[% PROCESS global/footer.html.tmpl %]
+
+[% BLOCK object_name %]
+ [% IF class == "Bugzilla::Attachment" %]
+ attachment
+ [% ELSIF class == "Bugzilla::User" %]
+ user
+ [% ELSIF class == "Bugzilla::Classification" %]
+ classification
+ [% ELSIF class == "Bugzilla::Product" %]
+ product
+ [% ELSIF class == "Bugzilla::Component" %]
+ component
+ [% ELSIF class == "Bugzilla::Version" %]
+ version
+ [% ELSIF class == "Bugzilla::Milestone" %]
+ milestone
+ [% ELSIF class == "Bugzilla::Status" %]
+ status
+ [% ELSIF class == "Bugzilla::Flag" %]
+ flag
+ [% ELSIF class == "Bugzilla::FlagType" %]
+ flagtype
+ [% ELSIF class == "Bugzilla::Field" %]
+ field
+ [% ELSIF class == "Bugzilla::Group" %]
+ group
+ [% ELSIF class == "Bugzilla::Keyword" %]
+ keyword
+ [% ELSIF class == "Bugzilla::Search::Recent" %]
+ recent search
+ [% ELSIF class == "Bugzilla::Search::Saved" %]
+ saved search
+ [% ELSIF ( matches = class.match('^Bugzilla::Field::Choice::(.+)') ) %]
+ [% SET field_name = matches.0 %]
+ [% field_descs.$field_name FILTER html %]
+ [% END %]
+ [% Hook.process('end_object_name', 'global/user-error.html.tmpl') %]
+[% END %]
diff --git a/template/en/default/global/user.html.tmpl b/template/en/default/global/user.html.tmpl
new file mode 100644
index 0000000..7050c6d
--- /dev/null
+++ b/template/en/default/global/user.html.tmpl
@@ -0,0 +1,26 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # who: A Bugzilla::User object that we are going to represent.
+ #%]
+
+<span class="vcard">
+ [% FILTER collapse %]
+ [% IF user.id %]
+ <a class="email" href="mailto:[% who.email FILTER html %]"
+ title="[% who.identity FILTER html %]">
+ [%- END -%]
+ [% IF who.name %]
+ <span class="fn">[% who.name FILTER html %]</span>
+ [% ELSE %]
+ [% who.login FILTER email FILTER html %]
+ [% END %]
+ [% '</a>' IF user.id %]
+ [% END %]
+</span>
diff --git a/template/en/default/global/userselect.html.tmpl b/template/en/default/global/userselect.html.tmpl
new file mode 100644
index 0000000..828c4bb
--- /dev/null
+++ b/template/en/default/global/userselect.html.tmpl
@@ -0,0 +1,99 @@
+[%# 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.
+ #%]
+
+[%# INTERFACE:
+ # name: mandatory; field name
+ # id: optional; field id
+ # value: optional; default field value/selection
+ # classes: optional; an array of classes to be added
+ # onchange: optional; onchange attribute value
+ # disabled: optional; if true, the field is disabled
+ # accesskey: optional, input only; accesskey attribute value
+ # size: optional, input only; size attribute value
+ # emptyok: optional, select only; if true, prepend menu option for "" to start of select
+ # hyphenok: optional, select only; if true, prepend menu option for "-" to start of select
+ # multiple: optional, do multiselect box, value is size (height) of box
+ # custom_userlist: optional, specify a limited list of users to use
+ # field_title: optional, extra information to display as a tooltip
+ #%]
+
+[% IF Param("usemenuforusers") %]
+<select name="[% name FILTER html %]"
+ [% IF id %] id="[% id FILTER html %]" [% END %]
+ [% IF classes %] class="[% classes.join(' ') FILTER html %]" [% END %]
+ [% IF onchange %] onchange="[% onchange FILTER html %]" [% END %]
+ [% IF disabled %] disabled="[% disabled FILTER html %]" [% END %]
+ [% IF accesskey %] accesskey="[% accesskey FILTER html %]" [% END %]
+ [% IF multiple %] multiple="multiple" size="[% multiple FILTER html %]" [% END %]
+ [% IF field_title %] title="[% field_title FILTER html %]" [% END %]
+>
+ [% IF emptyok %]
+ <option value=""></option>
+ [% END %]
+ [% IF hyphenok %]
+ <option value="-">-</option>
+ [% END %]
+
+ [% UNLESS custom_userlist %]
+ [% custom_userlist = user.get_userlist %]
+ [% END %]
+
+ [% SET selected = {} %]
+ [% IF value.defined %]
+ [% FOREACH selected_value IN value.split(', ') %]
+ [% SET selected.$selected_value = 1 %]
+ [% END %]
+ [% END %]
+
+ [% FOREACH tmpuser = custom_userlist %]
+ [% IF tmpuser.visible OR selected.${tmpuser.login} == 1 %]
+ <option value="[% tmpuser.login FILTER html %]"
+ [% IF selected.${tmpuser.login} == 1 %]
+ selected="selected"
+ [%# A user account appears only once. Remove it from the list, so that
+ # we know if there are some selected accounts which have not been listed. %]
+ [% selected.delete(tmpuser.login) %]
+ [% END %]
+ >[% tmpuser.identity FILTER html %]</option>
+ [% END %]
+ [% END %]
+
+ [%# If the list is not empty, this means some accounts have not been mentioned yet. %]
+ [% FOREACH selected_user = selected.keys %]
+ <option value="[% selected_user FILTER html %]" selected="selected">[% selected_user FILTER html %]</option>
+ [% END %]
+</select>
+[% ELSE %]
+ [% IF feature_enabled('jsonrpc') && Param('ajax_user_autocompletion') && id %]
+ <div id="[% id FILTER html %]_autocomplete"
+ [% IF classes %] class="[% classes.join(' ') FILTER html %]" [% END %]>
+ [% END %]
+ <input
+ name="[% name FILTER html %]"
+ value="[% value FILTER html %]"
+ [% IF classes %] class="[% classes.join(' ') FILTER html %]" [% END %]
+ [% IF onchange %] onchange="[% onchange FILTER html %]" [% END %]
+ [% IF disabled %] disabled="[% disabled FILTER html %]" [% END %]
+ [% IF accesskey %] accesskey="[% accesskey FILTER html %]" [% END %]
+ [% IF field_title %] title="[% field_title FILTER html %]" [% END %]
+ [% IF size %] size="[% size FILTER html %]" [% END %]
+ [% IF id %] id="[% id FILTER html %]" [% END %]
+ >
+ [% IF feature_enabled('jsonrpc') && Param('ajax_user_autocompletion') && id %]
+ <div id="[% id FILTER html %]_autocomplete_container"></div>
+ </div>
+ <script type="text/javascript">
+ if( typeof(YAHOO.bugzilla.userAutocomplete) !== 'undefined'
+ && YAHOO.bugzilla.userAutocomplete != null){
+ YAHOO.bugzilla.userAutocomplete.init( "[% id FILTER js %]",
+ "[% id FILTER js %]_autocomplete_container"
+ [% IF multiple %], true[% END%]);
+ }
+ </script>
+ [% END %]
+[% END %]
diff --git a/template/en/default/global/value-descs.js.tmpl b/template/en/default/global/value-descs.js.tmpl
new file mode 100644
index 0000000..7e79d10
--- /dev/null
+++ b/template/en/default/global/value-descs.js.tmpl
@@ -0,0 +1,21 @@
+[%# 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/value-descs.none.tmpl" %]
+
+BUGZILLA.value_descs = {
+ [% FOREACH vd_field = value_descs.keys %]
+ [% vd_field FILTER js %]: {
+ [% FOREACH vd_value = value_descs.${vd_field}.keys %]
+ '[% vd_value FILTER js %]':
+ '[% value_descs.${vd_field}.${vd_value} FILTER js %]'
+ [%~ ',' UNLESS loop.last %]
+ [% END %]
+ }[% ',' UNLESS loop.last %]
+ [% END %]
+};
diff --git a/template/en/default/global/value-descs.none.tmpl b/template/en/default/global/value-descs.none.tmpl
new file mode 100644
index 0000000..a6aa814
--- /dev/null
+++ b/template/en/default/global/value-descs.none.tmpl
@@ -0,0 +1,24 @@
+[%# 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.
+ #%]
+
+[%# You can use this hash to localize (translate) the values displayed
+ # for drop-down and multiple-select fields. Lines starting with "#"
+ # are comments.
+ #%]
+[% value_descs = {
+ "bug_status" => {
+ # "UNCONFIRMED" => "UNCO",
+ # "CONFIRMED" => "ITSABUG",
+ },
+
+ "resolution" => {
+ "" => "---",
+ # "FIXED" => "NO LONGER AN ISSUE",
+ # "WORKSFORME" => "NOTMYPROBLEM!",
+ },
+} %]
diff --git a/template/en/default/global/variables.none.tmpl b/template/en/default/global/variables.none.tmpl
new file mode 100644
index 0000000..9e411e3
--- /dev/null
+++ b/template/en/default/global/variables.none.tmpl
@@ -0,0 +1,33 @@
+[%# 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.
+ #%]
+
+[%# This is a list of terms that may be changed to "brand" the Bugzilla
+ # instance (for example, referring to "bugs" as "issues".) When used, these
+ # strings are used in several different types of content, and are not
+ # protected with Template-Toolkit FILTERs. Consequently, no special
+ # characters are allowed.
+ #
+ # Remember to PROCESS rather than INCLUDE this template.
+ #%]
+
+[% terms = {
+ "bug" => "bug",
+ "Bug" => "Bug",
+ "abug" => "a bug",
+ "Abug" => "A bug",
+ "aBug" => "a Bug",
+ "ABug" => "A Bug",
+ "bugs" => "bugs",
+ "Bugs" => "Bugs",
+ "zeroSearchResults" => "Zarro Boogs found",
+ "Bugzilla" => "Bugzilla"
+ }
+%]
+
+[% USE Hook %]
+[% Hook.process("end") %]