[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