[bugzilla-gnome-org-extensions] initial import
- From: Krzesimir Nowak <krnowak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [bugzilla-gnome-org-extensions] initial import
- Date: Thu, 20 Nov 2014 22:07:39 +0000 (UTC)
commit daae815a629b0835d9455ff4d06943c6d1f0ecff
Author: Olav Vitters <olav vitters nl>
Date: Wed Feb 29 10:40:49 2012 +0100
initial import
Config.pm | 5 +
Extension.pm | 29 ++
lib/Util.pm | 322 ++++++++++++++++++
template/en/default/global/user.html.tmpl | 44 +++
template/en/default/pages/describeuser.html.tmpl | 377 ++++++++++++++++++++++
5 files changed, 777 insertions(+), 0 deletions(-)
---
diff --git a/Config.pm b/Config.pm
new file mode 100644
index 0000000..5f8a44b
--- /dev/null
+++ b/Config.pm
@@ -0,0 +1,5 @@
+package Bugzilla::Extension::DescribeUser;
+use strict;
+use constant NAME => 'DescribeUser';
+
+__PACKAGE__->NAME;
diff --git a/Extension.pm b/Extension.pm
new file mode 100644
index 0000000..7ec8b5b
--- /dev/null
+++ b/Extension.pm
@@ -0,0 +1,29 @@
+package Bugzilla::Extension::DescribeUser;
+use strict;
+use base qw(Bugzilla::Extension);
+
+use Bugzilla::Extension::DescribeUser::Util qw(page);
+
+our $VERSION = '';
+
+sub page_before_template {
+ my ($self, $args) = @_;
+
+ Bugzilla::Extension::DescribeUser::Util::page(%{ $args });
+
+}
+
+sub config_modify_panels {
+ my ($self, $args) = @_;
+
+ my $panels = $args->{panels};
+
+ # Point default of mybugstemplate towards this extension
+ my $query_params = $panels->{'query'}->{params};
+
+ my ($mybugstemplate) = grep($_->{name} eq 'mybugstemplate', @$query_params);
+
+ $mybugstemplate->{default} = 'page.cgi?id=describeuser.html&login=%userid%'
+}
+
+__PACKAGE__->NAME;
diff --git a/lib/Util.pm b/lib/Util.pm
new file mode 100644
index 0000000..b605b2c
--- /dev/null
+++ b/lib/Util.pm
@@ -0,0 +1,322 @@
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# 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 Olav Vitters.
+# Portions created by Olav Vitters are
+# Copyright (C) 2000 Olav Vitters. All
+# Rights Reserved.
+
+package Bugzilla::Extension::DescribeUser::Util;
+
+use strict;
+use base qw(Exporter);
+
+use Bugzilla;
+use Bugzilla::Constants;
+use Bugzilla::User;
+use Bugzilla::Error;
+use Bugzilla::Util;
+
+our @EXPORT = qw(
+ page
+);
+
+sub page {
+ my %params = @_;
+ my ($vars, $page) = @params{qw(vars page_id)};
+ if ($page =~ /^describeuser\./) {
+ _page_describeuser($vars);
+ }
+}
+
+sub _page_describeuser {
+ my $vars = shift;
+
+ my $cgi = Bugzilla->cgi;
+ my $dbh = Bugzilla->dbh;
+ my $user = Bugzilla->user;
+
+ my $userid = $user->id;
+
+ my $r_userid;
+ my $r_user;
+ my $displayname;
+ my $to_be_conjugation;
+
+ if (defined $cgi->param('login') && (!Bugzilla->user->id || (trim($cgi->param('login')) !=
Bugzilla->user->login))) {
+ $r_userid = login_to_id(trim($cgi->param('login')));
+ if ($r_userid == 0) {
+ ThrowUserError('invalid_username', { name => $cgi->param('login') });
+ }
+ $r_user = Bugzilla::User->new($r_userid);
+ $displayname = $r_user->name || $r_user->login;
+ $to_be_conjugation = 'is';
+ } else {
+ $r_user = Bugzilla->user;
+ $r_userid = Bugzilla->user->id;
+ $displayname = "you";
+ $to_be_conjugation = 'are';
+ }
+
+ $vars->{'userinfo'} = $r_user;
+ $vars->{'displayname'} = $displayname;
+ $vars->{'to_be_conjugation'} = $to_be_conjugation;
+
+ my $sec_join = " LEFT JOIN bug_group_map
+ ON bug_group_map.bug_id = bugs.bug_id ";
+
+ if ($user->groups) {
+ $sec_join .= "
+ AND bug_group_map.group_id NOT IN (" . $user->groups_as_string . ") ";
+ }
+ $sec_join .= "
+ LEFT JOIN cc
+ ON cc.bug_id = bugs.bug_id AND cc.who = " . $user->id;
+
+ my $sec_where = "
+ AND bugs.creation_ts IS NOT NULL
+ AND ((bug_group_map.group_id IS NULL)
+ OR (bugs.reporter_accessible = 1 AND bugs.reporter = $userid)
+ OR (bugs.cclist_accessible = 1 AND cc.who IS NOT NULL)
+ OR (bugs.assigned_to = $userid) ";
+
+ if (defined $cgi->param('useqacontact')) {
+ $sec_where .= "
+ OR (bugs.qa_contact = $userid) ";
+ }
+
+ my $sec_where_minus_grouping = $sec_where . ")";
+ $sec_where .= ") " . $dbh->sql_group_by("bugs.bug_id", 'product, bugs.bug_status, bugs.resolution,
bugs.bug_severity, bugs.short_desc');
+
+ my $comments = $dbh->selectrow_array(
+ "SELECT COUNT(thetext)
+ FROM longdescs
+ WHERE who = ?", undef, $r_userid);
+
+ $vars->{'comments'} = $comments;
+ my $bugs_closed = $dbh->selectrow_array(
+ "SELECT COUNT(bugs.bug_id)
+ FROM bugs
+ INNER JOIN bugs_activity
+ ON bugs.bug_id = bugs_activity.bug_id
+ WHERE bugs.bug_status IN ('RESOLVED','CLOSED','VERIFIED')
+ AND bugs_activity.added IN ('RESOLVED','CLOSED')
+ AND bugs_activity.bug_when =
+ (SELECT MAX(bug_when)
+ FROM bugs_activity ba
+ WHERE ba.added IN ('RESOLVED','CLOSED')
+ AND ba.removed IN ('UNCONFIRMED','REOPENED',
+ 'NEW','ASSIGNED','NEEDINFO')
+ AND ba.bug_id = bugs_activity.bug_id)
+ AND bugs_activity.who = ?", undef, $r_userid);
+
+ $vars->{'bugs_closed'} = $bugs_closed;
+ my $bugs_reported = $dbh->selectrow_array(
+ "SELECT COUNT(DISTINCT bug_id)
+ FROM bugs
+ WHERE bugs.reporter = ?
+ AND NOT (bugs.bug_status = 'RESOLVED' AND
+ bugs.resolution IN ('DUPLICATE','INVALID','NOTABUG',
+ 'NOTGNOME','INCOMPLETE'))",
+ undef, $r_userid);
+ $vars->{'bugs_reported'} = $bugs_reported;
+
+ $vars->{'developed_products'} = developed_products($r_user);
+
+ my $sth;
+ my @patches;
+ # XXX - relies on attachments.status!
+ if ($dbh->bz_column_info('attachments', 'status')) {
+ $sth = $dbh->prepare("
+ SELECT attachments.bug_id, attachments.status as status,
+ attachments.attach_id, products.name as product,
+ attachments.description
+ FROM attachments, bugs, products
+ WHERE attachments.bug_id = bugs.bug_id
+ AND bugs.product_id = products.id
+ AND bugs.bug_status IN ('UNCONFIRMED','NEW','ASSIGNED','REOPENED')
+ AND attachments.submitter_id = ?
+ AND attachments.ispatch='1'
+ AND attachments.isobsolete != '1'
+ AND attachments.status IN ('accepted-commit_after_freeze',
+ 'accepted-commit_now', 'needs-work', 'none',
+ 'rejected', 'reviewed')
+ ORDER BY attachments.status");
+
+ $sth->execute($r_userid);
+ while (my $patch = $sth->fetchrow_hashref) {
+ push(@patches, $patch);
+ }
+ }
+ $vars->{'patches'} = \ patches;
+
+ my @assignedbugs;
+ $sth = $dbh->prepare(
+ "SELECT bugs.bug_id, products.name AS product, bugs.bug_status,
+ bugs.resolution, bugs.bug_severity, bugs.short_desc
+ FROM bugs
+ $sec_join
+ INNER JOIN products
+ ON bugs.product_id = products.id
+ WHERE assigned_to = ?
+ AND bug_status IN ('UNCONFIRMED','NEW','ASSIGNED','REOPENED')
+ $sec_where
+ ORDER BY bug_id DESC");
+
+ $sth->execute($r_userid);
+ while (my $bug = $sth->fetchrow_hashref) {
+ push(@assignedbugs, $bug);
+ }
+ $vars->{'assignedbugs'} = \ assignedbugs;
+
+ my @needinfoassignedbugs;
+ $sth = $dbh->prepare(
+ "SELECT bugs.bug_id, products.name AS product, bugs.bug_status,
+ bugs.resolution, bugs.bug_severity, bugs.short_desc
+ FROM bugs
+ $sec_join
+ INNER JOIN products
+ ON bugs.product_id = products.id
+ WHERE assigned_to = ?
+ AND bug_status IN ('NEEDINFO')
+ $sec_where
+ ORDER BY bug_id DESC");
+
+ $sth->execute($r_userid);
+ while (my $bug = $sth->fetchrow_hashref) {
+ push(@needinfoassignedbugs, $bug);
+ }
+ $vars->{'needinfoassignedbugs'} = \ needinfoassignedbugs;
+
+ my @needinforeporterbugs;
+ $sth = $dbh->prepare(
+ "SELECT bugs.bug_id, products.name AS product, bugs.bug_status,
+ bugs.resolution, bugs.bug_severity, bugs.short_desc
+ FROM bugs
+ $sec_join
+ INNER JOIN products
+ ON bugs.product_id = products.id
+ WHERE reporter=?
+ AND bug_status IN ('NEEDINFO')
+ $sec_where
+ ORDER BY bug_id DESC");
+
+ $sth->execute($r_userid);
+ while (my $bug = $sth->fetchrow_hashref) {
+ push(@needinforeporterbugs, $bug);
+ }
+ $vars->{'needinforeporterbugs'} = \ needinforeporterbugs;
+
+ my @newbugs;
+ $sth = $dbh->prepare(
+ "SELECT bugs.bug_id, products.name AS product, bugs.bug_status,
+ bugs.resolution, bugs.bug_severity, bugs.short_desc
+ FROM bugs
+ $sec_join
+ INNER JOIN products
+ ON bugs.product_id = products.id
+ WHERE reporter = ?
+ AND bug_status IN ('UNCONFIRMED','NEW','REOPENED')
+ $sec_where
+ ORDER BY bug_id DESC");
+
+ $sth->execute($r_userid);
+ while (my $bug = $sth->fetchrow_hashref) {
+ push(@newbugs, $bug);
+ }
+ $vars->{'newbugs'} = \ newbugs;
+
+ my @inprogressbugs;
+ $sth = $dbh->prepare(
+ "SELECT bugs.bug_id, products.name AS product, bugs.bug_status, bugs.resolution,
bugs.bug_severity, bugs.short_desc
+ FROM bugs
+ $sec_join
+ INNER JOIN products
+ ON bugs.product_id = products.id
+ WHERE reporter=?
+ AND bug_status = 'ASSIGNED'
+ $sec_where
+ ORDER BY bug_id DESC");
+
+ $sth->execute($r_userid);
+ while (my $bug = $sth->fetchrow_hashref) {
+ push(@inprogressbugs, $bug);
+ }
+ $vars->{'inprogressbugs'} = \ inprogressbugs;
+
+ my @recentlyclosed;
+ $sth = $dbh->prepare("
+ SELECT bugs.bug_id, products.name AS product, bugs.bug_status,
+ bugs.resolution, bugs.bug_severity, bugs.short_desc
+ FROM bugs
+ $sec_join
+ INNER JOIN products
+ ON bugs.product_id = products.id
+ INNER JOIN bugs_activity
+ ON bugs.bug_id = bugs_activity.bug_id
+ WHERE bugs.reporter = ?
+ AND bugs_activity.added='RESOLVED'
+ AND (bugs.bug_status='RESOLVED' OR bugs.bug_status = 'VERIFIED'
+ OR bugs.bug_status='CLOSED')
+ AND bugs_activity.bug_when >= " . $dbh->sql_date_math('LOCALTIMESTAMP(0)', '-', 7, 'DAY')
+ . $sec_where);
+
+ $sth->execute($r_userid);
+ while (my $bug = $sth->fetchrow_hashref) {
+ push(@recentlyclosed, $bug);
+ }
+ $vars->{'recentlyclosed'} = \ recentlyclosed;
+
+ if ($user->in_group('editbugs') && $r_user->login =~ ' * gnome\ bugs$') {
+ my $watcher_ids = $dbh->selectcol_arrayref(
+ "SELECT watcher FROM watch WHERE watched = ?",
+ undef, $r_userid);
+
+ my @watchers;
+ foreach my $watcher_id (@$watcher_ids) {
+ my $watcher = new Bugzilla::User($watcher_id);
+ push (@watchers, Bugzilla::User::identity($watcher));
+ }
+
+ @watchers = sort { lc($a) cmp lc($b) } @watchers;
+ $vars->{'watchers'} = \ watchers;
+ }
+
+ # XXX: this is just a temporary measure until points get back in a table, it
+ # can be done here at not cost as numbers are already collected.
+ my $points = log(1 + $comments) / log(10) +
+ log(1 + $bugs_closed) / log(2) +
+ log(1 + $bugs_reported) / log(2);
+ $vars->{'points'} = int($points + 0.5);
+}
+
+sub developed_products {
+ my $self = shift;
+
+ return [] unless $self->id;
+
+ # Get the list of products
+ my $groups = $self->{groups};
+ my $group_membership;
+ foreach my $group (@$groups) {
+ push (@$group_membership,
+ substr($group->name, 0, index($group->name, '_developers')))
+ if $group->name =~ /_developers$/;
+ }
+
+ # return it
+ return $group_membership;
+}
+
+1;
diff --git a/template/en/default/global/user.html.tmpl b/template/en/default/global/user.html.tmpl
new file mode 100644
index 0000000..d27c735
--- /dev/null
+++ b/template/en/default/global/user.html.tmpl
@@ -0,0 +1,44 @@
+[%# 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 Daniel Brooks.
+ # Portions created by the Initial Developer are Copyright (C) 2007
+ # the Initial Developer. All Rights Reserved.
+ #
+ # Contributor(s):
+ # Daniel Brooks <db48x db48x net>
+ # Max Kanat-Alexander <mkanat bugzilla org>
+ #
+ # Modification for the describe-user extension:
+ # - replace mailto: link by link to the describeuser page
+ #%]
+
+[%# INTERFACE:
+ # who: A Bugzilla::User object that we are going to represent.
+ #%]
+
+<span class="vcard">
+ [% FILTER collapse %]
+ [% IF user.id %]
+ <a href="page.cgi?id=describeuser.html&login=[% who.email FILTER uri %]"
+ title="[% who.identity FILTER html %]">
+ [%- END -%]
+ [% IF who.name %]
+ <span class="fn">[% who.name FILTER html %]</span>
+ [% ELSE %]
+ [% who.login FILTER email FILTER html %]
+ [% END %]
+ [% '</a>' IF user.id %]
+ [% END %]
+</span>
+
+[% Hook.process("end", "global/user.html.tmpl") %]
diff --git a/template/en/default/pages/describeuser.html.tmpl
b/template/en/default/pages/describeuser.html.tmpl
new file mode 100644
index 0000000..d94da0c
--- /dev/null
+++ b/template/en/default/pages/describeuser.html.tmpl
@@ -0,0 +1,377 @@
+[%# 1 0 bugzilla org %]
+[%# 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): Gervase Markham <gerv gerv net>
+ #%]
+
+[%# INTERFACE:
+ # displayname: displayname for user
+ # to_be_conjugation: "is" or "are"
+ # comments: Number of comments user has added to bugs
+ # bugs_closed: Number of comments user has added to bugs
+ # bugs_reported: Number of comments user has added to bugs
+ # developed_products: products the user is a developer for
+ #
+ # userinfo: info about the user; contains
+ # id: bugzilla userid
+ # email: email address
+ # points: points the user has acquired
+ # products_interests: products the user is interested in
+ #
+ # patches: list of patches; each patch has
+ # status: review status of the patch (e.g. 'needs-work')
+ # attach_id: attachment id, for attachment.cgi
+ # bug_id: bug where patch is filed against
+ # product: name of product in which the bug is filed against
+ # description: patch description
+ #
+ # assignedbugs:
+ # needinfoassignedbugs:
+ # needinforeporterbugs:
+ # newbugs:
+ # inprogressbugs:
+ # recentlyclosed:
+ # <All provide lists of bugs, with the fields>
+ # bug_id: bug id
+ # product: product the bug is filed against
+ # bug_status: status of the bug
+ # resolution: resolution of the bug
+ # bug_severity: severity of the bug
+ # short_desc: summary (short description) of the bug
+ %]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[%### Setting up the "Bugzilla User Info for <user>" header ###%]
+ [% linked_name = BLOCK %]
+ [% IF userinfo.id == user.id %]
+ [% showuser = '' %]
+ [% ELSE %]
+ [% showuser = displayname %]
+ [% END %]
+
+ [% IF showuser != '' %]
+ for
+ [% IF user.in_group('editusers') || user.can_bless %]
+ <a href="editusers.cgi?action=edit&userid=[% userinfo.id
+ FILTER uri %]">
+ [% END %]
+ [% showuser FILTER html %]
+ [% IF user.in_group('editusers') %]
+ </a>
+ [% END %]
+ [% END %]
+ [% END %]
+
+ [% name_title = BLOCK %]
+ [% linked_name FILTER remove('<[^>]*>') %]
+ [% END %]
+
+[%### Actually handling the header ###%]
+ [% PROCESS global/header.html.tmpl
+ title = "$terms.Bugzilla User Info$name_title"
+ header = "User Info$linked_name"
+ style = "
+ table.figures td { padding-top: 0px; padding-bottom: 0px }
+ table.figures td { margin-top: 0px; margin-bottom: 0px }
+ table.figures tr { margin-top: 0px; margin-bottom: 0px }
+ .blocker { margin-top: 1em; }
+ #body { padding-right: 0px; }
+ h3 { padding-top: 1em; }
+ h3 span { background-color: #babdb6; }
+ ul { padding-left: 1em; padding-top: 0px; padding-bottom: 0px; margin-top: 0px;
+ margin-bottom: 0px; }
+ "
+ %]
+
+[%### The info in the right hand side bar ###%]
+ <div style="position: relative; float: right; -moz-border-radius-topleft: 20px;
+ -webkit-border-top-left-radius: 20px; -webkit-border-bottom-left-radius: 20px;
+ -moz-border-radius-bottomleft: 20px; padding-right: 1em;
+ margin-right: 0px; margin-left: 1ex; background-color: #ffeafd;
+ padding-left: 1em; padding-bottom: 1em; width: 15em;">
+
+ <h3>Basic stats</h3>
+ [% displayname FILTER html %]
+ <ul>
+ <li> added [% comments FILTER html %] comments to [% terms.bugs %].</li>
+ <li> closed [% bugs_closed FILTER html %] [%+ terms.bugs %].</li>
+ <li> reported [% bugs_reported FILTER html %] [%+ terms.bugs %].</li>
+ <li> gathered [% points FILTER html %] points.</li>
+ </ul>
+
+ [% IF developed_products.size > 0 %]
+ <h3>Developer of</h3>
+
+ <ul>
+ [% FOREACH product = developed_products %]
+ <li><a href="browse.cgi?product=[% product.name FILTER uri %]">[% product
+ FILTER html %]</a></li>
+ [% END %]
+ </ul>
+ [% END %]
+
+ [% IF userinfo.product_interests.size > 0 %]
+ <h3>Interested products</h3>
+
+ <ul>
+ [% FOREACH product = userinfo.product_interests %]
+ <li><a href="browse.cgi?product=[% product.name FILTER uri %]">[% product.name
+ FILTER html %]</a></li>
+ [% END %]
+ </ul>
+ [% END %]
+
+ [% IF watchers && watchers.size > 0 %]
+ <h3>Watchers</h3>
+
+ <ul>
+ [% FOREACH watcher = watchers %]
+ <li>[% watcher FILTER html %]</li>
+ [% END %]
+ </ul>
+ [% END %]
+
+ <h3>Reports</h3>
+ <ul>
+ <li><a href="[% "buglist.cgi?bug_status=RESOLVED,VERIFIED,CLOSED" _
+ "&emailreporter1=1&emailtype1=exact&email1=" %]
+ [% userinfo.email FILTER uri %]">All closed [% terms.bugs %]</a></li>
+ <li><a href="[% "buglist.cgi?emailcc1=1&emailtype1=exact&email1=" %]
+ [% userinfo.email FILTER uri %]">All [% terms.bugs %] cc'ed</a></li>
+ <li><a href="[% "buglist.cgi?emaillongdesc1=1&emailtype1=exact&" _
+ "email1=" %]
+ [% userinfo.email FILTER uri %]">All [% terms.bugs %] commented</a></li>
+ </ul>
+
+ </div>
+
+[%### Bugs ###%]
+ <p>
+ <h3><span>Open Issues:
+ <a href="
+ [% "buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW" %]
+ [% "&bug_status=REOPENED&bug_status=ASSIGNED" %]
+ [% "&emailassigned_to1=1&emailtype1=exact&email1=" %]
+ [% userinfo.email FILTER uri %]">
+ <b>Assigned to [% displayname FILTER html %]</b></a>
+ [% "(the issue has been assigned to" %]
+ [%+ displayname FILTER html %]
+ [%+ "and it is not resolved or closed yet)" %]
+ </span></h3>
+ <table border="0" cellpadding="2" cellspacing="0">
+ [% FOREACH bug = assignedbugs %]
+ <tr class="[%+ IF loop.count() % 2 == 0 %]
+ [% "bz_row_even" %]
+ [% ELSE %]
+ [% "bz_row_odd" %]
+ [% END %]">
+ <td nowrap="nowrap" style="width: 6ex" align="center">
+ [% %]<a href="[% "show_bug.cgi?id=" %]
+ [% bug.bug_id FILTER uri%]">
+ [% bug.bug_id FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 12ex">
+ [% %]<a href="[% "browse.cgi?product=" %]
+ [% bug.product FILTER uri %]">
+ [% bug.product FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 4ex" align="center">
+ [% bug.bug_status.truncate(4) FILTER html %]</td>
+ <td nowrap="nowrap" style="width: 3ex" align="center">
+ [% bug.bug_severity.truncate(3) FILTER html %]</td>
+ <td><a href="[% "show_bug.cgi?id=" %]
+ [% bug.bug_id FILTER uri%]">
+ [% bug.short_desc FILTER html %]</a></td>
+ </tr>
+ [% END %]
+ </table>
+ </p>
+
+ <p>
+ <h3><span>Open Issues:
+ <a href="
+ [% "buglist.cgi?bug_status=NEEDINFO&emailreporter1=1&emailtype1=" %]
+ [% "exact&email1=" %] [% userinfo.email FILTER uri %]">
+ <b>Needinfo</b></a>
+ ([% displayname FILTER html %]
+ [%+ "reported this issue, it requires more information and you should " %]
+ [% "provide it) " %]
+ </span></h3>
+ <table border="0" cellpadding="3" cellspacing="1">
+ [% FOREACH bug = needinforeporterbugs %]
+ <tr class="[%+ IF loop.count() % 2 == 0 %]
+ [% "bz_row_even" %]
+ [% ELSE %]
+ [% "bz_row_odd" %]
+ [% END %]">
+ <td nowrap="nowrap" style="width: 6ex" align="center">
+ [% %]<a href="show_bug.cgi?id=[% bug.bug_id FILTER uri %]">
+ [% bug.bug_id FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 12ex">
+ [% %]<a href="browse.cgi?product=[% bug.product FILTER uri %]">
+ [% bug.product FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 4ex" align="center">
+ [% bug.bug_status.truncate(4) FILTER html %]</td>
+ <td nowrap="nowrap" style="width: 3ex" align="center">
+ [% bug.bug_severity.truncate(3) FILTER html %]</td>
+ <td><a href="show_bug.cgi?id=[% bug.bug_id FILTER uri%]">
+ [% bug.short_desc FILTER html %]</a></td>
+ </tr>
+ [% END %]
+ </table>
+ </p>
+
+ <p>
+ <h3><span>Open Issues:
+ <a href="
+ [% "buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&" %]
+ [% "bug_status=REOPENED&emailreporter1=1&emailtype1=exact" %]
+ [% "&email1=" %] [% userinfo.email FILTER uri %]">
+ <b>New</b></a>
+ ([% displayname FILTER html %]
+ [%+ "reported it but nobody has accepted it yet)" %]
+ </span></h3>
+ <table border="0" cellpadding="3" cellspacing="0">
+ [% FOREACH bug = newbugs %]
+ <tr class="[%+ IF loop.count() % 2 == 0 %]
+ [% "bz_row_even" %]
+ [% ELSE %]
+ [% "bz_row_odd" %]
+ [% END %]">
+ <td nowrap="nowrap" style="width: 6ex" align="center">
+ [% %]<a href="show_bug.cgi?id=[% bug.bug_id FILTER uri %]">
+ [% bug.bug_id FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 12ex" >
+ [% %]<a href="browse.cgi?product=[% bug.product FILTER uri %]">
+ [% bug.product FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 4ex" align="center">
+ [% bug.bug_status.truncate(4) FILTER html %]</td>
+ <td nowrap="nowrap" style="width: 3ex" align="center">
+ [% bug.bug_severity.truncate(3) FILTER html %]</td>
+ <td>
+ [% %]<a href="show_bug.cgi?id=[% bug.bug_id FILTER uri%]">
+ [% bug.short_desc FILTER html %]</a></td>
+ </tr>
+ [% END %]
+ </table>
+ </p>
+
+ <p>
+ <h3><span>Open Issues:
+ <a href="
+ [% "buglist.cgi?bug_status=ASSIGNED&emailreporter1=1&" %]
+ [% "emailtype1=exact&email1=" %]
+ [% userinfo.email FILTER uri %]">
+ <b>In progress</b></a>
+ ([% displayname FILTER html %]
+ [%+ "reported it, the developer accepted the issue and is hopefully " %]
+ [% "working on it)" %]
+ </span></h3>
+ <table border="0" cellpadding="3" cellspacing="0">
+ [% FOREACH bug = inprogressbugs %]
+ <tr class="[%+ IF loop.count() % 2 == 0 %]
+ [% "bz_row_even" %]
+ [% ELSE %]
+ [% "bz_row_odd" %]
+ [% END %]">
+ <td nowrap="nowrap" style="width: 6ex" align="center">
+ [% %]<a href="show_bug.cgi?id=[% bug.bug_id FILTER uri %]">
+ [% bug.bug_id FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 12ex">
+ [% %]<a href="browse.cgi?product=[% bug.product FILTER uri %]">
+ [% bug.product FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 4ex" align="center">
+ [% bug.bug_status.truncate(4) FILTER html %]</td>
+ <td nowrap="nowrap" style="width: 3ex" align="center">
+ [% bug.bug_severity.truncate(3) FILTER html %]</td>
+ <td>
+ [% %]<a href="show_bug.cgi?id=[% bug.bug_id FILTER uri%]">
+ [% bug.short_desc FILTER html %]</a></td>
+ </tr>
+ [% END %]
+ </table>
+ </p>
+
+ <p>
+ <h3><span>Closed Issues: <b>Recently closed</b></a> ([% displayname FILTER html %] reported it and the
issue was closed in the last 7 days)</span></h3>
+ <table border="0" cellpadding="3" cellspacing="0">
+ [% FOREACH bug = recentlyclosed %]
+ <tr class="[%+ IF loop.count() % 2 == 0 %]
+ [% "bz_row_even" %]
+ [% ELSE %]
+ [% "bz_row_odd" %]
+ [% END %]">
+ <td nowrap="nowrap" style="width: 6ex" align="center">
+ [% %]<a href="show_bug.cgi?id=[% bug.bug_id FILTER uri %]">
+ [% bug.bug_id FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 12ex">
+ [% %]<a href="browse.cgi?product=[% bug.product FILTER uri %]">
+ [% bug.product FILTER html %]</a></td>
+ <td nowrap="nowrap" style="width: 4ex" align="center">
+ [% bug.resolution.truncate(4) FILTER html %]</td>
+ <td nowrap="nowrap" style="width: 3ex" align="center">
+ [% bug.bug_severity.truncate(3) FILTER html %]</td>
+ <td>
+ [% %]<a href="show_bug.cgi?id=[% bug.bug_id FILTER uri%]">
+ [% bug.short_desc FILTER html %]</a></td>
+ </tr>
+ [% END %]
+ </table>
+ </p>
+
+[%### Patches ###%]
+ [% IF patches.size %]
+ [% status = '' %]
+ [% FOREACH patch = patches %]
+ [% IF patch.status != status %]
+ [% IF status != '' %]
+ [% "\n </table>\n </p>\n\n" %]
+ [% END %]
+ [% status = patch.status %]
+ [% " <p>\n" _
+ " <h3><span>Patches: " %]
+ [% status.replace('none','unreviewed') FILTER html %]
+ [% "</span></h3>\n" %]
+ [% " <table border=\"0\" cellpadding=\"2\" cellspacing=\"0\">" %]
+ [% END %]
+ <tr class="[%+ IF loop.count() % 2 == 0 %]
+ [% "bz_row_even" %]
+ [% ELSE %]
+ [% "bz_row_odd" %]
+ [% END %]">
+ <td><a href="[% "show_bug.cgi?id=" %]
+ [% patch.bug_id FILTER uri%]">
+ [% patch.bug_id FILTER html %]</a></td>
+ <td><a href="[% "attachment.cgi?id=" %]
+ [% patch.attach_id FILTER uri %]
+ [% "&action=diff" %]">(#
+ [% patch.attach_id FILTER html %])</a></td>
+ <td nowrap="nowrap" style="width: 12ex">
+ [% %]<a href="[% "browse.cgi?product=" %]
+ [% patch.product FILTER uri %]
+ [% "\">" %]
+ [% patch.product FILTER html %]</a></td>
+ <td><a href="[% "attachment.cgi?id=" %]
+ [% patch.attach_id FILTER uri %]
+ [% "&action=diff" %]">
+ [% patch.description FILTER html %]</a></td>
+ </tr>
+ [% END %]
+ [% " </table>\n </p>" %]
+ [% END %]
+
+[% PROCESS global/footer.html.tmpl %]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]