summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xBugzilla/Bug.pm19
-rwxr-xr-xpost_bug.cgi21
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"]) {