summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'extensions')
-rw-r--r--extensions/MyDashboard/lib/Queries.pm46
-rw-r--r--extensions/MyDashboard/web/js/flags.js23
-rw-r--r--extensions/MyDashboard/web/js/query.js24
3 files changed, 59 insertions, 34 deletions
diff --git a/extensions/MyDashboard/lib/Queries.pm b/extensions/MyDashboard/lib/Queries.pm
index 984002461..2b9d11737 100644
--- a/extensions/MyDashboard/lib/Queries.pm
+++ b/extensions/MyDashboard/lib/Queries.pm
@@ -13,12 +13,12 @@ use Bugzilla;
use Bugzilla::Bug;
use Bugzilla::CGI;
use Bugzilla::Search;
-use Bugzilla::Util qw(format_time);
+use Bugzilla::Util qw(format_time datetime_from);
use Bugzilla::Extension::MyDashboard::Util qw(open_states quoted_open_states);
use Bugzilla::Extension::MyDashboard::TimeAgo qw(time_ago);
-use Data::Dumper;
+use DateTime;
use base qw(Exporter);
our @EXPORT = qw(
@@ -129,8 +129,9 @@ sub QUERY_DEFS {
}
sub query_bugs {
- my $qdef = shift;
- my $dbh = Bugzilla->dbh;
+ my $qdef = shift;
+ my $dbh = Bugzilla->dbh;
+ my $date_now = DateTime->now;
## HACK to remove POST
delete $ENV{REQUEST_METHOD};
@@ -140,7 +141,6 @@ sub query_bugs {
my $search = new Bugzilla::Search( fields => [ SELECT_COLUMNS ],
params => scalar $params->Vars,
order => [ QUERY_ORDER ]);
-
my $data = $search->data;
my @bugs;
@@ -150,8 +150,8 @@ sub query_bugs {
$bug->{$column} = shift @$row;
if ($column eq 'changeddate') {
$bug->{$column} = format_time($bug->{$column}, '%Y-%m-%d %H:%M');
- # my $date_then = datetime_from($bug->{$column});
- # $bug->{'updated'} = time_ago($date_then, $date_now);
+ my $date_then = datetime_from($bug->{$column});
+ $bug->{'changeddate_fancy'} = time_ago($date_then, $date_now);
}
}
push(@bugs, $bug);
@@ -161,9 +161,10 @@ sub query_bugs {
}
sub query_flags {
- my $type = shift;
- my $user = Bugzilla->user;
- my $dbh = Bugzilla->dbh;
+ my $type = shift;
+ my $user = Bugzilla->user;
+ my $dbh = Bugzilla->dbh;
+ my $date_now = DateTime->now;
($type ne 'requestee' || $type ne 'requester')
|| ThrowCodeError('param_required', { param => 'type' });
@@ -222,21 +223,28 @@ sub query_flags {
# Order the records (within each group).
my $group_order_by = " GROUP BY flags.bug_id ORDER BY flags.creation_date, flagtypes.name";
+ my $flags = [];
if ($type eq 'requestee') {
- return $dbh->selectall_arrayref($query .
- " AND requestees.login_name = ? " .
- $group_order_by,
- { Slice => {} }, $user->login);
+ $flags = $dbh->selectall_arrayref($query .
+ " AND requestees.login_name = ? " .
+ $group_order_by,
+ { Slice => {} }, $user->login);
}
if ($type eq 'requester') {
- return $dbh->selectall_arrayref($query .
- " AND requesters.login_name = ? " .
- $group_order_by,
- { Slice => {} }, $user->login);
+ $flags = $dbh->selectall_arrayref($query .
+ " AND requesters.login_name = ? " .
+ $group_order_by,
+ { Slice => {} }, $user->login);
+ }
+
+ # Add the fancy date
+ foreach my $flag (@$flags) {
+ my $date_then = datetime_from($flag->{'created'});
+ $flag->{'created_fancy'} = time_ago($date_then, $date_now);
}
- return undef;
+ return $flags;
}
1;
diff --git a/extensions/MyDashboard/web/js/flags.js b/extensions/MyDashboard/web/js/flags.js
index e212466e8..6820ec289 100644
--- a/extensions/MyDashboard/web/js/flags.js
+++ b/extensions/MyDashboard/web/js/flags.js
@@ -71,14 +71,21 @@ YUI({
Y.Escape.html(o.data.bug_summary) + '">' + o.value + '</a>';
};
+ var createdFormatter = function (o) {
+ return '<span title="' + Y.Escape.html(o.value) + '">' +
+ Y.Escape.html(o.data.created_fancy) + '</span>';
+ };
+
// Requestee
dataSource.requestee = new Y.DataSource.IO({ source: 'jsonrpc.cgi' });
dataTable.requestee = new Y.DataTable({
columns: [
{ key: "requester", label: "Requester", sortable: true },
{ key: "type", label: "Flag", sortable: true },
- { key: "bug_id", label: "Bug", sortable: true, formatter: bugLinkFormatter, allowHTML: true },
- { key: "created", label: "Created", sortable: true }
+ { key: "bug_id", label: "Bug", sortable: true,
+ formatter: bugLinkFormatter, allowHTML: true },
+ { key: "created", label: "Created", sortable: true,
+ formatter: createdFormatter, allowHTML: true }
],
strings: {
emptyMessage: 'No flag data found.',
@@ -95,7 +102,8 @@ YUI({
dataSource.requestee.plug(Y.Plugin.DataSourceJSONSchema, {
schema: {
resultListLocator: "result.result.requestee",
- resultFields: ["requester", "type", "bug_id", "bug_status", "bug_summary", "created"]
+ resultFields: ["requester", "type", "bug_id", "bug_status",
+ "bug_summary", "created", "created_fancy"]
}
});
@@ -111,8 +119,10 @@ YUI({
columns: [
{ key:"requestee", label:"Requestee", sortable:true },
{ key:"type", label:"Flag", sortable:true },
- { key:"bug_id", label:"Bug", sortable:true, formatter: bugLinkFormatter, allowHTML: true },
- { key:"created", label:"Created", sortable:true }
+ { key:"bug_id", label:"Bug", sortable:true,
+ formatter: bugLinkFormatter, allowHTML: true },
+ { key: "created", label: "Created", sortable: true,
+ formatter: createdFormatter, allowHTML: true }
],
strings: {
emptyMessage: 'No flag data found.',
@@ -129,7 +139,8 @@ YUI({
dataSource.requester.plug(Y.Plugin.DataSourceJSONSchema, {
schema: {
resultListLocator: "result.result.requester",
- resultFields: ["requestee", "type", "bug_id", "bug_status", "bug_summary", "created"]
+ resultFields: ["requestee", "type", "bug_id", "bug_status",
+ "bug_summary", "created", "created_fancy"]
}
});
diff --git a/extensions/MyDashboard/web/js/query.js b/extensions/MyDashboard/web/js/query.js
index 865d255a6..2ce438509 100644
--- a/extensions/MyDashboard/web/js/query.js
+++ b/extensions/MyDashboard/web/js/query.js
@@ -19,7 +19,7 @@ YUI({
}
}).use("node", "datatable", "datatable-sort", "datatable-message", "json-stringify",
"datatable-datasource", "datasource-io", "datasource-jsonschema", "cookie",
- "gallery-datatable-row-expansion-bmo", "handlebars", function (Y) {
+ "gallery-datatable-row-expansion-bmo", "handlebars", "escape", function (Y) {
var counter = 0,
dataSource = null,
dataTable = null,
@@ -86,13 +86,18 @@ YUI({
});
};
+ var updatedFormatter = function (o) {
+ return '<span title="' + Y.Escape.html(o.value) + '">' +
+ Y.Escape.html(o.data.changeddate_fancy) + '</span>';
+ };
+
dataSource = new Y.DataSource.IO({ source: 'jsonrpc.cgi' });
dataSource.plug(Y.Plugin.DataSourceJSONSchema, {
schema: {
resultListLocator: "result.result.bugs",
- resultFields: ["bug_id", "changeddate", "bug_status",
- "short_desc", "last_changes"],
+ resultFields: ["bug_id", "changeddate", "changeddate_fancy",
+ "bug_status", "short_desc", "last_changes"],
metaFields: {
description: "result.result.description",
heading: "result.result.heading",
@@ -103,13 +108,14 @@ YUI({
dataTable = new Y.DataTable({
columns: [
- { key: Y.Plugin.DataTableRowExpansion.column_key, label: ' ' },
- { key: "bug_id", label: "Bug", sortable: true,
- formatter: '<a href="show_bug.cgi?id={value}" target="_blank">{value}</a>', allowHTML: true },
- { key: "changeddate", label: "Updated", sortable: true },
- { key: "bug_status", label: "Status", sortable: true },
- { key: "short_desc", label: "Summary", sortable: true },
+ { key: Y.Plugin.DataTableRowExpansion.column_key, label: ' ', sortable: false },
+ { key: "bug_id", label: "Bug", allowHTML: true,
+ formatter: '<a href="show_bug.cgi?id={value}" target="_blank">{value}</a>' },
+ { key: "changeddate", label: "Updated", formatter: updatedFormatter, allowHTML: true },
+ { key: "bug_status", label: "Status" },
+ { key: "short_desc", label: "Summary" },
],
+ sortable: true
});
var last_changes_source = Y.one('#last-changes-template').getHTML(),