diff options
Diffstat (limited to 'rt/etc/upgrade/split-out-cf-categories')
-rwxr-xr-x | rt/etc/upgrade/split-out-cf-categories | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/rt/etc/upgrade/split-out-cf-categories b/rt/etc/upgrade/split-out-cf-categories deleted file mode 100755 index d4077ce54..000000000 --- a/rt/etc/upgrade/split-out-cf-categories +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/perl -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC -# <jesse@bestpractical.com> -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -use strict; -use warnings; - -use lib "local/lib"; -use lib "lib"; - -use RT; -RT::LoadConfig(); -RT->Config->Set('LogToScreen' => 'debug'); -RT::Init(); - -$| = 1; - -$RT::Handle->BeginTransaction(); - -use RT::CustomFields; -my $CFs = RT::CustomFields->new( $RT::SystemUser ); -$CFs->UnLimit; -$CFs->Limit( FIELD => 'Type', VALUE => 'Select' ); - -my $seen; -while (my $cf = $CFs->Next ) { - next if $cf->BasedOnObj->Id; - my @categories; - my %mapping; - my $values = $cf->Values; - while (my $value = $values->Next) { - next unless defined $value->Category and length $value->Category; - push @categories, $value->Category unless grep {$_ eq $value->Category} @categories; - $mapping{$value->Name} = $value->Category; - } - next unless @categories; - - $seen++; - print "Found CF '@{[$cf->Name]}' with categories:\n"; - print " $_\n" for @categories; - - print "Split this CF's categories into a hierarchical custom field (Y/n)? "; - my $dothis = <>; - next if $dothis =~ /n/i; - - print "Enter name of CF to create as category ('@{[$cf->Name]} category'): "; - my $newname = <>; - chomp $newname; - $newname = $cf->Name . " category" unless length $newname; - - # bump the CF's sort oder up by one - $cf->SetSortOrder( ($cf->SortOrder || 0) + 1 ); - - # ..and add a new CF before it - my $new = RT::CustomField->new( $RT::SystemUser ); - my ($id, $msg) = $new->Create( - Name => $newname, - Type => 'Select', - MaxValues => 1, - LookupType => $cf->LookupType, - SortOrder => $cf->SortOrder - 1, - ); - die "Can't create custom field '$newname': $msg" unless $id; - - # Set the CF to be based on what we just made - $cf->SetBasedOn( $new->Id ); - - # Apply it to all of the same things - { - my $ocfs = RT::ObjectCustomFields->new( $RT::SystemUser ); - $ocfs->LimitToCustomField( $cf->Id ); - while (my $ocf = $ocfs->Next) { - my $newocf = RT::ObjectCustomField->new( $RT::SystemUser ); - ($id, $msg) = $newocf->Create( - SortOrder => $ocf->SortOrder, - CustomField => $new->Id, - ObjectId => $ocf->ObjectId, - ); - die "Can't create ObjectCustomField: $msg" unless $id; - } - } - - # Copy over all of the rights - { - my $acl = RT::ACL->new( $RT::SystemUser ); - $acl->LimitToObject( $cf ); - while (my $ace = $acl->Next) { - my $newace = RT::ACE->new( $RT::SystemUser ); - ($id, $msg) = $newace->Create( - PrincipalId => $ace->PrincipalId, - PrincipalType => $ace->PrincipalType, - RightName => $ace->RightName, - Object => $new, - ); - die "Can't assign rights: $msg" unless $id; - } - } - - # Add values for all of the categories - for my $i (0..$#categories) { - ($id, $msg) = $new->AddValue( - Name => $categories[$i], - SortOrder => $i + 1, - ); - die "Can't create custom field value: $msg" unless $id; - } - - # Grovel through all ObjectCustomFieldValues, and add the - # appropriate category - { - my $ocfvs = RT::ObjectCustomFieldValues->new( $RT::SystemUser ); - $ocfvs->LimitToCustomField( $cf->Id ); - while (my $ocfv = $ocfvs->Next) { - next unless exists $mapping{$ocfv->Content}; - my $newocfv = RT::ObjectCustomFieldValue->new( $RT::SystemUser ); - ($id, $msg) = $newocfv->Create( - CustomField => $new->Id, - ObjectType => $ocfv->ObjectType, - ObjectId => $ocfv->ObjectId, - Content => $mapping{$ocfv->Content}, - ); - } - } -} - -$RT::Handle->Commit; -print "No custom fields with categories found\n" unless $seen; |