summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%kerio.com <>2005-03-15 14:20:47 +0100
committermkanat%kerio.com <>2005-03-15 14:20:47 +0100
commit0ce44681395c0a6ef5d8a54caa8aca73728b3b25 (patch)
treee804038f1f134bf7d91da9125e45de3703c59ed0
parent0ab2e4bfd6429efa18c46ad76db69ecfa470e750 (diff)
downloadbugzilla-0ce44681395c0a6ef5d8a54caa8aca73728b3b25.tar.gz
bugzilla-0ce44681395c0a6ef5d8a54caa8aca73728b3b25.tar.xz
Bug 285534: bugs.qa_contact should allow NULL
Patch By Max Kanat-Alexander <mkanat@kerio.com> r=joel, a=justdave
-rwxr-xr-xBugzilla/Bug.pm2
-rw-r--r--Bugzilla/DB/Schema.pm2
-rw-r--r--Bugzilla/User.pm3
-rwxr-xr-xchecksetup.pl11
-rw-r--r--globals.pl1
-rwxr-xr-xpost_bug.cgi2
-rwxr-xr-xprocess_bug.cgi22
-rwxr-xr-xsanitycheck.cgi4
8 files changed, 34 insertions, 13 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm
index 62719de56..6c444a013 100755
--- a/Bugzilla/Bug.pm
+++ b/Bugzilla/Bug.pm
@@ -372,7 +372,7 @@ sub qa_contact () {
my ($self) = @_;
return $self->{'qa_contact'} if exists $self->{'qa_contact'};
- if (Param('useqacontact') && $self->{'qa_contact_id'} > 0) {
+ if (Param('useqacontact') && $self->{'qa_contact_id'}) {
$self->{'qa_contact'} = new Bugzilla::User($self->{'qa_contact_id'});
} else {
# XXX - This is somewhat inconsistent with the assignee/reporter
diff --git a/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm
index 9a156a1b0..bf93914fc 100644
--- a/Bugzilla/DB/Schema.pm
+++ b/Bugzilla/DB/Schema.pm
@@ -145,7 +145,7 @@ use constant ABSTRACT_SCHEMA => {
resolution => {TYPE => 'varchar(64)', NOTNULL => 1},
target_milestone => {TYPE => 'varchar(20)',
NOTNULL => 1, DEFAULT => "'---'"},
- qa_contact => {TYPE => 'INT3', NOTNULL => 1},
+ qa_contact => {TYPE => 'INT3'},
status_whiteboard => {TYPE => 'MEDIUMTEXT', NOTNULL => 1,
DEFAULT => "''"},
votes => {TYPE => 'INT3', NOTNULL => 1,
diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm
index 36179fcce..63b2f6848 100644
--- a/Bugzilla/User.pm
+++ b/Bugzilla/User.pm
@@ -359,7 +359,8 @@ sub can_see_bug {
$sth->finish;
$self->{sthCanSeeBug} = $sth;
return ( (($reporter == $userid) && $reporter_access)
- || (Param('useqacontact') && ($qacontact == $userid) && $userid)
+ || (Param('useqacontact') && $qacontact &&
+ ($qacontact == $userid))
|| ($owner == $userid)
|| ($isoncclist && $cclist_access)
|| (!$missinggroup) );
diff --git a/checksetup.pl b/checksetup.pl
index d9e082ba7..51a264391 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -1854,12 +1854,12 @@ unless ($sth->rows) {
# note: since admin user is not yet known, components gets a 0 for
# initialowner and this is fixed during final checks.
$dbh->do("INSERT INTO components (name, product_id, description, " .
- "initialowner, initialqacontact) " .
+ "initialowner) " .
"VALUES (" .
"'TestComponent', $product_id, " .
"'This is a test component in the test product database. " .
"This ought to be blown away and replaced with real stuff in " .
- "a finished installation of Bugzilla.', 0, 0)");
+ "a finished installation of Bugzilla.', 0)");
$dbh->do(q{INSERT INTO milestones (product_id, value, sortkey)
VALUES (?,?,?)},
undef, $product_id, '---', 0);
@@ -3856,6 +3856,13 @@ if(!$dbh->bz_get_field_def('bugs', 'lastdiffed')->[2]) {
# 2005-03-03 travis@sedsystems.ca -- Bug 41972
add_setting ("display_quips", {"on" => 1, "off" => 2 }, "on" );
+# 2005-03-09 qa_contact should be NULL instead of 0, bug 285534
+if (!$dbh->bz_get_field_def('bugs', 'qa_contact')->[2]) { # if it's NOT NULL
+ $dbh->bz_change_field_type('bugs', 'qa_contact', 'mediumint');
+ $dbh->do("UPDATE bugs SET qa_contact = NULL WHERE qa_contact = 0");
+ $dbh->do("UPDATE components SET initialqacontact = NULL
+ WHERE initialqacontact = 0");
+}
} # END LEGACY CHECKS
diff --git a/globals.pl b/globals.pl
index 6e0ebd774..ec7d39693 100644
--- a/globals.pl
+++ b/globals.pl
@@ -595,6 +595,7 @@ sub ValidatePassword {
sub DBID_to_name {
my ($id) = (@_);
+ return "__UNKNOWN__" if !defined $id;
# $id should always be a positive integer
if ($id =~ m/^([1-9][0-9]*)$/) {
$id = $1;
diff --git a/post_bug.cgi b/post_bug.cgi
index bc8a0afc5..0bd3b8218 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -154,7 +154,7 @@ if (Param("useqacontact")) {
$qa_contact = DBNameToIdAndCheck(trim($::FORM{'qa_contact'}));
}
- if (defined $qa_contact && $qa_contact != 0) {
+ if ($qa_contact) {
$::FORM{'qa_contact'} = $qa_contact;
push(@bug_fields, "qa_contact");
}
diff --git a/process_bug.cgi b/process_bug.cgi
index 0b9354171..219e9226d 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -349,6 +349,9 @@ sub CheckCanChangeField {
# START DO_NOT_CHANGE
my ($field, $bugid, $oldvalue, $newvalue) = (@_);
+ $oldvalue = defined($oldvalue) ? $oldvalue : '';
+ $newvalue = defined($newvalue) ? $newvalue : '';
+
# Return true if they haven't changed this field at all.
if ($oldvalue eq $newvalue) {
return 1;
@@ -436,7 +439,7 @@ sub CheckCanChangeField {
}
# Allow the QA contact to change anything else.
- if (Param('useqacontact') && ($qacontactid == $whoid)) {
+ if (Param('useqacontact') && $qacontactid && ($qacontactid == $whoid)) {
return 1;
}
@@ -877,13 +880,17 @@ my $qacontact;
if (defined $::FORM{'qa_contact'}
&& $::FORM{'knob'} ne "reassignbycomponent")
{
- $qacontact = 0;
my $name = trim($::FORM{'qa_contact'});
# The QA contact cannot be deleted from show_bug.cgi for a single bug!
if ($name ne $::FORM{'dontchange'}) {
$qacontact = DBNameToIdAndCheck($name) if ($name ne "");
DoComma();
- $::query .= "qa_contact = $qacontact";
+ if($qacontact) {
+ $::query .= "qa_contact = $qacontact";
+ }
+ else {
+ $::query .= "qa_contact = NULL";
+ }
}
}
@@ -967,9 +974,14 @@ SWITCH: for ($::FORM{'knob'}) {
if (Param("useqacontact")) {
SendSQL("SELECT initialqacontact FROM components " .
"WHERE components.id = $comp_id");
- $qacontact = FetchOneColumn() || 0;
+ $qacontact = FetchOneColumn();
DoComma();
- $::query .= "qa_contact = $qacontact";
+ if ($qacontact) {
+ $::query .= "qa_contact = $qacontact";
+ }
+ else {
+ $::query .= "qa_contact = NULL";
+ }
}
last SWITCH;
};
diff --git a/sanitycheck.cgi b/sanitycheck.cgi
index 2a51a3169..c3c415312 100755
--- a/sanitycheck.cgi
+++ b/sanitycheck.cgi
@@ -304,7 +304,7 @@ CrossCheck("profiles", "userid",
['profiles_activity', 'who'],
["bugs", "reporter", "bug_id"],
["bugs", "assigned_to", "bug_id"],
- ["bugs", "qa_contact", "bug_id", ["0"]],
+ ["bugs", "qa_contact", "bug_id"],
["attachments", "submitter_id", "bug_id"],
['flags', 'setter_id', 'bug_id'],
['flags', 'requestee_id', 'bug_id'],
@@ -322,7 +322,7 @@ CrossCheck("profiles", "userid",
["tokens", "userid"],
["user_group_map", "user_id"],
["components", "initialowner", "name"],
- ["components", "initialqacontact", "name", ["0"]]);
+ ["components", "initialqacontact", "name"]);
CrossCheck("products", "id",
["bugs", "product_id", "bug_id"],