]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 348542: Move keyword validation out of post_bug.cgi and into Bugzilla::Bug
authormkanat%bugzilla.org <>
Tue, 22 Aug 2006 01:53:16 +0000 (01:53 +0000)
committermkanat%bugzilla.org <>
Tue, 22 Aug 2006 01:53:16 +0000 (01:53 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=bkor, a=myk

Bugzilla/Bug.pm
post_bug.cgi

index 343f49e18bcd9764f83acefe4133c2370bab06eb..9c9e2828d9040954242015c7002188fc4d2d1002 100755 (executable)
@@ -35,6 +35,7 @@ use Bugzilla::Constants;
 use Bugzilla::Field;
 use Bugzilla::Flag;
 use Bugzilla::FlagType;
+use Bugzilla::Keyword;
 use Bugzilla::User;
 use Bugzilla::Util;
 use Bugzilla::Error;
@@ -333,6 +334,21 @@ sub _check_component {
     return $obj;
 }
 
+sub _check_keywords {
+    my ($keyword_string) = @_;
+    $keyword_string = trim($keyword_string);
+    return [] if (!$keyword_string || !Bugzilla->user->in_group('editbugs'));
+
+    my %keyword_ids;
+    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;
+    }
+    return [keys %keyword_ids];
+}
+
 sub _check_product {
     my ($name) = @_;
     # Check that the product exists and that the user
index 306bed84cff6f8307d8bbd99b21295756d1fbe56..33e58f182506421a653ff8e54c51ae426c07e52b 100755 (executable)
@@ -221,28 +221,7 @@ $cgi->param(-name => 'component_id', -value => $component->id);
 push(@used_fields, "component_id");
 
 my @cc_ids = @{Bugzilla::Bug::_check_cc([$cgi->param('cc')])};
-
-# Check for valid keywords and create list of keywords to be added to db
-# (validity routine copied from process_bug.cgi)
-my @keywordlist;
-my %keywordseen;
-
-if ($cgi->param('keywords') && UserInGroup("editbugs")) {
-    foreach my $keyword (split(/[\s,]+/, $cgi->param('keywords'))) {
-        if ($keyword eq '') {
-           next;
-        }
-        my $keyword_obj = new Bugzilla::Keyword({name => $keyword});
-        if (!$keyword_obj) {
-            ThrowUserError("unknown_keyword",
-                           { keyword => $keyword });
-        }
-        if (!$keywordseen{$keyword_obj->id}) {
-            push(@keywordlist, $keyword_obj->id);
-            $keywordseen{$keyword_obj->id} = 1;
-        }
-    }
-}
+my @keyword_ids = @{Bugzilla::Bug::_check_keywords($cgi->param('keywords'))};
 
 if (Bugzilla->params->{"strict_isolation"}) {
     my @blocked_users = ();
@@ -439,12 +418,12 @@ my @all_deps;
 my $sth_addkeyword = $dbh->prepare(q{
             INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)});
 if (UserInGroup("editbugs")) {
-    foreach my $keyword (@keywordlist) {
+    foreach my $keyword (@keyword_ids) {
         $sth_addkeyword->execute($id, $keyword);
     }
-    if (@keywordlist) {
+    if (@keyword_ids) {
         # Make sure that we have the correct case for the kw
-        my $kw_ids = join(', ', @keywordlist);
+        my $kw_ids = join(', ', @keyword_ids);
         my $list = $dbh->selectcol_arrayref(qq{
                                     SELECT name 
                                       FROM keyworddefs