Commit e0c777f3 authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

Bug 351345: Move keyword insertion out of post_bug.cgi and into Bugzilla::Bug

Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=justdave
parent bb61c992
...@@ -118,6 +118,7 @@ sub VALIDATORS { ...@@ -118,6 +118,7 @@ sub VALIDATORS {
cc => \&_check_cc, cc => \&_check_cc,
deadline => \&_check_deadline, deadline => \&_check_deadline,
estimated_time => \&_check_estimated_time, estimated_time => \&_check_estimated_time,
keywords => \&_check_keywords,
op_sys => \&_check_op_sys, op_sys => \&_check_op_sys,
priority => \&_check_priority, priority => \&_check_priority,
product => \&_check_product, product => \&_check_product,
...@@ -249,6 +250,11 @@ sub create { ...@@ -249,6 +250,11 @@ sub create {
my $groups = $params->{groups}; my $groups = $params->{groups};
delete $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); my $bug = $class->insert_create_data($params);
# Add the group restrictions # Add the group restrictions
...@@ -264,6 +270,13 @@ sub create { ...@@ -264,6 +270,13 @@ sub create {
$sth_cc->execute($bug->bug_id, $user_id); $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; return $bug;
} }
...@@ -585,14 +598,14 @@ sub _check_keywords { ...@@ -585,14 +598,14 @@ sub _check_keywords {
$keyword_string = trim($keyword_string); $keyword_string = trim($keyword_string);
return [] if (!$keyword_string || !Bugzilla->user->in_group('editbugs')); return [] if (!$keyword_string || !Bugzilla->user->in_group('editbugs'));
my %keyword_ids; my %keywords;
foreach my $keyword (split(/[\s,]+/, $keyword_string)) { foreach my $keyword (split(/[\s,]+/, $keyword_string)) {
next unless $keyword; next unless $keyword;
my $obj = new Bugzilla::Keyword({ name => $keyword }); my $obj = new Bugzilla::Keyword({ name => $keyword });
ThrowUserError("unknown_keyword", { keyword => $keyword }) if !$obj; 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 { sub _check_product {
......
...@@ -130,8 +130,6 @@ $comment = Bugzilla::Bug->_check_comment($cgi->param('comment')); ...@@ -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. # OK except for the fact that it causes e-mail to be suppressed.
$comment = $comment ? $comment : " "; $comment = $comment ? $comment : " ";
my @keyword_ids = @{Bugzilla::Bug->_check_keywords($cgi->param('keywords'))};
my ($depends_on_ids, $blocks_ids) = Bugzilla::Bug->_check_dependencies( my ($depends_on_ids, $blocks_ids) = Bugzilla::Bug->_check_dependencies(
scalar $cgi->param('dependson'), scalar $cgi->param('blocked')); scalar $cgi->param('dependson'), scalar $cgi->param('blocked'));
...@@ -166,6 +164,7 @@ push(@bug_fields, qw( ...@@ -166,6 +164,7 @@ push(@bug_fields, qw(
bug_file_loc bug_file_loc
bug_severity bug_severity
bug_status bug_status
keywords
short_desc short_desc
op_sys op_sys
priority priority
...@@ -215,25 +214,7 @@ $dbh->do(q{INSERT INTO longdescs (bug_id, who, bug_when, thetext,isprivate) ...@@ -215,25 +214,7 @@ $dbh->do(q{INSERT INTO longdescs (bug_id, who, bug_when, thetext,isprivate)
$comment, $privacy)); $comment, $privacy));
my @all_deps; my @all_deps;
my $sth_addkeyword = $dbh->prepare(q{
INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)});
if (Bugzilla->user->in_group("editbugs")) { 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')) { if ($cgi->param('dependson') || $cgi->param('blocked')) {
my %deps = (dependson => $depends_on_ids, blocked => $blocks_ids); my %deps = (dependson => $depends_on_ids, blocked => $blocks_ids);
foreach my $pair (["blocked", "dependson"], ["dependson", "blocked"]) { foreach my $pair (["blocked", "dependson"], ["dependson", "blocked"]) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment