[%# The contents of this file are subject to the Mozilla Public
  # License Version 1.1 (the "License"); you may not use this file
  # except in compliance with the License. You may obtain a copy of
  # the License at http://www.mozilla.org/MPL/
  #
  # Software distributed under the License is distributed on an "AS
  # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  # implied. See the License for the specific language governing
  # rights and limitations under the License.
  #
  # The Original Code is the Bugzilla Bug Tracking System.
  #
  # The Initial Developer of the Original Code is Netscape Communications
  # Corporation. Portions created by Netscape are
  # Copyright (C) 1998 Netscape Communications Corporation. All
  # Rights Reserved.
  #
  # Contributor(s): Bradley Baetz <bbaetz@student.usyd.edu.au>
  #                 Colin Ogilvie <mozilla@colinogilvie.co.uk>
  #
  #%]
[% PROCESS bug/time.html.tmpl %]
<?xml version="1.0" [% IF Param('utf8') %]encoding="UTF-8" [% END %]standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "[% urlbase | html %]bugzilla.dtd">

<bugzilla
  version="[% constants.BUGZILLA_VERSION %]"
  urlbase="[% urlbase | xml %]"
  [%# Note that the maintainer's email is not filtered,
    # intentionally. Even logged-out users should be able
    # to see that, since it will be in error messages anyway.
  %]
  maintainer="[% Param('maintainer') | xml %]"
[% IF user.id %]
  exporter="[% user.email | email | xml %]"
[% END %]
>

[% FOREACH bug = error_bugs %]
  <bug error="[% bug.error | xml %]">
    <bug_id>[% bug.bug_id | xml %]</bug_id>
  </bug>
[% END %]
[% FOREACH bug = bugs %]
  <bug>
    [% FOREACH field = bug.fields %]
      [% IF displayfields.$field %]
        [%+ PROCESS bug_field %]
      [% END %]
    [% END %]

    [%# This is here so automated clients can still use process_bug.cgi %]
    [% IF displayfields.token && user.id %]
      <token>[% issue_hash_token([bug.id, bug.delta_ts]) | xml %]</token>
    [% END %]

    [%# Now handle 'special' fields #%]
    [% IF displayfields.group %]
      [% FOREACH g = bug.groups %]
        [% NEXT UNLESS g.ison %]
        <group id="[% g.bit | xml %]">[% g.name | xml %]</group>
      [% END %]
    [% END %]

    [%# Bug Flags %]
    [% PROCESS section_flags obj => bug %]

    [% IF displayfields.long_desc %]
      [% FOREACH c = bug.comments %]
        [% NEXT IF c.is_private && !user.is_insider %]
        <long_desc isprivate="[% c.is_private | xml %]">
          <commentid>[% c.id | xml %]</commentid>
          [% IF c.type %]
          <type>[% c.type | xml %]</type>
          [% END %]
          [% IF c.is_about_attachment %]
            <attachid>[% c.extra_data | xml %]</attachid>
          [% END %]
          <who name="[% c.author.name | xml %]">[% c.author.email | email | xml %]</who>
          <bug_when>[% c.creation_ts | time("%Y-%m-%d %T %z") | xml %]</bug_when>
          [% IF user.is_timetracker && (c.work_time - 0 != 0) %]
            <work_time>[% PROCESS formattimeunit time_unit = c.work_time | xml %]</work_time>
          [% END %]
          <thetext>[% c.body_full | xml %]</thetext>
        </long_desc>
      [% END %]
    [% END %]

    [% IF displayfields.attachment %]
      [% FOREACH a = bug.attachments %]
        [% NEXT IF a.isprivate && !user.is_insider %]
        <attachment
            isobsolete="[% a.isobsolete | xml %]"
            ispatch="[% a.ispatch | xml %]"
            isprivate="[% a.isprivate | xml %]">
          <attachid>[% a.id %]</attachid>
          <date>[% a.attached | time("%Y-%m-%d %T %z") | xml %]</date>
          <delta_ts>[% a.modification_time | time("%Y-%m-%d %T %z") | xml %]</delta_ts>
          <desc>[% a.description | xml %]</desc>
          <filename>[% a.filename | xml %]</filename>
          <type>[% a.contenttype | xml %]</type>
          <size>[% a.datasize | xml %]</size>
          <attacher>[% a.attacher.email | email | xml %]</attacher>
          [%# This is here so automated clients can still use attachment.cgi %]
          [% IF displayfields.token && user.id %]
            <token>[% issue_hash_token([a.id, a.modification_time]) | xml %]</token>
          [% END %]
          [% IF displayfields.attachmentdata %]
            <data encoding="base64">[% a.data | base64 %]</data>
          [% END %]

          [% PROCESS section_flags obj => a %]
        </attachment>
      [% END %]
    [% END %]

    [% Hook.process("bug_end") %]

  </bug>
[% END %]

</bugzilla>

[% BLOCK bug_field %]
  [% SET field_obj = Bugzilla.get_field(field) %]
  [% IF field_obj.type == constants.FIELD_TYPE_SINGLE_SELECT %]
    [% fn = field _ "_obj" %]
    <[% field %]>[% bug.$fn.name | xml %]</[% field %]>
  [% ELSIF field_obj.type == constants.FIELD_TYPE_MULTI_SELECT %]
    [% fn = field _ "_obj" %]
    [% FOREACH value = bug.$fn %]
      <[% field %]>[% value.name | xml %]</[% field %]>
    [% END %]
  [% ELSE %]
    [% FOREACH val = bug.$field %]
      [%# We need to handle some fields differently. This should become
        # nicer once we have custfields, and a type attribute for the fields
        #%]
      [% name = '' %]
      [% IF field == 'reporter' OR field == 'assigned_to' OR field == 'qa_contact' %]
        [% name = val.name %]
        [% val = val.email | email %]
      [% ELSIF field == 'cc' %]
        [% val = val | email %]
      [% ELSIF field == 'creation_ts' OR field == 'delta_ts' %]
        [% val = val | time("%Y-%m-%d %T %z") %]
      [% END %]
      <[% field %][% IF name != '' %] name="[% name | xml %]"[% END -%]>[%- val | xml %]</[% field %]>
    [% END %]
  [% END %]
[% END %]

[% BLOCK section_flags %]
  [% RETURN UNLESS displayfields.flag %]

  [% FOREACH flag = obj.flags %]
    <flag name="[% flag.type.name | xml %]"
          id="[% flag.id | xml %]"
          type_id="[% flag.type_id | xml %]"
          status="[% flag.status | xml %]"
          setter="[% flag.setter.email | email | xml %]"
      [% IF flag.status == "?" && flag.requestee %]
          requestee="[% flag.requestee.email | email | xml %]"
      [% END %]
    />
  [% END %]
[% END %]
