diff options
Diffstat (limited to 'template/en/default/global')
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 %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%] + [%- IF format %]&format=[% format FILTER uri %][% END %]"> + All</a>: + </th> + + <td valign="top"> Show all products</td> + </tr> + <tr> + <th colspan="2"> </th> + </tr> + +[% FOREACH class = classifications %] + <tr> + <th align="right"> + <a href="[% target FILTER uri %]?classification=[% class.name FILTER uri -%] + [%- IF cloned_bug_id %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%] + [%- IF format %]&format=[% format FILTER uri %][% END %]"> + [% class.name FILTER html %]</a>: + </th> + + [% IF class.description %] + <td valign="top"> [% 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 %]&cloned_bug_id=[% cloned_bug_id FILTER uri %][% END -%] + [%- IF format %]&format=[% format FILTER uri %][% END %]"> + [% p.name FILTER html FILTER no_break %]</a>: + </th> + + <td valign="top">[% p.description FILTER html_light %]</td> + </tr> + [% END %] + + <tr> + <th colspan="2"> </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->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 + "[% username FILTER html %]": + [% 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,"&") + .replace(/</g,"<") + .replace(/>/g,">") + "</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 %]&requestee= + [% user.login FILTER uri %]&do_union=1&group=type&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 out</a> + [% ELSE %] + Logged in 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 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 %] + [% " – $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&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&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 %] -> [% fk.TABLE FILTER html %].[% fk.COLUMN FILTER html %]... + + [% ELSIF message_tag == "install_fk_drop" %] + Dropping foreign key: [% table FILTER html %].[% column FILTER html %] -> [% 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 %]&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&id=[% bug.bug_id %]"> + [% END %] + + + [%# *** Saved Searches *** %] + [% IF user.showmybugslink %] + [% user_login = user.login FILTER uri %] + <link rel="Saved Searches" title="My [% terms.Bugs %]" + href="[% Param('mybugstemplate').replace('%userid%', user_login) %]"> + [% END %] + + [% FOREACH q = user.queries_subscribed %] + <link rel="Saved Search" + title="[% q.name FILTER html %] ([% q.user.login FILTER html %])" + href="buglist.cgi?cmdtype=dorem&remaction=run&namedcmd= + [% q.name FILTER uri %]&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"> </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"> </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&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&remaction=run&namedcmd= + [% q.name FILTER uri %]&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 %]&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 %]&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&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 " + [% groupname FILTER html %]" is illegal. + + [% ELSIF error == "illegal_query_name" %] + [% title = "Illegal Search Name" %] + The name of your search cannot contain any of the following characters: + <, >, &. + + [% 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 %] ≤ sortkey ≤ + [%+ 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&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&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&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&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&target_login= + [%- target_login FILTER uri %]&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&target_login= + [%- target_login FILTER uri %]&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 + <[% type FILTER html %]> 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&remaction=forget&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") %] |