[freeside-commits] freeside/FS/FS/ClientAPI MyAccount.pm, 1.113.2.3, 1.113.2.4

Erik Levinson levinse at wavetail.420.am
Thu Dec 16 17:16:06 PST 2010


Update of /home/cvs/cvsroot/freeside/FS/FS/ClientAPI
In directory wavetail.420.am:/tmp/cvs-serv3011/FS/FS/ClientAPI

Modified Files:
      Tag: FREESIDE_2_1_BRANCH
	MyAccount.pm 
Log Message:
self-service improvements, RT10883

Index: MyAccount.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/ClientAPI/MyAccount.pm,v
retrieving revision 1.113.2.3
retrieving revision 1.113.2.4
diff -u -w -d -r1.113.2.3 -r1.113.2.4
--- MyAccount.pm	15 Dec 2010 15:09:49 -0000	1.113.2.3
+++ MyAccount.pm	17 Dec 2010 01:16:03 -0000	1.113.2.4
@@ -1773,6 +1773,59 @@
 
 }
 
+sub get_ticket {
+  my $p = shift;
+  my($context, $session, $custnum) = _custoragent_session_custnum($p);
+  return { 'error' => $session } if $context eq 'error';
+
+  warn "$me get_ticket: initializing ticket system\n" if $DEBUG;
+  FS::TicketSystem->init();
+
+  if(length($p->{'reply'})) {
+      my @err_or_res = FS::TicketSystem->correspond_ticket(
+	'', #create RT session based on FS CurrentUser (fs_selfservice)
+	'ticket_id' => $p->{'ticket_id'},
+	'content' => $p->{'reply'},
+      );
+    
+    return { 'error' => 'unable to reply to ticket' } 
+	unless ( $err_or_res[0] != 0 && defined $err_or_res[2] );
+  }
+
+  warn "$me get_ticket: getting ticket\n" if $DEBUG;
+  my $err_or_ticket = FS::TicketSystem->get_ticket(
+    '', #create RT session based on FS CurrentUser (fs_selfservice)
+    'ticket_id' => $p->{'ticket_id'},
+  );
+
+  if ( ref($err_or_ticket) ) {
+
+# since we're bypassing the RT security/permissions model by always using
+# fs_selfservice as the RT user (as opposed to a requestor, which we
+# can't do since we want all tickets linked to a cust), we check below whether
+# the requested ticket was actually linked to this customer
+    my @custs = @{$err_or_ticket->{'custs'}};
+    my @txns = @{$err_or_ticket->{'txns'}};
+
+    return { 'error' => 'no customer' } unless ( $custnum && scalar(@custs) );
+
+    return { 'error' => 'invalid ticket requested' } 
+	unless grep($_ eq $custnum, @custs);
+
+    warn "$me get_ticket: sucessful: \n"
+      if $DEBUG;
+    return { 'error'     => '',
+             'transactions' => \@txns,
+	     'ticket_id' => $p->{'ticket_id'},
+           };
+  } else {
+    warn "$me create_ticket: unsucessful: $err_or_ticket\n"
+      if $DEBUG;
+    return { 'error' => $err_or_ticket };
+  }
+}
+
+
 #--
 
 sub _custoragent_session_custnum {



More information about the freeside-commits mailing list