X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2FTicketSystem.pm;h=a6daf7e06c158f22ca79c8456c641470812410d9;hp=1020a8cc362f958c815c547827c68e36f01b9e16;hb=c58b5c1cef23066263aae5c506824310866ef64b;hpb=83053569b3d965924e2e1d4f5b199609ec7c29af diff --git a/FS/FS/TicketSystem.pm b/FS/FS/TicketSystem.pm index 1020a8cc3..a6daf7e06 100644 --- a/FS/FS/TicketSystem.pm +++ b/FS/FS/TicketSystem.pm @@ -35,31 +35,28 @@ sub _upgrade_data { FS::TicketSystem->init; my $session = FS::TicketSystem->session(); - my $CurrentUser = $session->{'CurrentUser'} - or die 'freeside-upgrade must run as a valid RT user'; - - # CustomFieldChange scrip condition - my $ScripCondition = RT::ScripCondition->new($CurrentUser); - $ScripCondition->LoadByCols('ExecModule' => 'CustomFieldChange'); - if (!defined($ScripCondition->Id)) { - my ($val, $msg) = $ScripCondition->Create( - 'Name' => 'On Custom Field Change', - 'Description' => 'When a custom field is changed to some value', - 'ExecModule' => 'CustomFieldChange', - 'ApplicableTransTypes' => 'Any', + # bypass RT ACLs--we're going to do lots of things + my $CurrentUser = $RT::SystemUser; + + # selfservice user + my $User = RT::User->new($CurrentUser); + $User->Load('%%%SELFSERVICE_USER%%%'); + if (!defined($User->Id)) { + my ($val, $msg) = $User->Create( + 'Name' => '%%%SELFSERVICE_USER%%%', + 'Gecos' => '%%%SELFSERVICE_USER%%%', + 'Privileged' => 1, + # any other fields needed? ); die $msg if !$val; } - - # SetPriority scrip action - my $ScripAction = RT::ScripAction->new($CurrentUser); - $ScripAction->LoadByCols('ExecModule' => 'SetPriority'); - if (!defined($ScripAction->Id)) { - my ($val, $msg) = $ScripAction->Create( - 'Name' => 'Set Priority', - 'Description' => 'Set ticket priority', - 'ExecModule' => 'SetPriority', - 'Argument' => '', + my $Principal = $User->PrincipalObj; # can this ever fail? + my @rights = ( qw(ShowTicket SeeQueue ModifyTicket ReplyToTicket) ); + foreach (@rights) { + next if $Principal->HasRight( 'Right' => $_, Object => $RT::System ); + my ($val, $msg) = $Principal->GrantRight( + 'Right' => $_, + 'Object' => $RT::System, ); die $msg if !$val; } @@ -85,7 +82,7 @@ sub _upgrade_data { die $msg if !$val; } - # Create any missing scrips + # Load from RT data file our (@Groups, @Users, @ACL, @Queues, @ScripActions, @ScripConditions, @Templates, @CustomFields, @Scrips, @Attributes, @Initial, @Final); my $datafile = '%%%RT_PATH%%%/etc/initialdata'; @@ -95,6 +92,7 @@ sub _upgrade_data { return; } + # Cache existing ScripCondition, ScripAction, and Template IDs my $search = RT::ScripConditions->new($CurrentUser); $search->UnLimit; my %condition = map { lc($_->Name), $_->Id } @{ $search->ItemsArrayRef }; @@ -107,6 +105,37 @@ sub _upgrade_data { $search->UnLimit; my %template = map { lc($_->Name), $_->Id } @{ $search->ItemsArrayRef }; + # ScripConditions + my $ScripCondition = RT::ScripCondition->new($CurrentUser); + foreach my $sc (@ScripConditions) { + # $sc: Name, Description, ApplicableTransTypes, ExecModule, Argument + next if exists( $condition{ lc($sc->{Name}) } ); + my ($val, $msg) = $ScripCondition->Create( %$sc ); + die $msg if !$val; + $condition{ lc($ScripCondition->Name) } = $ScripCondition->Id; + } + + # ScripActions + my $ScripAction = RT::ScripAction->new($CurrentUser); + foreach my $sa (@ScripActions) { + # $sa: Name, Description, ExecModule, Argument + next if exists( $action{ lc($sa->{Name}) } ); + my ($val, $msg) = $ScripAction->Create( %$sa ); + die $msg if !$val; + $action{ lc($ScripAction->Name) } = $ScripAction->Id; + } + + # Templates + my $Template = RT::Template->new($CurrentUser); + foreach my $t (@Templates) { + # $t: Queue, Name, Description, Content + next if exists( $template{ lc($t->{Name}) } ); + my ($val, $msg) = $Template->Create( %$t ); + die $msg if !$val; + $template{ lc($Template->Name) } = $Template->Id; + } + + # Scrips my $Scrip = RT::Scrip->new($CurrentUser); foreach my $s ( @Scrips ) { my $desc = $s->{'Description'};