204 lines
4.4 KiB
Perl
204 lines
4.4 KiB
Perl
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
|
# defined by the Mozilla Public License, v. 2.0.
|
|
|
|
package Bugzilla::WebService::BugUserLastVisit;
|
|
|
|
use 5.10.1;
|
|
use strict;
|
|
use warnings;
|
|
|
|
use parent qw(Bugzilla::WebService);
|
|
|
|
use Bugzilla::Bug;
|
|
use Bugzilla::Error;
|
|
use Bugzilla::WebService::Util qw( validate filter );
|
|
use Bugzilla::Constants;
|
|
|
|
use constant PUBLIC_METHODS => qw(
|
|
get
|
|
update
|
|
);
|
|
|
|
sub update {
|
|
my ($self, $params) = validate(@_, 'ids');
|
|
my $user = Bugzilla->user;
|
|
my $dbh = Bugzilla->dbh;
|
|
|
|
$user->login(LOGIN_REQUIRED);
|
|
|
|
my $ids = $params->{ids} // [];
|
|
ThrowCodeError('param_required', { param => 'ids' }) unless @$ids;
|
|
|
|
# Cache permissions for bugs. This highly reduces the number of calls to the
|
|
# DB. visible_bugs() is only able to handle bug IDs, so we have to skip
|
|
# aliases.
|
|
$user->visible_bugs([grep /^[0-9]+$/, @$ids]);
|
|
|
|
$dbh->bz_start_transaction();
|
|
my @results;
|
|
my $last_visit_ts = $dbh->selectrow_array('SELECT NOW()');
|
|
foreach my $bug_id (@$ids) {
|
|
my $bug = Bugzilla::Bug->check({ id => $bug_id, cache => 1 });
|
|
|
|
ThrowUserError('user_not_involved', { bug_id => $bug->id })
|
|
unless $user->is_involved_in_bug($bug);
|
|
|
|
$bug->update_user_last_visit($user, $last_visit_ts);
|
|
|
|
push(
|
|
@results,
|
|
$self->_bug_user_last_visit_to_hash(
|
|
$bug->id, $last_visit_ts, $params
|
|
));
|
|
}
|
|
$dbh->bz_commit_transaction();
|
|
|
|
return \@results;
|
|
}
|
|
|
|
sub get {
|
|
my ($self, $params) = validate(@_, 'ids');
|
|
my $user = Bugzilla->user;
|
|
my $ids = $params->{ids};
|
|
|
|
$user->login(LOGIN_REQUIRED);
|
|
|
|
my @last_visits;
|
|
if ($ids) {
|
|
# Cache permissions for bugs. This highly reduces the number of calls to
|
|
# the DB. visible_bugs() is only able to handle bug IDs, so we have to
|
|
# skip aliases.
|
|
$user->visible_bugs([grep /^[0-9]+$/, @$ids]);
|
|
|
|
my %last_visit = map { $_->bug_id => $_->last_visit_ts } @{ $user->last_visited($ids) };
|
|
@last_visits = map { $self->_bug_user_last_visit_to_hash($_->id, $last_visit{$_}, $params) } @$ids;
|
|
}
|
|
else {
|
|
@last_visits = map {
|
|
$self->_bug_user_last_visit_to_hash($_->bug_id, $_->last_visit_ts, $params)
|
|
} @{ $user->last_visited };
|
|
}
|
|
|
|
return \@last_visits;
|
|
}
|
|
|
|
sub _bug_user_last_visit_to_hash {
|
|
my ($self, $bug_id, $last_visit_ts, $params) = @_;
|
|
|
|
my %result = (id => $self->type('int', $bug_id),
|
|
last_visit_ts => $self->type('dateTime', $last_visit_ts));
|
|
|
|
return filter($params, \%result);
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
=head1 NAME
|
|
|
|
Bugzilla::WebService::BugUserLastVisit - Find and Store the last time a user
|
|
visited a bug.
|
|
|
|
=head1 METHODS
|
|
|
|
See L<Bugzilla::WebService> for a description of how parameters are passed,
|
|
and what B<STABLE>, B<UNSTABLE>, and B<EXPERIMENTAL> mean.
|
|
|
|
Although the data input and output is the same for JSONRPC, XMLRPC and REST,
|
|
the directions for how to access the data via REST is noted in each method
|
|
where applicable.
|
|
|
|
=head2 update
|
|
|
|
B<EXPERIMENTAL>
|
|
|
|
=over
|
|
|
|
=item B<Description>
|
|
|
|
Update the last visit time for the specified bug and current user.
|
|
|
|
=item B<REST>
|
|
|
|
To add a single bug id:
|
|
|
|
POST /rest/bug_user_last_visit/<bug-id>
|
|
|
|
Tp add one or more bug ids at once:
|
|
|
|
POST /rest/bug_user_last_visit
|
|
|
|
The returned data format is the same as below.
|
|
|
|
=item B<Params>
|
|
|
|
=over
|
|
|
|
=item C<ids> (array) - One or more bug ids to add.
|
|
|
|
=back
|
|
|
|
=item B<Returns>
|
|
|
|
=over
|
|
|
|
=item C<array> - An array of hashes containing the following:
|
|
|
|
=over
|
|
|
|
=item C<id> - (int) The bug id.
|
|
|
|
=item C<last_visit_ts> - (string) The timestamp the user last visited the bug.
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=head2 get
|
|
|
|
B<EXPERIMENTAL>
|
|
|
|
=over
|
|
|
|
=item B<Description>
|
|
|
|
Get the last visited timestamp for one or more specified bug ids.
|
|
|
|
=item B<REST>
|
|
|
|
To return the last visited timestamp for a single bug id:
|
|
|
|
GET /rest/bug_user_last_visit/<bug-id>
|
|
|
|
=item B<Params>
|
|
|
|
=over
|
|
|
|
=item C<ids> (integer) - One or more optional bug ids to get.
|
|
|
|
=back
|
|
|
|
=item B<Returns>
|
|
|
|
=over
|
|
|
|
=item C<array> - An array of hashes containing the following:
|
|
|
|
=over
|
|
|
|
=item C<id> - (int) The bug id.
|
|
|
|
=item C<last_visit_ts> - (string) The timestamp the user last visited the bug.
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=back
|