From b76a02502d1e3abf05d8aef379d14ac259619526 Mon Sep 17 00:00:00 2001 From: "terry%mozilla.org" <> Date: Thu, 13 May 1999 00:20:39 +0000 Subject: Added user preference controlling how much email they get. --- CHANGES | 5 +++ changepassword.cgi | 100 ++++++++++++++++++++++++++++++++++++--------------- makeprofilestable.sh | 1 + processmail | 32 +++++++++++++---- query.cgi | 2 +- 5 files changed, 105 insertions(+), 35 deletions(-) diff --git a/CHANGES b/CHANGES index eb2fbb78b..93d6e051a 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,11 @@ query the CVS tree. For example, will tell you what has been changed in the last week. +5/12/99 Added a pref to control how much email you get. This needs a new +column in the profiles table, so feed the following to mysql: + + alter table profiles add column emailnotification enum("ExcludeSelfChanges", "CConly", "All") not null default "ExcludeSelfChanges"; + 5/5/99 Added the ability to search by creation date. To make this perform well, you ought to do the following: diff --git a/changepassword.cgi b/changepassword.cgi index a3a17e39a..25ea4e7c3 100755 --- a/changepassword.cgi +++ b/changepassword.cgi @@ -23,28 +23,65 @@ require "CGI.pl"; confirm_login(); -if (! defined $::FORM{'pwd1'}) { - print "Content-type: text/html +print "Content-type: text/html\n\n"; -

Change your password

+if (! defined $::FORM{'pwd1'}) { + PutHeader("Preferences", "Change your password and other preferences", + $::COOKIE{'Bugzilla_login'}); + + my $qacontactpart = ""; + if (Param('useqacontact')) { + $qacontactpart = ", the current QA Contact"; + } + SendSQL("select emailnotification from profiles where login_name = " . + SqlQuote($::COOKIE{'Bugzilla_login'})); + my ($emailnotification) = (FetchSQLData()); + print qq{
+
- + - + +
Please enter the new password for $::COOKIE{'Bugzilla_login'}:
Re-enter your new password:
+
+ + + + +
Bugzilla will send out email notification of changed bugs to +the current owner, the submitter of the bug$qacontactpart, and anyone on the +CC list. However, you can suppress some of those email notifications. +On which of these bugs would you like email notification of changes? +
-\n"; +
+ +
+"; + navigation_header(); exit; } if ($::FORM{'pwd1'} ne $::FORM{'pwd2'}) { - print "Content-type: text/html - -

Try again.

+ print "

Try again.

The two passwords you entered did not match. Please click Back and try again.\n"; exit; } @@ -53,36 +90,43 @@ The two passwords you entered did not match. Please click Back and try a my $pwd = $::FORM{'pwd1'}; -if ($pwd !~ /^[a-zA-Z0-9-_]*$/ || length($pwd) < 3 || length($pwd) > 15) { - print "Content-type: text/html +sub x { + my $sc="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./"; + return substr($sc, int (rand () * 100000) % (length ($sc) + 1), 1); +} -

Sorry; we're picky.

+if ($pwd ne "") { + if ($pwd !~ /^[a-zA-Z0-9-_]*$/ || length($pwd) < 3 || length($pwd) > 15) { + print "

Sorry; we're picky.

Please choose a password that is between 3 and 15 characters long, and that contains only numbers, letters, hyphens, or underlines.

Please click Back and try again.\n"; - exit; -} - - -print "Content-type: text/html\n\n"; - + exit; + } + + # Generate a random salt. - -sub x { - my $sc="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./"; - return substr($sc, int (rand () * 100000) % (length ($sc) + 1), 1); + + my $salt = x() . x(); + + my $encrypted = crypt($pwd, $salt); + + SendSQL("update profiles set password='$pwd',cryptpassword='$encrypted' where login_name=" . + SqlQuote($::COOKIE{'Bugzilla_login'})); + + SendSQL("update logincookies set cryptpassword = '$encrypted' where cookie = $::COOKIE{'Bugzilla_logincookie'}"); } -my $salt = x() . x(); -my $encrypted = crypt($pwd, $salt); -SendSQL("update profiles set password='$pwd',cryptpassword='$encrypted' where login_name=" . +SendSQL("update profiles set emailnotification='$::FORM{'emailnotification'}' where login_name = " . SqlQuote($::COOKIE{'Bugzilla_login'})); -SendSQL("update logincookies set cryptpassword = '$encrypted' where cookie = $::COOKIE{'Bugzilla_logincookie'}"); -print "

OK, done.

-Your new password has been set. +PutHeader("Preferences updated."); + + +print " +Your preferences have been updated.

Back to query page.\n"; diff --git a/makeprofilestable.sh b/makeprofilestable.sh index be4c03e4b..0dd5eaba0 100755 --- a/makeprofilestable.sh +++ b/makeprofilestable.sh @@ -34,6 +34,7 @@ password varchar(16), cryptpassword varchar(64), realname varchar(255), groupset bigint not null, +emailnotification enum("ExcludeSelfChanges", "CConly", "All") not null default "ExcludeSelfChanges"; index(login_name) ); diff --git a/processmail b/processmail index 48eba9193..b5852bbb8 100755 --- a/processmail +++ b/processmail @@ -178,13 +178,29 @@ $::bug{'long_desc'} } - +my $didexclude = 0; sub fixaddresses { - my ($list) = (@_); + my ($field, $list) = (@_); my @result; my %seen; foreach my $i (@$list) { - if ($i ne $nametoexclude && $i ne "" && !defined $::nomail{$i} && !defined $seen{$i}) { + if ($i eq "") { + next; + } + SendSQL("select emailnotification from profiles where login_name = " . + SqlQuote($i)); + my $emailnotification = FetchOneColumn(); + if ($emailnotification eq "CConly") { + if ($field ne "cc") { + next; + } + } + if ($emailnotification eq "ExcludeSelfChanges" && $i eq $nametoexclude) { + $didexclude = 1; + next; + } + + if (!defined $::nomail{$i} && !defined $seen{$i}) { push @result, $i; $seen{$i} = 1; } @@ -224,9 +240,10 @@ sub ProcessOneBug { close FID; if (Different($old, $new)) { system("diff -c -b $old $new > $diffs"); - my $tolist = fixaddresses([$::bug{'assigned_to'}, $::bug{'reporter'}, + my $tolist = fixaddresses("to", + [$::bug{'assigned_to'}, $::bug{'reporter'}, $::bug{'qa_contact'}]); - my $cclist = fixaddresses($::bug{'cclist'}); + my $cclist = fixaddresses("cc", $::bug{'cclist'}); my $logstr = "Bug $i $verb"; if ($tolist ne "" || $cclist ne "") { my %substs; @@ -251,7 +268,10 @@ sub ProcessOneBug { print SENDMAIL $msg; close SENDMAIL; $logstr = "$logstr; mail sent to $tolist, $cclist"; - print "Email sent to: $tolist $cclist Excluding: $nametoexclude\n"; + print "Email sent to: $tolist $cclist\n"; + if ($didexclude) { + print "Excluding: $nametoexclude (change your preferences if you wish not to be excluded)\n"; + } } } unlink($diffs); diff --git a/query.cgi b/query.cgi index 102f655f2..ac62a0db5 100755 --- a/query.cgi +++ b/query.cgi @@ -556,7 +556,7 @@ if (UserInGroup("editcomponents")) { if (defined $::COOKIE{"Bugzilla_login"}) { print "Log in as someone besides $::COOKIE{'Bugzilla_login'}
\n"; } -print "Change your password.
\n"; +print "Change your password or preferences.
\n"; print "Create a new bug.
\n"; print "Open a new Bugzilla account
\n"; print "Bug reports
\n"; -- cgit v1.2.3-24-g4f1b