Commit 0ce44681 authored by mkanat%kerio.com's avatar mkanat%kerio.com

Bug 285534: bugs.qa_contact should allow NULL

Patch By Max Kanat-Alexander <mkanat@kerio.com> r=joel, a=justdave
parent 0ab2e4bf
...@@ -372,7 +372,7 @@ sub qa_contact () { ...@@ -372,7 +372,7 @@ sub qa_contact () {
my ($self) = @_; my ($self) = @_;
return $self->{'qa_contact'} if exists $self->{'qa_contact'}; 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'}); $self->{'qa_contact'} = new Bugzilla::User($self->{'qa_contact_id'});
} else { } else {
# XXX - This is somewhat inconsistent with the assignee/reporter # XXX - This is somewhat inconsistent with the assignee/reporter
......
...@@ -145,7 +145,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -145,7 +145,7 @@ use constant ABSTRACT_SCHEMA => {
resolution => {TYPE => 'varchar(64)', NOTNULL => 1}, resolution => {TYPE => 'varchar(64)', NOTNULL => 1},
target_milestone => {TYPE => 'varchar(20)', target_milestone => {TYPE => 'varchar(20)',
NOTNULL => 1, DEFAULT => "'---'"}, NOTNULL => 1, DEFAULT => "'---'"},
qa_contact => {TYPE => 'INT3', NOTNULL => 1}, qa_contact => {TYPE => 'INT3'},
status_whiteboard => {TYPE => 'MEDIUMTEXT', NOTNULL => 1, status_whiteboard => {TYPE => 'MEDIUMTEXT', NOTNULL => 1,
DEFAULT => "''"}, DEFAULT => "''"},
votes => {TYPE => 'INT3', NOTNULL => 1, votes => {TYPE => 'INT3', NOTNULL => 1,
......
...@@ -359,7 +359,8 @@ sub can_see_bug { ...@@ -359,7 +359,8 @@ sub can_see_bug {
$sth->finish; $sth->finish;
$self->{sthCanSeeBug} = $sth; $self->{sthCanSeeBug} = $sth;
return ( (($reporter == $userid) && $reporter_access) return ( (($reporter == $userid) && $reporter_access)
|| (Param('useqacontact') && ($qacontact == $userid) && $userid) || (Param('useqacontact') && $qacontact &&
($qacontact == $userid))
|| ($owner == $userid) || ($owner == $userid)
|| ($isoncclist && $cclist_access) || ($isoncclist && $cclist_access)
|| (!$missinggroup) ); || (!$missinggroup) );
......
...@@ -1854,12 +1854,12 @@ unless ($sth->rows) { ...@@ -1854,12 +1854,12 @@ unless ($sth->rows) {
# note: since admin user is not yet known, components gets a 0 for # note: since admin user is not yet known, components gets a 0 for
# initialowner and this is fixed during final checks. # initialowner and this is fixed during final checks.
$dbh->do("INSERT INTO components (name, product_id, description, " . $dbh->do("INSERT INTO components (name, product_id, description, " .
"initialowner, initialqacontact) " . "initialowner) " .
"VALUES (" . "VALUES (" .
"'TestComponent', $product_id, " . "'TestComponent', $product_id, " .
"'This is a test component in the test product database. " . "'This is a test component in the test product database. " .
"This ought to be blown away and replaced with real stuff in " . "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) $dbh->do(q{INSERT INTO milestones (product_id, value, sortkey)
VALUES (?,?,?)}, VALUES (?,?,?)},
undef, $product_id, '---', 0); undef, $product_id, '---', 0);
...@@ -3856,6 +3856,13 @@ if(!$dbh->bz_get_field_def('bugs', 'lastdiffed')->[2]) { ...@@ -3856,6 +3856,13 @@ if(!$dbh->bz_get_field_def('bugs', 'lastdiffed')->[2]) {
# 2005-03-03 travis@sedsystems.ca -- Bug 41972 # 2005-03-03 travis@sedsystems.ca -- Bug 41972
add_setting ("display_quips", {"on" => 1, "off" => 2 }, "on" ); 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 } # END LEGACY CHECKS
......
...@@ -595,6 +595,7 @@ sub ValidatePassword { ...@@ -595,6 +595,7 @@ sub ValidatePassword {
sub DBID_to_name { sub DBID_to_name {
my ($id) = (@_); my ($id) = (@_);
return "__UNKNOWN__" if !defined $id;
# $id should always be a positive integer # $id should always be a positive integer
if ($id =~ m/^([1-9][0-9]*)$/) { if ($id =~ m/^([1-9][0-9]*)$/) {
$id = $1; $id = $1;
......
...@@ -154,7 +154,7 @@ if (Param("useqacontact")) { ...@@ -154,7 +154,7 @@ if (Param("useqacontact")) {
$qa_contact = DBNameToIdAndCheck(trim($::FORM{'qa_contact'})); $qa_contact = DBNameToIdAndCheck(trim($::FORM{'qa_contact'}));
} }
if (defined $qa_contact && $qa_contact != 0) { if ($qa_contact) {
$::FORM{'qa_contact'} = $qa_contact; $::FORM{'qa_contact'} = $qa_contact;
push(@bug_fields, "qa_contact"); push(@bug_fields, "qa_contact");
} }
......
...@@ -349,6 +349,9 @@ sub CheckCanChangeField { ...@@ -349,6 +349,9 @@ sub CheckCanChangeField {
# START DO_NOT_CHANGE # START DO_NOT_CHANGE
my ($field, $bugid, $oldvalue, $newvalue) = (@_); my ($field, $bugid, $oldvalue, $newvalue) = (@_);
$oldvalue = defined($oldvalue) ? $oldvalue : '';
$newvalue = defined($newvalue) ? $newvalue : '';
# Return true if they haven't changed this field at all. # Return true if they haven't changed this field at all.
if ($oldvalue eq $newvalue) { if ($oldvalue eq $newvalue) {
return 1; return 1;
...@@ -436,7 +439,7 @@ sub CheckCanChangeField { ...@@ -436,7 +439,7 @@ sub CheckCanChangeField {
} }
# Allow the QA contact to change anything else. # Allow the QA contact to change anything else.
if (Param('useqacontact') && ($qacontactid == $whoid)) { if (Param('useqacontact') && $qacontactid && ($qacontactid == $whoid)) {
return 1; return 1;
} }
...@@ -877,14 +880,18 @@ my $qacontact; ...@@ -877,14 +880,18 @@ my $qacontact;
if (defined $::FORM{'qa_contact'} if (defined $::FORM{'qa_contact'}
&& $::FORM{'knob'} ne "reassignbycomponent") && $::FORM{'knob'} ne "reassignbycomponent")
{ {
$qacontact = 0;
my $name = trim($::FORM{'qa_contact'}); my $name = trim($::FORM{'qa_contact'});
# The QA contact cannot be deleted from show_bug.cgi for a single bug! # The QA contact cannot be deleted from show_bug.cgi for a single bug!
if ($name ne $::FORM{'dontchange'}) { if ($name ne $::FORM{'dontchange'}) {
$qacontact = DBNameToIdAndCheck($name) if ($name ne ""); $qacontact = DBNameToIdAndCheck($name) if ($name ne "");
DoComma(); DoComma();
if($qacontact) {
$::query .= "qa_contact = $qacontact"; $::query .= "qa_contact = $qacontact";
} }
else {
$::query .= "qa_contact = NULL";
}
}
} }
CheckFormFieldDefined(\%::FORM, 'knob'); CheckFormFieldDefined(\%::FORM, 'knob');
...@@ -967,10 +974,15 @@ SWITCH: for ($::FORM{'knob'}) { ...@@ -967,10 +974,15 @@ SWITCH: for ($::FORM{'knob'}) {
if (Param("useqacontact")) { if (Param("useqacontact")) {
SendSQL("SELECT initialqacontact FROM components " . SendSQL("SELECT initialqacontact FROM components " .
"WHERE components.id = $comp_id"); "WHERE components.id = $comp_id");
$qacontact = FetchOneColumn() || 0; $qacontact = FetchOneColumn();
DoComma(); DoComma();
if ($qacontact) {
$::query .= "qa_contact = $qacontact"; $::query .= "qa_contact = $qacontact";
} }
else {
$::query .= "qa_contact = NULL";
}
}
last SWITCH; last SWITCH;
}; };
/^reopen$/ && CheckonComment( "reopen" ) && do { /^reopen$/ && CheckonComment( "reopen" ) && do {
......
...@@ -304,7 +304,7 @@ CrossCheck("profiles", "userid", ...@@ -304,7 +304,7 @@ CrossCheck("profiles", "userid",
['profiles_activity', 'who'], ['profiles_activity', 'who'],
["bugs", "reporter", "bug_id"], ["bugs", "reporter", "bug_id"],
["bugs", "assigned_to", "bug_id"], ["bugs", "assigned_to", "bug_id"],
["bugs", "qa_contact", "bug_id", ["0"]], ["bugs", "qa_contact", "bug_id"],
["attachments", "submitter_id", "bug_id"], ["attachments", "submitter_id", "bug_id"],
['flags', 'setter_id', 'bug_id'], ['flags', 'setter_id', 'bug_id'],
['flags', 'requestee_id', 'bug_id'], ['flags', 'requestee_id', 'bug_id'],
...@@ -322,7 +322,7 @@ CrossCheck("profiles", "userid", ...@@ -322,7 +322,7 @@ CrossCheck("profiles", "userid",
["tokens", "userid"], ["tokens", "userid"],
["user_group_map", "user_id"], ["user_group_map", "user_id"],
["components", "initialowner", "name"], ["components", "initialowner", "name"],
["components", "initialqacontact", "name", ["0"]]); ["components", "initialqacontact", "name"]);
CrossCheck("products", "id", CrossCheck("products", "id",
["bugs", "product_id", "bug_id"], ["bugs", "product_id", "bug_id"],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment