From e0c777f375e063fbe16dbb18a995bf865475ca43 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Sun, 10 Sep 2006 09:24:21 +0000 Subject: Bug 351345: Move keyword insertion out of post_bug.cgi and into Bugzilla::Bug Patch By Max Kanat-Alexander r=LpSolit, a=justdave --- Bugzilla/Bug.pm | 19 ++++++++++++++++--- 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"]) { -- cgit v1.2.3-24-g4f1b