# --
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --
package Kernel::System::Console::Command::Dev::Tools::Migrate::ConfigXMLStructure;
use strict;
use warnings;
use File::Basename;
use parent qw(Kernel::System::Console::BaseCommand);
our @ObjectDependencies = (
'Kernel::System::Main',
'Kernel::System::SysConfig::Migration',
);
sub Configure {
my ( $Self, %Param ) = @_;
$Self->Description('Migrate XML configuration files from OTRS 5 to OTRS 6.');
$Self->AddOption(
Name => 'source-directory',
Description => "Directory which contains configuration XML files that needs to be migrated.",
Required => 1,
HasValue => 1,
ValueRegex => qr/.*/smx,
);
return;
}
sub PreRun {
my ( $Self, %Param ) = @_;
# Perform any custom validations here. Command execution can be stopped with die().
my $Directory = $Self->GetOption('source-directory');
if ( $Directory && !-d $Directory ) {
die "Directory $Directory does not exist.\n";
}
return;
}
sub Run {
my ( $Self, %Param ) = @_;
$Self->Print("Migrating configuration XML files...\n");
# needed objects
my $MainObject = $Kernel::OM->Get('Kernel::System::Main');
my $Directory = $Self->GetOption('source-directory');
my @Files = $MainObject->DirectoryRead(
Directory => $Directory,
Filter => '*.xml',
);
if ( !@Files ) {
$Self->PrintError("No XML files found in $Directory.");
return $Self->ExitCodeError();
}
if ( !-d "$Directory/XML" ) {
# Create XML directory
mkdir "$Directory/XML";
}
FILE:
for my $File (@Files) {
my $TargetPath = "$Directory/XML/" . basename($File);
$Self->Print("$File -> $TargetPath...");
# Read XML file
my $ContentRef = $MainObject->FileRead(
Location => $File,
Mode => 'utf8',
);
# Get file name without extension
my $FileName = $File;
$FileName =~ s{^.*/(.*?)\..*$}{$1}gsmx;
# Migrate
my $Result = $Kernel::OM->Get('Kernel::System::SysConfig::Migration')->MigrateXMLStructure(
Content => $$ContentRef,
Name => $FileName,
);
if ( !$Result ) {
$Self->Print("Failed.\n");
next FILE;
}
# Save result
my $Success = $MainObject->FileWrite(
Location => $TargetPath,
Content => \$Result,
Mode => 'utf8',
);
$Self->Print(" Done.\n");
}
$Self->Print("\nDone.\n");
return $Self->ExitCodeOk();
}
1;
=head1 TERMS AND CONDITIONS
This software is part of the OTRS project (L).
This software comes with ABSOLUTELY NO WARRANTY. For details, see
the enclosed file COPYING for license information (GPL). If you
did not receive this file, see L.
=cut