mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 06:43:32 +00:00
Bug 100953: Move data/nomail into the DB and implement a UI to edit it
Patch by A. Karl Kornel <karl@kornel.name> r=wurblzap a=justdave
This commit is contained in:
parent
985a51f2ea
commit
133dd4fc4f
@ -57,20 +57,6 @@ use constant REL_NAMES => {
|
||||
REL_VOTER , "Voter"
|
||||
};
|
||||
|
||||
sub _read_nomail {
|
||||
my $nomail = Bugzilla->request_cache->{bugmail_nomail};
|
||||
return $nomail if $nomail;
|
||||
if (open(NOMAIL, '<', bz_locations->{'datadir'} . "/nomail")) {
|
||||
while (<NOMAIL>) {
|
||||
$nomail->{trim($_)} = 1;
|
||||
}
|
||||
close(NOMAIL);
|
||||
}
|
||||
Bugzilla->request_cache->{bugmail_nomail} = $nomail;
|
||||
return $nomail;
|
||||
}
|
||||
|
||||
|
||||
sub FormatTriple {
|
||||
my ($a, $b, $c) = (@_);
|
||||
$^A = "";
|
||||
@ -465,8 +451,7 @@ sub ProcessOneBug {
|
||||
|
||||
# Make sure the user isn't in the nomail list, and the insider and
|
||||
# dep checks passed.
|
||||
my $nomail = _read_nomail();
|
||||
if ((!$nomail->{$user->login}) &&
|
||||
if ($user->email_enabled &&
|
||||
$insider_ok &&
|
||||
$dep_ok)
|
||||
{
|
||||
|
@ -614,6 +614,8 @@ use constant ABSTRACT_SCHEMA => {
|
||||
cryptpassword => {TYPE => 'varchar(128)'},
|
||||
realname => {TYPE => 'varchar(255)'},
|
||||
disabledtext => {TYPE => 'MEDIUMTEXT', NOTNULL => 1},
|
||||
disable_mail => {TYPE => 'BOOLEAN', NOTNULL => 1,
|
||||
DEFAULT => 'FALSE'},
|
||||
mybugslink => {TYPE => 'BOOLEAN', NOTNULL => 1,
|
||||
DEFAULT => 'TRUE'},
|
||||
refreshed_when => {TYPE => 'DATETIME', NOTNULL => 1},
|
||||
|
@ -122,6 +122,7 @@ sub _create {
|
||||
'showmybugslink' => 0,
|
||||
'disabledtext' => '',
|
||||
'flags' => {},
|
||||
'disable_mail' => 0,
|
||||
};
|
||||
bless ($self, $class);
|
||||
return $self unless $cond && $val;
|
||||
@ -131,9 +132,9 @@ sub _create {
|
||||
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
my ($id, $login, $name, $disabledtext, $mybugslink) =
|
||||
my ($id, $login, $name, $disabledtext, $mybugslink, $disable_mail) =
|
||||
$dbh->selectrow_array(qq{SELECT userid, login_name, realname,
|
||||
disabledtext, mybugslink
|
||||
disabledtext, mybugslink, disable_mail
|
||||
FROM profiles WHERE $cond},
|
||||
undef, $val);
|
||||
|
||||
@ -144,6 +145,7 @@ sub _create {
|
||||
$self->{'login'} = $login;
|
||||
$self->{'disabledtext'} = $disabledtext;
|
||||
$self->{'showmybugslink'} = $mybugslink;
|
||||
$self->{'disable_mail'} = $disable_mail;
|
||||
|
||||
return $self;
|
||||
}
|
||||
@ -156,6 +158,8 @@ sub name { $_[0]->{name}; }
|
||||
sub disabledtext { $_[0]->{'disabledtext'}; }
|
||||
sub is_disabled { $_[0]->disabledtext ? 1 : 0; }
|
||||
sub showmybugslink { $_[0]->{showmybugslink}; }
|
||||
sub email_disabled { $_[0]->{disable_mail}; }
|
||||
sub email_enabled { !($_[0]->{disable_mail}); }
|
||||
|
||||
sub set_authorizer {
|
||||
my ($self, $authorizer) = @_;
|
||||
@ -1339,10 +1343,11 @@ sub get_userlist {
|
||||
}
|
||||
|
||||
sub insert_new_user {
|
||||
my ($username, $realname, $password, $disabledtext) = (@_);
|
||||
my ($username, $realname, $password, $disabledtext, $disable_mail) = (@_);
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
$disabledtext ||= '';
|
||||
$disable_mail ||= 0;
|
||||
|
||||
# If not specified, generate a new random password for the user.
|
||||
# If the password is '*', do not encrypt it; we are creating a user
|
||||
@ -1358,10 +1363,11 @@ sub insert_new_user {
|
||||
# Insert the new user record into the database.
|
||||
$dbh->do("INSERT INTO profiles
|
||||
(login_name, realname, cryptpassword, disabledtext,
|
||||
refreshed_when)
|
||||
VALUES (?, ?, ?, ?, '1901-01-01 00:00:00')",
|
||||
refreshed_when, disable_mail)
|
||||
VALUES (?, ?, ?, ?, '1901-01-01 00:00:00', ?)",
|
||||
undef,
|
||||
($username, $realname, $cryptpassword, $disabledtext));
|
||||
($username, $realname, $cryptpassword, $disabledtext,
|
||||
$disable_mail));
|
||||
|
||||
# Turn on all email for the new user
|
||||
my $new_userid = $dbh->bz_last_key('profiles', 'userid');
|
||||
@ -1868,6 +1874,11 @@ Params: $username (scalar, string) - The login name for the new user.
|
||||
If given, the user will be disabled,
|
||||
meaning the account will be
|
||||
unavailable for login.
|
||||
$disable_mail (scalar, boolean) - Optional, defaults to 0.
|
||||
If 1, bug-related mail will not be
|
||||
sent to this user; if 0, mail will
|
||||
be sent depending on the user's
|
||||
email preferences.
|
||||
|
||||
Returns: The password for this user, in plain text, so it can be included
|
||||
in an e-mail sent to the user.
|
||||
|
@ -3358,6 +3358,54 @@ if (!$dbh->bz_column_info('classifications', 'sortkey')) {
|
||||
$dbh->bz_add_column('fielddefs', 'enter_bug',
|
||||
{TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'});
|
||||
|
||||
# 2006-07-14 karl@kornel.name - Bug 100953
|
||||
# If a nomail file exists, move its contents into the DB
|
||||
$dbh->bz_add_column('profiles', 'disable_mail',
|
||||
{ TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE' });
|
||||
if (-e "$datadir/nomail") {
|
||||
# We have a data/nomail file, read it in and delete it
|
||||
my %nomail;
|
||||
print "Found a data/nomail file. Moving nomail entries into DB...\n";
|
||||
open NOMAIL, '<', "$datadir/nomail";
|
||||
while (<NOMAIL>) {
|
||||
$nomail{trim($_)} = 1;
|
||||
}
|
||||
close NOMAIL;
|
||||
|
||||
# Go through each entry read. If a user exists, set disable_mail.
|
||||
my $query = $dbh->prepare('UPDATE profiles
|
||||
SET disable_mail = 1
|
||||
WHERE userid = ?');
|
||||
foreach my $user_to_check (keys %nomail) {
|
||||
my $uid;
|
||||
if ($uid = Bugzilla::User::login_to_id($user_to_check)) {
|
||||
my $user = new Bugzilla::User($uid);
|
||||
print "\tDisabling email for user ", $user->email, "\n";
|
||||
$query->execute($user->id);
|
||||
delete $nomail{$user->email};
|
||||
}
|
||||
}
|
||||
|
||||
# If there are any nomail entries remaining, move them to nomail.bad
|
||||
# and say something to the user.
|
||||
if (scalar(keys %nomail)) {
|
||||
print 'The following users were listed in data/nomail, but do not ' .
|
||||
'have an account here. The unmatched entries have been moved ' .
|
||||
"to $datadir/nomail.bad\n";
|
||||
open NOMAIL_BAD, '>>', "$datadir/nomail.bad";
|
||||
foreach my $unknown_user (keys %nomail) {
|
||||
print "\t$unknown_user\n";
|
||||
print NOMAIL_BAD "$unknown_user\n";
|
||||
delete $nomail{$unknown_user};
|
||||
}
|
||||
close NOMAIL_BAD;
|
||||
}
|
||||
|
||||
# Now that we don't need it, get rid of the nomail file.
|
||||
unlink "$datadir/nomail";
|
||||
}
|
||||
|
||||
|
||||
# If you had to change the --TABLE-- definition in any way, then add your
|
||||
# differential change code *** A B O V E *** this comment.
|
||||
#
|
||||
|
@ -195,6 +195,7 @@ if ($action eq 'search') {
|
||||
my $password = $cgi->param('password');
|
||||
my $realname = trim($cgi->param('name') || '');
|
||||
my $disabledtext = trim($cgi->param('disabledtext') || '');
|
||||
my $disable_mail = $cgi->param('disable_mail') =~ /^(0|1)$/ ? $1 : 0;
|
||||
|
||||
# Lock tables during the check+creation session.
|
||||
$dbh->bz_lock_tables('profiles WRITE', 'profiles_activity WRITE',
|
||||
@ -216,7 +217,7 @@ if ($action eq 'search') {
|
||||
trick_taint($password);
|
||||
trick_taint($disabledtext);
|
||||
|
||||
insert_new_user($login, $realname, $password, $disabledtext);
|
||||
insert_new_user($login, $realname, $password, $disabledtext, $disable_mail);
|
||||
my $new_user_id = $dbh->bz_last_key('profiles', 'userid');
|
||||
$dbh->bz_unlock_tables();
|
||||
userDataToVars($new_user_id);
|
||||
@ -234,6 +235,7 @@ if ($action eq 'search') {
|
||||
} elsif ($action eq 'update') {
|
||||
my $otherUser = check_user($otherUserID, $otherUserLogin);
|
||||
$otherUserID = $otherUser->id;
|
||||
my $oldprofile = new Bugzilla::User($otherUserID);
|
||||
|
||||
my $logoutNeeded = 0;
|
||||
my @changedFields;
|
||||
@ -255,14 +257,17 @@ if ($action eq 'search') {
|
||||
object => "user"});
|
||||
|
||||
# Cleanups
|
||||
my $loginold = $cgi->param('loginold') || '';
|
||||
my $realnameold = $cgi->param('nameold') || '';
|
||||
my $disabledtextold = $cgi->param('disabledtextold') || '';
|
||||
my $loginold = $cgi->param('loginold') || '';
|
||||
my $realnameold = $cgi->param('nameold') || '';
|
||||
my $disabledtextold = $cgi->param('disabledtextold') || '';
|
||||
my $disable_mail_old = $cgi->param('disable_mail_old') =~ /^(0|1)$/ ?
|
||||
$1 : $oldprofile->email_disabled;
|
||||
|
||||
my $login = $cgi->param('login');
|
||||
my $password = $cgi->param('password');
|
||||
my $realname = trim($cgi->param('name') || '');
|
||||
my $disabledtext = trim($cgi->param('disabledtext') || '');
|
||||
my $disable_mail = $cgi->param('disable_mail') =~ /^(0|1)$/ ? $1 : 0;
|
||||
|
||||
# Update profiles table entry; silently skip doing this if the user
|
||||
# is not authorized.
|
||||
@ -308,6 +313,11 @@ if ($action eq 'search') {
|
||||
push(@values, $disabledtext);
|
||||
$logoutNeeded = 1;
|
||||
}
|
||||
if ($disable_mail != $disable_mail_old) {
|
||||
trick_taint($disable_mail);
|
||||
push(@changedFields, 'disable_mail');
|
||||
push(@values, $disable_mail);
|
||||
}
|
||||
if (@changedFields) {
|
||||
push (@values, $otherUserID);
|
||||
$logoutNeeded && Bugzilla->logout_user($otherUser);
|
||||
|
@ -69,6 +69,24 @@
|
||||
[% END %]
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="disable_mail">Bugmail Disabled:</label></th>
|
||||
<td>
|
||||
<input type="checkbox" name="disable_mail" id="disable_mail" value="1"
|
||||
[% IF otheruser.email_disabled %] checked="checked" [% END %] />
|
||||
(This affects bugmail and whinemail, not password-reset or other
|
||||
non-bug-related emails)
|
||||
[% IF editform %]
|
||||
<input type="hidden" name="disable_mail_old"
|
||||
[% IF otheruser.email_disabled %]
|
||||
value="1"
|
||||
[% ELSE %]
|
||||
value="0"
|
||||
[% END %]
|
||||
/>
|
||||
[% END %]
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="disabledtext">Disable text:</label></th>
|
||||
<td>
|
||||
|
@ -57,6 +57,12 @@
|
||||
A new password has been set.
|
||||
[% ELSIF field == 'disabledtext' %]
|
||||
The disable text has been modified.
|
||||
[% ELSIF field == 'disable_mail' %]
|
||||
[% IF otheruser.email_disabled %]
|
||||
Bugmail has been disabled.
|
||||
[% ELSE %]
|
||||
Bugmail has been enabled.
|
||||
[% END %]
|
||||
[% END %]
|
||||
</li>
|
||||
[% END %]
|
||||
|
@ -102,14 +102,6 @@ if ($fromaddress !~ Bugzilla->params->{'emailregexp'}) {
|
||||
"The maintainer email address has not been properly set!\n";
|
||||
}
|
||||
|
||||
# Check the nomail file for users who should not receive mail
|
||||
my %nomail;
|
||||
if (open(NOMAIL, '<', bz_locations()->{'datadir'} . "/nomail")) {
|
||||
while (<NOMAIL>) {
|
||||
$nomail{trim($_)} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# get the current date and time
|
||||
my ($now_sec, $now_minute, $now_hour, $now_day, $now_month, $now_year,
|
||||
$now_weekday) = localtime;
|
||||
@ -373,7 +365,7 @@ sub mail {
|
||||
my $args = shift;
|
||||
|
||||
# Don't send mail to someone on the nomail list.
|
||||
return if $nomail{$args->{'recipient'}->{'login'}};
|
||||
return if $args->{recipient}->email_disabled;
|
||||
|
||||
my $msg = ''; # it's a temporary variable to hold the template output
|
||||
$args->{'alternatives'} ||= [];
|
||||
|
@ -43,6 +43,7 @@ my $query = q{SELECT bug_id, short_desc, login_name
|
||||
INNER JOIN profiles
|
||||
ON userid = assigned_to
|
||||
WHERE (bug_status = ? OR bug_status = ?)
|
||||
AND disable_mail = 0
|
||||
AND } . $dbh->sql_to_days('NOW()') . " - " .
|
||||
$dbh->sql_to_days('delta_ts') . " > " .
|
||||
Bugzilla->params->{'whinedays'} .
|
||||
|
Loading…
Reference in New Issue
Block a user