[Rt-commit] rt branch, 4.0/watching-groups-in-create-tickets-action, created. rt-4.0.4-109-gb021c8a

Ruslan Zakirov ruz at bestpractical.com
Tue Dec 6 08:03:12 EST 2011


The branch, 4.0/watching-groups-in-create-tickets-action has been created
        at  b021c8a6668d52f1edd871b2b917449572910878 (commit)

- Log -----------------------------------------------------------------
commit b021c8a6668d52f1edd871b2b917449572910878
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Tue Dec 6 16:59:54 2011 +0400

    {Requestor,Cc,AdminCc}Group in CreateTickets (offline tool)
    
    At this moment groups can be added as watchers on tickets,
    but you have to use principal id for that as text defaults
    to users. These new options allow you to use group names.

diff --git a/lib/RT/Action/CreateTickets.pm b/lib/RT/Action/CreateTickets.pm
index 32b2bc0..5434145 100644
--- a/lib/RT/Action/CreateTickets.pm
+++ b/lib/RT/Action/CreateTickets.pm
@@ -196,6 +196,9 @@ A complete list of acceptable fields for this beastie:
    +   Requestor       => Email address
    +   Cc              => Email address 
    +   AdminCc         => Email address 
+   +   RequestorGroup  => Group name
+   +   CcGroup         => Group name
+   +   AdminCcGroup    => Group name
        TimeWorked      => 
        TimeEstimated   => 
        TimeLeft        => 
@@ -714,7 +717,11 @@ sub ParseLines {
                     $args{$tag} =~ s/^\s+//g;
                     $args{$tag} =~ s/\s+$//g;
                 }
-                if (($tag =~ /^(requestor|cc|admincc)$/i or grep {lc $_ eq $tag} keys %LINKTYPEMAP) and $args{$tag} =~ /,/) {
+                if (
+                    ($tag =~ /^(requestor|cc|admincc)(group)?$/i
+                        or grep {lc $_ eq $tag} keys %LINKTYPEMAP)
+                    and $args{$tag} =~ /,/
+                ) {
                     $args{$tag} = [ split /,\s*/, $args{$tag} ];
                 }
             }
@@ -737,6 +744,21 @@ sub ParseLines {
         $args{$date} = $dateobj->ISO;
     }
 
+    foreach my $role (qw(requestor cc admincc)) {
+        next unless my $value = $args{ $role . 'group' };
+
+        my $group = RT::Group->new( $self->CurrentUser );
+        $group->LoadUserDefinedGroup( $value );
+        unless ( $group->id ) {
+            $RT::Logger->error("Couldn't load group '$value'");
+            next;
+        }
+
+        $args{ $role } = $args{ $role } ? [$args{ $role }] : []
+            unless ref $args{ $role };
+        push @{ $args{ $role } }, $group->PrincipalObj->id;
+    }
+
     $args{'requestor'} ||= $self->TicketObj->Requestors->MemberEmailAddresses
         if $self->TicketObj;
 
diff --git a/t/web/offline.t b/t/web/offline.t
new file mode 100644
index 0000000..111f5f6
--- /dev/null
+++ b/t/web/offline.t
@@ -0,0 +1,78 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use RT::Test tests => 18;
+
+my ( $url, $m ) = RT::Test->started_ok;
+ok( $m->login, 'logged in' );
+
+{
+    my $template = <<EOF;
+===Create-Ticket: ticket1
+Queue: General
+Subject: test
+Status: new
+EOF
+    my $ticket = create_ticket_offline( $template );
+    ok $ticket->id, 'created a ticket with offline tool';
+    is $ticket->QueueObj->Name, 'General', 'correct value';
+    is $ticket->Subject, 'test', 'correct value';
+    is $ticket->Status, 'new', 'correct value';
+}
+
+{
+    my $template = <<'EOF';
+===Create-Ticket: ticket1
+Queue: General
+Subject: test
+Status: new
+Requestor: test at example.com
+EOF
+    my $ticket = create_ticket_offline( $template );
+    ok $ticket->id, 'created a ticket with offline tool';
+    is $ticket->RequestorAddresses, 'test at example.com', 'correct value';
+}
+
+{
+    my $group = RT::Group->new(RT->SystemUser);
+    my ($id, $msg) = $group->CreateUserDefinedGroup( Name => 'test' );
+    ok $id, "created a user defined group";
+
+    my $template = <<'EOF';
+===Create-Ticket: ticket1
+Queue: General
+Subject: test
+Status: new
+Requestor: test at example.com
+RequestorGroup: test
+EOF
+    my $ticket = create_ticket_offline( $template );
+    ok $ticket->id, 'created a ticket with offline tool';
+    ok grep(
+        { $_->MemberId eq $group->id }
+        @{ $ticket->Requestors->MembersObj->ItemsArrayRef }
+    ), 'correct value' ;
+    is $ticket->RequestorAddresses, 'test at example.com', 'correct value';
+}
+
+sub create_ticket_offline {
+    my $template = shift;
+
+    $m->get_ok( $url . '/Tools/Offline.html' );
+
+    $m->submit_form(
+        form_name => 'TicketUpdate',
+        fields    => { string => $template },
+        button    => 'UpdateTickets',
+    );
+
+    my $ticket = RT::Ticket->new( RT->SystemUser );
+    $m->content_like( qr/Ticket \d+ created/, 'found ticket created message' )
+        or return $ticket;
+
+    $ticket->Load( $m->content =~ /Ticket (\d+) created/ );
+    return $ticket;
+}
+
+

-----------------------------------------------------------------------


More information about the Rt-commit mailing list