OnCreateSetUserDetails: Difference between revisions

From Request Tracker Wiki
Jump to navigation Jump to search
m (2 revisions imported)
(No difference)

Revision as of 15:15, 6 April 2016

This scrip is a work in progress (it works for me, but is not well-polished). It pulls information from a vCard if present, and uses it to set user details. In particular note that it currently relies upon the presence of an address of type x-rt. For your use you'll probably want that to be work or home, or prefer one and fail over to the other e.g;

-my $adr = $card->get({node_type=>'addresses', types=>'x-rt'})->[0];
+my $adr = $card->get({node_type=>'addresses', types=>'home'})->[0] || $card->get({node_type=>'addresses', types=>'work'})->[0] ;

Scrip Fields:

Description: OnCreate Set user details
Condition: On Create
Action: User Defined
Template: Global Template: Blank
Stage: Transaction Create

Custom Condition:

#return $Attachment->First->ContentType eq 'text/x-vcard' ? 1 : 0;
 my $Attachments = $self->TransactionObj->Attachments('text/x-vcard');
 return $Attachments->Count() ? 1 : 0;
 
 

Custom action preparation code:

use Text::vCard::Addressbook;
 my $Transaction = $self->TransactionObj;
 my $body = $Transaction->Attachments('text/x-vcard')->First->Content;
 
 #Parse
 my $card = Text::vCard::Addressbook->new({source_text=>$body})->vcards()->[0];
 return 0 unless $card; #sometimes the condition ->Count() fails :-(
 my $adr = $card->get({node_type=>'addresses', types=>'x-rt'})->[0];
 my %usr = (
           requestor=>$card->email,
           RealName=>$card->fullname,
           Organization=>$card->get({node_type=>'ORG'})->[0]->name,
           Address1=>$adr->street,
           Address2=>$adr->extended,
           City=>$adr->city,
           State=>$adr->region,
           Country=>$adr->country,
           Zip=>$adr->post_code,
          );
 foreach my $tel ( $card->get({node_type=>'TEL'}) ){
    $usr{HomePhone} = $tel->value if $tel->is_type('home');
    $usr{WorkPhone} = $tel->value if $tel->is_type('work');
    $usr{PagerPhone} = $tel->value if $tel->is_type('pager');
    $usr{MobilePhone} = $tel->value if $tel->is_type('cell');
 }
 
 #Tweak requestor with %usr
 my $user = RT::User->new($RT::SystemUser);
 $user->LoadByEmail(delete($usr{requestor}));
 foreach my $attr ( keys %usr){
   my $method='Set' . $attr;
   $user->$method($usr{$attr});
 }
 
 

Custom action cleanup code:

1;