r=dkl a=sgreen git-svn-id: svn://10.0.0.236/trunk@265871 18797224-902f-48f8-a5cc-f745e15eee43
162 lines
6.0 KiB
Cheetah
162 lines
6.0 KiB
Cheetah
[%# 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 bug/time.html.tmpl %]
|
|
[% USE Bugzilla %]
|
|
[% cgi = Bugzilla.cgi %]
|
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
|
<!DOCTYPE bugzilla [% IF cgi.param('dtd') %][[% PROCESS pages/bugzilla.dtd.tmpl %]][% ELSE %]SYSTEM "[% urlbase FILTER xml %]page.cgi?id=bugzilla.dtd"[% END %]>
|
|
|
|
<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 %]
|
|
[% sort_order = user.settings.comment_sort_order.value %]
|
|
<comment_sort_order>[% sort_order FILTER xml %]</comment_sort_order>
|
|
|
|
[% FOREACH c = bug.comments %]
|
|
[% PROCESS a_comment %]
|
|
[% 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 %]"
|
|
>
|
|
<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[% IF a.attacher.name != '' %] name="[% a.attacher.name FILTER xml %]"[% END -%]>
|
|
[% 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") %]
|
|
[% ELSIF field == "see_also" %]
|
|
[% val = val.name %]
|
|
[% 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 %]
|
|
|
|
[% BLOCK a_comment %]
|
|
[% RETURN IF c.is_private && !user.is_insider %]
|
|
<long_desc isprivate="[% c.is_private FILTER xml %]" >
|
|
<commentid>[% c.id FILTER xml %]</commentid>
|
|
<comment_count>[% c.count FILTER xml %]</comment_count>
|
|
[% 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 %]
|