OnCreateSetUserDetails
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;