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
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,
$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) );
# 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);
# 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
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;
$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");
}
# 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;
}
# Allow the QA contact to change anything else.
- if (Param('useqacontact') && ($qacontactid == $whoid)) {
+ if (Param('useqacontact') && $qacontactid && ($qacontactid == $whoid)) {
return 1;
}
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";
+ }
}
}
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;
};
['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'],
["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"],