]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 349561: Move the strict_isolation check from post_bug into Bugzilla::Bug
authormkanat%bugzilla.org <>
Wed, 23 Aug 2006 05:42:25 +0000 (05:42 +0000)
committermkanat%bugzilla.org <>
Wed, 23 Aug 2006 05:42:25 +0000 (05:42 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=bkor, a=justdave

Bugzilla/Bug.pm
post_bug.cgi

index 406e70aca4c755553094b35a0926960985ee1486..2f5d08bfe8511915ef2ed82a185789977c58972e 100755 (executable)
@@ -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;
index ec44f6c48cc1e0c3a9244416966adb50d8d86279..dab0ba507cc150ba88fa0dbe348f5ea26cde2455 100755 (executable)
@@ -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);
 }