From 67f7d865283a0463b829a2d1d46941c86e10f391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Buclin?= Date: Tue, 18 Apr 2017 23:04:40 +0200 Subject: Implement a UI in the buglist for the last visit time --- buglist.cgi | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'buglist.cgi') diff --git a/buglist.cgi b/buglist.cgi index daee34c9b..6e5e3d94c 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -858,9 +858,44 @@ if (@bugidlist) { while (my ($bug_id, $min_membercontrol) = $sth->fetchrow_array()) { $min_membercontrol{$bug_id} = $min_membercontrol || CONTROLMAPNA; } + + my $involved_bugs = {}; + my $involved_new_bugs = {}; + + if ($user->id) { + $involved_bugs = + $dbh->selectall_hashref('SELECT bugs.bug_id, CASE WHEN last_visit_ts < delta_ts THEN 1 ELSE 0 END AS updated + FROM bugs + INNER JOIN bug_user_last_visit + ON bugs.bug_id = bug_user_last_visit.bug_id + WHERE user_id = ? + AND ' . $dbh->sql_in('bugs.bug_id', \@bugidlist), + 'bug_id', undef, $user->id); + + my ($new_bugs) = diff_arrays(\@bugidlist, [keys %$involved_bugs]); + if (@$new_bugs) { + my $involved_new_bugs_list = + $dbh->selectcol_arrayref('SELECT bugs.bug_id + FROM bugs + LEFT JOIN cc + ON cc.bug_id = bugs.bug_id + WHERE (reporter = ? OR assigned_to = ? OR qa_contact = ? OR who = ?) + AND ' . $dbh->sql_in('bugs.bug_id', $new_bugs), + undef, ($user->id) x 4); + %$involved_new_bugs = map { $_ => 1 } @$involved_new_bugs_list; + } + } + foreach my $bug (@bugs) { - next unless defined($min_membercontrol{$bug->{'bug_id'}}); - if ($min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPMANDATORY) { + my $bug_id = $bug->{bug_id}; + if (my $involved_bug = $involved_bugs->{$bug_id}) { + $bug->{last_visit_status} = $involved_bug->{updated} ? 'updated' : 'up_to_date'; + } + elsif ($user->id) { + $bug->{last_visit_status} = $involved_new_bugs->{$bug_id} ? 'new' : 'unknown'; + } + next unless defined $min_membercontrol{$bug_id}; + if ($min_membercontrol{$bug_id} == CONTROLMAPMANDATORY) { $bug->{'secure_mode'} = 'implied'; } else { -- cgit v1.2.1