98 lines
2.8 KiB
Perl
Executable File
98 lines
2.8 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
# The contents of this file are subject to the Mozilla Public
|
|
# License Version 1.1 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# The Original Code is the Bugzilla Bug Tracking System.
|
|
#
|
|
# The Initial Developer of the Original Code is Netscape Communications
|
|
# Corporation. Portions created by Netscape are
|
|
# Copyright (C) 1998 Netscape Communications Corporation. All
|
|
# Rights Reserved.
|
|
#
|
|
# Contributor(s): Terry Weissman <terry@mozilla.org>
|
|
# Joseph Heenan <joseph@heenan.me.uk>
|
|
# Frédéric Buclin <LpSolit@gmail.com>
|
|
|
|
|
|
# This is a script suitable for running once a day from a cron job. It
|
|
# looks at all the bugs, and sends whiny mail to anyone who has a bug
|
|
# assigned to them that has unassigned, but open status that has not been
|
|
# touched for more than the number of days specified in the whinedays param.
|
|
|
|
use strict;
|
|
use lib qw(. lib);
|
|
|
|
use Bugzilla;
|
|
use Bugzilla::Mailer;
|
|
use Bugzilla::Util;
|
|
use Bugzilla::User;
|
|
|
|
# Whining is disabled if whinedays is zero
|
|
exit unless Bugzilla->params->{whinedays} >= 1;
|
|
|
|
my $dbh = Bugzilla->dbh;
|
|
my $query = "SELECT b.bug_id, b.short_desc, p.login_name FROM bugs b".
|
|
" INNER JOIN bug_status bs ON bs.id=b.bug_status".
|
|
" INNER JOIN profiles p ON p.userid = b.assigned_to".
|
|
" WHERE bs.is_open AND NOT bs.is_assigned".
|
|
" AND disable_mail = 0 AND " . $dbh->sql_to_days('NOW()') . " - " .
|
|
$dbh->sql_to_days('delta_ts') . " > " . Bugzilla->params->{whinedays} .
|
|
" ORDER BY bug_id";
|
|
|
|
my %bugs;
|
|
my %desc;
|
|
|
|
my $slt_bugs = $dbh->selectall_arrayref($query);
|
|
|
|
foreach my $bug (@$slt_bugs)
|
|
{
|
|
my ($id, $desc, $email) = @$bug;
|
|
if (!defined $bugs{$email})
|
|
{
|
|
$bugs{$email} = [];
|
|
}
|
|
if (!defined $desc{$email})
|
|
{
|
|
$desc{$email} = [];
|
|
}
|
|
push @{$bugs{$email}}, $id;
|
|
push @{$desc{$email}}, $desc;
|
|
}
|
|
|
|
foreach my $email (sort keys %bugs)
|
|
{
|
|
my $user = new Bugzilla::User({ name => $email });
|
|
next if $user->email_disabled;
|
|
|
|
my $vars = {email => $email};
|
|
|
|
my @bugs = ();
|
|
foreach my $i (@{$bugs{$email}})
|
|
{
|
|
my $bug = {};
|
|
$bug->{summary} = shift(@{$desc{$email}});
|
|
$bug->{id} = $i;
|
|
push @bugs, $bug;
|
|
}
|
|
$vars->{bugs} = \@bugs;
|
|
|
|
my $msg;
|
|
my $template = Bugzilla->template_inner($user->settings->{lang}->{value});
|
|
$template->process("email/whine.txt.tmpl", $vars, \$msg)
|
|
|| die($template->error);
|
|
|
|
Bugzilla->template_inner("");
|
|
MessageToMTA($msg);
|
|
|
|
print "$email " . join(" ", @{$bugs{$email}}) . "\n";
|
|
}
|
|
|
|
exit;
|