diff options
-rwxr-xr-x | Bugzilla/Bug.pm | 31 | ||||
-rwxr-xr-x | post_bug.cgi | 25 |
2 files changed, 34 insertions, 22 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 4f1939423..d49fcfd20 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -249,12 +249,21 @@ sub create { delete $params->{cc}; my $groups = $params->{groups}; delete $params->{groups}; + my $depends_on = $params->{dependson}; + delete $params->{dependson}; + my $blocked = $params->{blocked}; + delete $params->{blocked}; # Set up the keyword cache for bug creation. my $keywords = $params->{keywords}; $params->{keywords} = join(', ', sort {lc($a) cmp lc($b)} map($_->name, @$keywords)); + # We don't want the bug to appear in the system until it's correctly + # protected by groups. + my $timestamp = $params->{creation_ts}; + delete $params->{creation_ts}; + my $bug = $class->insert_create_data($params); # Add the group restrictions @@ -264,6 +273,9 @@ sub create { $sth_group->execute($bug->bug_id, $group_id); } + $dbh->do('UPDATE bugs SET creation_ts = ? WHERE bug_id = ?', undef, + $timestamp, $bug->bug_id); + # Add the CCs my $sth_cc = $dbh->prepare('INSERT INTO cc (bug_id, who) VALUES (?,?)'); foreach my $user_id (@$cc_ids) { @@ -277,6 +289,22 @@ sub create { $sth_keyword->execute($bug->bug_id, $keyword_id); } + # Set up dependencies (blocked/dependson) + my $sth_deps = $dbh->prepare( + 'INSERT INTO dependencies (blocked, dependson) VALUES (?, ?)'); + foreach my $depends_on_id (@$depends_on) { + $sth_deps->execute($bug->bug_id, $depends_on_id); + # Log the reverse action on the other bug. + LogActivityEntry($depends_on_id, 'blocked', '', $bug->bug_id, + $bug->reporter->id, $timestamp); + } + foreach my $blocked_id (@$blocked) { + $sth_deps->execute($blocked_id, $bug->bug_id); + # Log the reverse action on the other bug. + LogActivityEntry($blocked_id, 'dependson', '', $bug->bug_id, + $bug->reporter->id, $timestamp); + } + return $bug; } @@ -317,6 +345,9 @@ sub run_create_validators { $class->_check_strict_isolation($product, $params->{cc}, $params->{assigned_to}, $params->{qa_contact}); + ($params->{dependson}, $params->{blocked}) = + $class->_check_dependencies($params->{dependson}, $params->{blocked}); + return $params; } diff --git a/post_bug.cgi b/post_bug.cgi index ce029b389..3be5e3ab6 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -130,9 +130,6 @@ $comment = Bugzilla::Bug->_check_comment($cgi->param('comment')); # OK except for the fact that it causes e-mail to be suppressed. $comment = $comment ? $comment : " "; -my ($depends_on_ids, $blocks_ids) = Bugzilla::Bug->_check_dependencies( - scalar $cgi->param('dependson'), scalar $cgi->param('blocked')); - # get current time my $timestamp = $dbh->selectrow_array(q{SELECT NOW()}); @@ -161,9 +158,11 @@ push(@bug_fields, qw( qa_contact alias + blocked bug_file_loc bug_severity bug_status + dependson keywords short_desc op_sys @@ -213,24 +212,6 @@ $dbh->do(q{INSERT INTO longdescs (bug_id, who, bug_when, thetext,isprivate) VALUES (?, ?, ?, ?, ?)}, undef, ($id, $user->id, $timestamp, $comment, $privacy)); -my @all_deps; -if (Bugzilla->user->in_group("editbugs")) { - if ($cgi->param('dependson') || $cgi->param('blocked')) { - my %deps = (dependson => $depends_on_ids, blocked => $blocks_ids); - foreach my $pair (["blocked", "dependson"], ["dependson", "blocked"]) { - my ($me, $target) = @{$pair}; - my $sth_dep = $dbh->prepare(qq{ - INSERT INTO dependencies ($me, $target) VALUES (?, ?)}); - foreach my $i (@{$deps{$target}}) { - $sth_dep->execute($id, $i); - push(@all_deps, $i); # list for mailing dependent bugs - # Log the activity for the other bug: - LogActivityEntry($i, $me, "", $id, $user->id, $timestamp); - } - } - } -} - # All fields related to the newly created bug are set. # The bug can now be made accessible. $dbh->do("UPDATE bugs SET creation_ts = ? WHERE bug_id = ?", @@ -288,7 +269,7 @@ push (@{$vars->{'sentmail'}}, { type => 'created', id => $id, }); -foreach my $i (@all_deps) { +foreach my $i (@{$bug->dependson || []}, @{$bug->blocked || []}) { push (@{$vars->{'sentmail'}}, { type => 'dep', id => $i, }); } |