summaryrefslogtreecommitdiffstats
path: root/extensions/MyDashboard/lib/WebService.pm
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/MyDashboard/lib/WebService.pm')
-rw-r--r--extensions/MyDashboard/lib/WebService.pm87
1 files changed, 49 insertions, 38 deletions
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});