diff options
Diffstat (limited to 'rt/etc/upgrade/3.9.7/content')
-rw-r--r-- | rt/etc/upgrade/3.9.7/content | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/rt/etc/upgrade/3.9.7/content b/rt/etc/upgrade/3.9.7/content new file mode 100644 index 000000000..504ddf18f --- /dev/null +++ b/rt/etc/upgrade/3.9.7/content @@ -0,0 +1,82 @@ +my $move_attributes = sub { + my ($table, $type, $column) = @_; + my $query = "UPDATE $table SET $column = (SELECT Content FROM Attributes WHERE" + ." Name = ? AND ObjectType = ? AND $table.id = Attributes.ObjectId)"; + + my $res = $RT::Handle->SimpleQuery( $query, $column, $type ); + unless ( $res ) { + $RT::Logger->error("Failed to move $column on $type from Attributes into $table table"); + return; + } + + $query = 'DELETE FROM Attributes WHERE Name = ? AND ObjectType = ?'; + $res = $RT::Handle->SimpleQuery( $query, $column, $type ); + unless ( $res ) { + $RT::Logger->error("Failed to delete $column on $type from Attributes"); + return; + } + return 1; +}; + +@Initial = ( + sub { + return $move_attributes->( 'Users', 'RT::User', 'AuthToken'); + }, + sub { + return $move_attributes->( 'CustomFields', 'RT::CustomField', 'RenderType'); + }, + sub { + my $cfs = RT::CustomFields->new($RT::SystemUser); + $cfs->UnLimit; + $cfs->FindAllRows; + while ( my $cf = $cfs->Next ) { + # Explicitly remove 'ORDER BY id asc' to emulate the + # previous functionality, where Pg might return the the + # rows in arbitrary order + $cf->Attributes->OrderByCols(); + + my $attr = $cf->FirstAttribute('BasedOn'); + next unless $attr; + $cf->SetBasedOn($attr->Content); + } + $query = 'DELETE FROM Attributes WHERE Name = ? AND ObjectType = ?'; + $res = $RT::Handle->SimpleQuery( $query, 'BasedOn', 'RT::CustomField' ); + unless ( $res ) { + $RT::Logger->error("Failed to delete BasedOn CustomFields from Attributes"); + return; + } + return 1; + }, + sub { + $move_attributes->( 'CustomFields', 'RT::CustomField', 'ValuesClass') + or return; + + my $query = "UPDATE CustomFields SET ValuesClass = NULL WHERE ValuesClass = ?"; + my $res = $RT::Handle->SimpleQuery( $query, 'RT::CustomFieldValues' ); + unless ( $res ) { + $RT::Logger->error("Failed to replace default with NULLs"); + return; + } + return 1; + }, + sub { + my $attr = RT->System->FirstAttribute('BrandedSubjectTag'); + return 1 unless $attr; + + my $map = $attr->Content || {}; + while ( my ($qid, $tag) = each %$map ) { + my $queue = RT::Queue->new( RT->SystemUser ); + $queue->Load( $qid ); + unless ( $queue->id ) { + $RT::Logger->warning("Couldn't load queue #$qid. Skipping..."); + next; + } + + my ($status, $msg) = $queue->SetSubjectTag($tag); + unless ( $status ) { + $RT::Logger->error("Couldn't set subject tag for queue #$qid: $msg"); + next; + } + } + }, +); |