[Rt-commit] r9121 - in rt/branches/3.6-RELEASE: html/REST/1.0/Forms/ticket

sunnavy at bestpractical.com sunnavy at bestpractical.com
Sun Sep 23 00:20:31 EDT 2007


Author: sunnavy
Date: Sun Sep 23 00:20:30 2007
New Revision: 9121

Modified:
   rt/branches/3.6-RELEASE/html/REST/1.0/Forms/ticket/default
   rt/branches/3.6-RELEASE/lib/t/regression/26command_line.t

Log:
do the right way for view and modification of multiple value CF for cli

Modified: rt/branches/3.6-RELEASE/html/REST/1.0/Forms/ticket/default
==============================================================================
--- rt/branches/3.6-RELEASE/html/REST/1.0/Forms/ticket/default	(original)
+++ rt/branches/3.6-RELEASE/html/REST/1.0/Forms/ticket/default	Sun Sep 23 00:20:30 2007
@@ -55,6 +55,7 @@
 </%ARGS>
 <%INIT>
 use MIME::Entity;
+use Text::Balanced qw /extract_quotelike/;
 
 my @comments;
 my ($c, $o, $k, $e) = ("", [], {}, 0);
@@ -217,8 +218,21 @@
 	next unless (!%$fields || (exists $fields->{"cf-".lc $cf->Name}));
         my $vals = $ticket->CustomFieldValues($cf->Id());
         my @out = ();
-        while (my $v = $vals->Next()) {
-            push @out, $v->Content;
+        if ( $cf->SingleValue ) {
+            my $v = $vals->Next;
+            push @out, $v->Content if $v;
+        }
+        else {
+            while (my $v = $vals->Next()) {
+                my $content = $v->Content;
+                $content =~ s/'/\\'/g; 
+                if ( $v->Content =~ /,/ ) {
+                    push @out, q{'} . $content . q{'};
+                }
+                else {
+                    push @out, $content;
+                }
+            }
         }
         push @data, [ 'CF-' . $cf->Name => join ',', @out ];
     }
@@ -332,7 +346,36 @@
                     }
                 }
                 else {
-                    my @new = split ',\s*', $val;
+                    my @new;
+                    my ( $extracted, $remainder ) = extract_quotelike($val);
+                    while ($remainder) {
+                        if ($extracted) {
+                            $extracted =~ s/\\'/'/g;
+                            my $length = length $extracted;
+                            my $first_letter = substr $extracted, 0, 1;
+                            push @new, substr $extracted, 
+                                 $first_letter eq 'q' ? 2 : 1, 
+                                 $first_letter eq 'q' ? $length-3 : $length-2;
+                            $remainder =~ s/\s*,\s*//;
+                        }
+                        else {
+                            my @t = split /,\s*/, $remainder;
+                            push @new, shift @t;
+                            last unless @t;
+                            $remainder =~ s/.*?,\s*//;
+                        }
+                        ( $extracted, $remainder ) =
+                            extract_quotelike($remainder);
+                    }
+                    if ( $extracted ) {
+                        $extracted =~ s/\\'/'/g;
+                        my $length = length $extracted;
+                        my $first_letter = substr $extracted, 0, 1;
+                        push @new, substr $extracted, 
+                             $first_letter eq 'q' ? 2 : 1, 
+                             $first_letter eq 'q' ? $length-3 : $length-2;
+                    }
+
                     my %new;
                     $new{$_}++ for @new;
                      

Modified: rt/branches/3.6-RELEASE/lib/t/regression/26command_line.t
==============================================================================
--- rt/branches/3.6-RELEASE/lib/t/regression/26command_line.t	(original)
+++ rt/branches/3.6-RELEASE/lib/t/regression/26command_line.t	Sun Sep 23 00:20:30 2007
@@ -3,7 +3,7 @@
 use strict;
 use Test::Expect;
 #use Test::More qw/no_plan/;
-use Test::More tests => 241;
+use Test::More tests => 269;
 
 use RT;
 RT::LoadConfig();
@@ -167,13 +167,17 @@
 expect_send("show ticket/$ticket_id -f 'CF-my CF$$'", 'Checking new value');
 expect_like(qr/my CF$$: VALUE/i, 'Verified change');
 
-# Test reading and setting single value custom field with commas
-expect_send("show ticket/$ticket_id -f 'CF-my CF$$'", 'Checking initial value');
-expect_like(qr/my CF$$:/i, 'Verified change');
-expect_send("edit ticket/$ticket_id set 'CF-my CF$$=1,2,3' ", 'Changing CF...');
+# Test reading and setting single value custom field with commas or quotes
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking initial value');
+expect_like(qr/myCF$$:/i, 'Verified change');
+expect_send("edit ticket/$ticket_id set CF-myCF$$=1,2,3", 'Changing CF...');
 expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
-expect_send("show ticket/$ticket_id -f 'CF-my CF$$'", 'Checking new value');
-expect_like(qr/my CF$$: 1,2,3/i, 'Verified change');
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
+expect_like(qr/myCF$$: 1,2,3/i, 'Verified change');
+expect_send("edit ticket/$ticket_id set CF-myCF$$=\"1's,2,3\"", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
+expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
+expect_like(qr/myCF$$: 1's,2,3/i, 'Verified change');
 
 # Test reading and setting custom fields with multiple values
 expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking initial value');
@@ -186,15 +190,42 @@
 expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
 expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
 expect_like(qr/CF-MultipleCF$$: a,\s*b,\s*c/i, 'Verified change');
-expect_send("edit ticket/$ticket_id del CF-MultipleCF$$=a ", 'Changing CF...');
+expect_send("edit ticket/$ticket_id del CF-MultipleCF$$=a", 'Changing CF...');
 expect_like(qr/Ticket $ticket_id updated/, 'del multiple cf');
 expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
 expect_like(qr/CF-MultipleCF$$: b,\s*c/i, 'Verified multiple cf change');
-expect_send("edit ticket/$ticket_id add CF-MultipleCF$$=o ", 'Changing CF...');
+expect_send("edit ticket/$ticket_id add CF-MultipleCF$$=o", 'Changing CF...');
 expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
 expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
 expect_like(qr/CF-MultipleCF$$: b,\s*c,\s*o/i, 'Verified multiple cf change');
 
+expect_send("edit ticket/$ticket_id set CF-MultipleCF$$=\"'a,b,c'\" ", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
+expect_like(qr/CF-MultipleCF$$: 'a,b,c'/i, 'Verified change');
+expect_send("edit ticket/$ticket_id del CF-MultipleCF$$=a", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
+expect_like(qr/CF-MultipleCF$$: 'a,b,c'/i, 'Verified change');
+
+expect_send("edit ticket/$ticket_id set CF-MultipleCF$$=q{a,b,c}", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
+expect_like(qr/CF-MultipleCF$$: 'a,b,c'/i, 'Verified change');
+expect_send("edit ticket/$ticket_id del CF-MultipleCF$$=a", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
+expect_like(qr/CF-MultipleCF$$: 'a,b,c'/i, 'Verified change');
+expect_send("edit ticket/$ticket_id del CF-MultipleCF$$=\"'a,b,c'\"", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
+expect_like(qr/CF-MultipleCF$$: \s*$/i, 'Verified change');
+
+expect_send("edit ticket/$ticket_id set CF-MultipleCF$$=\"q{1,2's,3}\"", 'Changing CF...');
+expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking new value');
+expect_like(qr/CF-MultipleCF$$: '1,2\\'s,3'/i, 'Verified change');
+
 # ...
 # change a ticket's ...[other properties]...
 # ...


More information about the Rt-commit mailing list