diff options
-rwxr-xr-x | Bugzilla/Bug.pm | 19 | ||||
-rwxr-xr-x | post_bug.cgi | 21 |
2 files changed, 17 insertions, 23 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 0dfc91668..4f1939423 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -118,6 +118,7 @@ sub VALIDATORS { cc => \&_check_cc, deadline => \&_check_deadline, estimated_time => \&_check_estimated_time, + keywords => \&_check_keywords, op_sys => \&_check_op_sys, priority => \&_check_priority, product => \&_check_product, @@ -249,6 +250,11 @@ sub create { my $groups = $params->{groups}; delete $params->{groups}; + # Set up the keyword cache for bug creation. + my $keywords = $params->{keywords}; + $params->{keywords} = join(', ', sort {lc($a) cmp lc($b)} + map($_->name, @$keywords)); + my $bug = $class->insert_create_data($params); # Add the group restrictions @@ -264,6 +270,13 @@ sub create { $sth_cc->execute($bug->bug_id, $user_id); } + # Add in keywords + my $sth_keyword = $dbh->prepare( + 'INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)'); + foreach my $keyword_id (map($_->id, @$keywords)) { + $sth_keyword->execute($bug->bug_id, $keyword_id); + } + return $bug; } @@ -585,14 +598,14 @@ sub _check_keywords { $keyword_string = trim($keyword_string); return [] if (!$keyword_string || !Bugzilla->user->in_group('editbugs')); - my %keyword_ids; + my %keywords; foreach my $keyword (split(/[\s,]+/, $keyword_string)) { next unless $keyword; my $obj = new Bugzilla::Keyword({ name => $keyword }); ThrowUserError("unknown_keyword", { keyword => $keyword }) if !$obj; - $keyword_ids{$obj->id} = 1; + $keywords{$obj->id} = $obj; } - return [keys %keyword_ids]; + return [values %keywords]; } sub _check_product { diff --git a/post_bug.cgi b/post_bug.cgi index 52bd763d7..ce029b389 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -130,8 +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 @keyword_ids = @{Bugzilla::Bug->_check_keywords($cgi->param('keywords'))}; - my ($depends_on_ids, $blocks_ids) = Bugzilla::Bug->_check_dependencies( scalar $cgi->param('dependson'), scalar $cgi->param('blocked')); @@ -166,6 +164,7 @@ push(@bug_fields, qw( bug_file_loc bug_severity bug_status + keywords short_desc op_sys priority @@ -215,25 +214,7 @@ $dbh->do(q{INSERT INTO longdescs (bug_id, who, bug_when, thetext,isprivate) $comment, $privacy)); my @all_deps; -my $sth_addkeyword = $dbh->prepare(q{ - INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)}); if (Bugzilla->user->in_group("editbugs")) { - foreach my $keyword (@keyword_ids) { - $sth_addkeyword->execute($id, $keyword); - } - if (@keyword_ids) { - # Make sure that we have the correct case for the kw - my $kw_ids = join(', ', @keyword_ids); - my $list = $dbh->selectcol_arrayref(qq{ - SELECT name - FROM keyworddefs - WHERE id IN ($kw_ids) - ORDER BY name}); - my $kw_list = join(', ', @$list); - $dbh->do(q{UPDATE bugs - SET delta_ts = ?, keywords = ? - WHERE bug_id = ?}, undef, ($timestamp, $kw_list, $id)); - } if ($cgi->param('dependson') || $cgi->param('blocked')) { my %deps = (dependson => $depends_on_ids, blocked => $blocks_ids); foreach my $pair (["blocked", "dependson"], ["dependson", "blocked"]) { |