From 1a8d7747d93668b4189110712973515774de1c07 Mon Sep 17 00:00:00 2001 From: Dylan William Hardison Date: Sat, 31 May 2014 01:30:15 -0400 Subject: bug 849102 - mydashboard should lazy-load the 'last change' information r=glob --- extensions/MyDashboard/lib/WebService.pm | 87 +++++----- .../en/default/pages/mydashboard.html.tmpl | 5 +- extensions/MyDashboard/web/js/query.js | 180 ++++++++++++++------- 3 files changed, 171 insertions(+), 101 deletions(-) (limited to 'extensions/MyDashboard') diff --git a/extensions/MyDashboard/lib/WebService.pm b/extensions/MyDashboard/lib/WebService.pm index c98525429..87061eabe 100644 --- a/extensions/MyDashboard/lib/WebService.pm +++ b/extensions/MyDashboard/lib/WebService.pm @@ -23,6 +23,55 @@ use constant READ_ONLY => qw( run_flag_query ); +sub run_last_changes { + my ($self, $params) = @_; + + my $dbh = Bugzilla->dbh; + my $user = Bugzilla->login(LOGIN_REQUIRED); + + trick_taint($params->{changeddate_api}); + trick_taint($params->{bug_id}); + + my $last_comment_sql = " + SELECT comment_id + FROM longdescs + WHERE bug_id = ? AND bug_when > ?"; + if (!$user->is_insider) { + $last_comment_sql .= " AND isprivate = 0"; + } + $last_comment_sql .= " LIMIT 1"; + my $last_comment_sth = $dbh->prepare($last_comment_sql); + + my $last_changes = {}; + my $activity = $self->history({ ids => [ $params->{bug_id} ], + new_since => $params->{changeddate_api} }); + if (@{$activity->{bugs}[0]{history}}) { + my $change_set = $activity->{bugs}[0]{history}[0]; + $last_changes->{activity} = $change_set->{changes}; + foreach my $change (@{ $last_changes->{activity} }) { + $change->{field_desc} + = template_var('field_descs')->{$change->{field_name}} || $change->{field_name}; + } + $last_changes->{email} = $change_set->{who}; + my $datetime = datetime_from($change_set->{when}); + $datetime->set_time_zone($user->timezone); + $last_changes->{when} = $datetime->strftime('%Y-%m-%d %T %Z'); + } + my $last_comment_id = $dbh->selectrow_array( + $last_comment_sth, undef, $params->{bug_id}, $params->{changeddate_api}); + if ($last_comment_id) { + my $comments = $self->comments({ comment_ids => [ $last_comment_id ] }); + my $comment = $comments->{comments}{$last_comment_id}; + $last_changes->{comment} = $comment->{text}; + $last_changes->{email} = $comment->{creator} if !$last_changes->{email}; + my $datetime = datetime_from($comment->{creation_time}); + $datetime->set_time_zone($user->timezone); + $last_changes->{when} = $datetime->strftime('%Y-%m-%d %T %Z'); + } + + return { results => [ {last_changes => $last_changes } ] }; +} + sub run_bug_query { my($self, $params) = @_; my $dbh = Bugzilla->dbh; @@ -38,46 +87,8 @@ sub run_bug_query { next if $qdef->{name} ne $params->{query}; my ($bugs, $query_string) = query_bugs($qdef); - my $last_comment_sql = " - SELECT comment_id - FROM longdescs - WHERE bug_id = ? AND bug_when > ?"; - if (!$user->is_insider) { - $last_comment_sql .= " AND isprivate = 0"; - } - $last_comment_sql .= " LIMIT 1"; - my $last_comment_sth = $dbh->prepare($last_comment_sql); - # Add last changes to each bug foreach my $b (@$bugs) { - my $last_changes = {}; - my $activity = $self->history({ ids => [ $b->{bug_id} ], - new_since => $b->{changeddate_api} }); - if (@{$activity->{bugs}[0]{history}}) { - my $change_set = $activity->{bugs}[0]{history}[0]; - $last_changes->{activity} = $change_set->{changes}; - foreach my $change (@{ $last_changes->{activity} }) { - $change->{field_desc} - = template_var('field_descs')->{$change->{field_name}} || $change->{field_name}; - } - $last_changes->{email} = $change_set->{who}; - my $datetime = datetime_from($change_set->{when}); - $datetime->set_time_zone($user->timezone); - $last_changes->{when} = $datetime->strftime('%Y-%m-%d %T %Z'); - } - my $last_comment_id = $dbh->selectrow_array( - $last_comment_sth, undef, $b->{bug_id}, $b->{changeddate_api}); - if ($last_comment_id) { - my $comments = $self->comments({ comment_ids => [ $last_comment_id ] }); - my $comment = $comments->{comments}{$last_comment_id}; - $last_changes->{comment} = $comment->{text}; - $last_changes->{email} = $comment->{creator} if !$last_changes->{email}; - my $datetime = datetime_from($comment->{creation_time}); - $datetime->set_time_zone($user->timezone); - $last_changes->{when} = $datetime->strftime('%Y-%m-%d %T %Z'); - } - $b->{last_changes} = $last_changes; - # Set the data type properly for webservice clients # for non-string values. $b->{bug_id} = $self->type('int', $b->{bug_id}); diff --git a/extensions/MyDashboard/template/en/default/pages/mydashboard.html.tmpl b/extensions/MyDashboard/template/en/default/pages/mydashboard.html.tmpl index 3f5f45f1d..023de290c 100644 --- a/extensions/MyDashboard/template/en/default/pages/mydashboard.html.tmpl +++ b/extensions/MyDashboard/template/en/default/pages/mydashboard.html.tmpl @@ -25,8 +25,11 @@ [% saved_queries.push(q) IF q.saved %] [% END %] +