use strict; use warnings; our @Initial = ( sub { # make sure global CFs are not applied to local objects my $ocfs = RT::ObjectCustomFields->new( RT->SystemUser ); $ocfs->Limit( FIELD => 'ObjectId', OPERATOR => '!=', VALUE => 0 ); my $alias = $ocfs->Join( FIELD1 => 'CustomField', TABLE2 => 'ObjectCustomFields', FIELD2 => 'CustomField', ); $ocfs->Limit( ALIAS => $alias, FIELD => 'ObjectId', VALUE => 0 ); while ( my $ocf = $ocfs->Next ) { $ocf->Delete; } }, sub { # sort SortOrder my $sth = RT->DatabaseHandle->dbh->prepare( "SELECT cfs.LookupType, ocfs.id" ." FROM ObjectCustomFields ocfs, CustomFields cfs" ." WHERE cfs.id = ocfs.CustomField" ." ORDER BY cfs.LookupType, ocfs.SortOrder, cfs.Name" ); $sth->execute; my ($i, $prev_type) = (0, ''); while ( my ($lt, $id) = $sth->fetchrow_array ) { $i = 0 if $prev_type ne $lt; my $ocf = RT::ObjectCustomField->new( RT->SystemUser ); $ocf->Load( $id ); my ($status, $msg) = $ocf->SetSortOrder( $i++ ); RT->Logger->warning("Couldn't set SortOrder: $msg") unless $status; $prev_type = $lt; } }, );