aboutsummaryrefslogtreecommitdiff
blob: 8034212bd1dd8e81da51d5d3f32021207255678b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
[%# 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 FILTER html %]bugzilla.dtd">

<bugzilla version="[% constants.BUGZILLA_VERSION %]"
          urlbase="[% urlbase FILTER 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') FILTER xml %]"
[% IF user.id %]
          exporter="[% user.email FILTER email FILTER xml %]"
[% END %]
>

[% FOREACH bug = bugs %]
  [% IF bug.error %]
    <bug error="[% bug.error FILTER xml %]">
      <bug_id>[% bug.bug_id FILTER xml %]</bug_id>
    </bug>
  [% ELSE %]
    <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]) FILTER xml %]</token>
      [% END %]

      [%# Now handle 'special' fields #%]
      [% IF displayfields.group %]
        [% FOREACH g = bug.groups %]
          [% NEXT UNLESS g.ison %]
          <group id="[% g.bit FILTER xml %]">[% g.name FILTER 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 FILTER xml %]">
            <commentid>[% c.id FILTER xml %]</commentid>
            [% IF c.is_about_attachment %]
              <attachid>[% c.extra_data FILTER xml %]</attachid>
            [% END %]
            <who name="[% c.author.name FILTER xml %]">[% c.author.email FILTER email FILTER xml %]</who>
            <bug_when>[% c.creation_ts FILTER time("%Y-%m-%d %T %z") FILTER xml %]</bug_when>
            [% IF user.is_timetracker && (c.work_time - 0 != 0) %]
              <work_time>[% PROCESS formattimeunit time_unit = c.work_time FILTER xml %]</work_time>
            [% END %]
            <thetext>[% c.body_full FILTER xml %]</thetext>
          </long_desc>
        [% END %]
      [% END %]
      
      [% IF displayfields.attachment %]
        [% FOREACH a = bug.attachments %]
          [% NEXT IF a.isprivate && !user.is_insider %]
          <attachment
              isobsolete="[% a.isobsolete FILTER xml %]"
              ispatch="[% a.ispatch FILTER xml %]"
              isprivate="[% a.isprivate FILTER xml %]"
              isurl="[% a.isurl FILTER xml %]"
          >
            <attachid>[% a.id %]</attachid>
            <date>[% a.attached FILTER time("%Y-%m-%d %T %z") FILTER xml %]</date>
            <delta_ts>[% a.modification_time FILTER time("%Y-%m-%d %T %z") FILTER xml %]</delta_ts>
            <desc>[% a.description FILTER xml %]</desc>
            <filename>[% a.filename FILTER xml %]</filename>
            <type>[% a.contenttype FILTER xml %]</type>
            <size>[% a.datasize FILTER xml %]</size>
            <attacher>[% a.attacher.email FILTER email FILTER 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]) FILTER xml %]</token>
            [% END %]
            [% IF displayfields.attachmentdata %]
              <data encoding="base64">[% a.data FILTER base64 %]</data>
            [% END %]

            [% PROCESS section_flags obj => a %]
          </attachment>
        [% END %]
      [% END %]
      
      [% Hook.process("bug_end") %]

    </bug>
  [% END %]
[% END %]

</bugzilla>

[% BLOCK bug_field %]
  [% field_values = bug.$field %]
  [%# Work around TT bug https://rt.cpan.org/Public/Bug/Display.html?id=9802 %]
  [% IF bug.$field.size == 1 %]
    [% field_values = [bug.$field.first] %]
  [% END %]

  [% FOREACH val = field_values %]
    [%# 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 FILTER email %]
    [% ELSIF field == 'cc' %]
        [% val = val FILTER email %]
    [% ELSIF field == 'creation_ts' OR field == 'delta_ts' %]
      [% val = val FILTER time("%Y-%m-%d %T %z") %]
    [% END %]
    <[% field %][% IF name != '' %] name="[% name FILTER xml %]"[% END -%]>
      [%- val FILTER xml %]</[% field %]>
  [% END %]
[% END %]

[% BLOCK section_flags %]
  [% RETURN UNLESS displayfields.flag %]
  
  [% FOREACH flag = obj.flags %]
    <flag name="[% flag.type.name FILTER xml %]"
          id="[% flag.id FILTER xml %]"
          type_id="[% flag.type_id FILTER xml %]"
          status="[% flag.status FILTER xml %]"
          setter="[% flag.setter.email FILTER email FILTER xml %]"
      [% IF flag.status == "?" && flag.requestee %]
          requestee="[% flag.requestee.email FILTER email FILTER xml %]"
      [% END %]
    />
  [% END %]
[% END %]