X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FTicketSystem.pm;h=3c972d0bd67a224903fdc7231f40dc3345572974;hb=2ea729e55651a288bbf3826c888f430806aab04c;hp=165856e5faa6c74d171f083143837c5847657e8b;hpb=7a618d4493ab7a87f6eabfd1ce3630a6b3436c2f;p=freeside.git diff --git a/FS/FS/TicketSystem.pm b/FS/FS/TicketSystem.pm index 165856e5f..3c972d0bd 100644 --- a/FS/FS/TicketSystem.pm +++ b/FS/FS/TicketSystem.pm @@ -209,7 +209,7 @@ sub _upgrade_data { while (my $item = $search->Next) { my ($c, $a, $t) = map {lc $item->$_->Name} ('ScripConditionObj', 'ScripActionObj', 'TemplateObj'); - if ( exists $scrip{$c}{$a}{$t} and $item->Creator == 1 ) { + if ( exists $scrip{$c}{$a} and $item->Creator == 1 ) { warn "Deleting duplicate scrip $c $a [$t]\n"; my ($val, $msg) = $item->Delete; warn "error deleting scrip: $msg\n" if !$val; @@ -220,7 +220,7 @@ sub _upgrade_data { warn "error deleting scrip: $msg\n" if !$val; } else { - $scrip{$c}{$a}{$t} = $item->id; + $scrip{$c}{$a} = $item->id; } } my $Scrip = RT::Scrip->new($CurrentUser); @@ -228,30 +228,42 @@ sub _upgrade_data { my $desc = $s->{'Description'}; my ($c, $a, $t) = map lc, @{ $s }{'ScripCondition', 'ScripAction', 'Template'}; - # skip existing scrips - next if ( exists($scrip{$c}{$a}{$t}) ); - if ( !exists($condition{$c}) ) { - warn "ScripCondition '$c' not found.\n"; - next; - } - if ( !exists($action{$a}) ) { - warn "ScripAction '$a' not found.\n"; - next; - } - if ( !exists($template{$t}) ) { - warn "Template '$t' not found.\n"; - next; + + if ( exists($scrip{$c}{$a}) ) { + $Scrip->Load( $scrip{$c}{$a} ); + } else { # need to create it + + if ( !exists($condition{$c}) ) { + warn "ScripCondition '$c' not found.\n"; + next; + } + if ( !exists($action{$a}) ) { + warn "ScripAction '$a' not found.\n"; + next; + } + if ( !exists($template{$t}) ) { + warn "Template '$t' not found.\n"; + next; + } + my %new_param = ( + ScripCondition => $condition{$c}->[0], + ScripAction => $action{$a}->[0], + Template => $template{$t}->[0], + Queue => 0, + Description => $desc, + ); + warn "Creating scrip: $c $a [$t]\n"; + my ($val, $msg) = $Scrip->Create(%new_param); + die $msg if !$val; + + } #if $scrip{...} + # set the Immutable attribute on them if needed + if ( !$Scrip->FirstAttribute('Immutable') ) { + my ($val, $msg) = + $Scrip->SetAttribute(Name => 'Immutable', Content => '1'); + die $msg if !$val; } - my %new_param = ( - ScripCondition => $condition{$c}->[0], - ScripAction => $action{$a}->[0], - Template => $template{$t}->[0], - Queue => 0, - Description => $desc, - ); - warn "Creating scrip: $c $a [$t]\n"; - my ($val, $msg) = $Scrip->Create(%new_param); - die $msg if !$val; + } #foreach (@Scrips) # one-time fix: accumulator fields (support time, etc.) that had values @@ -319,6 +331,42 @@ sub _upgrade_data { } } + #Pg-specific + my $cve_2013_3373_sql = q( + UPDATE Tickets SET Subject = REPLACE(Subject,E'\n','') + ); + #need this for mysql + #UPDATE Tickets SET Subject = REPLACE(Subject,'\n',''); + + my $cve_2013_3373_sth = $dbh->prepare( $cve_2013_3373_sql) + or die $dbh->errstr; + $cve_2013_3373_sth->execute or die $cve_2013_3373_sth->errstr; + + # Remove dangling customer links, if any + my %target_pkey = ('cust_main' => 'custnum', 'cust_svc' => 'svcnum'); + for my $table (keys %target_pkey) { + my $pkey = $target_pkey{$table}; + my $rows = $dbh->do( + "DELETE FROM links WHERE id IN(". + "SELECT links.id FROM links LEFT JOIN $table ON (links.target = ". + "'freeside://freeside/$table/' || $table.$pkey) ". + "WHERE links.target like 'freeside://freeside/$table/%' ". + "AND $table.$pkey IS NULL". + ")" + ) or die $dbh->errstr; + warn "Removed $rows dangling ticket-$table links\n" if $rows > 0; + } + + # Fix ticket transactions on the Time* fields where the NewValue (or + # OldValue, though this is not known to happen) is an empty string + foreach (qw(newvalue oldvalue)) { + my $rows = $dbh->do( + "UPDATE transactions SET $_ = '0' WHERE objecttype='RT::Ticket' AND ". + "field IN ('TimeWorked', 'TimeEstimated', 'TimeLeft') AND $_ = ''" + ) or die $dbh->errstr; + warn "Fixed $rows transactions with empty time values\n" if $rows > 0; + } + return; }