[Rt-commit] rt branch, 4.4/serialize-json-initialdata, updated. rt-4.4.1-371-gdad2ed4
Shawn Moore
shawn at bestpractical.com
Tue Mar 21 12:22:08 EDT 2017
The branch, 4.4/serialize-json-initialdata has been updated
via dad2ed48853b91fdc47e9e32aa9a17349862a041 (commit)
via 33a5a653998695d709242449bd4e9269268ab276 (commit)
from 7ba97298728fd305759aeb2996dbada46ac63669 (commit)
Summary of changes:
lib/RT/Handle.pm | 45 +++++++++++++++++++++++++++++++++++++--
lib/RT/Migrate/Serializer/JSON.pm | 21 ++++++++++++++++++
2 files changed, 64 insertions(+), 2 deletions(-)
- Log -----------------------------------------------------------------
commit 33a5a653998695d709242449bd4e9269268ab276
Author: Shawn M Moore <shawn at bestpractical.com>
Date: Tue Mar 21 16:21:42 2017 +0000
Add support for OCFVs in initialdata
diff --git a/lib/RT/Handle.pm b/lib/RT/Handle.pm
index 6b6c1c8..24baf62 100644
--- a/lib/RT/Handle.pm
+++ b/lib/RT/Handle.pm
@@ -853,10 +853,10 @@ sub InsertData {
# Slurp in stuff to insert from the datafile. Possible things to go in here:-
our (@Groups, @Users, @Members, @ACL, @Queues, @Classes, @ScripActions, @ScripConditions,
@Templates, @CustomFields, @CustomRoles, @Scrips, @Attributes, @Initial, @Final,
- @Catalogs, @Assets);
+ @Catalogs, @Assets, @OCFVs);
local (@Groups, @Users, @Members, @ACL, @Queues, @Classes, @ScripActions, @ScripConditions,
@Templates, @CustomFields, @CustomRoles, @Scrips, @Attributes, @Initial, @Final,
- @Catalogs, @Assets);
+ @Catalogs, @Assets, @OCFVs);
local $@;
@@ -907,6 +907,7 @@ sub InsertData {
Final => \@Final,
Catalogs => \@Catalogs,
Assets => \@Assets,
+ OCFVs => \@OCFVs,
},
) or return (0, "Couldn't load data from '$datafile' for import:\n\nERROR:" . $@);
}
@@ -930,6 +931,8 @@ sub InsertData {
$RT::Logger->debug("Creating groups...");
foreach my $item (@Groups) {
my $attributes = delete $item->{ Attributes };
+ my $ocfvs = delete $item->{ CustomFields };
+
my $new_entry = RT::Group->new( RT->SystemUser );
$item->{'Domain'} ||= 'UserDefined';
my $member_of = delete $item->{'MemberOf'};
@@ -942,6 +945,8 @@ sub InsertData {
$RT::Logger->debug($return .".");
$_->{Object} = $new_entry for @{$attributes || []};
push @Attributes, @{$attributes || []};
+ $_->{Object} = $new_entry for @{$ocfvs || []};
+ push @OCFVs, @{$ocfvs || []};
}
if ( $member_of ) {
$member_of = [ $member_of ] unless ref $member_of eq 'ARRAY';
@@ -991,6 +996,7 @@ sub InsertData {
$item->{'Password'} = $root_password;
}
my $attributes = delete $item->{ Attributes };
+ my $ocfvs = delete $item->{ CustomFields };
no warnings 'redefine';
local *RT::User::CanonicalizeUserInfo = sub { 1 }
@@ -1004,6 +1010,8 @@ sub InsertData {
$RT::Logger->debug( $return ."." );
$_->{Object} = $new_entry for @{$attributes || []};
push @Attributes, @{$attributes || []};
+ $_->{Object} = $new_entry for @{$ocfvs || []};
+ push @OCFVs, @{$ocfvs || []};
}
if ( $member_of ) {
$member_of = [ $member_of ] unless ref $member_of eq 'ARRAY';
@@ -1070,6 +1078,8 @@ sub InsertData {
$RT::Logger->debug("Creating queues...");
for my $item (@Queues) {
my $attributes = delete $item->{ Attributes };
+ my $ocfvs = delete $item->{ CustomFields };
+
my $new_entry = RT::Queue->new(RT->SystemUser);
my ( $return, $msg ) = $new_entry->Create(%$item);
unless ( $return ) {
@@ -1078,6 +1088,8 @@ sub InsertData {
$RT::Logger->debug( $return ."." );
$_->{Object} = $new_entry for @{$attributes || []};
push @Attributes, @{$attributes || []};
+ $_->{Object} = $new_entry for @{$ocfvs || []};
+ push @OCFVs, @{$ocfvs || []};
}
}
$RT::Logger->debug("done.");
@@ -1149,6 +1161,8 @@ sub InsertData {
for my $item (@Catalogs) {
my $attributes = delete $item->{ Attributes };
+ my $ocfvs = delete $item->{ CustomFields };
+
my $new_entry = RT::Asset->new(RT->SystemUser);
my ( $return, $msg ) = $new_entry->Create(%$item);
unless ( $return ) {
@@ -1160,6 +1174,8 @@ sub InsertData {
$_->{Object} = $new_entry for @{$attributes || []};
push @Attributes, @{$attributes || []};
+ $_->{Object} = $new_entry for @{$ocfvs || []};
+ push @OCFVs, @{$ocfvs || []};
}
$RT::Logger->debug("done.");
@@ -1483,6 +1499,31 @@ sub InsertData {
}
$RT::Logger->debug("done.");
}
+
+ if ( @OCFVs ) {
+ $RT::Logger->debug("Creating ObjectCustomFieldValues...");
+
+ for my $item (@OCFVs) {
+ my $obj = delete $item->{Object};
+
+ if ( ref $obj eq 'CODE' ) {
+ $obj = $obj->();
+ }
+
+ $item->{Field} = delete $item->{CustomField} if $item->{CustomField};
+ $item->{Value} = delete $item->{Content} if $item->{Content};
+
+ my ( $return, $msg ) = $obj->AddCustomFieldValue (%$item);
+ unless ( $return ) {
+ $RT::Logger->error( $msg );
+ }
+ else {
+ $RT::Logger->debug( $return ."." );
+ }
+ }
+ $RT::Logger->debug("done.");
+ }
+
if ( @Attributes ) {
$RT::Logger->debug("Creating attributes...");
my $sys = RT::System->new(RT->SystemUser);
commit dad2ed48853b91fdc47e9e32aa9a17349862a041
Author: Shawn M Moore <shawn at bestpractical.com>
Date: Tue Mar 21 16:21:51 2017 +0000
Export OCFVs as CustomFields key on object for initialdata
diff --git a/lib/RT/Migrate/Serializer/JSON.pm b/lib/RT/Migrate/Serializer/JSON.pm
index 77ca7f7..5619372 100644
--- a/lib/RT/Migrate/Serializer/JSON.pm
+++ b/lib/RT/Migrate/Serializer/JSON.pm
@@ -326,6 +326,26 @@ sub CanonicalizeGroupMembers {
}
}
+sub CanonicalizeObjectCustomFieldValues {
+ my $self = shift;
+
+ for my $record (values %{ $self->{Records}{'RT::ObjectCustomFieldValue'} }) {
+ my $object = $self->_GetSerializedByRef(delete $record->{Object});
+
+ my $cf = $self->_GetSerializedByRef(delete $record->{CustomField});
+ $record->{CustomField} = $cf->{Name};
+
+ delete @$record{qw/id Created Creator LastUpdated LastUpdatedBy/};
+
+ $record->{Content} = $record->{LargeContent} if $record->{LargeContent};
+ delete $record->{LargeContent};
+
+ push @{ $object->{CustomFields} }, $record;
+ }
+
+ delete $self->{Records}{'RT::ObjectCustomFieldValue'};
+}
+
sub CanonicalizeObjects {
my $self = shift;
@@ -390,6 +410,7 @@ sub WriteFile {
my %output;
$self->CanonicalizeObjects;
+ $self->CanonicalizeObjectCustomFieldValues;
$self->CanonicalizeACLs;
$self->CanonicalizeUsers;
$self->CanonicalizeGroupMembers;
-----------------------------------------------------------------------
More information about the rt-commit
mailing list