summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Bug.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Bug.pm')
-rwxr-xr-xBugzilla/Bug.pm19
1 files changed, 16 insertions, 3 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 {