]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 395461: Allow multi-select fields to show up in buglist.cgi
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 18 Mar 2010 13:11:27 +0000 (06:11 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 18 Mar 2010 13:11:27 +0000 (06:11 -0700)
r=dkl, a=mkanat

Bugzilla/Install/DB.pm
Bugzilla/Search.pm
contrib/fixperms.pl [changed mode: 0644->0755]
editfields.cgi

index 28f91a23c743af53bd6e0e33622c1a19ac837f97..1a3ffc69b198541d1cb1ca44fc99de3f32708e71 100644 (file)
@@ -105,6 +105,8 @@ sub update_fielddefs_definition {
     #2008-08-26 elliotte_martin@yahoo.com - Bug 251556
     $dbh->bz_add_column('fielddefs', 'reverse_desc', {TYPE => 'TINYTEXT'});
 
+    $dbh->do('UPDATE fielddefs SET buglist = 1
+               WHERE custom = 1 AND type = ' . FIELD_TYPE_MULTI_SELECT);
 
     # Remember, this is not the function for adding general table changes.
     # That is below. Add new changes to the fielddefs table above this
index 2c36fe233d06701e52c04b68efd48626718db3d5..76c4cd9509d134e88b948def2bdf2911a53b6e4b 100644 (file)
@@ -162,8 +162,18 @@ sub COLUMNS {
     foreach my $field (Bugzilla->get_fields({ obsolete => 0, buglist => 1 })) {
         my $id = $field->name;
         $id = $old_names{$id} if exists $old_names{$id};
-        my $sql = 'bugs.' . $field->name;
-        $sql = $special_sql{$id} if exists $special_sql{$id};
+        my $sql;
+        if (exists $special_sql{$id}) {
+            $sql = $special_sql{$id};
+        }
+        elsif ($field->type == FIELD_TYPE_MULTI_SELECT) {
+            $sql = $dbh->sql_group_concat(
+                'DISTINCT map_bug_' . $field->name . '.value',
+                $dbh->quote(', '));
+        }
+        else {
+            $sql = 'bugs.' . $field->name;
+        }
         $columns{$id} = { name => $sql, title => $field->description };
     }
 
@@ -273,6 +283,12 @@ sub init {
         push(@supptables, "LEFT JOIN longdescs AS ldtime " .
                           "ON ldtime.bug_id = bugs.bug_id");
     }
+    foreach my $field (@multi_select_fields) {
+        my $field_name = $field->name;
+        next if !grep($_ eq $field_name, @fields);
+        push(@supptables, "LEFT JOIN bug_$field_name AS map_bug_$field_name"
+                          . " ON map_bug_$field_name.bug_id = bugs.bug_id");
+    }
 
     if (grep($_ eq 'flagtypes.name', @fields)) {
         push(@supptables, "LEFT JOIN flags ON flags.bug_id = bugs.bug_id AND attach_id IS NULL");
old mode 100644 (file)
new mode 100755 (executable)
index 4e8733752db35cefea371e8f88d9934b245723ee..35f67ae3fe0561aeba19ca48b6bc63a8564d77c9 100755 (executable)
@@ -64,7 +64,7 @@ elsif ($action eq 'new') {
         enter_bug   => scalar $cgi->param('enter_bug'),
         obsolete    => scalar $cgi->param('obsolete'),
         custom      => 1,
-        buglist     => (scalar $cgi->param('type') == FIELD_TYPE_MULTI_SELECT ? 0 : 1),
+        buglist     => 1,
         visibility_field_id => scalar $cgi->param('visibility_field_id'),
         visibility_value_id => scalar $cgi->param('visibility_value_id'),
         value_field_id => scalar $cgi->param('value_field_id'),