[%# 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" %]
    [% docslinks = {'using/reports-and-charts.html' => 'Setting up Charting'} %]
    [% IF product.id %]
      Charts for the <em>[% product.name 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 <kbd>[% dir FILTER html %]</kbd> and
    <kbd>[% graph_dir FILTER html %]</kbd> does not exist.

  [% ELSIF error == "chart_file_open_fail" %]
    Unable to open the chart datafile <kbd>[% filename FILTER html %]</kbd>.
 
  [% 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" %]
    Bugzilla did not receive an email address from the
    environment.
    [% IF Param("auth_env_email") %]
      This means that the '[% Param("auth_env_email") FILTER html %]'
      environment variable was empty or did not exist.
    [% ELSE %]
      You need to set the "auth_env_email" parameter to the name of
      the environment variable that will contain the user's email
      address.
    [% END %]

  [% ELSIF error == "extension_must_be_subclass" %]
    <code>[% package FILTER html %]</code> from 
    <code>[% filename FILTER html %]</code> is not a subclass of
    <code>[% class FILTER html %]</code>.

  [% ELSIF error == "extension_must_return_name" %]
    <code>[% extension FILTER html %]</code> returned
    <code>[% returned FILTER html %]</code>, which is not a valid name
    for an extension. Extensions must return their name, not <code>1</code>
    or a number. See the documentation of
    <a href="[% docs_urlbase FILTER html %]api/Bugzilla/Extension.html">Bugzilla::Extension</a>
    for details.

  [% ELSIF error == "extension_no_name" %]
    We did not find a <code>NAME</code> method in 
    <code>[% package FILTER html %]</code> (loaded from
    <code>[% filename FILTER html %]</code>). This means that
    the extension has one or more of the following problems:

    <ul>
      <li><code>[% filename FILTER html %]</code> did not define a
        <code>[% package FILTER html %]</code> package.</li>
      <li><code>[% package FILTER html %]</code> did not define a
        <code>NAME</code> method (or the <code>NAME</code> method
        returned an empty string).</li>
    </ul>

  [% ELSIF error == "extern_id_conflict" %]
    The external ID '[% extern_id FILTER html %]' already exists
    in the database for '[% username FILTER html %]', but your
    account source says that '[% extern_user FILTER html %]' has that ID.

  [% ELSIF error == "field_choice_must_use_type" %]
    When you call a class method on <code>Bugzilla::Field::Choice</code>,
    you must call <code>Bugzilla::Field::Choice-&gt;type('some_field')</code>
    to generate the right class (you can't call class methods directly
    on Bugzilla::Field::Choice).

  [% ELSIF error == "field_not_custom" %]
    '[% field.description FILTER html %]' ([% field.name FILTER html %])
    is not a custom field.

  [% ELSIF error == "field_type_not_specified" %]
    [% title = "Field Type Not Specified" %]
    You must specify a type when creating a custom field.

  [% ELSIF error == "illegal_field" %]
    A legal [% field FILTER html %] was not set.

  [% ELSIF error == "invalid_customfield_type" %]
    [% title = "Invalid Field Type" %]
    The type <em>[% type FILTER html %]</em> is not a valid field type.

  [% ELSIF error == "invalid_feature" %]
    [% title = "Invalid Feature Name" %]
    [% feature FILTER html %] is not a valid feature name. See
    <code>OPTIONAL_MODULES</code> in 
    <code>Bugzilla::Install::Requirements</code> for valid names.

  [% ELSIF error == "invalid_flag_association" %]
    [% title = "Invalid Flag Association" %]
    Some flags do not belong to
    [% IF attach_id %]
      attachment [% attach_id FILTER html %].
    [% ELSE %]
      [%+ terms.bug %] [%+ bug_id FILTER html %].
    [% END %]

  [% ELSIF error == "invalid_series_id" %]
    [% title = "Invalid Series" %]
    The series_id [% series_id FILTER html %] is not valid. It may be that
    this series has been deleted.

  [% ELSIF error == "invalid_timestamp" %]
    The entered timestamp <code>[% timestamp FILTER html %]</code> could not
    be parsed into a valid date and time.

  [% ELSIF error == "invalid_webservergroup" %]
    There is no such group: [% group FILTER html %]. Check your $webservergroup
    setting in [% constants.bz_locations.localconfig FILTER html %].

  [% ELSIF error == "flag_unexpected_object" %]
    [% title = "Object Not Recognized" %]
    Flags cannot be set for objects of type [% caller FILTER html %].
    They can only be set for [% terms.bugs %] and attachments.

  [% ELSIF error == "flag_type_inactive" %]
    [% title = "Inactive Flag Type" %]
    The flag type [% type FILTER html %] is inactive and cannot be used
    to create new flags.

  [% ELSIF error == "flag_type_target_type_invalid" %]
    The target type was neither <em>[% terms.bug %]</em> nor <em>attachment</em>
    but rather <em>[% target_type FILTER html %]</em>.
  
  [% ELSIF error == "invalid_field_name" %]
    [% title = "Invalid Field Name" %]
    Can't use "[% field.truncate(30, "...") FILTER html %]" as a field name.

  [% ELSIF error == "jobqueue_insert_failed" %]
   [% title = "Job Queue Failure" %]
    Inserting a <code>[% job FILTER html %]</code> job into the Job 
    Queue failed with the following error: [% errmsg FILTER html %]

  [% ELSIF error == "jobqueue_no_job_mapping" %]
    <code>Bugzilla::JobQueue</code> has not been configured to handle
    the job "[% job FILTER html %]".  You need to add this job type
    to the <code>JOB_MAP</code> constant in <code>Bugzilla::JobQueue</code>,
    perhaps by using the 'job_map' hook.

  [% ELSIF error == "ldap_bind_failed" %]
    Failed to bind to the LDAP server. The error message was: 
    <code>[% errstr FILTER html %]</code>

  [% ELSIF error == "ldap_cannot_retreive_attr" %]
    The specified LDAP attribute [% attr FILTER html %] was not found.

  [% ELSIF error == "ldap_connect_failed" %]
    Could not connect to the LDAP server(s) <code>[% server FILTER html %]</code>.

  [% ELSIF error == "ldap_start_tls_failed" %]
    Could not start TLS with LDAP server: <code>[% error FILTER html %]</code>.

  [% ELSIF error == "ldap_search_error" %]
    An error occurred while trying to search LDAP for 
    &quot;[% username FILTER html %]&quot;: 
    [% IF errstr %]
      <code>[% errstr FILTER html %]</code>
    [% ELSE %]
      Unable to find user in LDAP
    [% END %]

  [% ELSIF error == "ldap_server_not_defined" %]
    The LDAP server for authentication has not been defined.

  [% ELSIF error == "mail_send_error" %]
    There was an error sending mail from '[% mail.header('From') FILTER html %]'
    to '[% mail.header('To') FILTER html %]':
    [%+ msg FILTER html %]

  [% ELSIF error == "missing_series_id" %]
    Having inserted a series into the database, no series_id was returned for
    it. Series: [% series.category FILTER html %] / 
    [%+ series.subcategory FILTER html %] / 
    [%+ series.name FILTER html %].

  [% ELSIF error == "object_dep_sort_loop" %]
    There is a loop in VALIDATOR_DEPENDENCIES involving
    '[%+ field FILTER html %]'. Here are the fields we considered:
    [%+ considered.join(', ') FILTER html %].

  [% ELSIF error == "param_invalid" %]
    [% title = "Invalid Parameter" %]
    <code>[% param FILTER html %]</code> is not a valid parameter
    for the [% function FILTER html %] function.

  [% ELSIF error == "param_must_be_numeric" %]
    [% title = "Invalid Parameter" %]
    Invalid parameter <code>[% param FILTER html %]</code> passed to 
    <code>[% function FILTER html %]</code>: It must be numeric.

  [% ELSIF error == "param_required" %]
    [% title = "Missing Parameter" %]
    The function <code>[% function FILTER html %]</code> requires
    a <code>[% param FILTER html %]</code> argument, and that
    argument was not set.

  [% ELSIF error == "param_integer_required" %]
    The function <code>[% function FILTER html %]</code> requires
    that <code>[% param FILTER html %]</code> be an integer.

  [% ELSIF error == "param_scalar_array_required" %]
    The <code>[% param FILTER html %]</code> parameter must be an array of scalars
    (integers and/or strings).

  [% 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" %]
    [% title = "Invalid Search Type" %]
    Bugzilla does not support the search type
    "[% operator.truncate(30, "...") 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 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>

<p>
  <samp>URL: [% Bugzilla.cgi.self_url FILTER html %]</samp>
</p>

<div id="error_msg" class="throw_error">
  [% error_message FILTER none %]
</div>

<p id="post_err_msg">
  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 %]
