From: mkanat%bugzilla.org <> Date: Wed, 23 Aug 2006 05:42:25 +0000 (+0000) Subject: Bug 349561: Move the strict_isolation check from post_bug into Bugzilla::Bug X-Git-Tag: bugzilla-2.23.3~119 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=363f5a4e621378b1343c4621a765cb9aa9025cb9;p=thirdparty%2Fbugzilla.git Bug 349561: Move the strict_isolation check from post_bug into Bugzilla::Bug Patch By Max Kanat-Alexander r=bkor, a=justdave --- diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 406e70aca4..2f5d08bfe8 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -406,6 +406,37 @@ sub _check_short_desc { return $short_desc; } +# Unlike other checkers, this one doesn't return anything. +sub _check_strict_isolation { + my ($product, $cc_ids, $assignee_id, $qa_contact_id) = @_; + + return unless Bugzilla->params->{'strict_isolation'}; + + my @related_users = @$cc_ids; + push(@related_users, $assignee_id); + + if (Bugzilla->params->{'useqacontact'} && $qa_contact_id) { + push(@related_users, $qa_contact_id); + } + + # For each unique user in @related_users...(assignee and qa_contact + # could be duplicates of users in the CC list) + my %unique_users = map {$_ => 1} @related_users; + my @blocked_users; + foreach my $pid (keys %unique_users) { + my $related_user = Bugzilla::User->new($pid); + if (!$related_user->can_edit_product($product->id)) { + push (@blocked_users, $related_user->login); + } + } + if (scalar(@blocked_users)) { + ThrowUserError("invalid_user_group", + {'users' => \@blocked_users, + 'new' => 1, + 'product' => $product->name}); + } +} + sub _check_qa_contact { my ($name, $component) = @_; my $user = Bugzilla->user; diff --git a/post_bug.cgi b/post_bug.cgi index ec44f6c48c..dab0ba507c 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -221,32 +221,11 @@ push(@used_fields, "product_id"); $cgi->param(-name => 'component_id', -value => $component->id); push(@used_fields, "component_id"); -my @cc_ids = @{Bugzilla::Bug::_check_cc([$cgi->param('cc')])}; +my $cc_ids = Bugzilla::Bug::_check_cc([$cgi->param('cc')]); my @keyword_ids = @{Bugzilla::Bug::_check_keywords($cgi->param('keywords'))}; -if (Bugzilla->params->{"strict_isolation"}) { - my @blocked_users = (); - my @related_users = @cc_ids; - push(@related_users, $cgi->param('assigned_to')); - if (Bugzilla->params->{'useqacontact'} && $cgi->param('qa_contact')) { - push(@related_users, $cgi->param('qa_contact')); - } - # For each unique user in @related_users... - my %related_users = map {$_ => 1} @related_users; - foreach my $pid (keys %related_users) { - my $related_user = Bugzilla::User->new($pid); - if (!$related_user->can_edit_product($product->id)) { - push (@blocked_users, $related_user->login); - } - } - if (scalar(@blocked_users)) { - ThrowUserError("invalid_user_group", - {'users' => \@blocked_users, - 'new' => 1, - 'product' => $product->name - }); - } -} +Bugzilla::Bug::_check_strict_isolation($product, $cc_ids, + $cgi->param('assigned_to'), $cgi->param('qa_contact')); # Check for valid dependency info. foreach my $field ("dependson", "blocked") { @@ -411,7 +390,7 @@ $dbh->do(q{INSERT INTO longdescs (bug_id, who, bug_when, thetext,isprivate) # Insert the cclist into the database my $sth_cclist = $dbh->prepare(q{INSERT INTO cc (bug_id, who) VALUES (?,?)}); -foreach my $ccid (@cc_ids) { +foreach my $ccid (@$cc_ids) { $sth_cclist->execute($id, $ccid); }