summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlbert Ting <altlist@gmail.com>2012-10-13 14:38:55 +0200
committerFrédéric Buclin <LpSolit@gmail.com>2012-10-13 14:38:55 +0200
commitfd004da7fb20f885eeec229877f4892f4e72c73b (patch)
treef95b4f79e6ae2ef41338d3bca30b1096f22c5257
parentbfb66f198ca3e0dddcccaefc3d729f348a254056 (diff)
downloadbugzilla-fd004da7fb20f885eeec229877f4892f4e72c73b.tar.gz
bugzilla-fd004da7fb20f885eeec229877f4892f4e72c73b.tar.xz
Bug 245375: Scheduled whining needs custom columns
r/a=LpSolit
-rw-r--r--template/en/default/whine/mail.html.tmpl23
-rw-r--r--template/en/default/whine/mail.txt.tmpl26
-rwxr-xr-xwhine.pl14
3 files changed, 38 insertions, 25 deletions
diff --git a/template/en/default/whine/mail.html.tmpl b/template/en/default/whine/mail.html.tmpl
index 3287dcc64..cfc3279c3 100644
--- a/template/en/default/whine/mail.html.tmpl
+++ b/template/en/default/whine/mail.html.tmpl
@@ -13,6 +13,7 @@
# bugs: array containing hashes of fieldnames->values for each bug
# title: the title given in the whine scheduling mechanism
# name: the name of the query
+ # columnlist: array of fieldnames to display in the mail
# author: user object for the person who scheduled this whine
# recipient: user object for the intended recipient of the message
#%]
@@ -47,26 +48,20 @@
<table width="100%">
<tr>
<th align="left">ID</th>
- <th align="left">Sev</th>
- <th align="left">Pri</th>
- <th align="left">HW</th>
- <th align="left">Assignee</th>
- <th align="left">Status</th>
- <th align="left">Resolution</th>
- <th align="left">Summary</th>
+ [% FOREACH col = query.columnlist %]
+ [% NEXT IF col == 'bug_id' %]
+ <th align="left">[% field_descs.$col FILTER html %]</th>
+ [% END %]
</tr>
[% FOREACH bug=query.bugs %]
<tr>
<td align="left"><a href="[%+ urlbase FILTER html %]show_bug.cgi?id=
[%- bug.bug_id %]">[% bug.bug_id %]</a></td>
- <td align="left">[% display_value("bug_severity", bug.bug_severity) FILTER html %]</td>
- <td align="left">[% display_value("priority", bug.priority) FILTER html %]</td>
- <td align="left">[% display_value("rep_platform", bug.rep_platform) FILTER html %]</td>
- <td align="left">[% bug.assigned_to FILTER html %]</td>
- <td align="left">[% display_value("bug_status", bug.bug_status) FILTER html %]</td>
- <td align="left">[% display_value("resolution", bug.resolution) FILTER html %]</td>
- <td align="left">[% bug.short_desc FILTER html %]</td>
+ [% FOREACH col = query.columnlist %]
+ [% NEXT IF col == 'bug_id' %]
+ <td align="left">[% display_value(col, bug.$col) FILTER html %]</td>
+ [% END %]
</tr>
[% END %]
</table>
diff --git a/template/en/default/whine/mail.txt.tmpl b/template/en/default/whine/mail.txt.tmpl
index 44ea655f2..ba1e95741 100644
--- a/template/en/default/whine/mail.txt.tmpl
+++ b/template/en/default/whine/mail.txt.tmpl
@@ -13,6 +13,7 @@
# bugs: array containing hashes of fieldnames->values for each bug
# title: the title given in the whine scheduling mechanism
# name: the name of the query
+ # columnlist: array of fieldnames to display in the mail
# author: user object for the person who scheduled this whine
# recipient: user object for the intended recipient of the message
#%]
@@ -35,16 +36,21 @@
[% FOREACH bug=query.bugs %]
[% terms.Bug +%] [%+ bug.bug_id %]:
[%+ urlbase %]show_bug.cgi?id=[% bug.bug_id +%]
- Priority: [%+ display_value("priority", bug.priority) -%]
- [% field_descs.bug_severity %]: [%+ display_value("bug_severity", bug.bug_severity) -%]
- [%+ field.descs.rep_platform %]: [%+ display_value("rep_platform", bug.rep_platform) %]
- Assignee: [%+ bug.assigned_to %]
- Status: [%+ display_value("bug_status", bug.bug_status) %]
- [%- IF bug.resolution -%] Resolution: [% display_value("resolution", bug.resolution) -%]
- [%- END %]
- Summary: [% bug.short_desc %]
-
- [% END %]
+ [% largest_title = 0 %]
+ [% FOREACH col = query.columnlist %]
+ [% NEXT IF col == 'bug_id' %]
+ [% IF field_descs.${col}.length > largest_title %]
+ [% largest_title = field_descs.${col}.length %]
+ [% END %]
+ [% END %]
+ [% FOREACH col = query.columnlist %]
+ [% NEXT IF col == 'bug_id' %]
+ [%+ " " FILTER repeat(largest_title - field_descs.${col}.length) %]
+ [% field_descs.$col %]: [% display_value($col, bug.$col) %]
+ [% END %]
+
+ [% END %]
+
View as [% terms.bug %] list: [% urlbase %]buglist.cgi?cmdtype=runnamed&namedcmd=[% query.name FILTER uri %]
[% END %]
[% ELSE %]
diff --git a/whine.pl b/whine.pl
index cb52029c0..481b47425 100755
--- a/whine.pl
+++ b/whine.pl
@@ -338,6 +338,7 @@ while (my $event = get_next_event) {
# - queries array of hashes containing:
# - bugs: array of hashes mapping fieldnames to values for this bug
# - title: text title given to this query in the whine event
+# - columnlist: array of fieldnames to display in the mail
# - name: text name of this query
# - schedule_id integer id of the schedule being run
# - subject Subject line for the message
@@ -408,6 +409,7 @@ sub run_queries {
'name' => $_->[0],
'title' => $_->[1],
'onemailperbug' => $_->[2],
+ 'columnlist' => [],
'bugs' => [],
}
);
@@ -434,7 +436,16 @@ sub run_queries {
# Bugzilla::Search to execute a saved query. It's exceedingly weird,
# but that's how it works.
my $searchparams = new Bugzilla::CGI($savedquery);
- my @orderstrings = split(/,\s*/, $searchparams->param('order'));
+
+ # Use the columnlist for the saved query, if it exists, and make
+ # sure bug_id is always in the list.
+ if (my $columnlist = $searchparams->param('columnlist')) {
+ @searchfields = split(/[\s,]+/, $columnlist);
+ unshift(@searchfields, 'bug_id') unless grep { $_ eq 'bug_id' } @searchfields;
+ }
+ push @{$thisquery->{'columnlist'}}, @searchfields;
+
+ my @orderstrings = split(/,\s*/, $searchparams->param('order') || '');
my $search = new Bugzilla::Search(
'fields' => \@searchfields,
'params' => scalar $searchparams->Vars,
@@ -466,6 +477,7 @@ sub run_queries {
{
'name' => $thisquery->{'name'},
'title' => $thisquery->{'title'},
+ 'columnlist' => $thisquery->{'columnlist'},
'bugs' => [ $bug ],
},
];