diff options
-rwxr-xr-x | Bugzilla/Bug.pm | 2 | ||||
-rw-r--r-- | Bugzilla/DB/Schema.pm | 2 | ||||
-rw-r--r-- | Bugzilla/User.pm | 3 | ||||
-rwxr-xr-x | checksetup.pl | 11 | ||||
-rw-r--r-- | globals.pl | 1 | ||||
-rwxr-xr-x | post_bug.cgi | 2 | ||||
-rwxr-xr-x | process_bug.cgi | 22 | ||||
-rwxr-xr-x | sanitycheck.cgi | 4 |
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"], |