summaryrefslogtreecommitdiff
path: root/FS/FS/TicketSystem.pm
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-09-27 16:02:03 -0700
committerMark Wells <mark@freeside.biz>2013-09-27 16:02:03 -0700
commite3012c0751dad6710ea35b6d074b551bffdad09b (patch)
tree14d79b124cab2c04677a31746dfd0ee532d2d5f6 /FS/FS/TicketSystem.pm
parent0792a884aea4a30b1c227875a88270928602ff00 (diff)
clean up invalid ticket links on upgrade, #25067
Diffstat (limited to 'FS/FS/TicketSystem.pm')
-rw-r--r--FS/FS/TicketSystem.pm15
1 files changed, 15 insertions, 0 deletions
diff --git a/FS/FS/TicketSystem.pm b/FS/FS/TicketSystem.pm
index c1c69fa..fa54e0b 100644
--- a/FS/FS/TicketSystem.pm
+++ b/FS/FS/TicketSystem.pm
@@ -342,6 +342,21 @@ sub _upgrade_data {
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;
+ }
+
return;
}